@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
90 lines • 16.5 kB
JavaScript
/**
* @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, EventEmitter, Input, Output } from '@angular/core';
import { AswConfirmDialog } from '@asoftwareworld/form-builder/form-control/confirm-dialog';
import { Constants } from '@asoftwareworld/form-builder/form-control/core';
import { AswImageDialog } from './image-dialog';
import { AswImageUploadDialog } from './image-upload-dialog';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "@angular/common";
import * as i3 from "@angular/material/tooltip";
import * as i4 from "@angular/material/icon";
import * as i5 from "@angular/material/button";
export class AswImage {
dialog;
constants = Constants;
control;
controlIndex;
isPreviewTemplate = false;
imageUpdateEvent = new EventEmitter();
imageDeleteEvent = new EventEmitter();
duplicateControl = new EventEmitter();
constructor(dialog) {
this.dialog = dialog;
}
deleteImageDialog(control, controlIndex) {
const dialogRef = this.dialog.open(AswConfirmDialog, {
width: '350px',
data: { name: control.controlType, message: this.constants.messages.waringMessage }
});
dialogRef.afterClosed().subscribe(result => {
if (result) {
this.imageDeleteEvent.emit(controlIndex);
}
});
}
editImageDialog(control, controlIndex) {
const dialogRef = this.dialog.open(AswImageDialog, {
disableClose: true,
width: '50%',
data: control
});
dialogRef.afterClosed().subscribe(result => {
if (result) {
this.imageUpdateEvent.emit({ control: result, index: controlIndex });
}
});
}
uploadImageDialog(control, controlIndex) {
const dialogRef = this.dialog.open(AswImageUploadDialog, {
disableClose: true,
width: '80%',
minWidth: '70vw',
data: control
});
dialogRef.afterClosed().subscribe(result => {
if (result) {
console.log(result);
this.imageUpdateEvent.emit({ control: result, index: controlIndex });
}
});
}
duplicateImageControl(control) {
this.duplicateControl.emit(control);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswImage, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: AswImage, selector: "asw-image", inputs: { control: "control", controlIndex: "controlIndex", isPreviewTemplate: "isPreviewTemplate" }, outputs: { imageUpdateEvent: "imageUpdateEvent", imageDeleteEvent: "imageDeleteEvent", duplicateControl: "duplicateControl" }, ngImport: i0, template: "<div class=\"{{control.class}}\">\r\n <img class=\"{{control.imageShape}}\" [src]=\"control.imageUrl ? control.imageUrl : constants.defaultImage\" height=\"{{control.height}}\" width=\"{{control.width}}\" />\r\n <div class=\"asw-pt-10\">\r\n <button mat-flat-button color=\"warn\" type=\"button\"\r\n (click)=\"uploadImageDialog(control, controlIndex)\"\r\n matTooltip=\"Upload\"> \r\n Upload\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateImageControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editImageDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteImageDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AswImage, decorators: [{
type: Component,
args: [{ selector: 'asw-image', template: "<div class=\"{{control.class}}\">\r\n <img class=\"{{control.imageShape}}\" [src]=\"control.imageUrl ? control.imageUrl : constants.defaultImage\" height=\"{{control.height}}\" width=\"{{control.width}}\" />\r\n <div class=\"asw-pt-10\">\r\n <button mat-flat-button color=\"warn\" type=\"button\"\r\n (click)=\"uploadImageDialog(control, controlIndex)\"\r\n matTooltip=\"Upload\"> \r\n Upload\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row\" *ngIf=\"isPreviewTemplate\">\r\n <div class=\"col-md-12\">\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Duplicate\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"duplicateImageControl(control)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Edit\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"editImageDialog(control, controlIndex)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button \r\n type=\"button\" \r\n matTooltip=\"Delete\" \r\n [matTooltipPosition]=\"'below'\" \r\n (click)=\"deleteImageDialog(control, controlIndex)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n</div>" }]
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { control: [{
type: Input
}], controlIndex: [{
type: Input
}], isPreviewTemplate: [{
type: Input
}], imageUpdateEvent: [{
type: Output
}], imageDeleteEvent: [{
type: Output
}], duplicateControl: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvaW1hZ2UvaW1hZ2UudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2wvaW1hZ2UvaW1hZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFNN0QsTUFBTSxPQUFPLFFBQVE7SUFhRTtJQVhuQixTQUFTLEdBQVEsU0FBUyxDQUFDO0lBRWxCLE9BQU8sQ0FBTTtJQUViLFlBQVksQ0FBVTtJQUN0QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFFekIsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW1DLENBQUM7SUFDdkUsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUM5QyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRXJELFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7SUFBSSxDQUFDO0lBRXpDLGlCQUFpQixDQUFDLE9BQVksRUFBRSxZQUFvQjtRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNqRCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7U0FDdEYsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZLEVBQUUsWUFBb0I7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQy9DLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFZLEVBQUUsWUFBb0I7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLEtBQUs7WUFDWixRQUFRLEVBQUUsTUFBTTtZQUNoQixJQUFJLEVBQUUsT0FBTztTQUNoQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQVk7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQXpEUSxRQUFROzRGQUFSLFFBQVEsc1JDbkJyQix5K0NBbUNNOzs0RkRoQk8sUUFBUTtrQkFKcEIsU0FBUzsrQkFDSSxXQUFXOzhFQU9aLE9BQU87c0JBQWYsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQVNXIChBIFNvZnR3YXJlIFdvcmxkKSBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQXN3Q29uZmlybURpYWxvZyB9IGZyb20gJ0Bhc29mdHdhcmV3b3JsZC9mb3JtLWJ1aWxkZXIvZm9ybS1jb250cm9sL2NvbmZpcm0tZGlhbG9nJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnQGFzb2Z0d2FyZXdvcmxkL2Zvcm0tYnVpbGRlci9mb3JtLWNvbnRyb2wvY29yZSc7XHJcbmltcG9ydCB7IEFzd0ltYWdlRGlhbG9nIH0gZnJvbSAnLi9pbWFnZS1kaWFsb2cnO1xyXG5pbXBvcnQgeyBBc3dJbWFnZVVwbG9hZERpYWxvZyB9IGZyb20gJy4vaW1hZ2UtdXBsb2FkLWRpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXN3LWltYWdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXN3SW1hZ2Uge1xyXG5cclxuICAgIGNvbnN0YW50czogYW55ID0gQ29uc3RhbnRzO1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IGFueTtcclxuXHJcbiAgICBASW5wdXQoKSBjb250cm9sSW5kZXghOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBpc1ByZXZpZXdUZW1wbGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBpbWFnZVVwZGF0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbnRyb2w6IGFueSwgaW5kZXg6IG51bWJlciB9PigpO1xyXG4gICAgQE91dHB1dCgpIGltYWdlRGVsZXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICAgIEBPdXRwdXQoKSBkdXBsaWNhdGVDb250cm9sID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nKSB7IH1cclxuXHJcbiAgICBkZWxldGVJbWFnZURpYWxvZyhjb250cm9sOiBhbnksIGNvbnRyb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBc3dDb25maXJtRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhOiB7IG5hbWU6IGNvbnRyb2wuY29udHJvbFR5cGUsIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzLm1lc3NhZ2VzLndhcmluZ01lc3NhZ2UgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlRGVsZXRlRXZlbnQuZW1pdChjb250cm9sSW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEltYWdlRGlhbG9nKGNvbnRyb2w6IGFueSwgY29udHJvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFzd0ltYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgICAgICAgICBkYXRhOiBjb250cm9sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VVcGRhdGVFdmVudC5lbWl0KHsgY29udHJvbDogcmVzdWx0LCBpbmRleDogY29udHJvbEluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkSW1hZ2VEaWFsb2coY29udHJvbDogYW55LCBjb250cm9sSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXN3SW1hZ2VVcGxvYWREaWFsb2csIHtcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICB3aWR0aDogJzgwJScsXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnNzB2dycsXHJcbiAgICAgICAgICAgIGRhdGE6IGNvbnRyb2xcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VVcGRhdGVFdmVudC5lbWl0KHsgY29udHJvbDogcmVzdWx0LCBpbmRleDogY29udHJvbEluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZHVwbGljYXRlSW1hZ2VDb250cm9sKGNvbnRyb2w6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZHVwbGljYXRlQ29udHJvbC5lbWl0KGNvbnRyb2wpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ7e2NvbnRyb2wuY2xhc3N9fVwiPlxyXG4gICAgPGltZyBjbGFzcz1cInt7Y29udHJvbC5pbWFnZVNoYXBlfX1cIiBbc3JjXT1cImNvbnRyb2wuaW1hZ2VVcmwgPyBjb250cm9sLmltYWdlVXJsIDogY29uc3RhbnRzLmRlZmF1bHRJbWFnZVwiIGhlaWdodD1cInt7Y29udHJvbC5oZWlnaHR9fVwiIHdpZHRoPVwie3tjb250cm9sLndpZHRofX1cIiAvPlxyXG4gICAgPGRpdiBjbGFzcz1cImFzdy1wdC0xMFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkSW1hZ2VEaWFsb2coY29udHJvbCwgY29udHJvbEluZGV4KVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJVcGxvYWRcIj4gICAgICAgICAgICBcclxuICAgICAgICAgICAgVXBsb2FkXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpc1ByZXZpZXdUZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkR1cGxpY2F0ZVwiIFxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYmVsb3cnXCIgXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHVwbGljYXRlSW1hZ2VDb250cm9sKGNvbnRyb2wpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXRcIiBcclxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRJbWFnZURpYWxvZyhjb250cm9sLCBjb250cm9sSW5kZXgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGVcIiBcclxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2JlbG93J1wiIFxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUltYWdlRGlhbG9nKGNvbnRyb2wsIGNvbnRyb2xJbmRleClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19