@eqproject/eqp-dynamic-module 2.3.18 → 2.3.19

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.
Files changed (22) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +5 -3
  2. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +7 -7
  3. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +25 -5
  4. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +23 -15
  5. package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +4 -3
  6. package/esm2020/lib/components/private/graphs/graphs.component.mjs +166 -0
  7. package/esm2020/lib/eqp-dynamic-module.module.mjs +6 -3
  8. package/esm2020/lib/models/dynamicModuleListFormRecordActionsDefault.mjs +3 -2
  9. package/esm2020/lib/models/dynamicModuleViewModeEnum.mjs +2 -1
  10. package/esm2020/lib/models/graph.model.mjs +15 -0
  11. package/fesm2015/eqproject-eqp-dynamic-module.mjs +261 -58
  12. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  13. package/fesm2020/eqproject-eqp-dynamic-module.mjs +259 -58
  14. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  15. package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +1 -0
  16. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +4 -1
  17. package/lib/components/private/graphs/graphs.component.d.ts +46 -0
  18. package/lib/eqp-dynamic-module.module.d.ts +11 -10
  19. package/lib/models/dynamicModuleListFormRecordActionsDefault.d.ts +2 -1
  20. package/lib/models/dynamicModuleViewModeEnum.d.ts +2 -1
  21. package/lib/models/graph.model.d.ts +15 -0
  22. package/package.json +1 -1
@@ -20,6 +20,7 @@ import * as i6 from "../../private/form-records/view-form-record/view-form-recor
20
20
  import * as i7 from "../../private/spinner/spinner.component";
21
21
  import * as i8 from "../../private/form-records/repair-form-fields/repair-form-fields.component";
22
22
  import * as i9 from "../../private/form-statistics/filter-form-statistic/filter-form-statistic.component";
23
+ import * as i10 from "../../private/graphs/graphs.component";
23
24
  export class EqpDynamicModuleComponent {
24
25
  debugLog(message, element) {
25
26
  if (this.debugMode) {
@@ -106,6 +107,7 @@ export class EqpDynamicModuleComponent {
106
107
  // await this.getFormByID();
107
108
  }
108
109
  // this.viewMode = this.starterViewMode;
110
+ this.debugLog("dynamicModuleCompileConfig", this.dynamicModuleCompileConfig);
109
111
  this.loader = true;
110
112
  }
111
113
  ngAfterViewInit() {
@@ -371,10 +373,10 @@ export class EqpDynamicModuleComponent {
371
373
  }
372
374
  }
373
375
  EqpDynamicModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EqpDynamicModuleComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
374
- EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", externalButtons: "externalButtons", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord" }, 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 [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\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 [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($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 [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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 [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\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</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records", "highlightFilter"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i5.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView", "isDuplicate", "additionalParams"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i6.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }, { kind: "component", type: i7.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i8.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["debugMode", "configurations"], outputs: ["onSaveJson"] }, { kind: "component", type: i9.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "externalButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "afterFilter"] }] });
376
+ EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", externalButtons: "externalButtons", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId", highlightFilter: "highlightFilter" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord" }, 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 [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\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[debugMode]=\"debugMode\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\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 [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($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 [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n [additionalParams]=\"dynamicModuleCompileConfig.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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 [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\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</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records", "highlightFilter"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i5.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView", "isDuplicate", "additionalParams"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i6.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }, { kind: "component", type: i7.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i8.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["debugMode", "configurations"], outputs: ["onSaveJson"] }, { kind: "component", type: i9.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "externalButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "afterFilter"] }, { kind: "component", type: i10.GraphsComponent, selector: "graphs", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form"] }] });
375
377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EqpDynamicModuleComponent, decorators: [{
376
378
  type: Component,
377
- 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 [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\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 [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($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 [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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 [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\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</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
379
+ 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 [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\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[debugMode]=\"debugMode\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\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 [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($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 [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n [additionalParams]=\"dynamicModuleCompileConfig.additionalParams\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($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 [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\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</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [highlightFilter]=\"highlightFilter\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
378
380
  }], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debugMode: [{
379
381
  type: Input
380
382
  }], configurations: [{
@@ -430,4 +432,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
430
432
  }], afterDeleteRecord: [{
431
433
  type: Output
432
434
  }] } });
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FB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Q0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlVmlld01vZGVFbnVtXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0sIEZvcm1UeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEZpbHRlclJlc3VsdFR5cGUgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtZmlsdGVyc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBcclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGVsZW1lbnQ/OiBhbnkpe1xyXG4gICAgaWYodGhpcy5kZWJ1Z01vZGUpe1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWc7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXJ0ZXJWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuXHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmcgPSBcIjBcIjtcclxuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBBcnJheTxSZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBGb3JtSlNPTiA9IFwiXCI7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbjogRnVuY3Rpb24gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBASW5wdXQoKSBvblNhdmVCYWNrVG9MaXN0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb25CYWNrVG86IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbHRlclJlc3VsdFZpZXdNb2RlOiBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5JTlRFUk5BTF9FUVBUQUJMRTtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsUGFyYW1zOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWZpbHRlclBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBzaG93TmV3U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbnN3ZXJUb0R1cGxpY2F0ZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnk7XHJcblxyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG5cclxuICAvL0BJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIC8vIGRlZmF1bHRMaXN0QWN0aW9uczogZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICAvLyBGb3JtSlNPTjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBxdWFuZG8gc2kgc2FsdmEsIGVsaW1pbmEgbyBkdXBsaWNhIHVuIHJlY29yZFxyXG4gICAqIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBTYXZlSlNPTjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJGaWx0ZXI6IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4oKTtcclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpbyxcclxuICAgKiBsJ2VsaW1pbmF6aW9uZSBvIGxhIGR1cGxpY2F6aW9uZSBkaSB1biByZWNvcmQgYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgbGFzdGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBzZWxlY3RlZFJlY29yZDogUmVjb3JkO1xyXG4gIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIHZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIGRlZmF1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vbkJhY2tUbyA9ICh0aGlzLm9uQmFja1RvID09IG51bGwpID8gdGhpcy5zdGFydGVyVmlld01vZGUgOiB0aGlzLm9uQmFja1RvO1xyXG5cclxuICAgIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLnVzZXJJRCxcclxuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLnByZWZpbHRlclBhcmFtcyxcclxuICAgICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uXHJcbiAgICApO1xyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyhcclxuICAgICAgdGhpcy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMudmFsdWVzLFxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyxcclxuICAgICAgdGhpcy51c2VySURcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyhcclxuICAgICAgdGhpcy5Gb3JtSlNPTlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmNvbnRleHQ7XHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlclRva2VuO1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRFxyXG5cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZVxyXG4gICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtSlNPTiA9PSBcIlwiKSB7XHJcbiAgICAgIC8vIHByZW5kZSBpbCBmb3JtIGUgaW1wb3N0YSBsYSB2aWV3bW9kZSBjb3JyZXR0YVxyXG4gICAgICAvLyBhd2FpdCB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSB8fCB0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkZJTFRFUikge1xyXG4gICAgICAvLyBkYSB2ZWRlcmUgaW4gZ2V0Rm9ybUJ5SURcclxuICAgICAgdGhpcy5kZWZhdWx0Vmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCksIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoXyA9PiB7IHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgLy8gICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAvLyAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAvLyAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgLy8gICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gIC8vICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAvLyAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgLy8gICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAvLyAgICAgICB0aGlzLmxhc3Rmb3JtID0gcmVzO1xyXG4gIC8vICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAvLyAgICAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG5cclxuICAvLyAgICAgICAvLyBpZiAodGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFKSB7XHJcbiAgLy8gICAgICAgLy8gICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCk7XHJcbiAgLy8gICAgICAgLy8gfVxyXG4gIC8vICAgICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgKGVycikgPT4ge31cclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7ICAgIFxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICAvLyBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAvLyAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAvLyAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICBdO1xyXG4gICAgLy8gICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgIC8vICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAvLyAgICAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgLy8gICAgICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIG9uR29CYWNrKCl7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUbyA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZChldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwib25BZGRWaWV3RWRpdFJlY29yZFwiLCBldmVudCk7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiVmVyc2lvbiBtb2R1bG9cIiwgZXZlbnQucmVjb3JkLlZlcnNpb24pXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJxdWVyeSBwYXJhbXNcIiwgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2coXCJSRVNcIiwgcmVzKVxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2VzcyBSdW5FbmRQb2ludENhbGxcIixyZXMsdGhpcy5kZWZhdWx0Vmlld01vZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYW5zd2VyVG9EdXBsaWNhdGVJZCAhPSBudWxsKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHRoaXMuYW5zd2VyVG9EdXBsaWNhdGVJZDtcclxuICAgICAgICAgICAgdGhpcy5pc0R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLmRlZmF1bHRWaWV3TW9kZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uVmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSByZWNvcmRcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uVklFV1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFNBVkVcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBpbCByZWNvcmQgw6ggc3RhdG8gYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIHNhbHZhcmUuXHJcbiAgICovXHJcbiAgb25TYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmQuZW1pdChldmVudCk7XHJcbiAgICAvLyBpZiAodGhpcy5vblNhdmVCYWNrVG9MaXN0KSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5OT05FO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBpbCBjb21wb25lbnRlIGRvcG8gY2hlIGUgc3RhdGEgcmljaGllc3RhIHVuYSBhZ2dpdW50byBvIHVuYSBtb2RpZmljYSBkZWwgcmVjb3JkIG5lbGwnIGFkZC1mb3JtLXJlY29yZC5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuXHJcbiAgb25TYXZlSnNvbihyZWNvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5TYXZlSlNPTi5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gU0FWRVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHJlbG9hZCgpe1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHRoaXMubG9hZGVyID0gdHJ1ZSxcclxuICAgICAgNTBcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBERUxFVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgb25EZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJFbGltaW5hcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkRlbGV0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlZG5yZWdpb24gREVMRVRFIFxyXG5cclxuICBvbkFmdGVyRmlsdGVyKGV2KXtcclxuICAgIHRoaXMuYWZ0ZXJGaWx0ZXIuZW1pdChldik7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+PC9lcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj5cclxuXHJcbjwhLS0gW3JlY29yZF09XCInYjNkOTQzYzAtOWMwMS00OTczLTk0OGItN2FhNDE4NjM0ZjcyJ1wiIC0tPlxyXG48dmlldy1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uVklFV1wiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS12aWV3XCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmQuSURcIlxyXG4gIChnb0JhY2tFdmVudCk9XCJvbkdvQmFjaygpXCJcclxuPlxyXG48L3ZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG48ZmlsdGVyLWZvcm0tc3RhdGlzdGljXHJcbipuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRklMVEVSXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybV09XCJmb3JtXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICBbZGVmYXVsdExpc3RBY3Rpb25zXT1cImRlZmF1bHRMaXN0QWN0aW9uc1wiXHJcbiAgW2ZpbHRlclJlc3VsdFZpZXdNb2RlXT1cImZpbHRlclJlc3VsdFZpZXdNb2RlXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4gIChhZnRlckZpbHRlcik9XCJvbkFmdGVyRmlsdGVyKCRldmVudClcIlxyXG4+XHJcbjwvZmlsdGVyLWZvcm0tc3RhdGlzdGljPlxyXG5cclxuPGFkZC1mb3JtLXJlY29yZFxyXG4qbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEVcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtmb3JtXT1cImZvcm1cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRlXCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuXHJcbiAgKHNhdmVSZWNvcmRFdmVudCk9XCJvblNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4+XHJcbjwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuPGxpc3QtZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtbGlzdFwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuXHJcbiAgKG9uVmlld1JlY29yZCk9XCJvblZpZXdSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEZWxldGVSZWNvcmQpPVwib25BZnRlckRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuPlxyXG48L2xpc3QtZm9ybS1yZWNvcmQ+XHJcblxyXG48cmVwYWlyLWZvcm0tZmllbGRzXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5SRVBBSVJcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtcmVwYWlyXCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnXCJcclxuXHJcbiAgKG9uU2F2ZUpzb24pPVwib25TYXZlSnNvbigkZXZlbnQpXCJcclxuPlxyXG48L3JlcGFpci1mb3JtLWZpZWxkcz5cclxuXHJcbjxsaXN0LXZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RXSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlTGlzdENvbmZpZ1wiXHJcbiAgW2NvbXBpbGVDb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgW2hpZ2hsaWdodEZpbHRlcl09XCJoaWdobGlnaHRGaWx0ZXJcIlxyXG4gIFtkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbl09XCJkZWZhdWx0TGlzdFZpZXdGdW5jdGlvblwiXHJcbiAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gIFtvbmx5Vmlld109XCIhZGVmYXVsdExpc3RBY3Rpb25zLmVkaXRcIlxyXG5cclxuICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkRlbGV0ZVJlY29yZCk9XCJvbkRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgPlxyXG48L2xpc3Qtdmlldy1mb3JtLXJlY29yZD5cclxuIl19
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FB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QUFlO3NCQUF2QixLQUFLO2dCQStCSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlVmlld01vZGVFbnVtXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0sIEZvcm1UeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEZpbHRlclJlc3VsdFR5cGUgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtZmlsdGVyc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBcclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGVsZW1lbnQ/OiBhbnkpe1xyXG4gICAgaWYodGhpcy5kZWJ1Z01vZGUpe1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWc7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXJ0ZXJWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuXHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmcgPSBcIjBcIjtcclxuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBBcnJheTxSZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBGb3JtSlNPTiA9IFwiXCI7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbjogRnVuY3Rpb24gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBASW5wdXQoKSBvblNhdmVCYWNrVG9MaXN0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb25CYWNrVG86IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbHRlclJlc3VsdFZpZXdNb2RlOiBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5JTlRFUk5BTF9FUVBUQUJMRTtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsUGFyYW1zOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWZpbHRlclBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBzaG93TmV3U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbnN3ZXJUb0R1cGxpY2F0ZUlkOiBhbnk7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnk7XHJcblxyXG4gIGNvbnRleHQ6IENvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xyXG4gIC8qKlxyXG4gICAqIFVybCBkZWwgc2VydmVyIGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlLCBzYWx2YXJlIG8gZWxpbWluYXJlIGkgcmVjb3JkLlxyXG4gICAqIFVzYXRvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGkgZGVmYXVsdCBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBiYXNlU2VydmVyVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUb2tlbiBkYSB1c2FyZSBuZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gc29sbyBzZSB2aWVuZSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiLlxyXG4gICAqL1xyXG4gIHVzZXJUb2tlbjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhemlvbmUgZGVnbGkgZW5kcG9pbnQgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUgbyBzYWx2YXJlIGkgZGF0aS5cclxuICAgKiBQdcOyIGVzc2VyZSBkZWZpbml0YSBkYWxsJ3V0ZW50ZSBvcHB1cmUgbGFzY2lhdGEgbnVsbCwgdmllbmUgcG9wb2xhdGEgY29uIGRlaVxyXG4gICAqIHZhbG9yaSBkaSBkZWZhdWx0IHNlIHZpZW5lIHZhbG9yaXp6YXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIgYWx0cmltZW50aVxyXG4gICAqIHZpZW5lIGxhc2NpYXRhIG51bGwgZSBub24gdmllbmUgZXNlZ3VpdGEgbmVzc3VuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBudWxsO1xyXG5cclxuICAvL0BJbnB1dCgpIGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIC8vIGRlZmF1bHRMaXN0QWN0aW9uczogZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICAvLyBGb3JtSlNPTjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBxdWFuZG8gc2kgc2FsdmEsIGVsaW1pbmEgbyBkdXBsaWNhIHVuIHJlY29yZFxyXG4gICAqIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBlbmRwb2ludCBkYSBjaGlhbWFyZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBTYXZlSlNPTjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJGaWx0ZXI6IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4oKTtcclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIERPUE8gYXZlciBlc2VndWl0byB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBlciBpbCBzYWx2YXRhZ2dpbyxcclxuICAgKiBsJ2VsaW1pbmF6aW9uZSBvIGxhIGR1cGxpY2F6aW9uZSBkaSB1biByZWNvcmQgYWxsJ2VuZHBvaW50IHNwZWNpZmljYXRvLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgbGFzdGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBzZWxlY3RlZFJlY29yZDogUmVjb3JkO1xyXG4gIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIHZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIGRlZmF1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vbkJhY2tUbyA9ICh0aGlzLm9uQmFja1RvID09IG51bGwpID8gdGhpcy5zdGFydGVyVmlld01vZGUgOiB0aGlzLm9uQmFja1RvO1xyXG5cclxuICAgIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLnVzZXJJRCxcclxuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLnByZWZpbHRlclBhcmFtcyxcclxuICAgICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uXHJcbiAgICApO1xyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyhcclxuICAgICAgdGhpcy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMudmFsdWVzLFxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyxcclxuICAgICAgdGhpcy51c2VySURcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyhcclxuICAgICAgdGhpcy5Gb3JtSlNPTlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmNvbnRleHQ7XHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlclRva2VuO1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRFxyXG5cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZVxyXG4gICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtSlNPTiA9PSBcIlwiKSB7XHJcbiAgICAgIC8vIHByZW5kZSBpbCBmb3JtIGUgaW1wb3N0YSBsYSB2aWV3bW9kZSBjb3JyZXR0YVxyXG4gICAgICAvLyBhd2FpdCB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgdGhpcy5kZWJ1Z0xvZyhcImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCIsIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcpXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFIHx8IHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRklMVEVSKSB7XHJcbiAgICAgIC8vIGRhIHZlZGVyZSBpbiBnZXRGb3JtQnlJRFxyXG4gICAgICB0aGlzLmRlZmF1bHRWaWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub25BZGRWaWV3RWRpdFJlY29yZChudWxsKSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGU7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dChfID0+IHsgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAvLyAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gIC8vICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gIC8vICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAvLyAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgLy8gICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gIC8vICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgLy8gICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAvLyAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMubGFzdGZvcm0gPSByZXM7XHJcbiAgLy8gICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gIC8vICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcblxyXG4gIC8vICAgICAgIC8vIGlmICh0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEUpIHtcclxuICAvLyAgICAgICAvLyAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZChudWxsKTtcclxuICAvLyAgICAgICAvLyB9XHJcbiAgLy8gICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gIC8vICAgICB9LFxyXG4gIC8vICAgICAoZXJyKSA9PiB7fVxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgZ2xpIGVuZHBvaW50IGRhIHVzYXJlIGRpIGRlZmF1bHQgYSBwYXJ0aXJlIGRhbGwndXJsIGJhc2UgZGVsIHNlcnZlclxyXG4gICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgKiBTZSBsYSBwcm9wcmlldMOgIFwiYmFzZVNlcnZlclVybFwiIMOoIG51bGwgZSBub24gc29ubyBzdGF0aSBjb25maWd1cmF0aSBpIHZhcmkgZW5kcG9pbnQgYWxsb3JhXHJcbiAgICogbm9uIHZpZW5lIGVzZWd1aXRhIG5lc3N1bmEgY2hpYW1hdGEgaHR0cCBwZXIgcmVjdXBlcmFyZS9zYWx2YXJlIGkgZGF0aS5cclxuICAgKi9cclxuICBjb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJiB0aGlzLmJhc2VTZXJ2ZXJVcmwpIHtcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhcclxuICAgICAgICAgIHRoaXMuYmFzZVNlcnZlclVybCxcclxuICAgICAgICAgIHRoaXMudXNlclRva2VuXHJcbiAgICAgICAgKTsgICAgXHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIC8vIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgLy8gICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgIC8vICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgIC8vICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgIF07XHJcbiAgICAvLyAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgLy8gICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgIC8vICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgLy8gICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIC8vICAgICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIC8vICAgICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgLy8gICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHIuQW5zd2VyRGF0ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gfVxyXG4gIC8vIH1cclxuXHJcbiAgb25Hb0JhY2soKXtcclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvIDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJvbkFkZFZpZXdFZGl0UmVjb3JkXCIsIGV2ZW50KTtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcbiAgICAgIHRoaXMuZGVidWdMb2coXCJWZXJzaW9uIG1vZHVsb1wiLCBldmVudC5yZWNvcmQuVmVyc2lvbilcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcInF1ZXJ5IHBhcmFtc1wiLCBkeW5hbWljTW9kdWxlUGFyYW1zKVxyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIlJFU1wiLCByZXMpXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLmRlZmF1bHRWaWV3TW9kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShldmVudC5yZWNvcmQpKTtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzIFJ1bkVuZFBvaW50Q2FsbFwiLHJlcyx0aGlzLmRlZmF1bHRWaWV3TW9kZSk7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJUb0R1cGxpY2F0ZUlkICE9IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gdGhpcy5hbnN3ZXJUb0R1cGxpY2F0ZUlkO1xyXG4gICAgICAgICAgICB0aGlzLmlzRHVwbGljYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvciBSdW5FbmRQb2ludENhbGxcIixlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25WaWV3UmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHJlY29yZFxyXG4gICAgICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5WSUVXXHJcbiAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG5cclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gU0FWRVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBpbCBjb21wb25lbnRlIGRvcG8gY2hlIGlsIHJlY29yZCDDqCBzdGF0byBhZ2dpdW50byBvIG1vZGlmaWNhdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZC5lbWl0KGV2ZW50KTtcclxuICAgIC8vIGlmICh0aGlzLm9uU2F2ZUJhY2tUb0xpc3QpIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLk5PTkU7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUb1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGlsIGNvbXBvbmVudGUgZG9wbyBjaGUgZSBzdGF0YSByaWNoaWVzdGEgdW5hIGFnZ2l1bnRvIG8gdW5hIG1vZGlmaWNhIGRlbCByZWNvcmQgbmVsbCcgYWRkLWZvcm0tcmVjb3JkLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIHNhbHZhcmUuXHJcbiAgICovXHJcbiAgb25BZnRlclNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5hZnRlclNhdmVSZWNvcmQuZW1pdChldmVudCk7XHJcbiAgICAvLyBpZiAodGhpcy5vblNhdmVCYWNrVG9MaXN0KSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5OT05FO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG9cclxuICB9XHJcblxyXG5cclxuICBvblNhdmVKc29uKHJlY29yZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLlNhdmVKU09OLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvbiBTQVZFXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcmVsb2FkKCl7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgKCkgPT4gdGhpcy5sb2FkZXIgPSB0cnVlLFxyXG4gICAgICA1MFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERFTEVURSBcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBvbkRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkRlbGV0ZUVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybShcclxuICAgICAgICBcIkVsaW1pbmFyZSBpbCByZWNvcmQgc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICBQYXJhbVZhbHVlOiByZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRGVsZXRlRW5kUG9pbnQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJEZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMucmVsb2FkVGFibGVzKClcclxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgXCJSaWNoaWVzdGEgY29uZmVybWFcIlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkFmdGVyRGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdPbkluaXQoKSwgNTAgKVxyXG4gICAgdGhpcy5hZnRlckRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VkbnJlZ2lvbiBERUxFVEUgXHJcblxyXG4gIG9uQWZ0ZXJGaWx0ZXIoZXYpe1xyXG4gICAgdGhpcy5hZnRlckZpbHRlci5lbWl0KGV2KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxlcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj48L2VxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPlxyXG5cclxuPCEtLSBbcmVjb3JkXT1cIidiM2Q5NDNjMC05YzAxLTQ5NzMtOTQ4Yi03YWE0MTg2MzRmNzInXCIgLS0+XHJcbjx2aWV3LWZvcm0tcmVjb3JkXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5WSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLXZpZXdcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZC5JRFwiXHJcbiAgKGdvQmFja0V2ZW50KT1cIm9uR29CYWNrKClcIlxyXG4+XHJcbjwvdmlldy1mb3JtLXJlY29yZD5cclxuXHJcbjxncmFwaHNcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5HUkFQSFNcIlxyXG5jbGFzcz1cImR5bmFtaWMtbW9kdWxlLXZpZXdcIlxyXG5bZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbltlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuW2Zvcm1dPVwiZm9ybVwiXHJcbltmb3JtSURdPVwiZm9ybUlEXCJcclxuW3VzZXJJRF09XCJ1c2VySURcIlxyXG5bY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4+XHJcbjwvZ3JhcGhzPlxyXG5cclxuPGZpbHRlci1mb3JtLXN0YXRpc3RpY1xyXG4qbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkZJTFRFUlwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2RlZmF1bHRMaXN0QWN0aW9uc109XCJkZWZhdWx0TGlzdEFjdGlvbnNcIlxyXG4gIFtmaWx0ZXJSZXN1bHRWaWV3TW9kZV09XCJmaWx0ZXJSZXN1bHRWaWV3TW9kZVwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICAoYWZ0ZXJGaWx0ZXIpPVwib25BZnRlckZpbHRlcigkZXZlbnQpXCJcclxuPlxyXG48L2ZpbHRlci1mb3JtLXN0YXRpc3RpYz5cclxuXHJcbjxhZGQtZm9ybS1yZWNvcmRcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybV09XCJmb3JtXCJcclxuICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcclxuICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gIFtpc0R1cGxpY2F0ZV09XCJpc0R1cGxpY2F0ZVwiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbdXNlcklEXT1cInVzZXJJRFwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcbiAgW2FkZGl0aW9uYWxQYXJhbXNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcuYWRkaXRpb25hbFBhcmFtc1wiXHJcblxyXG4gIChzYXZlUmVjb3JkRXZlbnQpPVwib25TYXZlUmVjb3JkKCRldmVudClcIlxyXG4gIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuPlxyXG48L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbjxsaXN0LWZvcm0tcmVjb3JkXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3RcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcblxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcblxyXG4gIChvblZpZXdSZWNvcmQpPVwib25WaWV3UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkFmdGVyRGVsZXRlUmVjb3JkKT1cIm9uQWZ0ZXJEZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbj5cclxuPC9saXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuPHJlcGFpci1mb3JtLWZpZWxkc1xyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uUkVQQUlSXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLXJlcGFpclwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZ1wiXHJcblxyXG4gIChvblNhdmVKc29uKT1cIm9uU2F2ZUpzb24oJGV2ZW50KVwiXHJcbj5cclxuPC9yZXBhaXItZm9ybS1maWVsZHM+XHJcblxyXG48bGlzdC12aWV3LWZvcm0tcmVjb3JkXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUV0lFV1wiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1saXN0LXZpZXdcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtjb21waWxlQ29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gIFtoaWdobGlnaHRGaWx0ZXJdPVwiaGlnaGxpZ2h0RmlsdGVyXCJcclxuICBbZGVmYXVsdExpc3RWaWV3RnVuY3Rpb25dPVwiZGVmYXVsdExpc3RWaWV3RnVuY3Rpb25cIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuICBbb25seVZpZXddPVwiIWRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0XCJcclxuXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKHNhdmVSZWNvcmRFdmVudCk9XCJvblNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gID5cclxuPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcbiJdfQ==
@@ -164,22 +164,22 @@ export class ListValueFieldTemplateComponent {
164
164
  }
165
165
  stringToValuePairs(valueString) {
166
166
  const valuePairs = {};
167
- this.debugLog('stringToValuePair() - this.field.Formula temp', valueString);
167
+ // this.debugLog('stringToValuePair() - this.field.Formula temp', valueString)
168
168
  const keyvals = valueString.split(";");
169
169
  keyvals.forEach((x) => {
170
170
  const parts = x.split("|");
171
- this.debugLog('stringToValuePair() - parts', parts);
172
- this.debugLog('stringToValuePair() - parts.lenght', parts.length);
171
+ // this.debugLog('stringToValuePair() - parts', parts);
172
+ // this.debugLog('stringToValuePair() - parts.lenght', parts.length);
173
173
  if (parts.length == 1) {
174
174
  valuePairs[parts[0].trim()] = parts[0].trim();
175
175
  }
176
176
  else if (parts.length > 1) {
177
- this.debugLog('stringToValuePair() - parts[0].trim()', parts[0].trim());
178
- this.debugLog('stringToValuePair() - parts[1].trim()', parts[1].trim());
177
+ // this.debugLog('stringToValuePair() - parts[0].trim()', parts[0].trim());
178
+ // this.debugLog('stringToValuePair() - parts[1].trim()', parts[1].trim());
179
179
  valuePairs[parts[0].trim()] = parts[1].trim();
180
180
  }
181
181
  });
182
- this.debugLog('stringToValuePair() - valuePairs', valuePairs);
182
+ // this.debugLog('stringToValuePair() - valuePairs', valuePairs)
183
183
  return valuePairs;
184
184
  }
185
185
  }
@@ -197,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
197
197
  }], recordChange: [{
198
198
  type: Output
199
199
  }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixNQUFNLGdEQUFnRCxDQUFDO0FBRXRHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7QUFPbkYsTUFBTSxPQUFPLCtCQUErQjtJQUcxQyxRQUFRLENBQUMsT0FBZSxFQUFFLE9BQWE7UUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzlCO0lBQ0gsQ0FBQztJQVVEO1FBZlMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVMxQixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFFLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGNBQVMsR0FBdUUsRUFBRSxDQUFDO0lBSW5FLENBQUM7SUFF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SUFBSSxDQUFDLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMvQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUM3RCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzs0SEEvTFUsK0JBQStCO2dIQUEvQiwrQkFBK0IsdU1DWDVDLHNoR0E0Q007MkZEakNPLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwyQkFBMkI7MEVBTTVCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0UHJlc2VudGF0aW9uRW51bSwgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGVsZW1lbnQ/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRlYnVnTW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IExpc3RWYWx1ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBhcnJheURhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBhbnksIFNlbGVjdGVkPzogYm9vbGVhbiwgSW1nVXJsPzogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIC8vdmFyaWFiaWxpIHBlciBnZXN0aXJlIGlsIGNzcyBkZWxsYSBsYWJlbCBlIGRlbCBmaWVsZFxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5MYWJlbHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVidWdMb2coXCJjb21ib2JveCBkZWJ1Z01vZGVcIiwgdGhpcy5kZWJ1Z01vZGUpO1xyXG4gICAgdGhpcy5kZWJ1Z0xvZyhcImNvbWJvYm94IGZpbGVkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXRBcnJheURhdGEoKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmICF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBbXTtcclxuICAgIH1cclxuICAgIC8vIE5lbCBjYXNvIGluIGN1aSBzb25vIGluIG1vZGlmaWNhIGRpIHVuIFJlY29yZCBhZ2dpb3JubyBpbCB2YWxvcmVcclxuICAgIC8vIGUgaWwgdmFsaWRhdG9yIGRlbCBGb3JtQ29udHJvbC4gU2Ugbm9uIHZpZW5lIGVzZWd1aXRhIHF1ZXN0YSByaWdhXHJcbiAgICAvLyBsJ3V0ZW50ZSBkZXZlIG1vZGlmaWNhcmUgbGEgc2VsZXppb25lIGZhdHRhIHBlciBhZ2dpb3JuYXJlIGxhIGZvcm0uXHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICAvLyBkZXZvIGNvbnRyb2xsYXJlIHNlIGhvIGxhIHN0cmluZ2EgKFZhbHVlU3RyaW5nKSBvIGlsIGRpemlvbmFyaW8gKFZhbHVlUGFpcnMpXHJcbiAgICB0aGlzLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCB1cGRhdGVGaWVsZFwiLCB0aGlzLmZpZWxkKVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gRm9ybXVsYVwiKVxyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgY29uc3QgdGVtcDogc3RyaW5nID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5Gb3JtdWxhLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICAgIC8vIHRlbXAgZG92cmViYmUgZXNzZXJlIHVuYSBzdHJpbmdhIGRlbCB0aXBvIFwiY2hpYXZlMSEgdmFsb3JlIDEgOyBjaGlhdmUyIHwgdmFsb3JlIDIgXCJcclxuICAgICAgLy8gZG9iYmlhbW8gb3R0ZW5lcmUgdW4gZGl6aW9uYXJpbyBkaSBxdWVpIHZhbG9yaVxyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB0aGlzLnN0cmluZ1RvVmFsdWVQYWlycyh0ZW1wKTtcclxuXHJcbiAgICAgIC8vIGZvciAodmFyIGtleSBpbiBtYXRjaGVzKSB7XHJcbiAgICAgIC8vICAgaWYoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRlbXBba2V5XSkpe1xyXG4gICAgICAvLyAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tleV0gPSBOdW1iZXIodGVtcFtrZXldKTtcclxuICAgICAgLy8gICB9ZWxzZXtcclxuICAgICAgLy8gICAgIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trZXldID0gdGVtcFtrZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gICAgICAvL3RoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlUGFpcnNcIilcclxuXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlU3RyaW5nXCIpXHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IHRoaXMuc3RyaW5nVG9WYWx1ZVBhaXJzKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcpO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyB2aWVuZSBzZWxlemlvbmF0YSB1bidvcHppb25lIG5lbGxhIHZpc3VhbGl6emF6aW9uZSBhIGJ1dHRvblxyXG4gICAqIEBwYXJhbSBkYXRhIFJhcHByZXNlbnRhIGwnb2dnZXR0byBzZWxlemlvbmF0b1xyXG4gICAqL1xyXG4gIGJ1dHRvblNlbGVjdENsaWNrKGRhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBzdHJpbmcsIFNlbGVjdGVkPzogYm9vbGVhbiwgSW1nVXJsPzogc3RyaW5nIH0pIHtcclxuICAgIGRhdGEuU2VsZWN0ZWQgPSAhZGF0YS5TZWxlY3RlZDtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcnJheURhdGEuZmlsdGVyKGQgPT4gZC5LZXkgIT0gZGF0YS5LZXkgJiYgZC5WYWx1ZSAhPSBkYXRhLlZhbHVlKS5mb3JFYWNoKGQgPT4gZC5TZWxlY3RlZCA9IGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IE51bWJlcihkYXRhLlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZGF0YS5WYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsL2kgdmFsb3JlL2kgc2VsZXppb25hdG8vaSBkYWxsJ3V0ZW50ZS5cclxuICAgKiBAcGFyYW0gZW1pdENoYW5nZSBTZSB0cnVlIHNjYXRlbmEgbCdldmVudG8gZGkgb3V0cHV0IGRlbGxhIG1vZGlmaWNhIGRlbCB2YWxvcmUgZGkgcmVjb3JkXHJcbiAgICovXHJcbiAgdXBkYXRlU2VsZWN0ZWQoZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB0aGlzLmFycmF5RGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLlNlbGVjdGVkKS5tYXAoZGF0YSA9PiBkYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRlbCB0aXBvIHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBhbnkgfSBkYSB1c2FyZSBjb21lIHNvcmdlbnRlIGRhdGkgcGVyIGxhIGVxcC1zZWxlY3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5QcmVzZW50YXRpb25Nb2RlICE9IExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pKSB7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGhpcy5maWVsZC5WYWx1ZVBhaXJzW09iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycylbMF1dKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGQuVmFsdWVQYWlycykuZm9yRWFjaFxyXG4gICAgICAgICAgKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoXHJcbiAgICAgICAgICAoayA9PiB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaywgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkJ1dHRvbkltYWdlTGlzdC5mb3JFYWNoKGkgPT4geyB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaS5CdXR0b25LZXksIGkuQnV0dG9uVmFsdWUsICdkYXRhOicgKyBpLkZpbGVDb250ZW50VHlwZSArICc7YmFzZTY0LCcgKyBpLkZpbGVEYXRhQmFzZTY0KTsgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sIGFzc29jaWF0byBhbCBjYW1wby5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRWYWx1ZSh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHN0cmluZ1RvVmFsdWVQYWlycyh2YWx1ZVN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB2YWx1ZVBhaXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gdGhpcy5maWVsZC5Gb3JtdWxhIHRlbXAnLCB2YWx1ZVN0cmluZylcclxuICAgIGNvbnN0IGtleXZhbHMgPSB2YWx1ZVN0cmluZy5zcGxpdChcIjtcIik7XHJcbiAgICBrZXl2YWxzLmZvckVhY2goKHgpID0+IHtcclxuICAgICAgY29uc3QgcGFydHMgPSB4LnNwbGl0KFwifFwiKTtcclxuICAgICAgdGhpcy5kZWJ1Z0xvZygnc3RyaW5nVG9WYWx1ZVBhaXIoKSAtIHBhcnRzJywgcGFydHMpO1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gcGFydHMubGVuZ2h0JywgcGFydHMubGVuZ3RoKTtcclxuICAgICAgaWYocGFydHMubGVuZ3RoID09IDEpe1xyXG4gICAgICAgIHZhbHVlUGFpcnNbcGFydHNbMF0udHJpbSgpXSA9IHBhcnRzWzBdLnRyaW0oKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPiAxKXtcclxuICAgICAgICB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gcGFydHNbMF0udHJpbSgpJywgcGFydHNbMF0udHJpbSgpKTtcclxuICAgICAgICB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gcGFydHNbMV0udHJpbSgpJywgcGFydHNbMV0udHJpbSgpKTtcclxuICAgICAgICB2YWx1ZVBhaXJzW3BhcnRzWzBdLnRyaW0oKV0gPSBwYXJ0c1sxXS50cmltKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gdmFsdWVQYWlycycsIHZhbHVlUGFpcnMpXHJcbiAgICByZXR1cm4gdmFsdWVQYWlycztcclxuICB9XHJcblxyXG59XHJcbiIsIjxlcXAtc2VsZWN0IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFtzaG93Q2FuY2VsQnV0dG9uXT1cIiFmaWVsZC5SZXF1aXJlZFwiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgW2Zvcm1Hcm91cElucHV0XT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIiBbZm9ybUNvbnRyb2xOYW1lSW5wdXRdPVwiZmllbGQuTmFtZVwiIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5EZXNjcmlwdGlvblwiXHJcbiAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsSW5wdXQpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtpc011bHRpU2VsZWN0XT1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCJcclxuICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbjwvZXFwLXNlbGVjdD5cclxuXHJcbjxkaXYgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlICE9IExpc3RQcmVzZW50YXRpb25FbnVtWydDb21ibyBib3gnXVwiIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiPlxyXG5cclxuICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJtci0zIHBzLTNcIiBbbmdTdHlsZV09XCJMYWJlbHN0eWxlT2JqXCI+IHt7ZmllbGQuRGVzY3JpcHRpb24gKyAoZmllbGQuUmVxdWlyZWQgPyBcIiAqXCIgOiBcIlwiKX19IDwvbWF0LWxhYmVsPlxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJTyBCVVRUT04gKFNFTlpBIFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICA8bWF0LXJhZGlvLWdyb3VwIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmICFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtcy0zIGQtYmxvY2tcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbdmFsdWVdPVwiZGF0YS5WYWx1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuS2V5fX1cclxuICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICA8L21hdC1yYWRpby1ncm91cD5cclxuXHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIChTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddICYmIGZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCAgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIGNsYXNzPVwibXItMlwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCIgWyhuZ01vZGVsKV09XCJkYXRhLlNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuS2V5fX1cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUFVMU0FOVEkgKENPTiBURVNUTyBPIElNTUFHSU5JKSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgKm5nSWY9XCJbTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddLCBMaXN0UHJlc2VudGF0aW9uRW51bS5JbW1hZ2luaV0uaW5jbHVkZXMoZmllbGQuUHJlc2VudGF0aW9uTW9kZSlcIj5cclxuICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLWJ1dHRvbic6IGRhdGEuU2VsZWN0ZWQgPT0gdHJ1ZSwgJ3AtMCc6IGZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW0uSW1tYWdpbml9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvblNlbGVjdENsaWNrKGRhdGEpXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVEVTVE8gREVMIFBVTFNBTlRFIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgPT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddXCI+IHt7ZGF0YS5LZXl9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSU1NQUdJTkUgREVMIFBVTFNBTlRFIC0tPlxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bS5JbW1hZ2luaVwiIFtzcmNdPVwiZGF0YS5JbWdVcmxcIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLG9CQUFvQixFQUFrQixNQUFNLGdEQUFnRCxDQUFDO0FBRXRHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7QUFPbkYsTUFBTSxPQUFPLCtCQUErQjtJQUcxQyxRQUFRLENBQUMsT0FBZSxFQUFFLE9BQWE7UUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzlCO0lBQ0gsQ0FBQztJQVVEO1FBZlMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVMxQixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFFLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGNBQVMsR0FBdUUsRUFBRSxDQUFDO0lBSW5FLENBQUM7SUFF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QUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsZ0VBQWdFO1FBQ2hFLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzRIQS9MVSwrQkFBK0I7Z0hBQS9CLCtCQUErQix1TUNYNUMsc2hHQTRDTTsyRkRqQ08sK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDJCQUEyQjswRUFNNUIsU0FBUztzQkFBakIsS0FBSztnQkFPRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RQcmVzZW50YXRpb25FbnVtLCBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGRlYnVnTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRlYnVnTG9nKG1lc3NhZ2U6IHN0cmluZywgZWxlbWVudD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGVidWdNb2RlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTGlzdFZhbHVlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBMaXN0UHJlc2VudGF0aW9uRW51bSA9IExpc3RQcmVzZW50YXRpb25FbnVtO1xyXG4gIGFycmF5RGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSwgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgLy92YXJpYWJpbGkgcGVyIGdlc3RpcmUgaWwgY3NzIGRlbGxhIGxhYmVsIGUgZGVsIGZpZWxkXHJcbiAgRmllbGRzdHlsZU9iajogYW55O1xyXG4gIExhYmVsc3R5bGVPYmo6IGFueTtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgLy9GdW56aW9uZSBwZXIgcGFyc2FyZSBpbCBjYW1wbyBzdHlsZWNzcyBkZWxsJ29nZ2V0dG8gZmllbGQgZWQgYXBwbGljYXJsbyBhbGwnaHRtbFxyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWJ1Z0xvZyhcImNvbWJvYm94IGRlYnVnTW9kZVwiLCB0aGlzLmRlYnVnTW9kZSk7XHJcbiAgICB0aGlzLmRlYnVnTG9nKFwiY29tYm9ib3ggZmlsZWRcIiwgdGhpcy5maWVsZCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUgJiYgIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gTmVsIGNhc28gaW4gY3VpIHNvbm8gaW4gbW9kaWZpY2EgZGkgdW4gUmVjb3JkIGFnZ2lvcm5vIGlsIHZhbG9yZVxyXG4gICAgLy8gZSBpbCB2YWxpZGF0b3IgZGVsIEZvcm1Db250cm9sLiBTZSBub24gdmllbmUgZXNlZ3VpdGEgcXVlc3RhIHJpZ2FcclxuICAgIC8vIGwndXRlbnRlIGRldmUgbW9kaWZpY2FyZSBsYSBzZWxlemlvbmUgZmF0dGEgcGVyIGFnZ2lvcm5hcmUgbGEgZm9ybS5cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3JkJ10gIT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbJ3JlY29yZCddLmZpcnN0Q2hhbmdlID09IGZhbHNlICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10ucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIC8vIGRldm8gY29udHJvbGxhcmUgc2UgaG8gbGEgc3RyaW5nYSAoVmFsdWVTdHJpbmcpIG8gaWwgZGl6aW9uYXJpbyAoVmFsdWVQYWlycylcclxuICAgIHRoaXMuZGVidWdMb2coXCJsaXN0LXZhbHVlLWZpZWxkIHVwZGF0ZUZpZWxkXCIsIHRoaXMuZmllbGQpXHJcbiAgICBpZiAodGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMuZGVidWdMb2coXCJsaXN0LXZhbHVlLWZpZWxkIC0gdXBkYXRlRmllbGQgLSBGb3JtdWxhXCIpXHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCBudWxsKTtcclxuICAgICAgLy8gdGVtcCBkb3ZyZWJiZSBlc3NlcmUgdW5hIHN0cmluZ2EgZGVsIHRpcG8gXCJjaGlhdmUxISB2YWxvcmUgMSA7IGNoaWF2ZTIgfCB2YWxvcmUgMiBcIlxyXG4gICAgICAvLyBkb2JiaWFtbyBvdHRlbmVyZSB1biBkaXppb25hcmlvIGRpIHF1ZWkgdmFsb3JpXHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IHRoaXMuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG5cclxuICAgICAgLy8gZm9yICh2YXIga2V5IGluIG1hdGNoZXMpIHtcclxuICAgICAgLy8gICBpZihVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXldKSl7XHJcbiAgICAgIC8vICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnNba2V5XSA9IE51bWJlcih0ZW1wW2tleV0pO1xyXG4gICAgICAvLyAgIH1lbHNle1xyXG4gICAgICAvLyAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tleV0gPSB0ZW1wW2tleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvLyAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgICAgIC8vdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIG51bGwpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlUGFpcnMubGVuZ2h0ID4gMCkge1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVQYWlyc1wiKVxyXG5cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVN0cmluZyAhPSBudWxsICYmIHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVTdHJpbmdcIilcclxuICAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzID0gdGhpcy5zdHJpbmdUb1ZhbHVlUGFpcnModGhpcy5maWVsZC5WYWx1ZVN0cmluZyk7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHZpZW5lIHNlbGV6aW9uYXRhIHVuJ29wemlvbmUgbmVsbGEgdmlzdWFsaXp6YXppb25lIGEgYnV0dG9uXHJcbiAgICogQHBhcmFtIGRhdGEgUmFwcHJlc2VudGEgbCdvZ2dldHRvIHNlbGV6aW9uYXRvXHJcbiAgICovXHJcbiAgYnV0dG9uU2VsZWN0Q2xpY2soZGF0YTogeyBLZXk6IHN0cmluZywgVmFsdWU6IHN0cmluZywgU2VsZWN0ZWQ/OiBib29sZWFuLCBJbWdVcmw/OiBzdHJpbmcgfSkge1xyXG4gICAgZGF0YS5TZWxlY3RlZCA9ICFkYXRhLlNlbGVjdGVkO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZChmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFycmF5RGF0YS5maWx0ZXIoZCA9PiBkLktleSAhPSBkYXRhLktleSAmJiBkLlZhbHVlICE9IGRhdGEuVmFsdWUpLmZvckVhY2goZCA9PiBkLlNlbGVjdGVkID0gZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyhkYXRhLlZhbHVlKSkge1xyXG5cclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwvaSB2YWxvcmUvaSBzZWxlemlvbmF0by9pIGRhbGwndXRlbnRlLlxyXG4gICAqIEBwYXJhbSBlbWl0Q2hhbmdlIFNlIHRydWUgc2NhdGVuYSBsJ2V2ZW50byBkaSBvdXRwdXQgZGVsbGEgbW9kaWZpY2EgZGVsIHZhbG9yZSBkaSByZWNvcmRcclxuICAgKi9cclxuICB1cGRhdGVTZWxlY3RlZChlbWl0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICBpZiAoZW1pdENoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGVsIHRpcG8geyBLZXk6IHN0cmluZywgVmFsdWU6IGFueSB9IGRhIHVzYXJlIGNvbWUgc29yZ2VudGUgZGF0aSBwZXIgbGEgZXFwLXNlbGVjdC5cclxuICAgKi9cclxuICBwcml2YXRlIHNldEFycmF5RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlByZXNlbnRhdGlvbk1vZGUgIT0gTGlzdFByZXNlbnRhdGlvbkVudW0uSW1tYWdpbmkpIHtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0aGlzLmZpZWxkLlZhbHVlUGFpcnNbT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKVswXV0pKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoXHJcbiAgICAgICAgICAoayA9PiB0aGlzLmNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoaywgTnVtYmVyKHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2hcclxuICAgICAgICAgIChrID0+IHRoaXMuY3JlYXRlQXJyYXlEYXRhRWxlbWVudChrLCB0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGQuQnV0dG9uSW1hZ2VMaXN0LmZvckVhY2goaSA9PiB7IHRoaXMuY3JlYXRlQXJyYXlEYXRhRWxlbWVudChpLkJ1dHRvbktleSwgaS5CdXR0b25WYWx1ZSwgJ2RhdGE6JyArIGkuRmlsZUNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGkuRmlsZURhdGFCYXNlNjQpOyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTnVtYmVyQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IG51bWJlciwgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBlIGlsIHZhbGlkYXRvciBkZWwgRm9ybUNvbnRyb2wgYXNzb2NpYXRvIGFsIGNhbXBvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLnNldFZhbHVlKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3RyaW5nVG9WYWx1ZVBhaXJzKHZhbHVlU3RyaW5nOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHZhbHVlUGFpcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIC8vIHRoaXMuZGVidWdMb2coJ3N0cmluZ1RvVmFsdWVQYWlyKCkgLSB0aGlzLmZpZWxkLkZvcm11bGEgdGVtcCcsIHZhbHVlU3RyaW5nKVxyXG4gICAgY29uc3Qga2V5dmFscyA9IHZhbHVlU3RyaW5nLnNwbGl0KFwiO1wiKTtcclxuICAgIGtleXZhbHMuZm9yRWFjaCgoeCkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJ0cyA9IHguc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAvLyB0aGlzLmRlYnVnTG9nKCdzdHJpbmdUb1ZhbHVlUGFpcigpIC0gcGFydHMnLCBwYXJ0cyk7XHJcbiAgICAgIC8vIHRoaXMuZGVidWdMb2coJ3N0cmluZ1RvVmFsdWVQYWlyKCkgLSBwYXJ0cy5sZW5naHQnLCBwYXJ0cy5sZW5ndGgpO1xyXG4gICAgICBpZihwYXJ0cy5sZW5ndGggPT0gMSl7XHJcbiAgICAgICAgdmFsdWVQYWlyc1twYXJ0c1swXS50cmltKCldID0gcGFydHNbMF0udHJpbSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgIC8vIHRoaXMuZGVidWdMb2coJ3N0cmluZ1RvVmFsdWVQYWlyKCkgLSBwYXJ0c1swXS50cmltKCknLCBwYXJ0c1swXS50cmltKCkpO1xyXG4gICAgICAgIC8vIHRoaXMuZGVidWdMb2coJ3N0cmluZ1RvVmFsdWVQYWlyKCkgLSBwYXJ0c1sxXS50cmltKCknLCBwYXJ0c1sxXS50cmltKCkpO1xyXG4gICAgICAgIHZhbHVlUGFpcnNbcGFydHNbMF0udHJpbSgpXSA9IHBhcnRzWzFdLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIHRoaXMuZGVidWdMb2coJ3N0cmluZ1RvVmFsdWVQYWlyKCkgLSB2YWx1ZVBhaXJzJywgdmFsdWVQYWlycylcclxuICAgIHJldHVybiB2YWx1ZVBhaXJzO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1zZWxlY3QgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIiBbYXJyYXlEYXRhXT1cImFycmF5RGF0YVwiXHJcbiAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiIWZpZWxkLlJlcXVpcmVkXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInS2V5J1wiXHJcbiAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiIFtpc1JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgW2lzRGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiXHJcbiAgICBbKG5nTW9kZWxJbnB1dCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCIgW2lzTXVsdGlTZWxlY3RdPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIlxyXG4gICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuPC9lcXAtc2VsZWN0PlxyXG5cclxuPGRpdiAqbmdJZj1cImZpZWxkLlByZXNlbnRhdGlvbk1vZGUgIT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ0NvbWJvIGJveCddXCIgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1yLTMgcHMtM1wiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj4ge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIiA6IFwiXCIpfX0gPC9tYXQtbGFiZWw+XHJcbiAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFJBRElPIEJVVFRPTiAoU0VOWkEgU0VMRVpJT05FIE1VTFRJUExBKSAtLT5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgIWZpZWxkLklzTXVsdGlDaG9pY2hlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1zLTMgZC1ibG9ja1wiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFt2YWx1ZV09XCJkYXRhLlZhbHVlXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgQ0hFQ0tCT1ggKFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94ICBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIiBbKG5nTW9kZWwpXT1cImRhdGEuU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5LZXl9fVxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBQVUxTQU5USSAoQ09OIFRFU1RPIE8gSU1NQUdJTkkpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAqbmdJZj1cIltMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10sIExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pXS5pbmNsdWRlcyhmaWVsZC5QcmVzZW50YXRpb25Nb2RlKVwiPlxyXG4gICAgICAgIDxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tMSBkYXRhLWJ1dHRvblwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtYnV0dG9uJzogZGF0YS5TZWxlY3RlZCA9PSB0cnVlLCAncC0wJzogZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bS5JbW1hZ2luaX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uU2VsZWN0Q2xpY2soZGF0YSlcIiBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBURVNUTyBERUwgUFVMU0FOVEUgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ11cIj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBJTU1BR0lORSBERUwgUFVMU0FOVEUgLS0+XHJcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtLkltbWFnaW5pXCIgW3NyY109XCJkYXRhLkltZ1VybFwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=