UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

46 lines 31 kB
import { Component } from '@angular/core'; import { MAT_DATE_FORMATS } from '@angular/material/core'; import { AbstractSearchModeComponent, DATE_FORMAT, DATE_TIME_FORMAT } from '@netgrif/components-core'; import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker'; import { UserAssignDialogComponent } from '../../../dialog/user-assign-dialog/user-assign-dialog.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/common"; import * as i3 from "@ngbracket/ngx-layout"; import * as i4 from "@ngbracket/ngx-layout/extended"; import * as i5 from "@angular/material/core"; import * as i6 from "@angular/material/checkbox"; import * as i7 from "@angular/material/datepicker"; import * as i8 from "@angular/material/icon"; import * as i9 from "@angular/material/input"; import * as i10 from "@angular/material/form-field"; import * as i11 from "@angular/material/select"; import * as i12 from "@angular/forms"; import * as i13 from "@angular-material-components/datetime-picker"; import * as i14 from "@ngx-translate/core"; export class SearchModeComponent extends AbstractSearchModeComponent { _dialog; constructor(_dialog) { super(_dialog); this._dialog = _dialog; } selectUser(column) { this.selectAbstractUser(column, UserAssignDialogComponent); } setValue() { this.approvalFormControl.setValue(true); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchModeComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchModeComponent, selector: "nc-search-mode", providers: [ { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT }, { provide: NGX_MAT_DATE_FORMATS, useValue: DATE_TIME_FORMAT } ], usesInheritance: true, ngImport: i0, template: "<div fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\" center\">\n <mat-checkbox *ngIf=\"approval && typeApproval === 'multichoice'\" [formControl]=\"approvalFormControl\" [indeterminate]=\"indeterminate\"\n (click)=\"$event.stopPropagation();\" color='primary' class=\"checkbox-padding\"></mat-checkbox>\n <mat-icon *ngIf=\"approval && typeApproval === 'enumeration'\" color=\"warn\" (click)=\"setValue();$event.stopPropagation();\" class=\"checkbox-padding cursor-fix\">close</mat-icon>\n <div *ngFor=\"let header of this.headerService.selectedHeaders$ | async; let i = index\"\n [fxHide.lt-xl]=\"i >= 4 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-lg]=\"i >= 3 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-md]=\"i >= 2 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-sm]=\"i >= 1 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n fxFlex [ngStyle]=\"{'min-width': getMinWidth()}\">\n <div\n *ngIf=\"!!header && header.fieldType !== 'button'; then thenBlock else elseBlock\"\n fxFlex></div>\n <ng-template #thenBlock>\n <div fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex [ngSwitch]=\"header.fieldType\" class=\"netgrif-input netgrif-header-input netgrif-input-fix netgrif-zero-field-wrapper\">\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'date'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput autocomplete=\"off\"\n [matDatepicker]=\"datepicker\"\n [formControl]=\"formControls[i]\"\n [placeholder]=\"'headers.date' | translate\"\n (click)=\"datepicker.open()\"\n (keydown.enter)=\"datepicker.close()\">\n<!-- <mat-datepicker-toggle matPrefix [for]=\"datepicker\"></mat-datepicker-toggle>-->\n <mat-datepicker #datepicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'dateTime'\"\n appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput autocomplete=\"off\"\n [ngxMatDatetimePicker]=\"datetimepicker\"\n [formControl]=\"formControls[i]\"\n [placeholder]=\"'headers.dateTime' | translate\"\n (click)=\"datetimepicker.open()\"\n (keydown.enter)=\"datetimepicker.close()\">\n<!-- <mat-datepicker-toggle matPrefix [for]=\"datetimepicker\"></mat-datepicker-toggle>-->\n <ngx-mat-datetime-picker #datetimepicker\n [showSpinners]=\"true\"\n [showSeconds]=\"false\"\n [stepHour]=\"1\"\n [stepMinute]=\"5\"\n [color]=\"'primary'\"\n [enableMeridian]=\"false\">\n </ngx-mat-datetime-picker>\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'number'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput type=\"number\" [formControl]=\"formControls[i]\">\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'boolean'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <mat-select matInput [formControl]=\"formControls[i]\">\n <mat-option>---</mat-option>\n <mat-option [value]=\"true\">{{'dataField.values.boolean.true' | translate}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'user'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput (click)=\"selectUser(i)\" autocomplete=\"false\"\n [formControl]=\"formControls[i]\">\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchDefault\n appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput [formControl]=\"formControls[i]\">\n </mat-form-field>\n </div>\n </ng-template>\n\n <ng-template #elseBlock>\n <div fxFlex></div>\n </ng-template>\n </div>\n</div>\n", styles: [".checkbox-padding{padding-right:12px}.cursor-fix{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i4.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i13.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i13.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchModeComponent, decorators: [{ type: Component, args: [{ selector: 'nc-search-mode', providers: [ { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT }, { provide: NGX_MAT_DATE_FORMATS, useValue: DATE_TIME_FORMAT } ], template: "<div fxFlex=\"100\" fxLayout=\"row\" fxLayoutAlign=\" center\">\n <mat-checkbox *ngIf=\"approval && typeApproval === 'multichoice'\" [formControl]=\"approvalFormControl\" [indeterminate]=\"indeterminate\"\n (click)=\"$event.stopPropagation();\" color='primary' class=\"checkbox-padding\"></mat-checkbox>\n <mat-icon *ngIf=\"approval && typeApproval === 'enumeration'\" color=\"warn\" (click)=\"setValue();$event.stopPropagation();\" class=\"checkbox-padding cursor-fix\">close</mat-icon>\n <div *ngFor=\"let header of this.headerService.selectedHeaders$ | async; let i = index\"\n [fxHide.lt-xl]=\"i >= 4 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-lg]=\"i >= 3 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-md]=\"i >= 2 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n [fxHide.lt-sm]=\"i >= 1 && this.headerService.responsiveHeaders && !this.headerService.overflowMode\"\n fxFlex [ngStyle]=\"{'min-width': getMinWidth()}\">\n <div\n *ngIf=\"!!header && header.fieldType !== 'button'; then thenBlock else elseBlock\"\n fxFlex></div>\n <ng-template #thenBlock>\n <div fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex [ngSwitch]=\"header.fieldType\" class=\"netgrif-input netgrif-header-input netgrif-input-fix netgrif-zero-field-wrapper\">\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'date'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput autocomplete=\"off\"\n [matDatepicker]=\"datepicker\"\n [formControl]=\"formControls[i]\"\n [placeholder]=\"'headers.date' | translate\"\n (click)=\"datepicker.open()\"\n (keydown.enter)=\"datepicker.close()\">\n<!-- <mat-datepicker-toggle matPrefix [for]=\"datepicker\"></mat-datepicker-toggle>-->\n <mat-datepicker #datepicker></mat-datepicker>\n </mat-form-field>\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'dateTime'\"\n appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput autocomplete=\"off\"\n [ngxMatDatetimePicker]=\"datetimepicker\"\n [formControl]=\"formControls[i]\"\n [placeholder]=\"'headers.dateTime' | translate\"\n (click)=\"datetimepicker.open()\"\n (keydown.enter)=\"datetimepicker.close()\">\n<!-- <mat-datepicker-toggle matPrefix [for]=\"datetimepicker\"></mat-datepicker-toggle>-->\n <ngx-mat-datetime-picker #datetimepicker\n [showSpinners]=\"true\"\n [showSeconds]=\"false\"\n [stepHour]=\"1\"\n [stepMinute]=\"5\"\n [color]=\"'primary'\"\n [enableMeridian]=\"false\">\n </ngx-mat-datetime-picker>\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'number'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput type=\"number\" [formControl]=\"formControls[i]\">\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'boolean'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <mat-select matInput [formControl]=\"formControls[i]\">\n <mat-option>---</mat-option>\n <mat-option [value]=\"true\">{{'dataField.values.boolean.true' | translate}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchCase=\"'user'\" appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput (click)=\"selectUser(i)\" autocomplete=\"false\"\n [formControl]=\"formControls[i]\">\n </mat-form-field>\n\n <mat-form-field color=\"primary\" fxLayout=\"row\" fxLayoutAlign=\" center\" fxFlex *ngSwitchDefault\n appearance=\"outline\">\n <mat-label>{{header.title | translate}}</mat-label>\n <input matInput [formControl]=\"formControls[i]\">\n </mat-form-field>\n </div>\n </ng-template>\n\n <ng-template #elseBlock>\n <div fxFlex></div>\n </ng-template>\n </div>\n</div>\n", styles: [".checkbox-padding{padding-right:12px}.cursor-fix{cursor:pointer}\n"] }] }], ctorParameters: () => [{ type: i1.MatDialog }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLW1vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvaGVhZGVyL2hlYWRlci1tb2Rlcy9zZWFyY2gtbW9kZS9zZWFyY2gtbW9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLW1vZGVzL3NlYXJjaC1tb2RlL3NlYXJjaC1tb2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFDLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQztBQUNySCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVkxRyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsMkJBQTJCO0lBRTFDO0lBQXRCLFlBQXNCLE9BQWtCO1FBQ3BDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURHLFlBQU8sR0FBUCxPQUFPLENBQVc7SUFFeEMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUFjO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQzt3R0FaUSxtQkFBbUI7NEZBQW5CLG1CQUFtQix5Q0FMakI7WUFDUCxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDO1lBQ2xELEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQztTQUM5RCxpRENkTCwwektBOEVBOzs0RkQ5RGEsbUJBQW1CO2tCQVQvQixTQUFTOytCQUNJLGdCQUFnQixhQUdmO3dCQUNQLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUM7d0JBQ2xELEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQztxQkFDOUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9EQVRFX0ZPUk1BVFN9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdFNlYXJjaE1vZGVDb21wb25lbnQsIERBVEVfRk9STUFULCBEQVRFX1RJTUVfRk9STUFULCBTaWRlTWVudVNlcnZpY2V9IGZyb20gJ0BuZXRncmlmL2NvbXBvbmVudHMtY29yZSc7XG5pbXBvcnQge05HWF9NQVRfREFURV9GT1JNQVRTfSBmcm9tICdAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlcic7XG5pbXBvcnQge1VzZXJBc3NpZ25EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2RpYWxvZy91c2VyLWFzc2lnbi1kaWFsb2cvdXNlci1hc3NpZ24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYy1zZWFyY2gtbW9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1tb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtbW9kZS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IERBVEVfRk9STUFUfSxcbiAgICAgICAge3Byb3ZpZGU6IE5HWF9NQVRfREFURV9GT1JNQVRTLCB1c2VWYWx1ZTogREFURV9USU1FX0ZPUk1BVH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaE1vZGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFNlYXJjaE1vZGVDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9kaWFsb2c6IE1hdERpYWxvZykge1xuICAgICAgICBzdXBlcihfZGlhbG9nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0VXNlcihjb2x1bW46IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdEFic3RyYWN0VXNlcihjb2x1bW4sIFVzZXJBc3NpZ25EaWFsb2dDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5hcHByb3ZhbEZvcm1Db250cm9sLnNldFZhbHVlKHRydWUpO1xuICAgIH1cbn1cbiIsIjxkaXYgZnhGbGV4PVwiMTAwXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiIGNlbnRlclwiPlxuICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJhcHByb3ZhbCAmJiB0eXBlQXBwcm92YWwgPT09ICdtdWx0aWNob2ljZSdcIiBbZm9ybUNvbnRyb2xdPVwiYXBwcm92YWxGb3JtQ29udHJvbFwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjb2xvcj0ncHJpbWFyeScgY2xhc3M9XCJjaGVja2JveC1wYWRkaW5nXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiYXBwcm92YWwgJiYgdHlwZUFwcHJvdmFsID09PSAnZW51bWVyYXRpb24nXCIgY29sb3I9XCJ3YXJuXCIgKGNsaWNrKT1cInNldFZhbHVlKCk7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwiY2hlY2tib3gtcGFkZGluZyBjdXJzb3ItZml4XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0aGlzLmhlYWRlclNlcnZpY2Uuc2VsZWN0ZWRIZWFkZXJzJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgIFtmeEhpZGUubHQteGxdPVwiaSA+PSA0ICYmIHRoaXMuaGVhZGVyU2VydmljZS5yZXNwb25zaXZlSGVhZGVycyAmJiAhdGhpcy5oZWFkZXJTZXJ2aWNlLm92ZXJmbG93TW9kZVwiXG4gICAgICAgICBbZnhIaWRlLmx0LWxnXT1cImkgPj0gMyAmJiB0aGlzLmhlYWRlclNlcnZpY2UucmVzcG9uc2l2ZUhlYWRlcnMgJiYgIXRoaXMuaGVhZGVyU2VydmljZS5vdmVyZmxvd01vZGVcIlxuICAgICAgICAgW2Z4SGlkZS5sdC1tZF09XCJpID49IDIgJiYgdGhpcy5oZWFkZXJTZXJ2aWNlLnJlc3BvbnNpdmVIZWFkZXJzICYmICF0aGlzLmhlYWRlclNlcnZpY2Uub3ZlcmZsb3dNb2RlXCJcbiAgICAgICAgIFtmeEhpZGUubHQtc21dPVwiaSA+PSAxICYmIHRoaXMuaGVhZGVyU2VydmljZS5yZXNwb25zaXZlSGVhZGVycyAmJiAhdGhpcy5oZWFkZXJTZXJ2aWNlLm92ZXJmbG93TW9kZVwiXG4gICAgICAgICBmeEZsZXggW25nU3R5bGVdPVwieydtaW4td2lkdGgnOiBnZXRNaW5XaWR0aCgpfVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiEhaGVhZGVyICYmIGhlYWRlci5maWVsZFR5cGUgIT09ICdidXR0b24nOyB0aGVuIHRoZW5CbG9jayBlbHNlIGVsc2VCbG9ja1wiXG4gICAgICAgICAgICBmeEZsZXg+PC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCIgY2VudGVyXCIgZnhGbGV4IFtuZ1N3aXRjaF09XCJoZWFkZXIuZmllbGRUeXBlXCIgY2xhc3M9XCJuZXRncmlmLWlucHV0IG5ldGdyaWYtaGVhZGVyLWlucHV0IG5ldGdyaWYtaW5wdXQtZml4IG5ldGdyaWYtemVyby1maWVsZC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwicHJpbWFyeVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cIiBjZW50ZXJcIiBmeEZsZXggKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3toZWFkZXIudGl0bGUgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sc1tpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2hlYWRlcnMuZGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRhdGVwaWNrZXIuY2xvc2UoKVwiPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRQcmVmaXggW2Zvcl09XCJkYXRlcGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+LS0+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZXBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwicHJpbWFyeVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cIiBjZW50ZXJcIiBmeEZsZXggKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7aGVhZGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmd4TWF0RGF0ZXRpbWVQaWNrZXJdPVwiZGF0ZXRpbWVwaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sc1tpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2hlYWRlcnMuZGF0ZVRpbWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRldGltZXBpY2tlci5vcGVuKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGF0ZXRpbWVwaWNrZXIuY2xvc2UoKVwiPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRQcmVmaXggW2Zvcl09XCJkYXRldGltZXBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPi0tPlxuICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1kYXRldGltZS1waWNrZXIgI2RhdGV0aW1lcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NwaW5uZXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwSG91cl09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlTWVyaWRpYW5dPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtbWF0LWRhdGV0aW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwicHJpbWFyeVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cIiBjZW50ZXJcIiBmeEZsZXggKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2hlYWRlci50aXRsZSB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sc1tpXVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY29sb3I9XCJwcmltYXJ5XCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiIGNlbnRlclwiIGZ4RmxleCAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2hlYWRlci50aXRsZSB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbHNbaV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPi0tLTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+e3snZGF0YUZpZWxkLnZhbHVlcy5ib29sZWFuLnRydWUnIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwicHJpbWFyeVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cIiBjZW50ZXJcIiBmeEZsZXggKm5nU3dpdGNoQ2FzZT1cIid1c2VyJ1wiICBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7aGVhZGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IChjbGljayk9XCJzZWxlY3RVc2VyKGkpXCIgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbHNbaV1cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNvbG9yPVwicHJpbWFyeVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cIiBjZW50ZXJcIiBmeEZsZXggKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7aGVhZGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbHNbaV1cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19