bways-report 0.1.2 → 0.1.3

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 (100) hide show
  1. package/README.md +150 -51
  2. package/esm2022/lib/core/errors/reporting-errors.mjs +2 -2
  3. package/esm2022/lib/core/index.mjs +3 -1
  4. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  5. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +50 -5
  8. package/esm2022/lib/core/utils/data-normalization.util.mjs +56 -0
  9. package/esm2022/lib/core/utils/report-parameter.util.mjs +180 -0
  10. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +82 -0
  11. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +34 -9
  12. package/esm2022/lib/data-access/adapters/http-masterdata.adapter.mjs +38 -0
  13. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +217 -0
  14. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +3 -1
  15. package/esm2022/lib/data-access/adapters/index.mjs +8 -3
  16. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +167 -0
  17. package/esm2022/lib/data-access/adapters/mock-datasource.adapter.mjs +60 -0
  18. package/esm2022/lib/data-access/contracts/api-dtos.mjs +6 -0
  19. package/esm2022/lib/data-access/contracts/index.mjs +2 -1
  20. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +555 -92
  21. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +593 -0
  22. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +164 -23
  23. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +410 -12
  24. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +149 -2
  25. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +109 -6
  26. package/esm2022/lib/features/designer/designer.component.mjs +101 -12
  27. package/esm2022/lib/features/designer/index.mjs +4 -1
  28. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +102 -0
  29. package/esm2022/lib/features/designer/services/designer-state.service.mjs +10 -9
  30. package/esm2022/lib/features/designer/services/report-template.service.mjs +318 -0
  31. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +41 -9
  32. package/esm2022/lib/features/export/index.mjs +2 -2
  33. package/esm2022/lib/features/export/models/export.models.mjs +1 -1
  34. package/esm2022/lib/features/export/services/report-export.service.mjs +420 -5
  35. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  36. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +231 -33
  37. package/esm2022/lib/features/runtime/index.mjs +2 -1
  38. package/esm2022/lib/features/runtime/report-execution.service.mjs +64 -0
  39. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +224 -26
  40. package/esm2022/lib/features/runtime/report-runtime.component.mjs +341 -7
  41. package/esm2022/lib/features/runtime/rpt-report.component.mjs +537 -0
  42. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +19 -8
  43. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +18 -7
  44. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +346 -0
  45. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +727 -73
  46. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  47. package/esm2022/lib/primitives/components/index.mjs +2 -1
  48. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  49. package/esm2022/lib/provide-reporting.mjs +145 -24
  50. package/fesm2022/bways-report.mjs +6871 -753
  51. package/fesm2022/bways-report.mjs.map +1 -1
  52. package/lib/core/index.d.ts +2 -0
  53. package/lib/core/models/report-datasource.model.d.ts +9 -0
  54. package/lib/core/models/report-definition.model.d.ts +2 -0
  55. package/lib/core/models/report-grid.model.d.ts +44 -0
  56. package/lib/core/services/report-session-context.service.d.ts +6 -1
  57. package/lib/core/utils/data-normalization.util.d.ts +15 -0
  58. package/lib/core/utils/report-parameter.util.d.ts +35 -0
  59. package/lib/data-access/adapters/http-datasource.adapter.d.ts +20 -0
  60. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -0
  61. package/lib/data-access/adapters/http-masterdata.adapter.d.ts +13 -0
  62. package/lib/data-access/adapters/http-persistence.adapter.d.ts +27 -0
  63. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +2 -0
  64. package/lib/data-access/adapters/index.d.ts +7 -2
  65. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +19 -0
  66. package/lib/data-access/adapters/mock-datasource.adapter.d.ts +9 -0
  67. package/lib/data-access/contracts/api-dtos.d.ts +67 -0
  68. package/lib/data-access/contracts/index.d.ts +1 -0
  69. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +22 -0
  70. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -1
  71. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +33 -0
  72. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -0
  73. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +16 -2
  74. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +5 -0
  75. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -0
  76. package/lib/features/designer/designer.component.d.ts +5 -0
  77. package/lib/features/designer/index.d.ts +4 -0
  78. package/lib/features/designer/rpt-report-designer.component.d.ts +38 -0
  79. package/lib/features/designer/services/designer-state.service.d.ts +1 -1
  80. package/lib/features/designer/services/report-template.service.d.ts +32 -0
  81. package/lib/features/designer/utilities/canvas-layout.util.d.ts +4 -0
  82. package/lib/features/export/index.d.ts +2 -2
  83. package/lib/features/export/models/export.models.d.ts +23 -0
  84. package/lib/features/export/services/report-export.service.d.ts +31 -2
  85. package/lib/features/runtime/dynamic-renderer.component.d.ts +39 -2
  86. package/lib/features/runtime/index.d.ts +2 -0
  87. package/lib/features/runtime/report-execution.service.d.ts +16 -0
  88. package/lib/features/runtime/report-grid-bridge.component.d.ts +129 -6
  89. package/lib/features/runtime/report-runtime.component.d.ts +83 -1
  90. package/lib/features/runtime/rpt-report.component.d.ts +66 -0
  91. package/lib/primitives/components/button/rpt-button.component.d.ts +5 -2
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +1 -0
  93. package/lib/primitives/components/date-range/rpt-date-range.component.d.ts +43 -0
  94. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +55 -7
  95. package/lib/primitives/components/index.d.ts +2 -0
  96. package/lib/provide-reporting.d.ts +79 -26
  97. package/package.json +2 -1
  98. package/schematics/collection.json +10 -0
  99. package/schematics/ng-add/index.js +45 -0
  100. package/schematics/ng-add/schema.json +17 -0
@@ -106,7 +106,7 @@ export class RoutedReportRuntimeComponent {
106
106
  </div>
107
107
  }
108
108
  </div>
109
- `, isInline: true, styles: [".rpt-routed-container{display:flex;flex-direction:column;gap:var(--rpt-space-md, 16px);width:100%;min-height:100%;box-sizing:border-box;padding:var(--rpt-space-md, 16px)}.rpt-routed-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--rpt-space-sm, 8px);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-routed-title-row{display:flex;align-items:center;gap:12px}.rpt-routed-title{font-size:1.25rem;font-weight:700;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-routed-version{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b)}.rpt-routed-loading,.rpt-routed-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;color:var(--rpt-text-muted, #64748b)}.rpt-error-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-md, 8px);padding:32px 40px;box-shadow:var(--rpt-shadow-sm, 0 1px 3px rgba(0,0,0,.05))}.rpt-error-card h3{color:var(--rpt-error-color, #ef4444);margin-top:0}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font-size:.875rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;transition:all .15s ease}.rpt-btn-sm{padding:5px 10px;font-size:.8125rem}.rpt-btn-primary{background:var(--rpt-primary, #2563eb);color:#fff}.rpt-btn-primary:hover{background:var(--rpt-primary-hover, #1d4ed8)}.rpt-btn-secondary{background:var(--rpt-surface-bg, #ffffff);color:var(--rpt-text-color, #1e293b);border-color:var(--rpt-border-color, #cbd5e1)}.rpt-btn-secondary:hover{background:var(--rpt-bg-subtle, #f8fafc)}.rpt-btn-ghost{background:transparent;color:var(--rpt-text-muted, #64748b)}.rpt-btn-ghost:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
+ `, isInline: true, styles: [".rpt-routed-container{display:flex;flex-direction:column;gap:var(--rpt-space-md, 16px);width:100%;min-height:100%;box-sizing:border-box;padding:var(--rpt-space-md, 16px)}.rpt-routed-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--rpt-space-sm, 8px);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-routed-title-row{display:flex;align-items:center;gap:12px}.rpt-routed-title{font-size:1.25rem;font-weight:700;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-routed-version{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b)}.rpt-routed-loading,.rpt-routed-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;color:var(--rpt-text-muted, #64748b)}.rpt-error-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-md, 8px);padding:32px 40px;box-shadow:var(--rpt-shadow-sm, 0 1px 3px rgba(0,0,0,.05))}.rpt-error-card h3{color:var(--rpt-error-color, #ef4444);margin-top:0}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font-size:.875rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;transition:all .15s ease}.rpt-btn-sm{padding:5px 10px;font-size:.8125rem}.rpt-btn-primary{background:var(--rpt-primary, #2563eb);color:#fff}.rpt-btn-primary:hover{background:var(--rpt-primary-hover, #1d4ed8)}.rpt-btn-secondary{background:var(--rpt-surface-bg, #ffffff);color:var(--rpt-text-color, #1e293b);border-color:var(--rpt-border-color, #cbd5e1)}.rpt-btn-secondary:hover{background:var(--rpt-bg-subtle, #f8fafc)}.rpt-btn-ghost{background:transparent;color:var(--rpt-text-muted, #64748b)}.rpt-btn-ghost:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report"], outputs: ["resetRequested", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
110
110
  }
111
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RoutedReportRuntimeComponent, decorators: [{
112
112
  type: Component,
@@ -160,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
160
160
  </div>
161
161
  `, styles: [".rpt-routed-container{display:flex;flex-direction:column;gap:var(--rpt-space-md, 16px);width:100%;min-height:100%;box-sizing:border-box;padding:var(--rpt-space-md, 16px)}.rpt-routed-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--rpt-space-sm, 8px);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-routed-title-row{display:flex;align-items:center;gap:12px}.rpt-routed-title{font-size:1.25rem;font-weight:700;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-routed-version{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b)}.rpt-routed-loading,.rpt-routed-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;color:var(--rpt-text-muted, #64748b)}.rpt-error-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-md, 8px);padding:32px 40px;box-shadow:var(--rpt-shadow-sm, 0 1px 3px rgba(0,0,0,.05))}.rpt-error-card h3{color:var(--rpt-error-color, #ef4444);margin-top:0}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font-size:.875rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;transition:all .15s ease}.rpt-btn-sm{padding:5px 10px;font-size:.8125rem}.rpt-btn-primary{background:var(--rpt-primary, #2563eb);color:#fff}.rpt-btn-primary:hover{background:var(--rpt-primary-hover, #1d4ed8)}.rpt-btn-secondary{background:var(--rpt-surface-bg, #ffffff);color:var(--rpt-text-color, #1e293b);border-color:var(--rpt-border-color, #cbd5e1)}.rpt-btn-secondary:hover{background:var(--rpt-bg-subtle, #f8fafc)}.rpt-btn-ghost{background:transparent;color:var(--rpt-text-muted, #64748b)}.rpt-btn-ghost:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"] }]
162
162
  }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUV6QyxRQUFRO1FBQ04scUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsT0FBTztZQUNULENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztxQkFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDekMsU0FBUyxDQUFDO29CQUNULElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQTRCO1FBQzNDLGtEQUFrRDtJQUNwRCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7d0dBdkRVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLDhFQTlLN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdEVCx5dkVBbERTLFlBQVksOEJBQUUsWUFBWSwrQkFBRSxzQkFBc0IsNEdBQUUsZ0JBQWdCOzs0RkFnTG5FLDRCQUE0QjtrQkFuTHhDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsbUJBQzlELHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0UnVudGltZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3J1bnRpbWUvcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtcm91dGVkLXJ1bnRpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsIFJwdEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1jb250YWluZXJcIj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWxvYWRpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICA8cD5Mb2FkaW5nIHJlcG9ydCBkZWZpbml0aW9uLi4uPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKHJlcG9ydCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tZ2hvc3QgcnB0LWJ0bi1zbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiR28gYmFja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+QmFjazwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZVwiPnt7IHJlcG9ydCgpPy5uYW1lIH19PC9oMT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJvdXRlZC12ZXJzaW9uXCI+dnt7IHJlcG9ydCgpPy52ZXJzaW9uID8/IDEgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGNhbkVkaXQoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tc2Vjb25kYXJ5IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFJlcG9ydCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZXR0aW5nc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+RWRpdCBSZXBvcnQ8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxycHQtcnVudGltZSBbcmVwb3J0XT1cInJlcG9ydCgpIVwiIChleGVjdXRlKT1cIm9uUmVwb3J0RXhlY3V0ZWQoJGV2ZW50KVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtZXJyb3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWVycm9yLWNhcmRcIj5cbiAgICAgICAgICAgIDxoMz5SZXBvcnQgTm90IEZvdW5kPC9oMz5cbiAgICAgICAgICAgIDxwPlRoZSByZXF1ZXN0ZWQgcmVwb3J0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHlldC48L3A+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInJwdC1idG4gcnB0LWJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICAgIFJldHVybiB0byBQcmV2aW91cyBQYWdlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucnB0LXJvdXRlZC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZzogdmFyKC0tcnB0LXNwYWNlLW1kLCAxNnB4KTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tcnB0LXNwYWNlLXNtLCA4cHgpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLXRpdGxlLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC12ZXJzaW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWJnLXN1YnRsZSwgI2YxZjVmOSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLWxvYWRpbmcsXG4gICAgLnJwdC1yb3V0ZWQtZXJyb3Ige1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA2MHB4IDIwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1yYWRpdXMtbWQsIDhweCk7XG4gICAgICBwYWRkaW5nOiAzMnB4IDQwcHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtc2hhZG93LXNtLCAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1KSk7XG4gICAgfVxuXG4gICAgLnJwdC1lcnJvci1jYXJkIGgzIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtZXJyb3ItY29sb3IsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAucnB0LXNwaW5uZXIge1xuICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogcnB0LXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0LXNwaW4ge1xuICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gICAgfVxuXG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zbSB7XG4gICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtY29sb3IsICMxZTI5M2IpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmOGZhZmMpO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLWdob3N0IHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG4gICAgLnJwdC1idG4tZ2hvc3Q6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUm91dGVkUmVwb3J0UnVudGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFJlcG9ydFN0b3JlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICByZWFkb25seSByZXBvcnQgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjYW5FZGl0ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHJvdXRlIHJlc29sdmVkIHRoZSByZXBvcnRcbiAgICB0aGlzLnJvdXRlLmRhdGFcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhWydyZXBvcnQnXSkge1xuICAgICAgICAgIHRoaXMucmVwb3J0LnNldChkYXRhWydyZXBvcnQnXSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHJlc29sdmluZyB2aWEgcGFyYW1NYXBcbiAgICAgICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcbiAgICAgICAgaWYgKHJlcG9ydElkKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5sb2FkUmVwb3J0KHJlcG9ydElkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChyZXApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SZXBvcnRFeGVjdXRlZChmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgLy8gSG9zdCBjYW4gb2JzZXJ2ZSBvciBoYW5kbGUgZXhlY3V0aW9ucyBpZiBuZWVkZWRcbiAgfVxuXG4gIGVkaXRSZXBvcnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAocmVwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiJdfQ==
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUV6QyxRQUFRO1FBQ04scUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsT0FBTztZQUNULENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztxQkFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDekMsU0FBUyxDQUFDO29CQUNULElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQTRCO1FBQzNDLGtEQUFrRDtJQUNwRCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7d0dBdkRVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLDhFQTlLN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdEVCx5dkVBbERTLFlBQVksOEJBQUUsWUFBWSwrQkFBRSxzQkFBc0IsMFJBQUUsZ0JBQWdCOzs0RkFnTG5FLDRCQUE0QjtrQkFuTHhDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsbUJBQzlELHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0UnVudGltZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3J1bnRpbWUvcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtcm91dGVkLXJ1bnRpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGUsIFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsIFJwdEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1jb250YWluZXJcIj5cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWxvYWRpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICA8cD5Mb2FkaW5nIHJlcG9ydCBkZWZpbml0aW9uLi4uPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKHJlcG9ydCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tZ2hvc3QgcnB0LWJ0bi1zbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiR28gYmFja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+QmFjazwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZVwiPnt7IHJlcG9ydCgpPy5uYW1lIH19PC9oMT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJvdXRlZC12ZXJzaW9uXCI+dnt7IHJlcG9ydCgpPy52ZXJzaW9uID8/IDEgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGNhbkVkaXQoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tc2Vjb25kYXJ5IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFJlcG9ydCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZXR0aW5nc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+RWRpdCBSZXBvcnQ8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxycHQtcnVudGltZSBbcmVwb3J0XT1cInJlcG9ydCgpIVwiIChleGVjdXRlKT1cIm9uUmVwb3J0RXhlY3V0ZWQoJGV2ZW50KVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtZXJyb3JcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWVycm9yLWNhcmRcIj5cbiAgICAgICAgICAgIDxoMz5SZXBvcnQgTm90IEZvdW5kPC9oMz5cbiAgICAgICAgICAgIDxwPlRoZSByZXF1ZXN0ZWQgcmVwb3J0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHlldC48L3A+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInJwdC1idG4gcnB0LWJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICAgIFJldHVybiB0byBQcmV2aW91cyBQYWdlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucnB0LXJvdXRlZC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcGFkZGluZzogdmFyKC0tcnB0LXNwYWNlLW1kLCAxNnB4KTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tcnB0LXNwYWNlLXNtLCA4cHgpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLXRpdGxlLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC12ZXJzaW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWJnLXN1YnRsZSwgI2YxZjVmOSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC5ycHQtcm91dGVkLWxvYWRpbmcsXG4gICAgLnJwdC1yb3V0ZWQtZXJyb3Ige1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA2MHB4IDIwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1yYWRpdXMtbWQsIDhweCk7XG4gICAgICBwYWRkaW5nOiAzMnB4IDQwcHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtc2hhZG93LXNtLCAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1KSk7XG4gICAgfVxuXG4gICAgLnJwdC1lcnJvci1jYXJkIGgzIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtZXJyb3ItY29sb3IsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAucnB0LXNwaW5uZXIge1xuICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogcnB0LXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0LXNwaW4ge1xuICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gICAgfVxuXG4gICAgLnJwdC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zbSB7XG4gICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLXByaW1hcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgfVxuICAgIC5ycHQtYnRuLXByaW1hcnk6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtc3VyZmFjZS1iZywgI2ZmZmZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtY29sb3IsICMxZTI5M2IpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2Vjb25kYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmOGZhZmMpO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLWdob3N0IHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG4gICAgLnJwdC1idG4tZ2hvc3Q6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUm91dGVkUmVwb3J0UnVudGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFJlcG9ydFN0b3JlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICByZWFkb25seSByZXBvcnQgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjYW5FZGl0ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHJvdXRlIHJlc29sdmVkIHRoZSByZXBvcnRcbiAgICB0aGlzLnJvdXRlLmRhdGFcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhWydyZXBvcnQnXSkge1xuICAgICAgICAgIHRoaXMucmVwb3J0LnNldChkYXRhWydyZXBvcnQnXSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHJlc29sdmluZyB2aWEgcGFyYW1NYXBcbiAgICAgICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcbiAgICAgICAgaWYgKHJlcG9ydElkKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5sb2FkUmVwb3J0KHJlcG9ydElkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChyZXApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SZXBvcnRFeGVjdXRlZChmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgLy8gSG9zdCBjYW4gb2JzZXJ2ZSBvciBoYW5kbGUgZXhlY3V0aW9ucyBpZiBuZWVkZWRcbiAgfVxuXG4gIGVkaXRSZXBvcnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAocmVwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,20 +1,34 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, inject, input, output, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { ReactiveFormsModule } from '@angular/forms';
4
+ import { Router } from '@angular/router';
4
5
  import { ComponentRegistry } from '../../core/registry/component-registry';
5
6
  import { DynamicFormBuilder } from '../../core/services/dynamic-form-builder.service';
7
+ import { ReportExportService } from '../export/services/report-export.service';
8
+ import { ReportSessionContextService } from '../../core/services/report-session-context.service';
9
+ import { getFieldCaseInsensitive } from '../../core/utils/data-normalization.util';
6
10
  import { ReportGridBridgeComponent } from './report-grid-bridge.component';
7
- import { calculateGridColumn, calculateGridRow } from '../designer/utilities/canvas-layout.util';
11
+ import { calculateGridColumn, calculateGridRow, resolveComponentHeight, resolveComponentMinHeight } from '../designer/utilities/canvas-layout.util';
8
12
  import * as i0 from "@angular/core";
9
13
  import * as i1 from "@angular/common";
10
14
  import * as i2 from "@angular/forms";
11
15
  export class DynamicRendererComponent {
12
16
  registry = inject(ComponentRegistry);
13
17
  formBuilder = inject(DynamicFormBuilder);
18
+ router = inject(Router, { optional: true });
19
+ exportService = inject(ReportExportService, { optional: true });
20
+ sessionService = inject(ReportSessionContextService, { optional: true });
14
21
  definition = input.required();
15
22
  initialValues = input({});
16
23
  resultData = input(null);
17
24
  executeRequested = output();
25
+ resetRequested = output();
26
+ exportRequested = output();
27
+ printRequested = output();
28
+ customActionTriggered = output();
29
+ gridStateChanged = output();
30
+ columnDefsChanged = output();
31
+ rowActionTriggered = output();
18
32
  form = computed(() => {
19
33
  return this.formBuilder.toFormGroup(this.definition().components, this.initialValues());
20
34
  });
@@ -32,13 +46,22 @@ export class DynamicRendererComponent {
32
46
  return meta?.component ?? null;
33
47
  }
34
48
  getComponentInputs(comp) {
35
- const inputs = {
36
- config: comp,
37
- definition: comp,
38
- };
39
- if (comp.key) {
49
+ const inputs = {};
50
+ if (comp.type === 'kpi-card' || comp.type === 'chart') {
51
+ inputs['definition'] = comp;
52
+ }
53
+ else {
54
+ inputs['config'] = comp;
55
+ }
56
+ if (comp.key && comp.type !== 'button' && comp.type !== 'kpi-card' && comp.type !== 'chart') {
40
57
  inputs['control'] = this.form().get(comp.key);
41
58
  }
59
+ if (comp.type === 'dropdown') {
60
+ inputs['parentForm'] = this.form();
61
+ }
62
+ if (comp.type === 'button') {
63
+ inputs['onAction'] = (action) => this.handleAction(action, comp);
64
+ }
42
65
  return inputs;
43
66
  }
44
67
  getGridColumn(comp) {
@@ -47,6 +70,12 @@ export class DynamicRendererComponent {
47
70
  getGridRow(comp) {
48
71
  return calculateGridRow(comp);
49
72
  }
73
+ getComponentHeight(comp) {
74
+ return resolveComponentHeight(comp);
75
+ }
76
+ getComponentMinHeight(comp) {
77
+ return resolveComponentMinHeight(comp);
78
+ }
50
79
  isComponentVisible(comp) {
51
80
  const vis = comp.visibility;
52
81
  if (!vis)
@@ -84,16 +113,141 @@ export class DynamicRendererComponent {
84
113
  parameters,
85
114
  });
86
115
  }
87
- handleAction(action) {
88
- if (action.type === 'execute-report') {
89
- this.onSubmit();
116
+ handleAction(action, comp) {
117
+ const parameters = this.formBuilder.extractValues(this.form());
118
+ switch (action.type) {
119
+ case 'execute-report':
120
+ case 'submit':
121
+ this.onSubmit();
122
+ break;
123
+ case 'reset':
124
+ this.form().reset(this.initialValues());
125
+ this.resetRequested.emit({ definition: this.definition() });
126
+ break;
127
+ case 'export': {
128
+ const format = action.params?.['format'] || 'excel';
129
+ const defaultName = this.definition().name
130
+ ? this.definition().name.toLowerCase().replace(/[^a-z0-9_-]/gi, '_')
131
+ : 'report';
132
+ const fileName = action.params?.['fileName'] || `${defaultName}_${Date.now()}`;
133
+ const data = this.resultData();
134
+ if (data && data.length > 0 && this.exportService) {
135
+ if (format === 'csv') {
136
+ this.exportService.exportCsv(data, {
137
+ fileName: `${fileName}.csv`,
138
+ });
139
+ }
140
+ else if (format === 'json') {
141
+ this.exportService.exportJson(data, {
142
+ fileName: `${fileName}.json`,
143
+ });
144
+ }
145
+ }
146
+ this.exportRequested.emit({
147
+ format,
148
+ fileName,
149
+ parameters,
150
+ data,
151
+ });
152
+ break;
153
+ }
154
+ case 'print-report': {
155
+ const rptFileName = action.params?.['rptFileName'] || '';
156
+ const exportType = action.params?.['exportType'] || 'pdf';
157
+ this.printRequested.emit({
158
+ rptFileName,
159
+ exportType,
160
+ parameters,
161
+ });
162
+ break;
163
+ }
164
+ case 'navigate': {
165
+ const targetUrl = action.params?.['targetUrl'] || '';
166
+ const openNewTab = action.params?.['openNewTab'] === true;
167
+ if (targetUrl) {
168
+ if (openNewTab || targetUrl.startsWith('http://') || targetUrl.startsWith('https://')) {
169
+ window.open(targetUrl, openNewTab ? '_blank' : '_self');
170
+ }
171
+ else if (this.router) {
172
+ this.router.navigate([targetUrl], { queryParams: parameters });
173
+ }
174
+ else {
175
+ window.location.href = targetUrl;
176
+ }
177
+ }
178
+ break;
179
+ }
180
+ case 'custom-event':
181
+ default:
182
+ if (comp) {
183
+ this.customActionTriggered.emit({
184
+ action,
185
+ component: comp,
186
+ parameters,
187
+ });
188
+ }
189
+ break;
90
190
  }
91
- else if (action.type === 'reset') {
92
- this.form().reset();
191
+ }
192
+ onGridRowClick(event) {
193
+ const grid = this.definition().grid;
194
+ if (!grid)
195
+ return;
196
+ const action = event.column?.action ?? grid.rowClickAction ?? grid.options?.rowClickAction;
197
+ if (!action)
198
+ return;
199
+ const formValues = this.formBuilder.extractValues(this.form());
200
+ const session = this.sessionService?.sessionContext() ?? {};
201
+ const mappedParameters = {};
202
+ if (action.parameterMapping && Object.keys(action.parameterMapping).length > 0) {
203
+ for (const [targetKey, expr] of Object.entries(action.parameterMapping)) {
204
+ let val = undefined;
205
+ if (expr.startsWith('row.')) {
206
+ const rowField = expr.slice(4);
207
+ val = getFieldCaseInsensitive(event.row, rowField);
208
+ }
209
+ else if (expr.startsWith('form.') || expr.startsWith('formValues.')) {
210
+ const formField = expr.replace(/^form\.|^formValues\./, '');
211
+ val = getFieldCaseInsensitive(formValues, formField);
212
+ }
213
+ else if (expr.startsWith('session.')) {
214
+ const sessionField = expr.slice(8);
215
+ val = getFieldCaseInsensitive(session, sessionField);
216
+ }
217
+ else {
218
+ // Direct row field or literal
219
+ val = getFieldCaseInsensitive(event.row, expr) ?? expr;
220
+ }
221
+ mappedParameters[targetKey] = val !== undefined ? val : '';
222
+ }
93
223
  }
224
+ else {
225
+ // Default: copy entire row data
226
+ Object.assign(mappedParameters, event.row);
227
+ }
228
+ if (action.type === 'navigate' && action.targetUrl) {
229
+ let targetUrl = action.targetUrl;
230
+ for (const [k, v] of Object.entries(event.row)) {
231
+ targetUrl = targetUrl.replace(new RegExp(`\\{\\{\\s*(?:row\\.)?${k}\\s*\\}\\}`, 'gi'), String(v ?? ''));
232
+ }
233
+ if (action.openNewTab || targetUrl.startsWith('http://') || targetUrl.startsWith('https://')) {
234
+ window.open(targetUrl, action.openNewTab ? '_blank' : '_self');
235
+ }
236
+ else if (this.router) {
237
+ this.router.navigateByUrl(targetUrl);
238
+ }
239
+ else {
240
+ window.location.href = targetUrl;
241
+ }
242
+ }
243
+ this.rowActionTriggered.emit({
244
+ action,
245
+ row: event.row,
246
+ parameters: mappedParameters,
247
+ });
94
248
  }
95
249
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DynamicRendererComponent, isStandalone: true, selector: "rpt-dynamic-renderer", inputs: { definition: { classPropertyName: "definition", publicName: "definition", isSignal: true, isRequired: true, transformFunction: null }, initialValues: { classPropertyName: "initialValues", publicName: "initialValues", isSignal: true, isRequired: false, transformFunction: null }, resultData: { classPropertyName: "resultData", publicName: "resultData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { executeRequested: "executeRequested" }, ngImport: i0, template: `
250
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DynamicRendererComponent, isStandalone: true, selector: "rpt-dynamic-renderer", inputs: { definition: { classPropertyName: "definition", publicName: "definition", isSignal: true, isRequired: true, transformFunction: null }, initialValues: { classPropertyName: "initialValues", publicName: "initialValues", isSignal: true, isRequired: false, transformFunction: null }, resultData: { classPropertyName: "resultData", publicName: "resultData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { executeRequested: "executeRequested", resetRequested: "resetRequested", exportRequested: "exportRequested", printRequested: "printRequested", customActionTriggered: "customActionTriggered", gridStateChanged: "gridStateChanged", columnDefsChanged: "columnDefsChanged", rowActionTriggered: "rowActionTriggered" }, ngImport: i0, template: `
97
251
  <div
98
252
  class="rpt-renderer-root"
99
253
  [style.direction]="definition().layout.direction || 'ltr'"
@@ -122,8 +276,8 @@ export class DynamicRendererComponent {
122
276
  [style.grid-column]="getGridColumn(comp)"
123
277
  [style.grid-row]="getGridRow(comp)"
124
278
  [style.width]="comp.layout?.width || 'auto'"
125
- [style.height]="comp.layout?.height || 'auto'"
126
- [style.min-height]="comp.layout?.minHeight || 'auto'"
279
+ [style.height]="getComponentHeight(comp)"
280
+ [style.min-height]="getComponentMinHeight(comp)"
127
281
  [style.max-height]="comp.layout?.maxHeight || 'none'"
128
282
  >
129
283
  @if (resolveComponent(comp.type); as compClass) {
@@ -144,16 +298,38 @@ export class DynamicRendererComponent {
144
298
  }
145
299
 
146
300
  <!-- Result Grid Section -->
147
- @if (definition().grid && resultData() !== null && resultData() !== undefined) {
148
- <div class="rpt-grid-section">
149
- <rpt-grid-bridge
150
- [gridDefinition]="definition().grid!"
151
- [data]="resultData()!"
152
- />
153
- </div>
301
+ @if (definition().grid) {
302
+ @if (resultData() !== null && resultData() !== undefined) {
303
+ <div class="rpt-grid-section">
304
+ <rpt-grid-bridge
305
+ [gridDefinition]="definition().grid!"
306
+ [data]="resultData()!"
307
+ (gridStateChange)="gridStateChanged.emit($event)"
308
+ (columnDefsChange)="columnDefsChanged.emit($event)"
309
+ (rowClick)="onGridRowClick($event)"
310
+ />
311
+ </div>
312
+ } @else {
313
+ <div class="rpt-grid-section rpt-grid-initial-state">
314
+ <div class="grid-initial-card">
315
+ <div class="grid-initial-icon">
316
+ <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
317
+ <path d="M3 3h18v18H3zM3 9h18M3 15h18M9 3v18M15 3v18"/>
318
+ </svg>
319
+ </div>
320
+ <h4 class="grid-initial-title">Report Ready to Execute</h4>
321
+ <p class="grid-initial-desc">
322
+ Configure filter parameters above and execute the report to retrieve live records into the grid ({{ definition().grid?.columns?.length ?? 0 }} columns configured).
323
+ </p>
324
+ <button type="button" class="btn-grid-initial-exec" (click)="onSubmit()">
325
+ <span>Execute Report</span>
326
+ </button>
327
+ </div>
328
+ </div>
329
+ }
154
330
  }
155
331
  </div>
156
- `, isInline: true, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-renderer-root{width:100%;box-sizing:border-box}.rpt-header{margin-bottom:20px}.rpt-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px;letter-spacing:-.02em}.rpt-description{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.rpt-form{margin-bottom:24px}.rpt-layout-grid{display:grid;width:100%;align-items:stretch}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column;height:100%}.rpt-cell>*{width:100%;height:100%;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box}.rpt-unregistered-placeholder{padding:8px 12px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);background-color:var(--rpt-color-danger-bg, #fef2f2);border:1px dashed var(--rpt-color-danger, #ef4444);border-radius:var(--rpt-border-radius, 6px)}.rpt-grid-section{width:100%;margin-top:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: ReportGridBridgeComponent, selector: "rpt-grid-bridge", inputs: ["gridDefinition", "data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
332
+ `, isInline: true, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-renderer-root{width:100%;box-sizing:border-box}.rpt-header{margin-bottom:20px}.rpt-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px;letter-spacing:-.02em}.rpt-description{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.rpt-form{margin-bottom:24px}.rpt-layout-grid{display:grid;width:100%;align-items:stretch}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column;height:100%}.rpt-cell>*{width:100%;height:100%;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box}.rpt-unregistered-placeholder{padding:8px 12px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);background-color:var(--rpt-color-danger-bg, #fef2f2);border:1px dashed var(--rpt-color-danger, #ef4444);border-radius:var(--rpt-border-radius, 6px)}.rpt-grid-section{width:100%;margin-top:16px}.rpt-grid-initial-state{padding:12px 0}.grid-initial-card{border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);background:var(--rpt-color-surface, #ffffff);padding:48px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04))}.grid-initial-icon{width:52px;height:52px;border-radius:12px;background:#eff6ff;color:var(--rpt-color-primary, #2563eb);display:flex;align-items:center;justify-content:center;margin-bottom:14px}.grid-initial-title{font-size:var(--rpt-font-size-md, 1rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.grid-initial-desc{font-size:var(--rpt-font-size-sm, .8125rem);color:var(--rpt-color-text-muted, #64748b);max-width:460px;line-height:1.5;margin:0 0 20px}.btn-grid-initial-exec{padding:8px 20px;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;cursor:pointer;box-shadow:0 1px 3px #2563eb33;transition:all var(--rpt-transition-speed, .15s) ease}.btn-grid-initial-exec:hover{background:var(--rpt-color-primary-hover, #1d4ed8);transform:translateY(-1px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: ReportGridBridgeComponent, selector: "rpt-grid-bridge", inputs: ["gridDefinition", "data"], outputs: ["gridStateChange", "columnDefsChange", "rowClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
157
333
  }
158
334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicRendererComponent, decorators: [{
159
335
  type: Component,
@@ -186,8 +362,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
186
362
  [style.grid-column]="getGridColumn(comp)"
187
363
  [style.grid-row]="getGridRow(comp)"
188
364
  [style.width]="comp.layout?.width || 'auto'"
189
- [style.height]="comp.layout?.height || 'auto'"
190
- [style.min-height]="comp.layout?.minHeight || 'auto'"
365
+ [style.height]="getComponentHeight(comp)"
366
+ [style.min-height]="getComponentMinHeight(comp)"
191
367
  [style.max-height]="comp.layout?.maxHeight || 'none'"
192
368
  >
193
369
  @if (resolveComponent(comp.type); as compClass) {
@@ -208,15 +384,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
208
384
  }
209
385
 
210
386
  <!-- Result Grid Section -->
211
- @if (definition().grid && resultData() !== null && resultData() !== undefined) {
212
- <div class="rpt-grid-section">
213
- <rpt-grid-bridge
214
- [gridDefinition]="definition().grid!"
215
- [data]="resultData()!"
216
- />
217
- </div>
387
+ @if (definition().grid) {
388
+ @if (resultData() !== null && resultData() !== undefined) {
389
+ <div class="rpt-grid-section">
390
+ <rpt-grid-bridge
391
+ [gridDefinition]="definition().grid!"
392
+ [data]="resultData()!"
393
+ (gridStateChange)="gridStateChanged.emit($event)"
394
+ (columnDefsChange)="columnDefsChanged.emit($event)"
395
+ (rowClick)="onGridRowClick($event)"
396
+ />
397
+ </div>
398
+ } @else {
399
+ <div class="rpt-grid-section rpt-grid-initial-state">
400
+ <div class="grid-initial-card">
401
+ <div class="grid-initial-icon">
402
+ <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
403
+ <path d="M3 3h18v18H3zM3 9h18M3 15h18M9 3v18M15 3v18"/>
404
+ </svg>
405
+ </div>
406
+ <h4 class="grid-initial-title">Report Ready to Execute</h4>
407
+ <p class="grid-initial-desc">
408
+ Configure filter parameters above and execute the report to retrieve live records into the grid ({{ definition().grid?.columns?.length ?? 0 }} columns configured).
409
+ </p>
410
+ <button type="button" class="btn-grid-initial-exec" (click)="onSubmit()">
411
+ <span>Execute Report</span>
412
+ </button>
413
+ </div>
414
+ </div>
415
+ }
218
416
  }
219
417
  </div>
220
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-renderer-root{width:100%;box-sizing:border-box}.rpt-header{margin-bottom:20px}.rpt-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px;letter-spacing:-.02em}.rpt-description{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.rpt-form{margin-bottom:24px}.rpt-layout-grid{display:grid;width:100%;align-items:stretch}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column;height:100%}.rpt-cell>*{width:100%;height:100%;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box}.rpt-unregistered-placeholder{padding:8px 12px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);background-color:var(--rpt-color-danger-bg, #fef2f2);border:1px dashed var(--rpt-color-danger, #ef4444);border-radius:var(--rpt-border-radius, 6px)}.rpt-grid-section{width:100%;margin-top:16px}\n"] }]
418
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-renderer-root{width:100%;box-sizing:border-box}.rpt-header{margin-bottom:20px}.rpt-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px;letter-spacing:-.02em}.rpt-description{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.rpt-form{margin-bottom:24px}.rpt-layout-grid{display:grid;width:100%;align-items:stretch}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column;height:100%}.rpt-cell>*{width:100%;height:100%;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box}.rpt-unregistered-placeholder{padding:8px 12px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);background-color:var(--rpt-color-danger-bg, #fef2f2);border:1px dashed var(--rpt-color-danger, #ef4444);border-radius:var(--rpt-border-radius, 6px)}.rpt-grid-section{width:100%;margin-top:16px}.rpt-grid-initial-state{padding:12px 0}.grid-initial-card{border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);background:var(--rpt-color-surface, #ffffff);padding:48px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04))}.grid-initial-icon{width:52px;height:52px;border-radius:12px;background:#eff6ff;color:var(--rpt-color-primary, #2563eb);display:flex;align-items:center;justify-content:center;margin-bottom:14px}.grid-initial-title{font-size:var(--rpt-font-size-md, 1rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.grid-initial-desc{font-size:var(--rpt-font-size-sm, .8125rem);color:var(--rpt-color-text-muted, #64748b);max-width:460px;line-height:1.5;margin:0 0 20px}.btn-grid-initial-exec{padding:8px 20px;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;cursor:pointer;box-shadow:0 1px 3px #2563eb33;transition:all var(--rpt-transition-speed, .15s) ease}.btn-grid-initial-exec:hover{background:var(--rpt-color-primary-hover, #1d4ed8);transform:translateY(-1px)}\n"] }]
221
419
  }] });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFJaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFvSWpHLE1BQU0sT0FBTyx3QkFBd0I7SUFDbEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVqRCxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBb0IsQ0FBQztJQUNoRCxhQUFhLEdBQUcsS0FBSyxDQUEwQixFQUFFLENBQUMsQ0FBQztJQUNuRCxVQUFVLEdBQUcsS0FBSyxDQUFtQixJQUFJLENBQUMsQ0FBQztJQUUzQyxnQkFBZ0IsR0FBRyxNQUFNLEVBRzlCLENBQUM7SUFFSSxJQUFJLEdBQUcsUUFBUSxDQUFZLEdBQUcsRUFBRTtRQUN2QyxPQUFPLElBQUksQ0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTREVCxzbUNBN0RTLFlBQVksc1NBQUUsbUJBQW1CLHFiQUFFLHlCQUF5Qjs7NEZBK0gzRCx3QkFBd0I7a0JBbElwQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLENBQUMsWUFDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTREVCxtQkFnRWdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2NvbXBvbmVudC1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWdpc3RyeSB9IGZyb20gJy4uLy4uL2NvcmUvcmVnaXN0cnkvY29tcG9uZW50LXJlZ2lzdHJ5JztcbmltcG9ydCB7IER5bmFtaWNGb3JtQnVpbGRlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZHluYW1pYy1mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1icmlkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IGNhbGN1bGF0ZUdyaWRDb2x1bW4sIGNhbGN1bGF0ZUdyaWRSb3cgfSBmcm9tICcuLi9kZXNpZ25lci91dGlsaXRpZXMvY2FudmFzLWxheW91dC51dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWR5bmFtaWMtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJwdC1yZW5kZXJlci1yb290XCJcbiAgICAgIFtzdHlsZS5kaXJlY3Rpb25dPVwiZGVmaW5pdGlvbigpLmxheW91dC5kaXJlY3Rpb24gfHwgJ2x0cidcIlxuICAgICAgW3N0eWxlLnBhZGRpbmcucHhdPVwiZGVmaW5pdGlvbigpLmxheW91dC5wYWRkaW5nID8/IDI0XCJcbiAgICA+XG4gICAgICA8IS0tIFJlcG9ydCBIZWFkZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWhlYWRlclwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJycHQtdGl0bGVcIj57eyBkZWZpbml0aW9uKCkubmFtZSB9fTwvaDI+XG4gICAgICAgIEBpZiAoZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJycHQtZGVzY3JpcHRpb25cIj57eyBkZWZpbml0aW9uKCkuZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRyb2xzIEZvcm0gLyBQYXJhbWV0ZXIgRmlsdGVyIEJhciAtLT5cbiAgICAgIEBpZiAoZGVmaW5pdGlvbigpLmNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgY2xhc3M9XCJycHQtZm9ybVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicnB0LWxheW91dC1ncmlkXCJcbiAgICAgICAgICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZ3JpZENvbHVtbnNUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5nYXAucHhdPVwiZGVmaW5pdGlvbigpLmxheW91dC5nYXAgPz8gMTZcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGNvbXAgb2Ygc29ydGVkQ29tcG9uZW50cygpOyB0cmFjayBjb21wLmlkKSB7XG4gICAgICAgICAgICAgIEBpZiAoaXNDb21wb25lbnRWaXNpYmxlKGNvbXApKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtY2VsbFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZ3JpZC1jb2x1bW5dPVwiZ2V0R3JpZENvbHVtbihjb21wKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZ3JpZC1yb3ddPVwiZ2V0R3JpZFJvdyhjb21wKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29tcC5sYXlvdXQ/LndpZHRoIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5oZWlnaHQgfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cImNvbXAubGF5b3V0Py5taW5IZWlnaHQgfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5tYXhIZWlnaHQgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVDb21wb25lbnQoY29tcC50eXBlKTsgYXMgY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29tcENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwiZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVua25vd24gY29tcG9uZW50OiA8Y29kZT57eyBjb21wLnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBSZXN1bHQgR3JpZCBTZWN0aW9uIC0tPlxuICAgICAgQGlmIChkZWZpbml0aW9uKCkuZ3JpZCAmJiByZXN1bHREYXRhKCkgIT09IG51bGwgJiYgcmVzdWx0RGF0YSgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLXNlY3Rpb25cIj5cbiAgICAgICAgICA8cnB0LWdyaWQtYnJpZGdlXG4gICAgICAgICAgICBbZ3JpZERlZmluaXRpb25dPVwiZGVmaW5pdGlvbigpLmdyaWQhXCJcbiAgICAgICAgICAgIFtkYXRhXT1cInJlc3VsdERhdGEoKSFcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1yZW5kZXJlci1yb290IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgLnJwdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteGwsIDEuNXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuICAgIC5ycHQtZGVzY3JpcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtZm9ybSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cbiAgICAucnB0LWxheW91dC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cbiAgICAucnB0LWNlbGwge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWNlbGwgPiAqIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXItYmcsICNmZWYyZjIpO1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1zZWN0aW9uIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1JlbmRlcmVyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyeSA9IGluamVjdChDb21wb25lbnRSZWdpc3RyeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoRHluYW1pY0Zvcm1CdWlsZGVyKTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgaW5pdGlhbFZhbHVlcyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSk7XG4gIHJlYWRvbmx5IHJlc3VsdERhdGEgPSBpbnB1dDx1bmtub3duW10gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBleGVjdXRlUmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGZvcm0gPSBjb21wdXRlZDxGb3JtR3JvdXA+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci50b0Zvcm1Hcm91cChcbiAgICAgIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMsXG4gICAgICB0aGlzLmluaXRpYWxWYWx1ZXMoKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZENvbXBvbmVudHMgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsR3JpZENvbHVtbnMgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uKCkubGF5b3V0LmNvbHVtbnMgfHwgMTI7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRDb2x1bW5zVGVtcGxhdGUgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gYHJlcGVhdCgke3RoaXMudG90YWxHcmlkQ29sdW1ucygpfSwgbWlubWF4KDAsIDFmcikpYDtcbiAgfSk7XG5cbiAgcmVzb2x2ZUNvbXBvbmVudCh0eXBlOiBzdHJpbmcpOiBUeXBlPHVua25vd24+IHwgbnVsbCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucmVnaXN0cnkucmVzb2x2ZSh0eXBlKTtcbiAgICByZXR1cm4gKG1ldGE/LmNvbXBvbmVudCBhcyBUeXBlPHVua25vd24+KSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIGNvbmZpZzogY29tcCxcbiAgICAgIGRlZmluaXRpb246IGNvbXAsXG4gICAgfTtcblxuICAgIGlmIChjb21wLmtleSkge1xuICAgICAgaW5wdXRzWydjb250cm9sJ10gPSB0aGlzLmZvcm0oKS5nZXQoY29tcC5rZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnB1dHM7XG4gIH1cblxuXG4gIGdldEdyaWRDb2x1bW4oY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUdyaWRDb2x1bW4oY29tcCwgdGhpcy50b3RhbEdyaWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0R3JpZFJvdyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlR3JpZFJvdyhjb21wKTtcbiAgfVxuXG4gIGlzQ29tcG9uZW50VmlzaWJsZShjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzID0gY29tcC52aXNpYmlsaXR5O1xuICAgIGlmICghdmlzKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtKCkuZ2V0KHZpcy5kZXBlbmRzT24pO1xuICAgIGNvbnN0IHZhbCA9IGN0cmwgPyBjdHJsLnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAodmlzLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICdlcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsID09PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdub3RFcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsICE9PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoU3RyaW5nKHZpcy52YWx1ZSkpO1xuICAgICAgY2FzZSAnZ3JlYXRlclRoYW4nOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCkgPiBOdW1iZXIodmlzLnZhbHVlKTtcbiAgICAgIGNhc2UgJ2xlc3NUaGFuJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpIDwgTnVtYmVyKHZpcy52YWx1ZSk7XG4gICAgICBjYXNlICdpc05vdEVtcHR5JzpcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09ICcnO1xuICAgICAgY2FzZSAnaXNFbXB0eSc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZi5pbnZhbGlkKSB7XG4gICAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5mb3JtQnVpbGRlci5leHRyYWN0VmFsdWVzKGYpO1xuICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3RlZC5lbWl0KHtcbiAgICAgIGRlZmluaXRpb246IHRoaXMuZGVmaW5pdGlvbigpLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24pOiB2b2lkIHtcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdleGVjdXRlLXJlcG9ydCcpIHtcbiAgICAgIHRoaXMub25TdWJtaXQoKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAncmVzZXQnKSB7XG4gICAgICB0aGlzLmZvcm0oKS5yZXNldCgpO1xuICAgIH1cbiAgfVxufVxuIl19
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQWlObEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1B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ZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2NvbXBvbmVudC1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgR3JpZFJvd0NsaWNrQWN0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnkgfSBmcm9tICcuLi8uLi9jb3JlL3JlZ2lzdHJ5L2NvbXBvbmVudC1yZWdpc3RyeSc7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0U2VydmljZSB9IGZyb20gJy4uL2V4cG9ydC9zZXJ2aWNlcy9yZXBvcnQtZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2RhdGEtbm9ybWFsaXphdGlvbi51dGlsJztcbmltcG9ydCB7IFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQgfSBmcm9tICcuL3JlcG9ydC1ncmlkLWJyaWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlR3JpZENvbHVtbixcbiAgY2FsY3VsYXRlR3JpZFJvdyxcbiAgcmVzb2x2ZUNvbXBvbmVudEhlaWdodCxcbiAgcmVzb2x2ZUNvbXBvbmVudE1pbkhlaWdodFxufSBmcm9tICcuLi9kZXNpZ25lci91dGlsaXRpZXMvY2FudmFzLWxheW91dC51dGlsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWR5bmFtaWMtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJwdC1yZW5kZXJlci1yb290XCJcbiAgICAgIFtzdHlsZS5kaXJlY3Rpb25dPVwiZGVmaW5pdGlvbigpLmxheW91dC5kaXJlY3Rpb24gfHwgJ2x0cidcIlxuICAgICAgW3N0eWxlLnBhZGRpbmcucHhdPVwiZGVmaW5pdGlvbigpLmxheW91dC5wYWRkaW5nID8/IDI0XCJcbiAgICA+XG4gICAgICA8IS0tIFJlcG9ydCBIZWFkZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWhlYWRlclwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJycHQtdGl0bGVcIj57eyBkZWZpbml0aW9uKCkubmFtZSB9fTwvaDI+XG4gICAgICAgIEBpZiAoZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJycHQtZGVzY3JpcHRpb25cIj57eyBkZWZpbml0aW9uKCkuZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRyb2xzIEZvcm0gLyBQYXJhbWV0ZXIgRmlsdGVyIEJhciAtLT5cbiAgICAgIEBpZiAoZGVmaW5pdGlvbigpLmNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgY2xhc3M9XCJycHQtZm9ybVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicnB0LWxheW91dC1ncmlkXCJcbiAgICAgICAgICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwiZ3JpZENvbHVtbnNUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFtzdHlsZS5nYXAucHhdPVwiZGVmaW5pdGlvbigpLmxheW91dC5nYXAgPz8gMTZcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGNvbXAgb2Ygc29ydGVkQ29tcG9uZW50cygpOyB0cmFjayBjb21wLmlkKSB7XG4gICAgICAgICAgICAgIEBpZiAoaXNDb21wb25lbnRWaXNpYmxlKGNvbXApKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtY2VsbFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZ3JpZC1jb2x1bW5dPVwiZ2V0R3JpZENvbHVtbihjb21wKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuZ3JpZC1yb3ddPVwiZ2V0R3JpZFJvdyhjb21wKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29tcC5sYXlvdXQ/LndpZHRoIHx8ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImdldENvbXBvbmVudEhlaWdodChjb21wKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWluLWhlaWdodF09XCJnZXRDb21wb25lbnRNaW5IZWlnaHQoY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiY29tcC5sYXlvdXQ/Lm1heEhlaWdodCB8fCAnbm9uZSdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBpZiAocmVzb2x2ZUNvbXBvbmVudChjb21wLnR5cGUpOyBhcyBjb21wQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJjb21wQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldElucHV0c109XCJnZXRDb21wb25lbnRJbnB1dHMoY29tcClcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVW5rbm93biBjb21wb25lbnQ6IDxjb2RlPnt7IGNvbXAudHlwZSB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFJlc3VsdCBHcmlkIFNlY3Rpb24gLS0+XG4gICAgICBAaWYgKGRlZmluaXRpb24oKS5ncmlkKSB7XG4gICAgICAgIEBpZiAocmVzdWx0RGF0YSgpICE9PSBudWxsICYmIHJlc3VsdERhdGEoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxycHQtZ3JpZC1icmlkZ2VcbiAgICAgICAgICAgICAgW2dyaWREZWZpbml0aW9uXT1cImRlZmluaXRpb24oKS5ncmlkIVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cInJlc3VsdERhdGEoKSFcIlxuICAgICAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNvbHVtbkRlZnNDaGFuZ2UpPVwiY29sdW1uRGVmc0NoYW5nZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uR3JpZFJvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLXNlY3Rpb24gcnB0LWdyaWQtaW5pdGlhbC1zdGF0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtaW5pdGlhbC1jYXJkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWluaXRpYWwtaWNvblwiPlxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgM2gxOHYxOEgzek0zIDloMThNMyAxNWgxOE05IDN2MThNMTUgM3YxOFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cImdyaWQtaW5pdGlhbC10aXRsZVwiPlJlcG9ydCBSZWFkeSB0byBFeGVjdXRlPC9oND5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJncmlkLWluaXRpYWwtZGVzY1wiPlxuICAgICAgICAgICAgICAgIENvbmZpZ3VyZSBmaWx0ZXIgcGFyYW1ldGVycyBhYm92ZSBhbmQgZXhlY3V0ZSB0aGUgcmVwb3J0IHRvIHJldHJpZXZlIGxpdmUgcmVjb3JkcyBpbnRvIHRoZSBncmlkICh7eyBkZWZpbml0aW9uKCkuZ3JpZD8uY29sdW1ucz8ubGVuZ3RoID8/IDAgfX0gY29sdW1ucyBjb25maWd1cmVkKS5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1ncmlkLWluaXRpYWwtZXhlY1wiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+RXhlY3V0ZSBSZXBvcnQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtcmVuZGVyZXItcm9vdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtaGVhZGVyIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuICAgIC5ycHQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXhsLCAxLjVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIH1cbiAgICAucnB0LWRlc2NyaXB0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1iYXNlLCAwLjg3NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAucnB0LWZvcm0ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICB9XG4gICAgLnJwdC1sYXlvdXQtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICB9XG4gICAgLnJwdC1jZWxsIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG4gICAgLnJwdC1jZWxsID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAucnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlciB7XG4gICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLWJnLCAjZmVmMmYyKTtcbiAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgIH1cbiAgICAucnB0LWdyaWQtc2VjdGlvbiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1pbml0aWFsLXN0YXRlIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1jYXJkIHtcbiAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXhsLCAxMnB4KTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1pY29uIHtcbiAgICAgIHdpZHRoOiA1MnB4O1xuICAgICAgaGVpZ2h0OiA1MnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gICAgfVxuICAgIC5ncmlkLWluaXRpYWwtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLW1kLCAxcmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgbWFyZ2luOiAwIDAgNnB4IDA7XG4gICAgfVxuICAgIC5ncmlkLWluaXRpYWwtZGVzYyB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuODEyNXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgbWF4LXdpZHRoOiA0NjBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgfVxuICAgIC5idG4tZ3JpZC1pbml0aWFsLWV4ZWMge1xuICAgICAgcGFkZGluZzogOHB4IDIwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5idG4tZ3JpZC1pbml0aWFsLWV4ZWM6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljUmVuZGVyZXJDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5ID0gaW5qZWN0KENvbXBvbmVudFJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChEeW5hbWljRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwb3J0U2VydmljZSA9IGluamVjdChSZXBvcnRFeHBvcnRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgaW5pdGlhbFZhbHVlcyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSk7XG4gIHJlYWRvbmx5IHJlc3VsdERhdGEgPSBpbnB1dDx1bmtub3duW10gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBleGVjdXRlUmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IHJlc2V0UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGV4cG9ydFJlcXVlc3RlZCA9IG91dHB1dDx7XG4gICAgZm9ybWF0OiBzdHJpbmc7XG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZGF0YTogdW5rbm93bltdIHwgbnVsbDtcbiAgfT4oKTtcblxuICByZWFkb25seSBwcmludFJlcXVlc3RlZCA9IG91dHB1dDx7XG4gICAgcnB0RmlsZU5hbWU/OiBzdHJpbmc7XG4gICAgZXhwb3J0VHlwZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBjdXN0b21BY3Rpb25UcmlnZ2VyZWQgPSBvdXRwdXQ8e1xuICAgIGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbjtcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlZCA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2VkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93QWN0aW9uVHJpZ2dlcmVkID0gb3V0cHV0PHtcbiAgICBhY3Rpb246IEdyaWRSb3dDbGlja0FjdGlvbjtcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGZvcm0gPSBjb21wdXRlZDxGb3JtR3JvdXA+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci50b0Zvcm1Hcm91cChcbiAgICAgIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMsXG4gICAgICB0aGlzLmluaXRpYWxWYWx1ZXMoKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZENvbXBvbmVudHMgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uW10+KCgpID0+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsR3JpZENvbHVtbnMgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uKCkubGF5b3V0LmNvbHVtbnMgfHwgMTI7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRDb2x1bW5zVGVtcGxhdGUgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gYHJlcGVhdCgke3RoaXMudG90YWxHcmlkQ29sdW1ucygpfSwgbWlubWF4KDAsIDFmcikpYDtcbiAgfSk7XG5cbiAgcmVzb2x2ZUNvbXBvbmVudCh0eXBlOiBzdHJpbmcpOiBUeXBlPHVua25vd24+IHwgbnVsbCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucmVnaXN0cnkucmVzb2x2ZSh0eXBlKTtcbiAgICByZXR1cm4gKG1ldGE/LmNvbXBvbmVudCBhcyBUeXBlPHVua25vd24+KSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgaWYgKGNvbXAudHlwZSA9PT0gJ2twaS1jYXJkJyB8fCBjb21wLnR5cGUgPT09ICdjaGFydCcpIHtcbiAgICAgIGlucHV0c1snZGVmaW5pdGlvbiddID0gY29tcDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzWydjb25maWcnXSA9IGNvbXA7XG4gICAgfVxuXG4gICAgaWYgKGNvbXAua2V5ICYmIGNvbXAudHlwZSAhPT0gJ2J1dHRvbicgJiYgY29tcC50eXBlICE9PSAna3BpLWNhcmQnICYmIGNvbXAudHlwZSAhPT0gJ2NoYXJ0Jykge1xuICAgICAgaW5wdXRzWydjb250cm9sJ10gPSB0aGlzLmZvcm0oKS5nZXQoY29tcC5rZXkpO1xuICAgIH1cblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdkcm9wZG93bicpIHtcbiAgICAgIGlucHV0c1sncGFyZW50Rm9ybSddID0gdGhpcy5mb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXAudHlwZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGlucHV0c1snb25BY3Rpb24nXSA9IChhY3Rpb246IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24pID0+IHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbiwgY29tcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0cztcbiAgfVxuXG5cbiAgZ2V0R3JpZENvbHVtbihjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlR3JpZENvbHVtbihjb21wLCB0aGlzLnRvdGFsR3JpZENvbHVtbnMoKSk7XG4gIH1cblxuICBnZXRHcmlkUm93KGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBjYWxjdWxhdGVHcmlkUm93KGNvbXApO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50SGVpZ2h0KGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlQ29tcG9uZW50SGVpZ2h0KGNvbXApO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50TWluSGVpZ2h0KGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlQ29tcG9uZW50TWluSGVpZ2h0KGNvbXApO1xuICB9XG5cbiAgaXNDb21wb25lbnRWaXNpYmxlKGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCB2aXMgPSBjb21wLnZpc2liaWxpdHk7XG4gICAgaWYgKCF2aXMpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0oKS5nZXQodmlzLmRlcGVuZHNPbik7XG4gICAgY29uc3QgdmFsID0gY3RybCA/IGN0cmwudmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgc3dpdGNoICh2aXMub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgJ2VxdWFscyc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IHZpcy52YWx1ZTtcbiAgICAgIGNhc2UgJ25vdEVxdWFscyc6XG4gICAgICAgIHJldHVybiB2YWwgIT09IHZpcy52YWx1ZTtcbiAgICAgIGNhc2UgJ2NvbnRhaW5zJzpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5pbmNsdWRlcyhTdHJpbmcodmlzLnZhbHVlKSk7XG4gICAgICBjYXNlICdncmVhdGVyVGhhbic6XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsKSA+IE51bWJlcih2aXMudmFsdWUpO1xuICAgICAgY2FzZSAnbGVzc1RoYW4nOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCkgPCBOdW1iZXIodmlzLnZhbHVlKTtcbiAgICAgIGNhc2UgJ2lzTm90RW1wdHknOlxuICAgICAgICByZXR1cm4gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gJyc7XG4gICAgICBjYXNlICdpc0VtcHR5JzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09ICcnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZiA9IHRoaXMuZm9ybSgpO1xuICAgIGlmIChmLmludmFsaWQpIHtcbiAgICAgIGYubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmZvcm1CdWlsZGVyLmV4dHJhY3RWYWx1ZXMoZik7XG4gICAgdGhpcy5leGVjdXRlUmVxdWVzdGVkLmVtaXQoe1xuICAgICAgZGVmaW5pdGlvbjogdGhpcy5kZWZpbml0aW9uKCksXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbiwgY29tcD86IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5mb3JtQnVpbGRlci5leHRyYWN0VmFsdWVzKHRoaXMuZm9ybSgpKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2V4ZWN1dGUtcmVwb3J0JzpcbiAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgIHRoaXMub25TdWJtaXQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgICAgdGhpcy5mb3JtKCkucmVzZXQodGhpcy5pbml0aWFsVmFsdWVzKCkpO1xuICAgICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkLmVtaXQoeyBkZWZpbml0aW9uOiB0aGlzLmRlZmluaXRpb24oKSB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2V4cG9ydCc6IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gKGFjdGlvbi5wYXJhbXM/LlsnZm9ybWF0J10gYXMgc3RyaW5nKSB8fCAnZXhjZWwnO1xuICAgICAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHRoaXMuZGVmaW5pdGlvbigpLm5hbWVcbiAgICAgICAgICA/IHRoaXMuZGVmaW5pdGlvbigpLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV8tXS9naSwgJ18nKVxuICAgICAgICAgIDogJ3JlcG9ydCc7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gKGFjdGlvbi5wYXJhbXM/LlsnZmlsZU5hbWUnXSBhcyBzdHJpbmcpIHx8IGAke2RlZmF1bHROYW1lfV8ke0RhdGUubm93KCl9YDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdWx0RGF0YSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmV4cG9ydFNlcnZpY2UpIHtcbiAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnY3N2Jykge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENzdihkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke2ZpbGVOYW1lfS5jc3ZgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydEpzb24oZGF0YSwge1xuICAgICAgICAgICAgICBmaWxlTmFtZTogYCR7ZmlsZU5hbWV9Lmpzb25gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHBvcnRSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwcmludC1yZXBvcnQnOiB7XG4gICAgICAgIGNvbnN0IHJwdEZpbGVOYW1lID0gKGFjdGlvbi5wYXJhbXM/LlsncnB0RmlsZU5hbWUnXSBhcyBzdHJpbmcpIHx8ICcnO1xuICAgICAgICBjb25zdCBleHBvcnRUeXBlID0gKGFjdGlvbi5wYXJhbXM/LlsnZXhwb3J0VHlwZSddIGFzIHN0cmluZykgfHwgJ3BkZic7XG4gICAgICAgIHRoaXMucHJpbnRSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICAgICAgcnB0RmlsZU5hbWUsXG4gICAgICAgICAgZXhwb3J0VHlwZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ25hdmlnYXRlJzoge1xuICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSAoYWN0aW9uLnBhcmFtcz8uWyd0YXJnZXRVcmwnXSBhcyBzdHJpbmcpIHx8ICcnO1xuICAgICAgICBjb25zdCBvcGVuTmV3VGFiID0gYWN0aW9uLnBhcmFtcz8uWydvcGVuTmV3VGFiJ10gPT09IHRydWU7XG5cbiAgICAgICAgaWYgKHRhcmdldFVybCkge1xuICAgICAgICAgIGlmIChvcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRhcmdldFVybCwgb3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlcikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldFVybF0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY3VzdG9tLWV2ZW50JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb21wKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21BY3Rpb25UcmlnZ2VyZWQuZW1pdCh7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uR3JpZFJvd0NsaWNrKGV2ZW50OiB7XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb2x1bW4/OiBHcmlkQ29sdW1uRGVmaW5pdGlvbjtcbiAgICBldmVudD86IE1vdXNlRXZlbnQ7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5kZWZpbml0aW9uKCkuZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50LmNvbHVtbj8uYWN0aW9uID8/IGdyaWQucm93Q2xpY2tBY3Rpb24gPz8gZ3JpZC5vcHRpb25zPy5yb3dDbGlja0FjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyh0aGlzLmZvcm0oKSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgbWFwcGVkUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChhY3Rpb24ucGFyYW1ldGVyTWFwcGluZyAmJiBPYmplY3Qua2V5cyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBbdGFyZ2V0S2V5LCBleHByXSBvZiBPYmplY3QuZW50cmllcyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykpIHtcbiAgICAgICAgbGV0IHZhbDogdW5rbm93biA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGV4cHIuc3RhcnRzV2l0aCgncm93LicpKSB7XG4gICAgICAgICAgY29uc3Qgcm93RmllbGQgPSBleHByLnNsaWNlKDQpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgcm93RmllbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cHIuc3RhcnRzV2l0aCgnZm9ybS4nKSB8fCBleHByLnN0YXJ0c1dpdGgoJ2Zvcm1WYWx1ZXMuJykpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBleHByLnJlcGxhY2UoL15mb3JtXFwufF5mb3JtVmFsdWVzXFwuLywgJycpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGZvcm1WYWx1ZXMsIGZvcm1GaWVsZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwci5zdGFydHNXaXRoKCdzZXNzaW9uLicpKSB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbkZpZWxkID0gZXhwci5zbGljZSg4KTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShzZXNzaW9uLCBzZXNzaW9uRmllbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdCByb3cgZmllbGQgb3IgbGl0ZXJhbFxuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgZXhwcikgPz8gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBtYXBwZWRQYXJhbWV0ZXJzW3RhcmdldEtleV0gPSB2YWwgIT09IHVuZGVmaW5lZCA/IHZhbCA6ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBjb3B5IGVudGlyZSByb3cgZGF0YVxuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwZWRQYXJhbWV0ZXJzLCBldmVudC5yb3cpO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ25hdmlnYXRlJyAmJiBhY3Rpb24udGFyZ2V0VXJsKSB7XG4gICAgICBsZXQgdGFyZ2V0VXJsID0gYWN0aW9uLnRhcmdldFVybDtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50LnJvdykpIHtcbiAgICAgICAgdGFyZ2V0VXJsID0gdGFyZ2V0VXJsLnJlcGxhY2UoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXFxcXHtcXFxce1xcXFxzKig/OnJvd1xcXFwuKT8ke2t9XFxcXHMqXFxcXH1cXFxcfWAsICdnaScpLFxuICAgICAgICAgIFN0cmluZyh2ID8/ICcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5vcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odGFyZ2V0VXJsLCBhY3Rpb24ub3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucm91dGVyKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFyZ2V0VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucm93QWN0aW9uVHJpZ2dlcmVkLmVtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgcm93OiBldmVudC5yb3csXG4gICAgICBwYXJhbWV0ZXJzOiBtYXBwZWRQYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  export { ReportRuntimeComponent } from './report-runtime.component';
2
2
  export { DynamicRendererComponent } from './dynamic-renderer.component';
3
3
  export { ReportGridBridgeComponent } from './report-grid-bridge.component';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUmVwb3J0UnVudGltZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50JztcbmV4cG9ydCB7IER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudCc7XG4iXX0=
4
+ export { RptReportComponent } from './rpt-report.component';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUmVwb3J0UnVudGltZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50JztcbmV4cG9ydCB7IER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudCB9IGZyb20gJy4vcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudCc7XG5leHBvcnQgeyBScHRSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL3JwdC1yZXBvcnQuY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIHsgUmVwb3J0Vmlld1ByZXNldCB9IGZyb20gJy4vcnB0LXJlcG9ydC5jb21wb25lbnQnO1xuIl19