keevo-components 1.8.321 → 1.8.323

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 (146) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/api/base-components/base-component-button.mjs +1 -1
  3. package/esm2022/lib/api/base-components/base-component-chart.mjs +1 -1
  4. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +1 -1
  5. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +1 -1
  6. package/esm2022/lib/api/base-components/base-component-crud.mjs +1 -1
  7. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +1 -1
  8. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +1 -1
  9. package/esm2022/lib/api/base-components/base-component-input.mjs +1 -1
  10. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +1 -1
  11. package/esm2022/lib/api/base-components/base-component-table.mjs +1 -1
  12. package/esm2022/lib/api/base-components/base-component.mjs +1 -1
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +1 -1
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +1 -1
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +1 -1
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +1 -1
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +1 -1
  18. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +1 -1
  19. package/esm2022/lib/api/components/table/action-item.mjs +1 -1
  20. package/esm2022/lib/api/components/table/kv-menuitem.mjs +1 -1
  21. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +1 -1
  22. package/esm2022/lib/api/components/table/table.config.column.mjs +1 -1
  23. package/esm2022/lib/api/components/table/table.config.mjs +1 -1
  24. package/esm2022/lib/api/components/table/table.paginate.mjs +1 -1
  25. package/esm2022/lib/api/components/table/tabledit.config.mjs +1 -1
  26. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +1 -1
  27. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +1 -1
  28. package/esm2022/lib/api/directives/directives.module.mjs +1 -1
  29. package/esm2022/lib/api/directives/drag/drag.directive.mjs +1 -1
  30. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +1 -1
  31. package/esm2022/lib/api/directives/template/template.directive.mjs +1 -1
  32. package/esm2022/lib/api/helpers/component-providers.mjs +1 -1
  33. package/esm2022/lib/api/helpers/keevo-validators.mjs +1 -1
  34. package/esm2022/lib/api/helpers/translate-primeng.mjs +1 -1
  35. package/esm2022/lib/api/modules/primeng.module.mjs +1 -1
  36. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +1 -1
  37. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +1 -1
  38. package/esm2022/lib/api/pipes/mask.pipe.mjs +1 -1
  39. package/esm2022/lib/api/pipes/pipes.module.mjs +1 -1
  40. package/esm2022/lib/api/pipes/telefone.pipe.mjs +1 -1
  41. package/esm2022/lib/api/services/base.api.service.mjs +1 -1
  42. package/esm2022/lib/api/services/breadcrumbs.service.mjs +1 -1
  43. package/esm2022/lib/api/services/component.service.mjs +1 -1
  44. package/esm2022/lib/api/services/docs.service.mjs +1 -1
  45. package/esm2022/lib/api/services/form.service.mjs +1 -1
  46. package/esm2022/lib/api/services/imagens.service.mjs +1 -1
  47. package/esm2022/lib/api/services/notification.service.mjs +1 -1
  48. package/esm2022/lib/api/services/object.service.mjs +1 -1
  49. package/esm2022/lib/api/types/breadcrumb.model.mjs +1 -1
  50. package/esm2022/lib/api/types/severity.mjs +1 -1
  51. package/esm2022/lib/components/keevo-components.module.mjs +1 -1
  52. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +3 -3
  53. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +1 -1
  54. package/esm2022/lib/components/kv-button/kv-button.component.mjs +3 -3
  55. package/esm2022/lib/components/kv-button/kv-button.module.mjs +1 -1
  56. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +3 -3
  57. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +3 -3
  58. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +3 -3
  59. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +3 -3
  60. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +1 -1
  61. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +3 -3
  62. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +1 -1
  63. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +3 -3
  64. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +1 -1
  65. package/esm2022/lib/components/kv-error/kv-error.component.mjs +3 -3
  66. package/esm2022/lib/components/kv-error/kv-error.module.mjs +1 -1
  67. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +3 -3
  68. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +1 -1
  69. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +9 -3
  70. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +1 -1
  71. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +3 -3
  72. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +1 -1
  73. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +3 -3
  74. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +1 -1
  75. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +1 -1
  76. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +1 -1
  77. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +3 -3
  78. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +1 -1
  79. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +3 -3
  80. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +1 -1
  81. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +3 -3
  82. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +3 -3
  83. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +3 -3
  84. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +3 -3
  85. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +3 -3
  86. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +3 -3
  87. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +3 -3
  88. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +3 -3
  89. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +3 -3
  90. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +3 -3
  91. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +3 -3
  92. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +1 -1
  93. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +3 -3
  94. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +3 -3
  95. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +3 -3
  96. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +3 -3
  97. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +3 -3
  98. package/esm2022/lib/components/kv-label/kv-label.component.mjs +3 -3
  99. package/esm2022/lib/components/kv-label/kv-label.module.mjs +1 -1
  100. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +3 -3
  101. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +1 -1
  102. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +3 -3
  103. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +3 -3
  104. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +1 -1
  105. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +1 -1
  106. package/esm2022/lib/components/kv-login/kv-login.component.mjs +3 -3
  107. package/esm2022/lib/components/kv-login/kv-login.module.mjs +1 -1
  108. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +3 -3
  109. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +1 -1
  110. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +3 -3
  111. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +1 -1
  112. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +3 -3
  113. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +1 -1
  114. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +3 -3
  115. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +1 -1
  116. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +3 -3
  117. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +1 -1
  118. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +3 -3
  119. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +1 -1
  120. package/esm2022/lib/components/kv-report/kv-report.component.mjs +3 -3
  121. package/esm2022/lib/components/kv-report/kv-report.module.mjs +1 -1
  122. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +3 -3
  123. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +1 -1
  124. package/esm2022/lib/components/kv-table/kv-table.component.mjs +3 -3
  125. package/esm2022/lib/components/kv-table/kv-table.module.mjs +1 -1
  126. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +5 -7
  127. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +8 -4
  128. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +3 -3
  129. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +1 -1
  130. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +3 -3
  131. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +1 -1
  132. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +3 -3
  133. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +1 -1
  134. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +3 -3
  135. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +1 -1
  136. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +3 -3
  137. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +3 -3
  138. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +3 -3
  139. package/esm2022/public-api.mjs +1 -1
  140. package/fesm2022/keevo-components.mjs +118 -112
  141. package/fesm2022/keevo-components.mjs.map +1 -1
  142. package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +3 -1
  143. package/lib/components/kv-table/kv-table.component.d.ts +1 -1
  144. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +2 -1
  145. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
  146. package/package.json +1 -1
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
37
37
  exports: [KvTableExpandableComponent]
38
38
  }]
39
39
  }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZXhwYW5kYWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1leHBhbmRhYmxlL2t2LXRhYmxlLWV4cGFuZGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0IvRCxNQUFNLE9BQU8sdUJBQXVCOzhHQUF2Qix1QkFBdUI7K0dBQXZCLHVCQUF1QixpQkFYbkIsMEJBQTBCLGFBRXZDLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxlQUFlO1lBQ2YsY0FBYyxhQUVOLDBCQUEwQjsrR0FFekIsdUJBQXVCLFlBVGhDLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxlQUFlO1lBQ2YsY0FBYzs7MkZBSUwsdUJBQXVCO2tCQVpuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUMxQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBLdlRhYmxlRXhwYW5kYWJsZUNvbXBvbmVudCB9IGZyb20gJy4va3YtdGFibGUtZXhwYW5kYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBLdkJ1dHRvbnNNb2R1bGUgfSBmcm9tICcuLi9rdi1idXR0b25zL2t2LWJ1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgS3ZJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi9rdi1pbnB1dHMva3YtaW5wdXRzLm1vZHVsZSc7XG5pbXBvcnQgeyBQcmltZU5nTW9kdWxlIH0gZnJvbSAnLi4vLi4vYXBpL21vZHVsZXMvcHJpbWVuZy5tb2R1bGUnO1xuaW1wb3J0IHsgS3ZCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9rdi1idXR0b24va3YtYnV0dG9uLm1vZHVsZSc7XG5cblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtLdlRhYmxlRXhwYW5kYWJsZUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUHJpbWVOZ01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBLdklucHV0c01vZHVsZSxcbiAgICBLdkJ1dHRvbnNNb2R1bGUsXG4gICAgS3ZCdXR0b25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW0t2VGFibGVFeHBhbmRhYmxlQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBLdlRhYmxlRXhwYW5kYWJsZU1vZHVsZSB7IH1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZXhwYW5kYWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1leHBhbmRhYmxlL2t2LXRhYmxlLWV4cGFuZGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0IvRCxNQUFNLE9BQU8sdUJBQXVCOzhHQUF2Qix1QkFBdUI7K0dBQXZCLHVCQUF1QixpQkFYbkIsMEJBQTBCLGFBRXZDLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxlQUFlO1lBQ2YsY0FBYyxhQUVOLDBCQUEwQjsrR0FFekIsdUJBQXVCLFlBVGhDLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxlQUFlO1lBQ2YsY0FBYzs7MkZBSUwsdUJBQXVCO2tCQVpuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUMxQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgS3ZUYWJsZUV4cGFuZGFibGVDb21wb25lbnQgfSBmcm9tICcuL2t2LXRhYmxlLWV4cGFuZGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEt2QnV0dG9uc01vZHVsZSB9IGZyb20gJy4uL2t2LWJ1dHRvbnMva3YtYnV0dG9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEt2SW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4va3YtaW5wdXRzL2t2LWlucHV0cy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBQcmltZU5nTW9kdWxlIH0gZnJvbSAnLi4vLi4vYXBpL21vZHVsZXMvcHJpbWVuZy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2t2LWJ1dHRvbi9rdi1idXR0b24ubW9kdWxlJztcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtLdlRhYmxlRXhwYW5kYWJsZUNvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUHJpbWVOZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgS3ZJbnB1dHNNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbnNNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW0t2VGFibGVFeHBhbmRhYmxlQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUYWJsZUV4cGFuZGFibGVNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -228,11 +228,11 @@ export class KvTreetableComponent {
228
228
  this.inputBusca.nativeElement.value = '';
229
229
  }
230
230
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreetableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
231
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTreetableComponent, selector: "kv-tree-table", inputs: { disableRowNodeSticky: "disableRowNodeSticky", config: "config", dataSource: "dataSource", gridLines: "gridLines", tableCaptalized: "tableCaptalized", selectedItems: "selectedItems", paginator: "paginator", rows: "rows", treeTableDraggable: "treeTableDraggable", transferArrayItem: "transferArrayItem", ordenacao: "ordenacao", totalRecords: "totalRecords", textoEmptyMessage: "textoEmptyMessage", childrenRecoil: "childrenRecoil", showHeader: "showHeader", pageLinksOptions: "pageLinksOptions", pageLinks: "pageLinks", showFirstLastIcon: "showFirstLastIcon", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", doubleClickEvent: "doubleClickEvent", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onDropItem: "onDropItem" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "pTreeTable", first: true, predicate: TreeTable, descendants: true }, { propertyName: "inputBusca", first: true, predicate: ["inputBusca"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!treeTableDraggable\">\n <p-treeTable\n #tt\n [value]=\"dataSource\"\n [columns]=\"config.columns\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [resizableColumns]=\"true\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\n [(selection)]=\"selectedItems\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\n style=\"background-color: #eaeaea\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\n tamanhoTela < 768 ? '' : 'input-search'\n }}\"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n #inputBusca\n />\n </span>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\n <div class=\"flex flex-row gap-2 btns-options\">\n @for (action of config.actionsLote; track $index) {\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n />\n } }\n </div>\n </div>\n </div>\n </ng-template>\n\n @if(showHeader){\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for(col of columns; track $index){\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\n <div *ngIf=\"$index == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n />\n </div>\n \n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n \n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n @if (config.actions?.length ?? 0 > 0) {\n <th [style.width]=\"5\"></th>\n } }\n </tr>\n </ng-template>\n \n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track $index) {\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n }\n </div>\n </th>\n } @if (config.actions?.length ?? 0 > 0) {\n <th [style.width]=\"5\"></th>\n }\n </tr>\n </ng-template>\n }\n\n\n <ng-template\n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n >\n <tr\n [ttRow]=\"rowNode\"\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{ capitalize: tableCaptalized }\"\n >\n @for(col of columns; track $index){\n <td\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\n [style.left.px]=\"\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\n \"\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\n [style.borderLeft]=\"\n rowNode.level === 0 && col.field != config.columns[0].field\n ? 'none'\n : ''\n \"\n >\n <div class=\"flex flex-row {{ align(col) }}\">\n <div\n class=\"w-full-h-full flex align-items-center\"\n *ngIf=\"$index == 0\"\n >\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\n\n @if(config.enableSelect) {\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n [ngStyle]=\"{\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\n }\"\n />\n }\n\n </div>\n\n <div class=\"flex flex-row align-items-center\">\n <div\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n }\n <i\n *ngIf=\"col.boolean\"\n class=\"pi {{\n rowData[col.field] ? 'pi-check text-green-300' : ''\n }}\"\n style=\"font-size: 1.1rem\"\n ></i>\n\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\n\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\n {{ rowData[col.subtitle] }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </span>\n </td>\n }\n\n <td\n style=\"border-left: none; text-align: end\"\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\n >\n <div\n *ngIf=\"\n (config.actions?.length ?? 0 > 0) &&\n validateActionPosition(rowNode)\n \"\n >\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\n style=\"font-size: 25px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n\n @for(action of config.actions; track $index) {\n {{ criarMenusModal(rowData) }}\n }\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\n <div class=\"flex justify-content-end\">\n @for (actionPai of config.actionsPai; track $index) { @if\n (getOrExecute(actionPai.visible, rowData) ?? true) {\n <kv-button\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\n [icon]=\"actionPai.icon\"\n [severity]=\"actionPai.severity || 'tertiary'\"\n />\n } }\n </div>\n }\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n [attr.colspan]=\"config.columns.length + 1\"\n style=\"text-align: center\"\n >\n {{ textoEmptyMessage }}\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n\n<div\n *ngIf=\"treeTableDraggable\"\n cdkDropList\n class=\"example-list\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <p-treeTable\n #tt\n [value]=\"dataSource\"\n [columns]=\"config.columns\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [resizableColumns]=\"true\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [pageLinks]=\"pageLinks\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\n [(selection)]=\"selectedItems\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\n style=\"background-color: #eaeaea\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\n tamanhoTela < 768 ? '' : 'input-search'\n }}\"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n #inputBusca\n />\n </span>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\n <div class=\"flex flex-row gap-2 btns-options\">\n @for (action of config.actionsLote; track $index) {\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n />\n } }\n </div>\n </div>\n </div>\n </ng-template>\n\n @if(showHeader){\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for(col of columns; track $index){\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\n <div *ngIf=\"$index == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n />\n </div>\n \n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n \n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n }\n </tr>\n </ng-template>\n \n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track $index) {\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n </div>\n </th>\n }\n <th [style.width]=\"5\"></th>\n </tr>\n </ng-template> \n }\n\n\n <ng-template\n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n >\n <tr\n cdkDrag\n [cdkDragData]=\"rowNode\"\n [ttRow]=\"rowNode\"\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{ capitalize: tableCaptalized }\"\n >\n @for(col of columns; track $index){\n <td\n [style.position]=\"!disableRowNodeSticky && rowNode.level !== 0 ? 'sticky' : null\"\n [style.left.px]=\"\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\n \"\n >\n <div class=\"flex flex-row {{ align(col) }}\">\n <div\n class=\"w-full-h-full flex align-items-center\"\n *ngIf=\"$index == 0\"\n \n >\n \n <p-treeTableToggler \n class=\"hiddenVisible\" \n [rowNode]=\"rowNode\"\n />\n\n @if(config.enableSelect) {\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n [ngStyle]=\"{\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\n }\"\n />\n }\n \n </div>\n\n <div class=\"flex flex-row align-items-center\">\n <div\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n }\n\n <i\n *ngIf=\"col.boolean\"\n class=\"pi {{\n rowData[col.field] ? 'pi-check text-green-300' : ''\n }}\"\n style=\"font-size: 1.1rem\"\n ></i>\n\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\n\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\n {{ rowData[col.subtitle] }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </span>\n </td>\n }\n\n <td\n style=\"border-left: none; text-align: end\"\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\n [style.borderLeft]=\"rowNode.level === 0 ? 'none' : ''\"\n >\n <div\n *ngIf=\"\n (config.actions?.length ?? 0 > 0) &&\n validateActionPosition(rowNode)\n \"\n >\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\n style=\"font-size: 25px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n\n @for(action of config.actions; track $index) {\n {{ criarMenusModal(rowData) }}\n }\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\n <div class=\"flex justify-content-end\">\n @for (actionPai of config.actionsPai; track $index) {\n @if(getOrExecute(actionPai.visible, rowData) ?? true) {\n <kv-button\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\n [icon]=\"actionPai.icon\"\n [severity]=\"actionPai.severity || 'tertiary'\"\n />\n } }\n </div>\n }\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n [attr.colspan]=\"config.columns.length + 1\"\n style=\"text-align: center\"\n >\n {{ textoEmptyMessage }}\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n", styles: ["::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.4rem}::ng-deep .p-treetable .p-treetable-header{padding:0rem}span{font-size:14px}:host ::ng-deep .p-treetable table{table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.2);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea}.tag{width:5px;height:20px;border-radius:.25rem}.cdk-drag-preview{display:flex;align-items:center;justify-content:space-between;border-radius:10px!important}.cdk-drop-list-dragging{cursor:grabbing}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i7.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: "directive", type: i7.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: "component", type: i8.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i8.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i8.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "component", type: i8.TTSortIcon, selector: "p-treeTableSortIcon", inputs: ["field", "ariaLabelDesc", "ariaLabelAsc"] }, { kind: "directive", type: i8.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i8.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i8.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }, { kind: "component", type: i9.KvButtonComponent, selector: "kv-button", inputs: ["label", "icon", "loading", "disabled", "severity", "size", "fullWidth"], outputs: ["onClick"] }] }); }
231
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTreetableComponent, selector: "kv-tree-table", inputs: { disableRowNodeSticky: "disableRowNodeSticky", config: "config", dataSource: "dataSource", gridLines: "gridLines", tableCaptalized: "tableCaptalized", selectedItems: "selectedItems", paginator: "paginator", rows: "rows", treeTableDraggable: "treeTableDraggable", transferArrayItem: "transferArrayItem", ordenacao: "ordenacao", totalRecords: "totalRecords", textoEmptyMessage: "textoEmptyMessage", childrenRecoil: "childrenRecoil", showHeader: "showHeader", pageLinksOptions: "pageLinksOptions", pageLinks: "pageLinks", showFirstLastIcon: "showFirstLastIcon", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", doubleClickEvent: "doubleClickEvent", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onDropItem: "onDropItem" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "pTreeTable", first: true, predicate: TreeTable, descendants: true }, { propertyName: "inputBusca", first: true, predicate: ["inputBusca"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"!treeTableDraggable\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (onNodeSelect)=\"onNodeSelected($event)\"\r\n (onNodeUnselect)=\"onNodeUnselected($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\r\n style=\"background-color: #eaeaea\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\r\n tamanhoTela < 768 ? '' : 'input-search'\r\n }}\"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n #inputBusca\r\n />\r\n </span>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"flex flex-row gap-2 btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n @if(showHeader){\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n \r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n } }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized }\"\r\n >\r\n @for(col of columns; track $index){\r\n <td\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"\r\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\r\n \"\r\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\r\n [style.borderLeft]=\"\r\n rowNode.level === 0 && col.field != config.columns[0].field\r\n ? 'none'\r\n : ''\r\n \"\r\n >\r\n <div class=\"flex flex-row {{ align(col) }}\">\r\n <div\r\n class=\"w-full-h-full flex align-items-center\"\r\n *ngIf=\"$index == 0\"\r\n >\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n @if(config.enableSelect) {\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n [ngStyle]=\"{\r\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\r\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\r\n }\"\r\n />\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n }\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{\r\n rowData[col.field] ? 'pi-check text-green-300' : ''\r\n }}\"\r\n style=\"font-size: 1.1rem\"\r\n ></i>\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\r\n {{ rowData[col.subtitle] }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n </td>\r\n }\r\n\r\n <td\r\n style=\"border-left: none; text-align: end\"\r\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\r\n >\r\n <div\r\n *ngIf=\"\r\n (config.actions?.length ?? 0 > 0) &&\r\n validateActionPosition(rowNode)\r\n \"\r\n >\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n @for (actionPai of config.actionsPai; track $index) { @if\r\n (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <kv-button\r\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\r\n [icon]=\"actionPai.icon\"\r\n [severity]=\"actionPai.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n }\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"config.columns.length + 1\"\r\n style=\"text-align: center\"\r\n >\r\n {{ textoEmptyMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"treeTableDraggable\"\r\n cdkDropList\r\n class=\"example-list\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\r\n style=\"background-color: #eaeaea\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\r\n tamanhoTela < 768 ? '' : 'input-search'\r\n }}\"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n #inputBusca\r\n />\r\n </span>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"flex flex-row gap-2 btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n @if(showHeader){\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n \r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n </div>\r\n </th>\r\n }\r\n <th [style.width]=\"5\"></th>\r\n </tr>\r\n </ng-template> \r\n }\r\n\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n cdkDrag\r\n [cdkDragData]=\"rowNode\"\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized }\"\r\n >\r\n @for(col of columns; track $index){\r\n <td\r\n [style.position]=\"!disableRowNodeSticky && rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"\r\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\r\n \"\r\n >\r\n <div class=\"flex flex-row {{ align(col) }}\">\r\n <div\r\n class=\"w-full-h-full flex align-items-center\"\r\n *ngIf=\"$index == 0\"\r\n \r\n >\r\n \r\n <p-treeTableToggler \r\n class=\"hiddenVisible\" \r\n [rowNode]=\"rowNode\"\r\n />\r\n\r\n @if(config.enableSelect) {\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n [ngStyle]=\"{\r\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\r\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\r\n }\"\r\n />\r\n }\r\n \r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n }\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{\r\n rowData[col.field] ? 'pi-check text-green-300' : ''\r\n }}\"\r\n style=\"font-size: 1.1rem\"\r\n ></i>\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\r\n {{ rowData[col.subtitle] }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n </td>\r\n }\r\n\r\n <td\r\n style=\"border-left: none; text-align: end\"\r\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\r\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\r\n [style.borderLeft]=\"rowNode.level === 0 ? 'none' : ''\"\r\n >\r\n <div\r\n *ngIf=\"\r\n (config.actions?.length ?? 0 > 0) &&\r\n validateActionPosition(rowNode)\r\n \"\r\n >\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if(getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <kv-button\r\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\r\n [icon]=\"actionPai.icon\"\r\n [severity]=\"actionPai.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n }\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"config.columns.length + 1\"\r\n style=\"text-align: center\"\r\n >\r\n {{ textoEmptyMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n", styles: ["::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.4rem}::ng-deep .p-treetable .p-treetable-header{padding:0rem}span{font-size:14px}:host ::ng-deep .p-treetable table{table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.2);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea}.tag{width:5px;height:20px;border-radius:.25rem}.cdk-drag-preview{display:flex;align-items:center;justify-content:space-between;border-radius:10px!important}.cdk-drop-list-dragging{cursor:grabbing}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i7.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: "directive", type: i7.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: "component", type: i8.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i8.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i8.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "component", type: i8.TTSortIcon, selector: "p-treeTableSortIcon", inputs: ["field", "ariaLabelDesc", "ariaLabelAsc"] }, { kind: "directive", type: i8.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i8.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i8.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }, { kind: "component", type: i9.KvButtonComponent, selector: "kv-button", inputs: ["label", "icon", "loading", "disabled", "severity", "size", "fullWidth"], outputs: ["onClick"] }] }); }
232
232
  }
233
233
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTreetableComponent, decorators: [{
234
234
  type: Component,
235
- args: [{ selector: 'kv-tree-table', template: "<div *ngIf=\"!treeTableDraggable\">\n <p-treeTable\n #tt\n [value]=\"dataSource\"\n [columns]=\"config.columns\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [resizableColumns]=\"true\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\n [(selection)]=\"selectedItems\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\n style=\"background-color: #eaeaea\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\n tamanhoTela < 768 ? '' : 'input-search'\n }}\"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n #inputBusca\n />\n </span>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\n <div class=\"flex flex-row gap-2 btns-options\">\n @for (action of config.actionsLote; track $index) {\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n />\n } }\n </div>\n </div>\n </div>\n </ng-template>\n\n @if(showHeader){\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for(col of columns; track $index){\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\n <div *ngIf=\"$index == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n />\n </div>\n \n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n \n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n @if (config.actions?.length ?? 0 > 0) {\n <th [style.width]=\"5\"></th>\n } }\n </tr>\n </ng-template>\n \n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track $index) {\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n }\n </div>\n </th>\n } @if (config.actions?.length ?? 0 > 0) {\n <th [style.width]=\"5\"></th>\n }\n </tr>\n </ng-template>\n }\n\n\n <ng-template\n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n >\n <tr\n [ttRow]=\"rowNode\"\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{ capitalize: tableCaptalized }\"\n >\n @for(col of columns; track $index){\n <td\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\n [style.left.px]=\"\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\n \"\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\n [style.borderLeft]=\"\n rowNode.level === 0 && col.field != config.columns[0].field\n ? 'none'\n : ''\n \"\n >\n <div class=\"flex flex-row {{ align(col) }}\">\n <div\n class=\"w-full-h-full flex align-items-center\"\n *ngIf=\"$index == 0\"\n >\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\n\n @if(config.enableSelect) {\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n [ngStyle]=\"{\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\n }\"\n />\n }\n\n </div>\n\n <div class=\"flex flex-row align-items-center\">\n <div\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n }\n <i\n *ngIf=\"col.boolean\"\n class=\"pi {{\n rowData[col.field] ? 'pi-check text-green-300' : ''\n }}\"\n style=\"font-size: 1.1rem\"\n ></i>\n\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\n\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\n {{ rowData[col.subtitle] }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </span>\n </td>\n }\n\n <td\n style=\"border-left: none; text-align: end\"\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\n >\n <div\n *ngIf=\"\n (config.actions?.length ?? 0 > 0) &&\n validateActionPosition(rowNode)\n \"\n >\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\n style=\"font-size: 25px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n\n @for(action of config.actions; track $index) {\n {{ criarMenusModal(rowData) }}\n }\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\n <div class=\"flex justify-content-end\">\n @for (actionPai of config.actionsPai; track $index) { @if\n (getOrExecute(actionPai.visible, rowData) ?? true) {\n <kv-button\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\n [icon]=\"actionPai.icon\"\n [severity]=\"actionPai.severity || 'tertiary'\"\n />\n } }\n </div>\n }\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n [attr.colspan]=\"config.columns.length + 1\"\n style=\"text-align: center\"\n >\n {{ textoEmptyMessage }}\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n\n<div\n *ngIf=\"treeTableDraggable\"\n cdkDropList\n class=\"example-list\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <p-treeTable\n #tt\n [value]=\"dataSource\"\n [columns]=\"config.columns\"\n [resizableColumns]=\"true\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [resizableColumns]=\"true\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [pageLinks]=\"pageLinks\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\n [(selection)]=\"selectedItems\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\n >\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\n style=\"background-color: #eaeaea\"\n >\n <div class=\"col-12 flex flex-column\">\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n </div>\n\n <div\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\n tamanhoTela < 768 ? '' : 'input-search'\n }}\"\n >\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(tt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n #inputBusca\n />\n </span>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\n <div class=\"flex flex-row gap-2 btns-options\">\n @for (action of config.actionsLote; track $index) {\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'bottom'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n />\n } }\n </div>\n </div>\n </div>\n </ng-template>\n\n @if(showHeader){\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for(col of columns; track $index){\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n class=\"text-sm\"\n [style.width]=\"col.width\"\n >\n <div>\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\n <div *ngIf=\"$index == 0 && config.enableSelect\">\n <p-treeTableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n />\n </div>\n \n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n \n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n </div>\n </div>\n </div>\n </th>\n }\n </tr>\n </ng-template>\n \n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @for (col of columns; track $index) {\n <th\n [ttSortableColumn]=\"col.field\"\n [ttSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\n <span>{{ col.header }}</span>\n \n @if(col.sortable) {\n <p-treeTableSortIcon [field]=\"col.field\" />\n \n }\n </div>\n </th>\n }\n <th [style.width]=\"5\"></th>\n </tr>\n </ng-template> \n }\n\n\n <ng-template\n pTemplate=\"body\"\n let-rowNode\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n >\n <tr\n cdkDrag\n [cdkDragData]=\"rowNode\"\n [ttRow]=\"rowNode\"\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{ capitalize: tableCaptalized }\"\n >\n @for(col of columns; track $index){\n <td\n [style.position]=\"!disableRowNodeSticky && rowNode.level !== 0 ? 'sticky' : null\"\n [style.left.px]=\"\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\n \"\n >\n <div class=\"flex flex-row {{ align(col) }}\">\n <div\n class=\"w-full-h-full flex align-items-center\"\n *ngIf=\"$index == 0\"\n \n >\n \n <p-treeTableToggler \n class=\"hiddenVisible\" \n [rowNode]=\"rowNode\"\n />\n\n @if(config.enableSelect) {\n <p-treeTableCheckbox\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\n (click)=\"activeItemLote(selectedItems)\"\n [value]=\"rowNode\"\n [ngStyle]=\"{\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\n }\"\n />\n }\n \n </div>\n\n <div class=\"flex flex-row align-items-center\">\n <div\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n }\n\n <i\n *ngIf=\"col.boolean\"\n class=\"pi {{\n rowData[col.field] ? 'pi-check text-green-300' : ''\n }}\"\n style=\"font-size: 1.1rem\"\n ></i>\n\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\n\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\n {{ rowData[col.subtitle] }}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </span>\n </td>\n }\n\n <td\n style=\"border-left: none; text-align: end\"\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\n [style.borderLeft]=\"rowNode.level === 0 ? 'none' : ''\"\n >\n <div\n *ngIf=\"\n (config.actions?.length ?? 0 > 0) &&\n validateActionPosition(rowNode)\n \"\n >\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\n style=\"font-size: 25px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n\n @for(action of config.actions; track $index) {\n {{ criarMenusModal(rowData) }}\n }\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\n <div class=\"flex justify-content-end\">\n @for (actionPai of config.actionsPai; track $index) {\n @if(getOrExecute(actionPai.visible, rowData) ?? true) {\n <kv-button\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\n [icon]=\"actionPai.icon\"\n [severity]=\"actionPai.severity || 'tertiary'\"\n />\n } }\n </div>\n }\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n [attr.colspan]=\"config.columns.length + 1\"\n style=\"text-align: center\"\n >\n {{ textoEmptyMessage }}\n </td>\n </tr>\n </ng-template>\n </p-treeTable>\n</div>\n", styles: ["::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.4rem}::ng-deep .p-treetable .p-treetable-header{padding:0rem}span{font-size:14px}:host ::ng-deep .p-treetable table{table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.2);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea}.tag{width:5px;height:20px;border-radius:.25rem}.cdk-drag-preview{display:flex;align-items:center;justify-content:space-between;border-radius:10px!important}.cdk-drop-list-dragging{cursor:grabbing}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"] }]
235
+ args: [{ selector: 'kv-tree-table', template: "<div *ngIf=\"!treeTableDraggable\">\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (onNodeSelect)=\"onNodeSelected($event)\"\r\n (onNodeUnselect)=\"onNodeUnselected($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\r\n style=\"background-color: #eaeaea\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\r\n tamanhoTela < 768 ? '' : 'input-search'\r\n }}\"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n #inputBusca\r\n />\r\n </span>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"flex flex-row gap-2 btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n @if(showHeader){\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n \r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n } }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions?.length ?? 0 > 0) {\r\n <th [style.width]=\"5\"></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized }\"\r\n >\r\n @for(col of columns; track $index){\r\n <td\r\n [style.position]=\"rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"\r\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\r\n \"\r\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\r\n [style.borderLeft]=\"\r\n rowNode.level === 0 && col.field != config.columns[0].field\r\n ? 'none'\r\n : ''\r\n \"\r\n >\r\n <div class=\"flex flex-row {{ align(col) }}\">\r\n <div\r\n class=\"w-full-h-full flex align-items-center\"\r\n *ngIf=\"$index == 0\"\r\n >\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\" />\r\n\r\n @if(config.enableSelect) {\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n [ngStyle]=\"{\r\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\r\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\r\n }\"\r\n />\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n }\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{\r\n rowData[col.field] ? 'pi-check text-green-300' : ''\r\n }}\"\r\n style=\"font-size: 1.1rem\"\r\n ></i>\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\r\n {{ rowData[col.subtitle] }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n </td>\r\n }\r\n\r\n <td\r\n style=\"border-left: none; text-align: end\"\r\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\r\n >\r\n <div\r\n *ngIf=\"\r\n (config.actions?.length ?? 0 > 0) &&\r\n validateActionPosition(rowNode)\r\n \"\r\n >\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n @for (actionPai of config.actionsPai; track $index) { @if\r\n (getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <kv-button\r\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\r\n [icon]=\"actionPai.icon\"\r\n [severity]=\"actionPai.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n }\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"config.columns.length + 1\"\r\n style=\"text-align: center\"\r\n >\r\n {{ textoEmptyMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"treeTableDraggable\"\r\n cdkDropList\r\n class=\"example-list\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n>\r\n <p-treeTable\r\n #tt\r\n [value]=\"dataSource\"\r\n [columns]=\"config.columns\"\r\n [resizableColumns]=\"true\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"paginator\"\r\n [rows]=\"rows\"\r\n [pageLinks]=\"pageLinks\"\r\n [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n [showFirstLastIcon]=\"tamanhoTela > 960 ? true : false\"\r\n [pageLinks]=\"tamanhoTela > 960 ? 2 : 1\"\r\n [styleClass]=\"gridLines ? 'p-treetable-gridlines' : ''\"\r\n [(selection)]=\"selectedItems\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n >\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableCation\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12 m-0\"\r\n style=\"background-color: #eaeaea\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n <div *ngIf=\"config.title\" class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n <div *ngIf=\"config.subtitle\" class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center col-10 p-0 md:col-6 lg:col-4 justify-content-center {{\r\n tamanhoTela < 768 ? '' : 'input-search'\r\n }}\"\r\n >\r\n <span *ngIf=\"config.enableFilter\" class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(tt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n #inputBusca\r\n />\r\n </span>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end p-0\">\r\n <div class=\"flex flex-row gap-2 btns-options\">\r\n @for (action of config.actionsLote; track $index) {\r\n @if((selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n @if(showHeader){\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for(col of columns; track $index){\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n class=\"text-sm\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div>\r\n <div [ngClass]=\"{ flex: $index == 0, 'gap-3': $index == 0 }\">\r\n <div *ngIf=\"$index == 0 && config.enableSelect\">\r\n <p-treeTableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n \r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track $index) {\r\n <th\r\n [ttSortableColumn]=\"col.field\"\r\n [ttSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div class=\"flex flex-row align-items-center {{ align(col) }}\">\r\n <span>{{ col.header }}</span>\r\n \r\n @if(col.sortable) {\r\n <p-treeTableSortIcon [field]=\"col.field\" />\r\n \r\n }\r\n </div>\r\n </th>\r\n }\r\n <th [style.width]=\"5\"></th>\r\n </tr>\r\n </ng-template> \r\n }\r\n\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowNode\r\n let-rowData=\"rowData\"\r\n let-columns=\"columns\"\r\n >\r\n <tr\r\n cdkDrag\r\n [cdkDragData]=\"rowNode\"\r\n [ttRow]=\"rowNode\"\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{ capitalize: tableCaptalized }\"\r\n >\r\n @for(col of columns; track $index){\r\n <td\r\n [style.position]=\"!disableRowNodeSticky && rowNode.level !== 0 ? 'sticky' : null\"\r\n [style.left.px]=\"\r\n childrenRecoil && rowNode.level !== 0 ? rowNode.level * 30 : null\r\n \"\r\n >\r\n <div class=\"flex flex-row {{ align(col) }}\">\r\n <div\r\n class=\"w-full-h-full flex align-items-center\"\r\n *ngIf=\"$index == 0\"\r\n \r\n >\r\n \r\n <p-treeTableToggler \r\n class=\"hiddenVisible\" \r\n [rowNode]=\"rowNode\"\r\n />\r\n\r\n @if(config.enableSelect) {\r\n <p-treeTableCheckbox\r\n [disabled]=\"isDisabledCheckbox(rowData, rowNode)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [value]=\"rowNode\"\r\n [ngStyle]=\"{\r\n 'display': isSelectEnabled(rowData, rowNode) ? 'block' : 'none',\r\n 'margin-left': config.visibleCheckboxFunction ? '-34px' : '0px'\r\n }\"\r\n />\r\n }\r\n \r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center\">\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-center gap-2\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n }\r\n\r\n <i\r\n *ngIf=\"col.boolean\"\r\n class=\"pi {{\r\n rowData[col.field] ? 'pi-check text-green-300' : ''\r\n }}\"\r\n style=\"font-size: 1.1rem\"\r\n ></i>\r\n\r\n <div class=\"flex flex-column\" *ngIf=\"!col.boolean\">\r\n <span class=\"m-0\">{{ rowData[col.field] }}</span>\r\n\r\n <p *ngIf=\"col.subtitle\" class=\"m-0 text-xs font-semibold\">\r\n {{ rowData[col.subtitle] }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <span *ngIf=\"col.template && validateShowTemplate(rowNode, col)\">\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </span>\r\n </td>\r\n }\r\n\r\n <td\r\n style=\"border-left: none; text-align: end\"\r\n *ngIf=\"(config.actions?.length ?? 0 > 0) || config.actionsPai\"\r\n [style.borderRight]=\"rowNode.level === 0 ? 'none' : ''\"\r\n [style.borderLeft]=\"rowNode.level === 0 ? 'none' : ''\"\r\n >\r\n <div\r\n *ngIf=\"\r\n (config.actions?.length ?? 0 > 0) &&\r\n validateActionPosition(rowNode)\r\n \"\r\n >\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz p-1\"\r\n style=\"font-size: 25px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n\r\n @for(action of config.actions; track $index) {\r\n {{ criarMenusModal(rowData) }}\r\n }\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n\r\n @if(config.actionsPai?.length ?? 0 > 0 && rowNode.level == 0){\r\n <div class=\"flex justify-content-end\">\r\n @for (actionPai of config.actionsPai; track $index) {\r\n @if(getOrExecute(actionPai.visible, rowData) ?? true) {\r\n <kv-button\r\n (onClick)=\"activeItem(rowData); actionPai.command($event)\"\r\n [icon]=\"actionPai.icon\"\r\n [severity]=\"actionPai.severity || 'tertiary'\"\r\n />\r\n } }\r\n </div>\r\n }\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td\r\n [attr.colspan]=\"config.columns.length + 1\"\r\n style=\"text-align: center\"\r\n >\r\n {{ textoEmptyMessage }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-treeTable>\r\n</div>\r\n", styles: ["::ng-deep .p-treetable .p-treetable-tbody>tr>td{padding:.4rem}::ng-deep .p-treetable .p-treetable-header{padding:0rem}span{font-size:14px}:host ::ng-deep .p-treetable table{table-layout:auto!important}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.2);transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}::ng-deep .p-treetable .p-treetable-thead>tr>th{background-color:#eaeaea}.tag{width:5px;height:20px;border-radius:.25rem}.cdk-drag-preview{display:flex;align-items:center;justify-content:space-between;border-radius:10px!important}.cdk-drop-list-dragging{cursor:grabbing}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}::ng-deep svg.p-icon{width:.7rem;height:1rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}\n"] }]
236
236
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { disableRowNodeSticky: [{
237
237
  type: Input
238
238
  }], config: [{
@@ -301,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
301
301
  type: HostListener,
302
302
  args: ['window:resize', ['$event']]
303
303
  }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLXRhYmxlL2t2LXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS10YWJsZS9rdi10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFFTCxZQUFZLEVBQ1osYUFBYSxHQUNkLE1BQU0sd0NBQXdDLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFckYsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7OztBQVF0RSxNQUFNLE9BQU8sb0JBQW9CO0lBcUIvQixZQUNVLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQmhDLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFFbEIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBSXRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHNCQUFp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RUFPaEIsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBVUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBUzZCLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUNkLFVBQVU7c0JBQTdCLEtBQUs7dUJBQUMsV0FBVztnQkFFSSxVQUFVO3NCQUEvQixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0ssVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUd2QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudUl0ZW0sIFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xuaW1wb3J0IHtcbiAgVmFsdWVPckZuLFxuICBnZXRPckV4ZWN1dGUsXG4gIG1hcFRvTWVudUl0ZW0sXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcbmltcG9ydCB7IFRhYmxlUGFnaW5hdGUgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5wYWdpbmF0ZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2FwaS9kaXJlY3RpdmVzL3RlbXBsYXRlL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUcmVlVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90cmVlLXRhYmxlL3RyZWUtdGFibGUuY29uZmlnJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnLmNvbHVtbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2t2LXRyZWUtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgS3ZUcmVldGFibGVDb21wb25lbnQge1xuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XG4gIEBJbnB1dCgpIGRpc2FibGVSb3dOb2RlU3RpY2t5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY29uZmlnITogVHJlZVRhYmxlQ29uZmlnO1xuICBASW5wdXQoKSBkYXRhU291cmNlITogYW55O1xuICBASW5wdXQoKSBncmlkTGluZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBwYWdpbmF0b3IgPSB0cnVlO1xuICBASW5wdXQoKSByb3dzID0gMTA7XG4gIEBJbnB1dCgpIHRyZWVUYWJsZURyYWdnYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmFuc2ZlckFycmF5SXRlbSA9IGZhbHNlO1xuICBASW5wdXQoKSBvcmRlbmFjYW8hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcbiAgQElucHV0KCkgdGV4dG9FbXB0eU1lc3NhZ2U6IHN0cmluZyA9ICdOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbyc7XG4gIEBJbnB1dCgpIGNoaWxkcmVuUmVjb2lsOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApe31cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgTyB2YWxvciBkZSBwYWdlTGlua3Mgw6kgYXRyaWJ1w61kbyBkZSBhY29yZG8gY29tIG8gdGFtYW5obyBkYSB0ZWxhLCBlc3NhIHByb3ByaWVkYWRlIG7Do28gZXN0w6Egc2VuZG8gdXRpbGl6YWRhXG4gICAqL1xuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zITogbnVtYmVyO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgTyB2YWxvciBkZSBwYWdlTGlua3Mgw6kgYXRyaWJ1w61kbyBkZSBhY29yZG8gY29tIG8gdGFtYW5obyBkYSB0ZWxhLCBlc3NhIHByb3ByaWVkYWRlIG7Do28gZXN0w6Egc2VuZG8gdXRpbGl6YWRhXG4gICAqL1xuICBASW5wdXQoKSBwYWdlTGlua3MhOiBudW1iZXI7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBBIHF1YW50aWRhZGUgZGUgcGFnaW5pdG9yUGFnZUljb25zIMOpIGF0cmlidcOtZG8gZGUgYWNvcmRvIGNvbSBvIHRhbWFuaG8gZGEgdGVsYSwgZXNzYSBwcm9wcmllZGFkZSBuw6NvIGVzdMOhIHNlbmRvIHV0aWxpemFkYVxuICAgKi9cbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKSBvbkZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW1Mb3RlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRvdWJsZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uTm9kZVVuc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uRHJvcEl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGlmICh0aGlzLm9yZGVuYWNhbykge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5zb3J0VHJlZU5vZGVzKHRoaXMuZGF0YVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcblxuICBAVmlld0NoaWxkKFRyZWVUYWJsZSkgcFRyZWVUYWJsZSE6IFRyZWVUYWJsZTtcbiAgQFZpZXdDaGlsZCgnaW5wdXRCdXNjYScpIGlucHV0QnVzY2EhOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgZ2V0T3JFeGVjdXRlPFQ+KGFjdGlvbjogVmFsdWVPckZuPFQ+LCBkYXRhOiBhbnkpOiBUIHtcbiAgICByZXR1cm4gZ2V0T3JFeGVjdXRlKGFjdGlvbiwgZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRyZWVUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cbiAgICAgICAgKCRldmVudD8uZmlyc3QgPiAwID8gJGV2ZW50LmZpcnN0IC8gJGV2ZW50LnJvd3MgOiAkZXZlbnQuZmlyc3QpICsgMTtcbiAgICAgIGxldCB0ZXJtb1Blc3F1aXNhID0gJyc7XG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XG5cbiAgICAgIGlmICgkZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gJGV2ZW50Lmdsb2JhbEZpbHRlcjtcblxuICAgICAgaWYgKCRldmVudC5zb3J0RmllbGQpXG4gICAgICAgIG9yZGVuYWNhbyA9IGAkeyRldmVudC5zb3J0RmllbGR9ICR7XG4gICAgICAgICAgJGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXG4gICAgICAgIH1gO1xuXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXG4gICAgICAgIHRhbWFuaG9QYWdpbmE6ICRldmVudC5yb3dzLFxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XG4gICAgfVxuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xuICAgIGNvbnN0IGRyYWdnZWROb2RlID0gZXZlbnQuaXRlbS5kYXRhO1xuICAgIGNvbnN0IGRyYWdnZWRDaGlsZERhdGEgPSBkcmFnZ2VkTm9kZS5ub2RlLmRhdGE7XG5cbiAgICBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPT09IDApIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgfSBlbHNlIGlmIChkcmFnZ2VkTm9kZS5sZXZlbCA+PSAxKSB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gZHJhZ2dlZE5vZGUubm9kZS5wYXJlbnQ7XG5cbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudENoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5tYXAoXG4gICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDaGlsZEluZGV4ID0gcGFyZW50Q2hpbGRyZW4uaW5kZXhPZihkcmFnZ2VkQ2hpbGREYXRhKTtcblxuICAgICAgICBjb25zdCByZWxhdGl2ZUN1cnJlbnRJbmRleCA9XG4gICAgICAgICAgcHJldmlvdXNDaGlsZEluZGV4ICsgKGV2ZW50LmN1cnJlbnRJbmRleCAtIGV2ZW50LnByZXZpb3VzSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldENoaWxkSW5kZXggPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHBhcmVudENoaWxkcmVuLmxlbmd0aCAtIDEsIHJlbGF0aXZlQ3VycmVudEluZGV4KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwcmV2aW91c0NoaWxkSW5kZXggIT09IC0xICYmIHRhcmdldENoaWxkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbixcbiAgICAgICAgICAgIHByZXZpb3VzQ2hpbGRJbmRleCxcbiAgICAgICAgICAgIHRhcmdldENoaWxkSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRyb3BJbmZvOiBhbnkgPSB7XG4gICAgICAgICAgcHJldmlvdXNDaGlsZEluZGV4OiBwcmV2aW91c0NoaWxkSW5kZXggKyAxLFxuICAgICAgICAgIHRhcmdldENoaWxkSW5kZXg6IHRhcmdldENoaWxkSW5kZXggKyAxLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMub25Ecm9wSXRlbS5lbWl0KHsgZXZlbnQ6IGV2ZW50LCBkcm9wQ2hpbGRJbmZvOiBkcm9wSW5mbyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPT09IDApIHtcbiAgICAgIHRoaXMub25Ecm9wSXRlbS5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBzb3J0VHJlZU5vZGVzKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRhW3RoaXMub3JkZW5hY2FvXSAtIGIuZGF0YVt0aGlzLm9yZGVuYWNhb10pXG4gICAgICAubWFwKChub2RlKSA9PiB7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMuc29ydFRyZWVOb2Rlcyhub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlVGFyZ2V0Q2hpbGRJbmRleChcbiAgICBldmVudDogQ2RrRHJhZ0Ryb3A8YW55PixcbiAgICBwYXJlbnRDaGlsZHJlbjogYW55W10sXG4gICAgcHJldmlvdXNDaGlsZEluZGV4OiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YXJnZXRDaGlsZEluZGV4ID1cbiAgICAgIHByZXZpb3VzQ2hpbGRJbmRleCArIChldmVudC5jdXJyZW50SW5kZXggLSBldmVudC5wcmV2aW91c0luZGV4KTtcblxuICAgIGlmICh0YXJnZXRDaGlsZEluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRDaGlsZEluZGV4ID49IHBhcmVudENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHBhcmVudENoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0YXJnZXRDaGlsZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVyblN0eWxlUm93KGNvbDogYW55LCByb3dOb2RlOiBhbnkpOiBzdHJpbmcge1xuICAvLyAgIGNvbnN0IGlzRmlyc3RDb2x1bW4gPSBjb2wuZmllbGQgPT09IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0uZmllbGQ7XG4gIC8vICAgY29uc3QgYmFzZU9wYWNpdHkgPSAxO1xuICAvLyAgIGNvbnN0IG1heExldmVscyA9IDQ7XG5cbiAgLy8gICBpZiAoaXNGaXJzdENvbHVtbiAmJiByb3dOb2RlLmxldmVsID49IDApIHtcbiAgLy8gICAgIGNvbnN0IG9wYWNpdHkgPSBiYXNlT3BhY2l0eSAtIChyb3dOb2RlLmxldmVsIC8gbWF4TGV2ZWxzKTtcblxuICAvLyAgICAgcmV0dXJuIGBib3JkZXItbGVmdDogc29saWQgNHB4IHJnYmEoNTksIDExMCwgMTU4LCAkeyBvcGFjaXR5IH0pICFpbXBvcnRhbnQ7YDtcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAocm93Tm9kZS5sZXZlbCA9PSAwKVxuICAvLyAgICAgcmV0dXJuICdib3JkZXItbGVmdDogbm9uZSAhaW1wb3J0YW50OyBib3JkZXItcmlnaHQ6IG5vbmUgIWltcG9ydGFudCdcblxuICAvLyAgIHJldHVybiAnJztcbiAgLy8gfVxuXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmNvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IG1lbnVJbnNlcnQgPSBtYXBUb01lbnVJdGVtKGFjdGlvbiwgZGF0YSk7XG5cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQubGFiZWwgIT0gaXRlbVswXS5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xuICAgIHJldHVybiB2aXNpYmxlO1xuICB9XG5cbiAgdmFsaWRhdGVBY3Rpb25Qb3NpdGlvbihyb3dOb2RlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9uc1BhaSAmJiByb3dOb2RlLmxldmVsID09IDApIHJldHVybiBmYWxzZTtcbiAgICBlbHNlIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZG91YmxlQ2xpY2soZTogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGEgfTtcblxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcblxuICAgIC8vIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XG4gIH1cblxuICBpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YTogYW55LCByb3dOb2RlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhLCByb3dOb2RlKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIGlzU2VsZWN0RW5hYmxlZChyb3dEYXRhOiBhbnksIHJvd05vZGU6IGFueSk6IGJvb2xlYW4ge1xuICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uXG4gICA/IHRoaXMuY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEsIHJvd05vZGUpIFxuICAgIDogdHJ1ZVxuICB9XG5cbiAgb25Ob2RlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlVW5zZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5vbk5vZGVVbnNlbGVjdC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlc1t0ZW1wbGF0ZW5hbWVdO1xuICB9XG5cbiAgdmFsaWRhdGVTaG93VGVtcGxhdGUocm93Tm9kZTogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChjb2wudGVtcGxhdGVPbmx5KSB7XG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ3BhaScpIHtcbiAgICAgICAgcmV0dXJuIHJvd05vZGUubGV2ZWwgPT09IDA7XG4gICAgICB9XG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ2ZpbGhvJykge1xuICAgICAgICByZXR1cm4gcm93Tm9kZS5sZXZlbCA9PT0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRJY29uKGljb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGljb24uaW5jbHVkZXMoJ3BpLScpID8gYHBpICR7aWNvbn1gIDogJyc7XG4gIH1cblxuICBhbGlnbihjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAoY29sLmNlbnRyYWxpemUpIHJldHVybiAnanVzdGlmeS1jb250ZW50LWNlbnRlcic7XG4gICAgZWxzZSBpZiAoY29sLmFsaWduID09ICdyaWdodCcpIHJldHVybiAnanVzdGlmeS1jb250ZW50LWVuZCc7XG4gICAgZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICByZXNldFRyZWVUYWJsZSgpe1xuICAgIGlmICh0aGlzLnBUcmVlVGFibGUpIHRoaXMucFRyZWVUYWJsZS5yZXNldCgpO1xuICAgIGlmICh0aGlzLmlucHV0QnVzY2EpIHRoaXMuaW5wdXRCdXNjYS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhdHJlZVRhYmxlRHJhZ2dhYmxlXCI+XG4gIDxwLXRyZWVUYWJsZVxuICAgICN0dFxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcbiAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCJcbiAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwidGFtYW5ob1RlbGEgPiA5NjAgPyB0cnVlIDogZmFsc2VcIlxuICAgIFtwYWdlTGlua3NdPVwidGFtYW5ob1RlbGEgPiA5NjAgPyAyIDogMVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiZ3JpZExpbmVzID8gJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycgOiAnJ1wiXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcbiAgICAob25MYXp5TG9hZCk9XCJwYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAob25Ob2RlU2VsZWN0KT1cIm9uTm9kZVNlbGVjdGVkKCRldmVudClcIlxuICAgIChvbk5vZGVVbnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdGVkKCRldmVudClcIlxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc31cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cImNvbmZpZy5lbmFibGVDYXRpb25cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMiBtLTBcIlxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlYWVhZWFcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpdGxlXCIgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBteS0zXCI+XG4gICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCIgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBjb2wtMTAgcC0wIG1kOmNvbC02IGxnOmNvbC00IGp1c3RpZnktY29udGVudC1jZW50ZXIge3tcbiAgICAgICAgICAgIHRhbWFuaG9UZWxhIDwgNzY4ID8gJycgOiAnaW5wdXQtc2VhcmNoJ1xuICAgICAgICAgIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnLmVuYWJsZUZpbHRlclwiIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKHR0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxuICAgICAgICAgICAgICBjbGFzcz1cImgtMnJlbVwiXG4gICAgICAgICAgICAgICNpbnB1dEJ1c2NhXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTEganVzdGlmeS1jb250ZW50LWVuZCBwLTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBidG5zLW9wdGlvbnNcIj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc0xvdGU7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgQGlmKChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmXG4gICAgICAgICAgICBleGliaXJDYW1wbyhhY3Rpb24sIHRoaXMuYWN0aW9uKSkge1xuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5kaXNhYmxlZCwgc2VsZWN0ZWRJdGVtcykgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmljb24sIHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9IH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmKHNob3dIZWFkZXIpe1xuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgQGZvcihjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBmbGV4OiAkaW5kZXggPT0gMCwgJ2dhcC0zJzogJGluZGV4ID09IDAgfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIkaW5kZXggPT0gMCAmJiBjb25maWcuZW5hYmxlU2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyICB7eyBhbGlnbihjb2wpIH19XCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICBcbiAgICAgICAgICAgICAgICAgIEBpZihjb2wuc29ydGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiAvPlxuICBcbiAgICAgICAgICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgPmluZm88L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIEBpZiAoY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCkge1xuICAgICAgICAgIDx0aCBbc3R5bGUud2lkdGhdPVwiNVwiPjwvdGg+XG4gICAgICAgICAgfSB9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICBcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7IGFsaWduKGNvbCkgfX1cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgXG4gICAgICAgICAgICAgIEBpZihjb2wuc29ydGFibGUpIHtcbiAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlU29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfSBAaWYgKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApIHtcbiAgICAgICAgICA8dGggW3N0eWxlLndpZHRoXT1cIjVcIj48L3RoPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuXG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd05vZGVcbiAgICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXG4gICAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgID5cbiAgICAgIDx0clxuICAgICAgICBbdHRSb3ddPVwicm93Tm9kZVwiXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQgfVwiXG4gICAgICA+XG4gICAgICAgIEBmb3IoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCl7XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCJyb3dOb2RlLmxldmVsICE9PSAwID8gJ3N0aWNreScgOiBudWxsXCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgIGNoaWxkcmVuUmVjb2lsICYmIHJvd05vZGUubGV2ZWwgIT09IDAgPyByb3dOb2RlLmxldmVsICogMzAgOiBudWxsXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyUmlnaHRdPVwicm93Tm9kZS5sZXZlbCA9PT0gMCA/ICdub25lJyA6ICcnXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCJcbiAgICAgICAgICAgIHJvd05vZGUubGV2ZWwgPT09IDAgJiYgY29sLmZpZWxkICE9IGNvbmZpZy5jb2x1bW5zWzBdLmZpZWxkXG4gICAgICAgICAgICAgID8gJ25vbmUnXG4gICAgICAgICAgICAgIDogJydcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cge3sgYWxpZ24oY29sKSB9fVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbC1oLWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiRpbmRleCA9PSAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBjbGFzcz1cImhpZGRlblZpc2libGVcIiBbcm93Tm9kZV09XCJyb3dOb2RlXCIgLz5cblxuICAgICAgICAgICAgICBAaWYoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEsIHJvd05vZGUpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICdkaXNwbGF5JzogaXNTZWxlY3RFbmFibGVkKHJvd0RhdGEsIHJvd05vZGUpID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0JzogY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uID8gJy0zNHB4JyA6ICcwcHgnXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYoY29sLnRhZ0NvbG9yKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRhZ0NvbG9yKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmJvb2xlYW5cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaSB7e1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAncGktY2hlY2sgdGV4dC1ncmVlbi0zMDAnIDogJydcbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxLjFyZW1cIlxuICAgICAgICAgICAgICAgID48L2k+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiIWNvbC5ib29sZWFuXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tMFwiPnt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb2wuc3VidGl0bGVcIiBjbGFzcz1cIm0tMCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuc3VidGl0bGVdIH19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50ZW1wbGF0ZSAmJiB2YWxpZGF0ZVNob3dUZW1wbGF0ZShyb3dOb2RlLCBjb2wpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG5cbiAgICAgICAgPHRkXG4gICAgICAgICAgc3R5bGU9XCJib3JkZXItbGVmdDogbm9uZTsgdGV4dC1hbGlnbjogZW5kXCJcbiAgICAgICAgICAqbmdJZj1cIihjb25maWcuYWN0aW9ucz8ubGVuZ3RoID8/IDAgPiAwKSB8fCBjb25maWcuYWN0aW9uc1BhaVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAoY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCkgJiZcbiAgICAgICAgICAgICAgdmFsaWRhdGVBY3Rpb25Qb3NpdGlvbihyb3dOb2RlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6IHAtMVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyNXB4XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBtb3JlX2hvcml6XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIEBmb3IoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8cC1tZW51XG4gICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgIFtwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICA+PC9wLW1lbnU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYoY29uZmlnLmFjdGlvbnNQYWk/Lmxlbmd0aCA/PyAwID4gMCAmJiByb3dOb2RlLmxldmVsID09IDApe1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvblBhaSBvZiBjb25maWcuYWN0aW9uc1BhaTsgdHJhY2sgJGluZGV4KSB7IEBpZlxuICAgICAgICAgICAgKGdldE9yRXhlY3V0ZShhY3Rpb25QYWkudmlzaWJsZSwgcm93RGF0YSkgPz8gdHJ1ZSkge1xuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpOyBhY3Rpb25QYWkuY29tbWFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uUGFpLmljb25cIlxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aW9uUGFpLnNldmVyaXR5IHx8ICd0ZXJ0aWFyeSdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29uZmlnLmNvbHVtbnMubGVuZ3RoICsgMVwiXG4gICAgICAgICAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGV4dG9FbXB0eU1lc3NhZ2UgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRyZWVUYWJsZT5cbjwvZGl2PlxuXG48ZGl2XG4gICpuZ0lmPVwidHJlZVRhYmxlRHJhZ2dhYmxlXCJcbiAgY2RrRHJvcExpc3RcbiAgY2xhc3M9XCJleGFtcGxlLWxpc3RcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4+XG4gIDxwLXRyZWVUYWJsZVxuICAgICN0dFxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXG4gICAgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcbiAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW3BhZ2VMaW5rc109XCJwYWdlTGlua3NcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIls1LCAxMCwgMjUsIDUwXVwiXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cInRhbWFuaG9UZWxhID4gOTYwID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICBbcGFnZUxpbmtzXT1cInRhbWFuaG9UZWxhID4gOTYwID8gMiA6IDFcIlxuICAgIFtzdHlsZUNsYXNzXT1cImdyaWRMaW5lcyA/ICdwLXRyZWV0YWJsZS1ncmlkbGluZXMnIDogJydcIlxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICBbbGF6eV09XCJjb25maWcubGF6eVwiXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCIgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wXCJcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWFlYWVhXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy50aXRsZVwiIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgY29sLTEwIHAtMCBtZDpjb2wtNiBsZzpjb2wtNCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHt7XG4gICAgICAgICAgICB0YW1hbmhvVGVsYSA8IDc2OCA/ICcnIDogJ2lucHV0LXNlYXJjaCdcbiAgICAgICAgICB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cblxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0dCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxuICAgICAgICAgICAgICAjaW5wdXRCdXNjYVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmQgcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgYnRucy1vcHRpb25zXCI+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIEBpZigoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIHx8IGFjdGlvbi5zaG93QWNvZXNMb3RlKSAmJlxuICAgICAgICAgICAgZXhpYmlyQ2FtcG8oYWN0aW9uLCB0aGlzLmFjdGlvbikpIHtcbiAgICAgICAgICAgIDxrdi1idXR0b25cbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aW9uPy5jb21tYW5kKCk7IGFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImdldE9yRXhlY3V0ZShhY3Rpb24udG9vbHRpcCwgc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uZGlzYWJsZWQsIHNlbGVjdGVkSXRlbXMpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb24uc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgfSB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZihzaG93SGVhZGVyKXtcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIEBmb3IoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCl7XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZmxleDogJGluZGV4ID09IDAsICdnYXAtMyc6ICRpbmRleCA9PSAwIH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiJGluZGV4ID09IDAgJiYgY29uZmlnLmVuYWJsZVNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciAge3sgYWxpZ24oY29sKSB9fVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgXG4gICAgICAgICAgICAgICAgICBAaWYoY29sLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVTb3J0SWNvbiBbZmllbGRdPVwiY29sLmZpZWxkXCIgLz5cbiAgXG4gICAgICAgICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGVhZGVyVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgID5pbmZvPC9zcGFuXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICBcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyICB7eyBhbGlnbihjb2wpIH19XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gIFxuICAgICAgICAgICAgICBAaWYoY29sLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiAvPlxuICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCI1XCI+PC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+ICAgICAgXG4gICAgfVxuXG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd05vZGVcbiAgICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXG4gICAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgID5cbiAgICAgIDx0clxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dOb2RlXCJcbiAgICAgICAgW3R0Um93XT1cInJvd05vZGVcIlxuICAgICAgICAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgY2FwaXRhbGl6ZTogdGFibGVDYXB0YWxpemVkIH1cIlxuICAgICAgPlxuICAgICAgICBAZm9yKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpe1xuICAgICAgICA8dGRcbiAgICAgICAgICBbc3R5bGUucG9zaXRpb25dPVwiIWRpc2FibGVSb3dOb2RlU3RpY2t5ICYmIHJvd05vZGUubGV2ZWwgIT09IDAgPyAnc3RpY2t5JyA6IG51bGxcIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgY2hpbGRyZW5SZWNvaWwgJiYgcm93Tm9kZS5sZXZlbCAhPT0gMCA/IHJvd05vZGUubGV2ZWwgKiAzMCA6IG51bGxcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgIHt7IGFsaWduKGNvbCkgfX1cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIkaW5kZXggPT0gMFwiXG4gICAgICAgICAgIFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblZpc2libGVcIiBcbiAgICAgICAgICAgICAgICBbcm93Tm9kZV09XCJyb3dOb2RlXCJcbiAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICBAaWYoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEsIHJvd05vZGUpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICdkaXNwbGF5JzogaXNTZWxlY3RFbmFibGVkKHJvd0RhdGEsIHJvd05vZGUpID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0JzogY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uID8gJy0zNHB4JyA6ICcwcHgnXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYoY29sLnRhZ0NvbG9yKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRhZ0NvbG9yKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuYm9vbGVhblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICdwaS1jaGVjayB0ZXh0LWdyZWVuLTMwMCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEuMXJlbVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nSWY9XCIhY29sLmJvb2xlYW5cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS0wXCI+e3sgcm93RGF0YVtjb2wuZmllbGRdIH19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbC5zdWJ0aXRsZVwiIGNsYXNzPVwibS0wIHRleHQteHMgZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5zdWJ0aXRsZV0gfX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnRlbXBsYXRlICYmIHZhbGlkYXRlU2hvd1RlbXBsYXRlKHJvd05vZGUsIGNvbClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cblxuICAgICAgICA8dGRcbiAgICAgICAgICBzdHlsZT1cImJvcmRlci1sZWZ0OiBub25lOyB0ZXh0LWFsaWduOiBlbmRcIlxuICAgICAgICAgICpuZ0lmPVwiKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApIHx8IGNvbmZpZy5hY3Rpb25zUGFpXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyUmlnaHRdPVwicm93Tm9kZS5sZXZlbCA9PT0gMCA/ICdub25lJyA6ICcnXCJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCJyb3dOb2RlLmxldmVsID09PSAwID8gJ25vbmUnIDogJydcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApICYmXG4gICAgICAgICAgICAgIHZhbGlkYXRlQWN0aW9uUG9zaXRpb24ocm93Tm9kZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZS1ob3JpeiBwLTFcIlxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjVweFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgbW9yZV9ob3JpelxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICBAZm9yKGFjdGlvbiBvZiBjb25maWcuYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHAtbWVudVxuICAgICAgICAgICAgICAjbWVudVxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFttb2RlbF09XCJtZW51SXRlbXNcIlxuICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgPjwvcC1tZW51PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmKGNvbmZpZy5hY3Rpb25zUGFpPy5sZW5ndGggPz8gMCA+IDAgJiYgcm93Tm9kZS5sZXZlbCA9PSAwKXtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb25QYWkgb2YgY29uZmlnLmFjdGlvbnNQYWk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgQGlmKGdldE9yRXhlY3V0ZShhY3Rpb25QYWkudmlzaWJsZSwgcm93RGF0YSkgPz8gdHJ1ZSkge1xuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpOyBhY3Rpb25QYWkuY29tbWFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uUGFpLmljb25cIlxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aW9uUGFpLnNldmVyaXR5IHx8ICd0ZXJ0aWFyeSdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29uZmlnLmNvbHVtbnMubGVuZ3RoICsgMVwiXG4gICAgICAgICAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGV4dG9FbXB0eU1lc3NhZ2UgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRyZWVUYWJsZT5cbjwvZGl2PlxuIl19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLXRhYmxlL2t2LXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdHJlZS10YWJsZS9rdi10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFFTCxZQUFZLEVBQ1osYUFBYSxHQUNkLE1BQU0sd0NBQXdDLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFckYsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7OztBQVF0RSxNQUFNLE9BQU8sb0JBQW9CO0lBcUIvQixZQUNVLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQmhDLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFFbEIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBSXRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHNCQUFp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RUFPaEIsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBVUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBUzZCLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUNkLFVBQVU7c0JBQTdCLEtBQUs7dUJBQUMsV0FBVztnQkFFSSxVQUFVO3NCQUEvQixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0ssVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUd2QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0sIFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XHJcbmltcG9ydCB7XHJcbiAgVmFsdWVPckZuLFxyXG4gIGdldE9yRXhlY3V0ZSxcclxuICBtYXBUb01lbnVJdGVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IHsgVGFibGVQYWdpbmF0ZSB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnBhZ2luYXRlJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9hcGkvZGlyZWN0aXZlcy90ZW1wbGF0ZS90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUcmVlVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90cmVlLXRhYmxlL3RyZWUtdGFibGUuY29uZmlnJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10cmVlLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUcmVldGFibGVDb21wb25lbnQge1xyXG4gIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVSb3dOb2RlU3RpY2t5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFRyZWVUYWJsZUNvbmZpZztcclxuICBASW5wdXQoKSBkYXRhU291cmNlITogYW55O1xyXG4gIEBJbnB1dCgpIGdyaWRMaW5lczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRhYmxlQ2FwdGFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93cyA9IDEwO1xyXG4gIEBJbnB1dCgpIHRyZWVUYWJsZURyYWdnYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRyYW5zZmVyQXJyYXlJdGVtID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb3JkZW5hY2FvITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcclxuICBASW5wdXQoKSB0ZXh0b0VtcHR5TWVzc2FnZTogc3RyaW5nID0gJ05lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvJztcclxuICBASW5wdXQoKSBjaGlsZHJlblJlY29pbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKXt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIE8gdmFsb3IgZGUgcGFnZUxpbmtzIMOpIGF0cmlidcOtZG8gZGUgYWNvcmRvIGNvbSBvIHRhbWFuaG8gZGEgdGVsYSwgZXNzYSBwcm9wcmllZGFkZSBuw6NvIGVzdMOhIHNlbmRvIHV0aWxpemFkYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnMhOiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgTyB2YWxvciBkZSBwYWdlTGlua3Mgw6kgYXRyaWJ1w61kbyBkZSBhY29yZG8gY29tIG8gdGFtYW5obyBkYSB0ZWxhLCBlc3NhIHByb3ByaWVkYWRlIG7Do28gZXN0w6Egc2VuZG8gdXRpbGl6YWRhXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGFnZUxpbmtzITogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIEEgcXVhbnRpZGFkZSBkZSBwYWdpbml0b3JQYWdlSWNvbnMgw6kgYXRyaWJ1w61kbyBkZSBhY29yZG8gY29tIG8gdGFtYW5obyBkYSB0ZWxhLCBlc3NhIHByb3ByaWVkYWRlIG7Do28gZXN0w6Egc2VuZG8gdXRpbGl6YWRhXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRvdWJsZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbk5vZGVTZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbk5vZGVVbnNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uRHJvcEl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgaWYgKHRoaXMub3JkZW5hY2FvKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuc29ydFRyZWVOb2Rlcyh0aGlzLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKFRyZWVUYWJsZSkgcFRyZWVUYWJsZSE6IFRyZWVUYWJsZTtcclxuICBAVmlld0NoaWxkKCdpbnB1dEJ1c2NhJykgaW5wdXRCdXNjYSE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW1Mb3RlLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUcmVlVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRlKCRldmVudDogYW55KSB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cclxuICAgICAgICAoJGV2ZW50Py5maXJzdCA+IDAgPyAkZXZlbnQuZmlyc3QgLyAkZXZlbnQucm93cyA6ICRldmVudC5maXJzdCkgKyAxO1xyXG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xyXG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XHJcblxyXG4gICAgICBpZiAoJGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9ICRldmVudC5nbG9iYWxGaWx0ZXI7XHJcblxyXG4gICAgICBpZiAoJGV2ZW50LnNvcnRGaWVsZClcclxuICAgICAgICBvcmRlbmFjYW8gPSBgJHskZXZlbnQuc29ydEZpZWxkfSAke1xyXG4gICAgICAgICAgJGV2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgfWA7XHJcblxyXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XHJcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcclxuICAgICAgICB0YW1hbmhvUGFnaW5hOiAkZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcclxuICAgIGNvbnN0IGRyYWdnZWROb2RlID0gZXZlbnQuaXRlbS5kYXRhO1xyXG4gICAgY29uc3QgZHJhZ2dlZENoaWxkRGF0YSA9IGRyYWdnZWROb2RlLm5vZGUuZGF0YTtcclxuXHJcbiAgICBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPT09IDApIHtcclxuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZGF0YVNvdXJjZSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPj0gMSkge1xyXG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gZHJhZ2dlZE5vZGUubm9kZS5wYXJlbnQ7XHJcblxyXG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudENoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5tYXAoXHJcbiAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZGF0YVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDaGlsZEluZGV4ID0gcGFyZW50Q2hpbGRyZW4uaW5kZXhPZihkcmFnZ2VkQ2hpbGREYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVDdXJyZW50SW5kZXggPVxyXG4gICAgICAgICAgcHJldmlvdXNDaGlsZEluZGV4ICsgKGV2ZW50LmN1cnJlbnRJbmRleCAtIGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRDaGlsZEluZGV4ID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgTWF0aC5taW4ocGFyZW50Q2hpbGRyZW4ubGVuZ3RoIC0gMSwgcmVsYXRpdmVDdXJyZW50SW5kZXgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZpb3VzQ2hpbGRJbmRleCAhPT0gLTEgJiYgdGFyZ2V0Q2hpbGRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbixcclxuICAgICAgICAgICAgcHJldmlvdXNDaGlsZEluZGV4LFxyXG4gICAgICAgICAgICB0YXJnZXRDaGlsZEluZGV4XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkcm9wSW5mbzogYW55ID0ge1xyXG4gICAgICAgICAgcHJldmlvdXNDaGlsZEluZGV4OiBwcmV2aW91c0NoaWxkSW5kZXggKyAxLFxyXG4gICAgICAgICAgdGFyZ2V0Q2hpbGRJbmRleDogdGFyZ2V0Q2hpbGRJbmRleCArIDEsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkRyb3BJdGVtLmVtaXQoeyBldmVudDogZXZlbnQsIGRyb3BDaGlsZEluZm86IGRyb3BJbmZvIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICBpZiAoZHJhZ2dlZE5vZGUubGV2ZWwgPT09IDApIHtcclxuICAgICAgdGhpcy5vbkRyb3BJdGVtLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydFRyZWVOb2Rlcyhub2RlczogVHJlZU5vZGVbXSk6IFRyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGFbdGhpcy5vcmRlbmFjYW9dIC0gYi5kYXRhW3RoaXMub3JkZW5hY2FvXSlcclxuICAgICAgLm1hcCgobm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5zb3J0VHJlZU5vZGVzKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUYXJnZXRDaGlsZEluZGV4KFxyXG4gICAgZXZlbnQ6IENka0RyYWdEcm9wPGFueT4sXHJcbiAgICBwYXJlbnRDaGlsZHJlbjogYW55W10sXHJcbiAgICBwcmV2aW91c0NoaWxkSW5kZXg6IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBjb25zdCB0YXJnZXRDaGlsZEluZGV4ID1cclxuICAgICAgcHJldmlvdXNDaGlsZEluZGV4ICsgKGV2ZW50LmN1cnJlbnRJbmRleCAtIGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG5cclxuICAgIGlmICh0YXJnZXRDaGlsZEluZGV4IDwgMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSBpZiAodGFyZ2V0Q2hpbGRJbmRleCA+PSBwYXJlbnRDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHBhcmVudENoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0Q2hpbGRJbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHJldHVyblN0eWxlUm93KGNvbDogYW55LCByb3dOb2RlOiBhbnkpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgaXNGaXJzdENvbHVtbiA9IGNvbC5maWVsZCA9PT0gdGhpcy5jb25maWcuY29sdW1uc1swXS5maWVsZDtcclxuICAvLyAgIGNvbnN0IGJhc2VPcGFjaXR5ID0gMTtcclxuICAvLyAgIGNvbnN0IG1heExldmVscyA9IDQ7XHJcblxyXG4gIC8vICAgaWYgKGlzRmlyc3RDb2x1bW4gJiYgcm93Tm9kZS5sZXZlbCA+PSAwKSB7XHJcbiAgLy8gICAgIGNvbnN0IG9wYWNpdHkgPSBiYXNlT3BhY2l0eSAtIChyb3dOb2RlLmxldmVsIC8gbWF4TGV2ZWxzKTtcclxuXHJcbiAgLy8gICAgIHJldHVybiBgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCByZ2JhKDU5LCAxMTAsIDE1OCwgJHsgb3BhY2l0eSB9KSAhaW1wb3J0YW50O2A7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgaWYgKHJvd05vZGUubGV2ZWwgPT0gMClcclxuICAvLyAgICAgcmV0dXJuICdib3JkZXItbGVmdDogbm9uZSAhaW1wb3J0YW50OyBib3JkZXItcmlnaHQ6IG5vbmUgIWltcG9ydGFudCdcclxuXHJcbiAgLy8gICByZXR1cm4gJyc7XHJcbiAgLy8gfVxyXG5cclxuICBjcmlhck1lbnVzTW9kYWwoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XHJcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuY29uZmlnLmFjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtZW51SW5zZXJ0ID0gbWFwVG9NZW51SXRlbShhY3Rpb24sIGRhdGEpO1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmNvbW1hbmQgPT0gbWVudUluc2VydC5jb21tYW5kXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IDApIHRoaXMubWVudUl0ZW1zLnB1c2gobWVudUluc2VydCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5kaXNhYmxlZCAhPSBpdGVtWzBdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcclxuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xyXG4gICAgcmV0dXJuIHZpc2libGU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUFjdGlvblBvc2l0aW9uKHJvd05vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjdGlvbnNQYWkgJiYgcm93Tm9kZS5sZXZlbCA9PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICBlbHNlIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZG91YmxlQ2xpY2soZTogYW55LCByb3dEYXRhOiBhbnkpIHtcclxuICAgIGxldCBldmVudERvdWJsZUNsaWNrID0geyBldmVudDogZSwgcm93RGF0YTogcm93RGF0YSB9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIC8vIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXHJcbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnksIHJvd05vZGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhLCByb3dOb2RlKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RFbmFibGVkKHJvd0RhdGE6IGFueSwgcm93Tm9kZTogYW55KTogYm9vbGVhbiB7XHJcbiAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNpYmxlQ2hlY2tib3hGdW5jdGlvblxyXG4gICA/IHRoaXMuY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEsIHJvd05vZGUpIFxyXG4gICAgOiB0cnVlXHJcbiAgfVxyXG5cclxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uTm9kZVVuc2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbk5vZGVVbnNlbGVjdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVNob3dUZW1wbGF0ZShyb3dOb2RlOiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY29sLnRlbXBsYXRlT25seSkge1xyXG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ3BhaScpIHtcclxuICAgICAgICByZXR1cm4gcm93Tm9kZS5sZXZlbCA9PT0gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLnRlbXBsYXRlT25seSA9PT0gJ2ZpbGhvJykge1xyXG4gICAgICAgIHJldHVybiByb3dOb2RlLmxldmVsID09PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldEljb24oaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpY29uLmluY2x1ZGVzKCdwaS0nKSA/IGBwaSAke2ljb259YCA6ICcnO1xyXG4gIH1cclxuXHJcbiAgYWxpZ24oY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICBpZiAoY29sLmNlbnRyYWxpemUpIHJldHVybiAnanVzdGlmeS1jb250ZW50LWNlbnRlcic7XHJcbiAgICBlbHNlIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQtZW5kJztcclxuICAgIGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUcmVlVGFibGUoKXtcclxuICAgIGlmICh0aGlzLnBUcmVlVGFibGUpIHRoaXMucFRyZWVUYWJsZS5yZXNldCgpO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRCdXNjYSkgdGhpcy5pbnB1dEJ1c2NhLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cIiF0cmVlVGFibGVEcmFnZ2FibGVcIj5cclxuICA8cC10cmVlVGFibGVcclxuICAgICN0dFxyXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICBbdGFibGVTdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAnNTByZW0nIH1cIlxyXG4gICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXHJcbiAgICBbcm93c109XCJyb3dzXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCJcclxuICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJ0YW1hbmhvVGVsYSA+IDk2MCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICBbcGFnZUxpbmtzXT1cInRhbWFuaG9UZWxhID4gOTYwID8gMiA6IDFcIlxyXG4gICAgW3N0eWxlQ2xhc3NdPVwiZ3JpZExpbmVzID8gJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycgOiAnJ1wiXHJcbiAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJwYWdpbmF0ZSgkZXZlbnQpXCJcclxuICAgIChvbk5vZGVTZWxlY3QpPVwib25Ob2RlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAob25Ob2RlVW5zZWxlY3QpPVwib25Ob2RlVW5zZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfVwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cImNvbmZpZy5lbmFibGVDYXRpb25cIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wXCJcclxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlYWVhZWFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpdGxlXCIgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBteS0zXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCIgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBjb2wtMTAgcC0wIG1kOmNvbC02IGxnOmNvbC00IGp1c3RpZnktY29udGVudC1jZW50ZXIge3tcclxuICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnJyA6ICdpbnB1dC1zZWFyY2gnXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKHR0LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW1cIlxyXG4gICAgICAgICAgICAgICNpbnB1dEJ1c2NhXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmQgcC0wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBidG5zLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIEBpZigoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIHx8IGFjdGlvbi5zaG93QWNvZXNMb3RlKSAmJlxyXG4gICAgICAgICAgICBleGliaXJDYW1wbyhhY3Rpb24sIHRoaXMuYWN0aW9uKSkge1xyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aW9uPy5jb21tYW5kKCk7IGFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uZGlzYWJsZWQsIHNlbGVjdGVkSXRlbXMpIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmljb24sIHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aW9uLnNldmVyaXR5IHx8ICd0ZXJ0aWFyeSdcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9IH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgQGlmKHNob3dIZWFkZXIpe1xyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgQGZvcihjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KXtcclxuICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZmxleDogJGluZGV4ID09IDAsICdnYXAtMyc6ICRpbmRleCA9PSAwIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIkaW5kZXggPT0gMCAmJiBjb25maWcuZW5hYmxlU2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUhlYWRlckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyICB7eyBhbGlnbihjb2wpIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIEBpZihjb2wuc29ydGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlU29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiIC8+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPmluZm88L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICAgIEBpZiAoY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCkge1xyXG4gICAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCI1XCI+PC90aD5cclxuICAgICAgICAgIH0gfVxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7eyBhbGlnbihjb2wpIH19XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICBAaWYoY29sLnNvcnRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlU29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiIC8+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICB9IEBpZiAoY29uZmlnLmFjdGlvbnM/Lmxlbmd0aCA/PyAwID4gMCkge1xyXG4gICAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCI1XCI+PC90aD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgfVxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dOb2RlXHJcbiAgICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcclxuICAgICAgICAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQgfVwiXHJcbiAgICAgID5cclxuICAgICAgICBAZm9yKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpe1xyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInJvd05vZGUubGV2ZWwgIT09IDAgPyAnc3RpY2t5JyA6IG51bGxcIlxyXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXHJcbiAgICAgICAgICAgIGNoaWxkcmVuUmVjb2lsICYmIHJvd05vZGUubGV2ZWwgIT09IDAgPyByb3dOb2RlLmxldmVsICogMzAgOiBudWxsXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW3N0eWxlLmJvcmRlclJpZ2h0XT1cInJvd05vZGUubGV2ZWwgPT09IDAgPyAnbm9uZScgOiAnJ1wiXHJcbiAgICAgICAgICBbc3R5bGUuYm9yZGVyTGVmdF09XCJcclxuICAgICAgICAgICAgcm93Tm9kZS5sZXZlbCA9PT0gMCAmJiBjb2wuZmllbGQgIT0gY29uZmlnLmNvbHVtbnNbMF0uZmllbGRcclxuICAgICAgICAgICAgICA/ICdub25lJ1xyXG4gICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cge3sgYWxpZ24oY29sKSB9fVwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwtaC1mdWxsIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIiRpbmRleCA9PSAwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVRvZ2dsZXIgY2xhc3M9XCJoaWRkZW5WaXNpYmxlXCIgW3Jvd05vZGVdPVwicm93Tm9kZVwiIC8+XHJcblxyXG4gICAgICAgICAgICAgIEBpZihjb25maWcuZW5hYmxlU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEsIHJvd05vZGUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd05vZGVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiBpc1NlbGVjdEVuYWJsZWQocm93RGF0YSwgcm93Tm9kZSkgPyAnYmxvY2snIDogJ25vbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICdtYXJnaW4tbGVmdCc6IGNvbmZpZy52aXNpYmxlQ2hlY2tib3hGdW5jdGlvbiA/ICctMzRweCcgOiAnMHB4J1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWdcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRhZ0NvbG9yKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3BpLWNoZWNrIHRleHQtZ3JlZW4tMzAwJyA6ICcnXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEuMXJlbVwiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nSWY9XCIhY29sLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLTBcIj57eyByb3dEYXRhW2NvbC5maWVsZF0gfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbC5zdWJ0aXRsZVwiIGNsYXNzPVwibS0wIHRleHQteHMgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLnN1YnRpdGxlXSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50ZW1wbGF0ZSAmJiB2YWxpZGF0ZVNob3dUZW1wbGF0ZShyb3dOb2RlLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgc3R5bGU9XCJib3JkZXItbGVmdDogbm9uZTsgdGV4dC1hbGlnbjogZW5kXCJcclxuICAgICAgICAgICpuZ0lmPVwiKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApIHx8IGNvbmZpZy5hY3Rpb25zUGFpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApICYmXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGVBY3Rpb25Qb3NpdGlvbihyb3dOb2RlKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXogcC0xXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjVweFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICBAZm9yKGFjdGlvbiBvZiBjb25maWcuYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8cC1tZW51XHJcbiAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgPjwvcC1tZW51PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgQGlmKGNvbmZpZy5hY3Rpb25zUGFpPy5sZW5ndGggPz8gMCA+IDAgJiYgcm93Tm9kZS5sZXZlbCA9PSAwKXtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgQGZvciAoYWN0aW9uUGFpIG9mIGNvbmZpZy5hY3Rpb25zUGFpOyB0cmFjayAkaW5kZXgpIHsgQGlmXHJcbiAgICAgICAgICAgIChnZXRPckV4ZWN1dGUoYWN0aW9uUGFpLnZpc2libGUsIHJvd0RhdGEpID8/IHRydWUpIHtcclxuICAgICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7IGFjdGlvblBhaS5jb21tYW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImFjdGlvblBhaS5pY29uXCJcclxuICAgICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aW9uUGFpLnNldmVyaXR5IHx8ICd0ZXJ0aWFyeSdcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9IH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbmZpZy5jb2x1bW5zLmxlbmd0aCArIDFcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHRleHRvRW1wdHlNZXNzYWdlIH19XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRyZWVUYWJsZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2XHJcbiAgKm5nSWY9XCJ0cmVlVGFibGVEcmFnZ2FibGVcIlxyXG4gIGNka0Ryb3BMaXN0XHJcbiAgY2xhc3M9XCJleGFtcGxlLWxpc3RcIlxyXG4gIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcclxuPlxyXG4gIDxwLXRyZWVUYWJsZVxyXG4gICAgI3R0XHJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcclxuICAgIFt0YWJsZVN0eWxlXT1cInsgJ21pbi13aWR0aCc6ICc1MHJlbScgfVwiXHJcbiAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcclxuICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3BhZ2VMaW5rc109XCJwYWdlTGlua3NcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbNSwgMTAsIDI1LCA1MF1cIlxyXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cInRhbWFuaG9UZWxhID4gOTYwID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgIFtwYWdlTGlua3NdPVwidGFtYW5ob1RlbGEgPiA5NjAgPyAyIDogMVwiXHJcbiAgICBbc3R5bGVDbGFzc109XCJncmlkTGluZXMgPyAncC10cmVldGFibGUtZ3JpZGxpbmVzJyA6ICcnXCJcclxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMiBtLTBcIlxyXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2VhZWFlYVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcudGl0bGVcIiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcuc3VidGl0bGVcIiBjbGFzcz1cInRleHQtc20gbWItNCBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGNvbC0xMCBwLTAgbWQ6Y29sLTYgbGc6Y29sLTQganVzdGlmeS1jb250ZW50LWNlbnRlciB7e1xyXG4gICAgICAgICAgICB0YW1hbmhvVGVsYSA8IDc2OCA/ICcnIDogJ2lucHV0LXNlYXJjaCdcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodHQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImgtMnJlbVwiXHJcbiAgICAgICAgICAgICAgI2lucHV0QnVzY2FcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTEganVzdGlmeS1jb250ZW50LWVuZCBwLTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGJ0bnMtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmKChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmXHJcbiAgICAgICAgICAgIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLnRvb2x0aXAsIHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5kaXNhYmxlZCwgc2VsZWN0ZWRJdGVtcykgfHwgZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uaWNvbiwgc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb24uc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIH0gfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICBAaWYoc2hvd0hlYWRlcil7XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICBAZm9yKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpe1xyXG4gICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgIFt0dFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBmbGV4OiAkaW5kZXggPT0gMCwgJ2dhcC0zJzogJGluZGV4ID09IDAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiRpbmRleCA9PSAwICYmIGNvbmZpZy5lbmFibGVTZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgIHt7IGFsaWduKGNvbCkgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICBcclxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC5zb3J0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICA8cC10cmVlVGFibGVTb3J0SWNvbiBbZmllbGRdPVwiY29sLmZpZWxkXCIgLz5cclxuICBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICA+aW5mbzwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgW3R0U29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciAge3sgYWxpZ24oY29sKSB9fVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgXHJcbiAgICAgICAgICAgICAgQGlmKGNvbC5zb3J0YWJsZSkge1xyXG4gICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiAvPlxyXG4gIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCI1XCI+PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPiAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dOb2RlXHJcbiAgICAgIGxldC1yb3dEYXRhPVwicm93RGF0YVwiXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIGNka0RyYWdcclxuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93Tm9kZVwiXHJcbiAgICAgICAgW3R0Um93XT1cInJvd05vZGVcIlxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7IGNhcGl0YWxpemU6IHRhYmxlQ2FwdGFsaXplZCB9XCJcclxuICAgICAgPlxyXG4gICAgICAgIEBmb3IoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCl7XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBbc3R5bGUucG9zaXRpb25dPVwiIWRpc2FibGVSb3dOb2RlU3RpY2t5ICYmIHJvd05vZGUubGV2ZWwgIT09IDAgPyAnc3RpY2t5JyA6IG51bGxcIlxyXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXHJcbiAgICAgICAgICAgIGNoaWxkcmVuUmVjb2lsICYmIHJvd05vZGUubGV2ZWwgIT09IDAgPyByb3dOb2RlLmxldmVsICogMzAgOiBudWxsXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93ICB7eyBhbGlnbihjb2wpIH19XCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbC1oLWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiJGluZGV4ID09IDBcIlxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuVmlzaWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgW3Jvd05vZGVdPVwicm93Tm9kZVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgQGlmKGNvbmZpZy5lbmFibGVTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSwgcm93Tm9kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93Tm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSc6IGlzU2VsZWN0RW5hYmxlZChyb3dEYXRhLCByb3dOb2RlKSA/ICdibG9jaycgOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1sZWZ0JzogY29uZmlnLnZpc2libGVDaGVja2JveEZ1bmN0aW9uID8gJy0zNHB4JyA6ICcwcHgnXHJcbiAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3BpLWNoZWNrIHRleHQtZ3JlZW4tMzAwJyA6ICcnXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEuMXJlbVwiXHJcbiAgICAgICAgICAgICAgICA+PC9pPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nSWY9XCIhY29sLmJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLTBcIj57eyByb3dEYXRhW2NvbC5maWVsZF0gfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbC5zdWJ0aXRsZVwiIGNsYXNzPVwibS0wIHRleHQteHMgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLnN1YnRpdGxlXSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50ZW1wbGF0ZSAmJiB2YWxpZGF0ZVNob3dUZW1wbGF0ZShyb3dOb2RlLCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgc3R5bGU9XCJib3JkZXItbGVmdDogbm9uZTsgdGV4dC1hbGlnbjogZW5kXCJcclxuICAgICAgICAgICpuZ0lmPVwiKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApIHx8IGNvbmZpZy5hY3Rpb25zUGFpXCJcclxuICAgICAgICAgIFtzdHlsZS5ib3JkZXJSaWdodF09XCJyb3dOb2RlLmxldmVsID09PSAwID8gJ25vbmUnIDogJydcIlxyXG4gICAgICAgICAgW3N0eWxlLmJvcmRlckxlZnRdPVwicm93Tm9kZS5sZXZlbCA9PT0gMCA/ICdub25lJyA6ICcnXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKGNvbmZpZy5hY3Rpb25zPy5sZW5ndGggPz8gMCA+IDApICYmXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGVBY3Rpb25Qb3NpdGlvbihyb3dOb2RlKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXogcC0xXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjVweFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICBAZm9yKGFjdGlvbiBvZiBjb25maWcuYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8cC1tZW51XHJcbiAgICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgPjwvcC1tZW51PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgQGlmKGNvbmZpZy5hY3Rpb25zUGFpPy5sZW5ndGggPz8gMCA+IDAgJiYgcm93Tm9kZS5sZXZlbCA9PSAwKXtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgQGZvciAoYWN0aW9uUGFpIG9mIGNvbmZpZy5hY3Rpb25zUGFpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmKGdldE9yRXhlY3V0ZShhY3Rpb25QYWkudmlzaWJsZSwgcm93RGF0YSkgPz8gdHJ1ZSkge1xyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKTsgYWN0aW9uUGFpLmNvbW1hbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uUGFpLmljb25cIlxyXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb25QYWkuc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIH0gfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29uZmlnLmNvbHVtbnMubGVuZ3RoICsgMVwiXHJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgdGV4dG9FbXB0eU1lc3NhZ2UgfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdHJlZVRhYmxlPlxyXG48L2Rpdj5cclxuIl19
@@ -36,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
36
36
  ]
37
37
  }]
38
38
  }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS10YWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLXRhYmxlL2t2LXRyZWUtdGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQWlCL0QsTUFBTSxPQUFPLGlCQUFpQjs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBYjFCLG9CQUFvQixhQUdwQixZQUFZO1lBQ1osYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsY0FBYyxhQUdkLG9CQUFvQjsrR0FHWCxpQkFBaUIsWUFWMUIsWUFBWTtZQUNaLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGNBQWM7OzJGQU1MLGlCQUFpQjtrQkFmN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osb0JBQW9CO3FCQUNyQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxjQUFjO3FCQUNmO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBLdlRyZWV0YWJsZUNvbXBvbmVudCB9IGZyb20gJy4va3YtdHJlZS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBQcmltZU5nTW9kdWxlIH0gZnJvbSAnLi4vLi4vYXBpL21vZHVsZXMvcHJpbWVuZy5tb2R1bGUnO1xuaW1wb3J0IHsgS3ZCdXR0b25Nb2R1bGUgfSBmcm9tICcuLi9rdi1idXR0b24va3YtYnV0dG9uLm1vZHVsZSc7XG5pbXBvcnQgeyBLdklucHV0c01vZHVsZSB9IGZyb20gJy4uL2t2LWlucHV0cy9rdi1pbnB1dHMubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgS3ZUcmVldGFibGVDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBQcmltZU5nTW9kdWxlLFxuICAgIEt2QnV0dG9uTW9kdWxlLFxuICAgIEt2SW5wdXRzTW9kdWxlLFxuICAgIEt2QnV0dG9uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBLdlRyZWV0YWJsZUNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt2VHJlZXRhYmxlTW9kdWxlIHsgfVxuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS10YWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLXRhYmxlL2t2LXRyZWUtdGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQWlCL0QsTUFBTSxPQUFPLGlCQUFpQjs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBYjFCLG9CQUFvQixhQUdwQixZQUFZO1lBQ1osYUFBYTtZQUNiLGNBQWM7WUFDZCxjQUFjO1lBQ2QsY0FBYyxhQUdkLG9CQUFvQjsrR0FHWCxpQkFBaUIsWUFWMUIsWUFBWTtZQUNaLGFBQWE7WUFDYixjQUFjO1lBQ2QsY0FBYztZQUNkLGNBQWM7OzJGQU1MLGlCQUFpQjtrQkFmN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osb0JBQW9CO3FCQUNyQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxjQUFjO3FCQUNmO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgS3ZUcmVldGFibGVDb21wb25lbnQgfSBmcm9tICcuL2t2LXRyZWUtdGFibGUuY29tcG9uZW50J1xyXG5pbXBvcnQgeyBQcmltZU5nTW9kdWxlIH0gZnJvbSAnLi4vLi4vYXBpL21vZHVsZXMvcHJpbWVuZy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2t2LWJ1dHRvbi9rdi1idXR0b24ubW9kdWxlJztcclxuaW1wb3J0IHsgS3ZJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi9rdi1pbnB1dHMva3YtaW5wdXRzLm1vZHVsZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgS3ZUcmVldGFibGVDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFByaW1lTmdNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbk1vZHVsZSxcclxuICAgIEt2SW5wdXRzTW9kdWxlLFxyXG4gICAgS3ZCdXR0b25Nb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEt2VHJlZXRhYmxlQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUcmVldGFibGVNb2R1bGUgeyB9XHJcbiJdfQ==