UNPKG

ontimize-web-ngx

Version:
43 lines 19.8 kB
import { Component, ViewEncapsulation } from '@angular/core'; import { CurrencyUtil } from '../../../util/currencyUtil'; import { ORealInputComponent } from '../real-input/o-real-input.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/flex-layout/flex"; import * as i3 from "@angular/forms"; import * as i4 from "../../../directives/o-mat-error.directive"; import * as i5 from "@angular/material/button"; import * as i6 from "@angular/material/icon"; import * as i7 from "@angular/material/input"; import * as i8 from "@angular/material/form-field"; import * as i9 from "@angular/material/tooltip"; import * as i10 from "../../../pipes/o-translate.pipe"; export const DEFAULT_INPUTS_O_CURRENCY_INPUT = [ 'currencySymbol: currency-symbol', 'currencySymbolPosition: currency-symbol-position' ]; export class OCurrencyInputComponent extends ORealInputComponent { constructor() { super(...arguments); this.currency_symbols = CurrencyUtil.currencyCodeToSymbol; this.currencySymbol = 'EUR'; this.currencySymbolPosition = 'right'; } existsOntimizeIcon() { return OCurrencyInputComponent.currency_icons.indexOf(this.currencySymbol) !== -1; } useIcon(position) { return this.existsOntimizeIcon() && this.currencySymbolPosition === position; } useSymbol(position) { return !this.existsOntimizeIcon() && this.currency_symbols.hasOwnProperty(this.currencySymbol) && this.currencySymbolPosition === position; } } OCurrencyInputComponent.currency_icons = ['USD', 'EUR', 'GBP', 'ILS', 'INR', 'JPY', 'KRW', 'BTC']; OCurrencyInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCurrencyInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); OCurrencyInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OCurrencyInputComponent, selector: "o-currency-input", inputs: { currencySymbol: ["currency-symbol", "currencySymbol"], currencySymbolPosition: ["currency-symbol-position", "currencySymbolPosition"] }, usesInheritance: true, ngImport: i0, template: "<div class=\"currency-container\" [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <div *ngIf=\"useSymbol('left')\" matSuffix class=\"icon-btn\" [class.mat-disabled]=\"!enabled\">\n {{ currency_symbols[currencySymbol] }}\n </div>\n <mat-icon *ngIf=\"useIcon('left')\" svgIcon=\"ontimize:{{currencySymbol}}\" matSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\"></mat-icon>\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <input matInput [type]=\"inputType\" [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" [readonly]=\"isReadOnly\" [min]=\"min\" [max]=\"max\" [step]=\"step\"\n [required]=\"isRequired\" (change)=\"onChangeEvent($event)\">\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <div *ngIf=\"useSymbol('right')\" matIconSuffix class=\"icon-btn\" [class.mat-disabled]=\"!enabled\">\n {{ currency_symbols[currencySymbol] }}\n </div>\n <mat-icon *ngIf=\"useIcon('right')\" svgIcon=\"ontimize:{{currencySymbol}}\" matIconSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\">\n </mat-icon>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('min')\">\n {{ 'FORM_VALIDATION.MIN_VALUE' | oTranslate }}: {{ getErrorValue('min', 'min') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('max')\">\n {{ 'FORM_VALIDATION.MAX_VALUE' | oTranslate }}: {{ getErrorValue('max', 'max') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minDecimaldigits')\">\n {{ 'FORM_VALIDATION.MIN_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('minDecimaldigits', 'requiredMinDecimaldigits') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxDecimaldigits')\">\n {{ 'FORM_VALIDATION.MAX_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('maxDecimaldigits', 'requiredMaxDecimaldigits') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".currency-container .icon-btn{font-weight:700;font-size:20px;margin-right:4px}\n"], dependencies: [{ 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.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: i2.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: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i10.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OCurrencyInputComponent, decorators: [{ type: Component, args: [{ selector: 'o-currency-input', inputs: DEFAULT_INPUTS_O_CURRENCY_INPUT, encapsulation: ViewEncapsulation.None, template: "<div class=\"currency-container\" [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <div *ngIf=\"useSymbol('left')\" matSuffix class=\"icon-btn\" [class.mat-disabled]=\"!enabled\">\n {{ currency_symbols[currencySymbol] }}\n </div>\n <mat-icon *ngIf=\"useIcon('left')\" svgIcon=\"ontimize:{{currencySymbol}}\" matSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\"></mat-icon>\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [hideRequiredMarker]=\"hideRequiredMarker\" [class.custom-width]=\"hasCustomWidth\"\n class=\"icon-field\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <input matInput [type]=\"inputType\" [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" [readonly]=\"isReadOnly\" [min]=\"min\" [max]=\"max\" [step]=\"step\"\n [required]=\"isRequired\" (change)=\"onChangeEvent($event)\">\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n <div *ngIf=\"useSymbol('right')\" matIconSuffix class=\"icon-btn\" [class.mat-disabled]=\"!enabled\">\n {{ currency_symbols[currencySymbol] }}\n </div>\n <mat-icon *ngIf=\"useIcon('right')\" svgIcon=\"ontimize:{{currencySymbol}}\" matIconSuffix class=\"svg-icon\" [class.mat-disabled]=\"!enabled\">\n </mat-icon>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('min')\">\n {{ 'FORM_VALIDATION.MIN_VALUE' | oTranslate }}: {{ getErrorValue('min', 'min') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('max')\">\n {{ 'FORM_VALIDATION.MAX_VALUE' | oTranslate }}: {{ getErrorValue('max', 'max') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minDecimaldigits')\">\n {{ 'FORM_VALIDATION.MIN_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('minDecimaldigits', 'requiredMinDecimaldigits') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxDecimaldigits')\">\n {{ 'FORM_VALIDATION.MAX_DECIMAL_DIGITS' | oTranslate }}: {{ getErrorValue('maxDecimaldigits', 'requiredMaxDecimaldigits') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n</div>\n", styles: [".currency-container .icon-btn{font-weight:700;font-size:20px;margin-right:4px}\n"] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy9pbnB1dC9jdXJyZW5jeS1pbnB1dC9vLWN1cnJlbmN5LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2N1cnJlbmN5LWlucHV0L28tY3VycmVuY3ktaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQUUzRSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRztJQUM3QyxpQ0FBaUM7SUFDakMsa0RBQWtEO0NBQ25ELENBQUM7QUFTRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQW1CO0lBUGhFOztRQVlFLHFCQUFnQixHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztRQUVyRCxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQiwyQkFBc0IsR0FBVyxPQUFPLENBQUM7S0FhMUM7SUFYVyxrQkFBa0I7UUFDMUIsT0FBTyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFFBQVEsQ0FBQztJQUMvRSxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssUUFBUSxDQUFDO0lBQzdJLENBQUM7O0FBakJNLHNDQUFjLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7cUhBSHRFLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLGtPQ2pCcEMscXZGQTJDQTs0RkQxQmEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLGtCQUFrQixVQUdwQiwrQkFBK0IsaUJBQ3hCLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ3VycmVuY3lVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jdXJyZW5jeVV0aWwnO1xuaW1wb3J0IHsgT1JlYWxJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL3JlYWwtaW5wdXQvby1yZWFsLWlucHV0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0NVUlJFTkNZX0lOUFVUID0gW1xuICAnY3VycmVuY3lTeW1ib2w6IGN1cnJlbmN5LXN5bWJvbCcsXG4gICdjdXJyZW5jeVN5bWJvbFBvc2l0aW9uOiBjdXJyZW5jeS1zeW1ib2wtcG9zaXRpb24nXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWN1cnJlbmN5LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tY3VycmVuY3ktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWN1cnJlbmN5LWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19DVVJSRU5DWV9JTlBVVCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBPQ3VycmVuY3lJbnB1dENvbXBvbmVudCBleHRlbmRzIE9SZWFsSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgc3RhdGljIGN1cnJlbmN5X2ljb25zID0gWydVU0QnLCAnRVVSJywgJ0dCUCcsICdJTFMnLCAnSU5SJywgJ0pQWScsICdLUlcnLCAnQlRDJ107XG5cbiAgY3VycmVuY3lfc3ltYm9scyA9IEN1cnJlbmN5VXRpbC5jdXJyZW5jeUNvZGVUb1N5bWJvbDtcblxuICBjdXJyZW5jeVN5bWJvbDogc3RyaW5nID0gJ0VVUic7XG4gIGN1cnJlbmN5U3ltYm9sUG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7XG5cbiAgcHJvdGVjdGVkIGV4aXN0c09udGltaXplSWNvbigpIHtcbiAgICByZXR1cm4gT0N1cnJlbmN5SW5wdXRDb21wb25lbnQuY3VycmVuY3lfaWNvbnMuaW5kZXhPZih0aGlzLmN1cnJlbmN5U3ltYm9sKSAhPT0gLTE7XG4gIH1cblxuICB1c2VJY29uKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGlzdHNPbnRpbWl6ZUljb24oKSAmJiB0aGlzLmN1cnJlbmN5U3ltYm9sUG9zaXRpb24gPT09IHBvc2l0aW9uO1xuICB9XG5cbiAgdXNlU3ltYm9sKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZXhpc3RzT250aW1pemVJY29uKCkgJiYgdGhpcy5jdXJyZW5jeV9zeW1ib2xzLmhhc093blByb3BlcnR5KHRoaXMuY3VycmVuY3lTeW1ib2wpICYmIHRoaXMuY3VycmVuY3lTeW1ib2xQb3NpdGlvbiA9PT0gcG9zaXRpb247XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjdXJyZW5jeS1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cCgpXCIgW21hdFRvb2x0aXBdPVwidG9vbHRpcFwiIFttYXRUb29sdGlwQ2xhc3NdPVwidG9vbHRpcENsYXNzXCIgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCIgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwidG9vbHRpcEhpZGVEZWxheVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG5cbiAgPGRpdiAqbmdJZj1cInVzZVN5bWJvbCgnbGVmdCcpXCIgbWF0U3VmZml4IGNsYXNzPVwiaWNvbi1idG5cIiBbY2xhc3MubWF0LWRpc2FibGVkXT1cIiFlbmFibGVkXCI+XG4gICAge3sgY3VycmVuY3lfc3ltYm9sc1tjdXJyZW5jeVN5bWJvbF0gfX1cbiAgPC9kaXY+XG4gIDxtYXQtaWNvbiAqbmdJZj1cInVzZUljb24oJ2xlZnQnKVwiIHN2Z0ljb249XCJvbnRpbWl6ZTp7e2N1cnJlbmN5U3ltYm9sfX1cIiBtYXRTdWZmaXggY2xhc3M9XCJzdmctaWNvblwiIFtjbGFzcy5tYXQtZGlzYWJsZWRdPVwiIWVuYWJsZWRcIj48L21hdC1pY29uPlxuICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIiBbaGlkZVJlcXVpcmVkTWFya2VyXT1cImhpZGVSZXF1aXJlZE1hcmtlclwiIFtjbGFzcy5jdXN0b20td2lkdGhdPVwiaGFzQ3VzdG9tV2lkdGhcIlxuICAgIGNsYXNzPVwiaWNvbi1maWVsZFwiIGZ4RmlsbCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFZpc2libGVcIj57eyBvbGFiZWwgfCBvVHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFt0eXBlXT1cImlucHV0VHlwZVwiIFtpZF09XCJnZXRBdHRyaWJ1dGUoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZ2V0QXR0cmlidXRlKClcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIlxuICAgICAgKGZvY3VzKT1cImlubmVyT25Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiaW5uZXJPbkJsdXIoJGV2ZW50KVwiIFtyZWFkb25seV09XCJpc1JlYWRPbmx5XCIgW21pbl09XCJtaW5cIiBbbWF4XT1cIm1heFwiIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoJGV2ZW50KVwiPlxuXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b25cIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkNsaWNrQ2xlYXJWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2ICpuZ0lmPVwidXNlU3ltYm9sKCdyaWdodCcpXCIgbWF0SWNvblN1ZmZpeCBjbGFzcz1cImljb24tYnRuXCIgW2NsYXNzLm1hdC1kaXNhYmxlZF09XCIhZW5hYmxlZFwiPlxuICAgICAge3sgY3VycmVuY3lfc3ltYm9sc1tjdXJyZW5jeVN5bWJvbF0gfX1cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJ1c2VJY29uKCdyaWdodCcpXCIgc3ZnSWNvbj1cIm9udGltaXplOnt7Y3VycmVuY3lTeW1ib2x9fVwiIG1hdEljb25TdWZmaXggY2xhc3M9XCJzdmctaWNvblwiIFtjbGFzcy5tYXQtZGlzYWJsZWRdPVwiIWVuYWJsZWRcIj5cbiAgICA8L21hdC1pY29uPlxuXG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdtaW4nKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5NSU5fVkFMVUUnIHwgb1RyYW5zbGF0ZSB9fToge3sgZ2V0RXJyb3JWYWx1ZSgnbWluJywgJ21pbicpIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ21heCcpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLk1BWF9WQUxVRScgfCBvVHJhbnNsYXRlIH19OiB7eyBnZXRFcnJvclZhbHVlKCdtYXgnLCAnbWF4JykgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgICA8bWF0LWVycm9yICpvTWF0RXJyb3I9XCJoYXNFcnJvcignbWluRGVjaW1hbGRpZ2l0cycpXCI+XG4gICAgICB7eyAnRk9STV9WQUxJREFUSU9OLk1JTl9ERUNJTUFMX0RJR0lUUycgfCBvVHJhbnNsYXRlIH19OiB7eyBnZXRFcnJvclZhbHVlKCdtaW5EZWNpbWFsZGlnaXRzJywgJ3JlcXVpcmVkTWluRGVjaW1hbGRpZ2l0cycpIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ21heERlY2ltYWxkaWdpdHMnKVwiPlxuICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5NQVhfREVDSU1BTF9ESUdJVFMnIHwgb1RyYW5zbGF0ZSB9fToge3sgZ2V0RXJyb3JWYWx1ZSgnbWF4RGVjaW1hbGRpZ2l0cycsICdyZXF1aXJlZE1heERlY2ltYWxkaWdpdHMnKSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IG9FcnJvciBvZiBnZXRBY3RpdmVPRXJyb3JzKClcIj5cbiAgICAgIHt7IG9FcnJvci50ZXh0IHwgb1RyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=