@sumaris-net/ngx-components 2.12.21 → 2.12.22

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.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
1
+ import { booleanAttribute, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { MatColumnDef } from '@angular/material/table';
3
3
  import { MatMenuTrigger } from '@angular/material/menu';
4
4
  import * as i0 from "@angular/core";
@@ -50,7 +50,7 @@ export class ActionsColumnComponent {
50
50
  this.canConfirmAndAdd = this.canConfirmAndAdd ?? this.confirmAndAddClick.observed;
51
51
  this.canBackward = this.canBackward ?? this.backward.observed;
52
52
  this.canForward = this.canForward ?? this.forward.observed;
53
- this.dirtyIcon = this.dirtyIcon ?? 'star';
53
+ this.dirtyIcon = this.dirtyIcon === true ? 'star' : this.dirtyIcon === false ? null : this.dirtyIcon ?? 'star';
54
54
  }
55
55
  ngOnDestroy() {
56
56
  this.table.removeColumnDef(this.columnDef);
@@ -66,7 +66,7 @@ export class ActionsColumnComponent {
66
66
  this.forward.unsubscribe();
67
67
  }
68
68
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionsColumnComponent, deps: [{ token: i1.MatTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
69
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: "stickyEnd", canCancel: "canCancel", canConfirm: "canConfirm", canDelete: "canDelete", canBackward: "canBackward", canForward: "canForward", canConfirmAndAdd: "canConfirmAndAdd", dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
70
70
  }
71
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionsColumnComponent, decorators: [{
72
72
  type: Component,
@@ -82,19 +82,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
82
82
  }], style: [{
83
83
  type: Input
84
84
  }], stickyEnd: [{
85
- type: Input
85
+ type: Input,
86
+ args: [{ transform: booleanAttribute }]
86
87
  }], canCancel: [{
87
- type: Input
88
+ type: Input,
89
+ args: [{ transform: booleanAttribute }]
88
90
  }], canConfirm: [{
89
- type: Input
91
+ type: Input,
92
+ args: [{ transform: booleanAttribute }]
90
93
  }], canDelete: [{
91
- type: Input
94
+ type: Input,
95
+ args: [{ transform: booleanAttribute }]
92
96
  }], canBackward: [{
93
- type: Input
97
+ type: Input,
98
+ args: [{ transform: booleanAttribute }]
94
99
  }], canForward: [{
95
- type: Input
100
+ type: Input,
101
+ args: [{ transform: booleanAttribute }]
96
102
  }], canConfirmAndAdd: [{
97
- type: Input
103
+ type: Input,
104
+ args: [{ transform: booleanAttribute }]
98
105
  }], dirtyIcon: [{
99
106
  type: Input
100
107
  }], optionsTitle: [{
@@ -117,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
117
124
  }], forward: [{
118
125
  type: Output
119
126
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckksT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLHNCQUFzQjtJQTJCdkI7SUFDQTtJQTNCZSxTQUFTLENBQWU7SUFDdEIsY0FBYyxDQUFpQjtJQUVqRCxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ3pCLEtBQUssR0FBMEIsT0FBTyxDQUFDO0lBQ3ZDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsU0FBUyxDQUFVO0lBQ25CLFVBQVUsQ0FBVTtJQUNwQixTQUFTLENBQVU7SUFDbkIsV0FBVyxDQUFVO0lBQ3JCLFVBQVUsQ0FBVTtJQUNwQixnQkFBZ0IsQ0FBVTtJQUMxQixTQUFTLENBQW1CO0lBQzVCLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztJQUM3QywyREFBMkQ7SUFDM0MsU0FBUyxDQUFTO0lBQ3pCLFlBQVksQ0FBZ0M7SUFFM0MsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFDekMsbUJBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFDbkUsc0JBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFDdEUsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFDbEUsUUFBUSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ3hELE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztJQUVqRSxZQUNVLEtBQW9CLEVBQ3BCLEVBQXFCO1FBRHJCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFDcEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFN0IsbUZBQW1GO1FBQ25GLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUNsRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7d0dBM0RVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLGlyQkFDdEIsWUFBWSxpRkFDWixjQUFjLGdEQ1ozQiw0L09BME5BOzs0RkRoTmEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjs2R0FLTCxTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ksY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVVLFNBQVM7c0JBQXhCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNUYWJsZUVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFjdGlvbnMtY29sdW1uJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NvbHVtbkNvbXBvbmVudDxUIGV4dGVuZHMgVGFibGVFbGVtZW50PGFueT4gfCBBc3luY1RhYmxlRWxlbWVudDxhbnk+ID0gVGFibGVFbGVtZW50PGFueT4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKE1hdENvbHVtbkRlZikgY29sdW1uRGVmOiBNYXRDb2x1bW5EZWY7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICBASW5wdXQoKSBtYXRDb2x1bW5EZWYgPSAnYWN0aW9ucyc7XG4gIEBJbnB1dCgpIHN0eWxlOiAndGFibGUnIHwgJ21hdC10YWJsZScgPSAndGFibGUnO1xuICBASW5wdXQoKSBzdGlja3lFbmQgPSBmYWxzZTtcbiAgQElucHV0KCkgY2FuQ2FuY2VsOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5Db25maXJtOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5EZWxldGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhbkJhY2t3YXJkOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5Gb3J3YXJkOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5Db25maXJtQW5kQWRkOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXJ0eUljb246IGJvb2xlYW4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGlvbnNUaXRsZSA9ICdDT01NT04uQlROX09QVElPTlMnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQgfT47XG5cbiAgQE91dHB1dCgpIG9wdGlvbnNDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxPckRlbGV0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtRWRpdENyZWF0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtQW5kQWRkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IEV2ZW50OyByb3c6IFQgfT4oKTtcbiAgQE91dHB1dCgpIGJhY2t3YXJkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBmb3J3YXJkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0YWJsZTogTWF0VGFibGU8YW55PixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvLyBUT0RPIGF1dG8gY29uZmlndXJlIHVzaW5nIEFwcFRhYmxlID8gKG5lZWQgYSBmb3J3YXJkUmVmKCkgaW4gdGhlIHRhYmxlIGNvbXBvbmVudFxuICAgIC8vQE9wdGlvbmFsKCkgcHJpdmF0ZSBhcHBUYWJsZTogQXBwVGFibGU8YW55PlxuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgW2FjdGlvbnMtY29sdW1uXSB0aGlzIGNvbHVtbiBjb21wb25lbnQgbXVzdCBiZSBpbnNpZGUgYSBNYXRUYWJsZSBjb21wb25lbnRgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKHRoaXMuY29sdW1uRGVmKTtcbiAgICB0aGlzLmNhbkNhbmNlbCA9IHRoaXMuY2FuQ2FuY2VsID8/IHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkNvbmZpcm0gPSB0aGlzLmNhbkNvbmZpcm0gPz8gdGhpcy5jb25maXJtRWRpdENyZWF0ZUNsaWNrLm9ic2VydmVkO1xuICAgIHRoaXMuY2FuRGVsZXRlID0gdGhpcy5jYW5EZWxldGUgPz8gdGhpcy5jYW5jZWxPckRlbGV0ZUNsaWNrLm9ic2VydmVkO1xuICAgIHRoaXMuY2FuQ29uZmlybUFuZEFkZCA9IHRoaXMuY2FuQ29uZmlybUFuZEFkZCA/PyB0aGlzLmNvbmZpcm1BbmRBZGRDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkJhY2t3YXJkID0gdGhpcy5jYW5CYWNrd2FyZCA/PyB0aGlzLmJhY2t3YXJkLm9ic2VydmVkO1xuICAgIHRoaXMuY2FuRm9yd2FyZCA9IHRoaXMuY2FuRm9yd2FyZCA/PyB0aGlzLmZvcndhcmQub2JzZXJ2ZWQ7XG4gICAgdGhpcy5kaXJ0eUljb24gPSB0aGlzLmRpcnR5SWNvbiA/PyAnc3Rhcic7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRhYmxlLnJlbW92ZUNvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9wdGlvbnNDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29uZmlybUFuZEFkZENsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJhY2t3YXJkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5iYWNrd2FyZC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9yd2FyZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm9yd2FyZC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwibWF0Q29sdW1uRGVmXCIgW3N0aWNreUVuZF09XCJzdGlja3lFbmRcIiBbbmdTd2l0Y2hdPVwic3R5bGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYmxlJ1wiPlxuICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzXT1cImNsYXNzTGlzdFwiIFtjbGFzcy5tYXQtY29sdW1uLXN0aWNreV09XCJzdGlja3lFbmRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICpuZ0lmPVwib3B0aW9uc0NsaWNrLm9ic2VydmVkXCJcbiAgICAgICAgW3RpdGxlXT1cIm9wdGlvbnNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJvcHRpb25zQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvdGg+XG4gICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtjbGFzc109XCJjbGFzc0xpc3RcIj5cbiAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICBAaWYgKHJvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiBjbGFzcz1cImNlbnRlclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIENvbmZpcm0gYnV0dG9uIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgKm5nSWY9XCJjYW5Db25maXJtICYmIHJvdy5lZGl0aW5nICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5ICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQVBQTFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUVkaXRDcmVhdGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPmNoZWNrbWFyazwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gbmV3IHJvdyAtLT5cbiAgICAgICAgQGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICAgICAgPCEtLSBkZWxldGUgYnV0dG9uIC0tPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAqbmdJZj1cImNhbkRlbGV0ZSAmJiByb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gYWRkIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCIhY2FuRm9yd2FyZCAmJiBjYW5Db25maXJtQW5kQWRkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BREQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtQW5kQWRkQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBleGlzdGluZyByb3cgLS0+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5DYW5jZWwgJiYgcm93LnZhbGlkYXRvcj8uZGlydHlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX1VORE8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPnVuZG88L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBuZXh0IGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIGRpcnR5IGljb24gLS0+XG4gICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICBAaWYgKGNhbkJhY2t3YXJkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJiYWNrd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuXG4gICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtYXQtdGFibGUnXCI+XG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3NdPVwiY2xhc3NMaXN0XCIgW2NsYXNzLm1hdC1jb2x1bW4tc3RpY2t5XT1cInN0aWNreUVuZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgKm5nSWY9XCJvcHRpb25zQ2xpY2sub2JzZXJ2ZWRcIlxuICAgICAgICBbdGl0bGVdPVwib3B0aW9uc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wdGlvbnNDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtjbGFzc109XCJjbGFzc0xpc3RcIj5cbiAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICBAaWYgKHJvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiBjbGFzcz1cImNlbnRlclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIENvbmZpcm0gYnV0dG9uIC0tPlxuICAgICAgICBAaWYgKGNhbkNvbmZpcm0gJiYgcm93LnZhbGlkYXRvcj8uZGlydHkgJiYgcm93LnZhbGlkYXRvci52YWxpZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQVBQTFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtRWRpdENyZWF0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrbWFyazwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgIEBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgQGlmICghY2FuRm9yd2FyZCAmJiBjYW5Db25maXJtQW5kQWRkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBuZXh0IGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIGV4aXN0aW5nIHJvdyAtLT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBjYW5jZWwgYnV0dG9uIC0tPlxuICAgICAgICAgIEBpZiAoY2FuQ2FuY2VsICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX1VORE8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPnVuZG88L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBuZXh0IGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIGRpcnR5IGljb24gLS0+XG4gICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gYmFja3dhcmQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgIEBpZiAoY2FuQmFja3dhcmQpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgKGZvY3VzKT1cImJhY2t3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWNlbGw+XG5cbiAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9tYXQtZm9vdGVyLWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sc0JBQXNCO0lBMkJ2QjtJQUNBO0lBM0JlLFNBQVMsQ0FBZTtJQUN0QixjQUFjLENBQWlCO0lBRWpELFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsS0FBSyxHQUEwQixPQUFPLENBQUM7SUFDUixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsU0FBUyxDQUFVO0lBQ25CLFdBQVcsQ0FBVTtJQUNyQixVQUFVLENBQVU7SUFDcEIsZ0JBQWdCLENBQVU7SUFDekQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixZQUFZLENBQWdDO0lBRTNDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQ3pDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ25FLHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ3RFLGtC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O3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBRWhCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNrQyxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFVSxTQUFTO3NCQUF4QixLQUFLO3VCQUFDLE9BQU87Z0JBQ0wsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNUYWJsZUVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFjdGlvbnMtY29sdW1uJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NvbHVtbkNvbXBvbmVudDxUIGV4dGVuZHMgVGFibGVFbGVtZW50PGFueT4gfCBBc3luY1RhYmxlRWxlbWVudDxhbnk+ID0gVGFibGVFbGVtZW50PGFueT4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKE1hdENvbHVtbkRlZikgY29sdW1uRGVmOiBNYXRDb2x1bW5EZWY7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICBASW5wdXQoKSBtYXRDb2x1bW5EZWYgPSAnYWN0aW9ucyc7XG4gIEBJbnB1dCgpIHN0eWxlOiAndGFibGUnIHwgJ21hdC10YWJsZScgPSAndGFibGUnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RpY2t5RW5kID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5DYW5jZWw6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Db25maXJtOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQmFja3dhcmQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Gb3J3YXJkOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ29uZmlybUFuZEFkZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlydHlJY29uOiBib29sZWFuIHwgc3RyaW5nO1xuICBASW5wdXQoKSBvcHRpb25zVGl0bGUgPSAnQ09NTU9OLkJUTl9PUFRJT05TJztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuICBASW5wdXQoKSBjZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuXG4gIEBPdXRwdXQoKSBvcHRpb25zQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsT3JEZWxldGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUVkaXRDcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUFuZEFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBiYWNrd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgZm9yd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFibGU6IE1hdFRhYmxlPGFueT4sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETyBhdXRvIGNvbmZpZ3VyZSB1c2luZyBBcHBUYWJsZSA/IChuZWVkIGEgZm9yd2FyZFJlZigpIGluIHRoZSB0YWJsZSBjb21wb25lbnRcbiAgICAvL0BPcHRpb25hbCgpIHByaXZhdGUgYXBwVGFibGU6IEFwcFRhYmxlPGFueT5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFthY3Rpb25zLWNvbHVtbl0gdGhpcyBjb2x1bW4gY29tcG9uZW50IG11c3QgYmUgaW5zaWRlIGEgTWF0VGFibGUgY29tcG9uZW50YCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5jYW5DYW5jZWwgPSB0aGlzLmNhbkNhbmNlbCA/PyB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5Db25maXJtID0gdGhpcy5jYW5Db25maXJtID8/IHRoaXMuY29uZmlybUVkaXRDcmVhdGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IHRoaXMuY2FuRGVsZXRlID8/IHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPSB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPz8gdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5CYWNrd2FyZCA9IHRoaXMuY2FuQmFja3dhcmQgPz8gdGhpcy5iYWNrd2FyZC5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkZvcndhcmQgPSB0aGlzLmNhbkZvcndhcmQgPz8gdGhpcy5mb3J3YXJkLm9ic2VydmVkO1xuICAgIHRoaXMuZGlydHlJY29uID0gdGhpcy5kaXJ0eUljb24gPT09IHRydWUgPyAnc3RhcicgOiB0aGlzLmRpcnR5SWNvbiA9PT0gZmFsc2UgPyBudWxsIDogdGhpcy5kaXJ0eUljb24gPz8gJ3N0YXInO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICAgIHRoaXMub3B0aW9uc0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNvbmZpcm1BbmRBZGRDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY29uZmlybUFuZEFkZENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5iYWNrd2FyZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYmFja3dhcmQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcndhcmQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvcndhcmQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm1hdENvbHVtbkRlZlwiIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBDb25maXJtIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICpuZ0lmPVwiY2FuQ29uZmlybSAmJiByb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FQUExZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5jaGVja21hcms8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgIEBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWNhbkZvcndhcmQgJiYgY2FuQ29uZmlybUFuZEFkZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQUREJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIG5leHQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgQGlmIChjYW5Gb3J3YXJkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZm9yd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gZXhpc3Rpbmcgcm93IC0tPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8IS0tIGNhbmNlbCBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQ2FuY2VsICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJkaXJ0eUljb25cIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwiZGlydHktaWNvblwiIHRhYmluZGV4PVwiLTFcIj48L2lvbi1pY29uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgQGlmIChjYW5CYWNrd2FyZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiYmFja3dhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC90ZD5cblxuICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWF0LXRhYmxlJ1wiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzXT1cImNsYXNzTGlzdFwiIFtjbGFzcy5tYXQtY29sdW1uLXN0aWNreV09XCJzdGlja3lFbmRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICpuZ0lmPVwib3B0aW9uc0NsaWNrLm9ic2VydmVkXCJcbiAgICAgICAgW3RpdGxlXT1cIm9wdGlvbnNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJvcHRpb25zQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBDb25maXJtIGJ1dHRvbiAtLT5cbiAgICAgICAgQGlmIChjYW5Db25maXJtICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5ICYmIHJvdy52YWxpZGF0b3IudmFsaWQpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FQUExZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUVkaXRDcmVhdGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVja21hcms8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBuZXcgcm93IC0tPlxuICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuRGVsZXRlICYmIHJvdy52YWxpZGF0b3I/LmludmFsaWRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBhZGQgYnV0dG9uIC0tPlxuICAgICAgICAgIEBpZiAoIWNhbkZvcndhcmQgJiYgY2FuQ29uZmlybUFuZEFkZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BREQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1BbmRBZGRDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBleGlzdGluZyByb3cgLS0+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICBAaWYgKGNhbkNhbmNlbCAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJkaXJ0eUljb25cIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwiZGlydHktaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICBAaWYgKGNhbkJhY2t3YXJkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJiYWNrd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jZWxsPlxuXG4gICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,21 +1,21 @@
1
- import { booleanAttribute, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
1
+ import { booleanAttribute, Component, EventEmitter, Input, Optional, Output, ViewChild, } from '@angular/core';
2
2
  import { MatColumnDef } from '@angular/material/table';
3
3
  import { MatMenuTrigger } from '@angular/material/menu';
4
- import { AppTable } from '../table.class';
5
- import { AppAsyncTable } from '../async-table.class';
6
4
  import * as i0 from "@angular/core";
7
5
  import * as i1 from "@angular/material/table";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@ionic/angular";
10
- import * as i4 from "@angular/material/icon";
11
- import * as i5 from "@angular/material/button";
12
- import * as i6 from "@ngx-translate/core";
6
+ import * as i2 from "../table.class";
7
+ import * as i3 from "../async-table.class";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@ionic/angular";
10
+ import * as i6 from "@angular/material/icon";
11
+ import * as i7 from "@angular/material/button";
12
+ import * as i8 from "@ngx-translate/core";
13
13
  export class NavActionsColumnComponent {
14
14
  matTable;
15
15
  cd;
16
- appTable;
17
16
  columnDef;
18
17
  matMenuTrigger;
18
+ appTable;
19
19
  matColumnDef = 'actions';
20
20
  style = 'table';
21
21
  stickyEnd = false;
@@ -26,39 +26,45 @@ export class NavActionsColumnComponent {
26
26
  classList;
27
27
  cellTemplate;
28
28
  optionsClick = new EventEmitter();
29
- constructor(injector, matTable, cd) {
29
+ constructor(matTable, cd, appTable, appAsyncTable) {
30
30
  this.matTable = matTable;
31
31
  this.cd = cd;
32
32
  if (!matTable)
33
33
  throw new Error(`[actions-column] this column component must be inside a MatTable component`);
34
- this.appTable = injector.get(AppTable, null, { optional: true }) || injector.get(AppAsyncTable, null, { optional: true });
35
- if (!this.appTable)
36
- throw new Error(`[actions-column] this column component must be inside a AppTable component`);
34
+ this.appTable = appTable ?? appAsyncTable;
37
35
  }
38
36
  ngOnInit() {
39
37
  // Default values
40
- this.dirtyIcon = this.dirtyIcon ?? 'star';
41
38
  this.showPending = this.showPending ?? true;
39
+ this.dirtyIcon = this.dirtyIcon === true ? 'star' : this.dirtyIcon === false ? null : this.dirtyIcon ?? 'star';
42
40
  this.cd.detectChanges();
43
41
  this.matTable.addColumnDef(this.columnDef);
42
+ if (!this.appTable)
43
+ throw new Error(`[nav-actions-column] No AppTable or AppAsyncTable found. Please define a provider or set input '[appTable]'`);
44
44
  }
45
45
  ngOnDestroy() {
46
46
  this.matTable.removeColumnDef(this.columnDef);
47
47
  this.optionsClick.complete();
48
48
  this.optionsClick.unsubscribe();
49
49
  }
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavActionsColumnComponent, deps: [{ token: i0.Injector }, { token: i1.MatTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NavActionsColumnComponent, selector: "app-nav-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], showPending: ["showPending", "showPending", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate" }, outputs: { optionsClick: "optionsClick" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- valid row or invalid existing row -->\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- NOT editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- not editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
50
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavActionsColumnComponent, deps: [{ token: i1.MatTable }, { token: i0.ChangeDetectorRef }, { token: i2.AppTable, optional: true }, { token: i3.AppAsyncTable, optional: true }], target: i0.ɵɵFactoryTarget.Component });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NavActionsColumnComponent, selector: "app-nav-actions-column", inputs: { appTable: "appTable", matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], showPending: ["showPending", "showPending", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate" }, outputs: { optionsClick: "optionsClick" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- valid row or invalid existing row -->\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- NOT editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- not editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
52
52
  }
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavActionsColumnComponent, decorators: [{
54
54
  type: Component,
55
55
  args: [{ selector: 'app-nav-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- valid row or invalid existing row -->\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- NOT editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"appTable.cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"appTable.confirmAndForward($event, row)\"></button>\n }\n\n <!-- not editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"appTable.confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"] }]
56
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.MatTable }, { type: i0.ChangeDetectorRef }], propDecorators: { columnDef: [{
56
+ }], ctorParameters: () => [{ type: i1.MatTable }, { type: i0.ChangeDetectorRef }, { type: i2.AppTable, decorators: [{
57
+ type: Optional
58
+ }] }, { type: i3.AppAsyncTable, decorators: [{
59
+ type: Optional
60
+ }] }], propDecorators: { columnDef: [{
57
61
  type: ViewChild,
58
62
  args: [MatColumnDef]
59
63
  }], matMenuTrigger: [{
60
64
  type: ViewChild,
61
65
  args: [MatMenuTrigger]
66
+ }], appTable: [{
67
+ type: Input
62
68
  }], matColumnDef: [{
63
69
  type: Input
64
70
  }], style: [{
@@ -81,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
81
87
  }], optionsClick: [{
82
88
  type: Output
83
89
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBT3JELE1BQU0sT0FBTyx5QkFBeUI7SUFvQjFCO0lBQ0E7SUFwQlMsUUFBUSxDQUFxQztJQUV2QyxTQUFTLENBQWU7SUFDdEIsY0FBYyxDQUFpQjtJQUVqRCxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ3pCLEtBQUssR0FBMEIsT0FBTyxDQUFDO0lBQ1IsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixXQUFXLENBQVU7SUFDcEQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixZQUFZLENBQXlFO0lBRXBGLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBRW5ELFlBQ0UsUUFBa0IsRUFDVixRQUF1QixFQUN2QixFQUFxQjtRQURyQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRTdCLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUgsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxRQUFRO1FBQ04saUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUU1QyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzt3R0F6Q1UseUJBQXlCOzRGQUF6Qix5QkFBeUIsb0lBUWhCLGdCQUFnQiwrQ0FDaEIsZ0JBQWdCLDBPQU56QixZQUFZLGlGQUNaLGNBQWMsZ0RDNUIzQixxMElBdUhBOzs0RkQvRmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHdCQUF3QjtvSUFPVCxTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ksY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDa0MsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNMLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jVGFibGVFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBBcHBUYWJsZSB9IGZyb20gJy4uL3RhYmxlLmNsYXNzJztcbmltcG9ydCB7IEFwcEFzeW5jVGFibGUgfSBmcm9tICcuLi9hc3luYy10YWJsZS5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uYXYtYWN0aW9ucy1jb2x1bW4nLFxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTmF2QWN0aW9uc0NvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcFRhYmxlOiBBcHBUYWJsZTxhbnk+IHwgQXBwQXN5bmNUYWJsZTxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoTWF0Q29sdW1uRGVmKSBjb2x1bW5EZWY6IE1hdENvbHVtbkRlZjtcbiAgQFZpZXdDaGlsZChNYXRNZW51VHJpZ2dlcikgbWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gIEBJbnB1dCgpIG1hdENvbHVtbkRlZiA9ICdhY3Rpb25zJztcbiAgQElucHV0KCkgc3R5bGU6ICd0YWJsZScgfCAnbWF0LXRhYmxlJyA9ICd0YWJsZSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzdGlja3lFbmQgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dQZW5kaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXJ0eUljb246IGJvb2xlYW4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGlvbnNUaXRsZSA9ICdDT01NT04uQlROX09QVElPTlMnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFRhYmxlRWxlbWVudDxhbnk+IHwgQXN5bmNUYWJsZUVsZW1lbnQ8YW55PiB9PjtcblxuICBAT3V0cHV0KCkgb3B0aW9uc0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBtYXRUYWJsZTogTWF0VGFibGU8YW55PixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBpZiAoIW1hdFRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFthY3Rpb25zLWNvbHVtbl0gdGhpcyBjb2x1bW4gY29tcG9uZW50IG11c3QgYmUgaW5zaWRlIGEgTWF0VGFibGUgY29tcG9uZW50YCk7XG4gICAgdGhpcy5hcHBUYWJsZSA9IGluamVjdG9yLmdldChBcHBUYWJsZSwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSB9KSB8fCBpbmplY3Rvci5nZXQoQXBwQXN5bmNUYWJsZSwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBpZiAoIXRoaXMuYXBwVGFibGUpIHRocm93IG5ldyBFcnJvcihgW2FjdGlvbnMtY29sdW1uXSB0aGlzIGNvbHVtbiBjb21wb25lbnQgbXVzdCBiZSBpbnNpZGUgYSBBcHBUYWJsZSBjb21wb25lbnRgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgdGhpcy5kaXJ0eUljb24gPSB0aGlzLmRpcnR5SWNvbiA/PyAnc3Rhcic7XG4gICAgdGhpcy5zaG93UGVuZGluZyA9IHRoaXMuc2hvd1BlbmRpbmcgPz8gdHJ1ZTtcblxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMubWF0VGFibGUuYWRkQ29sdW1uRGVmKHRoaXMuY29sdW1uRGVmKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubWF0VGFibGUucmVtb3ZlQ29sdW1uRGVmKHRoaXMuY29sdW1uRGVmKTtcbiAgICB0aGlzLm9wdGlvbnNDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMub3B0aW9uc0NsaWNrLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJtYXRDb2x1bW5EZWZcIiBbc3RpY2t5RW5kXT1cInN0aWNreUVuZFwiIFtuZ1N3aXRjaF09XCJzdHlsZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XG4gICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3NdPVwiY2xhc3NMaXN0XCIgW2NsYXNzLm1hdC1jb2x1bW4tc3RpY2t5XT1cInN0aWNreUVuZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgKm5nSWY9XCJvcHRpb25zQ2xpY2sub2JzZXJ2ZWRcIlxuICAgICAgICBbdGl0bGVdPVwib3B0aW9uc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wdGlvbnNDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC90aD5cbiAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgICAgQGlmIChyb3cuZWRpdGluZykge1xuICAgICAgICA8IS0tIHBlbmRpbmcgLS0+XG4gICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgIDxpb24tc3Bpbm5lciBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1BlbmRpbmdcIiBuYW1lPVwiZG90c1wiIGNsYXNzPVwiY2VudGVyXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gaW52YWxpZCBuZXcgcm93IC0tPlxuICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZCkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcFRhYmxlLmNhbmNlbE9yRGVsZXRlKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gdmFsaWQgcm93IG9yIGludmFsaWQgZXhpc3Rpbmcgcm93IC0tPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8IS0tIGZvcndhcmQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCIgKGZvY3VzKT1cImFwcFRhYmxlLmNvbmZpcm1BbmRGb3J3YXJkKCRldmVudCwgcm93KVwiPjwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBOT1QgZWRpdGluZyByb3cgLS0+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJkaXJ0eUljb25cIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwiZGlydHktaWNvblwiIHRhYmluZGV4PVwiLTFcIj48L2lvbi1pY29uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgIChmb2N1cyk9XCJhcHBUYWJsZS5jb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuXG4gICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvdGQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtYXQtdGFibGUnXCI+XG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3NdPVwiY2xhc3NMaXN0XCIgW2NsYXNzLm1hdC1jb2x1bW4tc3RpY2t5XT1cInN0aWNreUVuZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgKm5nSWY9XCJvcHRpb25zQ2xpY2sub2JzZXJ2ZWRcIlxuICAgICAgICBbdGl0bGVdPVwib3B0aW9uc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wdGlvbnNDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtjbGFzc109XCJjbGFzc0xpc3RcIj5cbiAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICBAaWYgKHJvdy52YWxpZGF0b3I/LnBlbmRpbmcpIHtcbiAgICAgICAgICA8aW9uLXNwaW5uZXIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dQZW5kaW5nXCIgbmFtZT1cImRvdHNcIiBjbGFzcz1cImNlbnRlclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGludmFsaWQgbmV3IHJvdyAtLT5cbiAgICAgICAgQGlmIChyb3cuaWQgPT09IC0xICYmIHJvdy52YWxpZGF0b3I/LmludmFsaWQpIHtcbiAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhcHBUYWJsZS5jYW5jZWxPckRlbGV0ZSgkZXZlbnQsIHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZm9yd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIiAoZm9jdXMpPVwiYXBwVGFibGUuY29uZmlybUFuZEZvcndhcmQoJGV2ZW50LCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIG5vdCBlZGl0aW5nIHJvdyAtLT5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIGRpcnR5IGljb24gLS0+XG4gICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gYmFja3dhcmQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAoZm9jdXMpPVwiYXBwVGFibGUuY29uZmlybUFuZEJhY2t3YXJkKCRldmVudCwgcm93KVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIH1cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2VsbD5cblxuICAgIDxtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L21hdC1mb290ZXItY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVN4RCxNQUFNLE9BQU8seUJBQXlCO0lBa0IxQjtJQUNBO0lBbEJlLFNBQVMsQ0FBZTtJQUN0QixjQUFjLENBQWlCO0lBRWpELFFBQVEsQ0FBcUM7SUFDN0MsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUN6QixLQUFLLEdBQTBCLE9BQU8sQ0FBQztJQUNSLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsV0FBVyxDQUFVO0lBQ3BELFNBQVMsQ0FBbUI7SUFDNUIsWUFBWSxHQUFHLG9CQUFvQixDQUFDO0lBQzdDLDJEQUEyRDtJQUMzQyxTQUFTLENBQVM7SUFDekIsWUFBWSxDQUFnQztJQUUzQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUVuRCxZQUNVLFFBQXVCLEVBQ3ZCLEVBQXFCLEVBQ2pCLFFBQXVCLEVBQ3ZCLGFBQWlDO1FBSHJDLGFBQVEsR0FBUixRQUFRLENBQWU7UUFDdkIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFJN0IsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksYUFBYSxDQUFDO0lBQzVDLENBQUM7SUFFRCxRQUFRO1FBQ04saUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztRQUUvRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2R0FBNkcsQ0FBQyxDQUFDO0lBQ25JLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3dHQTNDVSx5QkFBeUI7NEZBQXpCLHlCQUF5QiwwSkFPaEIsZ0JBQWdCLCtDQUNoQixnQkFBZ0IsME9BUHpCLFlBQVksaUZBQ1osY0FBYyxnREMxQjNCLHEwSUF1SEE7OzRGRC9GYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCOzswQkF3Qi9CLFFBQVE7OzBCQUNSLFFBQVE7eUNBcEJjLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBRWhCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2tDLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDN0IsU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVVLFNBQVM7c0JBQXhCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1RhYmxlRWxlbWVudCwgVGFibGVFbGVtZW50IH0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7IE1hdENvbHVtbkRlZiwgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQXBwVGFibGUgfSBmcm9tICcuLi90YWJsZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBBc3luY1RhYmxlIH0gZnJvbSAnLi4vYXN5bmMtdGFibGUuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbmF2LWFjdGlvbnMtY29sdW1uJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkFjdGlvbnNDb2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIFRhYmxlRWxlbWVudDxhbnk+IHwgQXN5bmNUYWJsZUVsZW1lbnQ8YW55PiA9IFRhYmxlRWxlbWVudDxhbnk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZjogTWF0Q29sdW1uRGVmO1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSBtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgQElucHV0KCkgYXBwVGFibGU6IEFwcFRhYmxlPGFueT4gfCBBcHBBc3luY1RhYmxlPGFueT47XG4gIEBJbnB1dCgpIG1hdENvbHVtbkRlZiA9ICdhY3Rpb25zJztcbiAgQElucHV0KCkgc3R5bGU6ICd0YWJsZScgfCAnbWF0LXRhYmxlJyA9ICd0YWJsZSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzdGlja3lFbmQgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dQZW5kaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBkaXJ0eUljb246IGJvb2xlYW4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGlvbnNUaXRsZSA9ICdDT01NT04uQlROX09QVElPTlMnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNlbGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQgfT47XG5cbiAgQE91dHB1dCgpIG9wdGlvbnNDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXRUYWJsZTogTWF0VGFibGU8YW55PixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBhcHBUYWJsZTogQXBwVGFibGU8YW55PixcbiAgICBAT3B0aW9uYWwoKSBhcHBBc3luY1RhYmxlOiBBcHBBc3luY1RhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCFtYXRUYWJsZSkgdGhyb3cgbmV3IEVycm9yKGBbYWN0aW9ucy1jb2x1bW5dIHRoaXMgY29sdW1uIGNvbXBvbmVudCBtdXN0IGJlIGluc2lkZSBhIE1hdFRhYmxlIGNvbXBvbmVudGApO1xuICAgIHRoaXMuYXBwVGFibGUgPSBhcHBUYWJsZSA/PyBhcHBBc3luY1RhYmxlO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLnNob3dQZW5kaW5nID0gdGhpcy5zaG93UGVuZGluZyA/PyB0cnVlO1xuICAgIHRoaXMuZGlydHlJY29uID0gdGhpcy5kaXJ0eUljb24gPT09IHRydWUgPyAnc3RhcicgOiB0aGlzLmRpcnR5SWNvbiA9PT0gZmFsc2UgPyBudWxsIDogdGhpcy5kaXJ0eUljb24gPz8gJ3N0YXInO1xuXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5tYXRUYWJsZS5hZGRDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuXG4gICAgaWYgKCF0aGlzLmFwcFRhYmxlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbbmF2LWFjdGlvbnMtY29sdW1uXSBObyBBcHBUYWJsZSBvciBBcHBBc3luY1RhYmxlIGZvdW5kLiBQbGVhc2UgZGVmaW5lIGEgcHJvdmlkZXIgb3Igc2V0IGlucHV0ICdbYXBwVGFibGVdJ2ApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tYXRUYWJsZS5yZW1vdmVDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICAgIHRoaXMub3B0aW9uc0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm1hdENvbHVtbkRlZlwiIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFzaG93UGVuZGluZ1wiIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBpbnZhbGlkIG5ldyByb3cgLS0+XG4gICAgICAgIEBpZiAocm93LmlkID09PSAtMSAmJiByb3cudmFsaWRhdG9yPy5pbnZhbGlkKSB7XG4gICAgICAgICAgPCEtLSBkZWxldGUgYnV0dG9uIC0tPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwVGFibGUuY2FuY2VsT3JEZWxldGUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSB2YWxpZCByb3cgb3IgaW52YWxpZCBleGlzdGluZyByb3cgLS0+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZm9yd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIiAoZm9jdXMpPVwiYXBwVGFibGUuY29uZmlybUFuZEZvcndhcmQoJGV2ZW50LCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIE5PVCBlZGl0aW5nIHJvdyAtLT5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIGRpcnR5IGljb24gLS0+XG4gICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgKGZvY3VzKT1cImFwcFRhYmxlLmNvbmZpcm1BbmRCYWNrd2FyZCgkZXZlbnQsIHJvdylcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdGQ+XG5cbiAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hdC10YWJsZSdcIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgICAgQGlmIChyb3cuZWRpdGluZykge1xuICAgICAgICA8IS0tIHBlbmRpbmcgLS0+XG4gICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgIDxpb24tc3Bpbm5lciBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1BlbmRpbmdcIiBuYW1lPVwiZG90c1wiIGNsYXNzPVwiY2VudGVyXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gaW52YWxpZCBuZXcgcm93IC0tPlxuICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZCkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcFRhYmxlLmNhbmNlbE9yRGVsZXRlKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBmb3J3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiIChmb2N1cyk9XCJhcHBUYWJsZS5jb25maXJtQW5kRm9yd2FyZCgkZXZlbnQsIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gbm90IGVkaXRpbmcgcm93IC0tPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gZGlydHkgaWNvbiAtLT5cbiAgICAgICAgQGlmIChkaXJ0eUljb24gJiYgcm93LnZhbGlkYXRvcj8uZGlydHkpIHtcbiAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZGlydHlJY29uXCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cImRpcnR5LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgIChmb2N1cyk9XCJhcHBUYWJsZS5jb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jZWxsPlxuXG4gICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19