@eqproject/eqp-dynamic-module 2.10.4 → 2.10.5

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.
@@ -21,6 +21,7 @@ export class ListFormRecordComponent {
21
21
  this.form = null; // boh ma c'era prima
22
22
  this.externalButtons = new Array();
23
23
  this.actionButtons = new Array();
24
+ this.contestualizationParams = null;
24
25
  this.defaultListActions = new DynamicModuleListFormRecordActionsDefault();
25
26
  this.showTitle = true;
26
27
  this.columns = new Array();
@@ -129,7 +130,21 @@ export class ListFormRecordComponent {
129
130
  tmpRec.Version = r.Version;
130
131
  tmpRec.userID = r.userID;
131
132
  tmpRec.AnswerDate = r.AnswerDate;
132
- this.configurations.values.push(tmpRec);
133
+ var foundkey = true;
134
+ if (this.contestualizationParams != null) {
135
+ if (r.AdditionalParams != null && r.AdditionalParams != "") {
136
+ var adp = JSON.parse(r.AdditionalParams);
137
+ Object.keys(this.contestualizationParams).forEach((key) => {
138
+ if (adp == null || !adp.hasOwnProperty(key) || this.contestualizationParams[key].indexOf(adp[key]) == -1) {
139
+ foundkey = false;
140
+ }
141
+ });
142
+ }
143
+ }
144
+ // Se la contestualizzazione è presente e il record è eleggibile, o se non c'è contestualizzazione, aggiunti il record
145
+ if (foundkey) {
146
+ this.configurations.values.push(tmpRec);
147
+ }
133
148
  });
134
149
  this.createAdditionalActions();
135
150
  this.createColumnsFromFormFields();
@@ -395,7 +410,7 @@ export class ListFormRecordComponent {
395
410
  }
396
411
  }
397
412
  ListFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
398
- ListFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListFormRecordComponent, selector: "list-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", formID: "formID", form: "form", externalButtons: "externalButtons", actionButtons: "actionButtons" }, outputs: { onViewRecord: "onViewRecord", onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onAfterDeleteRecord: "onAfterDeleteRecord" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i3.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.EqpTableComponent, selector: "eqp-table" }] });
413
+ ListFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListFormRecordComponent, selector: "list-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", formID: "formID", form: "form", externalButtons: "externalButtons", actionButtons: "actionButtons", contestualizationParams: "contestualizationParams" }, outputs: { onViewRecord: "onViewRecord", onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onAfterDeleteRecord: "onAfterDeleteRecord" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i3.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.EqpTableComponent, selector: "eqp-table" }] });
399
414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListFormRecordComponent, decorators: [{
400
415
  type: Component,
401
416
  args: [{ selector: "list-form-record", template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"] }]
@@ -411,6 +426,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
411
426
  type: Input
412
427
  }], actionButtons: [{
413
428
  type: Input
429
+ }], contestualizationParams: [{
430
+ type: Input
414
431
  }], tableRecords: [{
415
432
  type: ViewChild,
416
433
  args: ["tableRecords", { static: true }]
@@ -423,4 +440,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
423
440
  }], onAfterDeleteRecord: [{
424
441
  type: Output
425
442
  }] } });
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLHVCQUF1QjtJQTBCbEMsWUFDVSxvQkFBMEMsRUFDMUMs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QU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNLLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxRQUFpQjtRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxNQUFjO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDOztxSEFoY1UsdUJBQXVCO3lHQUF2Qix1QkFBdUIsZ2pCQzVDcEMsa3pEQTBDcUU7NEZERXhELHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7MklBTW5CLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU11QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS2pDLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBEYXRlRmllbGQsXHJcbiAgRGF0ZVRpbWVUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpc3QtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG5cclxuICAvLyBsJ3VuYSBvIGwnYWx0cmEgcGVyIGR1ZSBtb2RhbGl0w6AgZCd1c29cclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gYm9oIG1hIGMnZXJhIHByaW1hXHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25WaWV3UmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFkZFZpZXdFZGl0UmVjb3JkOiBFdmVudEVtaXR0ZXI8e3JlY29yZDogUmVjb3JkO29ubHlWaWV3OiBib29sZWFuO30+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG4gICAgXHJcbiAgQE91dHB1dCgpIG9uRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgICBcclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgLy8gdGhpcy52YWx1ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlc1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIG5nT25Jbml0IC0gY29uZmlndXJhdGlvbnMnLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY2hhbmdlcycsIGNoYW5nZXMpO1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddLmN1cnJlbnRWYWx1ZTtcclxuICAgIC8vICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGdldEZvcm1CeUlEJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge31cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgdHJ5e1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsIHx8IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IFwiMFwiKXsgICAgICAgICAgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gc2Vnbm8gYW5jaGUgbCdJRCBkZWxsJ3V0ZW50ZSBjaGUgcmlzcG9uZGVcclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJJRFwiLFxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcIlV0ZW50ZVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQW5zd2Vyc0FuZENyZWF0ZUNvbHVtbnMocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgeyAgICAgICAgICBcclxuICAgICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQW5zd2Vyc0FuZENyZWF0ZUNvbHVtbnMocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2goZSl7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBwcmVuZGUgbGEgbGlzdGEgZGkgcmlzcG9zdGUgZGkgdW4gbW9kdWxvIGUgcHJlcGFyYSBzaWEgaSBkYXRpIGNoZSBsZSBjb2xvbm5lIGRhIG1vc3RyYXJlXHJcbiAgICogQHBhcmFtIHJlcyA6IGxpc3RhIGRpIHJpc3Bvc3RlIGRpIHVuIG1vZHVsb1xyXG4gICAqL1xyXG4gIGxvYWRBbnN3ZXJzQW5kQ3JlYXRlQ29sdW1ucyhyZXM6IEFycmF5PER5blJlY29yZD4pe1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgXHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgIH0pO1xyXG4gICAgXHJcblxyXG4gICAgdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxufVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJpbmZvXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld1JlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld09yRWRpdFJlY29yZChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlID09IHRydWUpIHtcclxuICAgICAgLyp0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkR1cGxpY2FcIixcclxuICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pOyovXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZVJlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmV4dGVybmFsQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgbmFtZTogYnV0dG9uLnRleHQsXHJcbiAgICAgICAgaWNvbjogYnV0dG9uLmljb24sXHJcbiAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiBidXR0b24uZm4oKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpdW5nZXJlIG5lbGxhIGNvbG9ubmEgXCJhY3Rpb25cIiBkZWxsYSBlcXAtdGFibGUgbGUgYXppb25pIHN1aSByZWNvcmRcclxuICAgKiBkZWZpbml0ZSBkYWxsJ3V0ZW50ZSBhbGwnaW50ZXJubyBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkICYmIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gLTFcclxuICAgICAgICAgIDogMFxyXG4gICAgICApLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGFjdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICBpY29uOiBhY3Rpb24uSWNvbixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICBjb25zdCBjdHggPSBVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0O1xyXG4gICAgICAgICAgICAgIGV2YWwoYWN0aW9uLkFjdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETzogc2FsdmFyZSBsZSBtb2RpZmljaGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAgKiBJbmRpdmlkdWEgaSBCYXNlRmllbGQgZGEgbW9zdHJhcmUgZSBsaSB1c2EgcGVyIGNyZWFyZSBsZSBDb25maWdDb2x1bW4uXHJcbiAgICogTGUgY29sb25uZSB2ZW5nb25vIGNyZWF0ZSBwZXIgaSBCYXNlRmllbGQgY29uIGlsIGZsYWcgSW5MaXN0VmlldyBhIFRSVUVcclxuICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAgKiBzZWxlemlvbmEgaSBwcmltaSA2LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcycsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkluTGlzdFZpZXcpKSB7XHJcbiAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5Jbkxpc3RWaWV3KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5PcmRpbmFsUG9zaXRpb24gPCA2KTtcclxuICAgIH1cclxuICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gLTFcclxuICAgICAgICAgIDogMFxyXG4gICAgICApXHJcbiAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiY29sb25uZVwiLCB0aGlzLmNvbHVtbnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9ICgpID0+IFwiQWxsZWdhdG9cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKCkgPT4gXCJJbW1hZ2luZVwiO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uICYmXHJcbiAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVxyXG4gICAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLkZpbGVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilbMF0uRmlsZU5hbWVcclxuICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAgICAgKi9cclxuICAgICBcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICghKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKXtcclxuICAgICAgICAgICAgaWYoIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmcpeyBcclxuICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihmaWVsZC5Gb3JtdWxhKXtcclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShmaWVsZC5Gb3JtdWxhLCBlbGVtZW50LCBcInRoaXMuZm9ybXVsYU9iamVjdFwiKTtcclxuICAgICAgICAgICAgICAvLyB0ZW1wIGRvdnJlYmJlIGVzc2VyZSB1bmEgc3RyaW5nYSBkZWwgdGlwbyBcImNoaWF2ZTEhIHZhbG9yZSAxIDsgY2hpYXZlMiB8IHZhbG9yZSAyIFwiXHJcbiAgICAgICAgICAgICAgLy8gZG9iYmlhbW8gb3R0ZW5lcmUgdW4gZGl6aW9uYXJpbyBkaSBxdWVpIHZhbG9yaVxyXG4gICAgICAgICAgICAgIC8vIGRldm8gY29udHJvbGxhcmUgc2UgY2kgc29ubyBjYW1iaWFtZW50aSBuZWwgdmFsdWVwYWlycyBlIHJlc2V0dGFyZSBzb2xhbWVudGUgaW4gcXVlbCBjYXNvXHJcbiAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnModGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGVsZW1lbnRbZmllbGQuTmFtZV0gKXtcclxuICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKCAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpe1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba11cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoaykgPT5cclxuICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoKSA9PiBcIkxvb2t1cFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIC8vIGNvbHVtbi52YWx1ZSA9ICgpID0+IEZpZWxkVHlwZUVudW1bZmllbGQuRmllbGRUeXBlXTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgdmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCl7XHJcbiAgICB0aGlzLm9uVmlld1JlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cImxvYWRlciAmJiBzaG93VGl0bGVcIj5FbGVuY28ge3sgZm9ybS5OYW1lIH19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwhLS0gPG1hdC1jYXJkLXN1YnRpdGxlPlN0YXJ0PC9tYXQtY2FyZC1zdWJ0aXRsZT4gLS0+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8IS0tIDxidXR0b24gbWF0LWJ1dHRvbj5MSUtFPC9idXR0b24+IC0tPlxyXG4gICAgICA8IS0tIDxidXR0b24gbWF0LWJ1dHRvbj5TSEFSRTwvYnV0dG9uPiAtLT5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZXFwLXRhYmxlIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJsb2FkZXIgJiYgY29uZmlndXJhdGlvbnMudmFsdWVzXCJcclxuICAgICAgW2RhdGFdPVwiY29uZmlndXJhdGlvbnMudmFsdWVzXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiPjwvZXFwLXRhYmxlPlxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gICAgPCEtLSA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj4gLS0+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG5cclxuXHJcbjwhLS0gPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgbGlzdC1mb3JtLXJlY29yZC1oZWFkZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgIDxoNCAqbmdJZj1cInNob3dUaXRsZVwiPlxyXG4gICAgICA8Yj5FbGVuY28ge3sgZm9ybS5OYW1lIH19PC9iPlxyXG4gICAgPC9oND5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGV4dC1yaWdodFwiICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwib25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KG51bGwpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZXFwLXRhYmxlIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJsb2FkZXIgJiYgY29uZmlndXJhdGlvbnMudmFsdWVzXCJcclxuICBbZGF0YV09XCJjb25maWd1cmF0aW9ucy52YWx1ZXNcIiBbY29sdW1uc109XCJjb2x1bW5zXCI+PC9lcXAtdGFibGU+IC0tPiJdfQ==
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7QUFTcEUsTUFBTSxPQUFPLHVCQUF1QjtJQTJCbEMsWUFDVSxvQkFBMEMsRUFDMUMs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WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7O3FIQXJkVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixvbUJDNUNwQyxrekRBMENxRTs0RkRFeEQsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjsySUFNbkIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQU11QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS2pDLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBEYXRlRmllbGQsXHJcbiAgRGF0ZVRpbWVUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpc3QtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG5cclxuICAvLyBsJ3VuYSBvIGwnYWx0cmEgcGVyIGR1ZSBtb2RhbGl0w6AgZCd1c29cclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gYm9oIG1hIGMnZXJhIHByaW1hXHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvblBhcmFtczogYW55ID0gbnVsbDtcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25WaWV3UmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFkZFZpZXdFZGl0UmVjb3JkOiBFdmVudEVtaXR0ZXI8e3JlY29yZDogUmVjb3JkO29ubHlWaWV3OiBib29sZWFuO30+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG4gICAgXHJcbiAgQE91dHB1dCgpIG9uRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgICBcclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgLy8gdGhpcy52YWx1ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlc1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIG5nT25Jbml0IC0gY29uZmlndXJhdGlvbnMnLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY2hhbmdlcycsIGNoYW5nZXMpO1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddLmN1cnJlbnRWYWx1ZTtcclxuICAgIC8vICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGdldEZvcm1CeUlEJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge31cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgdHJ5e1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsIHx8IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IFwiMFwiKXsgICAgICAgICAgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gc2Vnbm8gYW5jaGUgbCdJRCBkZWxsJ3V0ZW50ZSBjaGUgcmlzcG9uZGVcclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJJRFwiLFxyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcIlV0ZW50ZVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQW5zd2Vyc0FuZENyZWF0ZUNvbHVtbnMocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgeyAgICAgICAgICBcclxuICAgICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQW5zd2Vyc0FuZENyZWF0ZUNvbHVtbnMocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2goZSl7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBwcmVuZGUgbGEgbGlzdGEgZGkgcmlzcG9zdGUgZGkgdW4gbW9kdWxvIGUgcHJlcGFyYSBzaWEgaSBkYXRpIGNoZSBsZSBjb2xvbm5lIGRhIG1vc3RyYXJlXHJcbiAgICogQHBhcmFtIHJlcyA6IGxpc3RhIGRpIHJpc3Bvc3RlIGRpIHVuIG1vZHVsb1xyXG4gICAqL1xyXG4gIGxvYWRBbnN3ZXJzQW5kQ3JlYXRlQ29sdW1ucyhyZXM6IEFycmF5PER5blJlY29yZD4pe1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG5cclxuICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHIuQW5zd2VyRGF0ZTtcclxuXHJcbiAgICAgIHZhciBmb3VuZGtleSA9IHRydWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXN0dWFsaXphdGlvblBhcmFtcyAhPSBudWxsKXtcclxuICAgICAgICBpZiAoci5BZGRpdGlvbmFsUGFyYW1zICE9IG51bGwgJiYgci5BZGRpdGlvbmFsUGFyYW1zICE9IFwiXCIpe1xyXG4gICAgICAgICAgdmFyIGFkcCA9IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsUGFyYW1zKTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29udGVzdHVhbGl6YXRpb25QYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWRwID09IG51bGwgfHwgIWFkcC5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IHRoaXMuY29udGVzdHVhbGl6YXRpb25QYXJhbXNba2V5XS5pbmRleE9mKGFkcFtrZXldKSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgZm91bmRrZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTZSBsYSBjb250ZXN0dWFsaXp6YXppb25lIMOoIHByZXNlbnRlIGUgaWwgcmVjb3JkIMOoIGVsZWdnaWJpbGUsIG8gc2Ugbm9uIGMnw6ggY29udGVzdHVhbGl6emF6aW9uZSwgYWdnaXVudGkgaWwgcmVjb3JkXHJcbiAgICAgIGlmIChmb3VuZGtleSl7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIFxyXG5cclxuICAgIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbn1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiYWN0aW9uXCIsXHJcbiAgICAgICAgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sXHJcbiAgICAgICAgYnV0dG9uTWVudUljb246IFwibW9yZV92ZXJ0XCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIlZpc3VhbGl6emFcIixcclxuICAgICAgICAgIGljb246IFwiaW5mb1wiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLnZpZXdSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLnZpZXdPckVkaXRSZWNvcmQoZWxlbWVudCwgZmFsc2UpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIC8qdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgICBpY29uOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmR1cGxpY2F0ZVJlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTsqL1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiRWxpbWluYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kZWxldGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5leHRlcm5hbEJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIG5hbWU6IGJ1dHRvbi50ZXh0LFxyXG4gICAgICAgIGljb246IGJ1dHRvbi5pY29uLFxyXG4gICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gYnV0dG9uLmZuKCksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaXVuZ2VyZSBuZWxsYSBjb2xvbm5hIFwiYWN0aW9uXCIgZGVsbGEgZXFwLXRhYmxlIGxlIGF6aW9uaSBzdWkgcmVjb3JkXHJcbiAgICogZGVmaW5pdGUgZGFsbCd1dGVudGUgYWxsJ2ludGVybm8gZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJiB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICA6IDBcclxuICAgICAgKS5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBhY3Rpb24uTmFtZSxcclxuICAgICAgICAgICAgaWNvbjogYWN0aW9uLkljb24sXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlYyA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3R4ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dDtcclxuICAgICAgICAgICAgICBldmFsKGFjdGlvbi5BY3Rpb24pO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE86IHNhbHZhcmUgbGUgbW9kaWZpY2hlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuSW5MaXN0Vmlldyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgICB9XHJcbiAgICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICA6IDBcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmxvZyhcImNvbG9ubmVcIiwgdGhpcy5jb2x1bW5zKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbCdvZ2dldHRvIENvbmZpZ3VyZUNvbHVtbiBjaGUgcmFwcHJlc2VudGEgaWwgQmFzZUZpZWxkIHBhc3NhdG8gaW4gaW5wdXQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBsYSBjb2xvbm5hIG5lbGxhIGVxcC10YWJsZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIGVxcC10YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRDb2x1bW4oZmllbGQ6IEJhc2VGaWVsZCk6IENvbmZpZ0NvbHVtbiB7XHJcbiAgICB2YXIgY29sdW1uOiBDb25maWdDb2x1bW4gPSB7IGtleTogZmllbGQuTmFtZSwgZGlzcGxheTogZmllbGQuTGFiZWwgfTtcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5Cb29sZWFuO1xyXG4gICAgICAgIGNvbHVtbi5ib29sZWFuVmFsdWVzID0ge1xyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uc3R5bGVzID0ge1xyXG4gICAgICAgICAgZmxleDogXCIwIDAgNyVcIixcclxuICAgICAgICAgIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSAhPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5EYXRlO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJEYXRhIGUgb3JhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IFwiZGQvTU0veXl5eSBISDptbVwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXRcclxuICAgICAgICAgICAgICA/IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIilcclxuICAgICAgICAgICAgICA6IFwiZGQvTU0veXl5eVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuQ1VSUkVOQ1k7XHJcbiAgICAgICAgICBjb2x1bW4uY3VycmVuY3lQaXBlQ29kZSA9IChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIShmaWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcikge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkRFQ0lNQUw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoKSA9PiBcIkFsbGVnYXRvXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9ICgpID0+IFwiSW1tYWdpbmVcIjtcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiAmJlxyXG4gICAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2gpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilcclxuICAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS5GaWxlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pWzBdLkZpbGVOYW1lXHJcbiAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgICAgICovXHJcbiAgICAgXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIShmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyl7XHJcbiAgICAgICAgICAgIGlmKCAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nKXsgXHJcbiAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZmllbGQuRm9ybXVsYSl7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcDogc3RyaW5nID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoZmllbGQuRm9ybXVsYSwgZWxlbWVudCwgXCJ0aGlzLmZvcm11bGFPYmplY3RcIik7XHJcbiAgICAgICAgICAgICAgLy8gdGVtcCBkb3ZyZWJiZSBlc3NlcmUgdW5hIHN0cmluZ2EgZGVsIHRpcG8gXCJjaGlhdmUxISB2YWxvcmUgMSA7IGNoaWF2ZTIgfCB2YWxvcmUgMiBcIlxyXG4gICAgICAgICAgICAgIC8vIGRvYmJpYW1vIG90dGVuZXJlIHVuIGRpemlvbmFyaW8gZGkgcXVlaSB2YWxvcmlcclxuICAgICAgICAgICAgICAvLyBkZXZvIGNvbnRyb2xsYXJlIHNlIGNpIHNvbm8gY2FtYmlhbWVudGkgbmVsIHZhbHVlcGFpcnMgZSByZXNldHRhcmUgc29sYW1lbnRlIGluIHF1ZWwgY2Fzb1xyXG4gICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihlbGVtZW50W2ZpZWxkLk5hbWVdICl7XHJcbiAgICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFlbGVtZW50W2ZpZWxkLk5hbWVdIHx8IGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiggKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKXtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtmaWVsZC5OYW1lXS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKCkgPT4gXCJMb29rdXBcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyBjb2x1bW4udmFsdWUgPSAoKSA9PiBGaWVsZFR5cGVFbnVtW2ZpZWxkLkZpZWxkVHlwZV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcblxyXG4gIHZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpe1xyXG4gICAgdGhpcy5vblZpZXdSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJsb2FkZXIgJiYgc2hvd1RpdGxlXCI+RWxlbmNvIHt7IGZvcm0uTmFtZSB9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8IS0tIDxtYXQtY2FyZC1zdWJ0aXRsZT5TdGFydDwvbWF0LWNhcmQtc3VidGl0bGU+IC0tPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KG51bGwpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPCEtLSA8YnV0dG9uIG1hdC1idXR0b24+TElLRTwvYnV0dG9uPiAtLT5cclxuICAgICAgPCEtLSA8YnV0dG9uIG1hdC1idXR0b24+U0hBUkU8L2J1dHRvbj4gLS0+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPGVxcC10YWJsZSBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmQtdGFibGVcIiAjdGFibGVSZWNvcmRzICpuZ0lmPVwibG9hZGVyICYmIGNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiXHJcbiAgICAgIFtkYXRhXT1cImNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIj48L2VxcC10YWJsZT5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICAgIDwhLS0gPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuXHJcblxyXG48IS0tIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGxpc3QtZm9ybS1yZWNvcmQtaGVhZGVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICA8aDQgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgPGI+RWxlbmNvIHt7IGZvcm0uTmFtZSB9fTwvYj5cclxuICAgIDwvaDQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHRleHQtcmlnaHRcIiAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdChudWxsKVwiPlxyXG4gICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGVxcC10YWJsZSBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmQtdGFibGVcIiAjdGFibGVSZWNvcmRzICpuZ0lmPVwibG9hZGVyICYmIGNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiXHJcbiAgW2RhdGFdPVwiY29uZmlndXJhdGlvbnMudmFsdWVzXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiPjwvZXFwLXRhYmxlPiAtLT4iXX0=
@@ -1482,6 +1482,7 @@ class ListFormRecordComponent {
1482
1482
  this.form = null; // boh ma c'era prima
1483
1483
  this.externalButtons = new Array();
1484
1484
  this.actionButtons = new Array();
1485
+ this.contestualizationParams = null;
1485
1486
  this.defaultListActions = new DynamicModuleListFormRecordActionsDefault();
1486
1487
  this.showTitle = true;
1487
1488
  this.columns = new Array();
@@ -1594,7 +1595,21 @@ class ListFormRecordComponent {
1594
1595
  tmpRec.Version = r.Version;
1595
1596
  tmpRec.userID = r.userID;
1596
1597
  tmpRec.AnswerDate = r.AnswerDate;
1597
- this.configurations.values.push(tmpRec);
1598
+ var foundkey = true;
1599
+ if (this.contestualizationParams != null) {
1600
+ if (r.AdditionalParams != null && r.AdditionalParams != "") {
1601
+ var adp = JSON.parse(r.AdditionalParams);
1602
+ Object.keys(this.contestualizationParams).forEach((key) => {
1603
+ if (adp == null || !adp.hasOwnProperty(key) || this.contestualizationParams[key].indexOf(adp[key]) == -1) {
1604
+ foundkey = false;
1605
+ }
1606
+ });
1607
+ }
1608
+ }
1609
+ // Se la contestualizzazione è presente e il record è eleggibile, o se non c'è contestualizzazione, aggiunti il record
1610
+ if (foundkey) {
1611
+ this.configurations.values.push(tmpRec);
1612
+ }
1598
1613
  });
1599
1614
  this.createAdditionalActions();
1600
1615
  this.createColumnsFromFormFields();
@@ -1860,7 +1875,7 @@ class ListFormRecordComponent {
1860
1875
  }
1861
1876
  }
1862
1877
  ListFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListFormRecordComponent, deps: [{ token: UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1863
- ListFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListFormRecordComponent, selector: "list-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", formID: "formID", form: "form", externalButtons: "externalButtons", actionButtons: "actionButtons" }, outputs: { onViewRecord: "onViewRecord", onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onAfterDeleteRecord: "onAfterDeleteRecord" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$1.EqpTableComponent, selector: "eqp-table" }] });
1878
+ ListFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListFormRecordComponent, selector: "list-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", formID: "formID", form: "form", externalButtons: "externalButtons", actionButtons: "actionButtons", contestualizationParams: "contestualizationParams" }, outputs: { onViewRecord: "onViewRecord", onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onAfterDeleteRecord: "onAfterDeleteRecord" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$1.EqpTableComponent, selector: "eqp-table" }] });
1864
1879
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListFormRecordComponent, decorators: [{
1865
1880
  type: Component,
1866
1881
  args: [{ selector: "list-form-record", template: "<mat-card class=\"list-form-record\">\r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n <mat-card-actions>\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n <!-- <button mat-button>LIKE</button> -->\r\n <!-- <button mat-button>SHARE</button> -->\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table>\r\n </mat-card-content>\r\n <mat-card-footer>\r\n <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n <div class=\"col-md-6\">\r\n <h4 *ngIf=\"showTitle\">\r\n <b>Elenco {{ form.Name }}</b>\r\n </h4>\r\n </div>\r\n <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n (click)=\"onAddViewEditRecord.emit(null)\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}\n"] }]
@@ -1876,6 +1891,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1876
1891
  type: Input
1877
1892
  }], actionButtons: [{
1878
1893
  type: Input
1894
+ }], contestualizationParams: [{
1895
+ type: Input
1879
1896
  }], tableRecords: [{
1880
1897
  type: ViewChild,
1881
1898
  args: ["tableRecords", { static: true }]
@@ -6231,7 +6248,7 @@ class DynamicModuleFieldFixComponent {
6231
6248
  }
6232
6249
  }
6233
6250
  DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1$3.MatDialog }, { token: UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
6234
- DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger"] }, { kind: "component", type: ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
6251
+ DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger"] }, { kind: "component", type: ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
6235
6252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
6236
6253
  type: Component,
6237
6254
  args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
@@ -10216,6 +10233,7 @@ class EqpDynamicModuleComponent {
10216
10233
  this.additionalInfo = null;
10217
10234
  this.updateInfo = null;
10218
10235
  this.prefilterParams = null;
10236
+ this.contestualizationParams = null; // Contestualizzazione della lista delle risposte
10219
10237
  this.showNewSearchButton = true;
10220
10238
  this.selectedRecord = null;
10221
10239
  this.isDraggableListView = true;
@@ -10615,10 +10633,10 @@ class EqpDynamicModuleComponent {
10615
10633
  }
10616
10634
  }
10617
10635
  EqpDynamicModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EqpDynamicModuleComponent, deps: [{ token: UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
10618
- EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", orgaID: "orgaID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", formulaObject: "formulaObject", externalButtons: "externalButtons", actionButtons: "actionButtons", listViewRecordTitle: "listViewRecordTitle", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", additionalInfo: "additionalInfo", updateInfo: "updateInfo", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter", selectedRecord: "selectedRecord", isDraggableListView: "isDraggableListView", Statistic: "Statistic", numberOfColumns: "numberOfColumns", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", dragStarted: "dragStarted", dragReleased: "dragReleased", clickDragIndicator: "clickDragIndicator", out: "out", fireTrigger: "fireTrigger", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "listViewFormRecord", first: true, predicate: ["listViewFormRecord"], descendants: true }], ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n [numberOfColumns]=\"numberOfColumns\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }, { kind: "component", type: SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["configurations", "formID", "endPointConfiguration"], outputs: ["onSaveJson"] }, { kind: "component", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["configurations", "endPointConfiguration", "userID", "externalButtons", "actionButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode", "Statistic", "numberOfColumns"], outputs: ["fireTrigger", "saveRecordEvent", "afterSaveRecordEvent", "afterFilter", "afterOutputExternalFilters"] }, { kind: "component", type: GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
10636
+ EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", orgaID: "orgaID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", formulaObject: "formulaObject", externalButtons: "externalButtons", actionButtons: "actionButtons", listViewRecordTitle: "listViewRecordTitle", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", additionalInfo: "additionalInfo", updateInfo: "updateInfo", prefilterParams: "prefilterParams", contestualizationParams: "contestualizationParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter", selectedRecord: "selectedRecord", isDraggableListView: "isDraggableListView", Statistic: "Statistic", numberOfColumns: "numberOfColumns", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", dragStarted: "dragStarted", dragReleased: "dragReleased", clickDragIndicator: "clickDragIndicator", out: "out", fireTrigger: "fireTrigger", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "listViewFormRecord", first: true, predicate: ["listViewFormRecord"], descendants: true }], ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n [numberOfColumns]=\"numberOfColumns\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [contestualizationParams]=\"contestualizationParams\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }, { kind: "component", type: SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["configurations", "formID", "endPointConfiguration"], outputs: ["onSaveJson"] }, { kind: "component", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["configurations", "endPointConfiguration", "userID", "externalButtons", "actionButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode", "Statistic", "numberOfColumns"], outputs: ["fireTrigger", "saveRecordEvent", "afterSaveRecordEvent", "afterFilter", "afterOutputExternalFilters"] }, { kind: "component", type: GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
10619
10637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EqpDynamicModuleComponent, decorators: [{
10620
10638
  type: Component,
10621
- args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n [numberOfColumns]=\"numberOfColumns\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
10639
+ args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord\"\r\n [actionButtons]=\"actionButtons\"\r\n (goBackEvent)=\"onGoBack()\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n [userID]=\"userID\"\r\n [Statistic]=\"Statistic\"\r\n [numberOfColumns]=\"numberOfColumns\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n [showTitle]=\"showTitle\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n\r\n [actionButtons]=\"actionButtons\"\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [contestualizationParams]=\"contestualizationParams\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [formID]=\"formID\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n #listViewFormRecord\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n \r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n \r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [orgaID]=\"orgaID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [actionButtons]=\"actionButtons\"\r\n \r\n [highlightFilter]=\"highlightFilter\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (dragReleased)=\"onDragReleased()\"\r\n (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
10622
10640
  }], ctorParameters: function () { return [{ type: UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debugMode: [{
10623
10641
  type: Input
10624
10642
  }], configurations: [{
@@ -10667,6 +10685,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
10667
10685
  type: Input
10668
10686
  }], prefilterParams: [{
10669
10687
  type: Input
10688
+ }], contestualizationParams: [{
10689
+ type: Input
10670
10690
  }], showNewSearchButton: [{
10671
10691
  type: Input
10672
10692
  }], answerToDuplicateId: [{