@gloww/gloww 0.9.0-beta.13 → 0.9.0-beta.15

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.
@@ -133,7 +133,7 @@ export class DisplayObjectsComponent {
133
133
  }
134
134
  onSearch() {
135
135
  this.queryParams = {};
136
- Object.keys(this.form.value).forEach(name => {
136
+ Object.keys(this.form?.value).forEach(name => {
137
137
  const val = this.form.value[name];
138
138
  if (val) {
139
139
  if (val.constructor.name === 'Moment') {
@@ -431,10 +431,10 @@ export class DisplayObjectsComponent {
431
431
  }
432
432
  }
433
433
  DisplayObjectsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2.Router }, { token: i3.Location }, { token: i4.AuthenticationService }, { token: i5.FormBuilder }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
434
- DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-content *ngComponentOutlet=\"SearchForm\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
434
+ DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-container *ngComponentOutlet=\"SearchForm\"></ng-container>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
435
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, decorators: [{
436
436
  type: Component,
437
- args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-content *ngComponentOutlet=\"SearchForm\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
437
+ args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-container *ngComponentOutlet=\"SearchForm\"></ng-container>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
438
438
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2.Router }, { type: i3.Location }, { type: i4.AuthenticationService }, { type: i5.FormBuilder }, { type: i2.ActivatedRoute }]; }, propDecorators: { header: [{
439
439
  type: ContentChild,
440
440
  args: [HeaderComponent]
@@ -498,4 +498,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
498
498
  }], fileFields: [{
499
499
  type: Input
500
500
  }] } });
501
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBc0ssS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ25RLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtRCxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQWdDLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXRFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFB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QVk7c0JBQS9DLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNNLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxTQUFTO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5T2JqZWN0c0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuLy4uL2Rpc3BsYXktb2JqZWN0cy1jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgU2VhcmNoRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mb3JtL3NlYXJjaC1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlZmVyZW5jZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3IzX2FzdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBPbkluaXQsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgRGlyZWN0aXZlLCBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0b3IsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBBZnRlckNvbnRlbnRJbml0LCBRdWVyeUxpc3QsIENvbnRlbnRDaGlsZHJlbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IsIG9ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzdWx0VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9yZXN1bHQtdGFibGUvcmVzdWx0LXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBHbG93d1NlcnZpY2UgfSBmcm9tICcuLi8uLi9TZXJ2aWNlcy9nbG93dy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZ2xvd3ctc2VjdXJpdHkvU2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgbWVyZ2VNYXAsIHRhcCwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgaWNvbjogYW55O1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgcm91dGVyTGlua0ZjdD86IChvYmopID0+IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXk/OiAob2JqKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdnbHctZGlzcGxheS1vYmplY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaXNwbGF5LW9iamVjdHMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlzcGxheU9iamVjdHNDb21wb25lbnQ8VE9iaj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoSGVhZGVyQ29tcG9uZW50KSBoZWFkZXI6IEhlYWRlckNvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKFNlYXJjaEZvcm1Db21wb25lbnQpIGZvcm1MYXlvdXQ6IFNlYXJjaEZvcm1Db21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZChSZXN1bHRUYWJsZUNvbXBvbmVudCkgcmVzdWx0TGF5b3V0OiBSZXN1bHRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGU6IE1hdFRhYmxlPGFueT47XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiBmYWxzZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICAvLyBhZnRlciB0aGUgPG5nLWNvbnRlbnQ+IGhhcyBiZWVuIGluaXRpYWxpemVkLCB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUuXHJcbiAgLy8gQWxsIHRoYXQncyBsZWZ0IGlzIHRvIGFkZCB0aGVtIHRvIHRoZSB0YWJsZSBvdXJzZWx2ZXM6XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uPFRPYmo+O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlPYmpMaW5rOiAob2JqOiBUT2JqLCBhY3Rpb24/OiBzdHJpbmcpID0+IChzdHJpbmcgfCBzdHJpbmdbXSk7XHJcbiAgQElucHV0KCkgY2FuRGlzcGxheU9iajogKCh1c2VyOiBhbnksIG9iajogVE9iaiwgYWN0aW9uPzogc3RyaW5nKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5FZGl0OiAoKHVzZXI6IGFueSwgb2JqOiBUT2JqKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNhbkRlbGV0ZTogKCh1c2VyOiBhbnksIG9iajogVE9iaikgPT4gYm9vbGVhbikgfCBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5BZGQ6ICgodXNlcjogYW55KSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBFZGl0b3I6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgU2VhcmNoRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBzZWFyY2hSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHBvc3RSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqPjtcclxuICBASW5wdXQoKSBkZWxldGVSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHB1dFJlcXVlc3Q6IChvYmo/OiBUT2JqIHwgYW55KSA9PiBPYnNlcnZhYmxlPFRPYmpbXT47XHJcbiAgQElucHV0KCkgY29sdW1uczogKCkgPT4gc3RyaW5nW107XHJcbiAgQElucHV0KCkgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2U7XHJcbiAgQElucHV0KCkgb2JqZWN0TmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1heHJvd3M6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1hbmRhdG9yeVBhcmFtczogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgYWN0aW9ucyA9IFtdO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgZmlsZUZpZWxkczogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtbnNUb0Rpc3BsYXkgPSBbXTtcclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj47XHJcbiAgZGlzcGxheWZvcm0gPSB0cnVlO1xyXG4gIGRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuICBxdWVyeVBhcmFtczogYW55ID0ge307XHJcbiAgcmVzdWx0RXhjZXB0aW9uOiBzdHJpbmc7XHJcbiAgY3VycmVudFVzZXI6IGFueTtcclxuICBmb3JtMjogRm9ybUdyb3VwO1xyXG4gIGRhdGE6IG9iamVjdDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLCBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXM7XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUgYXMgYW55KS5Vc2VySW5mbztcclxuICAgIHRoaXMuZm9ybTIgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgX01heFJvd186IFtudWxsXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgc2VhcmNoJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucG9zdFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wb3N0UmVxdWVzdCA9IHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGVsZXRlUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgZGVsZXRlJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucHV0UmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnB1dFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgcHV0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXhyb3dzPy5sZW5ndGggPiAwKSB7IHRoaXMuZm9ybS5hZGRDb250cm9sKFwiX01heFJvd19cIiwgbmV3IEZvcm1Db250cm9sKG51bGwpKTsgfVxyXG4gIH1cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhgSU5JVCA6IGZyb21MYXlvdXQ6JHt0aGlzLmZvcm1MYXlvdXR9LWRpc3BsYXlmb3JtOiR7dGhpcy5kaXNwbGF5Zm9ybX1gKVxyXG4gICAgaWYgKCF0aGlzLmZvcm1MYXlvdXQgJiYgIXRoaXMuU2VhcmNoRm9ybSAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb3d3U2VydmljZS5iYXNlUGF0aENoYW5nZS5zdWJzY3JpYmUobmV3VXJsID0+IHtcclxuICAgICAgY29uc29sZS5sb2coYGJhc2VQYXRoQ2hhbmdlIDogZnJvbUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApXHJcbiAgICAgIGlmICghdGhpcy5mb3JtTGF5b3V0ICYmICF0aGlzLlNlYXJjaEZvcm0gJiYgdGhpcy5yZXN1bHRMYXlvdXQpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmRpc3BsYXlmb3JtKSB7IHRoaXMuU2VhcmNoKCk7IH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBJbml0KGRhdGE/OiBEYXRhKSB7XHJcbiAgICBpZiAoKGRhdGEgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID4gMCkgfHwgdGhpcy5kaXNwbGF5cmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuU2VhcmNoKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2VhcmNoKGRhdGE/OiBEYXRhKSB7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5kaXNwbGF5cmVzdWx0ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGlzcGxheWZvcm0gPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0RXhjZXB0aW9uID0gbnVsbDtcclxuXHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSBkYXRhW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubWFuZGF0b3J5UGFyYW1zKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWFuZGF0b3J5UGFyYW1zKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFJlcXVlc3QuY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgdGhpcy5xdWVyeVBhcmFtcykuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFRPYmo+KHIpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5VcGRhdGVUYWJsZSgpO1xyXG4gICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheXJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0RXhjZXB0aW9uID0gZXJyb3I7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYW4ob2JqKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIG9iaikge1xyXG4gICAgICBpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkZWxldGUgb2JqW3Byb3BOYW1lXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0udmFsdWUpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybS52YWx1ZVtuYW1lXTtcclxuICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ01vbWVudCcpIHtcclxuICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSAodmFsIGFzIE1vbWVudCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5mb3JtMi52YWx1ZS5fTWF4Um93XykgeyB0aGlzLnF1ZXJ5UGFyYW1zLl9NYXhSb3dfID0gdGhpcy5mb3JtMi52YWx1ZS5fTWF4Um93XzsgfVxyXG4gICAgdGhpcy5jbGVhbih0aGlzLnF1ZXJ5UGFyYW1zKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHsgZnJvbU9iamVjdDogdGhpcy5xdWVyeVBhcmFtcyB9KTtcclxuICAgIGNvbnN0IGN1cnJlbnRzdGF0ZSA9IHRoaXMubG9jYXRpb24uZ2V0U3RhdGUoKTtcclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucm91dGVyLnVybCwgcGFyYW1zLnRvU3RyaW5nKCkpO1xyXG4gICAgdGhpcy5TZWFyY2goKTtcclxuXHJcbiAgfVxyXG5cclxuICBVcGRhdGVEYXRhU291cmNlKHI6IFRPYmpbXSkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUT2JqPihyKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuVXBkYXRlVGFibGUoKTtcclxuXHJcbiAgfVxyXG5cclxuICBVcGRhdGVUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyF0aGlzLnRhYmxlJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdWx0TGF5b3V0LmNvbHVtbkRlZnMuZm9yRWFjaChjb2x1bW5EZWYgPT4gdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uRGVmKSk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICAgIHRoaXMuY29sdW1uc1RvRGlzcGxheSA9IHRoaXMuY29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuRGlzcGxheU9ialRoaXMob2JqLCBhY3Rpb24/KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuZGlzcGxheU9iakxpbmspIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5EaXNwbGF5T2JqID09PSAnYm9vbGVhbicpIHsgcmV0dXJuIHRoaXMuY2FuRGlzcGxheU9iajsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5EaXNwbGF5T2JqKHRoaXMuY3VycmVudFVzZXIsIG9iaiwgYWN0aW9uKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhbkFkZFRoaXMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY2FuQWRkKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2FuQWRkID09PSAnYm9vbGVhbicpIHsgcmV0dXJuIHRoaXMuY2FuQWRkOyB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbkFkZCh0aGlzLmN1cnJlbnRVc2VyKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5FZGl0VGhpcyhvYmopIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jYW5FZGl0KSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2FuRWRpdCA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkVkaXQ7IH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2FuRWRpdCh0aGlzLmN1cnJlbnRVc2VyLCBvYmopO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkRlbGV0ZVRoaXMob2JqKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY2FuRGVsZXRlKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2FuRGVsZXRlID09PSAnYm9vbGVhbicpIHsgcmV0dXJuIHRoaXMuY2FuRGVsZXRlOyB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbkRlbGV0ZSh0aGlzLmN1cnJlbnRVc2VyLCBvYmopO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5T2JqTGlua1RoaXMob2JqLCBhY3Rpb24/KSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzcGxheU9iakxpbmspIHsgcmV0dXJuIG51bGw7IH1cclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXlPYmpMaW5rKG9iaiwgYWN0aW9uKTtcclxuICB9XHJcblxyXG5cclxuICBpc1N0cmluZyh2YWx1ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XHJcbiAgfVxyXG4gIGdldFByaW1hcnlLZXkob2JqOiBvYmplY3QgfCBUT2JqKTogb2JqZWN0W10ge1xyXG4gICAgbGV0IHJlcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaXNTdHJpbmcodGhpcy5wcmltYXJ5S2V5KSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0cmluZ1wiKTtcclxuICAgICAgcmVzLnB1c2gob2JqW3RoaXMucHJpbWFyeUtleSBhcyBzdHJpbmddKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwic3RyaW5nW11cIik7XHJcbiAgICAgICh0aGlzLnByaW1hcnlLZXkgYXMgc3RyaW5nW10pLmZvckVhY2goa2V5ID0+IHJlcy5wdXNoKG9ialtrZXldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgX3NhdmVPYmoob2JqOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdmFyIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICB0aGlzLnBvc3RSZXF1ZXN0LmNhbGwodGhpcy5nbG93d1NlcnZpY2UsIG9iaikuc3Vic2NyaWJlKFxyXG4gICAgICBkYXRhID0+IHtcclxuICAgICAgICBjb25zdCB0bXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcclxuICAgICAgICB0bXAucHVzaChkYXRhKTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRtcDtcclxuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBhbGVydChgVW5hYmxlIHRvIGFkZCBPYmplY3QgJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1cXG4ke2Vycm9yLk1lc3NhZ2V9XFxuJHtlcnJvci5lcnJvcn1gKTtcclxuICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiBzdWJqZWN0O1xyXG4gIH1cclxuICBfc2F2ZUZpbGUoZmlsZUZpZWxkOiBzdHJpbmcsIG9iajogYW55LCBmaWxlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUuZGF0YSk7XHJcbiAgICByZXR1cm4gdGhpcy5nbG93d1NlcnZpY2VbYHBvc3Qke3RoaXMub2JqZWN0TmFtZX0ke2ZpbGVGaWVsZH1gXS5jYWxsKHRoaXMuZ2xvd3dTZXJ2aWNlLCB0aGlzLmdldFByaW1hcnlLZXkob2JqKSwgZm9ybURhdGEpLnBpcGUoXHJcbiAgICAgIHRhcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XHJcbiAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKGV2ZW50LmxvYWRlZCAqIDEwMCAvIChldmVudC50b3RhbCA/PyAxKSk7XHJcbiAgICAgICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IGZpbGUucHJvZ3Jlc3MgIT09IDEwMDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XHJcbiAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSAxMDA7XHJcbiAgICAgICAgICAgIGZpbGUuc3RhdHVzID0gXCJEb25lXCI7XHJcbiAgICAgICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaWx0ZXIoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBmaWx0ZXIgJHtldmVudC50eXBlfWApO1xyXG4gICAgICAgIHJldHVybiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXHJcbiAgICAgIH0pLFxyXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBtYXAgJHtldmVudC50eXBlfWApO1xyXG4gICAgICAgIHJldHVybiBldmVudC5ib2R5O1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgZmlsZS5pblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgZmlsZS5zdGF0dXMgPSBcIkVycm9yXCI7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZS5kYXRhLm5hbWV9IHVwbG9hZCBmYWlsZWQuYCk7XHJcbiAgICAgICAgLy9zdWJqZWN0LmVycm9yKGVycm9yKTtcclxuICAgICAgICByZXR1cm4gb2YoYCR7ZmlsZS5kYXRhLm5hbWV9IHVwbG9hZCBmYWlsZWQuYCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQWRkT2JqKCkge1xyXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgZGlhbG9nQ29uZmlnLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5jbG9zZU9uTmF2aWdhdGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGlhbG9nQ29uZmlnKS5mb3JFYWNoKFxyXG4gICAgICAgIG5hbWUgPT4ge1xyXG4gICAgICAgICAgZGlhbG9nQ29uZmlnW25hbWVdID0gdGhpcy5kaWFsb2dDb25maWdbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgbGV0IGFyZ3MgPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3Q/LnBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBhcmdzW2tleV0gPSB0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXNba2V5XTtcclxuICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSBhcmdzO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIGNvbnN0IGRsZyA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5FZGl0b3IsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBkbGcuY29tcG9uZW50SW5zdGFuY2UuY2FsbGJhY2sgPSAoXHJcbiAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhY29weSA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgIGNvbnN0IGZpbGVGaWVsZHMgPSAodGhpcy5FZGl0b3IgYXMgYW55KS5maWxlRmllbGRzO1xyXG4gICAgICAgIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgLy8gVW4gc2V1bCBjaGFtcCwgaWwgcGV1dCDDqnRyZSBtdWx0aXBsZVxyXG4gICAgICAgICAgY29uc3QgZmlsZUZpZWxkID0gZmlsZUZpZWxkc1swXTtcclxuICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgY29uc3QgYWxsb2JzOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8YW55PjsgfSA9IHt9XHJcbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXQgIT09ICdEb25lJyAmJiBmaWxlLnN0YXR1dCAhPT0gJ0Vycm9yJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9icyA9IHRoaXMuX3NhdmVPYmooZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobmV3ZGF0YSA9PiB0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGUpXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICBhbGxvYnNbZmlsZS5uYW1lXSA9IG9icztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChhbGxvYnMpLnBpcGUodGFrZSgxKSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gUGx1c2lldXJzIGNoYW1wcyBmaWxlLCBpbCBuZSBwZXV0IHkgYXZvaXIgcXUndW5lIHNldWwgZmljaGllciBwYXIgY2hhbXAuXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcclxuICAgICAgICAgIGZpbGVGaWVsZHMuZm9yRWFjaChmZiA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkc1tmZl0gPSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXZlT2JqKGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgIG1lcmdlTWFwKG5ld2RhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFsbG9iczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkcykuZm9yRWFjaCgoW2ZpbGVGaWVsZCwgZmlsZXNdOiBbc3RyaW5nLCBhbnlbXV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxvYnMucHVzaCh0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGVzWzBdKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oYWxsb2JzKTsgLy8gVE9ETyA6IFBBUyBURVJNSU5FLi4uIEpBTUFJUyBVVElMSVNFLi4uXHJcbiAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gRm9ybSBzYW5zIGZpY2hpZXJcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9zYXZlT2JqKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIERlbGV0ZU9iaihvYmopIHtcclxuICAgIGlmIChjb25maXJtKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgb2JqZXQgPyAnKSkge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlcXVlc3QuYXBwbHkodGhpcy5nbG93d1NlcnZpY2UsIHRoaXMuZ2V0UHJpbWFyeUtleShvYmopKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihvYmopO1xyXG4gICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgICB0bXAuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0bXA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBhbGVydChgVW5hYmxlIHRvIGRlbGV0ZSBPYmplY3QgJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1cXG4ke2Vycm9yLk1lc3NhZ2V9XFxuJHtlcnJvci5lcnJvcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlT2JqKGN1cnJlbnQ6IGFueSwgbmV3RGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBhcmdzOiBvYmplY3RbXSA9IHRoaXMuZ2V0UHJpbWFyeUtleShjdXJyZW50KTsgYXJncy5wdXNoKG5ld0RhdGEpXHJcbiAgICB2YXIgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHRoaXMucHV0UmVxdWVzdC5hcHBseSh0aGlzLmdsb3d3U2VydmljZSwgYXJncykuc3Vic2NyaWJlKFxyXG4gICAgICBkYXRhID0+IHtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5kYXRhU291cmNlLmRhdGEuaW5kZXhPZihjdXJyZW50KTtcclxuICAgICAgICBjb25zdCB0bXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcclxuICAgICAgICB0bXBbaV0gPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG4gICAgICAgIHN1YmplY3QubmV4dChkYXRhKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGFsZXJ0KGBVbmFibGUgdG8gdXBkYXRlIE9iamVjdCAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fVxcbiR7ZXJyb3IuTWVzc2FnZX1cXG4ke2Vycm9yLmVycm9yfWApO1xyXG4gICAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHN1YmplY3Q7XHJcbiAgfVxyXG5cclxuXHJcbiAgRWRpdE9iaihvYmo6IFRPYmopIHtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuY2xvc2VPbk5hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmRpYWxvZ0NvbmZpZykuZm9yRWFjaChcclxuICAgICAgICBuYW1lID0+IHtcclxuICAgICAgICAgIGRpYWxvZ0NvbmZpZ1tuYW1lXSA9IHRoaXMuZGlhbG9nQ29uZmlnW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0gb2JqO1xyXG4gICAgY29uc3QgZGxnID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLkVkaXRvciwgZGlhbG9nQ29uZmlnKTtcclxuICAgIGRsZy5jb21wb25lbnRJbnN0YW5jZS5jYWxsYmFjayA9IChcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGFjb3B5ID0geyAuLi5kYXRhIH07XHJcbiAgICAgICAgY29uc3QgZmlsZUZpZWxkcyA9ICh0aGlzLkVkaXRvciBhcyBhbnkpLmZpbGVGaWVsZHM7XHJcbiAgICAgICAgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAvLyBVbiBzZXVsIGNoYW1wLCBpbCBwZXV0IMOqdHJlIG11bHRpcGxlXHJcbiAgICAgICAgICBjb25zdCBmaWxlRmllbGQgPSBmaWxlRmllbGRzWzBdO1xyXG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgZGVsZXRlIGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcbiAgICAgICAgICBjb25zdCBhbGxvYnM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxhbnk+OyB9ID0ge31cclxuICAgICAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlLnN0YXR1dCAhPT0gJ0RvbmUnICYmIGZpbGUuc3RhdHV0ICE9PSAnRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb2JzID0gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobmV3ZGF0YSA9PiB0aGlzLl9zYXZlRmlsZShmaWxlRmllbGQsIG5ld2RhdGEsIGZpbGUpXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICBhbGxvYnNbZmlsZS5uYW1lXSA9IG9icztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChhbGxvYnMpLnBpcGUodGFrZSgxKSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8gUGx1c2lldXJzIGNoYW1wcyBmaWxlLCBpbCBuZSBwZXV0IHkgYXZvaXIgcXUndW5lIHNldWwgZmljaGllciBwYXIgY2hhbXAuXHJcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSB7fTtcclxuICAgICAgICAgIGZpbGVGaWVsZHMuZm9yRWFjaChmZiA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkc1tmZl0gPSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmZl07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVPYmoob2JqLCBkYXRhY29weSkucGlwZShcclxuICAgICAgICAgICAgICBtZXJnZU1hcChuZXdkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBhbGxvYnM6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtmaWxlRmllbGQsIGZpbGVzXTogW3N0cmluZywgYW55W11dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb2JzLnB1c2godGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlc1swXSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKGFsbG9icyk7IC8vIFRPRE8gOiBQQVMgVEVSTUlORS4uLiBKQU1BSVMgVVRJTElTRS4uLlxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEZvcm0gc2FucyBmaWNoaWVyXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdsdy1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlmb3JtXCI+XHJcbiAgICA8bWF0LWNhcmQ+XHJcbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyZXN1bHRFeGNlcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIFVuYWJsZSB0byBxdWVyeSA6IHt7cmVzdWx0RXhjZXB0aW9ufX1cclxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdsdy1zZWFyY2gtZm9ybVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nQ29tcG9uZW50T3V0bGV0PVwiU2VhcmNoRm9ybVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1heHJvd3NcIiBbZm9ybUdyb3VwXT1cImZvcm0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIk1heFJvd1wiIGZvcm1Db250cm9sTmFtZT1cIl9NYXhSb3dfXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtYXhyb3cgb2YgbWF4cm93c1wiIFt2YWx1ZV09XCJtYXhyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWF4cm93XCI+e3ttYXhyb3d9fSBvYmplY3RzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbWF4cm93XCI+IERlZmF1bHQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cclxuICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICBTZWFyY2hcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgPC9tYXQtY2FyZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZGlzcGxheXJlc3VsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIiAqbmdJZj1cImRhdGFTb3VyY2U7IGVsc2UgU3Bpbm5lclwiPlxyXG4gICAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG1hdFNvcnQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXBsdXNcIiAoY2xpY2spPVwiQWRkT2JqKClcIiAqbmdJZj1cImNhbkFkZFRoaXMoKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBvYmpcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1leWVcIiBbcm91dGVyTGlua109XCJkaXNwbGF5T2JqTGlua1RoaXMob2JqKVwiICpuZ0lmPVwiY2FuRGlzcGxheU9ialRoaXMob2JqKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uXCIgW3JvdXRlckxpbmtdPVwiYWN0aW9uLnJvdXRlckxpbmtGY3Qob2JqKVwiICpuZ0lmPVwiYWN0aW9uLmljb24uaWNvbiAmJiAoIWFjdGlvbi5kaXNwbGF5IHx8IGFjdGlvbi5kaXNwbGF5KG9iaiwgYWN0aW9uLm5hbWUpKVwiPlxyXG4gICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uXCIgW3JvdXRlckxpbmtdPVwiYWN0aW9uLnJvdXRlckxpbmtGY3Qob2JqKVwiICpuZ0lmPVwiIWFjdGlvbi5pY29uLmljb24gJiYgKCFhY3Rpb24uZGlzcGxheSB8fCBhY3Rpb24uZGlzcGxheShvYmosIGFjdGlvbi5uYW1lKSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtdHJhc2gtYWx0XCIgKGNsaWNrKT1cIkRlbGV0ZU9iaihvYmopXCIgKm5nSWY9XCJjYW5EZWxldGVUaGlzKG9iailcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS1wZW5jaWxcIiAoY2xpY2spPVwiRWRpdE9iaihvYmopXCIgKm5nSWY9XCJjYW5FZGl0VGhpcyhvYmopXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZ2x3LXJlc3VsdC10YWJsZVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5zVG9EaXNwbGF5XCI+PC90cj5cclxuICAgICAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBteVJvd0RhdGE7IGNvbHVtbnM6IGNvbHVtbnNUb0Rpc3BsYXlcIj48L3RyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPG1hdC1wYWdpbmF0b3IgcGFnZVNpemU9XCIxMFwiPjwvbWF0LXBhZ2luYXRvcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNTcGlubmVyPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+Il19
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dsb3d3L3NyYy9saWIvQ29tcG9uZW50cy9kaXNwbGF5LW9iamVjdHMvZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLFNBQVMsRUFBc0ssS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ25RLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtRCxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQWdDLGFBQWEsRUFBRSxVQUFVLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXRFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPeEYsQ0FBQztBQU9GLE1BQU0sT0FBTyx1QkFBdUI7SUE0Q2xDLFlBQW9CLGlCQUFvQyxFQUFVLE1BQWlCLEVBQVUsTUFBYyxFQUFVLFFBQWtCLEVBQVUscUJBQTRDLEVBQVUsV0FBd0IsRUFBVSxLQUFxQjtRQUExTyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUEvQnJQLGtCQUFhLEdBQW1FLEtBQUssQ0FBQztRQUN0RixZQUFPLEdBQWtELElBQUksQ0FBQztRQUM5RCxjQUFTLEdBQWtELElBQUksQ0FBQztRQUNoRSxXQUFNLEdBQXVDLElBQUksQ0FBQztRQWFsRCxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFHbkMscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRXRCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBT3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBd0IsQ0FBQyxRQUFRLENBQUM7UUFDakYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNsQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtJQUVsQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUFFO0lBQzVGLENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDckQ7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1lBQzdGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUNyRDtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUFFO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVc7UUFDZCxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBVztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUU1QixJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLEVBQ0MsS0FBSyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLEtBQUssTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFO1lBQzFCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUN6RCxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFJLEdBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtpQkFDdkQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzlCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQUU7UUFDekYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFaEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTztRQUM1QixJQUFJO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7YUFBRTtZQUMzQyxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQUU7WUFDM0UsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFEO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUk7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQzthQUFFO1lBQ25DLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7YUFBRTtZQUM3RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3RDO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQUc7UUFDYixJQUFJO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7YUFBRTtZQUNwQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQUU7WUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDNUM7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNmLElBQUk7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFBRSxPQUFPLEtBQUssQ0FBQzthQUFFO1lBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7YUFBRTtZQUNuRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM5QztRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFPO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRTtRQUMxQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBSztRQUNaLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFrQjtRQUM5QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFRO1FBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDckQsSUFBSSxDQUFDLEVBQUU7WUFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQyxFQUNELEtBQUssQ0FBQyxFQUFFO1lBQ04sS0FBSyxDQUFDLHdCQUF3QixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FDRixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELFNBQVMsQ0FBQyxTQUFpQixFQUFFLEdBQVEsRUFBRSxJQUFTO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDNUgsR0FBRyxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFO1lBQzVCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDbEIsS0FBSyxhQUFhLENBQUMsY0FBYztvQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDO29CQUN4QyxNQUFNO2dCQUNSLEtBQUssYUFBYSxDQUFDLFFBQVE7b0JBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUE7UUFDOUMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQztZQUNoRCx1QkFBdUI7WUFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLFlBQVksR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzNDLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzlCLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0MsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFHSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsQ0FDL0IsSUFBSSxDQUFDLEVBQUU7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUksSUFBSSxDQUFDLE1BQWMsQ0FBQyxVQUFVLENBQUM7WUFDbkQsSUFBSSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsdUNBQXVDO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sTUFBTSxHQUF3QyxFQUFFLENBQUE7Z0JBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7d0JBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQzVELENBQUMsQ0FBQzt3QkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBRTVDO2lCQUFNLElBQUksVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLDJFQUEyRTtnQkFDM0UsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMxQixPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNqQixJQUFJLE1BQU0sR0FBc0IsRUFBRSxDQUFDO3dCQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBa0IsRUFBRSxFQUFFOzRCQUNyRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUMzRDt3QkFDSCxDQUFDLENBQUMsQ0FBQTt3QkFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztvQkFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDUixDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLG9CQUFvQjtnQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQUc7UUFDWCxJQUFJLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDNUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUM3QixDQUFDLEVBQ0QsS0FBSyxDQUFDLEVBQUU7Z0JBQ04sS0FBSyxDQUFDLDJCQUEyQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RyxDQUFDLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNuQyxJQUFJLElBQUksR0FBYSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwRSxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUN0RCxJQUFJLENBQUMsRUFBRTtZQUNMLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQyxFQUNELEtBQUssQ0FBQyxFQUFFO1lBQ04sS0FBSyxDQUFDLDJCQUEyQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FDRixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUdELE9BQU8sQ0FBQyxHQUFTO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMzQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNqQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM5QixZQUFZLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQ3BDLElBQUksQ0FBQyxFQUFFO2dCQUNMLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FDRixDQUFDO1NBQ0g7UUFDRCxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsQ0FDL0IsSUFBSSxDQUFDLEVBQUU7WUFDTCxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUksSUFBSSxDQUFDLE1BQWMsQ0FBQyxVQUFVLENBQUM7WUFDbkQsSUFBSSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsdUNBQXVDO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sTUFBTSxHQUF3QyxFQUFFLENBQUE7Z0JBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7d0JBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUM1RCxDQUFDLENBQUM7d0JBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUU1QztpQkFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQywyRUFBMkU7Z0JBQzNFLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN4QyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ2pCLElBQUksTUFBTSxHQUFzQixFQUFFLENBQUM7d0JBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFrQixFQUFFLEVBQUU7NEJBQ3JFLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQzNEO3dCQUNILENBQUMsQ0FBQyxDQUFBO3dCQUNGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsMENBQTBDO29CQUNyRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNSLENBQUMsQ0FBQyxDQUFBO2FBQ0g7aUJBQU07Z0JBQ0wsb0JBQW9CO2dCQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25DO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOztvSEFsY1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIscXFCQUVwQixlQUFlLDZFQUNmLG1CQUFtQiwrRUFDbkIsb0JBQW9CLHVGQUN2QixRQUFRLDRFQUNSLFlBQVksdUVBQ1osT0FBTyxxRUN4Q3BCLG1tR0FnRU07MkZEL0JPLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7dVFBTUEsTUFBTTtzQkFBcEMsWUFBWTt1QkFBQyxlQUFlO2dCQUNNLFVBQVU7c0JBQTVDLFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNHLFlBQVk7c0JBQS9DLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNNLEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTSxTQUFTO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk1QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5T2JqZWN0c0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuLy4uL2Rpc3BsYXktb2JqZWN0cy1jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgU2VhcmNoRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mb3JtL3NlYXJjaC1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlZmVyZW5jZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3IzX2FzdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBPbkluaXQsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgRGlyZWN0aXZlLCBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0b3IsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBBZnRlckNvbnRlbnRJbml0LCBRdWVyeUxpc3QsIENvbnRlbnRDaGlsZHJlbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IsIG9ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzdWx0VGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9yZXN1bHQtdGFibGUvcmVzdWx0LXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBHbG93d1NlcnZpY2UgfSBmcm9tICcuLi8uLi9TZXJ2aWNlcy9nbG93dy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZ2xvd3ctc2VjdXJpdHkvU2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgbWVyZ2VNYXAsIHRhcCwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgaWNvbjogYW55O1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgcm91dGVyTGlua0ZjdD86IChvYmopID0+IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXk/OiAob2JqKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdnbHctZGlzcGxheS1vYmplY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlzcGxheS1vYmplY3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaXNwbGF5LW9iamVjdHMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlzcGxheU9iamVjdHNDb21wb25lbnQ8VE9iaj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoSGVhZGVyQ29tcG9uZW50KSBoZWFkZXI6IEhlYWRlckNvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKFNlYXJjaEZvcm1Db21wb25lbnQpIGZvcm1MYXlvdXQ6IFNlYXJjaEZvcm1Db21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZChSZXN1bHRUYWJsZUNvbXBvbmVudCkgcmVzdWx0TGF5b3V0OiBSZXN1bHRUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGU6IE1hdFRhYmxlPGFueT47XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiBmYWxzZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICAvLyBhZnRlciB0aGUgPG5nLWNvbnRlbnQ+IGhhcyBiZWVuIGluaXRpYWxpemVkLCB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUuXHJcbiAgLy8gQWxsIHRoYXQncyBsZWZ0IGlzIHRvIGFkZCB0aGVtIHRvIHRoZSB0YWJsZSBvdXJzZWx2ZXM6XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogRGlzcGxheU9iamVjdHNDb25maWd1cmF0aW9uPFRPYmo+O1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlPYmpMaW5rOiAob2JqOiBUT2JqLCBhY3Rpb24/OiBzdHJpbmcpID0+IChzdHJpbmcgfCBzdHJpbmdbXSk7XHJcbiAgQElucHV0KCkgY2FuRGlzcGxheU9iajogKCh1c2VyOiBhbnksIG9iajogVE9iaiwgYWN0aW9uPzogc3RyaW5nKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5FZGl0OiAoKHVzZXI6IGFueSwgb2JqOiBUT2JqKSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNhbkRlbGV0ZTogKCh1c2VyOiBhbnksIG9iajogVE9iaikgPT4gYm9vbGVhbikgfCBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5BZGQ6ICgodXNlcjogYW55KSA9PiBib29sZWFuKSB8IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBFZGl0b3I6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgU2VhcmNoRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBzZWFyY2hSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHBvc3RSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqPjtcclxuICBASW5wdXQoKSBkZWxldGVSZXF1ZXN0OiAob2JqPzogVE9iaiB8IGFueSkgPT4gT2JzZXJ2YWJsZTxUT2JqW10+O1xyXG4gIEBJbnB1dCgpIHB1dFJlcXVlc3Q6IChvYmo/OiBUT2JqIHwgYW55KSA9PiBPYnNlcnZhYmxlPFRPYmpbXT47XHJcbiAgQElucHV0KCkgY29sdW1uczogKCkgPT4gc3RyaW5nW107XHJcbiAgQElucHV0KCkgZ2xvd3dTZXJ2aWNlOiBHbG93d1NlcnZpY2U7XHJcbiAgQElucHV0KCkgb2JqZWN0TmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHByaW1hcnlLZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1heHJvd3M6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIG1hbmRhdG9yeVBhcmFtczogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgYWN0aW9ucyA9IFtdO1xyXG4gIEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogb2JqZWN0ID0ge307XHJcbiAgQElucHV0KCkgZmlsZUZpZWxkczogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtbnNUb0Rpc3BsYXkgPSBbXTtcclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj47XHJcbiAgZGlzcGxheWZvcm0gPSB0cnVlO1xyXG4gIGRpc3BsYXlyZXN1bHQgPSBmYWxzZTtcclxuICBxdWVyeVBhcmFtczogYW55ID0ge307XHJcbiAgcmVzdWx0RXhjZXB0aW9uOiBzdHJpbmc7XHJcbiAgY3VycmVudFVzZXI6IGFueTtcclxuICBmb3JtMjogRm9ybUdyb3VwO1xyXG4gIGRhdGE6IG9iamVjdDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLCBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXM7XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUgYXMgYW55KS5Vc2VySW5mbztcclxuICAgIHRoaXMuZm9ybTIgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgX01heFJvd186IFtudWxsXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgc2VhcmNoJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucG9zdFJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wb3N0UmVxdWVzdCA9IHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGVsZXRlUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgZGVsZXRlJHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucHV0UmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnB1dFJlcXVlc3QgPSB0aGlzLmdsb3d3U2VydmljZVtgcHV0JHt0aGlzLm9iamVjdE5hbWV9YF07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXhyb3dzPy5sZW5ndGggPiAwKSB7IHRoaXMuZm9ybS5hZGRDb250cm9sKFwiX01heFJvd19cIiwgbmV3IEZvcm1Db250cm9sKG51bGwpKTsgfVxyXG4gIH1cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhgSU5JVCA6IGZyb21MYXlvdXQ6JHt0aGlzLmZvcm1MYXlvdXR9LWRpc3BsYXlmb3JtOiR7dGhpcy5kaXNwbGF5Zm9ybX1gKVxyXG4gICAgaWYgKCF0aGlzLmZvcm1MYXlvdXQgJiYgIXRoaXMuU2VhcmNoRm9ybSAmJiB0aGlzLnJlc3VsdExheW91dCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb3d3U2VydmljZS5iYXNlUGF0aENoYW5nZS5zdWJzY3JpYmUobmV3VXJsID0+IHtcclxuICAgICAgY29uc29sZS5sb2coYGJhc2VQYXRoQ2hhbmdlIDogZnJvbUxheW91dDoke3RoaXMuZm9ybUxheW91dH0tZGlzcGxheWZvcm06JHt0aGlzLmRpc3BsYXlmb3JtfWApXHJcbiAgICAgIGlmICghdGhpcy5mb3JtTGF5b3V0ICYmICF0aGlzLlNlYXJjaEZvcm0gJiYgdGhpcy5yZXN1bHRMYXlvdXQpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlmb3JtID0gZmFsc2U7IHRoaXMuZGlzcGxheXJlc3VsdCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmRpc3BsYXlmb3JtKSB7IHRoaXMuU2VhcmNoKCk7IH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBJbml0KGRhdGE/OiBEYXRhKSB7XHJcbiAgICBpZiAoKGRhdGEgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID4gMCkgfHwgdGhpcy5kaXNwbGF5cmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuU2VhcmNoKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2VhcmNoKGRhdGE/OiBEYXRhKSB7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgdGhpcy5kaXNwbGF5cmVzdWx0ID0gdHJ1ZTtcclxuICAgIHRoaXMuZGlzcGxheWZvcm0gPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0RXhjZXB0aW9uID0gbnVsbDtcclxuXHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSBkYXRhW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubWFuZGF0b3J5UGFyYW1zKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWFuZGF0b3J5UGFyYW1zKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbbmFtZV0gPSB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaFJlcXVlc3QuY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgdGhpcy5xdWVyeVBhcmFtcykuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFRPYmo+KHIpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5VcGRhdGVUYWJsZSgpO1xyXG4gICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheXJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0RXhjZXB0aW9uID0gZXJyb3I7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYW4ob2JqKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIG9iaikge1xyXG4gICAgICBpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkZWxldGUgb2JqW3Byb3BOYW1lXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0/LnZhbHVlKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm0udmFsdWVbbmFtZV07XHJcbiAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICBpZiAodmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdNb21lbnQnKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zW25hbWVdID0gKHZhbCBhcyBNb21lbnQpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeVBhcmFtc1tuYW1lXSA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybTIudmFsdWUuX01heFJvd18pIHsgdGhpcy5xdWVyeVBhcmFtcy5fTWF4Um93XyA9IHRoaXMuZm9ybTIudmFsdWUuX01heFJvd187IH1cclxuICAgIHRoaXMuY2xlYW4odGhpcy5xdWVyeVBhcmFtcyk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IHRoaXMucXVlcnlQYXJhbXMgfSk7XHJcbiAgICBjb25zdCBjdXJyZW50c3RhdGUgPSB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7XHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnJvdXRlci51cmwsIHBhcmFtcy50b1N0cmluZygpKTtcclxuICAgIHRoaXMuU2VhcmNoKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgVXBkYXRlRGF0YVNvdXJjZShyOiBUT2JqW10pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VE9iaj4ocik7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLlVwZGF0ZVRhYmxlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgVXBkYXRlVGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIGlmICghdGhpcy50YWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCchdGhpcy50YWJsZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3VsdExheW91dC5jb2x1bW5EZWZzLmZvckVhY2goY29sdW1uRGVmID0+IHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbkRlZikpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLmNvbHVtbnNUb0Rpc3BsYXkgPSB0aGlzLmNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkRpc3BsYXlPYmpUaGlzKG9iaiwgYWN0aW9uPykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmRpc3BsYXlPYmpMaW5rKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2FuRGlzcGxheU9iaiA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkRpc3BsYXlPYmo7IH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2FuRGlzcGxheU9iaih0aGlzLmN1cnJlbnRVc2VyLCBvYmosIGFjdGlvbik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYW5BZGRUaGlzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNhbkFkZCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkFkZCA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkFkZDsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5BZGQodGhpcy5jdXJyZW50VXNlcik7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuRWRpdFRoaXMob2JqKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY2FuRWRpdCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkVkaXQgPT09ICdib29sZWFuJykgeyByZXR1cm4gdGhpcy5jYW5FZGl0OyB9XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbkVkaXQodGhpcy5jdXJyZW50VXNlciwgb2JqKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5EZWxldGVUaGlzKG9iaikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNhbkRlbGV0ZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbkRlbGV0ZSA9PT0gJ2Jvb2xlYW4nKSB7IHJldHVybiB0aGlzLmNhbkRlbGV0ZTsgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jYW5EZWxldGUodGhpcy5jdXJyZW50VXNlciwgb2JqKTtcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcGxheU9iakxpbmtUaGlzKG9iaiwgYWN0aW9uPykge1xyXG4gICAgaWYgKCF0aGlzLmRpc3BsYXlPYmpMaW5rKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5T2JqTGluayhvYmosIGFjdGlvbik7XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNTdHJpbmcodmFsdWUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xyXG4gIH1cclxuICBnZXRQcmltYXJ5S2V5KG9iajogb2JqZWN0IHwgVE9iaik6IG9iamVjdFtdIHtcclxuICAgIGxldCByZXMgPSBbXTtcclxuICAgIGlmICh0aGlzLmlzU3RyaW5nKHRoaXMucHJpbWFyeUtleSkpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJzdHJpbmdcIik7XHJcbiAgICAgIHJlcy5wdXNoKG9ialt0aGlzLnByaW1hcnlLZXkgYXMgc3RyaW5nXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0cmluZ1tdXCIpO1xyXG4gICAgICAodGhpcy5wcmltYXJ5S2V5IGFzIHN0cmluZ1tdKS5mb3JFYWNoKGtleSA9PiByZXMucHVzaChvYmpba2V5XSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIF9zYXZlT2JqKG9iajogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHZhciBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgdGhpcy5wb3N0UmVxdWVzdC5jYWxsKHRoaXMuZ2xvd3dTZXJ2aWNlLCBvYmopLnN1YnNjcmliZShcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgdG1wLnB1c2goZGF0YSk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0bXA7XHJcbiAgICAgICAgc3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgYWxlcnQoYFVuYWJsZSB0byBhZGQgT2JqZWN0ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9XFxuJHtlcnJvci5NZXNzYWdlfVxcbiR7ZXJyb3IuZXJyb3J9YCk7XHJcbiAgICAgICAgc3ViamVjdC5lcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gc3ViamVjdDtcclxuICB9XHJcbiAgX3NhdmVGaWxlKGZpbGVGaWVsZDogc3RyaW5nLCBvYmo6IGFueSwgZmlsZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLmRhdGEpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2xvd3dTZXJ2aWNlW2Bwb3N0JHt0aGlzLm9iamVjdE5hbWV9JHtmaWxlRmllbGR9YF0uY2FsbCh0aGlzLmdsb3d3U2VydmljZSwgdGhpcy5nZXRQcmltYXJ5S2V5KG9iaiksIGZvcm1EYXRhKS5waXBlKFxyXG4gICAgICB0YXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG4gICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5yb3VuZChldmVudC5sb2FkZWQgKiAxMDAgLyAoZXZlbnQudG90YWwgPz8gMSkpO1xyXG4gICAgICAgICAgICBmaWxlLmluUHJvZ3Jlc3MgPSBmaWxlLnByb2dyZXNzICE9PSAxMDA7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxyXG4gICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gMTAwO1xyXG4gICAgICAgICAgICBmaWxlLnN0YXR1cyA9IFwiRG9uZVwiO1xyXG4gICAgICAgICAgICBmaWxlLmluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZmlsdGVyICR7ZXZlbnQudHlwZX1gKTtcclxuICAgICAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZVxyXG4gICAgICB9KSxcclxuICAgICAgbWFwKChldmVudDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgbWFwICR7ZXZlbnQudHlwZX1gKTtcclxuICAgICAgICByZXR1cm4gZXZlbnQuYm9keTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGZpbGUuc3RhdHVzID0gXCJFcnJvclwiO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAke2ZpbGUuZGF0YS5uYW1lfSB1cGxvYWQgZmFpbGVkLmApO1xyXG4gICAgICAgIC8vc3ViamVjdC5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIG9mKGAke2ZpbGUuZGF0YS5uYW1lfSB1cGxvYWQgZmFpbGVkLmApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEFkZE9iaigpIHtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuY2xvc2VPbk5hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmRpYWxvZ0NvbmZpZykuZm9yRWFjaChcclxuICAgICAgICBuYW1lID0+IHtcclxuICAgICAgICAgIGRpYWxvZ0NvbmZpZ1tuYW1lXSA9IHRoaXMuZGlhbG9nQ29uZmlnW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGxldCBhcmdzID0ge307XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90Py5wYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgYXJnc1trZXldID0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8ucGFyYW1zW2tleV07XHJcbiAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0gYXJncztcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICBjb25zdCBkbGcgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRWRpdG9yLCBkaWFsb2dDb25maWcpO1xyXG4gICAgZGxnLmNvbXBvbmVudEluc3RhbmNlLmNhbGxiYWNrID0gKFxyXG4gICAgICBkYXRhID0+IHtcclxuICAgICAgICBsZXQgZGF0YWNvcHkgPSB7IC4uLmRhdGEgfTtcclxuICAgICAgICBjb25zdCBmaWxlRmllbGRzID0gKHRoaXMuRWRpdG9yIGFzIGFueSkuZmlsZUZpZWxkcztcclxuICAgICAgICBpZiAoZmlsZUZpZWxkcz8ubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgIC8vIFVuIHNldWwgY2hhbXAsIGlsIHBldXQgw6p0cmUgbXVsdGlwbGVcclxuICAgICAgICAgIGNvbnN0IGZpbGVGaWVsZCA9IGZpbGVGaWVsZHNbMF07XHJcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGRhdGFjb3B5W2ZpbGVGaWVsZF07XHJcbiAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGNvbnN0IGFsbG9iczogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPGFueT47IH0gPSB7fVxyXG4gICAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHV0ICE9PSAnRG9uZScgJiYgZmlsZS5zdGF0dXQgIT09ICdFcnJvcicpIHtcclxuICAgICAgICAgICAgICBjb25zdCBvYnMgPSB0aGlzLl9zYXZlT2JqKGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld2RhdGEgPT4gdGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlKVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgYWxsb2JzW2ZpbGUubmFtZV0gPSBvYnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYWxsb2JzKS5waXBlKHRha2UoMSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIC8vIFBsdXNpZXVycyBjaGFtcHMgZmlsZSwgaWwgbmUgcGV1dCB5IGF2b2lyIHF1J3VuZSBzZXVsIGZpY2hpZXIgcGFyIGNoYW1wLlxyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0ge307XHJcbiAgICAgICAgICBmaWxlRmllbGRzLmZvckVhY2goZmYgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZHNbZmZdID0gZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F2ZU9iaihkYXRhY29weSkucGlwZShcclxuICAgICAgICAgICAgICBtZXJnZU1hcChuZXdkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBhbGxvYnM6IE9ic2VydmFibGU8YW55PltdID0gW107XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtmaWxlRmllbGQsIGZpbGVzXTogW3N0cmluZywgYW55W11dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb2JzLnB1c2godGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlc1swXSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKGFsbG9icyk7IC8vIFRPRE8gOiBQQVMgVEVSTUlORS4uLiBKQU1BSVMgVVRJTElTRS4uLlxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEZvcm0gc2FucyBmaWNoaWVyXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2F2ZU9iaihkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBEZWxldGVPYmoob2JqKSB7XHJcbiAgICBpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIG9iamV0ID8gJykpIHtcclxuICAgICAgdGhpcy5kZWxldGVSZXF1ZXN0LmFwcGx5KHRoaXMuZ2xvd3dTZXJ2aWNlLCB0aGlzLmdldFByaW1hcnlLZXkob2JqKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHAgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2Yob2JqKTtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICAgICAgdG1wLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdG1wO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgYWxlcnQoYFVuYWJsZSB0byBkZWxldGUgT2JqZWN0ICR7ZXJyb3Iuc3RhdHVzfSAke2Vycm9yLnN0YXR1c1RleHR9XFxuJHtlcnJvci5NZXNzYWdlfVxcbiR7ZXJyb3IuZXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZU9iaihjdXJyZW50OiBhbnksIG5ld0RhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgYXJnczogb2JqZWN0W10gPSB0aGlzLmdldFByaW1hcnlLZXkoY3VycmVudCk7IGFyZ3MucHVzaChuZXdEYXRhKVxyXG4gICAgdmFyIHN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICB0aGlzLnB1dFJlcXVlc3QuYXBwbHkodGhpcy5nbG93d1NlcnZpY2UsIGFyZ3MpLnN1YnNjcmliZShcclxuICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgaSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmluZGV4T2YoY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgdG1wID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgICAgdG1wW2ldID0gZGF0YTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRtcDtcclxuICAgICAgICBzdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBhbGVydChgVW5hYmxlIHRvIHVwZGF0ZSBPYmplY3QgJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1cXG4ke2Vycm9yLk1lc3NhZ2V9XFxuJHtlcnJvci5lcnJvcn1gKTtcclxuICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiBzdWJqZWN0O1xyXG4gIH1cclxuXHJcblxyXG4gIEVkaXRPYmoob2JqOiBUT2JqKSB7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgZGlhbG9nQ29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5kaWFsb2dDb25maWcpLmZvckVhY2goXHJcbiAgICAgICAgbmFtZSA9PiB7XHJcbiAgICAgICAgICBkaWFsb2dDb25maWdbbmFtZV0gPSB0aGlzLmRpYWxvZ0NvbmZpZ1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IG9iajtcclxuICAgIGNvbnN0IGRsZyA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5FZGl0b3IsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICBkbGcuY29tcG9uZW50SW5zdGFuY2UuY2FsbGJhY2sgPSAoXHJcbiAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhY29weSA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgIGNvbnN0IGZpbGVGaWVsZHMgPSAodGhpcy5FZGl0b3IgYXMgYW55KS5maWxlRmllbGRzO1xyXG4gICAgICAgIGlmIChmaWxlRmllbGRzPy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgLy8gVW4gc2V1bCBjaGFtcCwgaWwgcGV1dCDDqnRyZSBtdWx0aXBsZVxyXG4gICAgICAgICAgY29uc3QgZmlsZUZpZWxkID0gZmlsZUZpZWxkc1swXTtcclxuICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YWNvcHlbZmlsZUZpZWxkXTtcclxuICAgICAgICAgIGRlbGV0ZSBkYXRhY29weVtmaWxlRmllbGRdO1xyXG4gICAgICAgICAgY29uc3QgYWxsb2JzOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8YW55PjsgfSA9IHt9XHJcbiAgICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS5zdGF0dXQgIT09ICdEb25lJyAmJiBmaWxlLnN0YXR1dCAhPT0gJ0Vycm9yJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9icyA9IHRoaXMuX3VwZGF0ZU9iaihvYmosIGRhdGFjb3B5KS5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG5ld2RhdGEgPT4gdGhpcy5fc2F2ZUZpbGUoZmlsZUZpZWxkLCBuZXdkYXRhLCBmaWxlKVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgYWxsb2JzW2ZpbGUubmFtZV0gPSBvYnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYWxsb2JzKS5waXBlKHRha2UoMSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGVGaWVsZHM/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIC8vIFBsdXNpZXVycyBjaGFtcHMgZmlsZSwgaWwgbmUgcGV1dCB5IGF2b2lyIHF1J3VuZSBzZXVsIGZpY2hpZXIgcGFyIGNoYW1wLlxyXG4gICAgICAgICAgY29uc3QgZmllbGRzID0ge307XHJcbiAgICAgICAgICBmaWxlRmllbGRzLmZvckVhY2goZmYgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZHNbZmZdID0gZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0YWNvcHlbZmZdO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT2JqKG9iaiwgZGF0YWNvcHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWVyZ2VNYXAobmV3ZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWxsb2JzOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChbZmlsZUZpZWxkLCBmaWxlc106IFtzdHJpbmcsIGFueVtdXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbG9icy5wdXNoKHRoaXMuX3NhdmVGaWxlKGZpbGVGaWVsZCwgbmV3ZGF0YSwgZmlsZXNbMF0pKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihhbGxvYnMpOyAvLyBUT0RPIDogUEFTIFRFUk1JTkUuLi4gSkFNQUlTIFVUSUxJU0UuLi5cclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBGb3JtIHNhbnMgZmljaGllclxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9iaihvYmosIGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXY+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5Zm9ybVwiPlxyXG4gICAgPG1hdC1jYXJkPlxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicmVzdWx0RXhjZXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICBVbmFibGUgdG8gcXVlcnkgOiB7e3Jlc3VsdEV4Y2VwdGlvbn19XHJcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctc2VhcmNoLWZvcm1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiU2VhcmNoRm9ybVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWF4cm93c1wiIFtmb3JtR3JvdXBdPVwiZm9ybTJcIj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiTWF4Um93XCIgZm9ybUNvbnRyb2xOYW1lPVwiX01heFJvd19cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1heHJvdyBvZiBtYXhyb3dzXCIgW3ZhbHVlXT1cIm1heHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhyb3dcIj57e21heHJvd319IG9iamVjdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtYXhyb3dcIj4gRGVmYXVsdDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIFNlYXJjaFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICA8L21hdC1jYXJkPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5cmVzdWx0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiICpuZ0lmPVwiZGF0YVNvdXJjZTsgZWxzZSBTcGlubmVyXCI+XHJcbiAgICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgbWF0U29ydD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtcGx1c1wiIChjbGljayk9XCJBZGRPYmooKVwiICpuZ0lmPVwiY2FuQWRkVGhpcygpXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IG9ialwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLWV5ZVwiIFtyb3V0ZXJMaW5rXT1cImRpc3BsYXlPYmpMaW5rVGhpcyhvYmopXCIgKm5nSWY9XCJjYW5EaXNwbGF5T2JqVGhpcyhvYmopXCI+XHJcbiAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCJhY3Rpb24uaWNvbi5pY29uICYmICghYWN0aW9uLmRpc3BsYXkgfHwgYWN0aW9uLmRpc3BsYXkob2JqLCBhY3Rpb24ubmFtZSkpXCI+XHJcbiAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25cIiBbcm91dGVyTGlua109XCJhY3Rpb24ucm91dGVyTGlua0ZjdChvYmopXCIgKm5nSWY9XCIhYWN0aW9uLmljb24uaWNvbiAmJiAoIWFjdGlvbi5kaXNwbGF5IHx8IGFjdGlvbi5kaXNwbGF5KG9iaiwgYWN0aW9uLm5hbWUpKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbCBmYS10cmFzaC1hbHRcIiAoY2xpY2spPVwiRGVsZXRlT2JqKG9iailcIiAqbmdJZj1cImNhbkRlbGV0ZVRoaXMob2JqKVwiPlxyXG4gICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXBlbmNpbFwiIChjbGljayk9XCJFZGl0T2JqKG9iailcIiAqbmdJZj1cImNhbkVkaXRUaGlzKG9iailcIj5cclxuICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnbHctcmVzdWx0LXRhYmxlXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbnNUb0Rpc3BsYXlcIj48L3RyPlxyXG4gICAgICAgICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IG15Um93RGF0YTsgY29sdW1uczogY29sdW1uc1RvRGlzcGxheVwiPjwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8bWF0LXBhZ2luYXRvciBwYWdlU2l6ZT1cIjEwXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgI1NwaW5uZXI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
@@ -1037,8 +1037,9 @@ class DisplayObjectsComponent {
1037
1037
  }
1038
1038
  }
1039
1039
  onSearch() {
1040
+ var _a;
1040
1041
  this.queryParams = {};
1041
- Object.keys(this.form.value).forEach(name => {
1042
+ Object.keys((_a = this.form) === null || _a === void 0 ? void 0 : _a.value).forEach(name => {
1042
1043
  const val = this.form.value[name];
1043
1044
  if (val) {
1044
1045
  if (val.constructor.name === 'Moment') {
@@ -1339,10 +1340,10 @@ class DisplayObjectsComponent {
1339
1340
  }
1340
1341
  }
1341
1342
  DisplayObjectsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$2.MatDialog }, { token: i2.Router }, { token: i3.Location }, { token: AuthenticationService }, { token: i1$3.FormBuilder }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
1342
- DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-content *ngComponentOutlet=\"SearchForm\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i5$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
1343
+ DisplayObjectsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: DisplayObjectsComponent, selector: "glw-display-objects", inputs: { configuration: "configuration", displayObjLink: "displayObjLink", canDisplayObj: "canDisplayObj", canEdit: "canEdit", canDelete: "canDelete", canAdd: "canAdd", form: "form", Editor: "Editor", SearchForm: "SearchForm", searchRequest: "searchRequest", postRequest: "postRequest", deleteRequest: "deleteRequest", putRequest: "putRequest", columns: "columns", glowwService: "glowwService", objectName: "objectName", primaryKey: "primaryKey", maxrows: "maxrows", mandatoryParams: "mandatoryParams", actions: "actions", dialogConfig: "dialogConfig", fileFields: "fileFields" }, queries: [{ propertyName: "header", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "formLayout", first: true, predicate: SearchFormComponent, descendants: true }, { propertyName: "resultLayout", first: true, predicate: ResultTableComponent, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-container *ngComponentOutlet=\"SearchForm\"></ng-container>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"], components: [{ type: i5$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i13.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i14.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i7.MatError, selector: "mat-error", inputs: ["id"] }, { type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5$1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i15.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i12.MatCellDef, selector: "[matCellDef]" }, { type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
1343
1344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DisplayObjectsComponent, decorators: [{
1344
1345
  type: Component,
1345
- args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-content *ngComponentOutlet=\"SearchForm\"></ng-content>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
1346
+ args: [{ selector: 'glw-display-objects', template: "<div>\r\n <ng-content select=\"glw-header\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"displayform\">\r\n <mat-card>\r\n <mat-card-content>\r\n <mat-error *ngIf=\"resultException\">\r\n Unable to query : {{resultException}}\r\n </mat-error>\r\n <ng-content select=\"glw-search-form\"></ng-content>\r\n <ng-container *ngComponentOutlet=\"SearchForm\"></ng-container>\r\n <div *ngIf=\"maxrows\" [formGroup]=\"form2\">\r\n <br />\r\n <mat-form-field>\r\n <mat-select placeholder=\"MaxRow\" formControlName=\"_MaxRow_\">\r\n <mat-option *ngFor=\"let maxrow of maxrows\" [value]=\"maxrow\">\r\n <span *ngIf=\"maxrow\">{{maxrow}} objects</span>\r\n <span *ngIf=\"!maxrow\"> Default</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <button mat-stroked-button color=\"accent\" (click)=\"onSearch()\">\r\n <mat-icon>search</mat-icon>\r\n Search\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n</div>\r\n\r\n<div *ngIf=\"displayresult\">\r\n <div class=\"mat-elevation-z8\" *ngIf=\"dataSource; else Spinner\">\r\n <table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <i class=\"fal fa-plus\" (click)=\"AddObj()\" *ngIf=\"canAddThis()\">\r\n </i>\r\n </th>\r\n <td mat-cell *matCellDef=\"let obj\">\r\n <i class=\"fal fa-eye\" [routerLink]=\"displayObjLinkThis(obj)\" *ngIf=\"canDisplayObjThis(obj)\">\r\n </i>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"action.icon.icon && (!action.display || action.display(obj, action.name))\">\r\n </i>\r\n <i [ngClass]=\"action.icon\" [routerLink]=\"action.routerLinkFct(obj)\" *ngIf=\"!action.icon.icon && (!action.display || action.display(obj, action.name))\"></i>\r\n </ng-container>\r\n <i class=\"fal fa-trash-alt\" (click)=\"DeleteObj(obj)\" *ngIf=\"canDeleteThis(obj)\">\r\n </i>\r\n <i class=\"fal fa-pencil\" (click)=\"EditObj(obj)\" *ngIf=\"canEditThis(obj)\">\r\n </i>\r\n </td>\r\n </ng-container>\r\n <ng-content select=\"glw-result-table\"></ng-content>\r\n <tr mat-header-row *matHeaderRowDef=\"columnsToDisplay\"></tr>\r\n <tr mat-row *matRowDef=\"let myRowData; columns: columnsToDisplay\"></tr>\r\n </table>\r\n <mat-paginator pageSize=\"10\"></mat-paginator>\r\n </div>\r\n <ng-template #Spinner>\r\n <mat-spinner></mat-spinner>\r\n </ng-template>\r\n</div>", styles: ["table{width:100%}i{cursor:pointer;padding:5px}\n"] }]
1346
1347
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1$2.MatDialog }, { type: i2.Router }, { type: i3.Location }, { type: AuthenticationService }, { type: i1$3.FormBuilder }, { type: i2.ActivatedRoute }]; }, propDecorators: { header: [{
1347
1348
  type: ContentChild,
1348
1349
  args: [HeaderComponent]