@esfaenza/parameters 15.2.26 → 15.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/es_parameters.component.mjs +9 -3
- package/fesm2015/esfaenza-parameters.mjs +8 -2
- package/fesm2015/esfaenza-parameters.mjs.map +1 -1
- package/fesm2020/esfaenza-parameters.mjs +8 -2
- package/fesm2020/esfaenza-parameters.mjs.map +1 -1
- package/lib/es_parameters.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -67,6 +67,12 @@ export class EsParametersComponent {
|
|
|
67
67
|
/** Indica come deve funzionare la multiselect */
|
|
68
68
|
this.MultiselectMode = 'CommaSeparated';
|
|
69
69
|
this.AllParametersEmpty = false;
|
|
70
|
+
this.Initialized = false;
|
|
71
|
+
}
|
|
72
|
+
ngOnInit() {
|
|
73
|
+
// Qui gli input dovrebbero essere settati. Alcuni form-roba non prendono bene i cambi di input
|
|
74
|
+
// Non sta funzionando come speravo... da rivedere
|
|
75
|
+
this.Initialized = true;
|
|
70
76
|
}
|
|
71
77
|
/**
|
|
72
78
|
* Pipeline di Angular
|
|
@@ -355,7 +361,7 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
355
361
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
356
362
|
multi: true
|
|
357
363
|
}
|
|
358
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible && (!DisplayMode || (!HideEmpty || (par.value)))\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i5.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i5.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol", "OptionTemplate"] }, { kind: "component", type: i5.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues", "UseCommaSeparatedList", "UseJsonList"] }, { kind: "component", type: i5.FormAutocompleteComponent, selector: "form-autocomplete", inputs: ["SelectLabel", "SearchFunctionContext", "SearchFunction", "MinChars", "HideChoicesOnSelection", "RequiredPlaceholder", "CaseSensitive", "Multi", "MultiElementsThreshold", "UnboundMode"] }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
|
|
364
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups && Initialized\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group && Initialized\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <ng-container *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\">\r\n <ng-container *ngIf=\"!DisplayMode || (!HideEmpty || (par.value))\">\r\n <div class=\"row form-group\" *ngIf=\"par.visible\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i5.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i5.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol", "OptionTemplate"] }, { kind: "component", type: i5.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues", "UseCommaSeparatedList", "UseJsonList"] }, { kind: "component", type: i5.FormAutocompleteComponent, selector: "form-autocomplete", inputs: ["SelectLabel", "SearchFunctionContext", "SearchFunction", "MinChars", "HideChoicesOnSelection", "RequiredPlaceholder", "CaseSensitive", "Multi", "MultiElementsThreshold", "UnboundMode"] }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
|
|
359
365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
360
366
|
type: Component,
|
|
361
367
|
args: [{ selector: "es-parameters", providers: [
|
|
@@ -365,7 +371,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
365
371
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
366
372
|
multi: true
|
|
367
373
|
}
|
|
368
|
-
], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <
|
|
374
|
+
], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups && Initialized\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group && Initialized\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <ng-container *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\">\r\n <ng-container *ngIf=\"!DisplayMode || (!HideEmpty || (par.value))\">\r\n <div class=\"row form-group\" *ngIf=\"par.visible\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"] }]
|
|
369
375
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { DisplayMode: [{
|
|
370
376
|
type: Input
|
|
371
377
|
}], HideEmpty: [{
|
|
@@ -397,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
397
403
|
}], LabelInputRatio: [{
|
|
398
404
|
type: Input
|
|
399
405
|
}] } });
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUE4RSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQUV2RSx1SEFBdUg7QUFldkgsTUFBTSxPQUFPLHFCQUFxQjtJQStEOUIsbUlBQW1JO0lBQ25JLElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBSUQ7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixFQUFVLEdBQWEsRUFBUyxLQUFrQjtRQUF4SSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQTNFNUosNkZBQTZGO1FBQ3JGLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQVc3Qzs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDLDhEQUE4RDtRQUNyRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUV0Qyw4SkFBOEo7UUFDckosY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVwQyxvRUFBb0U7UUFDM0QsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRWhELDRCQUE0QjtRQUNuQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVuQywyQkFBMkI7UUFDbEIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkMseUhBQXlIO1FBQ2hILGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFcEMsMEZBQTBGO1FBQ2pGLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRW5DLHlGQUF5RjtRQUNoRixZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDLGtFQUFrRTtRQUN6RCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxlQUFVLEdBQStCLE9BQU8sQ0FBQztRQUUxRCx3R0FBd0c7UUFDL0YsU0FBSSxHQUFXLElBQUksQ0FBQztRQUU3QixrSEFBa0g7UUFDekcsdUNBQWtDLEdBQVksS0FBSyxDQUFDO1FBSzVELGlEQUFpRDtRQUN6QyxvQkFBZSxHQUE2QyxnQkFBZ0IsQ0FBQztRQVMvRSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7SUFPcUgsQ0FBQztJQUVqSzs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLEdBQUc7UUFFakIsSUFBSSxDQUFDLEdBQUc7WUFDSixPQUFPO1FBRVgsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRS9CLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDckIsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RFLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxJQUFJLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFMUwsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ25CLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUM7WUFFNUQsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUN4QixDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUVwQixvSEFBb0g7WUFDcEgsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzNHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVuQix3SEFBd0g7WUFDeEgsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDNUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7TUFFRTtJQUNGLGNBQWM7UUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNELDBCQUEwQjtZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTdCLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFNUMsdUNBQXVDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxFQUFFO29CQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUN6RTtnQkFFRCw4Q0FBOEM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQzFFO1lBRUQsdUJBQXVCO1lBQ3ZCLElBQUksU0FBUyxHQUE0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEcsS0FBSyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLG9EQUFvRDtnQkFDcEQsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDMUU7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQztJQUVEOztNQUVFO0lBQ0YsaUJBQWlCLENBQUMsU0FBa0M7UUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXZCLDBEQUEwRDtZQUMxRCxJQUFJLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUUzRCwyQkFBMkI7WUFDM0IsSUFBSSxlQUFlLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUvRyw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxlQUFlLENBQUMsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDM0U7WUFFRCxzRkFBc0Y7WUFDdEYseUNBQXlDO1lBQ3pDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxlQUFlLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksZUFBZSxDQUFDLENBQUM7WUFDeEUsSUFBSSxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNoRSxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMzRSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakQsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDdEU7aUJBQU07Z0JBQ0gsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEM7WUFFRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLEVBQUUsSUFBVSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEU7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLEVBQUUsSUFBVSxDQUFDO0lBRXRDOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixPQUFPO1FBRVgsSUFBRyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTFCLDRJQUE0STtRQUM1SSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXBCLCtIQUErSDtZQUMvSCx5RkFBeUY7WUFDekYsNkNBQTZDO1lBQzdDLGlGQUFpRjtZQUNqRix5RkFBeUY7WUFDekYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDakIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFxQixDQUFDO2dCQUV2RixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO29CQUM1QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4QixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7d0JBQ3hCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQzs0QkFDL0MsaUJBQWlCLEdBQUcsSUFBSSxDQUFDOzRCQUN6QixNQUFNO3lCQUNUO3FCQUNKO29CQUNELElBQUksaUJBQWlCO3dCQUNqQixNQUFNO2lCQUNiO2dCQUVELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFBO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQXVCLENBQUM7UUFFcEYsd0hBQXdIO1FBQ3hILGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzNHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxHQUFxQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLHVCQUF1QjtRQUMxQixJQUFJLE1BQU0sR0FBc0QsRUFBRSxDQUFDO1FBRW5FLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNCLHVEQUF1RDtRQUN2RCw4REFBOEQ7SUFDbEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx3QkFBd0I7UUFDNUIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNCLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDZixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUTtvQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDMUI7WUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDekIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU87b0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQ3pCO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssUUFBUSxDQUFDLElBQVk7UUFDekIsSUFBSSxLQUFLLEdBQUcsa0ZBQWtGLENBQUM7UUFFL0YsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztRQUNyQixPQUFPLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXZFLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLFNBQVMsTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3JJO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxLQUFhO1FBQzFELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSTtZQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDZixLQUFLLFFBQVEsQ0FBQztnQkFDZCxLQUFLLE1BQU07b0JBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hJLEtBQUssU0FBUztvQkFDVixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkksS0FBSyxRQUFRO29CQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoTCxLQUFLLE1BQU07b0JBQ1AsSUFBSSxXQUFXLEdBQUcsaUNBQWlDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztvQkFDbEUsSUFBSSxXQUFXLEdBQUcsaUNBQWlDLEtBQUssSUFBSSxDQUFDO29CQUU3RCxRQUFRLFFBQVEsRUFBRTt3QkFFZCxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsV0FBVyxPQUFPLFdBQVcsUUFBUSxXQUFXLGVBQWUsV0FBVyxXQUFXLFdBQVcsSUFBSSxDQUFDLENBQUM7d0JBQ2hJLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxXQUFXLE9BQU8sV0FBVyxPQUFPLFdBQVcsZ0JBQWdCLFdBQVcsV0FBVyxXQUFXLEdBQUcsQ0FBQyxDQUFDO3dCQUMvSCxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsV0FBVyxlQUFlLFdBQVcsZUFBZSxXQUFXLFlBQVksV0FBVyxHQUFHLENBQUMsQ0FBQzt3QkFDcEgsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLFdBQVcsZUFBZSxXQUFXLGVBQWUsV0FBVyxhQUFhLFdBQVcsR0FBRyxDQUFDLENBQUM7d0JBQ3JILEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxXQUFXLGVBQWUsV0FBVyxnQkFBZ0IsV0FBVyxZQUFZLFdBQVcsUUFBUSxXQUFXLFlBQVksV0FBVyxJQUFJLENBQUMsQ0FBQzt3QkFDakssS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLFdBQVcsZUFBZSxXQUFXLGdCQUFnQixXQUFXLGFBQWEsV0FBVyxRQUFRLFdBQVcsWUFBWSxXQUFXLElBQUksQ0FBQyxDQUFDO3FCQUNySzthQUNSO1NBQ0o7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsTUFBTSx3Q0FBd0MsR0FBRyxzQkFBc0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxjQUFjO0lBQ04sd0JBQXdCLENBQUksSUFBTyxFQUFFLElBQU8sRUFBRSxvQkFBNkIsS0FBSztRQUNwRixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksTUFBTSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5RyxPQUFPLElBQUksQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsY0FBYztJQUNQLFNBQVMsQ0FBQyxTQUEyQixFQUFFLE1BQWMsRUFBRSxJQUFhO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDO1lBQzlHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ2hCOztZQUVHLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQzs7bUhBMVpRLHFCQUFxQjt1R0FBckIscUJBQXFCLHdpQkFabkI7UUFDUCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO1FBQzNEO1lBQ0ksT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1lBQ3BELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSiwwQkMxQkwsaXdPQXdFYzs0RkR6Q0QscUJBQXFCO2tCQWRqQyxTQUFTOytCQUNJLGVBQWUsYUFDZDt3QkFDUCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO3dCQUMzRDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osaUJBRWMsaUJBQWlCLENBQUMsSUFBSTt3TkF5QjVCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxrQ0FBa0M7c0JBQTFDLEtBQUs7Z0JBR0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR08sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTmdDb250cm9sLCBOZ0Zvcm0sIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuLy8gQ2xhc3NpXHJcbmltcG9ydCB7IEdlbmVyaWNQYXJhbWV0ZXIgfSBmcm9tICcuL21vZGVscy9HZW5lcmljUGFyYW1ldGVyJztcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBFc1BhcmFtZXRlcnNMb2MgfSBmcm9tIFwiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5sb2NcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmljUGFyYW1ldGVyR3JvdXAgfSBmcm9tIFwiLi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlckdyb3VwXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgZ3JhZmljYXJlIHVuYSBsaXN0YSBkaSAqKkdlbmVyaWNQYXJhbWV0ZXIqKiBjb21lIElucHV0IGluIGJhc2UgYWwgbG9ybyB0aXBvIHNwZWNpZmljbyAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImVzLXBhcmFtZXRlcnNcIixcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEVzUGFyYW1ldGVyc0xvYyB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVzUGFyYW1ldGVyc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgXSxcclxuICAgIHN0eWxlVXJsczogW1wiLi9lc19wYXJhbWV0ZXJzLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc1BhcmFtZXRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSBzaSBsYXZvcmEgYSBzaW5nb2xvIHBhcmFtZXRybyBmb3J6YXRvIGRlbnRybyB1biBhcnJheSBmb3IgdGhlIGdsb3J5IG9mIHNhdGFuICovXHJcbiAgICBwcml2YXRlIFNpbmdsZVBhcmFtZXRlck1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyBkZWwgY29tcG9uZW50ZSBzdSBjdWkgdmVuZ29ubyBlZmZldHR1YXRlIGxlIGdyYWZpY2F6aW9uaSAqL1xyXG4gICAgcHVibGljIFBhcmFtZXRlcnM6IEdlbmVyaWNQYXJhbWV0ZXJbXTtcclxuXHJcbiAgICAvKiogTW9kZWxsbyBkZWwgY29tcG9uZW50ZSBzdSBjdWkgdmVuZ29ubyBlZmZldHR1YXRlIGxlIGdyYWZpY2F6aW9uaSAqL1xyXG4gICAgcHVibGljIEdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW107XHJcblxyXG4gICAgLyoqIENhY2hlIHBlciBmYXJlIGxvb2t1cCByYXBpZGkgaW4gZmFzZSBkaSB2YWx1dGF6aW9uZSBlc3ByZXNzaW9uaSBkaSB2aXNpYmlsaXTDoCBlIG9iYmxpZ2F0b3JpZXTDoCAqL1xyXG4gICAgcHJpdmF0ZSBQYXJhbWV0ZXJzQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBHZW5lcmljUGFyYW1ldGVyIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBpbCBwYXJhbWV0cm8gZGV2ZSBlc3NlcmUgaW4gbW9kYWxpdMOgIGRpc3BsYXkgKi9cclxuICAgIEBJbnB1dCgpIERpc3BsYXlNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgaWwgcGFyYW1ldHJvIChJbiBEaXNwbGF5IG1vZGUhISkgbm9uIGFwcGFyZSBzZSB2dW90by4gSW4gcGnDuSwgc2UgdHV0dGkgc29ubyB2dW90aSwgZmEgdmVkZXJlIHVuYSBiZWxsYSBjYXJkIFwibm9uIGNpIHNvbm8gcGFyYW1ldHJpIHByZXNlbnRpXCIgKi9cclxuICAgIEBJbnB1dCgpIEhpZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGwndWx0aW1vIHBhcmFtZXRybyBub24gZGV2ZSBhdmVyZSBtYXJnaW5lIGluIGZvbmRvICovXHJcbiAgICBASW5wdXQoKSBMYXN0UGFyYW1ldGVyTm9NYXJnaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGxhIGxhYmVsICovXHJcbiAgICBASW5wdXQoKSBMYWJlbENvbFdpZHRoOiBudW1iZXIgPSA0O1xyXG5cclxuICAgIC8qKiBjb2wtbWQtWCBwZXIgbCdpbnB1dCAqL1xyXG4gICAgQElucHV0KCkgSW5wdXRDb2xXaWR0aDogbnVtYmVyID0gODtcclxuXHJcbiAgICAvKiogSW5wdXQgYSBjdWkgY29sbGVnYXJlIGxhIHZhcmlhYmlsZSAqKnN1Ym1pdHRlZCoqIGRlbCBmb3JtIGFsbCdpbnRlcm5vIGRlbCBxdWFsZSB2aWVuZSB1dGlsaXp6YXRvIHF1ZXN0byBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogVmFsb3JlIGRhIG1vc3RyYXJlIHF1YWxvcmEgbm9uIGZvc3Nlcm8gYW5jb3JhIHJpY2V2dXRpIGkgKipQYXJhbWV0ZXJzKiogZGEgbW9zdHJhcmUgKi9cclxuICAgIEBJbnB1dCgpIEVtcHR5TWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgcmltdW92ZXJlIGkgcGFyYW1ldHJpIGRhbGxhIGxpc3RhIGNsaWNjYW5kbyBzdWxsYSBYIGRhdmFudGkgYWxsYSBMYWJlbCAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2UgaSBjb21wb25lbnRpIGRpIElucHV0IGdlbmVyYXRpIHNvbm8gUmVhZG9ubHkgbyBubyAqL1xyXG4gICAgQElucHV0KCkgUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gbGlzdGEgY2hlIGRldidlc3NlcmUgdXRpbGl6emF0byAqL1xyXG4gICAgQElucHV0KCkgTGlzdEZvcm1hdDogJ0NvbW1hU2VwYXJhdGVkJyB8ICdBcnJheScgPSAnQXJyYXknO1xyXG5cclxuICAgIC8qKiBGb3JtIGNoZSB1dGlsaXp6YSBpbCBjb21wb25lbnRlLiBGb25kYW1lbnRhbGUgY29sbGVnYXJsbyBzZSBzaSB2b2dsaW9ubyBsZSB2YWxpZGF6aW9uaSBzdWwgc3VibWl0ICovXHJcbiAgICBASW5wdXQoKSBGb3JtOiBOZ0Zvcm0gPSBudWxsO1xyXG5cclxuICAgIC8qKiBRdWFuZG8gdXRpbGl6emEgdW4gc290dG9jb21wb25lbnRlIGF1dG9jb21wbGV0ZSBhYmlsaXRhIG8gZGlzYWJpbGl0YSBpbCByZXNldCBkZWxsJ2lucHV0IHBlciBvZ25pIHNlbGV6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgQXV0b2NvbXBsZXRlSGlkZUNob2ljZXNPblNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkYSB1dGlsaXp6YXJlIHBlciB0aXJhcmUgZnVvcmkgaSBkYXRpIGRpIHVuIGF1dG9jb21wbGV0ZSAqL1xyXG4gICAgQElucHV0KCkgQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlOiAocGFyYW1ldGVyOiBHZW5lcmljUGFyYW1ldGVyLCBzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbikgPT4gT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPlxyXG5cclxuICAgICAvKiogSW5kaWNhIGNvbWUgZGV2ZSBmdW56aW9uYXJlIGxhIG11bHRpc2VsZWN0ICovXHJcbiAgICBASW5wdXQoKSBNdWx0aXNlbGVjdE1vZGU6ICdDb21tYVNlcGFyYXRlZCcgfCAnQXJyYXknIHwgJ0pzb25BcnJheScgPSAnQ29tbWFTZXBhcmF0ZWQnO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCAqKkxhYmVsQ29sV2lkdGgqKiBlICoqSW5wdXRDb2xXaWR0aCoqLCBiYXN0YSBzY3JpdmVybG8gY29uIGxhIHNpbnRhc3NpIFwiWCBZXCIgKi9cclxuICAgIEBJbnB1dCgpIHNldCBMYWJlbElucHV0UmF0aW8oaW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByYXRpbyA9IGlucHV0LnNwbGl0KC9cXHMvKTtcclxuICAgICAgICB0aGlzLkxhYmVsQ29sV2lkdGggPSBwYXJzZUludChyYXRpb1swXSk7XHJcbiAgICAgICAgdGhpcy5JbnB1dENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBBbGxQYXJhbWV0ZXJzRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBpbmo6IEluamVjdG9yLCBwdWJsaWMgZGF0ZXM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmopOiB2b2lkIHtcclxuXHJcbiAgICAgICAgaWYgKCFvYmopXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqKSlcclxuICAgICAgICAgICAgdGhpcy5TaW5nbGVQYXJhbWV0ZXJNb2RlID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmogOiBbb2JqXTtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlW3QuaWRdID0gdDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdC50eXBlY29kZSAmJiAhdC50eXBlKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIG7DqSB1biB0eXBlIG7DqSB1biB0eXBlY29kZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGVjb2RlICYmICF0LnR5cGUpXHJcbiAgICAgICAgICAgICAgICB0LnR5cGUgPSB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZWNvZGUgJiYgdC50eXBlICE9IHRoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSkpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFJpbGV2YXRlIGluY29uc2lzdGVuemUgZnJhIGlsIFRpcG8gJHt0LnR5cGV9IGUgaWwgVGlwbyAke3RoaXMudXRpRXh0cy5nZXRKc1R5cGVGcm9tVHlwZUNvZGUodC50eXBlY29kZSl9IGNhbGNvbGF0byBkYSBUeXBlQ29kZSAke3QudHlwZWNvZGV9IHBlciBpbCBwYXJhbWV0cm8gJHt0LmlkfWApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSBcImJvb2xlYW5cIilcclxuICAgICAgICAgICAgICAgIHQudmFsdWUgPSB0LnZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LmVudW10eXBlIHx8IHQuZGljdHR5cGUpXHJcbiAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZW51bSc7XHJcblxyXG4gICAgICAgICAgICAvLyBWYWxvcmUgdmFsaWRvIG1hIG1vZGFsaXTDoCBkaSB1dGlsaXp6byBhIENvbW1hU2VwYXJhdGVkLCBkZXZvIGFzc2ljdXJhcm1pIGRpIHJpZW1ldHRlcmUgbGEgdmVyc2lvbmUgY29uIGxhIHN0cmluZ2FcclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSAnZW51bScgJiYgdGhpcy5MaXN0Rm9ybWF0ID09ICdDb21tYVNlcGFyYXRlZCcgJiYgdC5tdWx0aWVudW0gJiYgdC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KHQudmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZ2dpdXN0byBsZSBtb2RhbGl0w6AgZGkgZnVuemlvbmFtZW50byBkZWkgcGFyYW1ldHJpIGxpc3RhLiBDaGUgaW50ZXJuYW1lbnRlIGZ1bnppb25hbm8gc2VtcHJlIGNvbiB1bmEgbGlzdGEgZGkgdmFsb3JpXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gJ2VudW0nICYmIHRoaXMuTGlzdEZvcm1hdCA9PSAnQ29tbWFTZXBhcmF0ZWQnICYmIHQubXVsdGllbnVtICYmIHQudmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodC52YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gdC52YWx1ZSA/IHQudmFsdWUuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRyaW0oKSkgOiBbXTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5BbGxQYXJhbWV0ZXJzRW1wdHkgPSB0aGlzLlBhcmFtZXRlcnMuZXZlcnkodCA9PiAhdC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlR3JvdXBzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGNyZWFyZSBlIG9yZGluYXJlIGkgZ3J1cHBpIGRlaSBwYXJhbWV0cmlcclxuICAgICovXHJcbiAgICBnZW5lcmF0ZUdyb3VwcygpIHtcclxuICAgICAgICB0aGlzLkdyb3VwcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5QYXJhbWV0ZXJzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVycy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIDwgYi5vcmRlciA/IC0xIDogMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDaWNsbyB0dXR0aSBpIHBhcmFtZXRyaVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgdGhpcy5QYXJhbWV0ZXJzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhciA9IHRoaXMuUGFyYW1ldGVyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyR3JvdXBOYW1lID0gcGFyLmdyb3VwID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBPcmRlciA9IHBhci5ncm91cCA/IHBhci5vcmRlciA6IC0xO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNlIGlsIGdydXBwbyBub24gZXNpc3RlLCBsbyBhZ2dpdW5nb1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLkdyb3Vwcy5zb21lKHggPT4geC5ncm91cE5hbWUgPT0gcGFyR3JvdXBOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuR3JvdXBzLnB1c2gobmV3IEdlbmVyaWNQYXJhbWV0ZXJHcm91cChwYXJHcm91cE5hbWUsIGdyb3VwT3JkZXIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJbnNlcmlzY28gaWwgcGFyYW1ldHJvIGRlbnRybyBhbCBzdW8gZ3J1cHBvXHJcbiAgICAgICAgICAgICAgICB0aGlzLkdyb3Vwcy5maW5kKGcgPT4gZy5ncm91cE5hbWUgPT0gcGFyR3JvdXBOYW1lKS5wYXJhbWV0ZXJzLnB1c2gocGFyKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBHZXN0aW9uZSBzb3R0b2dydXBwaVxyXG4gICAgICAgICAgICBsZXQgc3ViZ3JvdXBzOiBHZW5lcmljUGFyYW1ldGVyR3JvdXBbXSA9IHRoaXMuR3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5ncm91cE5hbWUuaW5jbHVkZXMoJ8KnJykpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBfOyBzdWJncm91cHMubGVuZ3RoID4gMDsgKCkgPT4geyB9KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZWN1cGVybyBsYSBsaXN0YSBkaSBncnVwcGkgY2hlIGhhbm5vIHNvdHRvZ3J1cHBpXHJcbiAgICAgICAgICAgICAgICAvLyBQZXIgY29udmVuemlvbmUsIG5lbCBub21lIGNvbnRlbmdvbm8gXCLCp1wiXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyeVRvQWRkU3ViZ3JvdXBzKHN1Ymdyb3Vwcyk7XHJcbiAgICAgICAgICAgICAgICBzdWJncm91cHMgPSB0aGlzLkdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZ3JvdXBOYW1lLmluY2x1ZGVzKCfCpycpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5Hcm91cHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciA8IGIub3JkZXIgPyAtMSA6IDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY3JlYXJlIGUgb3JkaW5hcmUgaSBzb3R0b2dydXBwaSBkZWkgcGFyYW1ldHJpXHJcbiAgICAqL1xyXG4gICAgdHJ5VG9BZGRTdWJncm91cHMoc3ViZ3JvdXBzOiBHZW5lcmljUGFyYW1ldGVyR3JvdXBbXSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBzdWJncm91cHMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBzdWIgPSBzdWJncm91cHNbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBPdHRlbmdvIHVuIGxpc3RhIGNvbiBsYSBnZXJhcmNoaWEgZGVpIGdydXBwaSwgaW4gb3JkaW5lXHJcbiAgICAgICAgICAgIGxldCBncm91cHNQYXJlbnRIaWVyYXJjaHkgPSBzdWIuZ3JvdXBOYW1lLnNwbGl0KCfCpycpID8/IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgZ3J1cHBvIHBhZHJlXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRHcm91cE5hbWUgPSBzdWIuZ3JvdXBOYW1lLnJlcGxhY2UoYMKnJHtncm91cHNQYXJlbnRIaWVyYXJjaHlbZ3JvdXBzUGFyZW50SGllcmFyY2h5Lmxlbmd0aCAtIDFdfWAsIGBgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGlsIGdydXBwbyBwYWRyZSBub24gZXNpc3RlLCBsbyBhZ2dpdW5nb1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuR3JvdXBzLnNvbWUoeCA9PiB4Lmdyb3VwTmFtZSA9PSBwYXJlbnRHcm91cE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkdyb3Vwcy5wdXNoKG5ldyBHZW5lcmljUGFyYW1ldGVyR3JvdXAocGFyZW50R3JvdXBOYW1lLCBzdWIub3JkZXIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUmltdW92byBkYWwgbm9tZSBkZWwgZ3J1cHBvIGwnaW5mb3JtYXppb25lIHN1bCBwYWRyZSAoU2lzdGVtYW5kbyBhbmNoZSBsJ2V0aWNoZXR0YSlcclxuICAgICAgICAgICAgLy8gZSBsbyBhZ2dpdW5nbyBhaSBzb3R0b2dydXBwaSBkZWwgcGFkcmVcclxuICAgICAgICAgICAgc3ViLmdyb3VwTmFtZSA9IHN1Yi5ncm91cE5hbWUucmVwbGFjZShgJHtwYXJlbnRHcm91cE5hbWV9wqdgLCAnJyk7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRHcm91cCA9IHRoaXMuR3JvdXBzLmZpbmQoeCA9PiB4Lmdyb3VwTmFtZSA9PSBwYXJlbnRHcm91cE5hbWUpO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50R3JvdXA/LnN1Ymdyb3Vwcy5zb21lKHMgPT4gcy5ncm91cE5hbWUgPT0gc3ViLmdyb3VwTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBwYXJlbnRHcm91cC5zdWJncm91cHMuZmluZChmID0+IGYuZ3JvdXBOYW1lID09IHN1Yi5ncm91cE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgc3ViLnBhcmFtZXRlcnMubWFwKHAgPT4gdGFyZ2V0LnBhcmFtZXRlcnMucHVzaChwKSk7XHJcbiAgICAgICAgICAgICAgICBzdWIuc3ViZ3JvdXBzLm1hcChzID0+IHRhcmdldC5zdWJncm91cHMucHVzaChzKSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQub3JkZXIgPSBzdWIub3JkZXIgPCB0YXJnZXQub3JkZXIgPyBzdWIub3JkZXIgOiB0YXJnZXQub3JkZXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cD8uc3ViZ3JvdXBzLnB1c2goc3ViKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUmltdW92byBpbCBzb3R0b2dydXBwbyBncnVwcG8gZGFsbGEgbGlzdGFcclxuICAgICAgICAgICAgdGhpcy5Hcm91cHMuc3BsaWNlKHRoaXMuR3JvdXBzLmluZGV4T2Yoc3ViKSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhclxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuKTogdm9pZCB7IHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm4pOiB2b2lkIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgZ2VzdGlyZSBpbCBtb2RlbGxvIGluIHVzY2l0YSBlIHByb3BhZ2FybG8gc3VsIGJpbmRpbmcgbmdNb2RlbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuUGFyYW1ldGVycylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZighdGhpcy5Hcm91cHMpXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVHcm91cHMoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBTZSBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBhaSBiaW5kaW5nIHBvdHJlYmJlcm8gZXNzZXJlIGNhbWJpYXRpIGkgcmVxdWlyZWQuIFJpY3JlbyB0dXR0aSBpIGNvbXBvbmVudGkgZSByaS1pZHJhdG8gbGEgY2FjaGUgZGVpIHBhcmFtZXRyaVxyXG4gICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy5yZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbiBiYXNlIGFpIGJpbmRpbmcgY2FtYmlhdGkgZGV2byB0cm92YXJlIHR1dHRpIGkgcGFyYW1ldHJpIGNoZSBoYW4gc3ViaXRvIG1vZGlmaWNoZSBzdHJ1dHR1cmFsaSAodmlzaWJpbGl0w6AsIG9iYmxpZ2F0b3JpZXTDoClcclxuICAgICAgICAgICAgLy8gZGlzdHJ1Z2dlcmxpIGUgcmljcmVhcmxpIGluIG1vZG8gY2hlIGkgYmluZGluZyBsYXRvIGh0bWwgc2kgYWdnaW9ybmlubyBkaSBjb25zZWd1ZW56YS5cclxuICAgICAgICAgICAgLy8gMTogRmFjY2lvIHVuYSBjb3BpYSBkZWwgcGFyYW1ldHJvIGNvcnJlbnRlXHJcbiAgICAgICAgICAgIC8vIDI6IFRyb3ZvIGxhIHN1YSBwb3NpemlvbmUgYWxsJ2ludGVybm8gZGVpIGdydXBwaSBlIGxvIHNvc3RpdHVpc2NvIGNvbiBsYSBjb3BpYVxyXG4gICAgICAgICAgICAvLyAzOiBBZ2dpb3JubyBsYSBsaXN0YSBkZWkgcGFyYW1ldHJpIGUgbGEgc3VhIGNhY2hlIGluIG1vZG8gZGEgcHVudGFyZSBhbGwnb2dnZXR0byBudW92b1xyXG4gICAgICAgICAgICBjaGFuZ2VzLmZvckVhY2goY2ggPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5QYXJhbWV0ZXJzLmZpbmRJbmRleCh0ID0+IHQuaWQgPT0gY2gpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlckNvcHkgPSB0aGlzLnV0aUV4dHMuZGVlcENsb25lKHRoaXMuUGFyYW1ldGVyc1tpbmRleF0pIGFzIEdlbmVyaWNQYXJhbWV0ZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlclJlZkZpeGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZyA9IDA7IGlnIDwgdGhpcy5Hcm91cHMubGVuZ3RoOyBpZysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSB0aGlzLkdyb3Vwc1tpZ107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXAgPSAwOyBpcCA8IGcucGFyYW1ldGVycy5sZW5ndGg7IGlwKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBnLnBhcmFtZXRlcnNbaXBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09PSB0aGlzLlBhcmFtZXRlcnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkdyb3Vwc1tpZ10ucGFyYW1ldGVyc1tpcF0gPSBwYXJhbWV0ZXJDb3B5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyUmVmRml4ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlclJlZkZpeGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5QYXJhbWV0ZXJzW2luZGV4XSA9IHBhcmFtZXRlckNvcHlcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlW2NoXSA9IHRoaXMuUGFyYW1ldGVyc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgUGFyYW1ldGVyc0Nsb25lID0gdGhpcy51dGlFeHRzLmRlZXBDbG9uZSh0aGlzLlBhcmFtZXRlcnMpIGFzIEdlbmVyaWNQYXJhbWV0ZXJbXTtcclxuXHJcbiAgICAgICAgLy8gQWdnaXVzdG8gbGUgbW9kYWxpdMOgIGRpIGZ1bnppb25hbWVudG8gZGVpIHBhcmFtZXRyaSBsaXN0YS4gQ2hlIGludGVybmFtZW50ZSBmdW56aW9uYW5vIHNlbXByZSBjb24gdW5hIGxpc3RhIGRpIHZhbG9yaVxyXG4gICAgICAgIFBhcmFtZXRlcnNDbG9uZT8uZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHQudHlwZSA9PSBcImVudW1cIiAmJiB0aGlzLkxpc3RGb3JtYXQgPT0gJ0NvbW1hU2VwYXJhdGVkJyAmJiB0Lm11bHRpZW51bSAmJiB0LnZhbHVlICYmIEFycmF5LmlzQXJyYXkodC52YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gdC52YWx1ZS5qb2luKCcsJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuU2luZ2xlUGFyYW1ldGVyTW9kZSA/IFBhcmFtZXRlcnNDbG9uZVswXSA6IFBhcmFtZXRlcnNDbG9uZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaW11b3ZlIGlsIHBhcmFtZXRybyBzZWxlemlvbmF0byBlIHByb3BhZ2EgaWwgbW9kZWxsb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0dlbmVyaWNQYXJhbWV0ZXJ9IHBhciBQYXJhbWV0cm8gZGEgcmltdW92ZXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVQYXJhbWV0ZXIocGFyOiBHZW5lcmljUGFyYW1ldGVyKSB7XHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLnNwbGljZSh0aGlzLlBhcmFtZXRlcnMuaW5kZXhPZihwYXIpLCAxKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2VuZXJhdGVQYXJhbWV0ZXJHcm91cHMoKSB7XHJcbiAgICAgICAgbGV0IEdyb3VwczogeyBpZDogc3RyaW5nLCBncm91cHM6IHN0cmluZ1tdLCBvcmRlcjogbnVtYmVyIH1bXSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLlBhcmFtZXRlcnMuZm9yRWFjaChwYXJhbSA9PiB7XHJcbiAgICAgICAgICAgIEdyb3Vwcy5wdXNoKHsgaWQ6IHBhcmFtLmlkLCBncm91cHM6IHBhcmFtLmdyb3VwLnNwbGl0KFwiwqdcIiksIG9yZGVyOiBwYXJhbS5vcmRlciB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IEdyb3VwZWRHcm91cHMgPSBHcm91cHMucmVkdWNlKChyLCBhKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdEdyb3VwSWQgPSBhLmdyb3Vwcz8ubGVuZ3RoID4gMCA/IGEuZ3JvdXBzWzBdIDogXCJcIjtcclxuICAgICAgICAgICAgcltmaXJzdEdyb3VwSWRdID0gWy4uLnJbZmlyc3RHcm91cElkXSB8fCBbXSwgYV07XHJcbiAgICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coR3JvdXBlZEdyb3Vwcyk7XHJcblxyXG4gICAgICAgIC8vIENpY2xvIGRlbCByaXN1bHRhdG8sIGFnZ2l1bmdlbmRvIGkgZ3J1cHBpIGFsIG1vZGVsbG9cclxuICAgICAgICAvLyBQZXIgb2duaSBncnVwcG8gY2hlIGFnZ2l1bmdvLCBhc3NlZ25vIGkgcGFyYW1ldHJpIGluIG9yZGluZVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUml2ZWRlIGkgYmluZGluZ3MgZGVpIHBhcmFtZXRyaSBpbiBiYXNlIGEgbG9ybyBldmVudHVhbGkgZXNwcmVzc2lvbmkgZGkgY29udHJvbGxvXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gbGlzdGEgY29uIGdsaSBpZCBkZWkgcGFyYW1ldHJpIGNoZSBzb25vIHN0YXRpIG1vZGlmaWNhdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXZpZXdQYXJhbWV0ZXJzQmluZGluZ3MoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCBjaGFuZ2VzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLlBhcmFtZXRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAocC5yZXF1aXJlZGV4cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZSZXEgPSBwLnJlcXVpcmVkO1xyXG4gICAgICAgICAgICAgICAgcC5yZXF1aXJlZCA9IHRoaXMuZXZhbHVhdGUocC5yZXF1aXJlZGV4cCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlJlcSAhPSBwLnJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChwLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocC52aXNpYmxlZXhwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJldlZpc2kgPSBwLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICBwLnZpc2libGUgPSB0aGlzLmV2YWx1YXRlKHAudmlzaWJsZWV4cCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlZpc2kgIT0gcC52aXNpYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChwLmlkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHVuJ2VzcHJlc3Npb25lIGluIGJhc2UgYWkgcGFyYW1ldHJpIHByZXNlbnRpIG5lbCBtb2RlbGxvIGF0dHVhbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV4cHIgRXNwcmVzc2lvbmUgZGEgdmFsdXRhcmUgc2NyaXR0YSBuZWwgZm9ybWF0byAocmlwZXRpYmlsZSkgXCJJRCAoPT18IT18PHw+fD49fDw9KSAoYHZhbG9yZWAgfCBudWxsIHwgdHJ1ZSB8IGZhbHNlIHwgWFhYLFhYWClcIiBzZXBhcmF0byBldmVudHVhbG1lbnRlIGRhICYmIGVkIHx8XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zICoqdHJ1ZSoqIHNlIGxhIGNvbmRpemlvbmUgw6ggdmVyaWZpY2F0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZShleHByOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgcmVnZXggPSAvXFxzPyhbYS16QS1aMC05Xy1dKylcXHM/KCE9fD09fDx8Pnw8PXw+PSlcXHM/KGBbXmBdK2B8YGB8bnVsbHxbMC05LF0rfHRydWV8ZmFsc2UpL2dtO1xyXG5cclxuICAgICAgICB2YXIgbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB2YXIgZmluYWxFeHByID0gZXhwcjtcclxuICAgICAgICB3aGlsZSAobWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoZXhwcikpIHtcclxuICAgICAgICAgICAgdmFyIGZ1bGxNYXRjaCA9IG1hdGNoZXNbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgaWQgPSBtYXRjaGVzWzFdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG1hdGNoZXNbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICBsZXQgYlZhbHVlID0gbWF0Y2hlc1szXS50cmltKCkudHJpbSgpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBtYXRjaGVzWzNdLnRyaW0oKS50cmltKCkucmVwbGFjZSgnYCcsICcnKS5yZXBsYWNlKCdgJywgJycpO1xyXG5cclxuICAgICAgICAgICAgZmluYWxFeHByID0gZmluYWxFeHByLnJlcGxhY2UoZnVsbE1hdGNoLCBgdGhpcy5jaGVja1ZhbHVlKCcke2lkfScsICcke29wZXJhdGlvbn0nLCAke2JWYWx1ZSA9PSAnbnVsbCcgPyAnbnVsbCcgOiBgJyR7dmFsdWV9J2B9KWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZmluYWxFeHByKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RpdHVpc2NlIGwnb3BlcmF6aW9uZSBkaSBjb21wYXJhemlvbmUgZnJhIHVuIHNpbmdvbG8gdmFsb3JlIGRpIHVuIHBhcmFtZXRybyBlIHVuIHN1byB2YWxvcmUgZGkgY29uZnJvbnRvIGluIGJhc2UgYWQgdW4gb3BlcmF0b3JlXHJcbiAgICAgKiBSaWNoaWFtYXRhIGRhIEVWQUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGVsIHBhcmFtZXRybyBkaSBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciBPcGVyYXRvcmUgY29uIGN1aSB2ZXJpZmljYXJlIGlsIHZhbG9yZTogPT0sICE9LCA+LCA8LCA+PSwgPD1cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWxvcmUgZGkgY29uZnJvbnRvIGRhIHV0aWxpenphcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgKip0cnVlKiogc2UgbGEgY29uZGl6aW9uZSDDqCB2ZXJpZmljYXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hlY2tWYWx1ZShrZXk6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciByUGFyID0gdGhpcy5QYXJhbWV0ZXJzQ2FjaGVba2V5XTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJQYXIudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgXCIke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsIGBgKX1cIiAke29wZXJhdG9yfSBcIiR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1cImApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCBgYCkudG9TdHJpbmcoKX0gJHtvcGVyYXRvcn0gJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZCh2YWx1ZSwgYGApfWApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHJQYXIudmFsdWUsICdcIlwiJywgdHJ1ZSkucmVwbGFjZSgnLCcsICcuJyl9ICR7b3BlcmF0b3J9ICR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsICdcIlwiJywgdHJ1ZSkucmVwbGFjZSgnLCcsICcuJyl9YCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJEYXRlQ29udiA9IGB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKFwiJHtyUGFyLnZhbHVlfVwiKWA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbERhdGVDb252ID0gYHRoaXMuZGF0ZXMuZ2V0RGF0ZUNvbnZlcnRpb24oXCIke3ZhbHVlfVwiKWA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI9PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gPT0gJHt2YWxEYXRlQ29udn0gfHwgKCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIiE9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSAke3ZhbERhdGVDb252fSAmJiAke3BhckRhdGVDb252fSAhPSBudWxsICYmICEke3BhckRhdGVDb252fS5pc1NhbWUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI+XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNBZnRlcigke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjxcIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAke3BhckRhdGVDb252fS5pc0JlZm9yZSgke3ZhbERhdGVDb252fSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIj49XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPD1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHt2YWxEYXRlQ29udn0gIT0gbnVsbCAmJiAoJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pIHx8ICR7cGFyRGF0ZUNvbnZ9Py5pc1NhbWUoJHt2YWxEYXRlQ29udn0pKWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJFcnJvcmkgbmVsbGEgdmFsdXRhemlvbmUgZGVsbCdlc3ByZXNzaW9uZS4gRmFsbGJhY2sgYSBmYWxzZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgYEBlc2ZhZW56YS9wYXJhbWV0ZXJzOiBUaXBvIHBhcmFtZXRybyAke2tleX0gbm9uIHJpY29ub3NjaXV0bzogJHtyUGFyLnR5cGV9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0SWZudWxsT3JVbmRlZmluZWQ8VD4oaXRlbTogVCwgZGZsdDogVCwgZW1wdHlTdHJpbmdJc051bGw6IGJvb2xlYW4gPSBmYWxzZSk6IFQge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbSA9PSB1bmRlZmluZWQgfHwgaXRlbS50b1N0cmluZygpID09ICdudWxsJyB8fCAoZW1wdHlTdHJpbmdJc051bGwgJiYgaXRlbS50b1N0cmluZygpID09IFwiXCIpKVxyXG4gICAgICAgICAgICByZXR1cm4gZGZsdDtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGdldFNvdXJjZShwYXJhbWV0ZXI6IEdlbmVyaWNQYXJhbWV0ZXIsIHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKTogT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfVtdPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLkF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQGZvcm1zLWFuZC12YWxpZGF0aW9uczogZnVuemlvbmUgZGkgZGF0YXJldHJpZXZlIG5vbiBpbXBvc3RhdGEgcGVyIHVuIHBhcmFtZXRybyBhdXRvY29tcGxldGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihbXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5BdXRvQ29tcGxldGVEYXRhUmV0cmlldmUocGFyYW1ldGVyLCBzZWFyY2gsIGJ5aWQpO1xyXG4gICAgfVxyXG59IiwiPGRpdiAqbmdJZj1cIighUGFyYW1ldGVycyB8fCBQYXJhbWV0ZXJzLmxlbmd0aCA9PSAwKSAmJiBFbXB0eU1lc3NhZ2VcIj5cclxuICAgIDxlbT57e0VtcHR5TWVzc2FnZX19PC9lbT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiR3JvdXBzXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVGVtcDsgY29udGV4dDoge2l0ZW06IHsgZ3JvdXBzOiBHcm91cHMsIGlzU3ViZ3JvdXA6IGZhbHNlIH19XCI+PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNUZW1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgaXRlbS5ncm91cHM7IGxldCBrID0gaW5kZXhcIj5cclxuICAgICAgICA8ZGl2IFtjbGFzcy5wYXJzLXN1Ymdyb3VwXT1cIml0ZW0uaXNTdWJncm91cFwiIFtjbGFzcy5wYXJzLWdyb3VwXT1cIiFpdGVtLmlzU3ViZ3JvdXBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkdyb3Vwc09yU3ViZ3JvdXBzRGlzcGxheTsgY29udGV4dDogeyBpdGVtOiB7IGdyb3VwOiBncm91cCwgaW5kZXg6IGsgKyAoaXRlbS5pbmRleCA/ICgnXycgKyBpdGVtLmluZGV4KSA6ICcnKSwgaXNTdWJncm91cDogaXRlbS5pc1N1Ymdyb3VwIH19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5zdWJncm91cHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlRlbXA7IGNvbnRleHQ6IHtpdGVtOiB7IGdyb3VwczogZ3JvdXAuc3ViZ3JvdXBzLCBpbmRleDogayArIChpdGVtLmluZGV4ID8gKCdfJyArIGl0ZW0uaW5kZXgpIDogJycpLCBpc1N1Ymdyb3VwOiB0cnVlIH19O1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNHcm91cHNPclN1Ymdyb3Vwc0Rpc3BsYXkgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5ncm91cFwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwLmdyb3VwTmFtZVwiIFtjbGFzcy5wYXJzLWdyb3VwLXRpdGxlXT1cIiFpdGVtLmlzU3ViZ3JvdXBcIiBbY2xhc3MucGFycy1zdWJncm91cC10aXRsZV09XCJpdGVtLmlzU3ViZ3JvdXBcIj5cclxuICAgICAgICAgICAge3tpdGVtLmdyb3VwLmdyb3VwTmFtZX19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uZ3JvdXAucGFyYW1ldGVycyAmJiBpdGVtLmdyb3VwLnBhcmFtZXRlcnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgcGFyIG9mIGl0ZW0uZ3JvdXAucGFyYW1ldGVyczsgbGV0IGk9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7XCIgW2NsYXNzLmFwcC1tYXJnaW4tYm90dG9tLTBdPVwiTGFzdFBhcmFtZXRlck5vTWFyZ2luICYmIGxhc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXIudmlzaWJsZSAmJiAoIURpc3BsYXlNb2RlIHx8ICghSGlkZUVtcHR5IHx8IChwYXIudmFsdWUpKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX0gbS10LTVcIj48c3BhbiAqbmdJZj1cIlJlbW92YWxcIiBjbGFzcz1cImZhIGZhLXJlbW92ZSB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVQYXJhbWV0ZXIocGFyKVwiPiZuYnNwOzwvc3Bhbj57e3Bhci5kZXNjcmlwdGlvbn19e3twYXIucmVxdWlyZWQgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIERhdGEtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1kYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0taW5wdXQgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBudW1lcm8tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1pbnB1dCBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvciBwYXR0ZXJuPVwie3twYXIucGF0dGVybiB8fCAnXlsrLV0/WzAtOV0qWyxdP1swLTldKyQnfX1cIj48L2Zvcm0taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGJvb2xlYW4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19IG0tdC01XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tY2hlY2tib3ggW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gc2luZ2xlIHNlbGVjdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiAhcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1zZWxlY3QgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3IgW1NvdXJjZV09XCJwYXIuZW51bXZhbHVlc1wiPjwvZm9ybS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGkgc2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmIHBhci5tdWx0aWVudW0gJiYgIXBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tbXVsdGlzZWxlY3QgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtVc2VKc29uTGlzdF09XCJNdWx0aXNlbGVjdE1vZGUgPT0gJ0pzb25BcnJheSdcIiBbVXNlQ29tbWFTZXBhcmF0ZWRMaXN0XT1cIk11bHRpc2VsZWN0TW9kZSA9PSAnQ29tbWFTZXBhcmF0ZWQnXCIgW1NlbGVjdExhYmVsXT1cIignU2VsZXppb25hJyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbU291cmNlXT1cInBhci5lbnVtdmFsdWVzXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGlzZWxlY3Qgc2VuemEgc29yZ2VudGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7SW5wdXRDb2xXaWR0aH19XCIgKm5nSWY9XCJwYXIudHlwZSA9PSAnZW51bScgJiYgcGFyLm11bHRpZW51bSAmJiAhcGFyLnNvdXJjZWFwaSAmJiAhcGFyLmVudW12YWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbSGlkZUNob2ljZXNPblNlbGVjdGlvbl09XCJ0cnVlXCIgW1NlbGVjdExhYmVsXT1cIignU2VsZXppb25hJyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbVW5ib3VuZE1vZGVdPVwidHJ1ZVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWF1dG9jb21wbGV0ZT4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIGF1dG9jb21wbGV0ZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiBwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWF1dG9jb21wbGV0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1NlYXJjaEZ1bmN0aW9uXT1cImdldFNvdXJjZS5iaW5kKHRoaXMsIHBhcilcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGlzZWxlY3QgYXV0b2NvbXBsZXRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ2VudW0nICYmIHBhci5tdWx0aWVudW0gJiYgcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1hdXRvY29tcGxldGUgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbSGlkZUNob2ljZXNPblNlbGVjdGlvbl09XCJBdXRvY29tcGxldGVIaWRlQ2hvaWNlc09uU2VsZWN0aW9uXCIgW011bHRpXT1cInRydWVcIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTZWFyY2hGdW5jdGlvbl09XCJnZXRTb3VyY2UuYmluZCh0aGlzLCBwYXIpXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBBbGxQYXJhbWV0ZXJzRW1wdHlcIiBjbGFzcz1cImNhcmQgY2FyZC1pbmZvIGFwcC1wYWRkaW5nLTEwIGFwcC1uby1tYXJnaW4gYXBwLXdoaXRlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIE5vbiAmZWdyYXZlOyBwcmVlbnRlIG51bGxhIGRhIHZpc3VhbGl6emFyZVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfcGFyYW1ldGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXJhbWV0ZXJzL3NyYy9saWIvZXNfcGFyYW1ldGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUE4RSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQUV2RSx1SEFBdUg7QUFldkgsTUFBTSxPQUFPLHFCQUFxQjtJQStEOUIsbUlBQW1JO0lBQ25JLElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILFlBQW9CLE9BQXVCLEVBQVMsRUFBdUIsRUFBUyxHQUFzQixF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Q0FBQyxxQkFBcUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osMEJDMUJMLHFnUEEwRWM7NEZEM0NELHFCQUFxQjtrQkFkakMsU0FBUzsrQkFDSSxlQUFlLGFBQ2Q7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTt3QkFDM0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLGlCQUVjLGlCQUFpQixDQUFDLElBQUk7d05BeUI1QixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csa0NBQWtDO3NCQUExQyxLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdPLGVBQWU7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5nQ29udHJvbCwgTmdGb3JtLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBHZW5lcmljUGFyYW1ldGVyIH0gZnJvbSAnLi9tb2RlbHMvR2VuZXJpY1BhcmFtZXRlcic7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgRXNQYXJhbWV0ZXJzTG9jIH0gZnJvbSBcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQubG9jXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR2VuZXJpY1BhcmFtZXRlckdyb3VwIH0gZnJvbSBcIi4vbW9kZWxzL0dlbmVyaWNQYXJhbWV0ZXJHcm91cFwiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGRpIGdyYWZpY2FyZSB1bmEgbGlzdGEgZGkgKipHZW5lcmljUGFyYW1ldGVyKiogY29tZSBJbnB1dCBpbiBiYXNlIGFsIGxvcm8gdGlwbyBzcGVjaWZpY28gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJlcy1wYXJhbWV0ZXJzXCIsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1BhcmFtZXRlcnNMb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFc1BhcmFtZXRlcnNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vZXNfcGFyYW1ldGVycy5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2VzX3BhcmFtZXRlcnMuY29tcG9uZW50Lmh0bWxcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNQYXJhbWV0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugc2kgbGF2b3JhIGEgc2luZ29sbyBwYXJhbWV0cm8gZm9yemF0byBkZW50cm8gdW4gYXJyYXkgZm9yIHRoZSBnbG9yeSBvZiBzYXRhbiAqL1xyXG4gICAgcHJpdmF0ZSBTaW5nbGVQYXJhbWV0ZXJNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gZGVsIGNvbXBvbmVudGUgc3UgY3VpIHZlbmdvbm8gZWZmZXR0dWF0ZSBsZSBncmFmaWNhemlvbmkgKi9cclxuICAgIHB1YmxpYyBQYXJhbWV0ZXJzOiBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgLyoqIE1vZGVsbG8gZGVsIGNvbXBvbmVudGUgc3UgY3VpIHZlbmdvbm8gZWZmZXR0dWF0ZSBsZSBncmFmaWNhemlvbmkgKi9cclxuICAgIHB1YmxpYyBHcm91cHM6IEdlbmVyaWNQYXJhbWV0ZXJHcm91cFtdO1xyXG5cclxuICAgIC8qKiBDYWNoZSBwZXIgZmFyZSBsb29rdXAgcmFwaWRpIGluIGZhc2UgZGkgdmFsdXRhemlvbmUgZXNwcmVzc2lvbmkgZGkgdmlzaWJpbGl0w6AgZSBvYmJsaWdhdG9yaWV0w6AgKi9cclxuICAgIHByaXZhdGUgUGFyYW1ldGVyc0NhY2hlOiB7IFtpZDogc3RyaW5nXTogR2VuZXJpY1BhcmFtZXRlciB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlwZWxpbmUgZGkgQW5ndWxhciBcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gICAgLyoqIEluZGljYSBjaGUgaWwgcGFyYW1ldHJvIGRldmUgZXNzZXJlIGluIG1vZGFsaXTDoCBkaXNwbGF5ICovXHJcbiAgICBASW5wdXQoKSBEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIGlsIHBhcmFtZXRybyAoSW4gRGlzcGxheSBtb2RlISEpIG5vbiBhcHBhcmUgc2UgdnVvdG8uIEluIHBpw7ksIHNlIHR1dHRpIHNvbm8gdnVvdGksIGZhIHZlZGVyZSB1bmEgYmVsbGEgY2FyZCBcIm5vbiBjaSBzb25vIHBhcmFtZXRyaSBwcmVzZW50aVwiICovXHJcbiAgICBASW5wdXQoKSBIaWRlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIGNoZSBsJ3VsdGltbyBwYXJhbWV0cm8gbm9uIGRldmUgYXZlcmUgbWFyZ2luZSBpbiBmb25kbyAqL1xyXG4gICAgQElucHV0KCkgTGFzdFBhcmFtZXRlck5vTWFyZ2luOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsYSBsYWJlbCAqL1xyXG4gICAgQElucHV0KCkgTGFiZWxDb2xXaWR0aDogbnVtYmVyID0gNDtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIElucHV0Q29sV2lkdGg6IG51bWJlciA9IDg7XHJcblxyXG4gICAgLyoqIElucHV0IGEgY3VpIGNvbGxlZ2FyZSBsYSB2YXJpYWJpbGUgKipzdWJtaXR0ZWQqKiBkZWwgZm9ybSBhbGwnaW50ZXJubyBkZWwgcXVhbGUgdmllbmUgdXRpbGl6emF0byBxdWVzdG8gY29tcG9uZW50ZSAqL1xyXG4gICAgQElucHV0KCkgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBkYSBtb3N0cmFyZSBxdWFsb3JhIG5vbiBmb3NzZXJvIGFuY29yYSByaWNldnV0aSBpICoqUGFyYW1ldGVycyoqIGRhIG1vc3RyYXJlICovXHJcbiAgICBASW5wdXQoKSBFbXB0eU1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHJpbXVvdmVyZSBpIHBhcmFtZXRyaSBkYWxsYSBsaXN0YSBjbGljY2FuZG8gc3VsbGEgWCBkYXZhbnRpIGFsbGEgTGFiZWwgKi9cclxuICAgIEBJbnB1dCgpIFJlbW92YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGkgY29tcG9uZW50aSBkaSBJbnB1dCBnZW5lcmF0aSBzb25vIFJlYWRvbmx5IG8gbm8gKi9cclxuICAgIEBJbnB1dCgpIFJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEluZGljYSBpbCBmb3JtYXRvIGxpc3RhIGNoZSBkZXYnZXNzZXJlIHV0aWxpenphdG8gKi9cclxuICAgIEBJbnB1dCgpIExpc3RGb3JtYXQ6ICdDb21tYVNlcGFyYXRlZCcgfCAnQXJyYXknID0gJ0FycmF5JztcclxuXHJcbiAgICAvKiogRm9ybSBjaGUgdXRpbGl6emEgaWwgY29tcG9uZW50ZS4gRm9uZGFtZW50YWxlIGNvbGxlZ2FybG8gc2Ugc2kgdm9nbGlvbm8gbGUgdmFsaWRhemlvbmkgc3VsIHN1Ym1pdCAqL1xyXG4gICAgQElucHV0KCkgRm9ybTogTmdGb3JtID0gbnVsbDtcclxuXHJcbiAgICAvKiogUXVhbmRvIHV0aWxpenphIHVuIHNvdHRvY29tcG9uZW50ZSBhdXRvY29tcGxldGUgYWJpbGl0YSBvIGRpc2FiaWxpdGEgaWwgcmVzZXQgZGVsbCdpbnB1dCBwZXIgb2duaSBzZWxlemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIEF1dG9jb21wbGV0ZUhpZGVDaG9pY2VzT25TZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGEgdXRpbGl6emFyZSBwZXIgdGlyYXJlIGZ1b3JpIGkgZGF0aSBkaSB1biBhdXRvY29tcGxldGUgKi9cclxuICAgIEBJbnB1dCgpIEF1dG9Db21wbGV0ZURhdGFSZXRyaWV2ZTogKHBhcmFtZXRlcjogR2VuZXJpY1BhcmFtZXRlciwgc2VhcmNoOiBzdHJpbmcsIGJ5aWQ6IGJvb2xlYW4pID0+IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT5cclxuXHJcbiAgICAgLyoqIEluZGljYSBjb21lIGRldmUgZnVuemlvbmFyZSBsYSBtdWx0aXNlbGVjdCAqL1xyXG4gICAgQElucHV0KCkgTXVsdGlzZWxlY3RNb2RlOiAnQ29tbWFTZXBhcmF0ZWQnIHwgJ0FycmF5JyB8ICdKc29uQXJyYXknID0gJ0NvbW1hU2VwYXJhdGVkJztcclxuXHJcbiAgICAvKiogUGVybWV0dGUgZGkgc2V0dGFyZSBpbiB1bmEgdm9sdGEgc29sbyBnbGkgaW5wdXQgKipMYWJlbENvbFdpZHRoKiogZSAqKklucHV0Q29sV2lkdGgqKiwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgQWxsUGFyYW1ldGVyc0VtcHR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBpbmo6IEluamVjdG9yLCBwdWJsaWMgZGF0ZXM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyBRdWkgZ2xpIGlucHV0IGRvdnJlYmJlcm8gZXNzZXJlIHNldHRhdGkuIEFsY3VuaSBmb3JtLXJvYmEgbm9uIHByZW5kb25vIGJlbmUgaSBjYW1iaSBkaSBpbnB1dFxyXG4gICAgICAgIC8vIE5vbiBzdGEgZnVuemlvbmFuZG8gY29tZSBzcGVyYXZvLi4uIGRhIHJpdmVkZXJlXHJcbiAgICAgICAgdGhpcy5Jbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqKTogdm9pZCB7XHJcblxyXG4gICAgICAgIGlmICghb2JqKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iaikpXHJcbiAgICAgICAgICAgIHRoaXMuU2luZ2xlUGFyYW1ldGVyTW9kZSA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqIDogW29ial07XHJcblxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVyc0NhY2hlID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnNDYWNoZVt0LmlkXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXQudHlwZWNvZGUgJiYgIXQudHlwZSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBuw6kgdW4gdHlwZSBuw6kgdW4gdHlwZWNvZGVcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50eXBlY29kZSAmJiAhdC50eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gdGhpcy51dGlFeHRzLmdldEpzVHlwZUZyb21UeXBlQ29kZSh0LnR5cGVjb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGVjb2RlICYmIHQudHlwZSAhPSB0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBSaWxldmF0ZSBpbmNvbnNpc3RlbnplIGZyYSBpbCBUaXBvICR7dC50eXBlfSBlIGlsIFRpcG8gJHt0aGlzLnV0aUV4dHMuZ2V0SnNUeXBlRnJvbVR5cGVDb2RlKHQudHlwZWNvZGUpfSBjYWxjb2xhdG8gZGEgVHlwZUNvZGUgJHt0LnR5cGVjb2RlfSBwZXIgaWwgcGFyYW1ldHJvICR7dC5pZH1gKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJib29sZWFuXCIpXHJcbiAgICAgICAgICAgICAgICB0LnZhbHVlID0gdC52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAodC5lbnVtdHlwZSB8fCB0LmRpY3R0eXBlKVxyXG4gICAgICAgICAgICAgICAgdC50eXBlID0gJ2VudW0nO1xyXG5cclxuICAgICAgICAgICAgLy8gVmFsb3JlIHZhbGlkbyBtYSBtb2RhbGl0w6AgZGkgdXRpbGl6em8gYSBDb21tYVNlcGFyYXRlZCwgZGV2byBhc3NpY3VyYXJtaSBkaSByaWVtZXR0ZXJlIGxhIHZlcnNpb25lIGNvbiBsYSBzdHJpbmdhXHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gJ2VudW0nICYmIHRoaXMuTGlzdEZvcm1hdCA9PSAnQ29tbWFTZXBhcmF0ZWQnICYmIHQubXVsdGllbnVtICYmIHQudmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWdnaXVzdG8gbGUgbW9kYWxpdMOgIGRpIGZ1bnppb25hbWVudG8gZGVpIHBhcmFtZXRyaSBsaXN0YS4gQ2hlIGludGVybmFtZW50ZSBmdW56aW9uYW5vIHNlbXByZSBjb24gdW5hIGxpc3RhIGRpIHZhbG9yaVxyXG4gICAgICAgICAgICBpZiAodC50eXBlID09ICdlbnVtJyAmJiB0aGlzLkxpc3RGb3JtYXQgPT0gJ0NvbW1hU2VwYXJhdGVkJyAmJiB0Lm11bHRpZW51bSAmJiB0LnZhbHVlICYmICFBcnJheS5pc0FycmF5KHQudmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHQudmFsdWUgPyB0LnZhbHVlLnNwbGl0KCcsJykubWFwKHQgPT4gdC50cmltKCkpIDogW107XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuQWxsUGFyYW1ldGVyc0VtcHR5ID0gdGhpcy5QYXJhbWV0ZXJzLmV2ZXJ5KHQgPT4gIXQudmFsdWUpO1xyXG4gICAgICAgIHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUdyb3VwcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjcmVhcmUgZSBvcmRpbmFyZSBpIGdydXBwaSBkZWkgcGFyYW1ldHJpXHJcbiAgICAqL1xyXG4gICAgZ2VuZXJhdGVHcm91cHMoKSB7XHJcbiAgICAgICAgdGhpcy5Hcm91cHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuUGFyYW1ldGVycz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnMuc29ydCgoYSwgYikgPT4gYS5vcmRlciA8IGIub3JkZXIgPyAtMSA6IDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2ljbG8gdHV0dGkgaSBwYXJhbWV0cmlcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IHRoaXMuUGFyYW1ldGVycy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwYXIgPSB0aGlzLlBhcmFtZXRlcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHBhckdyb3VwTmFtZSA9IHBhci5ncm91cCA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwT3JkZXIgPSBwYXIuZ3JvdXAgPyBwYXIub3JkZXIgOiAtMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZSBpbCBncnVwcG8gbm9uIGVzaXN0ZSwgbG8gYWdnaXVuZ29cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5Hcm91cHMuc29tZSh4ID0+IHguZ3JvdXBOYW1lID09IHBhckdyb3VwTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkdyb3Vwcy5wdXNoKG5ldyBHZW5lcmljUGFyYW1ldGVyR3JvdXAocGFyR3JvdXBOYW1lLCBncm91cE9yZGVyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSW5zZXJpc2NvIGlsIHBhcmFtZXRybyBkZW50cm8gYWwgc3VvIGdydXBwb1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Hcm91cHMuZmluZChnID0+IGcuZ3JvdXBOYW1lID09IHBhckdyb3VwTmFtZSkucGFyYW1ldGVycy5wdXNoKHBhcilcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gR2VzdGlvbmUgc290dG9ncnVwcGlcclxuICAgICAgICAgICAgbGV0IHN1Ymdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW10gPSB0aGlzLkdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZ3JvdXBOYW1lLmluY2x1ZGVzKCfCpycpKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgXzsgc3ViZ3JvdXBzLmxlbmd0aCA+IDA7ICgpID0+IHsgfSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gbGEgbGlzdGEgZGkgZ3J1cHBpIGNoZSBoYW5ubyBzb3R0b2dydXBwaVxyXG4gICAgICAgICAgICAgICAgLy8gUGVyIGNvbnZlbnppb25lLCBuZWwgbm9tZSBjb250ZW5nb25vIFwiwqdcIlxyXG4gICAgICAgICAgICAgICAgdGhpcy50cnlUb0FkZFN1Ymdyb3VwcyhzdWJncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgc3ViZ3JvdXBzID0gdGhpcy5Hcm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmdyb3VwTmFtZS5pbmNsdWRlcygnwqcnKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuR3JvdXBzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPCBiLm9yZGVyID8gLTEgOiAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGNyZWFyZSBlIG9yZGluYXJlIGkgc290dG9ncnVwcGkgZGVpIHBhcmFtZXRyaVxyXG4gICAgKi9cclxuICAgIHRyeVRvQWRkU3ViZ3JvdXBzKHN1Ymdyb3VwczogR2VuZXJpY1BhcmFtZXRlckdyb3VwW10pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgc3ViZ3JvdXBzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgc3ViID0gc3ViZ3JvdXBzW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gT3R0ZW5nbyB1biBsaXN0YSBjb24gbGEgZ2VyYXJjaGlhIGRlaSBncnVwcGksIGluIG9yZGluZVxyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzUGFyZW50SGllcmFyY2h5ID0gc3ViLmdyb3VwTmFtZS5zcGxpdCgnwqcnKSA/PyBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIGlsIGdydXBwbyBwYWRyZVxyXG4gICAgICAgICAgICBsZXQgcGFyZW50R3JvdXBOYW1lID0gc3ViLmdyb3VwTmFtZS5yZXBsYWNlKGDCpyR7Z3JvdXBzUGFyZW50SGllcmFyY2h5W2dyb3Vwc1BhcmVudEhpZXJhcmNoeS5sZW5ndGggLSAxXX1gLCBgYCk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCBncnVwcG8gcGFkcmUgbm9uIGVzaXN0ZSwgbG8gYWdnaXVuZ29cclxuICAgICAgICAgICAgaWYgKCF0aGlzLkdyb3Vwcy5zb21lKHggPT4geC5ncm91cE5hbWUgPT0gcGFyZW50R3JvdXBOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Hcm91cHMucHVzaChuZXcgR2VuZXJpY1BhcmFtZXRlckdyb3VwKHBhcmVudEdyb3VwTmFtZSwgc3ViLm9yZGVyKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJpbXVvdm8gZGFsIG5vbWUgZGVsIGdydXBwbyBsJ2luZm9ybWF6aW9uZSBzdWwgcGFkcmUgKFNpc3RlbWFuZG8gYW5jaGUgbCdldGljaGV0dGEpXHJcbiAgICAgICAgICAgIC8vIGUgbG8gYWdnaXVuZ28gYWkgc290dG9ncnVwcGkgZGVsIHBhZHJlXHJcbiAgICAgICAgICAgIHN1Yi5ncm91cE5hbWUgPSBzdWIuZ3JvdXBOYW1lLnJlcGxhY2UoYCR7cGFyZW50R3JvdXBOYW1lfcKnYCwgJycpO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50R3JvdXAgPSB0aGlzLkdyb3Vwcy5maW5kKHggPT4geC5ncm91cE5hbWUgPT0gcGFyZW50R3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudEdyb3VwPy5zdWJncm91cHMuc29tZShzID0+IHMuZ3JvdXBOYW1lID09IHN1Yi5ncm91cE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyZW50R3JvdXAuc3ViZ3JvdXBzLmZpbmQoZiA9PiBmLmdyb3VwTmFtZSA9PSBzdWIuZ3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIHN1Yi5wYXJhbWV0ZXJzLm1hcChwID0+IHRhcmdldC5wYXJhbWV0ZXJzLnB1c2gocCkpO1xyXG4gICAgICAgICAgICAgICAgc3ViLnN1Ymdyb3Vwcy5tYXAocyA9PiB0YXJnZXQuc3ViZ3JvdXBzLnB1c2gocykpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9yZGVyID0gc3ViLm9yZGVyIDwgdGFyZ2V0Lm9yZGVyID8gc3ViLm9yZGVyIDogdGFyZ2V0Lm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXA/LnN1Ymdyb3Vwcy5wdXNoKHN1Yik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJpbXVvdm8gaWwgc290dG9ncnVwcG8gZ3J1cHBvIGRhbGxhIGxpc3RhXHJcbiAgICAgICAgICAgIHRoaXMuR3JvdXBzLnNwbGljZSh0aGlzLkdyb3Vwcy5pbmRleE9mKHN1YiksIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpcGVsaW5lIGRpIEFuZ3VsYXJcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQgeyB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaXBlbGluZSBkaSBBbmd1bGFyXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgbW9kZWxsbyBpbiB1c2NpdGEgZSBwcm9wYWdhcmxvIHN1bCBiaW5kaW5nIG5nTW9kZWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlBhcmFtZXRlcnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYoIXRoaXMuR3JvdXBzKVxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlR3JvdXBzKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2UgY2kgc29ubyBkZWxsZSBtb2RpZmljaGUgYWkgYmluZGluZyBwb3RyZWJiZXJvIGVzc2VyZSBjYW1iaWF0aSBpIHJlcXVpcmVkLiBSaWNyZW8gdHV0dGkgaSBjb21wb25lbnRpIGUgcmktaWRyYXRvIGxhIGNhY2hlIGRlaSBwYXJhbWV0cmlcclxuICAgICAgICB2YXIgY2hhbmdlcyA9IHRoaXMucmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgLy8gSW4gYmFzZSBhaSBiaW5kaW5nIGNhbWJpYXRpIGRldm8gdHJvdmFyZSB0dXR0aSBpIHBhcmFtZXRyaSBjaGUgaGFuIHN1Yml0byBtb2RpZmljaGUgc3RydXR0dXJhbGkgKHZpc2liaWxpdMOgLCBvYmJsaWdhdG9yaWV0w6ApXHJcbiAgICAgICAgICAgIC8vIGRpc3RydWdnZXJsaSBlIHJpY3JlYXJsaSBpbiBtb2RvIGNoZSBpIGJpbmRpbmcgbGF0byBodG1sIHNpIGFnZ2lvcm5pbm8gZGkgY29uc2VndWVuemEuXHJcbiAgICAgICAgICAgIC8vIDE6IEZhY2NpbyB1bmEgY29waWEgZGVsIHBhcmFtZXRybyBjb3JyZW50ZVxyXG4gICAgICAgICAgICAvLyAyOiBUcm92byBsYSBzdWEgcG9zaXppb25lIGFsbCdpbnRlcm5vIGRlaSBncnVwcGkgZSBsbyBzb3N0aXR1aXNjbyBjb24gbGEgY29waWFcclxuICAgICAgICAgICAgLy8gMzogQWdnaW9ybm8gbGEgbGlzdGEgZGVpIHBhcmFtZXRyaSBlIGxhIHN1YSBjYWNoZSBpbiBtb2RvIGRhIHB1bnRhcmUgYWxsJ29nZ2V0dG8gbnVvdm9cclxuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuUGFyYW1ldGVycy5maW5kSW5kZXgodCA9PiB0LmlkID09IGNoKTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb3B5ID0gdGhpcy51dGlFeHRzLmRlZXBDbG9uZSh0aGlzLlBhcmFtZXRlcnNbaW5kZXhdKSBhcyBHZW5lcmljUGFyYW1ldGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJSZWZGaXhlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWcgPSAwOyBpZyA8IHRoaXMuR3JvdXBzLmxlbmd0aDsgaWcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBnID0gdGhpcy5Hcm91cHNbaWddO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlwID0gMDsgaXAgPCBnLnBhcmFtZXRlcnMubGVuZ3RoOyBpcCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gZy5wYXJhbWV0ZXJzW2lwXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gdGhpcy5QYXJhbWV0ZXJzW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Hcm91cHNbaWddLnBhcmFtZXRlcnNbaXBdID0gcGFyYW1ldGVyQ29weTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclJlZkZpeGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJSZWZGaXhlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFyYW1ldGVyc1tpbmRleF0gPSBwYXJhbWV0ZXJDb3B5XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhcmFtZXRlcnNDYWNoZVtjaF0gPSB0aGlzLlBhcmFtZXRlcnNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIFBhcmFtZXRlcnNDbG9uZSA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUodGhpcy5QYXJhbWV0ZXJzKSBhcyBHZW5lcmljUGFyYW1ldGVyW107XHJcblxyXG4gICAgICAgIC8vIEFnZ2l1c3RvIGxlIG1vZGFsaXTDoCBkaSBmdW56aW9uYW1lbnRvIGRlaSBwYXJhbWV0cmkgbGlzdGEuIENoZSBpbnRlcm5hbWVudGUgZnVuemlvbmFubyBzZW1wcmUgY29uIHVuYSBsaXN0YSBkaSB2YWxvcmlcclxuICAgICAgICBQYXJhbWV0ZXJzQ2xvbmU/LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0LnR5cGUgPT0gXCJlbnVtXCIgJiYgdGhpcy5MaXN0Rm9ybWF0ID09ICdDb21tYVNlcGFyYXRlZCcgJiYgdC5tdWx0aWVudW0gJiYgdC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KHQudmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdC52YWx1ZSA9IHQudmFsdWUuam9pbignLCcpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLlNpbmdsZVBhcmFtZXRlck1vZGUgPyBQYXJhbWV0ZXJzQ2xvbmVbMF0gOiBQYXJhbWV0ZXJzQ2xvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmltdW92ZSBpbCBwYXJhbWV0cm8gc2VsZXppb25hdG8gZSBwcm9wYWdhIGlsIG1vZGVsbG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtHZW5lcmljUGFyYW1ldGVyfSBwYXIgUGFyYW1ldHJvIGRhIHJpbXVvdmVyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlUGFyYW1ldGVyKHBhcjogR2VuZXJpY1BhcmFtZXRlcikge1xyXG4gICAgICAgIHRoaXMuUGFyYW1ldGVycy5zcGxpY2UodGhpcy5QYXJhbWV0ZXJzLmluZGV4T2YocGFyKSwgMSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdlbmVyYXRlUGFyYW1ldGVyR3JvdXBzKCkge1xyXG4gICAgICAgIGxldCBHcm91cHM6IHsgaWQ6IHN0cmluZywgZ3JvdXBzOiBzdHJpbmdbXSwgb3JkZXI6IG51bWJlciB9W10gPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5QYXJhbWV0ZXJzLmZvckVhY2gocGFyYW0gPT4ge1xyXG4gICAgICAgICAgICBHcm91cHMucHVzaCh7IGlkOiBwYXJhbS5pZCwgZ3JvdXBzOiBwYXJhbS5ncm91cC5zcGxpdChcIsKnXCIpLCBvcmRlcjogcGFyYW0ub3JkZXIgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBHcm91cGVkR3JvdXBzID0gR3JvdXBzLnJlZHVjZSgociwgYSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlyc3RHcm91cElkID0gYS5ncm91cHM/Lmxlbmd0aCA+IDAgPyBhLmdyb3Vwc1swXSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHJbZmlyc3RHcm91cElkXSA9IFsuLi5yW2ZpcnN0R3JvdXBJZF0gfHwgW10sIGFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKEdyb3VwZWRHcm91cHMpO1xyXG5cclxuICAgICAgICAvLyBDaWNsbyBkZWwgcmlzdWx0YXRvLCBhZ2dpdW5nZW5kbyBpIGdydXBwaSBhbCBtb2RlbGxvXHJcbiAgICAgICAgLy8gUGVyIG9nbmkgZ3J1cHBvIGNoZSBhZ2dpdW5nbywgYXNzZWdubyBpIHBhcmFtZXRyaSBpbiBvcmRpbmVcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJpdmVkZSBpIGJpbmRpbmdzIGRlaSBwYXJhbWV0cmkgaW4gYmFzZSBhIGxvcm8gZXZlbnR1YWxpIGVzcHJlc3Npb25pIGRpIGNvbnRyb2xsb1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IGxpc3RhIGNvbiBnbGkgaWQgZGVpIHBhcmFtZXRyaSBjaGUgc29ubyBzdGF0aSBtb2RpZmljYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmV2aWV3UGFyYW1ldGVyc0JpbmRpbmdzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgY2hhbmdlcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5QYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5QYXJhbWV0ZXJzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHAucmVxdWlyZWRleHApIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcmV2UmVxID0gcC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgICAgIHAucmVxdWlyZWQgPSB0aGlzLmV2YWx1YXRlKHAucmVxdWlyZWRleHApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZSZXEgIT0gcC5yZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2gocC5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHAudmlzaWJsZWV4cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZWaXNpID0gcC52aXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgcC52aXNpYmxlID0gdGhpcy5ldmFsdWF0ZShwLnZpc2libGVleHApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZWaXNpICE9IHAudmlzaWJsZSlcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2gocC5pZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbHV0YSB1bidlc3ByZXNzaW9uZSBpbiBiYXNlIGFpIHBhcmFtZXRyaSBwcmVzZW50aSBuZWwgbW9kZWxsbyBhdHR1YWxlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBleHByIEVzcHJlc3Npb25lIGRhIHZhbHV0YXJlIHNjcml0dGEgbmVsIGZvcm1hdG8gKHJpcGV0aWJpbGUpIFwiSUQgKD09fCE9fDx8Pnw+PXw8PSkgKGB2YWxvcmVgIHwgbnVsbCB8IHRydWUgfCBmYWxzZSB8IFhYWCxYWFgpXCIgc2VwYXJhdG8gZXZlbnR1YWxtZW50ZSBkYSAmJiBlZCB8fFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyAqKnRydWUqKiBzZSBsYSBjb25kaXppb25lIMOoIHZlcmlmaWNhdGEsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGUoZXhwcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdmFyIHJlZ2V4ID0gL1xccz8oW2EtekEtWjAtOV8tXSspXFxzPyghPXw9PXw8fD58PD18Pj0pXFxzPyhgW15gXStgfGBgfG51bGx8WzAtOSxdK3x0cnVlfGZhbHNlKS9nbTtcclxuXHJcbiAgICAgICAgdmFyIG1hdGNoZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgdmFyIGZpbmFsRXhwciA9IGV4cHI7XHJcbiAgICAgICAgd2hpbGUgKG1hdGNoZXMgPSByZWdleC5leGVjKGV4cHIpKSB7XHJcbiAgICAgICAgICAgIHZhciBmdWxsTWF0Y2ggPSBtYXRjaGVzWzBdLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIGlkID0gbWF0Y2hlc1sxXS50cmltKCk7XHJcbiAgICAgICAgICAgIHZhciBvcGVyYXRpb24gPSBtYXRjaGVzWzJdLnRyaW0oKTtcclxuICAgICAgICAgICAgbGV0IGJWYWx1ZSA9IG1hdGNoZXNbM10udHJpbSgpLnRyaW0oKTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hlc1szXS50cmltKCkudHJpbSgpLnJlcGxhY2UoJ2AnLCAnJykucmVwbGFjZSgnYCcsICcnKTtcclxuXHJcbiAgICAgICAgICAgIGZpbmFsRXhwciA9IGZpbmFsRXhwci5yZXBsYWNlKGZ1bGxNYXRjaCwgYHRoaXMuY2hlY2tWYWx1ZSgnJHtpZH0nLCAnJHtvcGVyYXRpb259JywgJHtiVmFsdWUgPT0gJ251bGwnID8gJ251bGwnIDogYCcke3ZhbHVlfSdgfSlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBldmFsKGZpbmFsRXhwcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0aXR1aXNjZSBsJ29wZXJhemlvbmUgZGkgY29tcGFyYXppb25lIGZyYSB1biBzaW5nb2xvIHZhbG9yZSBkaSB1biBwYXJhbWV0cm8gZSB1biBzdW8gdmFsb3JlIGRpIGNvbmZyb250byBpbiBiYXNlIGFkIHVuIG9wZXJhdG9yZVxyXG4gICAgICogUmljaGlhbWF0YSBkYSBFVkFMXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCBwYXJhbWV0cm8gZGkgY3VpIHZlcmlmaWNhcmUgaWwgdmFsb3JlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgT3BlcmF0b3JlIGNvbiBjdWkgdmVyaWZpY2FyZSBpbCB2YWxvcmU6ID09LCAhPSwgPiwgPCwgPj0sIDw9XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsb3JlIGRpIGNvbmZyb250byBkYSB1dGlsaXp6YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zICoqdHJ1ZSoqIHNlIGxhIGNvbmRpemlvbmUgw6ggdmVyaWZpY2F0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrVmFsdWUoa2V5OiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgclBhciA9IHRoaXMuUGFyYW1ldGVyc0NhY2hlW2tleV07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3dpdGNoIChyUGFyLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYFwiJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCBgYCl9XCIgJHtvcGVyYXRvcn0gXCIke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCBgYCl9XCJgKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYCR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQoclBhci52YWx1ZSwgYGApLnRvU3RyaW5nKCl9ICR7b3BlcmF0b3J9ICR7dGhpcy5kZWZhdWx0SWZudWxsT3JVbmRlZmluZWQodmFsdWUsIGBgKX1gKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChgJHt0aGlzLmRlZmF1bHRJZm51bGxPclVuZGVmaW5lZChyUGFyLnZhbHVlLCAnXCJcIicsIHRydWUpLnJlcGxhY2UoJywnLCAnLicpfSAke29wZXJhdG9yfSAke3RoaXMuZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkKHZhbHVlLCAnXCJcIicsIHRydWUpLnJlcGxhY2UoJywnLCAnLicpfWApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyRGF0ZUNvbnYgPSBgdGhpcy5kYXRlcy5nZXREYXRlQ29udmVydGlvbihcIiR7clBhci52YWx1ZX1cIilgO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxEYXRlQ29udiA9IGB0aGlzLmRhdGVzLmdldERhdGVDb252ZXJ0aW9uKFwiJHt2YWx1ZX1cIilgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPT1cIjogcmV0dXJuIGV2YWwoYCR7cGFyRGF0ZUNvbnZ9ID09ICR7dmFsRGF0ZUNvbnZ9IHx8ICgke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzU2FtZSgke3ZhbERhdGVDb252fSkpYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIhPVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gJHt2YWxEYXRlQ29udn0gJiYgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAhJHtwYXJEYXRlQ29udn0uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiPlwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICR7cGFyRGF0ZUNvbnZ9LmlzQWZ0ZXIoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI8XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgJHtwYXJEYXRlQ29udn0uaXNCZWZvcmUoJHt2YWxEYXRlQ29udn0pYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI+PVwiOiByZXR1cm4gZXZhbChgJHtwYXJEYXRlQ29udn0gIT0gbnVsbCAmJiAke3ZhbERhdGVDb252fSAhPSBudWxsICYmICgke3BhckRhdGVDb252fS5pc0FmdGVyKCR7dmFsRGF0ZUNvbnZ9KSB8fCAke3BhckRhdGVDb252fT8uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjw9XCI6IHJldHVybiBldmFsKGAke3BhckRhdGVDb252fSAhPSBudWxsICYmICR7dmFsRGF0ZUNvbnZ9ICE9IG51bGwgJiYgKCR7cGFyRGF0ZUNvbnZ9LmlzQmVmb3JlKCR7dmFsRGF0ZUNvbnZ9KSB8fCAke3BhckRhdGVDb252fT8uaXNTYW1lKCR7dmFsRGF0ZUNvbnZ9KSlgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiRXJyb3JpIG5lbGxhIHZhbHV0YXppb25lIGRlbGwnZXNwcmVzc2lvbmUuIEZhbGxiYWNrIGEgZmFsc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IGBAZXNmYWVuemEvcGFyYW1ldGVyczogVGlwbyBwYXJhbWV0cm8gJHtrZXl9IG5vbiByaWNvbm9zY2l1dG86ICR7clBhci50eXBlfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZGVmYXVsdElmbnVsbE9yVW5kZWZpbmVkPFQ+KGl0ZW06IFQsIGRmbHQ6IFQsIGVtcHR5U3RyaW5nSXNOdWxsOiBib29sZWFuID0gZmFsc2UpOiBUIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsIHx8IGl0ZW0gPT0gdW5kZWZpbmVkIHx8IGl0ZW0udG9TdHJpbmcoKSA9PSAnbnVsbCcgfHwgKGVtcHR5U3RyaW5nSXNOdWxsICYmIGl0ZW0udG9TdHJpbmcoKSA9PSBcIlwiKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRmbHQ7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBnZXRTb3VyY2UocGFyYW1ldGVyOiBHZW5lcmljUGFyYW1ldGVyLCBzZWFyY2g6IHN0cmluZywgYnlpZDogYm9vbGVhbik6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5BdXRvQ29tcGxldGVEYXRhUmV0cmlldmUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkBmb3Jtcy1hbmQtdmFsaWRhdGlvbnM6IGZ1bnppb25lIGRpIGRhdGFyZXRyaWV2ZSBub24gaW1wb3N0YXRhIHBlciB1biBwYXJhbWV0cm8gYXV0b2NvbXBsZXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoW10pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQXV0b0NvbXBsZXRlRGF0YVJldHJpZXZlKHBhcmFtZXRlciwgc2VhcmNoLCBieWlkKTtcclxuICAgIH1cclxufSIsIjxkaXYgKm5nSWY9XCIoIVBhcmFtZXRlcnMgfHwgUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgJiYgRW1wdHlNZXNzYWdlXCI+XHJcbiAgICA8ZW0+e3tFbXB0eU1lc3NhZ2V9fTwvZW0+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIkdyb3VwcyAmJiBJbml0aWFsaXplZFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIlRlbXA7IGNvbnRleHQ6IHtpdGVtOiB7IGdyb3VwczogR3JvdXBzLCBpc1N1Ymdyb3VwOiBmYWxzZSB9fVwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjVGVtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGl0ZW0uZ3JvdXBzOyBsZXQgayA9IGluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3MucGFycy1zdWJncm91cF09XCJpdGVtLmlzU3ViZ3JvdXBcIiBbY2xhc3MucGFycy1ncm91cF09XCIhaXRlbS5pc1N1Ymdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJHcm91cHNPclN1Ymdyb3Vwc0Rpc3BsYXk7IGNvbnRleHQ6IHsgaXRlbTogeyBncm91cDogZ3JvdXAsIGluZGV4OiBrICsgKGl0ZW0uaW5kZXggPyAoJ18nICsgaXRlbS5pbmRleCkgOiAnJyksIGlzU3ViZ3JvdXA6IGl0ZW0uaXNTdWJncm91cCB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuc3ViZ3JvdXBzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJUZW1wOyBjb250ZXh0OiB7aXRlbTogeyBncm91cHM6IGdyb3VwLnN1Ymdyb3VwcywgaW5kZXg6IGsgKyAoaXRlbS5pbmRleCA/ICgnXycgKyBpdGVtLmluZGV4KSA6ICcnKSwgaXNTdWJncm91cDogdHJ1ZSB9fTtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjR3JvdXBzT3JTdWJncm91cHNEaXNwbGF5IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0uZ3JvdXAgJiYgSW5pdGlhbGl6ZWRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5ncm91cC5ncm91cE5hbWVcIiBbY2xhc3MucGFycy1ncm91cC10aXRsZV09XCIhaXRlbS5pc1N1Ymdyb3VwXCIgW2NsYXNzLnBhcnMtc3ViZ3JvdXAtdGl0bGVdPVwiaXRlbS5pc1N1Ymdyb3VwXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5ncm91cC5ncm91cE5hbWV9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmdyb3VwLnBhcmFtZXRlcnMgJiYgaXRlbS5ncm91cC5wYXJhbWV0ZXJzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFyIG9mIGl0ZW0uZ3JvdXAucGFyYW1ldGVyczsgbGV0IGk9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIURpc3BsYXlNb2RlIHx8ICghSGlkZUVtcHR5IHx8IChwYXIudmFsdWUpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwicGFyLnZpc2libGVcIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0UGFyYW1ldGVyTm9NYXJnaW4gJiYgbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3tMYWJlbENvbFdpZHRofX0gbS10LTVcIj48c3BhbiAqbmdJZj1cIlJlbW92YWxcIiBjbGFzcz1cImZhIGZhLXJlbW92ZSB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVQYXJhbWV0ZXIocGFyKVwiPiZuYnNwOzwvc3Bhbj57e3Bhci5kZXNjcmlwdGlvbn19e3twYXIucmVxdWlyZWQgPyAnKicgOiAnJ319OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TZSBEYXRhLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tZGF0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1kYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNlIHN0cmluZ2EtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWlucHV0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TZSBudW1lcm8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC17e0lucHV0Q29sV2lkdGh9fVwiICpuZ0lmPVwicGFyLnR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWlucHV0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yIHBhdHRlcm49XCJ7e3Bhci5wYXR0ZXJuIHx8ICdeWystXT9bMC05XSpbLF0/WzAtOV0rJCd9fVwiPjwvZm9ybS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX0gbS10LTVcIiAqbmdJZj1cInBhci50eXBlID09ICdib29sZWFuJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tY2hlY2tib3ggW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU2UgZW51bSBzaW5nbGUgc2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiAhcGFyLnNvdXJjZWFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tc2VsZWN0IFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIj48L2Zvcm0tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGkgc2VsZWN0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1tdWx0aXNlbGVjdCBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1VzZUpzb25MaXN0XT1cIk11bHRpc2VsZWN0TW9kZSA9PSAnSnNvbkFycmF5J1wiIFtVc2VDb21tYVNlcGFyYXRlZExpc3RdPVwiTXVsdGlzZWxlY3RNb2RlID09ICdDb21tYVNlcGFyYXRlZCdcIiBbU2VsZWN0TGFiZWxdPVwiKCdTZWxlemlvbmEnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJ1wiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTb3VyY2VdPVwicGFyLmVudW12YWx1ZXNcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TZSBlbnVtIG11bHRpc2VsZWN0IHNlbnphIHNvcmdlbnRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmICFwYXIuc291cmNlYXBpICYmICFwYXIuZW51bXZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0tYXV0b2NvbXBsZXRlIFtEaXNwbGF5TW9kZV09XCJEaXNwbGF5TW9kZVwiICBbRm9ybV09XCJGb3JtXCIgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbSGlkZUNob2ljZXNPblNlbGVjdGlvbl09XCJ0cnVlXCIgW1NlbGVjdExhYmVsXT1cIignU2VsZXppb25hJyB8IGxvY2FsaXplIDogbGMpICsgJy4uLidcIiBbKG5nTW9kZWwpXT1cInBhci52YWx1ZVwiIG5hbWU9XCJ7e2l0ZW0uaW5kZXh9fXBhcnt7aX19X3t7cGFyLmlkfX1cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHkgfHwgcGFyLmlzcmVhZG9ubHlcIiBbVW5ib3VuZE1vZGVdPVwidHJ1ZVwiIFtyZXF1aXJlZF09XCJwYXIucmVxdWlyZWRcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiICN2YWxpZGF0b3I+PC9mb3JtLWF1dG9jb21wbGV0ZT4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gYXV0b2NvbXBsZXRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiAhcGFyLm11bHRpZW51bSAmJiBwYXIuc291cmNlYXBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS1hdXRvY29tcGxldGUgW0Rpc3BsYXlNb2RlXT1cIkRpc3BsYXlNb2RlXCIgIFtGb3JtXT1cIkZvcm1cIiBbRm9ybUxheW91dF09XCJmYWxzZVwiIFsobmdNb2RlbCldPVwicGFyLnZhbHVlXCIgbmFtZT1cInt7aXRlbS5pbmRleH19cGFye3tpfX1fe3twYXIuaWR9fVwiIFtSZWFkb25seV09XCJSZWFkb25seSB8fCBwYXIuaXNyZWFkb25seVwiIFtTZWFyY2hGdW5jdGlvbl09XCJnZXRTb3VyY2UuYmluZCh0aGlzLCBwYXIpXCIgW3JlcXVpcmVkXT1cInBhci5yZXF1aXJlZFwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgI3ZhbGlkYXRvcj48L2Zvcm0tYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNlIGVudW0gbXVsdGlzZWxlY3QgYXV0b2NvbXBsZXRlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIiAqbmdJZj1cInBhci50eXBlID09ICdlbnVtJyAmJiBwYXIubXVsdGllbnVtICYmIHBhci5zb3VyY2VhcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtLWF1dG9jb21wbGV0ZSBbRGlzcGxheU1vZGVdPVwiRGlzcGxheU1vZGVcIiAgW0Zvcm1dPVwiRm9ybVwiIFtIaWRlQ2hvaWNlc09uU2VsZWN0aW9uXT1cIkF1dG9jb21wbGV0ZUhpZGVDaG9pY2VzT25TZWxlY3Rpb25cIiBbTXVsdGldPVwidHJ1ZVwiIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgWyhuZ01vZGVsKV09XCJwYXIudmFsdWVcIiBuYW1lPVwie3tpdGVtLmluZGV4fX1wYXJ7e2l9fV97e3Bhci5pZH19XCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5IHx8IHBhci5pc3JlYWRvbmx5XCIgW1NlYXJjaEZ1bmN0aW9uXT1cImdldFNvdXJjZS5iaW5kKHRoaXMsIHBhcilcIiBbcmVxdWlyZWRdPVwicGFyLnJlcXVpcmVkXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoKTtcIiAjdmFsaWRhdG9yPjwvZm9ybS1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBBbGxQYXJhbWV0ZXJzRW1wdHlcIiBjbGFzcz1cImNhcmQgY2FyZC1pbmZvIGFwcC1wYWRkaW5nLTEwIGFwcC1uby1tYXJnaW4gYXBwLXdoaXRlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIE5vbiAmZWdyYXZlOyBwcmVlbnRlIG51bGxhIGRhIHZpc3VhbGl6emFyZVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -103,6 +103,12 @@ class EsParametersComponent {
|
|
|
103
103
|
/** Indica come deve funzionare la multiselect */
|
|
104
104
|
this.MultiselectMode = 'CommaSeparated';
|
|
105
105
|
this.AllParametersEmpty = false;
|
|
106
|
+
this.Initialized = false;
|
|
107
|
+
}
|
|
108
|
+
ngOnInit() {
|
|
109
|
+
// Qui gli input dovrebbero essere settati. Alcuni form-roba non prendono bene i cambi di input
|
|
110
|
+
// Non sta funzionando come speravo... da rivedere
|
|
111
|
+
this.Initialized = true;
|
|
106
112
|
}
|
|
107
113
|
/**
|
|
108
114
|
* Pipeline di Angular
|
|
@@ -395,7 +401,7 @@ EsParametersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
395
401
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
396
402
|
multi: true
|
|
397
403
|
}
|
|
398
|
-
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <div class=\"row form-group\" *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <ng-container *ngIf=\"par.visible && (!DisplayMode || (!HideEmpty || (par.value)))\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </ng-container>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i5.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i5.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol", "OptionTemplate"] }, { kind: "component", type: i5.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues", "UseCommaSeparatedList", "UseJsonList"] }, { kind: "component", type: i5.FormAutocompleteComponent, selector: "form-autocomplete", inputs: ["SelectLabel", "SearchFunctionContext", "SearchFunction", "MinChars", "HideChoicesOnSelection", "RequiredPlaceholder", "CaseSensitive", "Multi", "MultiElementsThreshold", "UnboundMode"] }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
|
|
404
|
+
], ngImport: i0, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups && Initialized\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group && Initialized\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <ng-container *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\">\r\n <ng-container *ngIf=\"!DisplayMode || (!HideEmpty || (par.value))\">\r\n <div class=\"row form-group\" *ngIf=\"par.visible\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i5.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i5.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i5.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol", "OptionTemplate"] }, { kind: "component", type: i5.FormMultiSelectComponent, selector: "form-multiselect", inputs: ["SelectLabel", "UseKeyValues", "UseCommaSeparatedList", "UseJsonList"] }, { kind: "component", type: i5.FormAutocompleteComponent, selector: "form-autocomplete", inputs: ["SelectLabel", "SearchFunctionContext", "SearchFunction", "MinChars", "HideChoicesOnSelection", "RequiredPlaceholder", "CaseSensitive", "Multi", "MultiElementsThreshold", "UnboundMode"] }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
|
|
399
405
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsParametersComponent, decorators: [{
|
|
400
406
|
type: Component,
|
|
401
407
|
args: [{ selector: "es-parameters", providers: [
|
|
@@ -405,7 +411,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
405
411
|
useExisting: forwardRef(() => EsParametersComponent),
|
|
406
412
|
multi: true
|
|
407
413
|
}
|
|
408
|
-
], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <
|
|
414
|
+
], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"(!Parameters || Parameters.length == 0) && EmptyMessage\">\r\n <em>{{EmptyMessage}}</em>\r\n</div>\r\n\r\n<div *ngIf=\"Groups && Initialized\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: Groups, isSubgroup: false }}\"></ng-container>\r\n</div>\r\n\r\n<ng-template #Temp let-item=\"item\">\r\n <ng-container *ngFor=\"let group of item.groups; let k = index\">\r\n <div [class.pars-subgroup]=\"item.isSubgroup\" [class.pars-group]=\"!item.isSubgroup\">\r\n <ng-container *ngTemplateOutlet=\"GroupsOrSubgroupsDisplay; context: { item: { group: group, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: item.isSubgroup }}\"></ng-container>\r\n <ng-container *ngIf=\"group.subgroups.length > 0\">\r\n <ng-container *ngTemplateOutlet=\"Temp; context: {item: { groups: group.subgroups, index: k + (item.index ? ('_' + item.index) : ''), isSubgroup: true }};\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #GroupsOrSubgroupsDisplay let-item=\"item\">\r\n <div *ngIf=\"item.group && Initialized\">\r\n <div *ngIf=\"item.group.groupName\" [class.pars-group-title]=\"!item.isSubgroup\" [class.pars-subgroup-title]=\"item.isSubgroup\">\r\n {{item.group.groupName}}\r\n </div>\r\n <div *ngIf=\"item.group.parameters && item.group.parameters.length > 0\">\r\n <ng-container *ngFor=\"let par of item.group.parameters; let i= index; let last = last;\">\r\n <ng-container *ngIf=\"!DisplayMode || (!HideEmpty || (par.value))\">\r\n <div class=\"row form-group\" *ngIf=\"par.visible\" [class.app-margin-bottom-0]=\"LastParameterNoMargin && last\">\r\n <label class=\"col-md-{{LabelColWidth}} m-t-5\"><span *ngIf=\"Removal\" class=\"fa fa-remove text-danger\" (click)=\"removeParameter(par)\"> </span>{{par.description}}{{par.required ? '*' : ''}}:</label>\r\n <!--Se Data-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'date'\">\r\n <form-date [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'string'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-input>\r\n </div>\r\n <!--Se numero-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'number'\">\r\n <form-input [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator pattern=\"{{par.pattern || '^[+-]?[0-9]*[,]?[0-9]+$'}}\"></form-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"col-md-{{InputColWidth}} m-t-5\" *ngIf=\"par.type == 'boolean'\">\r\n <form-checkbox [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator></form-checkbox>\r\n </div>\r\n <!--Se enum single select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && !par.sourceapi\">\r\n <form-select [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [Readonly]=\"Readonly || par.isreadonly\" [required]=\"par.required\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" (inputChange)=\"changed();\" #validator [Source]=\"par.enumvalues\"></form-select>\r\n </div>\r\n <!--Se enum multi select-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi\">\r\n <form-multiselect [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [UseJsonList]=\"MultiselectMode == 'JsonArray'\" [UseCommaSeparatedList]=\"MultiselectMode == 'CommaSeparated'\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [Source]=\"par.enumvalues\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-multiselect>\r\n </div>\r\n <!--Se enum multiselect senza sorgente-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && !par.sourceapi && !par.enumvalues\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [HideChoicesOnSelection]=\"true\" [SelectLabel]=\"('Seleziona' | localize : lc) + '...'\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [UnboundMode]=\"true\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete> \r\n </div>\r\n <!--Se enum autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && !par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n <!--Se enum multiselect autocomplete-->\r\n <div class=\"col-md-{{InputColWidth}}\" *ngIf=\"par.type == 'enum' && par.multienum && par.sourceapi\">\r\n <form-autocomplete [DisplayMode]=\"DisplayMode\" [Form]=\"Form\" [HideChoicesOnSelection]=\"AutocompleteHideChoicesOnSelection\" [Multi]=\"true\" [FormLayout]=\"false\" [(ngModel)]=\"par.value\" name=\"{{item.index}}par{{i}}_{{par.id}}\" [Readonly]=\"Readonly || par.isreadonly\" [SearchFunction]=\"getSource.bind(this, par)\" [required]=\"par.required\" (inputChange)=\"changed();\" #validator></form-autocomplete>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <div *ngIf=\"DisplayMode && AllParametersEmpty\" class=\"card card-info app-padding-10 app-no-margin app-white-text\">\r\n Non è preente nulla da visualizzare\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".list-area{position:fixed}.pars-group-title{background:#ddd;margin-bottom:7px;padding:5px;text-transform:uppercase;font-weight:700;text-align:center;color:#333;font-size:13px}.pars-subgroup-title{font-weight:700;color:#333;font-size:16px}.pars-group{margin-left:0}.pars-subgroup{margin-left:15px}\n"] }]
|
|
409
415
|
}], ctorParameters: function () { return [{ type: i1.UtilityService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.DateService }]; }, propDecorators: { DisplayMode: [{
|
|
410
416
|
type: Input
|
|
411
417
|
}], HideEmpty: [{
|