UNPKG

@rangertechnologies/ngnxt

Version:

This library was used for creating dymanic UI based on the input JSON/data

95 lines 16.9 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../../services/change.service"; import * as i2 from "../../i18n.service"; import * as i3 from "../../services/data.service"; import * as i4 from "@angular/common"; import * as i5 from "@angular/forms"; export class CustomInputComponent { changeService; i18nService; dataService; value; // input value question; disabled = false; // input disabled or not placeholder; error; fromShengel = false; readOnly = false; // VD 12Jun24 - readonly change ngClassValue; idValue; focusEvent; inputValue = new EventEmitter(); subscription; constructor(changeService, i18nService, dataService) { this.changeService = changeService; this.i18nService = i18nService; this.dataService = dataService; } // RS 09DEC24 Changed keys ngOnInit() { // Since the idValue holds the Parent Question // AP-25MAR25 Parse subText if it's not already an object this.question['subText'] = typeof this.question?.subText === 'object' ? this.question?.subText : (typeof this.question['subText'] === 'string' ? JSON.parse(this.question['subText']) : {}); if (this.question.subText != undefined) { this.disabled = true; let dependencyObj = this.question.subText; if (dependencyObj.disabled && dependencyObj.disabled == "false") { this.disabled = false; } else { this.disabled = true; } // Subscribe for the changes this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => { if (changeValue != undefined) { // console.log('inside subscription for the change'); if (changeValue.valueObj != undefined && changeValue.fromQuestionId == dependencyObj.sourceQuestionId) { // VD 20Aug24 handling the multiple object this.value = this.dataService.getValue(changeValue.valueObj, dependencyObj.valueField); this.inputValue.emit(this.value); } this.changeService.confirmChange(dependencyObj.sourceQuestionId); } }); } } ngOnChange() { } ngOnDestroy() { // prevent memory leak when component destroyed this.subscription?.unsubscribe(); } onInputChange(input) { this.inputValue.emit(input.target.value); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomInputComponent, deps: [{ token: i1.ChangeService }, { token: i2.I18nService }, { token: i3.DataService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomInputComponent, selector: "app-custom-input", inputs: { value: "value", question: "question", disabled: "disabled", placeholder: "placeholder", error: "error", fromShengel: "fromShengel", readOnly: "readOnly", ngClassValue: "ngClassValue", idValue: "idValue", focusEvent: "focusEvent" }, outputs: { inputValue: "inputValue" }, ngImport: i0, template: " <!-- HA 19DEC23 Included Style value from Salesforce -->\n <!-- HA 18-JAN-24 Added these classes for style, HA 31-JAN-24 Added ternary for style -->\n <!-- HA 02FEB24 question input will hold the value to display -->\n <!-- // VD 12Jun24 - readonly change-->\n <!-- RS 09DEC24 Changed keys--> \n <input *ngIf=\"!fromShengel\" type=\"text\" \n [(ngModel)]=\"question.input\" \n [ngClass]=\"ngClassValue\"\n class=\"she-line-input form-control\"\n [id]=\"idValue\"\n (focus)=\"focusEvent\"\n [readOnly]=\"readOnly\"\n [style.border-color]=\"error ? 'red !important' : ''\"\n [style]=\"question?.style?.inputStyle\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n (input)=\"onInputChange($event)\" />\n\n<input *ngIf=\"fromShengel\" \n [(ngModel)]=\"question.input\"\n type=\"text\" \n [readOnly]=\"readOnly\"\n class=\"she-line-input form-control\" \n [placeholder]=\"placeholder ? placeholder : '' \"\n [disabled]=\"disabled\"\n [style]=\"question?.style?.inputStyle\"\n (input)=\"onInputChange($event)\" />\n<!-- HA 19DEC23 For translation -->\n<span *ngIf=\"error\" class=\"error-msg\">{{question?.errorMessage}}*</span>\n", styles: [".form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomInputComponent, decorators: [{ type: Component, args: [{ selector: 'app-custom-input', template: " <!-- HA 19DEC23 Included Style value from Salesforce -->\n <!-- HA 18-JAN-24 Added these classes for style, HA 31-JAN-24 Added ternary for style -->\n <!-- HA 02FEB24 question input will hold the value to display -->\n <!-- // VD 12Jun24 - readonly change-->\n <!-- RS 09DEC24 Changed keys--> \n <input *ngIf=\"!fromShengel\" type=\"text\" \n [(ngModel)]=\"question.input\" \n [ngClass]=\"ngClassValue\"\n class=\"she-line-input form-control\"\n [id]=\"idValue\"\n (focus)=\"focusEvent\"\n [readOnly]=\"readOnly\"\n [style.border-color]=\"error ? 'red !important' : ''\"\n [style]=\"question?.style?.inputStyle\"\n [placeholder]=\"placeholder ? placeholder : ''\"\n (input)=\"onInputChange($event)\" />\n\n<input *ngIf=\"fromShengel\" \n [(ngModel)]=\"question.input\"\n type=\"text\" \n [readOnly]=\"readOnly\"\n class=\"she-line-input form-control\" \n [placeholder]=\"placeholder ? placeholder : '' \"\n [disabled]=\"disabled\"\n [style]=\"question?.style?.inputStyle\"\n (input)=\"onInputChange($event)\" />\n<!-- HA 19DEC23 For translation -->\n<span *ngIf=\"error\" class=\"error-msg\">{{question?.errorMessage}}*</span>\n", styles: [".form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }] }], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.I18nService }, { type: i3.DataService }], propDecorators: { value: [{ type: Input }], question: [{ type: Input }], disabled: [{ type: Input }], placeholder: [{ type: Input }], error: [{ type: Input }], fromShengel: [{ type: Input }], readOnly: [{ type: Input }], ngClassValue: [{ type: Input }], idValue: [{ type: Input }], focusEvent: [{ type: Input }], inputValue: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1pbnB1dC9jdXN0b20taW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWlucHV0L2N1c3RvbS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0IvRSxNQUFNLE9BQU8sb0JBQW9CO0lBZ0JYO0lBQXFDO0lBQWtDO0lBZmxGLEtBQUssQ0FBYyxDQUFDLGNBQWM7SUFDbEMsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsR0FBWSxLQUFLLENBQUMsQ0FBQyx3QkFBd0I7SUFDbkQsV0FBVyxDQUFRO0lBQ25CLEtBQUssQ0FBSztJQUNWLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsUUFBUSxHQUFZLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUUxRCxZQUFZLENBQUs7SUFDakIsT0FBTyxDQUFLO0lBQ1osVUFBVSxDQUFNO0lBQ2YsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFL0MsWUFBWSxDQUFlO0lBRTNCLFlBQW9CLGFBQTRCLEVBQVMsV0FBd0IsRUFBVSxXQUF3QjtRQUEvRixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDbkgsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixRQUFRO1FBQ04sOENBQThDO1FBQzlDLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUwsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLGFBQWEsR0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxJQUFHLGFBQWEsQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztpQkFBSSxDQUFDO2dCQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FDL0QsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDZCxJQUFHLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDNUIscURBQXFEO29CQUNyRCxJQUFHLFdBQVcsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQ3JHLDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQyxDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7SUFDVixDQUFDO0lBRUQsV0FBVztRQUNULCtDQUErQztRQUMvQyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBUztRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7d0dBM0RVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLGlWQ2hCakMsNHRDQTRCQTs7NEZEWmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQjtzSUFNbkIsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20taW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20taW5wdXQuY29tcG9uZW50LmNzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2YWx1ZTogYW55IHwgYW55W107IC8vIGlucHV0IHZhbHVlXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBRdWVzdGlvblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBpbnB1dCBkaXNhYmxlZCBvciBub3RcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6c3RyaW5nO1xuICBASW5wdXQoKSBlcnJvcjphbnk7XG4gIEBJbnB1dCgpIGZyb21TaGVuZ2VsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRPbmx5IDpib29sZWFuID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcblxuICBASW5wdXQoKSBuZ0NsYXNzVmFsdWU6YW55O1xuICBASW5wdXQoKSBpZFZhbHVlOmFueTtcbiAgQElucHV0KCkgZm9jdXNFdmVudDogYW55O1xuICBAT3V0cHV0KCkgaW5wdXRWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyBcblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7IFxuICB9XG5cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2luY2UgdGhlIGlkVmFsdWUgaG9sZHMgdGhlIFBhcmVudCBRdWVzdGlvblxuICAgIC8vIEFQLTI1TUFSMjUgUGFyc2Ugc3ViVGV4dCBpZiBpdCdzIG5vdCBhbHJlYWR5IGFuIG9iamVjdFxuICAgIHRoaXMucXVlc3Rpb25bJ3N1YlRleHQnXSA9IHR5cGVvZiB0aGlzLnF1ZXN0aW9uPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IHRoaXMucXVlc3Rpb24/LnN1YlRleHQgOiAodHlwZW9mIHRoaXMucXVlc3Rpb25bJ3N1YlRleHQnXSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ3N1YlRleHQnXSkgOiB7fSk7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5zdWJUZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICBsZXQgZGVwZW5kZW5jeU9iajogYW55ID0gdGhpcy5xdWVzdGlvbi5zdWJUZXh0O1xuICAgICAgaWYoZGVwZW5kZW5jeU9iai5kaXNhYmxlZCAmJiBkZXBlbmRlbmN5T2JqLmRpc2FibGVkID09IFwiZmFsc2VcIil7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIFN1YnNjcmliZSBmb3IgdGhlIGNoYW5nZXNcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc3Vic2NyaXB0aW9uIGZvciB0aGUgY2hhbmdlJyk7XG4gICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgaGFuZGxpbmcgdGhlIG11bHRpcGxlIG9iamVjdFxuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShjaGFuZ2VWYWx1ZS52YWx1ZU9iaixkZXBlbmRlbmN5T2JqLnZhbHVlRmllbGQpO1xuICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2UoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBwcmV2ZW50IG1lbW9yeSBsZWFrIHdoZW4gY29tcG9uZW50IGRlc3Ryb3llZFxuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG4gIFxuICBvbklucHV0Q2hhbmdlKGlucHV0OmFueSl7XG4gICAgdGhpcy5pbnB1dFZhbHVlLmVtaXQoaW5wdXQudGFyZ2V0LnZhbHVlKTtcbiAgfVxufVxuIiwiIDwhLS0gSEEgMTlERUMyMyBJbmNsdWRlZCBTdHlsZSB2YWx1ZSBmcm9tIFNhbGVzZm9yY2UgLS0+XG4gIDwhLS0gSEEgMTgtSkFOLTI0IEFkZGVkIHRoZXNlIGNsYXNzZXMgZm9yIHN0eWxlLCBIQSAzMS1KQU4tMjQgQWRkZWQgdGVybmFyeSBmb3Igc3R5bGUgLS0+XG4gIDwhLS0gSEEgMDJGRUIyNCBxdWVzdGlvbiBpbnB1dCB3aWxsIGhvbGQgdGhlIHZhbHVlIHRvIGRpc3BsYXkgLS0+XG4gIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+IFxuICA8aW5wdXQgKm5nSWY9XCIhZnJvbVNoZW5nZWxcIiB0eXBlPVwidGV4dFwiIFxuICAgICAgIFsobmdNb2RlbCldPVwicXVlc3Rpb24uaW5wdXRcIiBcbiAgICAgICBbbmdDbGFzc109XCJuZ0NsYXNzVmFsdWVcIlxuICAgICAgIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgZm9ybS1jb250cm9sXCJcbiAgICAgICBbaWRdPVwiaWRWYWx1ZVwiXG4gICAgICAgKGZvY3VzKT1cImZvY3VzRXZlbnRcIlxuICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXG4gICAgICAgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJlcnJvciA/ICdyZWQgIWltcG9ydGFudCcgOiAnJ1wiXG4gICAgICAgW3N0eWxlXT1cInF1ZXN0aW9uPy5zdHlsZT8uaW5wdXRTdHlsZVwiXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiAnJ1wiXG4gICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIC8+XG5cbjxpbnB1dCAqbmdJZj1cImZyb21TaGVuZ2VsXCIgXG4gICAgICAgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi5pbnB1dFwiXG4gICAgICAgdHlwZT1cInRleHRcIiBcbiAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgZm9ybS1jb250cm9sXCIgXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiAnJyBcIlxuICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgW3N0eWxlXT1cInF1ZXN0aW9uPy5zdHlsZT8uaW5wdXRTdHlsZVwiXG4gICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIC8+XG48IS0tIEhBIDE5REVDMjMgRm9yIHRyYW5zbGF0aW9uIC0tPlxuPHNwYW4gKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3txdWVzdGlvbj8uZXJyb3JNZXNzYWdlfX0qPC9zcGFuPlxuIl19