tibas-form-json-generator
Version:
Fully configured form generator via JSON data with a custom template for each attribute + onChange events.
416 lines • 48.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/dynamic-template/dynamic-template.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Compiler, Component, EventEmitter, Injector, Input, NgModule, NgModuleRef, Output, ViewChild, ViewContainerRef } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { AttributeModel } from '../models/attribute.model';
import { ItemModel } from '../models/item.model';
import { ParentFunctionEnum } from '../models/parent.function.enum';
import { FormModel } from '../models/form.model';
import { ReferencesService } from '../services/references.service';
import { AttributeSourceTypeEnum } from '../models/attribute-sourceType.enum';
/**
* Created by TIBAS-Mohammed on 2020-07-6.
*/
var DynamicTemplateComponent = /** @class */ (function () {
function DynamicTemplateComponent(compiler, injector, moduleRef, referencesService) {
this.compiler = compiler;
this.injector = injector;
this.moduleRef = moduleRef;
this.referencesService = referencesService;
this.changedtrigger = new EventEmitter();
this.script = '';
}
/**
* @return {?}
*/
DynamicTemplateComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.createComponentFromRaw(this.template, this.attribute, this.item, this.headerOrFooter, this.position);
};
/**
* @private
* @param {?} template
* @param {?} attribute
* @param {?} item
* @param {?} headerOrFooter
* @param {?} position
* @return {?}
*/
DynamicTemplateComponent.prototype.createComponentFromRaw = /**
* @private
* @param {?} template
* @param {?} attribute
* @param {?} item
* @param {?} headerOrFooter
* @param {?} position
* @return {?}
*/
function (template, attribute, item, headerOrFooter, position) {
var _this = this;
if (!template) {
return;
}
/** @type {?} */
var styles = [];
if (attribute.onChange) {
template = template.split('onChange-Function').join(attribute.onChange);
}
else {
template = template.split('(change)="onChange-Function"').join('');
}
if (attribute.hiddenlevels) {
if (this.level && attribute.hiddenlevels.length > 0) {
attribute.hidden = attribute.hiddenlevels.indexOf(this.level) > -1;
if (attribute.hidden) {
attribute.required = false;
}
}
}
if (attribute && this.mode === 'EDIT') {
attribute.required = false;
}
if ((attribute.typeSource === AttributeSourceTypeEnum.CALCULATED_ENTRY && item)
|| this.mode === 'READ' || this.mode === 'READWITHTAB') {
attribute.disable = true;
attribute.required = false;
}
/**
* @return {?}
*/
function TmpCmpConstructor() {
this.attribute = attribute;
this.item = item;
this.reloadData = (/**
* @param {?} refTable
* @param {?} apiUrl
* @return {?}
*/
function (refTable, apiUrl) {
if (position !== 'BODY' && headerOrFooter !== null && headerOrFooter !== undefined
&& (headerOrFooter.header.length > 0 || headerOrFooter.footer.length > 0)
&& attribute.value && refTable && apiUrl) {
/** @type {?} */
var id_1;
attribute.refValues.forEach((/**
* @param {?} value
* @return {?}
*/
function (value) {
if (value.label === attribute.value) {
id_1 = value.id;
}
}));
if (id_1) {
ReferencesService.getData(apiUrl + '/' + id_1).subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var atts = [];
headerOrFooter.header.forEach((/**
* @param {?} attr
* @return {?}
*/
function (attr) {
if (attr.refTable === refTable) {
atts.push(attr);
}
}));
headerOrFooter.footer.forEach((/**
* @param {?} attr
* @return {?}
*/
function (attr) {
if (attr.refTable === refTable) {
atts.push(attr);
}
}));
if (atts.length > 0) {
atts.forEach((/**
* @param {?} att
* @return {?}
*/
function (att) {
att.refValues = [];
att.value = '';
if (response['data'] && response['data'].length > 0) {
att.refValues = response['data'];
}
}));
}
}));
}
}
});
}
/** @type {?} */
var tmpCmp = Component({ template: template, styles: styles })(new TmpCmpConstructor().constructor);
/** @type {?} */
var tmpModule = NgModule({
imports: [CommonModule, FormsModule, ReactiveFormsModule],
declarations: [tmpCmp],
providers: [ReferencesService]
})(/** @class */ (function () {
function class_1() {
}
return class_1;
}()));
this.compiler.compileModuleAndAllComponentsAsync(tmpModule)
.then((/**
* @param {?} factories
* @return {?}
*/
function (factories) {
/** @type {?} */
var f = factories.componentFactories[0];
_this.cmpRef = f.create(_this.injector, [], null, _this.moduleRef);
_this.cmpRef.instance.name = 'tibas-dynamic-component';
_this.valueITtempl.insert(_this.cmpRef.hostView);
_this.changedtrigger.emit(true);
if (attribute.typeSource === AttributeSourceTypeEnum.CALCULATED_ENTRY && item) {
_this.script = ' $(document).ready(function(){ \n';
if (attribute.forumlaItems && attribute.forumlaItems.function && item.children && item.children.length > 0) {
/** @type {?} */
var func_1 = ' \n';
item.children.forEach((/**
* @param {?} child
* @return {?}
*/
function (child) {
_this.script += '$("#' + child.code + '_' + attribute.code + '").change(' + item.code + '_' + attribute.code + '); \n';
if (attribute.forumlaItems.function === ParentFunctionEnum.SUM) {
func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' +
'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' +
'finalValue += (!isNaN(val) ? val : 0);\n' +
'}\n';
}
if (attribute.forumlaItems.function === ParentFunctionEnum.AVG) {
func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' +
'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' +
'finalValue += (!isNaN(val) ? val : 0);\n' +
'}\n';
}
if (attribute.forumlaItems.function === ParentFunctionEnum.MULTIP) {
func_1 += 'if ($("#' + child.code + '_' + attribute.code + '").val()) {\n' +
'var val = parseInt($("#' + child.code + '_' + attribute.code + '").val(),10);\n' +
'finalValue = finalValue * (!isNaN(val) ? val : 0);\n' +
'}\n';
}
}));
/** @type {?} */
var finalValueVar = '';
/** @type {?} */
var avgFinalValue = '';
if (attribute.forumlaItems.function === ParentFunctionEnum.SUM) {
finalValueVar = 'var finalValue = 0;';
}
if (attribute.forumlaItems.function === ParentFunctionEnum.AVG) {
finalValueVar = 'var finalValue = 0;';
avgFinalValue = ' finalValue = finalValue/' + item.children.length + '\n';
}
if (attribute.forumlaItems.function === ParentFunctionEnum.MULTIP) {
finalValueVar = 'var finalValue = 1;';
}
/** @type {?} */
var calledFunct = ' function ' + item.code + '_' + attribute.code + '(){ \n' +
' ' + finalValueVar + ' \n' +
' ' + func_1 + ' \n' +
' ' + avgFinalValue + ' \n' +
' $("#' + item.code + '_' + attribute.code + '").val(finalValue);\n' +
' $("#' + item.code + '_' + attribute.code + '").trigger("change");\n' +
' }';
_this.script += ' \n ' + calledFunct + ' \n ';
}
else if (attribute.forumlaAttribute && attribute.forumlaAttribute.depends.length > 0 && attribute.forumlaAttribute.function) {
/** @type {?} */
var functionReplaced_1 = attribute.forumlaAttribute.function;
attribute.forumlaAttribute.depends.forEach((/**
* @param {?} depend
* @return {?}
*/
function (depend) {
_this.script += '$("#' + item.code + '_' + depend + '").change(function(){ \n';
functionReplaced_1 = functionReplaced_1.split(depend).join(item.code + '_' + depend);
}));
functionReplaced_1 = functionReplaced_1.split(attribute.code).join(item.code + '_' + attribute.code);
_this.script += functionReplaced_1 + '\n ';
_this.script += '$("#' + item.code + '_' + attribute.code + '").trigger("change");\n }); \n';
}
_this.script += ' }); ';
/** @type {?} */
var tjs = document.createElement('script');
tjs.innerHTML = _this.script;
_this.valueITtempl.element.nativeElement.appendChild(tjs);
}
// Required
if (attribute.mandatory && _this.mode === 'VIEW') {
if (attribute.mandatory.depends.length > 0 && attribute.mandatory.function) {
_this.script = ' $(document).ready(function(){ \n';
/** @type {?} */
var functionReplaced_2 = attribute.mandatory.function;
/** @type {?} */
var idElement_1 = '';
if (_this.position === 'BODY') {
idElement_1 = item.code + '_' + attribute.code;
attribute.mandatory.depends.forEach((/**
* @param {?} depend
* @return {?}
*/
function (depend) {
_this.script += '$("#' + item.code + '_' + depend + '").change(RequiredFunc_' + idElement_1 + '); \n';
functionReplaced_2 = functionReplaced_2.split(depend).join(item.code + '_' + depend);
}));
functionReplaced_2 = functionReplaced_2.split(attribute.code).join(item.code + '_' + attribute.code);
}
if (_this.position === 'HEADER' || _this.position === 'FOOTER') {
idElement_1 = attribute.code;
attribute.mandatory.depends.forEach((/**
* @param {?} depend
* @return {?}
*/
function (depend) {
_this.script += '$("#' + depend + '").change(RequiredFunc_' + idElement_1 + '); \n';
}));
}
_this.script += ' function RequiredFunc_' + idElement_1 + '(){ \n';
_this.script += 'if(' + functionReplaced_2 + '){ \n';
_this.script += '$("#' + idElement_1 + '").prop("required",true); \n';
_this.script += ' } else {\n';
_this.script += '$("#' + idElement_1 + '").prop("required",false); \n';
_this.script += ' } \n' +
' $("#' + idElement_1 + '").trigger("change");\n}\n' +
'$("#' + idElement_1 + '").change(function(){ \n' +
'if($(this).prop(\'required\')){\n' +
' if ($(this).val()==\'\'){\n' +
' if ($(this).hasClass("ng-valid")){\n' +
' $(this).removeClass("ng-valid");\n' +
' }\n' +
' if (!$(this).hasClass("ng-invalid")){\n' +
' $(this).addClass("ng-invalid");\n' +
' }\n' +
'\n' +
' } else {\n' +
' if ($(this).hasClass("ng-invalid")){\n' +
' $(this).removeClass("ng-invalid");\n' +
' }\n' +
' if (!$(this).hasClass("ng-valid")){\n' +
' $(this).addClass("ng-valid");\n' +
' }\n' +
'}\n' +
' } else {\n' +
' if ($(this).hasClass("ng-invalid")){\n' +
' $(this).removeClass("ng-invalid");\n' +
' }\n' +
' if (!$(this).hasClass("ng-valid")){\n' +
' $(this).addClass("ng-valid");\n' +
' }\n' +
' }\n' +
'});\n';
_this.script += ' }); \n';
/** @type {?} */
var tjss = document.createElement('script');
tjss.innerHTML = _this.script;
_this.valueITtempl.element.nativeElement.appendChild(tjss);
}
}
}));
};
/**
* @return {?}
*/
DynamicTemplateComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.changedtrigger.emit(true);
if (this.cmpRef) {
this.cmpRef.destroy();
}
};
DynamicTemplateComponent.decorators = [
{ type: Component, args: [{
selector: '[dynamic-template]',
template: "\n <div #valueITtempl></div>\n "
}] }
];
/** @nocollapse */
DynamicTemplateComponent.ctorParameters = function () { return [
{ type: Compiler },
{ type: Injector },
{ type: NgModuleRef },
{ type: ReferencesService }
]; };
DynamicTemplateComponent.propDecorators = {
valueITtempl: [{ type: ViewChild, args: ['valueITtempl', { static: false, read: ViewContainerRef },] }],
template: [{ type: Input }],
attribute: [{ type: Input }],
item: [{ type: Input }],
headerOrFooter: [{ type: Input }],
position: [{ type: Input }],
level: [{ type: Input }],
mode: [{ type: Input }],
changedtrigger: [{ type: Output }]
};
return DynamicTemplateComponent;
}());
export { DynamicTemplateComponent };
if (false) {
/** @type {?} */
DynamicTemplateComponent.prototype.valueITtempl;
/** @type {?} */
DynamicTemplateComponent.prototype.template;
/** @type {?} */
DynamicTemplateComponent.prototype.attribute;
/** @type {?} */
DynamicTemplateComponent.prototype.item;
/** @type {?} */
DynamicTemplateComponent.prototype.headerOrFooter;
/** @type {?} */
DynamicTemplateComponent.prototype.position;
/** @type {?} */
DynamicTemplateComponent.prototype.level;
/** @type {?} */
DynamicTemplateComponent.prototype.mode;
/** @type {?} */
DynamicTemplateComponent.prototype.changedtrigger;
/** @type {?} */
DynamicTemplateComponent.prototype.script;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.cmpRef;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.reloadData;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.compiler;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.injector;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.moduleRef;
/**
* @type {?}
* @private
*/
DynamicTemplateComponent.prototype.referencesService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aWJhcy1mb3JtLWpzb24tZ2VuZXJhdG9yLyIsInNvdXJjZXMiOlsibGliL2R5bmFtaWMtdGVtcGxhdGUvZHluYW1pYy10ZW1wbGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBRUwsUUFBUSxFQUNSLFNBQVMsRUFFVCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUVYLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFLNUU7SUF5Q0Usa0NBQW9CLFFBQWtCLEVBQ2xCLFFBQWtCLEVBQ2xCLFNBQTJCLEVBQzNCLGlCQUFvQztRQUhwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVp4RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFD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QTBCOzs7OztJQUMxQiw2Q0FBbUM7Ozs7O0lBQ25DLHFEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBpbGVyLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nTW9kdWxlLFxuICBOZ01vZHVsZVJlZixcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBdHRyaWJ1dGVNb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2F0dHJpYnV0ZS5tb2RlbCc7XG5pbXBvcnQge0l0ZW1Nb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW0ubW9kZWwnO1xuaW1wb3J0IHtQYXJlbnRGdW5jdGlvbkVudW19IGZyb20gJy4uL21vZGVscy9wYXJlbnQuZnVuY3Rpb24uZW51bSc7XG5pbXBvcnQge0Zvcm1Nb2RlbH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHtSZWZlcmVuY2VzU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7QXR0cmlidXRlU291cmNlVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9hdHRyaWJ1dGUtc291cmNlVHlwZS5lbnVtJztcblxuLyoqXG4gKiBDcmVhdGVkIGJ5IFRJQkFTLU1vaGFtbWVkIG9uIDIwMjAtMDctNi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW2R5bmFtaWMtdGVtcGxhdGVdJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICN2YWx1ZUlUdGVtcGw+PC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1RlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndmFsdWVJVHRlbXBsJywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICB2YWx1ZUlUdGVtcGw6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KClcbiAgdGVtcGxhdGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIGl0ZW06IEl0ZW1Nb2RlbDtcblxuICBASW5wdXQoKVxuICBoZWFkZXJPckZvb3RlcjogRm9ybU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHBvc2l0aW9uOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbGV2ZWw6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBtb2RlOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIGNoYW5nZWR0cmlnZ2VyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHNjcmlwdCA9ICcnO1xuXG4gIHByaXZhdGUgY21wUmVmOiBDb21wb25lbnRSZWY8YW55PjtcblxuICBwcml2YXRlIHJlbG9hZERhdGE6ICgpID0+IHZvaWQ7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBpbGVyOiBDb21waWxlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlZmVyZW5jZXNTZXJ2aWNlOiBSZWZlcmVuY2VzU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50RnJvbVJhdyh0aGlzLnRlbXBsYXRlLCB0aGlzLmF0dHJpYnV0ZSwgdGhpcy5pdGVtLCB0aGlzLmhlYWRlck9yRm9vdGVyLCB0aGlzLnBvc2l0aW9uKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBjcmVhdGVDb21wb25lbnRGcm9tUmF3KHRlbXBsYXRlOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlTW9kZWwsIGl0ZW06IEl0ZW1Nb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck9yRm9vdGVyOiBGb3JtTW9kZWwsIHBvc2l0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlcyA9IFtdO1xuICAgIGlmIChhdHRyaWJ1dGUub25DaGFuZ2UpIHtcbiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoJ29uQ2hhbmdlLUZ1bmN0aW9uJykuam9pbihhdHRyaWJ1dGUub25DaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnNwbGl0KCcoY2hhbmdlKT1cIm9uQ2hhbmdlLUZ1bmN0aW9uXCInKS5qb2luKCcnKTtcbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZS5oaWRkZW5sZXZlbHMpIHtcbiAgICAgIGlmICh0aGlzLmxldmVsICYmIGF0dHJpYnV0ZS5oaWRkZW5sZXZlbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhdHRyaWJ1dGUuaGlkZGVuID0gYXR0cmlidXRlLmhpZGRlbmxldmVscy5pbmRleE9mKHRoaXMubGV2ZWwpID4gLTE7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUuaGlkZGVuKSB7XG4gICAgICAgICAgYXR0cmlidXRlLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF0dHJpYnV0ZSAmJiB0aGlzLm1vZGUgPT09ICdFRElUJykge1xuICAgICAgYXR0cmlidXRlLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChhdHRyaWJ1dGUudHlwZVNvdXJjZSA9PT0gQXR0cmlidXRlU291cmNlVHlwZUVudW0uQ0FMQ1VMQVRFRF9FTlRSWSAmJiBpdGVtKVxuICAgICAgfHwgdGhpcy5tb2RlID09PSAnUkVBRCcgfHwgdGhpcy5tb2RlID09PSAnUkVBRFdJVEhUQUInKSB7XG4gICAgICBhdHRyaWJ1dGUuZGlzYWJsZSA9IHRydWU7XG4gICAgICBhdHRyaWJ1dGUucmVxdWlyZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBUbXBDbXBDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgICAgdGhpcy5pdGVtID0gaXRlbTtcblxuICAgICAgdGhpcy5yZWxvYWREYXRhID0gKHJlZlRhYmxlOiBzdHJpbmcsIGFwaVVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ0JPRFknICYmIGhlYWRlck9yRm9vdGVyICE9PSBudWxsICYmIGhlYWRlck9yRm9vdGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAmJiAoaGVhZGVyT3JGb290ZXIuaGVhZGVyLmxlbmd0aCA+IDAgfHwgaGVhZGVyT3JGb290ZXIuZm9vdGVyLmxlbmd0aCA+IDApXG4gICAgICAgICAgJiYgYXR0cmlidXRlLnZhbHVlICYmIHJlZlRhYmxlICYmIGFwaVVybCkge1xuICAgICAgICAgIGxldCBpZDogbnVtYmVyO1xuICAgICAgICAgIGF0dHJpYnV0ZS5yZWZWYWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGFiZWwgPT09IGF0dHJpYnV0ZS52YWx1ZSkge1xuICAgICAgICAgICAgICBpZCA9IHZhbHVlLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgUmVmZXJlbmNlc1NlcnZpY2UuZ2V0RGF0YShhcGlVcmwgKyAnLycgKyBpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYXR0czogQXR0cmlidXRlTW9kZWxbXSA9IFtdO1xuICAgICAgICAgICAgICBoZWFkZXJPckZvb3Rlci5oZWFkZXIuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5yZWZUYWJsZSA9PT0gcmVmVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHMucHVzaChhdHRyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBoZWFkZXJPckZvb3Rlci5mb290ZXIuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5yZWZUYWJsZSA9PT0gcmVmVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHMucHVzaChhdHRyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoYXR0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXR0cy5mb3JFYWNoKGF0dCA9PiB7XG4gICAgICAgICAgICAgICAgICBhdHQucmVmVmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICBhdHQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZGF0YSddICYmIHJlc3BvbnNlWydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhdHQucmVmVmFsdWVzID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRtcENtcCA9IENvbXBvbmVudCh7dGVtcGxhdGUsIHN0eWxlc30pKG5ldyBUbXBDbXBDb25zdHJ1Y3RvcigpLmNvbnN0cnVjdG9yKTtcblxuICAgIGNvbnN0IHRtcE1vZHVsZSA9IE5nTW9kdWxlKHtcbiAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgICAgIGRlY2xhcmF0aW9uczogW3RtcENtcF0sXG4gICAgICBwcm92aWRlcnM6IFtSZWZlcmVuY2VzU2VydmljZV1cbiAgICB9KShjbGFzcyB7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmModG1wTW9kdWxlKVxuICAgICAgLnRoZW4oKGZhY3RvcmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGYgPSBmYWN0b3JpZXMuY29tcG9uZW50RmFjdG9yaWVzWzBdO1xuICAgICAgICAgIHRoaXMuY21wUmVmID0gZi5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIG51bGwsIHRoaXMubW9kdWxlUmVmKTtcbiAgICAgICAgICB0aGlzLmNtcFJlZi5pbnN0YW5jZS5uYW1lID0gJ3RpYmFzLWR5bmFtaWMtY29tcG9uZW50JztcbiAgICAgICAgICB0aGlzLnZhbHVlSVR0ZW1wbC5pbnNlcnQodGhpcy5jbXBSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlZHRyaWdnZXIuZW1pdCh0cnVlKTtcblxuICAgICAgICAgIGlmIChhdHRyaWJ1dGUudHlwZVNvdXJjZSA9PT0gQXR0cmlidXRlU291cmNlVHlwZUVudW0uQ0FMQ1VMQVRFRF9FTlRSWSAmJiBpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdCA9ICcgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsgIFxcbic7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcyAmJiBhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBmdW5jID0gJyBcXG4nO1xuICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICckKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLmNoYW5nZSgnICsgaXRlbS5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnKTsgXFxuJztcblxuICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uID09PSBQYXJlbnRGdW5jdGlvbkVudW0uU1VNKSB7XG4gICAgICAgICAgICAgICAgICBmdW5jICs9ICdpZiAoJChcIiMnICsgY2hpbGQuY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS52YWwoKSkge1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAndmFyIHZhbCA9IHBhcnNlSW50KCQoXCIjJyArIGNoaWxkLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKCksMTApO1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnZmluYWxWYWx1ZSArPSAoIWlzTmFOKHZhbCkgPyB2YWwgOiAwKTtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ31cXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcy5mdW5jdGlvbiA9PT0gUGFyZW50RnVuY3Rpb25FbnVtLkFWRykge1xuICAgICAgICAgICAgICAgICAgZnVuYyArPSAnaWYgKCQoXCIjJyArIGNoaWxkLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKCkpIHtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ3ZhciB2YWwgPSBwYXJzZUludCgkKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLnZhbCgpLDEwKTtcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsVmFsdWUgKz0gKCFpc05hTih2YWwpID8gdmFsIDogMCk7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICd9XFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5mb3J1bWxhSXRlbXMuZnVuY3Rpb24gPT09IFBhcmVudEZ1bmN0aW9uRW51bS5NVUxUSVApIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmMgKz0gJ2lmICgkKFwiIycgKyBjaGlsZC5jb2RlICsgJ18nICsgYXR0cmlidXRlLmNvZGUgKyAnXCIpLnZhbCgpKSB7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICd2YXIgdmFsID0gcGFyc2VJbnQoJChcIiMnICsgY2hpbGQuY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS52YWwoKSwxMCk7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdmaW5hbFZhbHVlID0gZmluYWxWYWx1ZSAqICghaXNOYU4odmFsKSA/IHZhbCA6IDApO1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnfVxcbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsZXQgZmluYWxWYWx1ZVZhciA9ICcnO1xuICAgICAgICAgICAgICBsZXQgYXZnRmluYWxWYWx1ZSA9ICcnO1xuXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUl0ZW1zLmZ1bmN0aW9uID09PSBQYXJlbnRGdW5jdGlvbkVudW0uU1VNKSB7XG4gICAgICAgICAgICAgICAgZmluYWxWYWx1ZVZhciA9ICd2YXIgZmluYWxWYWx1ZSA9IDA7JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLmZvcnVtbGFJdGVtcy5mdW5jdGlvbiA9PT0gUGFyZW50RnVuY3Rpb25FbnVtLkFWRykge1xuICAgICAgICAgICAgICAgIGZpbmFsVmFsdWVWYXIgPSAndmFyIGZpbmFsVmFsdWUgPSAwOyc7XG4gICAgICAgICAgICAgICAgYXZnRmluYWxWYWx1ZSA9ICcgZmluYWxWYWx1ZSA9IGZpbmFsVmFsdWUvJyArIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoICsgJ1xcbic7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5mb3J1bWxhSXRlbXMuZnVuY3Rpb24gPT09IFBhcmVudEZ1bmN0aW9uRW51bS5NVUxUSVApIHtcbiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlVmFyID0gJ3ZhciBmaW5hbFZhbHVlID0gMTsnO1xuICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICBjb25zdCBjYWxsZWRGdW5jdCA9ICcgZnVuY3Rpb24gJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJygpeyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBmaW5hbFZhbHVlVmFyICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBmdW5jICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICcgKyBhdmdGaW5hbFZhbHVlICsgJyBcXG4nICtcbiAgICAgICAgICAgICAgICAnICAkKFwiIycgKyBpdGVtLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZSArICdcIikudmFsKGZpbmFsVmFsdWUpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgfSc7XG5cbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyBcXG4gJyArIGNhbGxlZEZ1bmN0ICsgJyBcXG4gJztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZSAmJiBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5kZXBlbmRzLmxlbmd0aCA+IDAgJiYgYXR0cmlidXRlLmZvcnVtbGFBdHRyaWJ1dGUuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uUmVwbGFjZWQgPSBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5mdW5jdGlvbjtcblxuICAgICAgICAgICAgICBhdHRyaWJ1dGUuZm9ydW1sYUF0dHJpYnV0ZS5kZXBlbmRzLmZvckVhY2goZGVwZW5kID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnJChcIiMnICsgaXRlbS5jb2RlICsgJ18nICsgZGVwZW5kICsgJ1wiKS5jaGFuZ2UoZnVuY3Rpb24oKXsgXFxuJztcbiAgICAgICAgICAgICAgICBmdW5jdGlvblJlcGxhY2VkID0gZnVuY3Rpb25SZXBsYWNlZC5zcGxpdChkZXBlbmQpLmpvaW4oaXRlbS5jb2RlICsgJ18nICsgZGVwZW5kKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGF0dHJpYnV0ZS5jb2RlKS5qb2luKGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlKTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gZnVuY3Rpb25SZXBsYWNlZCArICdcXG4gJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbiB9KTsgXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICcgfSk7ICc7XG4gICAgICAgICAgICBjb25zdCB0anMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHRqcy5pbm5lckhUTUwgPSB0aGlzLnNjcmlwdDtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJVHRlbXBsLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0anMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlcXVpcmVkXG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZS5tYW5kYXRvcnkgJiYgdGhpcy5tb2RlID09PSAnVklFVycpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMubGVuZ3RoID4gMCAmJiBhdHRyaWJ1dGUubWFuZGF0b3J5LmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2NyaXB0ID0gJyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeyAgXFxuJztcbiAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uUmVwbGFjZWQgPSBhdHRyaWJ1dGUubWFuZGF0b3J5LmZ1bmN0aW9uO1xuICAgICAgICAgICAgICBsZXQgaWRFbGVtZW50ID0gJyc7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgICAgICBpZEVsZW1lbnQgPSBpdGVtLmNvZGUgKyAnXycgKyBhdHRyaWJ1dGUuY29kZTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMuZm9yRWFjaChkZXBlbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGl0ZW0uY29kZSArICdfJyArIGRlcGVuZCArICdcIikuY2hhbmdlKFJlcXVpcmVkRnVuY18nICsgaWRFbGVtZW50ICsgJyk7IFxcbic7XG5cbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGRlcGVuZCkuam9pbihpdGVtLmNvZGUgKyAnXycgKyBkZXBlbmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uUmVwbGFjZWQgPSBmdW5jdGlvblJlcGxhY2VkLnNwbGl0KGF0dHJpYnV0ZS5jb2RlKS5qb2luKGl0ZW0uY29kZSArICdfJyArIGF0dHJpYnV0ZS5jb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ0hFQURFUicgfHwgdGhpcy5wb3NpdGlvbiA9PT0gJ0ZPT1RFUicpIHtcbiAgICAgICAgICAgICAgICBpZEVsZW1lbnQgPSBhdHRyaWJ1dGUuY29kZTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUubWFuZGF0b3J5LmRlcGVuZHMuZm9yRWFjaChkZXBlbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGRlcGVuZCArICdcIikuY2hhbmdlKFJlcXVpcmVkRnVuY18nICsgaWRFbGVtZW50ICsgJyk7IFxcbic7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyBmdW5jdGlvbiBSZXF1aXJlZEZ1bmNfJyArIGlkRWxlbWVudCArICcoKXsgXFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJ2lmKCcgKyBmdW5jdGlvblJlcGxhY2VkICsgJyl7IFxcbic7XG4gICAgICAgICAgICAgIHRoaXMuc2NyaXB0ICs9ICckKFwiIycgKyBpZEVsZW1lbnQgKyAnXCIpLnByb3AoXCJyZXF1aXJlZFwiLHRydWUpOyBcXG4nO1xuICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnIH0gZWxzZSB7XFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyQoXCIjJyArIGlkRWxlbWVudCArICdcIikucHJvcChcInJlcXVpcmVkXCIsZmFsc2UpOyBcXG4nO1xuICAgICAgICAgICAgICB0aGlzLnNjcmlwdCArPSAnIH0gXFxuJyArXG4gICAgICAgICAgICAgICAgJyAgJChcIiMnICsgaWRFbGVtZW50ICsgJ1wiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO1xcbn1cXG4nICtcbiAgICAgICAgICAgICAgICAnJChcIiMnICsgaWRFbGVtZW50ICsgJ1wiKS5jaGFuZ2UoZnVuY3Rpb24oKXsgXFxuJyArXG4gICAgICAgICAgICAgICAgJ2lmKCQodGhpcykucHJvcChcXCdyZXF1aXJlZFxcJykpe1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKT09XFwnXFwnKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoXCJuZy12YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLWludmFsaWRcIik7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgfVxcbicgK1xuICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAnICB9IGVsc2Uge1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJuZy1pbnZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcyhcIm5nLXZhbGlkXCIpKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnfVxcbicgK1xuICAgICAgICAgICAgICAgICcgICAgfSBlbHNlIHtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKFwibmctaW52YWxpZFwiKSl7XFxuJyArXG4gICAgICAgICAgICAgICAgJyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJuZy1pbnZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcyhcIm5nLXZhbGlkXCIpKXtcXG4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcIm5nLXZhbGlkXCIpO1xcbicgK1xuICAgICAgICAgICAgICAgICcgICAgICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnICAgIH1cXG4nICtcbiAgICAgICAgICAgICAgICAnfSk7XFxuJztcbiAgICAgICAgICAgICAgdGhpcy5zY3JpcHQgKz0gJyB9KTsgXFxuJztcbiAgICAgICAgICAgICAgY29uc3QgdGpzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICB0anNzLmlubmVySFRNTCA9IHRoaXMuc2NyaXB0O1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlSVR0ZW1wbC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGpzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlZHRyaWdnZXIuZW1pdCh0cnVlKTtcbiAgICBpZiAodGhpcy5jbXBSZWYpIHtcbiAgICAgIHRoaXMuY21wUmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==