UNPKG

@asoftwareworld/form-builder

Version:

ASW Form Builder helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same befor

136 lines 63.3 kB
/** * @license * Copyright ASW (A Software World) All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file */ import { Component, Inject } from '@angular/core'; import { Validators } from '@angular/forms'; import { MAT_DIALOG_DATA } from '@angular/material/dialog'; import { Constants } from '@asoftwareworld/form-builder/form-control/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@angular/material/dialog"; import * as i3 from "@angular/common"; import * as i4 from "@angular/material/input"; import * as i5 from "@angular/material/form-field"; import * as i6 from "@angular/material/select"; import * as i7 from "@angular/material/core"; import * as i8 from "@angular/material/slide-toggle"; import * as i9 from "@angular/material/tooltip"; import * as i10 from "@asoftwareworld/qrcode"; import * as i11 from "@angular/material/slider"; import * as i12 from "@angular/material/expansion"; export class AswQrCodeDialog { formBuilder; dialogRef; control; constants = Constants; value = 0.4; errorCorrectionLevels = ['L', 'M', 'Q', 'H']; modes = ['Numeric', 'Alphanumeric', 'Byte', 'Kanji']; aswFormatForm; aswDensityForm; aswQrLogoStyleForm; constructor(formBuilder, dialogRef, control) { this.formBuilder = formBuilder; this.dialogRef = dialogRef; this.control = control; } ngOnInit() { this.validateFormBuilder(); if (this.control) { this.setData(); } this.aswFormatForm.valueChanges.subscribe(val => { if (this.aswFormatForm.invalid) { return; } this.control.width = val.width; this.control.height = val.height; this.control.outerMargin = val.outerMargin; this.control.value = val.value; }); this.aswQrLogoStyleForm.valueChanges.subscribe(val => { if (this.aswQrLogoStyleForm.invalid) { return; } this.control.logoStyle = val; }); this.aswDensityForm.valueChanges.subscribe(val => { if (this.aswQrLogoStyleForm.invalid) { return; } this.control.density = val; }); } validateFormBuilder() { this.aswFormatForm = this.formBuilder.group({ value: [''], width: [200, [Validators.required]], height: [200, [Validators.required]], outerMargin: [0], column: [''] }); this.aswDensityForm = this.formBuilder.group({ typeNumber: [0, [Validators.required]], mode: ['Byte', [Validators.required]], errorCorrectionLevel: ['Q'] }); this.aswQrLogoStyleForm = this.formBuilder.group({ hideBackgroundCircle: [true], logoSize: [0.4, [Validators.required]], logoMargin: [0] }); } setData() { this.aswFormatForm.setValue({ value: this.control.value, width: this.control.width, height: this.control.height, outerMargin: this.control.outerMargin, column: this.control.column }); this.aswDensityForm.patchValue({ typeNumber: this.control.density.typeNumber, mode: this.control.density.mode, errorCorrectionLevel: this.control.density.errorCorrectionLevel }); this.aswQrLogoStyleForm.patchValue({ hideBackgroundCircle: this.control.logoStyle.hideBackgroundCircle, logoSize: this.control.logoStyle.logoSize, logoMargin: this.control.logoStyle.logoMargin }); } confirm() { const option = JSON.parse(JSON.stringify({ width: this.aswFormatForm.value.width, value: this.aswFormatForm.value.value, height: this.aswFormatForm.value.height, column: this.aswFormatForm.value.column, outerMargin: this.aswFormatForm.value.outerMargin, logo: this.control.logo, density: this.control.density, logoStyle: this.control.logoStyle, controlType: this.control.controlType })); this.dialogRef.close(option); } insertImage(event) { this.control.logo = event.target.value; } onNoClick() { this.dialogRef.close(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswQrCodeDialog, deps: [{ token: i1.FormBuilder }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: AswQrCodeDialog, selector: "asw-qrcode-dialog", ngImport: i0, template: "<h4 mat-dialog-title>Edit Property</h4>\r\n<mat-dialog-content class=\"mat-typography\">\r\n <div class=\"row p-2\">\r\n <div class=\"col-md-4\">\r\n <div class=\"sticky-top\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h4 class=\"text-center\">Preview</h4>\r\n </div>\r\n <div class=\"col-md-12 d-flex align-items-center justify-content-center\">\r\n <asw-qr-code #child [width]=\"control.width\" \r\n [height]=\"control.height\"\r\n [qrData]=\"control.value\" \r\n [outerMargin]=\"control.outerMargin\"\r\n [logo]=\"control.logo\" [allowEmptyString]=\"true\"\r\n [density]=\"control.density\" \r\n [logoStyle]=\"control.logoStyle\">\r\n </asw-qr-code>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <mat-accordion class=\"example-headers-align\" multi>\r\n <mat-expansion-panel expanded=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Format\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswFormatForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Data</mat-label>\r\n <input matInput type=\"text\" name=\"value\" placeholder=\"QR code data\"\r\n matTooltip=\"Enter QR code data\" formControlName=\"value\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Width</mat-label>\r\n <input matInput type=\"number\" name=\"width\" min=\"100\" max=\"600\" placeholder=\"QR code width\"\r\n matTooltip=\"Enter QR code width\" formControlName=\"width\" required>\r\n <mat-error *ngFor=\"let validation of constants.accountValidationMessages.width\">\r\n <ng-container *ngIf=\"aswFormatForm.get('width')?.hasError(validation.type) && (aswFormatForm.get('width')?.dirty || aswFormatForm.get('width')?.touched)\">\r\n {{validation.message}}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Height</mat-label>\r\n <input matInput type=\"number\" name=\"height\" min=\"100\" max=\"600\"\r\n placeholder=\"QR code height\" matTooltip=\"Enter QR code height\" formControlName=\"height\"\r\n required>\r\n <mat-error *ngFor=\"let validation of constants.accountValidationMessages.height\">\r\n <ng-container *ngIf=\"aswFormatForm.get('height')?.hasError(validation.type) && (aswFormatForm.get('height')?.dirty || aswFormatForm.get('height')?.touched)\">\r\n {{validation.message}}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Column Size</mat-label>\r\n <mat-select formControlName=\"column\" matTooltip=\"Select column size\">\r\n <mat-option *ngFor=\"let column of constants.columns\" [value]=\"column.value\">\r\n {{column.label}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Outer Margin</mat-label>\r\n <input matInput type=\"number\" name=\"margin\" min=\"0\" max=\"30\" placeholder=\"QR code margin\"\r\n matTooltip=\"Enter QR code margin\" formControlName=\"outerMargin\" required>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Density\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswDensityForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Type Number</label>\r\n <label class=\"asw-value-label\">{{aswDensityForm.value.typeNumber}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"40\" step=\"1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"typeNumber\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Error Correction Level</mat-label>\r\n <mat-select formControlName=\"errorCorrectionLevel\"\r\n matTooltip=\"Select error correction level\">\r\n <mat-option *ngFor=\"let ecl of errorCorrectionLevels\" [value]=\"ecl\">\r\n {{ecl}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Mode</mat-label>\r\n <mat-select formControlName=\"mode\" matTooltip=\"Select qr code mode\">\r\n <mat-option *ngFor=\"let m of modes\" [value]=\"m\">\r\n {{m}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n \r\n \r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Logo\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswQrLogoStyleForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Logo url</mat-label>\r\n <input matInput type=\"text\" name=\"logo\" placeholder=\"Logo\"\r\n (change)=\"insertImage($event)\"\r\n matTooltip=\"Enter Logo\" formControlName=\"logo\">\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngIf=\"control.logo\">\r\n <div class=\"col-md-12\">\r\n <mat-slide-toggle color=\"primary\" formControlName=\"hideBackgroundCircle\">\r\n Hide Background Dots\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"asw-label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Logo Size</label>\r\n <label class=\"asw-value-label\">{{aswQrLogoStyleForm.value.logoSize}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"1\" step=\"0.1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"logoSize\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Logo Margin</label>\r\n <label class=\"asw-value-label\">{{aswQrLogoStyleForm.value.logoMargin}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"10\" step=\"1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"logoMargin\">\r\n </mat-slider>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button type=\"button\"\r\n class=\"btn btn-danger mr-2 me-2 mb-1\"\r\n (click)=\"onNoClick()\">\r\n No\r\n </button>\r\n <button type=\"submit\"\r\n class=\"btn btn-primary mb-1\"\r\n cdkFocusInitial (click)=\"confirm()\">\r\n Yes\r\n </button>\r\n</mat-dialog-actions>\r\n\r\n", styles: [".asw-label-container{display:flex;justify-content:space-between}.asw-result-card .asw-value-label{font-weight:600}.asw-default-image{display:flex;justify-content:center}.asw-default-image img{margin-left:5px;margin-right:5px;cursor:pointer}.asw-mini-fab{height:24px!important;width:24px!important;border-radius:4px!important;padding-top:10px}.asw-sticky-top{top:25%!important}.asw-width-99{width:99%!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.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: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i8.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.AswQrCodeComponent, selector: "asw-qr-code", inputs: ["type", "width", "height", "outerMargin", "qrData", "logo", "allowEmptyString", "density", "logoStyle", "middleShape", "backgroundColor", "cornerInnerShape", "cornerOuterShape"], outputs: ["qrCodeURL"] }, { kind: "component", type: i11.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i11.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i12.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i12.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i12.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i12.MatExpansionPanelTitle, selector: "mat-panel-title" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswQrCodeDialog, decorators: [{ type: Component, args: [{ selector: 'asw-qrcode-dialog', template: "<h4 mat-dialog-title>Edit Property</h4>\r\n<mat-dialog-content class=\"mat-typography\">\r\n <div class=\"row p-2\">\r\n <div class=\"col-md-4\">\r\n <div class=\"sticky-top\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <h4 class=\"text-center\">Preview</h4>\r\n </div>\r\n <div class=\"col-md-12 d-flex align-items-center justify-content-center\">\r\n <asw-qr-code #child [width]=\"control.width\" \r\n [height]=\"control.height\"\r\n [qrData]=\"control.value\" \r\n [outerMargin]=\"control.outerMargin\"\r\n [logo]=\"control.logo\" [allowEmptyString]=\"true\"\r\n [density]=\"control.density\" \r\n [logoStyle]=\"control.logoStyle\">\r\n </asw-qr-code>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <mat-accordion class=\"example-headers-align\" multi>\r\n <mat-expansion-panel expanded=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Format\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswFormatForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Data</mat-label>\r\n <input matInput type=\"text\" name=\"value\" placeholder=\"QR code data\"\r\n matTooltip=\"Enter QR code data\" formControlName=\"value\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Width</mat-label>\r\n <input matInput type=\"number\" name=\"width\" min=\"100\" max=\"600\" placeholder=\"QR code width\"\r\n matTooltip=\"Enter QR code width\" formControlName=\"width\" required>\r\n <mat-error *ngFor=\"let validation of constants.accountValidationMessages.width\">\r\n <ng-container *ngIf=\"aswFormatForm.get('width')?.hasError(validation.type) && (aswFormatForm.get('width')?.dirty || aswFormatForm.get('width')?.touched)\">\r\n {{validation.message}}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Height</mat-label>\r\n <input matInput type=\"number\" name=\"height\" min=\"100\" max=\"600\"\r\n placeholder=\"QR code height\" matTooltip=\"Enter QR code height\" formControlName=\"height\"\r\n required>\r\n <mat-error *ngFor=\"let validation of constants.accountValidationMessages.height\">\r\n <ng-container *ngIf=\"aswFormatForm.get('height')?.hasError(validation.type) && (aswFormatForm.get('height')?.dirty || aswFormatForm.get('height')?.touched)\">\r\n {{validation.message}}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Column Size</mat-label>\r\n <mat-select formControlName=\"column\" matTooltip=\"Select column size\">\r\n <mat-option *ngFor=\"let column of constants.columns\" [value]=\"column.value\">\r\n {{column.label}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Outer Margin</mat-label>\r\n <input matInput type=\"number\" name=\"margin\" min=\"0\" max=\"30\" placeholder=\"QR code margin\"\r\n matTooltip=\"Enter QR code margin\" formControlName=\"outerMargin\" required>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Density\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswDensityForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Type Number</label>\r\n <label class=\"asw-value-label\">{{aswDensityForm.value.typeNumber}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"40\" step=\"1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"typeNumber\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Error Correction Level</mat-label>\r\n <mat-select formControlName=\"errorCorrectionLevel\"\r\n matTooltip=\"Select error correction level\">\r\n <mat-option *ngFor=\"let ecl of errorCorrectionLevels\" [value]=\"ecl\">\r\n {{ecl}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Mode</mat-label>\r\n <mat-select formControlName=\"mode\" matTooltip=\"Select qr code mode\">\r\n <mat-option *ngFor=\"let m of modes\" [value]=\"m\">\r\n {{m}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n \r\n \r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Logo\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <form [formGroup]=\"aswQrLogoStyleForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <mat-form-field appearance=\"outline\" class=\"asw-mat-form-field\">\r\n <mat-label>Logo url</mat-label>\r\n <input matInput type=\"text\" name=\"logo\" placeholder=\"Logo\"\r\n (change)=\"insertImage($event)\"\r\n matTooltip=\"Enter Logo\" formControlName=\"logo\">\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngIf=\"control.logo\">\r\n <div class=\"col-md-12\">\r\n <mat-slide-toggle color=\"primary\" formControlName=\"hideBackgroundCircle\">\r\n Hide Background Dots\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"asw-label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Logo Size</label>\r\n <label class=\"asw-value-label\">{{aswQrLogoStyleForm.value.logoSize}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"1\" step=\"0.1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"logoSize\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"label-container\">\r\n <label id=\"asw-name-label\" class=\"asw-name-label\">Logo Margin</label>\r\n <label class=\"asw-value-label\">{{aswQrLogoStyleForm.value.logoMargin}}</label>\r\n </div>\r\n <mat-slider min=\"0\" max=\"10\" step=\"1\" discrete class=\"asw-width-99\">\r\n <input matSliderThumb formControlName=\"logoMargin\">\r\n </mat-slider>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button type=\"button\"\r\n class=\"btn btn-danger mr-2 me-2 mb-1\"\r\n (click)=\"onNoClick()\">\r\n No\r\n </button>\r\n <button type=\"submit\"\r\n class=\"btn btn-primary mb-1\"\r\n cdkFocusInitial (click)=\"confirm()\">\r\n Yes\r\n </button>\r\n</mat-dialog-actions>\r\n\r\n", styles: [".asw-label-container{display:flex;justify-content:space-between}.asw-result-card .asw-value-label{font-weight:600}.asw-default-image{display:flex;justify-content:center}.asw-default-image img{margin-left:5px;margin-right:5px;cursor:pointer}.asw-mini-fab{height:24px!important;width:24px!important;border-radius:4px!important;padding-top:10px}.asw-sticky-top{top:25%!important}.asw-width-99{width:99%!important}\n"] }] }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Zvcm0tY29udHJvbC9xcmNvZGUvcXJjb2RlLWRpYWxvZy50cyIsIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Zvcm0tY29udHJvbC9xcmNvZGUvcXJjb2RlLWRpYWxvZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTzNFLE1BQU0sT0FBTyxlQUFlO0lBV1o7SUFDRDtJQUN5QjtJQVpwQyxTQUFTLEdBQVEsU0FBUyxDQUFDO0lBQzNCLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDWixxQkFBcUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJELGFBQWEsQ0FBYTtJQUMxQixjQUFjLENBQWE7SUFDM0Isa0JBQWtCLENBQWE7SUFFL0IsWUFDWSxXQUF3QixFQUN6QixTQUF3QyxFQUNmLE9BQVk7UUFGcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFLO0lBQUksQ0FBQztJQUVyRCxRQUFRO1FBQ0osSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsT0FB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O1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7U0FDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBeEdRLGVBQWUseUVBYVosZUFBZTs0RkFibEIsZUFBZSx5RENsQjVCLHd0WEE0TEE7OzRGRDFLYSxlQUFlO2tCQUwzQixTQUFTOytCQUNJLG1CQUFtQjs7MEJBaUJ4QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFTVyAoQSBTb2Z0d2FyZSBXb3JsZCkgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICdAYXNvZnR3YXJld29ybGQvZm9ybS1idWlsZGVyL2Zvcm0tY29udHJvbC9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhc3ctcXJjb2RlLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXJjb2RlLWRpYWxvZy5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3FyY29kZS1kaWFsb2cuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3dRckNvZGVEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgY29uc3RhbnRzOiBhbnkgPSBDb25zdGFudHM7XHJcbiAgICB2YWx1ZSA9IDAuNDtcclxuICAgIGVycm9yQ29ycmVjdGlvbkxldmVscyA9IFsnTCcsICdNJywgJ1EnLCAnSCddO1xyXG4gICAgbW9kZXMgPSBbJ051bWVyaWMnLCAnQWxwaGFudW1lcmljJywgJ0J5dGUnLCAnS2FuamknXTtcclxuICAgIFxyXG4gICAgYXN3Rm9ybWF0Rm9ybSE6IEZvcm1Hcm91cDtcclxuICAgIGFzd0RlbnNpdHlGb3JtITogRm9ybUdyb3VwO1xyXG4gICAgYXN3UXJMb2dvU3R5bGVGb3JtITogRm9ybUdyb3VwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBc3dRckNvZGVEaWFsb2c+LFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgY29udHJvbDogYW55KSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybUJ1aWxkZXIoKTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFzd0Zvcm1hdEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hc3dGb3JtYXRGb3JtLmludmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wud2lkdGggPSB2YWwud2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5oZWlnaHQgPSB2YWwuaGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wub3V0ZXJNYXJnaW4gPSB2YWwub3V0ZXJNYXJnaW47XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZSA9IHZhbC52YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFzd1FyTG9nb1N0eWxlRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFzd1FyTG9nb1N0eWxlRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmxvZ29TdHlsZSA9IHZhbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFzd0RlbnNpdHlGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXN3UXJMb2dvU3R5bGVGb3JtLmludmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZGVuc2l0eSA9IHZhbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZUZvcm1CdWlsZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXN3Rm9ybWF0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICB2YWx1ZTogWycnXSxcclxuICAgICAgICAgICAgd2lkdGg6IFsyMDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgIGhlaWdodDogWzIwMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgb3V0ZXJNYXJnaW46IFswXSxcclxuICAgICAgICAgICAgY29sdW1uOiBbJyddXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hc3dEZW5zaXR5Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICB0eXBlTnVtYmVyOiBbMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgbW9kZTogWydCeXRlJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6IFsnUSddXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hc3dRckxvZ29TdHlsZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgaGlkZUJhY2tncm91bmRDaXJjbGU6IFt0cnVlXSxcclxuICAgICAgICAgICAgbG9nb1NpemU6IFswLjQsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgIGxvZ29NYXJnaW46IFswXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hc3dGb3JtYXRGb3JtLnNldFZhbHVlKHtcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29udHJvbC52YWx1ZSxcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udHJvbC53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRyb2wuaGVpZ2h0LFxyXG4gICAgICAgICAgICBvdXRlck1hcmdpbjogdGhpcy5jb250cm9sLm91dGVyTWFyZ2luLFxyXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29udHJvbC5jb2x1bW5cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFzd0RlbnNpdHlGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICB0eXBlTnVtYmVyOiB0aGlzLmNvbnRyb2wuZGVuc2l0eS50eXBlTnVtYmVyLFxyXG4gICAgICAgICAgICBtb2RlOiB0aGlzLmNvbnRyb2wuZGVuc2l0eS5tb2RlLFxyXG4gICAgICAgICAgICBlcnJvckNvcnJlY3Rpb25MZXZlbDogdGhpcy5jb250cm9sLmRlbnNpdHkuZXJyb3JDb3JyZWN0aW9uTGV2ZWxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFzd1FyTG9nb1N0eWxlRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgaGlkZUJhY2tncm91bmRDaXJjbGU6IHRoaXMuY29udHJvbC5sb2dvU3R5bGUuaGlkZUJhY2tncm91bmRDaXJjbGUsXHJcbiAgICAgICAgICAgIGxvZ29TaXplOiB0aGlzLmNvbnRyb2wubG9nb1N0eWxlLmxvZ29TaXplLFxyXG4gICAgICAgICAgICBsb2dvTWFyZ2luOiB0aGlzLmNvbnRyb2wubG9nb1N0eWxlLmxvZ29NYXJnaW5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5hc3dGb3JtYXRGb3JtLnZhbHVlLndpZHRoLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5hc3dGb3JtYXRGb3JtLnZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuYXN3Rm9ybWF0Rm9ybS52YWx1ZS5oZWlnaHQsXHJcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5hc3dGb3JtYXRGb3JtLnZhbHVlLmNvbHVtbixcclxuICAgICAgICAgICAgb3V0ZXJNYXJnaW46IHRoaXMuYXN3Rm9ybWF0Rm9ybS52YWx1ZS5vdXRlck1hcmdpbixcclxuICAgICAgICAgICAgbG9nbzogdGhpcy5jb250cm9sLmxvZ28sXHJcbiAgICAgICAgICAgIGRlbnNpdHk6IHRoaXMuY29udHJvbC5kZW5zaXR5LFxyXG4gICAgICAgICAgICBsb2dvU3R5bGU6IHRoaXMuY29udHJvbC5sb2dvU3R5bGUsXHJcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2wuY29udHJvbFR5cGVcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uob3B0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRJbWFnZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLmxvZ28gPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ob0NsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGg0IG1hdC1kaWFsb2ctdGl0bGU+RWRpdCBQcm9wZXJ0eTwvaDQ+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBwLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3BcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtY2VudGVyXCI+UHJldmlldzwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFzdy1xci1jb2RlICNjaGlsZCBbd2lkdGhdPVwiY29udHJvbC53aWR0aFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJjb250cm9sLmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXJEYXRhXT1cImNvbnRyb2wudmFsdWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlck1hcmdpbl09XCJjb250cm9sLm91dGVyTWFyZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2dvXT1cImNvbnRyb2wubG9nb1wiIFthbGxvd0VtcHR5U3RyaW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlbnNpdHldPVwiY29udHJvbC5kZW5zaXR5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9nb1N0eWxlXT1cImNvbnRyb2wubG9nb1N0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXN3LXFyLWNvZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXJzLWFsaWduXCIgbXVsdGk+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFzd0Zvcm1hdEZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiYXN3LW1hdC1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0YTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidmFsdWVcIiBwbGFjZWhvbGRlcj1cIlFSIGNvZGUgZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRW50ZXIgUVIgY29kZSBkYXRhXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWV