UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

35 lines 20.5 kB
import { Component, Inject, Optional } from '@angular/core'; import { DATA_FIELD_PORTAL_DATA, AbstractUserDefaultFieldComponent } from '@netgrif/components-core'; 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 "@netgrif/components-core"; import * as i3 from "@ngx-translate/core"; import * as i4 from "@angular/common"; import * as i5 from "@ngbracket/ngx-layout"; import * as i6 from "@ngbracket/ngx-layout/extended"; import * as i7 from "@angular/material/button"; import * as i8 from "@angular/material/icon"; import * as i9 from "@angular/material/form-field"; import * as i10 from "@angular/material/tooltip"; import * as i11 from "../../required-label/required-label.component"; export class UserDefaultFieldComponent extends AbstractUserDefaultFieldComponent { constructor(dialog, snackbar, translate, dataFieldPortalData) { super(dialog, snackbar, translate, dataFieldPortalData); } selectUser() { super.selectAbstractUser(UserAssignDialogComponent); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserDefaultFieldComponent, deps: [{ token: i1.MatDialog }, { token: i2.SnackBarService }, { token: i3.TranslateService }, { token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserDefaultFieldComponent, selector: "nc-user-default-field", usesInheritance: true, ngImport: i0, template: "<div fxLayoutAlign=\"center center\" fxLayout=\"row\">\n <div fxFlex=\"100\" [ngClass]=\"{'netgrif-user-padding': !(!dataField.isInvalid(formControlRef) && hasHint()) && !dataField.isInvalid(formControlRef)}\">\n <div #userLabel class=\"user-field-label\" [ngClass]=\"{'netgrif-label-disabled': formControlRef.disabled}\">\n {{dataField.title}}\n <nc-required-label *ngIf=\"dataField.behavior.required\" [isIn]=\"!dataField.disabled\"></nc-required-label>\n </div>\n <div class=\"form-input button-icon-input full-width\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\n [ngClass]=\"{'form-input-disabled': formControlRef.disabled, 'form-input-error': dataField.isInvalid(formControlRef)}\"\n [ngStyle]=\"{\n '-webkit-clip-path': getCutProperty(userLabel),\n 'clip-path': getCutProperty(userLabel)\n }\">\n <button mat-icon-button\n *ngIf=\"!!dataField.value && !formControlRef.disabled\"\n [disabled]=\"formControlRef.disabled\"\n color=\"primary\"\n (click)='deleteUser()'\n [matTooltip]=\"'dataField.user.deleteUser' | translate\"\n [class.do-not-click]=\"formControlRef.disabled\">\n <mat-icon color='warn' *ngIf='!formControlRef.disabled'>close</mat-icon>\n </button>\n <button mat-icon-button\n *ngIf=\"!dataField.value && !formControlRef.disabled\"\n [disabled]=\"formControlRef.disabled\"\n color=\"primary\"\n (click)=\"selectUser()\"\n [matTooltip]=\"'dataField.user.selectUser' | translate\"\n [class.do-not-click]=\"formControlRef.disabled\">\n <mat-icon>person_add</mat-icon>\n </button>\n <span fxFlex class=\"input-name-ellipsis padding-left\" [ngClass]=\"{'input-placeholder': !!dataField.value, 'no-cursor': !!dataField.value && formControlRef.disabled}\">\n {{!!dataField.value ? dataField.value.fullName : 'dataField.user.selectUser' | translate}}</span>\n </div>\n <mat-hint class=\"user-hint-error\" [ngClass]=\"{'mat-hint-disabled': formControlRef.disabled}\"\n *ngIf=\"!dataField.isInvalid(formControlRef) && hasHint()\">{{dataField.description}}</mat-hint>\n <mat-error class=\"user-hint-error\"\n *ngIf=\"dataField.isInvalid(formControlRef)\">{{'dataField.validations.required' | translate}}</mat-error>\n </div>\n</div>\n", styles: [".do-not-click:hover{cursor:not-allowed}.input-name-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.input-placeholder{color:#64748b}.button-icon-input{padding:2px!important}.full-width{width:100%;min-width:100%}.padding-left{padding-left:8px}.form-input{background:#fff;color:#64748b;outline:none;border:1px solid #64748B;text-align:left;font-size:14px;line-height:20px;border-radius:6px;min-width:5px;padding:8px 15px;box-sizing:border-box;height:44px}.form-input:hover{border-width:2px;padding-left:1px!important}.form-input-disabled{background:transparent!important;border-color:#cbd5e1!important}.form-input-disabled:hover{border-width:1px;padding:2px!important}.user-hint-error{padding:0 1em;width:unset}.image-preview{width:auto;height:auto;cursor:pointer}.no-cursor{cursor:default!important;color:#64748b}.border-default{border-width:1px;border-style:solid;border-color:#000}@media only screen and (max-width: 959.99px){.input-name-ellipsis{word-break:break-word;white-space:normal;overflow-y:auto;max-height:40px}}.user-field-label{transform:translate(.4em,-.45em) scale(.75);transform-origin:left;color:#64748b;background:transparent;width:fit-content;padding:0 .5em;z-index:5;height:0;position:relative}.netgrif-user-padding{padding-bottom:22px;position:relative}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.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: i5.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: i5.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: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i6.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: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.RequiredLabelComponent, selector: "nc-required-label", inputs: ["isIn"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserDefaultFieldComponent, decorators: [{ type: Component, args: [{ selector: 'nc-user-default-field', template: "<div fxLayoutAlign=\"center center\" fxLayout=\"row\">\n <div fxFlex=\"100\" [ngClass]=\"{'netgrif-user-padding': !(!dataField.isInvalid(formControlRef) && hasHint()) && !dataField.isInvalid(formControlRef)}\">\n <div #userLabel class=\"user-field-label\" [ngClass]=\"{'netgrif-label-disabled': formControlRef.disabled}\">\n {{dataField.title}}\n <nc-required-label *ngIf=\"dataField.behavior.required\" [isIn]=\"!dataField.disabled\"></nc-required-label>\n </div>\n <div class=\"form-input button-icon-input full-width\" fxLayout=\"row\" fxLayoutAlign=\"start center\"\n [ngClass]=\"{'form-input-disabled': formControlRef.disabled, 'form-input-error': dataField.isInvalid(formControlRef)}\"\n [ngStyle]=\"{\n '-webkit-clip-path': getCutProperty(userLabel),\n 'clip-path': getCutProperty(userLabel)\n }\">\n <button mat-icon-button\n *ngIf=\"!!dataField.value && !formControlRef.disabled\"\n [disabled]=\"formControlRef.disabled\"\n color=\"primary\"\n (click)='deleteUser()'\n [matTooltip]=\"'dataField.user.deleteUser' | translate\"\n [class.do-not-click]=\"formControlRef.disabled\">\n <mat-icon color='warn' *ngIf='!formControlRef.disabled'>close</mat-icon>\n </button>\n <button mat-icon-button\n *ngIf=\"!dataField.value && !formControlRef.disabled\"\n [disabled]=\"formControlRef.disabled\"\n color=\"primary\"\n (click)=\"selectUser()\"\n [matTooltip]=\"'dataField.user.selectUser' | translate\"\n [class.do-not-click]=\"formControlRef.disabled\">\n <mat-icon>person_add</mat-icon>\n </button>\n <span fxFlex class=\"input-name-ellipsis padding-left\" [ngClass]=\"{'input-placeholder': !!dataField.value, 'no-cursor': !!dataField.value && formControlRef.disabled}\">\n {{!!dataField.value ? dataField.value.fullName : 'dataField.user.selectUser' | translate}}</span>\n </div>\n <mat-hint class=\"user-hint-error\" [ngClass]=\"{'mat-hint-disabled': formControlRef.disabled}\"\n *ngIf=\"!dataField.isInvalid(formControlRef) && hasHint()\">{{dataField.description}}</mat-hint>\n <mat-error class=\"user-hint-error\"\n *ngIf=\"dataField.isInvalid(formControlRef)\">{{'dataField.validations.required' | translate}}</mat-error>\n </div>\n</div>\n", styles: [".do-not-click:hover{cursor:not-allowed}.input-name-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.input-placeholder{color:#64748b}.button-icon-input{padding:2px!important}.full-width{width:100%;min-width:100%}.padding-left{padding-left:8px}.form-input{background:#fff;color:#64748b;outline:none;border:1px solid #64748B;text-align:left;font-size:14px;line-height:20px;border-radius:6px;min-width:5px;padding:8px 15px;box-sizing:border-box;height:44px}.form-input:hover{border-width:2px;padding-left:1px!important}.form-input-disabled{background:transparent!important;border-color:#cbd5e1!important}.form-input-disabled:hover{border-width:1px;padding:2px!important}.user-hint-error{padding:0 1em;width:unset}.image-preview{width:auto;height:auto;cursor:pointer}.no-cursor{cursor:default!important;color:#64748b}.border-default{border-width:1px;border-style:solid;border-color:#000}@media only screen and (max-width: 959.99px){.input-name-ellipsis{word-break:break-word;white-space:normal;overflow-y:auto;max-height:40px}}.user-field-label{transform:translate(.4em,-.45em) scale(.75);transform-origin:left;color:#64748b;background:transparent;width:fit-content;padding:0 .5em;z-index:5;height:0;position:relative}.netgrif-user-padding{padding-bottom:22px;position:relative}\n"] }] }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.SnackBarService }, { type: i3.TranslateService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DATA_FIELD_PORTAL_DATA] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kZWZhdWx0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy9zcmMvbGliL2RhdGEtZmllbGRzL3VzZXItZmllbGQvdXNlci1kZWZhdWx0LWZpZWxkL3VzZXItZGVmYXVsdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL3VzZXItZGVmYXVsdC1maWVsZC91c2VyLWRlZmF1bHQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFDSCxzQkFBc0IsRUFJdEIsaUNBQWlDLEVBQ3BDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0saUVBQWlFLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFRMUcsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGlDQUFpQztJQUU1RSxZQUFZLE1BQWlCLEVBQ2pCLFFBQXlCLEVBQ3pCLFNBQTJCLEVBQ2lCLG1CQUFtRDtRQUN2RyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sVUFBVTtRQUNiLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7d0dBWFEseUJBQXlCLDBHQUtGLHNCQUFzQjs0RkFMN0MseUJBQXlCLG9GQ2pCdEMsb21GQXVDQTs7NEZEdEJhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7OzBCQVNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgREFUQV9GSUVMRF9QT1JUQUxfREFUQSxcbiAgICBTbmFja0JhclNlcnZpY2UsXG4gICAgRGF0YUZpZWxkUG9ydGFsRGF0YSxcbiAgICBVc2VyRmllbGQsXG4gICAgQWJzdHJhY3RVc2VyRGVmYXVsdEZpZWxkQ29tcG9uZW50XG59IGZyb20gJ0BuZXRncmlmL2NvbXBvbmVudHMtY29yZSc7XG5pbXBvcnQge1VzZXJBc3NpZ25EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2RpYWxvZy91c2VyLWFzc2lnbi1kaWFsb2cvdXNlci1hc3NpZ24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmMtdXNlci1kZWZhdWx0LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZGVmYXVsdC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItZGVmYXVsdC1maWVsZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJEZWZhdWx0RmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFVzZXJEZWZhdWx0RmllbGRDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IoZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgICAgICAgICAgc25hY2tiYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX0ZJRUxEX1BPUlRBTF9EQVRBKSBkYXRhRmllbGRQb3J0YWxEYXRhOiBEYXRhRmllbGRQb3J0YWxEYXRhPFVzZXJGaWVsZD4pIHtcbiAgICAgICAgc3VwZXIoZGlhbG9nLCBzbmFja2JhciwgdHJhbnNsYXRlLCBkYXRhRmllbGRQb3J0YWxEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0VXNlcigpIHtcbiAgICAgICAgc3VwZXIuc2VsZWN0QWJzdHJhY3RVc2VyKFVzZXJBc3NpZ25EaWFsb2dDb21wb25lbnQpO1xuICAgIH1cblxufVxuIiwiPGRpdiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0PVwicm93XCI+XG4gICAgPGRpdiBmeEZsZXg9XCIxMDBcIiBbbmdDbGFzc109XCJ7J25ldGdyaWYtdXNlci1wYWRkaW5nJzogISghZGF0YUZpZWxkLmlzSW52YWxpZChmb3JtQ29udHJvbFJlZikgJiYgaGFzSGludCgpKSAmJiAhZGF0YUZpZWxkLmlzSW52YWxpZChmb3JtQ29udHJvbFJlZil9XCI+XG4gICAgICAgIDxkaXYgI3VzZXJMYWJlbCBjbGFzcz1cInVzZXItZmllbGQtbGFiZWxcIiBbbmdDbGFzc109XCJ7J25ldGdyaWYtbGFiZWwtZGlzYWJsZWQnOiBmb3JtQ29udHJvbFJlZi5kaXNhYmxlZH1cIj5cbiAgICAgICAgICAgIHt7ZGF0YUZpZWxkLnRpdGxlfX1cbiAgICAgICAgICAgIDxuYy1yZXF1aXJlZC1sYWJlbCAqbmdJZj1cImRhdGFGaWVsZC5iZWhhdmlvci5yZXF1aXJlZFwiIFtpc0luXT1cIiFkYXRhRmllbGQuZGlzYWJsZWRcIj48L25jLXJlcXVpcmVkLWxhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5wdXQgYnV0dG9uLWljb24taW5wdXQgZnVsbC13aWR0aFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmb3JtLWlucHV0LWRpc2FibGVkJzogZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWQsICdmb3JtLWlucHV0LWVycm9yJzogZGF0YUZpZWxkLmlzSW52YWxpZChmb3JtQ29udHJvbFJlZil9XCJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LWNsaXAtcGF0aCc6IGdldEN1dFByb3BlcnR5KHVzZXJMYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICdjbGlwLXBhdGgnOiBnZXRDdXRQcm9wZXJ0eSh1c2VyTGFiZWwpXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEhZGF0YUZpZWxkLnZhbHVlICYmICFmb3JtQ29udHJvbFJlZi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbFJlZi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9J2RlbGV0ZVVzZXIoKSdcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2RhdGFGaWVsZC51c2VyLmRlbGV0ZVVzZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvLW5vdC1jbGlja109XCJmb3JtQ29udHJvbFJlZi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj0nd2FybicgKm5nSWY9JyFmb3JtQ29udHJvbFJlZi5kaXNhYmxlZCc+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkYXRhRmllbGQudmFsdWUgJiYgIWZvcm1Db250cm9sUmVmLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sUmVmLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVzZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidkYXRhRmllbGQudXNlci5zZWxlY3RVc2VyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kby1ub3QtY2xpY2tdPVwiZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cGVyc29uX2FkZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz1cImlucHV0LW5hbWUtZWxsaXBzaXMgcGFkZGluZy1sZWZ0XCIgW25nQ2xhc3NdPVwieydpbnB1dC1wbGFjZWhvbGRlcic6ICEhZGF0YUZpZWxkLnZhbHVlLCAnbm8tY3Vyc29yJzogISFkYXRhRmllbGQudmFsdWUgJiYgZm9ybUNvbnRyb2xSZWYuZGlzYWJsZWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ISFkYXRhRmllbGQudmFsdWUgPyBkYXRhRmllbGQudmFsdWUuZnVsbE5hbWUgOiAnZGF0YUZpZWxkLnVzZXIuc2VsZWN0VXNlcicgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtaGludCBjbGFzcz1cInVzZXItaGludC1lcnJvclwiIFtuZ0NsYXNzXT1cInsnbWF0LWhpbnQtZGlzYWJsZWQnOiBmb3JtQ29udHJvbFJlZi5kaXNhYmxlZH1cIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGF0YUZpZWxkLmlzSW52YWxpZChmb3JtQ29udHJvbFJlZikgJiYgaGFzSGludCgpXCI+e3tkYXRhRmllbGQuZGVzY3JpcHRpb259fTwvbWF0LWhpbnQ+XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ1c2VyLWhpbnQtZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YUZpZWxkLmlzSW52YWxpZChmb3JtQ29udHJvbFJlZilcIj57eydkYXRhRmllbGQudmFsaWRhdGlvbnMucmVxdWlyZWQnIHwgdHJhbnNsYXRlfX08L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19