truly-ui
Version:
Web Components for Desktop Applications.
109 lines • 36.4 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
import * as i3 from "../../../tooltip/directives/tooltip.directive";
import * as i4 from "../../../colorpicker/colorpicker";
export class TlEditorHeader {
set labelAddField(value) {
this._labelAddField = value;
}
get labelAddField() {
return this._labelAddField;
}
constructor() {
this.cursorHighlight = false;
this.fontSizeCollection = [];
this.fontCollection = [];
this.fields = [];
this.color = 'basic';
this.colorSelected = '#000000';
this.fontSelected = 'Arial';
this.fontSizeSelected = '3pt';
this.changeColor = new EventEmitter();
this.changeFont = new EventEmitter();
this.changeFontSize = new EventEmitter();
this.clickUnderline = new EventEmitter();
this.clickItalic = new EventEmitter();
this.clickBold = new EventEmitter();
this.clickHighlight = new EventEmitter();
this.clickAlignContent = new EventEmitter();
this.clickUnorderedList = new EventEmitter();
this.clickOrderedList = new EventEmitter();
this.clickLink = new EventEmitter();
this.clickImage = new EventEmitter();
this.clickQuote = new EventEmitter();
this.clickClear = new EventEmitter();
this.clickSave = new EventEmitter();
this.clickField = new EventEmitter();
}
ngOnInit() {
this.defaultField = this.labelAddField;
}
onChangeField($event) {
this.clickField.emit($event);
setTimeout(() => this.defaultField = this.labelAddField);
}
}
/** @nocollapse */ TlEditorHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlEditorHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlEditorHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlEditorHeader, selector: "tl-editor-header", inputs: { toolbarConfig: "toolbarConfig", cursorHighlight: "cursorHighlight", fontSizeCollection: "fontSizeCollection", fontCollection: "fontCollection", fields: "fields", color: "color", activeTools: "activeTools", colorSelected: "colorSelected", fontSelected: "fontSelected", fontSizeSelected: "fontSizeSelected", labelAddField: "labelAddField" }, outputs: { changeColor: "changeColor", changeFont: "changeFont", changeFontSize: "changeFontSize", clickUnderline: "clickUnderline", clickItalic: "clickItalic", clickBold: "clickBold", clickHighlight: "clickHighlight", clickAlignContent: "clickAlignContent", clickUnorderedList: "clickUnorderedList", clickOrderedList: "clickOrderedList", clickLink: "clickLink", clickImage: "clickImage", clickQuote: "clickQuote", clickClear: "clickClear", clickSave: "clickSave", clickField: "clickField" }, ngImport: i0, template: "<div class=\"ui-editor-header\">\n <ul class=\"ui-tools-list\">\n <li class=\"dropdown\" [tooltip]=\"{text: toolbarConfig?.font?.family?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font?.family?.show\">\n <select class=\"select\" [(ngModel)]=\"fontSelected\" (ngModelChange)=\"changeFont.emit($event)\">\n <option *ngFor=\"let item of fontCollection\" [ngValue]=\"item.value\">{{ item?.description }}</option>\n </select>\n </li>\n <li class=\"dropdown\" [tooltip]=\"{text: toolbarConfig?.font?.size?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.size?.show\">\n <select class=\"select\" [(ngModel)]=\"fontSizeSelected\" (ngModelChange)=\"changeFontSize.emit($event)\">\n <option *ngFor=\"let item of fontSizeCollection\" [ngValue]=\"item.value\">{{ item?.description }}</option>\n </select>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font?.bold?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.bold?.show\">\n <button class=\"ui-command fa fa-bold\" [ngClass]=\"{'ui-active-tool': activeTools.bold}\"\n (click)=\"clickBold.emit()\"></button>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font.italic?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.italic?.show\">\n <button class=\"ui-command fa fa-italic\" [ngClass]=\"{'ui-active-tool': activeTools.italic}\"\n (click)=\"clickItalic.emit()\"></button>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font.underline?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.underline?.show\">\n <button class=\"ui-command fa fa-underline\" [ngClass]=\"{'ui-active-tool': activeTools.underline}\"\n (click)=\"clickUnderline.emit()\"></button>\n </li>\n <li [style.border-bottom]=\"'2px solid ' + colorSelected\" #button\n [tooltip]=\"{text: toolbarConfig?.font.color?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.color?.show\">\n <button class=\"ui-command fa fa-font\"></button>\n <tl-colorpicker [mode]=\"'fromOrigin'\" [elementOrigin]=\"button\" [recentColors]=\"true\"\n [(ngModel)]=\"colorSelected\" [returnFormatColor]=\"true\"\n (selectColor)=\"changeColor.emit($event)\"></tl-colorpicker>\n </li>\n <li *ngIf=\"toolbarConfig?.font.highlight?.show\"\n [tooltip]=\"{text: toolbarConfig?.font.highlight?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fas fas fa-pen-alt\" [ngClass]=\"{'ui-active-tool': cursorHighlight}\"\n (click)=\"clickHighlight.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.left?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.left?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-left\" [ngClass]=\"{'ui-active-tool': activeTools.alignLeft}\"\n (click)=\"clickAlignContent.emit('justifyLeft')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.center?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.center?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-center\" [ngClass]=\"{'ui-active-tool': activeTools.alignCenter}\"\n (click)=\"clickAlignContent.emit('justifyCenter')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.right?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.right?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-right\" [ngClass]=\"{'ui-active-tool': activeTools.alignRight}\"\n (click)=\"clickAlignContent.emit('justifyRight')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.justify?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.justify?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-justify\" [ngClass]=\"{'ui-active-tool': activeTools.alignJustify}\"\n (click)=\"clickAlignContent.emit('justifyFull')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.lists?.ordered?.show\"\n [tooltip]=\"{text: toolbarConfig?.lists?.ordered?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-list-ul\" [ngClass]=\"{'ui-active-tool': activeTools.listUnordered}\"\n (click)=\"clickUnorderedList.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.lists?.unordered?.show\"\n [tooltip]=\"{text: toolbarConfig?.lists?.unordered?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-list-ol\" [ngClass]=\"{'ui-active-tool': activeTools.listOrdered}\"\n (click)=\"clickOrderedList.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.link?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.link?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-link\" (click)=\"clickLink.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.imageLink?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.imageLink?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-image\" (click)=\"clickImage.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.quote?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.quote?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fas fa-quote-right\" [ngClass]=\"{'ui-active-tool': activeTools.blockQuote}\"\n (click)=\"clickQuote.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.clear?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.clear?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-trash-alt\"\n (click)=\"clickClear.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.save?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.save?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-save\"\n (click)=\"clickSave.emit()\"></button>\n </li>\n <li class=\"dropdown\">\n <select class=\"select\" *ngIf=\"toolbarConfig?.others?.field\" [tooltip]=\"{text: toolbarConfig?.others?.field?.tooltipText, placement: 'top-center'}\"\n [(ngModel)]=\"defaultField\" (ngModelChange)=\"onChangeField($event)\">\n <option default>{{ labelAddField }}</option>\n <option *ngFor=\"let item of fields\" [ngValue]=\"item.field\">{{ item?.field }}</option>\n </select>\n </li>\n </ul>\n</div>\n", styles: [".ui-editor-header{height:40px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom:0;overflow-x:auto}.ui-editor-header::-webkit-scrollbar{height:4px;width:0}.ui-editor-header .ui-tools-list{margin:0;padding:0;list-style:none;display:inline-flex;height:inherit;line-height:inherit}.ui-editor-header .ui-tools-list li:not(.dropdown){padding:0;width:40px}.ui-editor-header .ui-tools-list li{display:flex;transition:all .2s ease-in;align-items:center;justify-content:center;padding:8px}.ui-editor-header .ui-tools-list li:hover{cursor:pointer}.select{border:1px solid #eaeaea;color:#4b4a4a;padding-right:20px;text-align:left;font-family:Segoe UI,serif;border-radius:3px}.ui-command{background:transparent;padding:0;border:0;height:40px;width:40px;outline:none;cursor:pointer;font-size:13px;color:#3a3a3a}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.TooltipDirective, selector: "[tooltip]", inputs: ["tooltip"] }, { kind: "component", type: i4.TlColorPicker, selector: "tl-colorpicker", inputs: ["label", "labelSize", "name", "textAlign", "labelPlacement", "readonly", "disabled", "placeholder", "mode", "recentColors", "returnFormatColor", "copyButton", "openFocus", "elementOrigin", "color"], outputs: ["selectColor"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlEditorHeader, decorators: [{
type: Component,
args: [{ selector: 'tl-editor-header', template: "<div class=\"ui-editor-header\">\n <ul class=\"ui-tools-list\">\n <li class=\"dropdown\" [tooltip]=\"{text: toolbarConfig?.font?.family?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font?.family?.show\">\n <select class=\"select\" [(ngModel)]=\"fontSelected\" (ngModelChange)=\"changeFont.emit($event)\">\n <option *ngFor=\"let item of fontCollection\" [ngValue]=\"item.value\">{{ item?.description }}</option>\n </select>\n </li>\n <li class=\"dropdown\" [tooltip]=\"{text: toolbarConfig?.font?.size?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.size?.show\">\n <select class=\"select\" [(ngModel)]=\"fontSizeSelected\" (ngModelChange)=\"changeFontSize.emit($event)\">\n <option *ngFor=\"let item of fontSizeCollection\" [ngValue]=\"item.value\">{{ item?.description }}</option>\n </select>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font?.bold?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.bold?.show\">\n <button class=\"ui-command fa fa-bold\" [ngClass]=\"{'ui-active-tool': activeTools.bold}\"\n (click)=\"clickBold.emit()\"></button>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font.italic?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.italic?.show\">\n <button class=\"ui-command fa fa-italic\" [ngClass]=\"{'ui-active-tool': activeTools.italic}\"\n (click)=\"clickItalic.emit()\"></button>\n </li>\n <li [tooltip]=\"{text: toolbarConfig?.font.underline?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.underline?.show\">\n <button class=\"ui-command fa fa-underline\" [ngClass]=\"{'ui-active-tool': activeTools.underline}\"\n (click)=\"clickUnderline.emit()\"></button>\n </li>\n <li [style.border-bottom]=\"'2px solid ' + colorSelected\" #button\n [tooltip]=\"{text: toolbarConfig?.font.color?.tooltipText, placement: 'top-center'}\"\n *ngIf=\"toolbarConfig?.font.color?.show\">\n <button class=\"ui-command fa fa-font\"></button>\n <tl-colorpicker [mode]=\"'fromOrigin'\" [elementOrigin]=\"button\" [recentColors]=\"true\"\n [(ngModel)]=\"colorSelected\" [returnFormatColor]=\"true\"\n (selectColor)=\"changeColor.emit($event)\"></tl-colorpicker>\n </li>\n <li *ngIf=\"toolbarConfig?.font.highlight?.show\"\n [tooltip]=\"{text: toolbarConfig?.font.highlight?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fas fas fa-pen-alt\" [ngClass]=\"{'ui-active-tool': cursorHighlight}\"\n (click)=\"clickHighlight.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.left?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.left?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-left\" [ngClass]=\"{'ui-active-tool': activeTools.alignLeft}\"\n (click)=\"clickAlignContent.emit('justifyLeft')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.center?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.center?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-center\" [ngClass]=\"{'ui-active-tool': activeTools.alignCenter}\"\n (click)=\"clickAlignContent.emit('justifyCenter')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.right?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.right?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-right\" [ngClass]=\"{'ui-active-tool': activeTools.alignRight}\"\n (click)=\"clickAlignContent.emit('justifyRight')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.alignment?.justify?.show\"\n [tooltip]=\"{text: toolbarConfig?.alignment?.justify?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-align-justify\" [ngClass]=\"{'ui-active-tool': activeTools.alignJustify}\"\n (click)=\"clickAlignContent.emit('justifyFull')\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.lists?.ordered?.show\"\n [tooltip]=\"{text: toolbarConfig?.lists?.ordered?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-list-ul\" [ngClass]=\"{'ui-active-tool': activeTools.listUnordered}\"\n (click)=\"clickUnorderedList.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.lists?.unordered?.show\"\n [tooltip]=\"{text: toolbarConfig?.lists?.unordered?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-list-ol\" [ngClass]=\"{'ui-active-tool': activeTools.listOrdered}\"\n (click)=\"clickOrderedList.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.link?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.link?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fa fa-link\" (click)=\"clickLink.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.imageLink?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.imageLink?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-image\" (click)=\"clickImage.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.quote?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.quote?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command fas fa-quote-right\" [ngClass]=\"{'ui-active-tool': activeTools.blockQuote}\"\n (click)=\"clickQuote.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.clear?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.clear?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-trash-alt\"\n (click)=\"clickClear.emit()\"></button>\n </li>\n <li *ngIf=\"toolbarConfig?.others?.save?.show\"\n [tooltip]=\"{text: toolbarConfig?.others?.save?.tooltipText, placement: 'top-center'}\">\n <button class=\"ui-command far fa-save\"\n (click)=\"clickSave.emit()\"></button>\n </li>\n <li class=\"dropdown\">\n <select class=\"select\" *ngIf=\"toolbarConfig?.others?.field\" [tooltip]=\"{text: toolbarConfig?.others?.field?.tooltipText, placement: 'top-center'}\"\n [(ngModel)]=\"defaultField\" (ngModelChange)=\"onChangeField($event)\">\n <option default>{{ labelAddField }}</option>\n <option *ngFor=\"let item of fields\" [ngValue]=\"item.field\">{{ item?.field }}</option>\n </select>\n </li>\n </ul>\n</div>\n", styles: [".ui-editor-header{height:40px;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom:0;overflow-x:auto}.ui-editor-header::-webkit-scrollbar{height:4px;width:0}.ui-editor-header .ui-tools-list{margin:0;padding:0;list-style:none;display:inline-flex;height:inherit;line-height:inherit}.ui-editor-header .ui-tools-list li:not(.dropdown){padding:0;width:40px}.ui-editor-header .ui-tools-list li{display:flex;transition:all .2s ease-in;align-items:center;justify-content:center;padding:8px}.ui-editor-header .ui-tools-list li:hover{cursor:pointer}.select{border:1px solid #eaeaea;color:#4b4a4a;padding-right:20px;text-align:left;font-family:Segoe UI,serif;border-radius:3px}.ui-command{background:transparent;padding:0;border:0;height:40px;width:40px;outline:none;cursor:pointer;font-size:13px;color:#3a3a3a}\n"] }]
}], ctorParameters: function () { return []; }, propDecorators: { toolbarConfig: [{
type: Input
}], cursorHighlight: [{
type: Input
}], fontSizeCollection: [{
type: Input
}], fontCollection: [{
type: Input
}], fields: [{
type: Input
}], color: [{
type: Input
}], activeTools: [{
type: Input
}], colorSelected: [{
type: Input
}], fontSelected: [{
type: Input
}], fontSizeSelected: [{
type: Input
}], changeColor: [{
type: Output
}], changeFont: [{
type: Output
}], changeFontSize: [{
type: Output
}], clickUnderline: [{
type: Output
}], clickItalic: [{
type: Output
}], clickBold: [{
type: Output
}], clickHighlight: [{
type: Output
}], clickAlignContent: [{
type: Output
}], clickUnorderedList: [{
type: Output
}], clickOrderedList: [{
type: Output
}], clickLink: [{
type: Output
}], clickImage: [{
type: Output
}], clickQuote: [{
type: Output
}], clickClear: [{
type: Output
}], clickSave: [{
type: Output
}], clickField: [{
type: Output
}], labelAddField: [{
type: Input,
args: ['labelAddField']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2VkaXRvci9wYXJ0cy9lZGl0b3ItaGVhZGVyL2VkaXRvci1oZWFkZXIudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cnVseS11aS9zcmMvY29tcG9uZW50cy9lZGl0b3IvcGFydHMvZWRpdG9yLWhlYWRlci9lZGl0b3ItaGVhZGVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUzdFLE1BQU0sT0FBTyxjQUFjO0lBc0R6QixJQUNJLGFBQWEsQ0FBRSxLQUFhO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQU1EO1FBL0RTLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUV4QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQixXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUU1QixVQUFLLEdBQUcsT0FBTyxDQUFDO1FBSWhCLGtCQUFhLEdBQUcsU0FBUyxDQUFDO1FBRTFCLGlCQUFZLEdBQUcsT0FBTyxDQUFDO1FBRXZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0IsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV4QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXRDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBZTNCLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7OytIQTVFVSxjQUFjO21IQUFkLGNBQWMsbTRCQ1QzQix1bE5Bd0dBOzRGRC9GYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLGtCQUFrQjswRUFNbkIsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0gsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VG9vbGJhckNvbmZpZ30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90b29sYmFyLWNvbmZpZyc7XG5pbXBvcnQge0ZpZWxkQ29udGVudH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maWVsZC1jb250ZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGwtZWRpdG9yLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3ItaGVhZGVyLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0b3ItaGVhZGVyLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUbEVkaXRvckhlYWRlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgdG9vbGJhckNvbmZpZzogVG9vbGJhckNvbmZpZztcblxuICBASW5wdXQoKSBjdXJzb3JIaWdobGlnaHQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBmb250U2l6ZUNvbGxlY3Rpb24gPSBbXTtcblxuICBASW5wdXQoKSBmb250Q29sbGVjdGlvbiA9IFtdO1xuXG4gIEBJbnB1dCgpIGZpZWxkczogRmllbGRDb250ZW50W10gPSBbXTtcblxuICBASW5wdXQoKSBjb2xvciA9ICdiYXNpYyc7XG5cbiAgQElucHV0KCkgYWN0aXZlVG9vbHM7XG5cbiAgQElucHV0KCkgY29sb3JTZWxlY3RlZCA9ICcjMDAwMDAwJztcblxuICBASW5wdXQoKSBmb250U2VsZWN0ZWQgPSAnQXJpYWwnO1xuXG4gIEBJbnB1dCgpIGZvbnRTaXplU2VsZWN0ZWQgPSAnM3B0JztcblxuICBAT3V0cHV0KCkgY2hhbmdlQ29sb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNoYW5nZUZvbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNoYW5nZUZvbnRTaXplID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBjbGlja1VuZGVybGluZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tJdGFsaWMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsaWNrQm9sZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tIaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsaWNrQWxpZ25Db250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBjbGlja1Vub3JkZXJlZExpc3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsaWNrT3JkZXJlZExpc3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsaWNrTGluayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tJbWFnZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tRdW90ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tDbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xpY2tTYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBjbGlja0ZpZWxkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgnbGFiZWxBZGRGaWVsZCcpXG4gIHNldCBsYWJlbEFkZEZpZWxkKCB2YWx1ZTogc3RyaW5nICkge1xuICAgIHRoaXMuX2xhYmVsQWRkRmllbGQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBsYWJlbEFkZEZpZWxkKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbEFkZEZpZWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGFiZWxBZGRGaWVsZDtcblxuICBwdWJsaWMgZGVmYXVsdEZpZWxkO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRlZmF1bHRGaWVsZCA9IHRoaXMubGFiZWxBZGRGaWVsZDtcbiAgfVxuXG4gIG9uQ2hhbmdlRmllbGQoJGV2ZW50KSB7XG4gICAgdGhpcy5jbGlja0ZpZWxkLmVtaXQoJGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVmYXVsdEZpZWxkID0gdGhpcy5sYWJlbEFkZEZpZWxkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInVpLWVkaXRvci1oZWFkZXJcIj5cbiAgPHVsIGNsYXNzPVwidWktdG9vbHMtbGlzdFwiPlxuICAgICA8bGkgY2xhc3M9XCJkcm9wZG93blwiIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5mb250Py5mYW1pbHk/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIlxuICAgICAgICAgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5mb250Py5mYW1pbHk/LnNob3dcIj5cbiAgICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0XCIgWyhuZ01vZGVsKV09XCJmb250U2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VGb250LmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb250Q29sbGVjdGlvblwiIFtuZ1ZhbHVlXT1cIml0ZW0udmFsdWVcIj57eyBpdGVtPy5kZXNjcmlwdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgIDwvc2VsZWN0PlxuICAgICA8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93blwiIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5mb250Py5zaXplPy50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCJcbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckNvbmZpZz8uZm9udC5zaXplPy5zaG93XCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInNlbGVjdFwiIFsobmdNb2RlbCldPVwiZm9udFNpemVTZWxlY3RlZFwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUZvbnRTaXplLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb250U2l6ZUNvbGxlY3Rpb25cIiBbbmdWYWx1ZV09XCJpdGVtLnZhbHVlXCI+e3sgaXRlbT8uZGVzY3JpcHRpb24gfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9saT5cbiAgICA8bGkgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/LmZvbnQ/LmJvbGQ/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIlxuICAgICAgICAqbmdJZj1cInRvb2xiYXJDb25maWc/LmZvbnQuYm9sZD8uc2hvd1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtYm9sZFwiIFtuZ0NsYXNzXT1cInsndWktYWN0aXZlLXRvb2wnOiBhY3RpdmVUb29scy5ib2xkfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0JvbGQuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/LmZvbnQuaXRhbGljPy50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCJcbiAgICAgICAgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5mb250Lml0YWxpYz8uc2hvd1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtaXRhbGljXCIgW25nQ2xhc3NdPVwieyd1aS1hY3RpdmUtdG9vbCc6IGFjdGl2ZVRvb2xzLml0YWxpY31cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tJdGFsaWMuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/LmZvbnQudW5kZXJsaW5lPy50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCJcbiAgICAgICAgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5mb250LnVuZGVybGluZT8uc2hvd1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtdW5kZXJsaW5lXCIgW25nQ2xhc3NdPVwieyd1aS1hY3RpdmUtdG9vbCc6IGFjdGl2ZVRvb2xzLnVuZGVybGluZX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tVbmRlcmxpbmUuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgW3N0eWxlLmJvcmRlci1ib3R0b21dPVwiJzJweCBzb2xpZCAnICsgY29sb3JTZWxlY3RlZFwiICNidXR0b25cbiAgICAgICAgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/LmZvbnQuY29sb3I/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIlxuICAgICAgICAqbmdJZj1cInRvb2xiYXJDb25maWc/LmZvbnQuY29sb3I/LnNob3dcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhIGZhLWZvbnRcIj48L2J1dHRvbj5cbiAgICAgIDx0bC1jb2xvcnBpY2tlciBbbW9kZV09XCInZnJvbU9yaWdpbidcIiBbZWxlbWVudE9yaWdpbl09XCJidXR0b25cIiBbcmVjZW50Q29sb3JzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sb3JTZWxlY3RlZFwiIFtyZXR1cm5Gb3JtYXRDb2xvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Q29sb3IpPVwiY2hhbmdlQ29sb3IuZW1pdCgkZXZlbnQpXCI+PC90bC1jb2xvcnBpY2tlcj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/LmZvbnQuaGlnaGxpZ2h0Py5zaG93XCJcbiAgICAgICAgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/LmZvbnQuaGlnaGxpZ2h0Py50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidWktY29tbWFuZCBmYXMgZmFzIGZhLXBlbi1hbHRcIiBbbmdDbGFzc109XCJ7J3VpLWFjdGl2ZS10b29sJzogY3Vyc29ySGlnaGxpZ2h0fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0hpZ2hsaWdodC5lbWl0KClcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/LmFsaWdubWVudD8ubGVmdD8uc2hvd1wiXG4gICAgICAgIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5hbGlnbm1lbnQ/LmxlZnQ/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhIGZhLWFsaWduLWxlZnRcIiBbbmdDbGFzc109XCJ7J3VpLWFjdGl2ZS10b29sJzogYWN0aXZlVG9vbHMuYWxpZ25MZWZ0fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0FsaWduQ29udGVudC5lbWl0KCdqdXN0aWZ5TGVmdCcpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5hbGlnbm1lbnQ/LmNlbnRlcj8uc2hvd1wiXG4gICAgICAgIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5hbGlnbm1lbnQ/LmNlbnRlcj8udG9vbHRpcFRleHQsIHBsYWNlbWVudDogJ3RvcC1jZW50ZXInfVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtYWxpZ24tY2VudGVyXCIgW25nQ2xhc3NdPVwieyd1aS1hY3RpdmUtdG9vbCc6IGFjdGl2ZVRvb2xzLmFsaWduQ2VudGVyfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0FsaWduQ29udGVudC5lbWl0KCdqdXN0aWZ5Q2VudGVyJylcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/LmFsaWdubWVudD8ucmlnaHQ/LnNob3dcIlxuICAgICAgICBbdG9vbHRpcF09XCJ7dGV4dDogdG9vbGJhckNvbmZpZz8uYWxpZ25tZW50Py5yaWdodD8udG9vbHRpcFRleHQsIHBsYWNlbWVudDogJ3RvcC1jZW50ZXInfVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtYWxpZ24tcmlnaHRcIiBbbmdDbGFzc109XCJ7J3VpLWFjdGl2ZS10b29sJzogYWN0aXZlVG9vbHMuYWxpZ25SaWdodH1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tBbGlnbkNvbnRlbnQuZW1pdCgnanVzdGlmeVJpZ2h0JylcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/LmFsaWdubWVudD8uanVzdGlmeT8uc2hvd1wiXG4gICAgICAgIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5hbGlnbm1lbnQ/Lmp1c3RpZnk/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhIGZhLWFsaWduLWp1c3RpZnlcIiBbbmdDbGFzc109XCJ7J3VpLWFjdGl2ZS10b29sJzogYWN0aXZlVG9vbHMuYWxpZ25KdXN0aWZ5fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0FsaWduQ29udGVudC5lbWl0KCdqdXN0aWZ5RnVsbCcpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5saXN0cz8ub3JkZXJlZD8uc2hvd1wiXG4gICAgICAgIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5saXN0cz8ub3JkZXJlZD8udG9vbHRpcFRleHQsIHBsYWNlbWVudDogJ3RvcC1jZW50ZXInfVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmEgZmEtbGlzdC11bFwiIFtuZ0NsYXNzXT1cInsndWktYWN0aXZlLXRvb2wnOiBhY3RpdmVUb29scy5saXN0VW5vcmRlcmVkfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja1Vub3JkZXJlZExpc3QuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5saXN0cz8udW5vcmRlcmVkPy5zaG93XCJcbiAgICAgICAgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/Lmxpc3RzPy51bm9yZGVyZWQ/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhIGZhLWxpc3Qtb2xcIiBbbmdDbGFzc109XCJ7J3VpLWFjdGl2ZS10b29sJzogYWN0aXZlVG9vbHMubGlzdE9yZGVyZWR9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrT3JkZXJlZExpc3QuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5vdGhlcnM/Lmxpbms/LnNob3dcIlxuICAgICAgICBbdG9vbHRpcF09XCJ7dGV4dDogdG9vbGJhckNvbmZpZz8ub3RoZXJzPy5saW5rPy50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidWktY29tbWFuZCBmYSBmYS1saW5rXCIgKGNsaWNrKT1cImNsaWNrTGluay5lbWl0KClcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/Lm90aGVycz8uaW1hZ2VMaW5rPy5zaG93XCJcbiAgICAgICAgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/Lm90aGVycz8uaW1hZ2VMaW5rPy50b29sdGlwVGV4dCwgcGxhY2VtZW50OiAndG9wLWNlbnRlcid9XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidWktY29tbWFuZCBmYXIgZmEtaW1hZ2VcIiAoY2xpY2spPVwiY2xpY2tJbWFnZS5lbWl0KClcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/Lm90aGVycz8ucXVvdGU/LnNob3dcIlxuICAgICAgICBbdG9vbHRpcF09XCJ7dGV4dDogdG9vbGJhckNvbmZpZz8ub3RoZXJzPy5xdW90ZT8udG9vbHRpcFRleHQsIHBsYWNlbWVudDogJ3RvcC1jZW50ZXInfVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInVpLWNvbW1hbmQgZmFzIGZhLXF1b3RlLXJpZ2h0XCIgW25nQ2xhc3NdPVwieyd1aS1hY3RpdmUtdG9vbCc6IGFjdGl2ZVRvb2xzLmJsb2NrUXVvdGV9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrUXVvdGUuZW1pdCgpXCI+PC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5vdGhlcnM/LmNsZWFyPy5zaG93XCJcbiAgICAgICAgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/Lm90aGVycz8uY2xlYXI/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhciBmYS10cmFzaC1hbHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDbGVhci5lbWl0KClcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInRvb2xiYXJDb25maWc/Lm90aGVycz8uc2F2ZT8uc2hvd1wiXG4gICAgICAgIFt0b29sdGlwXT1cInt0ZXh0OiB0b29sYmFyQ29uZmlnPy5vdGhlcnM/LnNhdmU/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJ1aS1jb21tYW5kIGZhciBmYS1zYXZlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrU2F2ZS5lbWl0KClcIj48L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICA8c2VsZWN0IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJ0b29sYmFyQ29uZmlnPy5vdGhlcnM/LmZpZWxkXCIgW3Rvb2x0aXBdPVwie3RleHQ6IHRvb2xiYXJDb25maWc/Lm90aGVycz8uZmllbGQ/LnRvb2x0aXBUZXh0LCBwbGFjZW1lbnQ6ICd0b3AtY2VudGVyJ31cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRlZmF1bHRGaWVsZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIGRlZmF1bHQ+e3sgbGFiZWxBZGRGaWVsZCB9fTwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkc1wiIFtuZ1ZhbHVlXT1cIml0ZW0uZmllbGRcIj57eyBpdGVtPy5maWVsZCB9fTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuIl19