@eqproject/eqp-dynamic-module 2.10.66 → 2.10.68

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 (73) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +33 -16
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +658 -32
  3. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +2 -2
  4. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +809 -15
  5. package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
  6. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +98 -20
  7. package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +132 -69
  8. package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +159 -24
  9. package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +152 -7
  10. package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +180 -39
  11. package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +100 -78
  12. package/esm2020/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.mjs +103 -88
  13. package/esm2020/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +90 -17
  14. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +217 -54
  15. package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +220 -37
  16. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +263 -29
  17. package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +210 -18
  18. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +35 -13
  19. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
  20. package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +1 -1
  21. package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +4 -3
  22. package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +2 -2
  23. package/esm2020/lib/models/endPointConfiguration.model.mjs +7 -2
  24. package/esm2020/lib/models/fields/actionButton.model.mjs +3 -1
  25. package/esm2020/lib/models/fields/attachmentField.model.mjs +3 -1
  26. package/esm2020/lib/models/fields/booleanField.model.mjs +3 -1
  27. package/esm2020/lib/models/fields/dateField.model.mjs +3 -1
  28. package/esm2020/lib/models/fields/imageField.model.mjs +3 -1
  29. package/esm2020/lib/models/fields/imageSelectorField.model.mjs +3 -1
  30. package/esm2020/lib/models/fields/imageWithMarkersField.model.mjs +3 -1
  31. package/esm2020/lib/models/fields/labelField.model.mjs +3 -1
  32. package/esm2020/lib/models/fields/listValueField.model.mjs +3 -1
  33. package/esm2020/lib/models/fields/numericField.model.mjs +8 -1
  34. package/esm2020/lib/models/fields/textField.model.mjs +3 -1
  35. package/esm2020/lib/models/fields/textareaField.model.mjs +8 -1
  36. package/esm2020/lib/models/form.model.mjs +1 -1
  37. package/esm2020/lib/utils/google-fonts-injector.mjs +78 -0
  38. package/fesm2015/eqproject-eqp-dynamic-module.mjs +3621 -535
  39. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  40. package/fesm2020/eqproject-eqp-dynamic-module.mjs +3530 -538
  41. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  42. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +5 -1
  43. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +74 -6
  44. package/lib/components/private/add-form-field/add-form-field.component.d.ts +208 -1
  45. package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +16 -10
  46. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +17 -33
  47. package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +24 -11
  48. package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +21 -4
  49. package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +20 -16
  50. package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +15 -36
  51. package/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.d.ts +16 -37
  52. package/lib/components/private/field-templates/label-field-template/label-field-template.component.d.ts +16 -12
  53. package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +21 -28
  54. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +25 -18
  55. package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +38 -10
  56. package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +26 -12
  57. package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +12 -2
  58. package/lib/models/endPointConfiguration.model.d.ts +1 -0
  59. package/lib/models/fields/actionButton.model.d.ts +12 -0
  60. package/lib/models/fields/attachmentField.model.d.ts +31 -3
  61. package/lib/models/fields/booleanField.model.d.ts +15 -0
  62. package/lib/models/fields/dateField.model.d.ts +46 -0
  63. package/lib/models/fields/imageField.model.d.ts +9 -0
  64. package/lib/models/fields/imageSelectorField.model.d.ts +23 -0
  65. package/lib/models/fields/imageWithMarkersField.model.d.ts +9 -0
  66. package/lib/models/fields/labelField.model.d.ts +5 -0
  67. package/lib/models/fields/listValueField.model.d.ts +38 -0
  68. package/lib/models/fields/numericField.model.d.ts +34 -0
  69. package/lib/models/fields/textField.model.d.ts +33 -0
  70. package/lib/models/fields/textareaField.model.d.ts +39 -0
  71. package/lib/models/form.model.d.ts +6 -0
  72. package/lib/utils/google-fonts-injector.d.ts +7 -0
  73. package/package.json +3 -3
@@ -867,7 +867,7 @@ export class ListViewFormRecordComponent {
867
867
  }
868
868
  }
869
869
  ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }, { token: i5.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
870
- ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
870
+ ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent", "visualEditorMode", "veSwapFieldCode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger", "veFieldClick"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
871
871
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
872
872
  type: Component,
873
873
  args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
@@ -43,7 +43,7 @@ export class SingleRecordComponent {
43
43
  }
44
44
  }
45
45
  SingleRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SingleRecordComponent, deps: [{ token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
46
- SingleRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SingleRecordComponent, selector: "lib-single-record", inputs: { endPointConfiguration: "endPointConfiguration", record: "record", formulaObject: "formulaObject", pageState: "pageState", userID: "userID", form: "form", showBackButton: "showBackButton", outCompileConfigurations: "outCompileConfigurations", onlyView: "onlyView", actionButtons: "actionButtons", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", out: "out", fireTrigger: "fireTrigger" }, ngImport: i0, template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <!--#region VISUALIZZA CONTENUTO -->\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [actionButtons]=\"actionButtons\"\r\n [showBackButton]=\"false\"\r\n >\r\n </view-form-record>\r\n </ng-container>\r\n <!--#endregion VISUALIZZA CONTENUTO -->\r\n\r\n <!--#region MODIFICA RISPOSTA -->\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n [formulaObject]=\"formulaObject\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n <!--#endregion MODIFICA RISPOSTA -->\r\n\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i4.ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }] });
46
+ SingleRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SingleRecordComponent, selector: "lib-single-record", inputs: { endPointConfiguration: "endPointConfiguration", record: "record", formulaObject: "formulaObject", pageState: "pageState", userID: "userID", form: "form", showBackButton: "showBackButton", outCompileConfigurations: "outCompileConfigurations", onlyView: "onlyView", actionButtons: "actionButtons", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", out: "out", fireTrigger: "fireTrigger" }, ngImport: i0, template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <!--#region VISUALIZZA CONTENUTO -->\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [actionButtons]=\"actionButtons\"\r\n [showBackButton]=\"false\"\r\n >\r\n </view-form-record>\r\n </ng-container>\r\n <!--#endregion VISUALIZZA CONTENUTO -->\r\n\r\n <!--#region MODIFICA RISPOSTA -->\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n [formulaObject]=\"formulaObject\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n <!--#endregion MODIFICA RISPOSTA -->\r\n\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent", "visualEditorMode", "veSwapFieldCode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger", "veFieldClick"] }, { kind: "component", type: i4.ViewFormRecordComponent, selector: "view-form-record", inputs: ["endPointConfiguration", "record", "showBackButton", "actionButtons"], outputs: ["goBackEvent"] }] });
47
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SingleRecordComponent, decorators: [{
48
48
  type: Component,
49
49
  args: [{ selector: 'lib-single-record', template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <!--#region VISUALIZZA CONTENUTO -->\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [actionButtons]=\"actionButtons\"\r\n [showBackButton]=\"false\"\r\n >\r\n </view-form-record>\r\n </ng-container>\r\n <!--#endregion VISUALIZZA CONTENUTO -->\r\n\r\n <!--#region MODIFICA RISPOSTA -->\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n [formulaObject]=\"formulaObject\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n <!--#endregion MODIFICA RISPOSTA -->\r\n\r\n</ng-container>" }]
@@ -6,6 +6,7 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/material/icon";
7
7
  import * as i2 from "@angular/forms";
8
8
  import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/cdk/drag-drop";
9
10
  export class TmwImageMarkerComponent {
10
11
  constructor() {
11
12
  this.inConfig = false;
@@ -311,10 +312,10 @@ export class TmwImageMarkerComponent {
311
312
  }
312
313
  }
313
314
  TmwImageMarkerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageMarkerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
314
- TmwImageMarkerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageMarkerComponent, selector: "tmw-image-marker", inputs: { src: "src", width: "width", height: "height", inConfig: "inConfig", savedMarkers: "savedMarkers", outputMimeType: "outputMimeType", outputQuality: "outputQuality", forceSizeCanvas: "forceSizeCanvas" }, outputs: { closeDialog: "closeDialog", save: "save" }, ngImport: i0, template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"toolbox\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n\r\n <div class=\"legend_overflow_container\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-12 mt-2\" *ngIf=\"!inConfig\">\r\n <button class=\"btn btn-success markerButton\" (click)=\"saveImage()\">Salva Immagine</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-warning markerButton\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n </div> \r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-danger markerButton\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n\r\n </div>\r\n</div>", styles: [".canvas-container{display:flex;flex-flow:row}.canvas-container>.toolbox{width:100%;padding:0 10px}.canvas-container>.toolbox .markerButton{width:100%}.canvas-container>.toolbox .legend_overflow_container{overflow-y:auto;max-height:500px}.canvas-container>.toolbox .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;width:30px;background-color:#00008b;color:#fff;margin-right:5px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.textarea{width:100%;height:35px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;width:30px;background-color:red;color:#fff;margin-left:5px;cursor:pointer}.canvas-container>.toolbox .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
315
+ TmwImageMarkerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageMarkerComponent, selector: "tmw-image-marker", inputs: { src: "src", width: "width", height: "height", inConfig: "inConfig", savedMarkers: "savedMarkers", outputMimeType: "outputMimeType", outputQuality: "outputQuality", forceSizeCanvas: "forceSizeCanvas" }, outputs: { closeDialog: "closeDialog", save: "save" }, ngImport: i0, template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] });
315
316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageMarkerComponent, decorators: [{
316
317
  type: Component,
317
- args: [{ selector: 'tmw-image-marker', template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"toolbox\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n\r\n <div class=\"legend_overflow_container\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-12 mt-2\" *ngIf=\"!inConfig\">\r\n <button class=\"btn btn-success markerButton\" (click)=\"saveImage()\">Salva Immagine</button>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-warning markerButton\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n </div> \r\n <div class=\"col-12 mt-2\">\r\n <button class=\"btn btn-danger markerButton\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n\r\n </div>\r\n</div>", styles: [".canvas-container{display:flex;flex-flow:row}.canvas-container>.toolbox{width:100%;padding:0 10px}.canvas-container>.toolbox .markerButton{width:100%}.canvas-container>.toolbox .legend_overflow_container{overflow-y:auto;max-height:500px}.canvas-container>.toolbox .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;width:30px;background-color:#00008b;color:#fff;margin-right:5px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.textarea{width:100%;height:35px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.toolbox .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;width:30px;background-color:red;color:#fff;margin-left:5px;cursor:pointer}.canvas-container>.toolbox .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px}\n"] }]
318
+ args: [{ selector: 'tmw-image-marker', template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"] }]
318
319
  }], ctorParameters: function () { return []; }, propDecorators: { src: [{
319
320
  type: Input
320
321
  }], width: [{
@@ -348,4 +349,4 @@ export class OutMarker {
348
349
  }
349
350
  export class MarkedImage {
350
351
  }
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLW1hcmtlci90bXctaW1hZ2UtbWFya2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtbWFya2VyL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7O0FBT2pFLE1BQU0sT0FBTyx1QkFBdUI7SUFrQ2xDO1FBN0JTLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFFckIsbUJBQWMsR0FBRyxZQUFZLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxHQUFHLENBQUM7UUFFcEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFN0IsZ0JBQVcsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMzRCxTQUFJLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFHNUUsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBR2xCLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRXBDLFlB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QztJQUMxQixDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVELEdBQUcsQ0FBQyxFQUFFO1FBQ0osYUFBYSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDOztxSEF6WVUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsbVVDVnBDLG9vREFvQ007NEZEMUJPLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7MEVBTW5CLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRVUsZUFBZTtzQkFBOUIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTs7QUErWFQsTUFBTSxPQUFPLE1BQU07SUFBbkI7UUFPRSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUlFLGdCQUFXLEdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmFicmljIH0gZnJvbSAnZmFicmljJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bXctaW1hZ2UtbWFya2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbXdJbWFnZU1hcmtlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzYXZlZE1hcmtlcnM6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdXRwdXRNaW1lVHlwZSA9ICdpbWFnZS9qcGVnJztcclxuICBASW5wdXQoKSBwdWJsaWMgb3V0cHV0UXVhbGl0eSA9IDAuODtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGZvcmNlU2l6ZUNhbnZhcyA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBjbG9zZURpYWxvZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlOiBFdmVudEVtaXR0ZXI8TWFya2VkSW1hZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXJrZWRJbWFnZT4oKTtcclxuXHJcbiAgY29tcG9uZW50R3VpZDogc3RyaW5nO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjYW52YXM6IGZhYnJpYy5DYW52YXM7XHJcbiAgcHJpdmF0ZSBzdGFjazogZmFicmljLk9iamVjdFtdID0gW107XHJcblxyXG4gIG1hcmtlcnM6IEFycmF5PE1hcmtlcj4gPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIG91dG1hcmtlcnM6IEFycmF5PE91dE1hcmtlcj4gPSBuZXcgQXJyYXk8T3V0TWFya2VyPigpO1xyXG4gIG1hcmtlZEltYWdlOiBNYXJrZWRJbWFnZSA9IG5ldyBNYXJrZWRJbWFnZSgpO1xyXG5cclxuICBjYW5VbmRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuUmVkbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHByaXZhdGUgaW1hZ2VVc2VkPzogZmFicmljLkltYWdlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBDcmVhemlvbmUgZGkgdW5hIEdVSUQgdW5pY2EgcGVyIGlsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuY29tcG9uZW50R3VpZCA9ICd4eHh4LXh4eHgteHh4eC14eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcclxuICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb21wb25lbnRHdWlkKTtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCwge1xyXG4gICAgICBob3ZlckN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICBpc0RyYXdpbmdNb2RlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcclxuXHJcbiAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21TcmModGhpcy5zcmMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gd2lkdGggb3IgaGlnaHQgZ2l2ZW4gIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbigncGF0aDpjcmVhdGVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0YWNrID0gW107XHJcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgIH0pO1xyXG5cclxuICB9ICBcclxuXHJcbiAgbmV3TWFya2VyKCl7XHJcbiAgICB2YXIgc3RhcnRYID0gNDA7XHJcbiAgICB2YXIgc3RhcnRZID0gNDA7XHJcblxyXG4gICAgLy92YXIgbGVmdCA9IHRoaXMucmFuZG9tSW50RnJvbUludGVydmFsKHN0YXJ0WC0xMDAsc3RhcnRYKzEwMCk7XHJcbiAgICAvL3ZhciB0b3AgPSB0aGlzLnJhbmRvbUludEZyb21JbnRlcnZhbChzdGFydFktMTAwLHN0YXJ0WSsxMDApO1xyXG4gICAgdmFyIGxlZnQgPSBzdGFydFg7XHJcbiAgICB2YXIgdG9wID0gc3RhcnRZO1xyXG4gICAgdmFyIGRlc2NyaXB0aW9uOiAnJztcclxuICAgIHZhciBjYXB0aW9uID0gJzAnO1xyXG5cclxuICAgIC8vIENyZWF6aW9uZSBkZWxsYSBjYXB0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAwMDA7IGkrKyl7XHJcbiAgICAgIGlmICh0aGlzLm1hcmtlcnMuZmluZCh4ID0+IHguY2FwdGlvbiA9PSBpLnRvU3RyaW5nKCkpID09IG51bGwpe1xyXG4gICAgICAgIGNhcHRpb24gPSBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIHRoaXMuY3JlYXRlTWFya2VyKHRvcCxsZWZ0LGNhcHRpb24sZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWFya2VyKHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGNhcHRpb246IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyl7XHJcblxyXG4gICAgLypcclxuICAgICogQ3JlbyB1biBudW92byBNYXJrZXJcclxuICAgICovXHJcblxyXG4gICAgLy8gQ3JlbyBpbCBjZXJjaGlvXHJcbiAgICB2YXIgY2lyY2xlID0gbmV3IGZhYnJpYy5DaXJjbGUoe1xyXG4gICAgICByYWRpdXM6IDMwLFxyXG4gICAgICBvcGFjaXR5OiAwLjcsXHJcbiAgICAgIGZpbGw6ICdkYXJrYmx1ZScsXHJcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6ICdjZW50ZXInLCBcclxuICAgICAgb3JpZ2luWTogJ2NlbnRlcicgXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIHRlc3RvIGRlbnRybyBhbCBjZXJjaGlvIFxyXG4gICAgdmFyIHRleHQgPSBuZXcgZmFicmljLlRleHQoY2FwdGlvbixcclxuICAgIHsgIGZvbnRTaXplOiAyNSwgXHJcbiAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsIFxyXG4gICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxyXG4gICAgICAgIGZpbGwgOiAnd2hpdGUnIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIGdydXBwbyBuZWwgcXVhbGUgbWV0dG8gY2VyY2hpbyBlIHRlc3RvIGluIG1vZG8gY2hlIHNpIG11b3Zhbm8gaW5zaWVtZVxyXG4gICAgdmFyIGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbIGNpcmNsZSwgdGV4dCBdLCB7ICBsZWZ0OiBsZWZ0LCB0b3A6IHRvcCB9KTsgICAgXHJcblxyXG4gICAgLy8gQ3JlbyB1biBvZ2dldHRvIG1hcmtlciBjaGUgY29udGllbmUgZ2xpIGVsZW1lbnRpIGF0b21pY2kuIFNlcnZlIHBlciBsZSBjYW5jZWxsYXppb25pIGUgaWwgcm9sbGJhY2svbW9kaWZpY2EgZGVnbGkgZWxlbWVudGlcclxuICAgIHZhciBtYXJrZXI6IE1hcmtlciA9IG5ldyBNYXJrZXIoKTtcclxuICAgIG1hcmtlci5jaXJjbGUgPSBjaXJjbGU7XHJcbiAgICBtYXJrZXIudGV4dCA9IHRleHQ7XHJcbiAgICBtYXJrZXIuZ3JvdXAgPSBncm91cDtcclxuICAgIG1hcmtlci5jYXB0aW9uID0gY2FwdGlvbjtcclxuICAgIG1hcmtlci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBuZWxsYSBsaXN0YSBkZWkgZ3J1cHBpXHJcbiAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xyXG4gICAgdGhpcy5tYXJrZXJzLnNvcnQoKGEsYik9PiB7IHJldHVybiBOdW1iZXIoYS5jYXB0aW9uKSAtIE51bWJlcihiLmNhcHRpb24pIH0pO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBhbGwnaW1tYWdpbmUgYSBzY2hlcm1vXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTWFya2VyQnlJbmRleChpbmRleDogbnVtYmVyKXtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZSh0aGlzLm1hcmtlcnNbaW5kZXhdLmdyb3VwKTtcclxuICAgIHRoaXMubWFya2Vycy5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxNYXJrZXJzKCl7XHJcbiAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtYXJrZXIuZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1hcmtlcnMgPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVbmRvUmVkbygpIHtcclxuICAgIHRoaXMuY2FuVW5kbyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5jYW5SZWRvID0gdGhpcy5zdGFjay5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLypcclxuXHJcbiAgICAvLyBBY3Rpb25zXHJcbiAgICBwdWJsaWMgdW5kbygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FuVW5kbykge1xyXG4gICAgICAgIGNvbnN0IGxhc3RJZCA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxO1xyXG4gICAgICAgIGNvbnN0IGxhc3RPYmogPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKClbbGFzdElkXTtcclxuICAgICAgICB0aGlzLnN0YWNrLnB1c2gobGFzdE9iaik7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKGxhc3RPYmopO1xyXG4gICAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgcHVibGljIHJlZG8oKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhblJlZG8pIHtcclxuICAgICAgICBjb25zdCBmaXJzdEluU3RhY2sgPSB0aGlzLnN0YWNrLnNwbGljZSgtMSwgMSlbMF07XHJcbiAgICAgICAgaWYgKGZpcnN0SW5TdGFjaykge1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMuaW5zZXJ0QXQoZmlyc3RJblN0YWNrLCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIHB1YmxpYyBjbGVhckNhbnZhcygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKC4uLnRoaXMuY2FudmFzLmdldE9iamVjdHMoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4qL1xyXG5cclxuICBwcml2YXRlIGltcG9ydFBob3RvRnJvbVNyYyhzcmM6IHN0cmluZykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGlzRmlyc3RUcnkgPSB0cnVlO1xyXG4gICAgY29uc3QgaW1nRWwgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZ0VsLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICBpbWdFbC5zcmMgPSBzcmM7XHJcbiAgICBpbWdFbC5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXRyeSB3aXRoIGNvcnMgcHJveHlcclxuICAgICAgaWYgKGlzRmlyc3RUcnkpIHtcclxuICAgICAgICBpbWdFbC5zcmMgPSAnaHR0cHM6Ly9jb3JzLWFueXdoZXJlLmhlcm9rdWFwcC5jb20vJyArIHRoaXMuc3JjO1xyXG4gICAgICAgIGlzRmlyc3RUcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJDT1JTIEVycm9yXCI7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbWdFbC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkID0gbmV3IGZhYnJpYy5JbWFnZShpbWdFbCk7XHJcblxyXG4gICAgICB0aGlzLmltYWdlVXNlZC5jbG9uZUFzSW1hZ2UoaW1hZ2UgPT4ge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IGltZ0VsLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSBpbWdFbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByaWNhbGNvbG8gbGUgZGltZW5zaW9uaSBkZWxsJ2ltbWFnaW5lIHBlciBmYXJsYSBlbnRyYXJlIG5lbGxvIHNjaGVybW9cclxuICAgICAgICAvLyBkaW1pbnVpc2NvIGRpIHVuIDUlIGFsbGEgdm9sdGEgbGUgZGltZW5zaW9uaSBmaW5vIGEgcmllbnRyYXJlIG5lbGwnODUlIGRlbGxhIGdyYW5kZXp6YSBkZWxsYSBmaW5lc3RyYVxyXG4gICAgICAgIGxldCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGxldCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgd2hpbGUod2lkdGggPiB3aW5kb3dXaWR0aCAqIDAuODUpe1xyXG4gICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDAuOTU7XHJcbiAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiAwLjk1O1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZShoZWlnaHQgPiB3aW5kb3dIZWlnaHQgKiAwLjg1KXtcclxuICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAwLjk1O1xyXG4gICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogMC45NTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpbWFnZS5zY2FsZVRvV2lkdGgod2lkdGgsIGZhbHNlKTtcclxuICAgICAgICBpbWFnZS5zY2FsZVRvSGVpZ2h0KGhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRCYWNrZ3JvdW5kSW1hZ2UoaW1hZ2UsICgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlU2l6ZUNhbnZhcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKHdpZHRoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aChpbWFnZS5nZXRTY2FsZWRXaWR0aCgpKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaW1hZ2UuZ2V0U2NhbGVkSGVpZ2h0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksIHtcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2F2ZWRNYXJrZXJzICE9IG51bGwpeyB0aGlzLmxvYWRNYXJrZXJzKCk7IH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBsb2FkTWFya2Vycygpe1xyXG4gICAgdmFyIG1hcmtlcnNPYmo6IEFycmF5PE91dE1hcmtlcj4gPSBKU09OLnBhcnNlKHRoaXMuc2F2ZWRNYXJrZXJzKTtcclxuICAgIG1hcmtlcnNPYmouZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTWFya2VyKG1hcmtlci50b3AsbWFya2VyLmxlZnQsbWFya2VyLmNhcHRpb24sbWFya2VyLmRlc2NyaXB0aW9uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVJbWFnZSgpe1xyXG5cclxuICAgIHRoaXMub3V0bWFya2VycyA9IG5ldyBBcnJheTxPdXRNYXJrZXI+KCk7XHJcblxyXG4gICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4ge1xyXG4gICAgICB2YXIgb3V0bWFya2VyID0gbmV3IE91dE1hcmtlcigpO1xyXG4gICAgICBvdXRtYXJrZXIuY2FwdGlvbiA9IG1hcmtlci5jYXB0aW9uO1xyXG4gICAgICBvdXRtYXJrZXIuZGVzY3JpcHRpb24gPSBtYXJrZXIuZGVzY3JpcHRpb247XHJcbiAgICAgIG91dG1hcmtlci50b3AgPSBtYXJrZXIuZ3JvdXAudG9wO1xyXG4gICAgICBvdXRtYXJrZXIubGVmdCA9IG1hcmtlci5ncm91cC5sZWZ0O1xyXG4gICAgICB0aGlzLm91dG1hcmtlcnMucHVzaChvdXRtYXJrZXIpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWQgPSBuZXcgZmFicmljLkNhbnZhcyhjYW52YXNTY2FsZWRFbGVtZW50KTtcclxuICAgICAgY2FudmFzU2NhbGVkLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgICBuZXcgT2JzZXJ2YWJsZTxmYWJyaWMuQ2FudmFzPihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VVc2VkKSB7XHJcblxyXG4gICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuaW1hZ2VVc2VkLCAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpbWcpIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcignSW1wb3NzaWJsZSB0byBkcmF3IHRoZSBpbWFnZSBvbiB0aGUgdGVtcG9yYXJ5IGNhbnZhcycpKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRXaWR0aChpbWcud2lkdGgpO1xyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRIZWlnaHQoaW1nLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGxldCBwcm9jZXNzID0gb2YoY2FudmFzU2NhbGVkKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmF0aW9YID0gY2FudmFzU2NhbGVkLmdldFdpZHRoKCkgLyB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgICAgICBjb25zdCByYXRpb1kgPSBjYW52YXNTY2FsZWQuZ2V0SGVpZ2h0KCkgLyB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5mb3JFYWNoKChvcmlnaW5hbE9iamVjdDogZmFicmljLk9iamVjdCwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3MucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGZhYnJpYy5DYW52YXM+KG9ic2VydmVyT2JqZWN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPYmplY3QuY2xvbmUoKGNsb25lZE9iamVjdDogZmFicmljLk9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zZXQoJ2xlZnQnLCBvcmlnaW5hbE9iamVjdC5sZWZ0ICogcmF0aW9YKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2V0KCd0b3AnLCBvcmlnaW5hbE9iamVjdC50b3AgKiByYXRpb1kpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvV2lkdGgob3JpZ2luYWxPYmplY3Qud2lkdGggKiByYXRpb1gpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvSGVpZ2h0KG9yaWdpbmFsT2JqZWN0LmhlaWdodCAqIHJhdGlvWSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5pbnNlcnRBdChjbG9uZWRPYmplY3QsIGksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYW52YXNTY2FsZWQucmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyT2JqZWN0Lm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlck9iamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcHJvY2VzcztcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNhbnZhc1NjYWxlZC5yZW5kZXJBbGwoKTtcclxuICAgICAgICBjYW52YXNTY2FsZWQuZ2V0RWxlbWVudCgpLnRvQmxvYihcclxuICAgICAgICAgIChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtlZEltYWdlLm91dG1hcmtlcnMgPSB0aGlzLm91dG1hcmtlcnM7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHRoaXMubWFya2VkSW1hZ2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMub3V0cHV0TWltZVR5cGUsXHJcbiAgICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEVsZW1lbnQoKS50b0Jsb2IoXHJcbiAgICAgICAgKGRhdGE6IEJsb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5tYXJrZWRJbWFnZS5vdXRtYXJrZXJzID0gdGhpcy5vdXRtYXJrZXJzO1xyXG4gICAgICAgICAgdGhpcy5zYXZlLmVtaXQodGhpcy5tYXJrZWRJbWFnZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLm91dHB1dE1pbWVUeXBlLFxyXG4gICAgICAgIHRoaXMub3V0cHV0UXVhbGl0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvL3RoaXMuc2F2ZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKXtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2cuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tSW50RnJvbUludGVydmFsKG1pbiwgbWF4KSB7IC8vIG1pbiBhbmQgbWF4IGluY2x1ZGVkIFxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcclxuICB9XHJcblxyXG4gIGxvZyhlbCl7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaW1hZ2VNYXJrZXIgZWxlbWVudCBcIixlbCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlciB7XHJcbiAgY2lyY2xlOiBmYWJyaWMuQ2lyY2xlO1xyXG4gIHRleHQ6IGZhYnJpYy5UZXh0O1xyXG4gIGdyb3VwOiBmYWJyaWMuR3JvdXA7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE91dE1hcmtlciB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlZEltYWdlIHtcclxuICBvdXRtYXJrZXJzOiBBcnJheTxPdXRNYXJrZXI+O1xyXG4gIGltYWdlOiBCbG9iO1xyXG59IiwiPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYW52YXNcIj5cclxuICAgICAgICA8Y2FudmFzIFtpZF09XCJjb21wb25lbnRHdWlkXCI+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYm94XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtYXJrZXJCdXR0b25cIiAoY2xpY2spPVwibmV3TWFya2VyKClcIj5DcmVhIG51b3ZvIG1hcmtlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZF9vdmVyZmxvd19jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kX2NvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBtYXJrZXIgb2YgbWFya2VyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGlvblwiIFtpbm5lckhUTUxdPVwibWFya2VyLmNhcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRhcmVhXCI+PHRleHRhcmVhICBbKG5nTW9kZWwpXT1cIm1hcmtlci5kZXNjcmlwdGlvblwiIChjbGljayk9XCJsb2cobWFya2VyLmRlc2NyaXB0aW9uKVwiPjwvdGV4dGFyZWE+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGVcIiAoY2xpY2spPVwiZGVsZXRlTWFya2VyQnlJbmRleChpKVwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCIgKm5nSWY9XCIhaW5Db25maWdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgbWFya2VyQnV0dG9uXCIgKGNsaWNrKT1cInNhdmVJbWFnZSgpXCI+U2FsdmEgSW1tYWdpbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2FybmluZyBtYXJrZXJCdXR0b25cIiAoY2xpY2spPVwicmVtb3ZlQWxsTWFya2VycygpXCI+UmltdW92aSB0dXR0aSBpIG1hcmtlcnM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIG1hcmtlckJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCI+QW5udWxsYSBEaXNlZ25vPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLW1hcmtlci90bXctaW1hZ2UtbWFya2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtbWFya2VyL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU9qRSxNQUFNLE9BQU8sdUJBQXVCO0lBa0NsQztRQTdCUyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRXJCLG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRXBCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTdCLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0QsU0FBSSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBRzVFLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUdsQixVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUVwQyxZ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QUM7SUFDMUIsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFRCxHQUFHLENBQUMsRUFBRTtRQUNKLGFBQWEsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7cUhBellVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLG1VQ1ZwQyx1MUNBcUJBOzRGRFhhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7MEVBTW5CLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRVUsZUFBZTtzQkFBOUIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTs7QUErWFQsTUFBTSxPQUFPLE1BQU07SUFBbkI7UUFPRSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUlFLGdCQUFXLEdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmFicmljIH0gZnJvbSAnZmFicmljJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bXctaW1hZ2UtbWFya2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbXdJbWFnZU1hcmtlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzYXZlZE1hcmtlcnM6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdXRwdXRNaW1lVHlwZSA9ICdpbWFnZS9qcGVnJztcclxuICBASW5wdXQoKSBwdWJsaWMgb3V0cHV0UXVhbGl0eSA9IDAuODtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGZvcmNlU2l6ZUNhbnZhcyA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBjbG9zZURpYWxvZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlOiBFdmVudEVtaXR0ZXI8TWFya2VkSW1hZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXJrZWRJbWFnZT4oKTtcclxuXHJcbiAgY29tcG9uZW50R3VpZDogc3RyaW5nO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjYW52YXM6IGZhYnJpYy5DYW52YXM7XHJcbiAgcHJpdmF0ZSBzdGFjazogZmFicmljLk9iamVjdFtdID0gW107XHJcblxyXG4gIG1hcmtlcnM6IEFycmF5PE1hcmtlcj4gPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIG91dG1hcmtlcnM6IEFycmF5PE91dE1hcmtlcj4gPSBuZXcgQXJyYXk8T3V0TWFya2VyPigpO1xyXG4gIG1hcmtlZEltYWdlOiBNYXJrZWRJbWFnZSA9IG5ldyBNYXJrZWRJbWFnZSgpO1xyXG5cclxuICBjYW5VbmRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuUmVkbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHByaXZhdGUgaW1hZ2VVc2VkPzogZmFicmljLkltYWdlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBDcmVhemlvbmUgZGkgdW5hIEdVSUQgdW5pY2EgcGVyIGlsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuY29tcG9uZW50R3VpZCA9ICd4eHh4LXh4eHgteHh4eC14eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcclxuICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb21wb25lbnRHdWlkKTtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCwge1xyXG4gICAgICBob3ZlckN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICBpc0RyYXdpbmdNb2RlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcclxuXHJcbiAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21TcmModGhpcy5zcmMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gd2lkdGggb3IgaGlnaHQgZ2l2ZW4gIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbigncGF0aDpjcmVhdGVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0YWNrID0gW107XHJcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgIH0pO1xyXG5cclxuICB9ICBcclxuXHJcbiAgbmV3TWFya2VyKCl7XHJcbiAgICB2YXIgc3RhcnRYID0gNDA7XHJcbiAgICB2YXIgc3RhcnRZID0gNDA7XHJcblxyXG4gICAgLy92YXIgbGVmdCA9IHRoaXMucmFuZG9tSW50RnJvbUludGVydmFsKHN0YXJ0WC0xMDAsc3RhcnRYKzEwMCk7XHJcbiAgICAvL3ZhciB0b3AgPSB0aGlzLnJhbmRvbUludEZyb21JbnRlcnZhbChzdGFydFktMTAwLHN0YXJ0WSsxMDApO1xyXG4gICAgdmFyIGxlZnQgPSBzdGFydFg7XHJcbiAgICB2YXIgdG9wID0gc3RhcnRZO1xyXG4gICAgdmFyIGRlc2NyaXB0aW9uOiAnJztcclxuICAgIHZhciBjYXB0aW9uID0gJzAnO1xyXG5cclxuICAgIC8vIENyZWF6aW9uZSBkZWxsYSBjYXB0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAwMDA7IGkrKyl7XHJcbiAgICAgIGlmICh0aGlzLm1hcmtlcnMuZmluZCh4ID0+IHguY2FwdGlvbiA9PSBpLnRvU3RyaW5nKCkpID09IG51bGwpe1xyXG4gICAgICAgIGNhcHRpb24gPSBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIHRoaXMuY3JlYXRlTWFya2VyKHRvcCxsZWZ0LGNhcHRpb24sZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWFya2VyKHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGNhcHRpb246IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyl7XHJcblxyXG4gICAgLypcclxuICAgICogQ3JlbyB1biBudW92byBNYXJrZXJcclxuICAgICovXHJcblxyXG4gICAgLy8gQ3JlbyBpbCBjZXJjaGlvXHJcbiAgICB2YXIgY2lyY2xlID0gbmV3IGZhYnJpYy5DaXJjbGUoe1xyXG4gICAgICByYWRpdXM6IDMwLFxyXG4gICAgICBvcGFjaXR5OiAwLjcsXHJcbiAgICAgIGZpbGw6ICdkYXJrYmx1ZScsXHJcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6ICdjZW50ZXInLCBcclxuICAgICAgb3JpZ2luWTogJ2NlbnRlcicgXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIHRlc3RvIGRlbnRybyBhbCBjZXJjaGlvIFxyXG4gICAgdmFyIHRleHQgPSBuZXcgZmFicmljLlRleHQoY2FwdGlvbixcclxuICAgIHsgIGZvbnRTaXplOiAyNSwgXHJcbiAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsIFxyXG4gICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxyXG4gICAgICAgIGZpbGwgOiAnd2hpdGUnIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIGdydXBwbyBuZWwgcXVhbGUgbWV0dG8gY2VyY2hpbyBlIHRlc3RvIGluIG1vZG8gY2hlIHNpIG11b3Zhbm8gaW5zaWVtZVxyXG4gICAgdmFyIGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbIGNpcmNsZSwgdGV4dCBdLCB7ICBsZWZ0OiBsZWZ0LCB0b3A6IHRvcCB9KTsgICAgXHJcblxyXG4gICAgLy8gQ3JlbyB1biBvZ2dldHRvIG1hcmtlciBjaGUgY29udGllbmUgZ2xpIGVsZW1lbnRpIGF0b21pY2kuIFNlcnZlIHBlciBsZSBjYW5jZWxsYXppb25pIGUgaWwgcm9sbGJhY2svbW9kaWZpY2EgZGVnbGkgZWxlbWVudGlcclxuICAgIHZhciBtYXJrZXI6IE1hcmtlciA9IG5ldyBNYXJrZXIoKTtcclxuICAgIG1hcmtlci5jaXJjbGUgPSBjaXJjbGU7XHJcbiAgICBtYXJrZXIudGV4dCA9IHRleHQ7XHJcbiAgICBtYXJrZXIuZ3JvdXAgPSBncm91cDtcclxuICAgIG1hcmtlci5jYXB0aW9uID0gY2FwdGlvbjtcclxuICAgIG1hcmtlci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBuZWxsYSBsaXN0YSBkZWkgZ3J1cHBpXHJcbiAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xyXG4gICAgdGhpcy5tYXJrZXJzLnNvcnQoKGEsYik9PiB7IHJldHVybiBOdW1iZXIoYS5jYXB0aW9uKSAtIE51bWJlcihiLmNhcHRpb24pIH0pO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBhbGwnaW1tYWdpbmUgYSBzY2hlcm1vXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTWFya2VyQnlJbmRleChpbmRleDogbnVtYmVyKXtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZSh0aGlzLm1hcmtlcnNbaW5kZXhdLmdyb3VwKTtcclxuICAgIHRoaXMubWFya2Vycy5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxNYXJrZXJzKCl7XHJcbiAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtYXJrZXIuZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1hcmtlcnMgPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVbmRvUmVkbygpIHtcclxuICAgIHRoaXMuY2FuVW5kbyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5jYW5SZWRvID0gdGhpcy5zdGFjay5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLypcclxuXHJcbiAgICAvLyBBY3Rpb25zXHJcbiAgICBwdWJsaWMgdW5kbygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FuVW5kbykge1xyXG4gICAgICAgIGNvbnN0IGxhc3RJZCA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxO1xyXG4gICAgICAgIGNvbnN0IGxhc3RPYmogPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKClbbGFzdElkXTtcclxuICAgICAgICB0aGlzLnN0YWNrLnB1c2gobGFzdE9iaik7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKGxhc3RPYmopO1xyXG4gICAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgcHVibGljIHJlZG8oKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhblJlZG8pIHtcclxuICAgICAgICBjb25zdCBmaXJzdEluU3RhY2sgPSB0aGlzLnN0YWNrLnNwbGljZSgtMSwgMSlbMF07XHJcbiAgICAgICAgaWYgKGZpcnN0SW5TdGFjaykge1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMuaW5zZXJ0QXQoZmlyc3RJblN0YWNrLCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIHB1YmxpYyBjbGVhckNhbnZhcygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKC4uLnRoaXMuY2FudmFzLmdldE9iamVjdHMoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4qL1xyXG5cclxuICBwcml2YXRlIGltcG9ydFBob3RvRnJvbVNyYyhzcmM6IHN0cmluZykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGlzRmlyc3RUcnkgPSB0cnVlO1xyXG4gICAgY29uc3QgaW1nRWwgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZ0VsLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICBpbWdFbC5zcmMgPSBzcmM7XHJcbiAgICBpbWdFbC5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXRyeSB3aXRoIGNvcnMgcHJveHlcclxuICAgICAgaWYgKGlzRmlyc3RUcnkpIHtcclxuICAgICAgICBpbWdFbC5zcmMgPSAnaHR0cHM6Ly9jb3JzLWFueXdoZXJlLmhlcm9rdWFwcC5jb20vJyArIHRoaXMuc3JjO1xyXG4gICAgICAgIGlzRmlyc3RUcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJDT1JTIEVycm9yXCI7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbWdFbC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkID0gbmV3IGZhYnJpYy5JbWFnZShpbWdFbCk7XHJcblxyXG4gICAgICB0aGlzLmltYWdlVXNlZC5jbG9uZUFzSW1hZ2UoaW1hZ2UgPT4ge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IGltZ0VsLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSBpbWdFbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByaWNhbGNvbG8gbGUgZGltZW5zaW9uaSBkZWxsJ2ltbWFnaW5lIHBlciBmYXJsYSBlbnRyYXJlIG5lbGxvIHNjaGVybW9cclxuICAgICAgICAvLyBkaW1pbnVpc2NvIGRpIHVuIDUlIGFsbGEgdm9sdGEgbGUgZGltZW5zaW9uaSBmaW5vIGEgcmllbnRyYXJlIG5lbGwnODUlIGRlbGxhIGdyYW5kZXp6YSBkZWxsYSBmaW5lc3RyYVxyXG4gICAgICAgIGxldCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGxldCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgd2hpbGUod2lkdGggPiB3aW5kb3dXaWR0aCAqIDAuODUpe1xyXG4gICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDAuOTU7XHJcbiAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiAwLjk1O1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZShoZWlnaHQgPiB3aW5kb3dIZWlnaHQgKiAwLjg1KXtcclxuICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAwLjk1O1xyXG4gICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogMC45NTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpbWFnZS5zY2FsZVRvV2lkdGgod2lkdGgsIGZhbHNlKTtcclxuICAgICAgICBpbWFnZS5zY2FsZVRvSGVpZ2h0KGhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRCYWNrZ3JvdW5kSW1hZ2UoaW1hZ2UsICgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlU2l6ZUNhbnZhcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKHdpZHRoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aChpbWFnZS5nZXRTY2FsZWRXaWR0aCgpKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaW1hZ2UuZ2V0U2NhbGVkSGVpZ2h0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksIHtcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2F2ZWRNYXJrZXJzICE9IG51bGwpeyB0aGlzLmxvYWRNYXJrZXJzKCk7IH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBsb2FkTWFya2Vycygpe1xyXG4gICAgdmFyIG1hcmtlcnNPYmo6IEFycmF5PE91dE1hcmtlcj4gPSBKU09OLnBhcnNlKHRoaXMuc2F2ZWRNYXJrZXJzKTtcclxuICAgIG1hcmtlcnNPYmouZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTWFya2VyKG1hcmtlci50b3AsbWFya2VyLmxlZnQsbWFya2VyLmNhcHRpb24sbWFya2VyLmRlc2NyaXB0aW9uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVJbWFnZSgpe1xyXG5cclxuICAgIHRoaXMub3V0bWFya2VycyA9IG5ldyBBcnJheTxPdXRNYXJrZXI+KCk7XHJcblxyXG4gICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4ge1xyXG4gICAgICB2YXIgb3V0bWFya2VyID0gbmV3IE91dE1hcmtlcigpO1xyXG4gICAgICBvdXRtYXJrZXIuY2FwdGlvbiA9IG1hcmtlci5jYXB0aW9uO1xyXG4gICAgICBvdXRtYXJrZXIuZGVzY3JpcHRpb24gPSBtYXJrZXIuZGVzY3JpcHRpb247XHJcbiAgICAgIG91dG1hcmtlci50b3AgPSBtYXJrZXIuZ3JvdXAudG9wO1xyXG4gICAgICBvdXRtYXJrZXIubGVmdCA9IG1hcmtlci5ncm91cC5sZWZ0O1xyXG4gICAgICB0aGlzLm91dG1hcmtlcnMucHVzaChvdXRtYXJrZXIpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWQgPSBuZXcgZmFicmljLkNhbnZhcyhjYW52YXNTY2FsZWRFbGVtZW50KTtcclxuICAgICAgY2FudmFzU2NhbGVkLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgICBuZXcgT2JzZXJ2YWJsZTxmYWJyaWMuQ2FudmFzPihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VVc2VkKSB7XHJcblxyXG4gICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuaW1hZ2VVc2VkLCAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpbWcpIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcignSW1wb3NzaWJsZSB0byBkcmF3IHRoZSBpbWFnZSBvbiB0aGUgdGVtcG9yYXJ5IGNhbnZhcycpKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRXaWR0aChpbWcud2lkdGgpO1xyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRIZWlnaHQoaW1nLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGxldCBwcm9jZXNzID0gb2YoY2FudmFzU2NhbGVkKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmF0aW9YID0gY2FudmFzU2NhbGVkLmdldFdpZHRoKCkgLyB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgICAgICBjb25zdCByYXRpb1kgPSBjYW52YXNTY2FsZWQuZ2V0SGVpZ2h0KCkgLyB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5mb3JFYWNoKChvcmlnaW5hbE9iamVjdDogZmFicmljLk9iamVjdCwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3MucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGZhYnJpYy5DYW52YXM+KG9ic2VydmVyT2JqZWN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPYmplY3QuY2xvbmUoKGNsb25lZE9iamVjdDogZmFicmljLk9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zZXQoJ2xlZnQnLCBvcmlnaW5hbE9iamVjdC5sZWZ0ICogcmF0aW9YKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2V0KCd0b3AnLCBvcmlnaW5hbE9iamVjdC50b3AgKiByYXRpb1kpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvV2lkdGgob3JpZ2luYWxPYmplY3Qud2lkdGggKiByYXRpb1gpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvSGVpZ2h0KG9yaWdpbmFsT2JqZWN0LmhlaWdodCAqIHJhdGlvWSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5pbnNlcnRBdChjbG9uZWRPYmplY3QsIGksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYW52YXNTY2FsZWQucmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyT2JqZWN0Lm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlck9iamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcHJvY2VzcztcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNhbnZhc1NjYWxlZC5yZW5kZXJBbGwoKTtcclxuICAgICAgICBjYW52YXNTY2FsZWQuZ2V0RWxlbWVudCgpLnRvQmxvYihcclxuICAgICAgICAgIChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtlZEltYWdlLm91dG1hcmtlcnMgPSB0aGlzLm91dG1hcmtlcnM7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHRoaXMubWFya2VkSW1hZ2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMub3V0cHV0TWltZVR5cGUsXHJcbiAgICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEVsZW1lbnQoKS50b0Jsb2IoXHJcbiAgICAgICAgKGRhdGE6IEJsb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5tYXJrZWRJbWFnZS5vdXRtYXJrZXJzID0gdGhpcy5vdXRtYXJrZXJzO1xyXG4gICAgICAgICAgdGhpcy5zYXZlLmVtaXQodGhpcy5tYXJrZWRJbWFnZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLm91dHB1dE1pbWVUeXBlLFxyXG4gICAgICAgIHRoaXMub3V0cHV0UXVhbGl0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvL3RoaXMuc2F2ZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKXtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2cuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tSW50RnJvbUludGVydmFsKG1pbiwgbWF4KSB7IC8vIG1pbiBhbmQgbWF4IGluY2x1ZGVkIFxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcclxuICB9XHJcblxyXG4gIGxvZyhlbCl7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaW1hZ2VNYXJrZXIgZWxlbWVudCBcIixlbCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlciB7XHJcbiAgY2lyY2xlOiBmYWJyaWMuQ2lyY2xlO1xyXG4gIHRleHQ6IGZhYnJpYy5UZXh0O1xyXG4gIGdyb3VwOiBmYWJyaWMuR3JvdXA7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE91dE1hcmtlciB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlZEltYWdlIHtcclxuICBvdXRtYXJrZXJzOiBBcnJheTxPdXRNYXJrZXI+O1xyXG4gIGltYWdlOiBCbG9iO1xyXG59IiwiPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYW52YXNcIj5cclxuICAgICAgICA8Y2FudmFzIFtpZF09XCJjb21wb25lbnRHdWlkXCI+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbG9hdGluZy10b29sYmFyXCIgY2RrRHJhZyBjZGtEcmFnQm91bmRhcnk9XCIuY2FudmFzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWFya2VyQnV0dG9uXCIgKGNsaWNrKT1cIm5ld01hcmtlcigpXCI+Q3JlYSBudW92byBtYXJrZXI8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kX292ZXJmbG93X2NvbnRhaW5lciBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRfY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IG1hcmtlciBvZiBtYXJrZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGlvblwiIFtpbm5lckhUTUxdPVwibWFya2VyLmNhcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0YXJlYVwiPjx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cIm1hcmtlci5kZXNjcmlwdGlvblwiIChjbGljayk9XCJsb2cobWFya2VyLmRlc2NyaXB0aW9uKVwiPjwvdGV4dGFyZWE+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgKGNsaWNrKT1cImRlbGV0ZU1hcmtlckJ5SW5kZXgoaSlcIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBtYXJrZXJCdXR0b24gbXQtMlwiICpuZ0lmPVwiIWluQ29uZmlnXCIgKGNsaWNrKT1cInNhdmVJbWFnZSgpXCI+U2FsdmEgSW1tYWdpbmU8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nIG1hcmtlckJ1dHRvbiBtdC0yXCIgKGNsaWNrKT1cInJlbW92ZUFsbE1hcmtlcnMoKVwiPlJpbXVvdmkgdHV0dGkgaSBtYXJrZXJzPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIG1hcmtlckJ1dHRvbiBtdC0yXCIgKGNsaWNrKT1cImNsb3NlKClcIj5Bbm51bGxhIERpc2Vnbm88L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19