bways-report 0.1.9 → 0.2.1

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 (109) hide show
  1. package/README.md +506 -313
  2. package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
  3. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  4. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  5. package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
  6. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  8. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  9. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  10. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  11. package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
  12. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  13. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +16 -1
  14. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +14 -2
  15. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  16. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  17. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  18. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  19. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +13 -37
  20. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +13 -50
  21. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  22. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  23. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  24. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  25. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  26. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  27. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  28. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  29. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +53 -41
  30. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +551 -123
  31. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
  32. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  33. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +11 -10
  34. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +13 -6
  35. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  36. package/esm2022/lib/features/designer/designer.component.mjs +107 -69
  37. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  38. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  39. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  40. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  41. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  42. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  43. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  44. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  45. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  46. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  47. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  48. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  49. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  50. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  51. package/esm2022/lib/features/runtime/report-execution.service.mjs +52 -8
  52. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +18 -21
  53. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  54. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  55. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  56. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
  57. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  58. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  59. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  60. package/esm2022/lib/provide-reporting.mjs +9 -29
  61. package/fesm2022/bways-report.mjs +2072 -1088
  62. package/fesm2022/bways-report.mjs.map +1 -1
  63. package/lib/core/config/bways-report-config.d.ts +14 -5
  64. package/lib/core/models/report-datasource.model.d.ts +5 -0
  65. package/lib/core/models/report-grid.model.d.ts +1 -1
  66. package/lib/core/services/report-overlay.service.d.ts +14 -0
  67. package/lib/core/services/report-session-context.service.d.ts +9 -0
  68. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  69. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  70. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  71. package/lib/core/utils/report-parameter.util.d.ts +13 -1
  72. package/lib/core/utils/report-request-scope.d.ts +14 -0
  73. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  74. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  75. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  76. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  77. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  78. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  79. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  80. package/lib/data-access/adapters/index.d.ts +1 -1
  81. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  82. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  83. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  84. package/lib/data-access/contracts/index.d.ts +1 -0
  85. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  86. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  87. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  88. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  89. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  90. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  91. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  92. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  93. package/lib/features/designer/designer.component.d.ts +16 -2
  94. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  95. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  96. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  97. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  98. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  99. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  100. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  101. package/lib/features/runtime/report-grid-bridge.component.d.ts +3 -2
  102. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  103. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  104. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  105. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  106. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  107. package/package.json +9 -5
  108. package/styles/theme.css +184 -0
  109. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
@@ -1,4 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';
2
+ import { reportRouteIdentifier } from '../resolvers/report-route-identifier';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { ActivatedRoute, Router, RouterModule } from '@angular/router';
4
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -13,19 +14,20 @@ export class RoutedReportRuntimeComponent {
13
14
  destroyRef = inject(DestroyRef);
14
15
  report = signal(null);
15
16
  loading = signal(true);
16
- canEdit = signal(true);
17
+ canEdit = signal(false);
17
18
  ngOnInit() {
18
19
  // Check if route resolved the report
19
20
  this.route.data
20
21
  .pipe(takeUntilDestroyed(this.destroyRef))
21
22
  .subscribe((data) => {
23
+ this.canEdit.set(data['canEdit'] === true);
22
24
  if (data && data['report']) {
23
25
  this.report.set(data['report']);
24
26
  this.loading.set(false);
25
27
  return;
26
28
  }
27
29
  // Otherwise fallback to resolving via paramMap
28
- const identifier = this.route.snapshot.paramMap.get('slug') ?? this.route.snapshot.paramMap.get('reportId');
30
+ const identifier = reportRouteIdentifier(this.route.snapshot);
29
31
  if (identifier) {
30
32
  this.store.loadReportBySlug(identifier)
31
33
  .pipe(takeUntilDestroyed(this.destroyRef))
@@ -160,4 +162,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
160
162
  </div>
161
163
  `, 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
164
  }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxHQUFHLE1BQU0sQ0FBVSxJQUFJLENB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ICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBPbkluaXQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3JlcG9ydC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJvdXRlZC1ydW50aW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBSZXBvcnRSdW50aW1lQ29tcG9uZW50LCBScHRJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1sb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgPHA+TG9hZGluZyByZXBvcnQgZGVmaW5pdGlvbi4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLWdob3N0IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkdvIGJhY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkJhY2s8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInJwdC1yb3V0ZWQtdGl0bGVcIj57eyByZXBvcnQoKT8ubmFtZSB9fTwvaDE+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1yb3V0ZWQtdmVyc2lvblwiPnZ7eyByZXBvcnQoKT8udmVyc2lvbiA/PyAxIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLXNlY29uZGFyeSBycHQtYnRuLXNtXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSZXBvcnQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2V0dGluZ3NcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkVkaXQgUmVwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cnB0LXJ1bnRpbWUgW3JlcG9ydF09XCJyZXBvcnQoKSFcIiAoZXhlY3V0ZSk9XCJvblJlcG9ydEV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWVycm9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1lcnJvci1jYXJkXCI+XG4gICAgICAgICAgICA8aDM+UmVwb3J0IE5vdCBGb3VuZDwvaDM+XG4gICAgICAgICAgICA8cD5UaGUgcmVxdWVzdGVkIHJlcG9ydCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB5ZXQuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tcHJpbWFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gUHJldmlvdXMgUGFnZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJwdC1yb3V0ZWQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDE2cHgpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZy1ib3R0b206IHZhcigtLXJwdC1zcGFjZS1zbSwgOHB4KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdmVyc2lvbiB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMnB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1sb2FkaW5nLFxuICAgIC5ycHQtcm91dGVkLWVycm9yIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgcGFkZGluZzogNjBweCAyMHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LWVycm9yLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA4cHgpO1xuICAgICAgcGFkZGluZzogMzJweCA0MHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LXNoYWRvdy1zbSwgMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNSkpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCBoMyB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBhbmltYXRpb246IHJwdC1zcGluIDAuOHMgbGluZWFyIGluZmluaXRlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHJwdC1zcGluIHtcbiAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgIH1cblxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tc20ge1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1naG9zdCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYnRuLWdob3N0OmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzFlMjkzYik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2FuRWRpdCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiByb3V0ZSByZXNvbHZlZCB0aGUgcmVwb3J0XG4gICAgdGhpcy5yb3V0ZS5kYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YVsncmVwb3J0J10pIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQoZGF0YVsncmVwb3J0J10pO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjayB0byByZXNvbHZpbmcgdmlhIHBhcmFtTWFwXG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXBvcnRJZCcpO1xuICAgICAgICBpZiAoaWRlbnRpZmllcikge1xuICAgICAgICAgIHRoaXMuc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChyZXApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SZXBvcnRFeGVjdXRlZChmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgLy8gSG9zdCBjYW4gb2JzZXJ2ZSBvciBoYW5kbGUgZXhlY3V0aW9ucyBpZiBuZWVkZWRcbiAgfVxuXG4gIGVkaXRSZXBvcnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAocmVwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFB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OztHQWdEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVwb3J0Um91dGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vcmVzb2x2ZXJzL3JlcG9ydC1yb3V0ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3JlcG9ydC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJvdXRlZC1ydW50aW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBSZXBvcnRSdW50aW1lQ29tcG9uZW50LCBScHRJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1sb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgPHA+TG9hZGluZyByZXBvcnQgZGVmaW5pdGlvbi4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLWdob3N0IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkdvIGJhY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkJhY2s8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInJwdC1yb3V0ZWQtdGl0bGVcIj57eyByZXBvcnQoKT8ubmFtZSB9fTwvaDE+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1yb3V0ZWQtdmVyc2lvblwiPnZ7eyByZXBvcnQoKT8udmVyc2lvbiA/PyAxIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLXNlY29uZGFyeSBycHQtYnRuLXNtXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSZXBvcnQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2V0dGluZ3NcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkVkaXQgUmVwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cnB0LXJ1bnRpbWUgW3JlcG9ydF09XCJyZXBvcnQoKSFcIiAoZXhlY3V0ZSk9XCJvblJlcG9ydEV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWVycm9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1lcnJvci1jYXJkXCI+XG4gICAgICAgICAgICA8aDM+UmVwb3J0IE5vdCBGb3VuZDwvaDM+XG4gICAgICAgICAgICA8cD5UaGUgcmVxdWVzdGVkIHJlcG9ydCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB5ZXQuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tcHJpbWFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gUHJldmlvdXMgUGFnZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJwdC1yb3V0ZWQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDE2cHgpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZy1ib3R0b206IHZhcigtLXJwdC1zcGFjZS1zbSwgOHB4KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdmVyc2lvbiB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMnB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1sb2FkaW5nLFxuICAgIC5ycHQtcm91dGVkLWVycm9yIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgcGFkZGluZzogNjBweCAyMHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LWVycm9yLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA4cHgpO1xuICAgICAgcGFkZGluZzogMzJweCA0MHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LXNoYWRvdy1zbSwgMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNSkpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCBoMyB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBhbmltYXRpb246IHJwdC1zcGluIDAuOHMgbGluZWFyIGluZmluaXRlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHJwdC1zcGluIHtcbiAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgIH1cblxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tc20ge1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1naG9zdCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYnRuLWdob3N0OmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzFlMjkzYik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2FuRWRpdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgcm91dGUgcmVzb2x2ZWQgdGhlIHJlcG9ydFxuICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuRWRpdC5zZXQoZGF0YVsnY2FuRWRpdCddID09PSB0cnVlKTtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YVsncmVwb3J0J10pIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQoZGF0YVsncmVwb3J0J10pO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjayB0byByZXNvbHZpbmcgdmlhIHBhcmFtTWFwXG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSByZXBvcnRSb3V0ZUlkZW50aWZpZXIodGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5sb2FkUmVwb3J0QnlTbHVnKGlkZW50aWZpZXIpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAocmVwKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHJlcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJlcG9ydEV4ZWN1dGVkKGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICAvLyBIb3N0IGNhbiBvYnNlcnZlIG9yIGhhbmRsZSBleGVjdXRpb25zIGlmIG5lZWRlZFxuICB9XG5cbiAgZWRpdFJlcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCByZXAgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmIChyZXApIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZWRpdCddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxufVxuIl19
@@ -19,7 +19,7 @@ export function createReportRoutes(config) {
19
19
  const enableDesigner = config?.enableDesignerRoutes !== false;
20
20
  const runtimeGuards = config?.runtimeGuards ?? [];
21
21
  const designerGuards = config?.designerGuards ?? [];
22
- const extraData = config?.extraRouteData ?? {};
22
+ const extraData = { ...config?.extraRouteData, reportIdParam: reportParam };
23
23
  const routes = [];
24
24
  if (enableDesigner) {
25
25
  routes.push({
@@ -42,7 +42,7 @@ export function createReportRoutes(config) {
42
42
  report: reportResolver
43
43
  },
44
44
  canActivate: runtimeGuards,
45
- data: { ...extraData }
45
+ data: { ...extraData, canEdit: enableDesigner }
46
46
  });
47
47
  return routes;
48
48
  }
@@ -67,13 +67,13 @@ export function bwaysReportRoutes(options) {
67
67
  path: 'new',
68
68
  component: RoutedReportDesignerComponent,
69
69
  canActivate: options.builderGuards ?? [],
70
- data: { isNew: true, ...(options.extraData ?? {}) }
70
+ data: { isNew: true, ...(options.extraData ?? {}), reportIdParam: param }
71
71
  });
72
72
  routes.push({
73
73
  path: `:${param}/edit`,
74
74
  component: RoutedReportDesignerComponent,
75
75
  canActivate: options.builderGuards ?? [],
76
- data: { isEdit: true, ...(options.extraData ?? {}) }
76
+ data: { isEdit: true, ...(options.extraData ?? {}), reportIdParam: param }
77
77
  });
78
78
  }
79
79
  routes.push({
@@ -83,8 +83,8 @@ export function bwaysReportRoutes(options) {
83
83
  report: reportResolver
84
84
  },
85
85
  canActivate: options?.runtimeGuards ?? [],
86
- data: { ...(options?.extraData ?? {}) }
86
+ data: { ...(options?.extraData ?? {}), reportIdParam: param, canEdit: !!options?.includeBuilder }
87
87
  });
88
88
  return routes;
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvcmVwb3J0LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFOUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQTRCO0lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxLQUFLLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDO0lBRTFCLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsY0FBYztZQUMzQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO1NBQ3BDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixJQUFJLEVBQUUsSUFBSSxXQUFXLE9BQU87WUFDNUIsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsY0FBYztZQUMzQixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ1YsSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFO1FBQ3ZCLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLGNBQWM7U0FDdkI7UUFDRCxXQUFXLEVBQUUsYUFBYTtRQUMxQixJQUFJLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFrQztJQUNsRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFMUIsSUFBSSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUU7U0FDcEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTztZQUN0QixTQUFTLEVBQUUsNkJBQTZCO1lBQ3hDLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNWLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRTtRQUNqQixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxjQUFjO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRTtRQUN6QyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtLQUN4QyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJlcG9ydFJvdXRpbmdDb25maWcgfSBmcm9tICcuL21vZGVscy9yZXBvcnQtcm91dGUubW9kZWxzJztcbmltcG9ydCB7IHJlcG9ydFJlc29sdmVyIH0gZnJvbSAnLi9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyJztcbmltcG9ydCB7IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3V0ZWRSZXBvcnREZXNpZ25lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LWRlc2lnbmVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIEFuZ3VsYXIgUm91dGUgZGVmaW5pdGlvbnMgZm9yIGR5bmFtaWMgcmVwb3J0aW5nIHBhZ2VzIGluIGEgaG9zdCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIGluIGhvc3QgYXBwJ3MgYXBwLnJvdXRlcy50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdyZXBvcnRzJyxcbiAqICAgICBjaGlsZHJlbjogY3JlYXRlUmVwb3J0Um91dGVzKClcbiAqICAgfVxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVwb3J0Um91dGVzKGNvbmZpZz86IFJlcG9ydFJvdXRpbmdDb25maWcpOiBSb3V0ZXMge1xuICBjb25zdCByZXBvcnRQYXJhbSA9IGNvbmZpZz8ucmVwb3J0SWRQYXJhbSA/PyAncmVwb3J0SWQnO1xuICBjb25zdCBlbmFibGVEZXNpZ25lciA9IGNvbmZpZz8uZW5hYmxlRGVzaWduZXJSb3V0ZXMgIT09IGZhbHNlO1xuICBjb25zdCBydW50aW1lR3VhcmRzID0gY29uZmlnPy5ydW50aW1lR3VhcmRzID8/IFtdO1xuICBjb25zdCBkZXNpZ25lckd1YXJkcyA9IGNvbmZpZz8uZGVzaWduZXJHdWFyZHMgPz8gW107XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGNvbmZpZz8uZXh0cmFSb3V0ZURhdGEgPz8ge307XG5cbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAoZW5hYmxlRGVzaWduZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzTmV3OiB0cnVlLCAuLi5leHRyYURhdGEgfVxuICAgIH0pO1xuXG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogYDoke3JlcG9ydFBhcmFtfS9lZGl0YCxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uZXh0cmFEYXRhIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgOiR7cmVwb3J0UGFyYW19YCxcbiAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgcmVzb2x2ZToge1xuICAgICAgcmVwb3J0OiByZXBvcnRSZXNvbHZlclxuICAgIH0sXG4gICAgY2FuQWN0aXZhdGU6IHJ1bnRpbWVHdWFyZHMsXG4gICAgZGF0YTogeyAuLi5leHRyYURhdGEgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVzO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGJ3YXlzUmVwb3J0Um91dGVzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydFJvdXRlc09wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGRlc2lnbmVyL2J1aWxkZXIgcm91dGVzICgnbmV3JyBhbmQgJzpzbHVnL2VkaXQnKS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHNpbmNlIGRldmVsb3BlcnMgY2FuIGVtYmVkIDxid2F5cy1yZXBvcnQtYnVpbGRlcj4gZGlyZWN0bHkpLlxuICAgKi9cbiAgaW5jbHVkZUJ1aWxkZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcm91dGUgZ3VhcmRzIGZvciBsaXZlIHJlcG9ydCBwYWdlcy5cbiAgICovXG4gIHJ1bnRpbWVHdWFyZHM/OiBhbnlbXTtcblxuICAvKipcbiAgICogQ3VzdG9tIHJvdXRlIGd1YXJkcyBmb3IgYnVpbGRlci9kZXNpZ25lciBwYWdlcyBpZiBlbmFibGVkLlxuICAgKi9cbiAgYnVpbGRlckd1YXJkcz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gcm91dGUgcGFyYW1ldGVyIG5hbWUuIERlZmF1bHRzIHRvICdzbHVnJy5cbiAgICovXG4gIHNsdWdQYXJhbT86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgc3RhdGljIGRhdGEgcGFzc2VkIGludG8gdGhlIHJvdXRlIGRlZmluaXRpb25zLlxuICAgKi9cbiAgZXh0cmFEYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogRHJvcC1pbiByb3V0ZSBkZWZpbml0aW9ucyBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIEV4YW1wbGUgdXNhZ2UgaW4gaG9zdCBhcHBsaWNhdGlvbiBgYXBwLnJvdXRlcy50c2A6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAncmVwb3J0cycsXG4gKiAgICAgY2hpbGRyZW46IGJ3YXlzUmVwb3J0Um91dGVzKCkgIC8vIC9yZXBvcnRzLzpzbHVnIC0+IGxpdmUgcmVwb3J0IHBhZ2VcbiAqICAgfVxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYndheXNSZXBvcnRSb3V0ZXMob3B0aW9ucz86IEJ3YXlzUmVwb3J0Um91dGVzT3B0aW9ucyk6IFJvdXRlcyB7XG4gIGNvbnN0IHBhcmFtID0gb3B0aW9ucz8uc2x1Z1BhcmFtID8/ICdzbHVnJztcbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAob3B0aW9ucz8uaW5jbHVkZUJ1aWxkZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogb3B0aW9ucy5idWlsZGVyR3VhcmRzID8/IFtdLFxuICAgICAgZGF0YTogeyBpc05ldzogdHJ1ZSwgLi4uKG9wdGlvbnMuZXh0cmFEYXRhID8/IHt9KSB9XG4gICAgfSk7XG5cbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiBgOiR7cGFyYW19L2VkaXRgLFxuICAgICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnREZXNpZ25lckNvbXBvbmVudCxcbiAgICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zLmJ1aWxkZXJHdWFyZHMgPz8gW10sXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uKG9wdGlvbnMuZXh0cmFEYXRhID8/IHt9KSB9XG4gICAgfSk7XG4gIH1cblxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYDoke3BhcmFtfWAsXG4gICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIHJlcG9ydDogcmVwb3J0UmVzb2x2ZXJcbiAgICB9LFxuICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zPy5ydW50aW1lR3VhcmRzID8/IFtdLFxuICAgIGRhdGE6IHsgLi4uKG9wdGlvbnM/LmV4dHJhRGF0YSA/PyB7fSkgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVzO1xufVxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvcmVwb3J0LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFOUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQTRCO0lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxLQUFLLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUUxQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixJQUFJLEVBQUUsS0FBSztZQUNYLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRTtTQUNwQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLElBQUksV0FBVyxPQUFPO1lBQzVCLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRTtTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNWLElBQUksRUFBRSxJQUFJLFdBQVcsRUFBRTtRQUN2QixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxjQUFjO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFLGFBQWE7UUFDMUIsSUFBSSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFrQztJQUNsRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFMUIsSUFBSSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtTQUMxRSxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUU7U0FDM0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDVixJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUU7UUFDakIsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsY0FBYztTQUN2QjtRQUNELFdBQVcsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUU7UUFDekMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUU7S0FDbEcsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSZXBvcnRSb3V0aW5nQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvcmVwb3J0LXJvdXRlLm1vZGVscyc7XG5pbXBvcnQgeyByZXBvcnRSZXNvbHZlciB9IGZyb20gJy4vcmVzb2x2ZXJzL3JlcG9ydC5yZXNvbHZlcic7XG5pbXBvcnQgeyBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JvdXRlZC1yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBBbmd1bGFyIFJvdXRlIGRlZmluaXRpb25zIGZvciBkeW5hbWljIHJlcG9ydGluZyBwYWdlcyBpbiBhIGhvc3QgYXBwbGljYXRpb24uXG4gKlxuICogRXhhbXBsZSB1c2FnZSBpbiBob3N0IGFwcCdzIGFwcC5yb3V0ZXMudHM6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAncmVwb3J0cycsXG4gKiAgICAgY2hpbGRyZW46IGNyZWF0ZVJlcG9ydFJvdXRlcygpXG4gKiAgIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlcG9ydFJvdXRlcyhjb25maWc/OiBSZXBvcnRSb3V0aW5nQ29uZmlnKTogUm91dGVzIHtcbiAgY29uc3QgcmVwb3J0UGFyYW0gPSBjb25maWc/LnJlcG9ydElkUGFyYW0gPz8gJ3JlcG9ydElkJztcbiAgY29uc3QgZW5hYmxlRGVzaWduZXIgPSBjb25maWc/LmVuYWJsZURlc2lnbmVyUm91dGVzICE9PSBmYWxzZTtcbiAgY29uc3QgcnVudGltZUd1YXJkcyA9IGNvbmZpZz8ucnVudGltZUd1YXJkcyA/PyBbXTtcbiAgY29uc3QgZGVzaWduZXJHdWFyZHMgPSBjb25maWc/LmRlc2lnbmVyR3VhcmRzID8/IFtdO1xuICBjb25zdCBleHRyYURhdGEgPSB7IC4uLmNvbmZpZz8uZXh0cmFSb3V0ZURhdGEsIHJlcG9ydElkUGFyYW06IHJlcG9ydFBhcmFtIH07XG5cbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAoZW5hYmxlRGVzaWduZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzTmV3OiB0cnVlLCAuLi5leHRyYURhdGEgfVxuICAgIH0pO1xuXG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogYDoke3JlcG9ydFBhcmFtfS9lZGl0YCxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uZXh0cmFEYXRhIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgOiR7cmVwb3J0UGFyYW19YCxcbiAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgcmVzb2x2ZToge1xuICAgICAgcmVwb3J0OiByZXBvcnRSZXNvbHZlclxuICAgIH0sXG4gICAgY2FuQWN0aXZhdGU6IHJ1bnRpbWVHdWFyZHMsXG4gICAgZGF0YTogeyAuLi5leHRyYURhdGEsIGNhbkVkaXQ6IGVuYWJsZURlc2lnbmVyIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBid2F5c1JlcG9ydFJvdXRlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQndheXNSZXBvcnRSb3V0ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBkZXNpZ25lci9idWlsZGVyIHJvdXRlcyAoJ25ldycgYW5kICc6c2x1Zy9lZGl0JykuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlIChzaW5jZSBkZXZlbG9wZXJzIGNhbiBlbWJlZCA8YndheXMtcmVwb3J0LWJ1aWxkZXI+IGRpcmVjdGx5KS5cbiAgICovXG4gIGluY2x1ZGVCdWlsZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHJvdXRlIGd1YXJkcyBmb3IgbGl2ZSByZXBvcnQgcGFnZXMuXG4gICAqL1xuICBydW50aW1lR3VhcmRzPzogYW55W107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSByb3V0ZSBndWFyZHMgZm9yIGJ1aWxkZXIvZGVzaWduZXIgcGFnZXMgaWYgZW5hYmxlZC5cbiAgICovXG4gIGJ1aWxkZXJHdWFyZHM/OiBhbnlbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHJvdXRlIHBhcmFtZXRlciBuYW1lLiBEZWZhdWx0cyB0byAnc2x1ZycuXG4gICAqL1xuICBzbHVnUGFyYW0/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIHN0YXRpYyBkYXRhIHBhc3NlZCBpbnRvIHRoZSByb3V0ZSBkZWZpbml0aW9ucy5cbiAgICovXG4gIGV4dHJhRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIERyb3AtaW4gcm91dGUgZGVmaW5pdGlvbnMgZm9yIGJ3YXlzLXJlcG9ydC5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIGluIGhvc3QgYXBwbGljYXRpb24gYGFwcC5yb3V0ZXMudHNgOlxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ3JlcG9ydHMnLFxuICogICAgIGNoaWxkcmVuOiBid2F5c1JlcG9ydFJvdXRlcygpICAvLyAvcmVwb3J0cy86c2x1ZyAtPiBsaXZlIHJlcG9ydCBwYWdlXG4gKiAgIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ3YXlzUmVwb3J0Um91dGVzKG9wdGlvbnM/OiBCd2F5c1JlcG9ydFJvdXRlc09wdGlvbnMpOiBSb3V0ZXMge1xuICBjb25zdCBwYXJhbSA9IG9wdGlvbnM/LnNsdWdQYXJhbSA/PyAnc2x1Zyc7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW107XG5cbiAgaWYgKG9wdGlvbnM/LmluY2x1ZGVCdWlsZGVyKSB7XG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogJ25ldycsXG4gICAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LFxuICAgICAgY2FuQWN0aXZhdGU6IG9wdGlvbnMuYnVpbGRlckd1YXJkcyA/PyBbXSxcbiAgICAgIGRhdGE6IHsgaXNOZXc6IHRydWUsIC4uLihvcHRpb25zLmV4dHJhRGF0YSA/PyB7fSksIHJlcG9ydElkUGFyYW06IHBhcmFtIH1cbiAgICB9KTtcblxuICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgIHBhdGg6IGA6JHtwYXJhbX0vZWRpdGAsXG4gICAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LFxuICAgICAgY2FuQWN0aXZhdGU6IG9wdGlvbnMuYnVpbGRlckd1YXJkcyA/PyBbXSxcbiAgICAgIGRhdGE6IHsgaXNFZGl0OiB0cnVlLCAuLi4ob3B0aW9ucy5leHRyYURhdGEgPz8ge30pLCByZXBvcnRJZFBhcmFtOiBwYXJhbSB9XG4gICAgfSk7XG4gIH1cblxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYDoke3BhcmFtfWAsXG4gICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIHJlcG9ydDogcmVwb3J0UmVzb2x2ZXJcbiAgICB9LFxuICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zPy5ydW50aW1lR3VhcmRzID8/IFtdLFxuICAgIGRhdGE6IHsgLi4uKG9wdGlvbnM/LmV4dHJhRGF0YSA/PyB7fSksIHJlcG9ydElkUGFyYW06IHBhcmFtLCBjYW5FZGl0OiAhIW9wdGlvbnM/LmluY2x1ZGVCdWlsZGVyIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcztcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export function reportRouteIdentifier(route) {
2
+ const key = route.data?.['reportIdParam'];
3
+ return (key ? route.paramMap.get(key) : null) ?? route.paramMap.get('slug') ?? route.paramMap.get('reportId');
4
+ }
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlLWlkZW50aWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9yb3V0aW5nL3Jlc29sdmVycy9yZXBvcnQtcm91dGUtaWRlbnRpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBNkI7SUFDakUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBdUIsQ0FBQztJQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0Um91dGVJZGVudGlmaWVyKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGtleSA9IHJvdXRlLmRhdGE/LlsncmVwb3J0SWRQYXJhbSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChrZXkgPyByb3V0ZS5wYXJhbU1hcC5nZXQoa2V5KSA6IG51bGwpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { reportRouteIdentifier } from './report-route-identifier';
1
2
  import { inject } from '@angular/core';
2
3
  import { of } from 'rxjs';
3
4
  import { catchError } from 'rxjs/operators';
@@ -8,7 +9,7 @@ import { ReportStoreService } from '../../persistence/services/report-store.serv
8
9
  */
9
10
  export const reportResolver = (route, _state) => {
10
11
  const store = inject(ReportStoreService);
11
- const identifier = route.paramMap.get('slug') ?? route.paramMap.get('reportId');
12
+ const identifier = reportRouteIdentifier(route);
12
13
  if (!identifier) {
13
14
  return of(null);
14
15
  }
@@ -17,4 +18,4 @@ export const reportResolver = (route, _state) => {
17
18
  return of(null);
18
19
  }));
19
20
  };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcm91dGluZy9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUF1QyxDQUNoRSxLQUE2QixFQUM3QixNQUEyQixFQUNVLEVBQUU7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzVDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmVGbiwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIEZ1bmN0aW9uYWwgcmVzb2x2ZXIgdGhhdCBmZXRjaGVzIGEgUmVwb3J0RGVmaW5pdGlvbiB1c2luZyBSZXBvcnRTdG9yZVNlcnZpY2VcbiAqIGJhc2VkIG9uIHRoZSA6c2x1ZyBvciA6cmVwb3J0SWQgcm91dGUgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgY29uc3QgcmVwb3J0UmVzb2x2ZXI6IFJlc29sdmVGbjxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4gPSAoXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBfc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3Rcbik6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUmVwb3J0U3RvcmVTZXJ2aWNlKTtcbiAgY29uc3QgaWRlbnRpZmllciA9IHJvdXRlLnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcblxuICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICByZXR1cm4gc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgW2J3YXlzLXJlcG9ydF0gRmFpbGVkIHRvIHJlc29sdmUgcmVwb3J0ICcke2lkZW50aWZpZXJ9JzpgLCBlcnIpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH0pXG4gICk7XG59O1xuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcm91dGluZy9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUF1QyxDQUNoRSxLQUE2QixFQUM3QixNQUEyQixFQUNVLEVBQUU7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzVDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXBvcnRSb3V0ZUlkZW50aWZpZXIgfSBmcm9tICcuL3JlcG9ydC1yb3V0ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZUZuLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBSZXBvcnRTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZSc7XG5cbi8qKlxuICogRnVuY3Rpb25hbCByZXNvbHZlciB0aGF0IGZldGNoZXMgYSBSZXBvcnREZWZpbml0aW9uIHVzaW5nIFJlcG9ydFN0b3JlU2VydmljZVxuICogYmFzZWQgb24gdGhlIDpzbHVnIG9yIDpyZXBvcnRJZCByb3V0ZSBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCByZXBvcnRSZXNvbHZlcjogUmVzb2x2ZUZuPFJlcG9ydERlZmluaXRpb24gfCBudWxsPiA9IChcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIF9zdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcmVwb3J0Um91dGVJZGVudGlmaWVyKHJvdXRlKTtcblxuICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICByZXR1cm4gc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgW2J3YXlzLXJlcG9ydF0gRmFpbGVkIHRvIHJlc29sdmUgcmVwb3J0ICcke2lkZW50aWZpZXJ9JzpgLCBlcnIpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH0pXG4gICk7XG59O1xuIl19
@@ -56,7 +56,7 @@ export class DynamicRendererComponent {
56
56
  inputs['config'] = comp;
57
57
  }
58
58
  if (comp.key && comp.type !== 'button' && comp.type !== 'kpi-card' && comp.type !== 'chart') {
59
- inputs['control'] = this.form().get(comp.key);
59
+ inputs['control'] = this.form().controls[comp.key];
60
60
  }
61
61
  if (comp.type === 'dropdown' || comp.type === 'radio') {
62
62
  inputs['parentForm'] = this.form();
@@ -463,4 +463,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
463
463
  </div>
464
464
  `, 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:start}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column}.rpt-cell>*{width:100%;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"] }]
465
465
  }] });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQStNbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1B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WUFDM0IsTUFBTTtZQUNOLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVc7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQXRWVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixzNEJBek16Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRlQsK3pFQXBGUyxZQUFZLHNTQUFFLG1CQUFtQixxYkFBRSx5QkFBeUI7OzRGQTBNM0Qsd0JBQXdCO2tCQTdNcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLFlBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GVCxtQkFvSGdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIEdyaWRSb3dDbGlja0FjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1CdWlsZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9keW5hbWljLWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9leHBvcnQvc2VydmljZXMvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1icmlkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUdyaWRDb2x1bW4sXG4gIGNhbGN1bGF0ZUdyaWRSb3csXG4gIHJlc29sdmVDb21wb25lbnRIZWlnaHQsXG4gIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHRcbn0gZnJvbSAnLi4vZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1keW5hbWljLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJycHQtcmVuZGVyZXItcm9vdFwiXG4gICAgICBbc3R5bGUuZGlyZWN0aW9uXT1cImRlZmluaXRpb24oKS5sYXlvdXQuZGlyZWN0aW9uIHx8ICdsdHInXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQucGFkZGluZyA/PyAyNFwiXG4gICAgPlxuICAgICAgPCEtLSBSZXBvcnQgSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwicnB0LXRpdGxlXCI+e3sgZGVmaW5pdGlvbigpLm5hbWUgfX08L2gyPlxuICAgICAgICBAaWYgKGRlZmluaXRpb24oKS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIDxwIGNsYXNzPVwicnB0LWRlc2NyaXB0aW9uXCI+e3sgZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb250cm9scyBGb3JtIC8gUGFyYW1ldGVyIEZpbHRlciBCYXIgLS0+XG4gICAgICBAaWYgKGRlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIGNsYXNzPVwicnB0LWZvcm1cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJwdC1sYXlvdXQtZ3JpZFwiXG4gICAgICAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdyaWRDb2x1bW5zVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZ2FwLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQuZ2FwID8/IDE2XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjb21wIG9mIHNvcnRlZENvbXBvbmVudHMoKTsgdHJhY2sgY29tcC5pZCkge1xuICAgICAgICAgICAgICBAaWYgKGlzQ29tcG9uZW50VmlzaWJsZShjb21wKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtY29sdW1uXT1cImdldEdyaWRDb2x1bW4oY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtcm93XT1cImdldEdyaWRSb3coY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbXAubGF5b3V0Py53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRDb21wb25lbnRIZWlnaHQoY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0Q29tcG9uZW50TWluSGVpZ2h0KGNvbXApXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5tYXhIZWlnaHQgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVDb21wb25lbnQoY29tcC50eXBlKTsgYXMgY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29tcENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwiZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVua25vd24gY29tcG9uZW50OiA8Y29kZT57eyBjb21wLnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBSZXN1bHQgR3JpZCBTZWN0aW9uIC0tPlxuICAgICAgQGlmIChkZWZpbml0aW9uKCkuZ3JpZCkge1xuICAgICAgICBAaWYgKHJlc3VsdERhdGEoKSAhPT0gbnVsbCAmJiByZXN1bHREYXRhKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8cnB0LWdyaWQtYnJpZGdlXG4gICAgICAgICAgICAgIFtncmlkRGVmaW5pdGlvbl09XCJkZWZpbml0aW9uKCkuZ3JpZCFcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJyZXN1bHREYXRhKCkhXCJcbiAgICAgICAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJncmlkU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dDbGljayk9XCJvbkdyaWRSb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkdyaWRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtc2VjdGlvbiBycHQtZ3JpZC1pbml0aWFsLXN0YXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1pbml0aWFsLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtaW5pdGlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzaDE4djE4SDN6TTMgOWgxOE0zIDE1aDE4TTkgM3YxOE0xNSAzdjE4XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZ3JpZC1pbml0aWFsLXRpdGxlXCI+UmVwb3J0IFJlYWR5IHRvIEV4ZWN1dGU8L2g0PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImdyaWQtaW5pdGlhbC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgQ29uZmlndXJlIGZpbHRlciBwYXJhbWV0ZXJzIGFib3ZlIGFuZCBleGVjdXRlIHRoZSByZXBvcnQgdG8gcmV0cmlldmUgbGl2ZSByZWNvcmRzIGludG8gdGhlIGdyaWQgKHt7IGRlZmluaXRpb24oKS5ncmlkPy5jb2x1bW5zPy5sZW5ndGggPz8gMCB9fSBjb2x1bW5zIGNvbmZpZ3VyZWQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWdyaWQtaW5pdGlhbC1leGVjXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5FeGVjdXRlIFJlcG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1yZW5kZXJlci1yb290IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgLnJwdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteGwsIDEuNXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuICAgIC5ycHQtZGVzY3JpcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtZm9ybSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cbiAgICAucnB0LWxheW91dC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICB9XG4gICAgLnJwdC1jZWxsIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgLnJwdC1jZWxsID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXItYmcsICNmZWYyZjIpO1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1zZWN0aW9uIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWluaXRpYWwtc3RhdGUge1xuICAgICAgcGFkZGluZzogMTJweCAwO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWNhcmQge1xuICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMteGwsIDEycHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgcGFkZGluZzogNDhweCAyNHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWljb24ge1xuICAgICAgd2lkdGg6IDUycHg7XG4gICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtbWQsIDFyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1kZXNjIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44MTI1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYyB7XG4gICAgICBwYWRkaW5nOiA4cHggMjBweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KER5bmFtaWNGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBpbml0aWFsVmFsdWVzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgcmVzdWx0RGF0YSA9IGlucHV0PHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGV4ZWN1dGVSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgcmVzZXRSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgZXhwb3J0UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBmaWxlTmFtZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBkYXRhOiB1bmtub3duW10gfCBudWxsO1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IHByaW50UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBycHRGaWxlTmFtZT86IHN0cmluZztcbiAgICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUFjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uO1xuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2VkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZWQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHJvd0FjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBmb3JtID0gY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIudG9Gb3JtR3JvdXAoXG4gICAgICB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLFxuICAgICAgdGhpcy5pbml0aWFsVmFsdWVzKClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWRDb21wb25lbnRzID0gY29tcHV0ZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmxheW91dC5jb2x1bW5zIHx8IDEyO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29sdW1uc1RlbXBsYXRlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIGByZXBlYXQoJHt0aGlzLnRvdGFsR3JpZENvbHVtbnMoKX0sIG1pbm1heCgwLCAxZnIpKWA7XG4gIH0pO1xuXG4gIHJlc29sdmVDb21wb25lbnQodHlwZTogc3RyaW5nKTogVHlwZTx1bmtub3duPiB8IG51bGwge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUodHlwZSk7XG4gICAgcmV0dXJuIChtZXRhPy5jb21wb25lbnQgYXMgVHlwZTx1bmtub3duPikgPz8gbnVsbDtcbiAgfVxuXG4gIGdldENvbXBvbmVudElucHV0cyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdrcGktY2FyZCcgfHwgY29tcC50eXBlID09PSAnY2hhcnQnKSB7XG4gICAgICBpbnB1dHNbJ2RlZmluaXRpb24nXSA9IGNvbXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1snY29uZmlnJ10gPSBjb21wO1xuICAgIH1cblxuICAgIGlmIChjb21wLmtleSAmJiBjb21wLnR5cGUgIT09ICdidXR0b24nICYmIGNvbXAudHlwZSAhPT0gJ2twaS1jYXJkJyAmJiBjb21wLnR5cGUgIT09ICdjaGFydCcpIHtcbiAgICAgIGlucHV0c1snY29udHJvbCddID0gdGhpcy5mb3JtKCkuZ2V0KGNvbXAua2V5KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbXAudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgaW5wdXRzWydwYXJlbnRGb3JtJ10gPSB0aGlzLmZvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC50eXBlID09PSAnYnV0dG9uJykge1xuICAgICAgaW5wdXRzWydvbkFjdGlvbiddID0gKGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbikgPT4gdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBjb21wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRzO1xuICB9XG5cblxuICBnZXRHcmlkQ29sdW1uKGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBjYWxjdWxhdGVHcmlkQ29sdW1uKGNvbXAsIHRoaXMudG90YWxHcmlkQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEdyaWRSb3coY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUdyaWRSb3coY29tcCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRIZWlnaHQoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGb3JtSW5wdXQoY29tcC50eXBlKSkge1xuICAgICAgY29uc3QgaCA9IGNvbXAubGF5b3V0Py5oZWlnaHQ7XG4gICAgICBpZiAoaCA9PT0gJzg1cHgnIHx8ICFoIHx8IGggPT09ICdhdXRvJykgcmV0dXJuICdhdXRvJztcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVDb21wb25lbnRIZWlnaHQoY29tcCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRNaW5IZWlnaHQoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGb3JtSW5wdXQoY29tcC50eXBlKSkge1xuICAgICAgY29uc3QgbWluSCA9IGNvbXAubGF5b3V0Py5taW5IZWlnaHQ7XG4gICAgICBpZiAobWluSCA9PT0gJzg1cHgnIHx8ICFtaW5IIHx8IG1pbkggPT09ICdhdXRvJykgcmV0dXJuICdhdXRvJztcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHQoY29tcCk7XG4gIH1cblxuICBpc0Zvcm1JbnB1dCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZSA9PT0gJ2lucHV0JyB8fFxuICAgICAgdHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fFxuICAgICAgdHlwZSA9PT0gJ2RhdGUnIHx8XG4gICAgICB0eXBlID09PSAnZGF0ZS1yYW5nZScgfHxcbiAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlID09PSAnY2hlY2tib3gnIHx8XG4gICAgICB0eXBlID09PSAncmFkaW8nIHx8XG4gICAgICB0eXBlID09PSAnYnV0dG9uJ1xuICAgICk7XG4gIH1cblxuICBpc0NvbXBvbmVudFZpc2libGUoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZpcyA9IGNvbXAudmlzaWJpbGl0eTtcbiAgICBpZiAoIXZpcykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybSgpLmdldCh2aXMuZGVwZW5kc09uKTtcbiAgICBjb25zdCB2YWwgPSBjdHJsID8gY3RybC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHZpcy5vcGVyYXRvcikge1xuICAgICAgY2FzZSAnZXF1YWxzJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gdmlzLnZhbHVlO1xuICAgICAgY2FzZSAnbm90RXF1YWxzJzpcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gdmlzLnZhbHVlO1xuICAgICAgY2FzZSAnY29udGFpbnMnOlxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKFN0cmluZyh2aXMudmFsdWUpKTtcbiAgICAgIGNhc2UgJ2dyZWF0ZXJUaGFuJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpID4gTnVtYmVyKHZpcy52YWx1ZSk7XG4gICAgICBjYXNlICdsZXNzVGhhbic6XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsKSA8IE51bWJlcih2aXMudmFsdWUpO1xuICAgICAgY2FzZSAnaXNOb3RFbXB0eSc6XG4gICAgICAgIHJldHVybiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAnJztcbiAgICAgIGNhc2UgJ2lzRW1wdHknOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gJyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmID0gdGhpcy5mb3JtKCk7XG4gICAgaWYgKGYuaW52YWxpZCkge1xuICAgICAgZi5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyhmKTtcbiAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICBkZWZpbml0aW9uOiB0aGlzLmRlZmluaXRpb24oKSxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uLCBjb21wPzogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmZvcm1CdWlsZGVyLmV4dHJhY3RWYWx1ZXModGhpcy5mb3JtKCkpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZXhlY3V0ZS1yZXBvcnQnOlxuICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgICAgdGhpcy5vblN1Ym1pdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICB0aGlzLmZvcm0oKS5yZXNldCh0aGlzLmluaXRpYWxWYWx1ZXMoKSk7XG4gICAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWQuZW1pdCh7IGRlZmluaXRpb246IHRoaXMuZGVmaW5pdGlvbigpIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSAoYWN0aW9uLnBhcmFtcz8uWydmb3JtYXQnXSBhcyBzdHJpbmcpIHx8ICdleGNlbCc7XG4gICAgICAgIGNvbnN0IGRlZmF1bHROYW1lID0gdGhpcy5kZWZpbml0aW9uKCkubmFtZVxuICAgICAgICAgID8gdGhpcy5kZWZpbml0aW9uKCkubmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCAnXycpXG4gICAgICAgICAgOiAncmVwb3J0JztcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoYWN0aW9uLnBhcmFtcz8uWydmaWxlTmFtZSddIGFzIHN0cmluZykgfHwgYCR7ZGVmYXVsdE5hbWV9XyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bHREYXRhKCk7XG5cbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZXhwb3J0U2VydmljZSkge1xuICAgICAgICAgIGNvbnN0IGZtdCA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChmbXQgPT09ICdjc3YnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0Q3N2KGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwge1xuICAgICAgICAgICAgICBmaWxlTmFtZTogYCR7ZmlsZU5hbWV9LmNzdmAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2V4Y2VsJyB8fCBmbXQgPT09ICd4bHN4JyB8fCBmbXQgPT09ICd4bHMnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RXhjZWwoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmbXQgPT09ICdodG1sJykge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydEh0bWwoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uaHRtbGAsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmRlZmluaXRpb24oKT8ubmFtZSB8fCAnUmVwb3J0IEV4cG9ydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0SnNvbihkYXRhLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uanNvbmAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cG9ydFJlcXVlc3RlZC5lbWl0KHtcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3ByaW50LXJlcG9ydCc6IHtcbiAgICAgICAgY29uc3QgcnB0RmlsZU5hbWUgPSAoYWN0aW9uLnBhcmFtcz8uWydycHRGaWxlTmFtZSddIGFzIHN0cmluZykgfHwgJyc7XG4gICAgICAgIGNvbnN0IGV4cG9ydFR5cGUgPSAoYWN0aW9uLnBhcmFtcz8uWydleHBvcnRUeXBlJ10gYXMgc3RyaW5nKSB8fCAncGRmJztcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdWx0RGF0YSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmV4cG9ydFNlcnZpY2UgJiYgIXJwdEZpbGVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnByaW50UmVwb3J0KGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGVmaW5pdGlvbigpPy5uYW1lIHx8ICdSZXBvcnQgUHJpbnQgUHJldmlldycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW50UmVxdWVzdGVkLmVtaXQoe1xuICAgICAgICAgIHJwdEZpbGVOYW1lLFxuICAgICAgICAgIGV4cG9ydFR5cGUsXG4gICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gKGFjdGlvbi5wYXJhbXM/LlsndGFyZ2V0VXJsJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgICAgICAgY29uc3Qgb3Blbk5ld1RhYiA9IGFjdGlvbi5wYXJhbXM/Llsnb3Blbk5ld1RhYiddID09PSB0cnVlO1xuXG4gICAgICAgIGlmICh0YXJnZXRVcmwpIHtcbiAgICAgICAgICBpZiAob3Blbk5ld1RhYiB8fCB0YXJnZXRVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0YXJnZXRVcmwsIG9wZW5OZXdUYWIgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3V0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0YXJnZXRVcmxdLCB7IHF1ZXJ5UGFyYW1zOiBwYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRhcmdldFVybDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2N1c3RvbS1ldmVudCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY29tcCkge1xuICAgICAgICAgIHRoaXMuY3VzdG9tQWN0aW9uVHJpZ2dlcmVkLmVtaXQoe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY29tcG9uZW50OiBjb21wLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvbkdyaWRSb3dDbGljayhldmVudDoge1xuICAgIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29sdW1uPzogR3JpZENvbHVtbkRlZmluaXRpb247XG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZGVmaW5pdGlvbigpLmdyaWQ7XG4gICAgaWYgKCFncmlkKSByZXR1cm47XG5cbiAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jb2x1bW4/LmFjdGlvbiA/PyBncmlkLnJvd0NsaWNrQWN0aW9uID8/IGdyaWQub3B0aW9ucz8ucm93Q2xpY2tBY3Rpb247XG4gICAgaWYgKCFhY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm1CdWlsZGVyLmV4dHJhY3RWYWx1ZXModGhpcy5mb3JtKCkpO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IG1hcHBlZFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcgJiYgT2JqZWN0LmtleXMoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgW3RhcmdldEtleSwgZXhwcl0gb2YgT2JqZWN0LmVudHJpZXMoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcpKSB7XG4gICAgICAgIGxldCB2YWw6IHVua25vd24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChleHByLnN0YXJ0c1dpdGgoJ3Jvdy4nKSkge1xuICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkID0gZXhwci5zbGljZSg0KTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShldmVudC5yb3csIHJvd0ZpZWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHByLnN0YXJ0c1dpdGgoJ2Zvcm0uJykgfHwgZXhwci5zdGFydHNXaXRoKCdmb3JtVmFsdWVzLicpKSB7XG4gICAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZXhwci5yZXBsYWNlKC9eZm9ybVxcLnxeZm9ybVZhbHVlc1xcLi8sICcnKTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShmb3JtVmFsdWVzLCBmb3JtRmllbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cHIuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSkge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25GaWVsZCA9IGV4cHIuc2xpY2UoOCk7XG4gICAgICAgICAgdmFsID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUoc2Vzc2lvbiwgc2Vzc2lvbkZpZWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEaXJlY3Qgcm93IGZpZWxkIG9yIGxpdGVyYWxcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShldmVudC5yb3csIGV4cHIpID8/IGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgbWFwcGVkUGFyYW1ldGVyc1t0YXJnZXRLZXldID0gdmFsICE9PSB1bmRlZmluZWQgPyB2YWwgOiAnJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdDogY29weSBlbnRpcmUgcm93IGRhdGFcbiAgICAgIE9iamVjdC5hc3NpZ24obWFwcGVkUGFyYW1ldGVycywgZXZlbnQucm93KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICduYXZpZ2F0ZScgJiYgYWN0aW9uLnRhcmdldFVybCkge1xuICAgICAgbGV0IHRhcmdldFVybCA9IGFjdGlvbi50YXJnZXRVcmw7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhldmVudC5yb3cpKSB7XG4gICAgICAgIHRhcmdldFVybCA9IHRhcmdldFVybC5yZXBsYWNlKFxuICAgICAgICAgIG5ldyBSZWdFeHAoYFxcXFx7XFxcXHtcXFxccyooPzpyb3dcXFxcLik/JHtrfVxcXFxzKlxcXFx9XFxcXH1gLCAnZ2knKSxcbiAgICAgICAgICBTdHJpbmcodiA/PyAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24ub3Blbk5ld1RhYiB8fCB0YXJnZXRVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKHRhcmdldFVybCwgYWN0aW9uLm9wZW5OZXdUYWIgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhcmdldFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRhcmdldFVybDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJvd0FjdGlvblRyaWdnZXJlZC5lbWl0KHtcbiAgICAgIGFjdGlvbixcbiAgICAgIHJvdzogZXZlbnQucm93LFxuICAgICAgcGFyYW1ldGVyczogbWFwcGVkUGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uR3JpZFNlbGVjdGlvbkNoYW5nZShyb3dzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQocm93cyk7XG4gIH1cbn1cbiJdfQ==
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQStNbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1B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WUFDM0IsTUFBTTtZQUNOLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVc7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQXRWVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixzNEJBek16Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRlQsK3pFQXBGUyxZQUFZLHNTQUFFLG1CQUFtQixxYkFBRSx5QkFBeUI7OzRGQTBNM0Qsd0JBQXdCO2tCQTdNcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLFlBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GVCxtQkFvSGdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIEdyaWRSb3dDbGlja0FjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1CdWlsZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9keW5hbWljLWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9leHBvcnQvc2VydmljZXMvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1icmlkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUdyaWRDb2x1bW4sXG4gIGNhbGN1bGF0ZUdyaWRSb3csXG4gIHJlc29sdmVDb21wb25lbnRIZWlnaHQsXG4gIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHRcbn0gZnJvbSAnLi4vZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1keW5hbWljLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJycHQtcmVuZGVyZXItcm9vdFwiXG4gICAgICBbc3R5bGUuZGlyZWN0aW9uXT1cImRlZmluaXRpb24oKS5sYXlvdXQuZGlyZWN0aW9uIHx8ICdsdHInXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQucGFkZGluZyA/PyAyNFwiXG4gICAgPlxuICAgICAgPCEtLSBSZXBvcnQgSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwicnB0LXRpdGxlXCI+e3sgZGVmaW5pdGlvbigpLm5hbWUgfX08L2gyPlxuICAgICAgICBAaWYgKGRlZmluaXRpb24oKS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIDxwIGNsYXNzPVwicnB0LWRlc2NyaXB0aW9uXCI+e3sgZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb250cm9scyBGb3JtIC8gUGFyYW1ldGVyIEZpbHRlciBCYXIgLS0+XG4gICAgICBAaWYgKGRlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIGNsYXNzPVwicnB0LWZvcm1cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJwdC1sYXlvdXQtZ3JpZFwiXG4gICAgICAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdyaWRDb2x1bW5zVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZ2FwLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQuZ2FwID8/IDE2XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjb21wIG9mIHNvcnRlZENvbXBvbmVudHMoKTsgdHJhY2sgY29tcC5pZCkge1xuICAgICAgICAgICAgICBAaWYgKGlzQ29tcG9uZW50VmlzaWJsZShjb21wKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtY29sdW1uXT1cImdldEdyaWRDb2x1bW4oY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtcm93XT1cImdldEdyaWRSb3coY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbXAubGF5b3V0Py53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRDb21wb25lbnRIZWlnaHQoY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0Q29tcG9uZW50TWluSGVpZ2h0KGNvbXApXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5tYXhIZWlnaHQgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVDb21wb25lbnQoY29tcC50eXBlKTsgYXMgY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29tcENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwiZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVua25vd24gY29tcG9uZW50OiA8Y29kZT57eyBjb21wLnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBSZXN1bHQgR3JpZCBTZWN0aW9uIC0tPlxuICAgICAgQGlmIChkZWZpbml0aW9uKCkuZ3JpZCkge1xuICAgICAgICBAaWYgKHJlc3VsdERhdGEoKSAhPT0gbnVsbCAmJiByZXN1bHREYXRhKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8cnB0LWdyaWQtYnJpZGdlXG4gICAgICAgICAgICAgIFtncmlkRGVmaW5pdGlvbl09XCJkZWZpbml0aW9uKCkuZ3JpZCFcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJyZXN1bHREYXRhKCkhXCJcbiAgICAgICAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJncmlkU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dDbGljayk9XCJvbkdyaWRSb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkdyaWRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtc2VjdGlvbiBycHQtZ3JpZC1pbml0aWFsLXN0YXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1pbml0aWFsLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtaW5pdGlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzaDE4djE4SDN6TTMgOWgxOE0zIDE1aDE4TTkgM3YxOE0xNSAzdjE4XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZ3JpZC1pbml0aWFsLXRpdGxlXCI+UmVwb3J0IFJlYWR5IHRvIEV4ZWN1dGU8L2g0PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImdyaWQtaW5pdGlhbC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgQ29uZmlndXJlIGZpbHRlciBwYXJhbWV0ZXJzIGFib3ZlIGFuZCBleGVjdXRlIHRoZSByZXBvcnQgdG8gcmV0cmlldmUgbGl2ZSByZWNvcmRzIGludG8gdGhlIGdyaWQgKHt7IGRlZmluaXRpb24oKS5ncmlkPy5jb2x1bW5zPy5sZW5ndGggPz8gMCB9fSBjb2x1bW5zIGNvbmZpZ3VyZWQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWdyaWQtaW5pdGlhbC1leGVjXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5FeGVjdXRlIFJlcG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1yZW5kZXJlci1yb290IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgLnJwdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteGwsIDEuNXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuICAgIC5ycHQtZGVzY3JpcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtZm9ybSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cbiAgICAucnB0LWxheW91dC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICB9XG4gICAgLnJwdC1jZWxsIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgLnJwdC1jZWxsID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXItYmcsICNmZWYyZjIpO1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1zZWN0aW9uIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWluaXRpYWwtc3RhdGUge1xuICAgICAgcGFkZGluZzogMTJweCAwO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWNhcmQge1xuICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMteGwsIDEycHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgcGFkZGluZzogNDhweCAyNHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWljb24ge1xuICAgICAgd2lkdGg6IDUycHg7XG4gICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtbWQsIDFyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1kZXNjIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44MTI1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYyB7XG4gICAgICBwYWRkaW5nOiA4cHggMjBweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KER5bmFtaWNGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBpbml0aWFsVmFsdWVzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgcmVzdWx0RGF0YSA9IGlucHV0PHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGV4ZWN1dGVSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgcmVzZXRSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgZXhwb3J0UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBmaWxlTmFtZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBkYXRhOiB1bmtub3duW10gfCBudWxsO1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IHByaW50UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBycHRGaWxlTmFtZT86IHN0cmluZztcbiAgICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUFjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uO1xuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2VkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZWQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHJvd0FjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBmb3JtID0gY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIudG9Gb3JtR3JvdXAoXG4gICAgICB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLFxuICAgICAgdGhpcy5pbml0aWFsVmFsdWVzKClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWRDb21wb25lbnRzID0gY29tcHV0ZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmxheW91dC5jb2x1bW5zIHx8IDEyO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29sdW1uc1RlbXBsYXRlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIGByZXBlYXQoJHt0aGlzLnRvdGFsR3JpZENvbHVtbnMoKX0sIG1pbm1heCgwLCAxZnIpKWA7XG4gIH0pO1xuXG4gIHJlc29sdmVDb21wb25lbnQodHlwZTogc3RyaW5nKTogVHlwZTx1bmtub3duPiB8IG51bGwge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUodHlwZSk7XG4gICAgcmV0dXJuIChtZXRhPy5jb21wb25lbnQgYXMgVHlwZTx1bmtub3duPikgPz8gbnVsbDtcbiAgfVxuXG4gIGdldENvbXBvbmVudElucHV0cyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdrcGktY2FyZCcgfHwgY29tcC50eXBlID09PSAnY2hhcnQnKSB7XG4gICAgICBpbnB1dHNbJ2RlZmluaXRpb24nXSA9IGNvbXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1snY29uZmlnJ10gPSBjb21wO1xuICAgIH1cblxuICAgIGlmIChjb21wLmtleSAmJiBjb21wLnR5cGUgIT09ICdidXR0b24nICYmIGNvbXAudHlwZSAhPT0gJ2twaS1jYXJkJyAmJiBjb21wLnR5cGUgIT09ICdjaGFydCcpIHtcbiAgICAgIGlucHV0c1snY29udHJvbCddID0gdGhpcy5mb3JtKCkuY29udHJvbHNbY29tcC5rZXldO1xuICAgIH1cblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29tcC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBpbnB1dHNbJ3BhcmVudEZvcm0nXSA9IHRoaXMuZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpbnB1dHNbJ29uQWN0aW9uJ10gPSAoYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uKSA9PiB0aGlzLmhhbmRsZUFjdGlvbihhY3Rpb24sIGNvbXApO1xuICAgIH1cblxuICAgIHJldHVybiBpbnB1dHM7XG4gIH1cblxuXG4gIGdldEdyaWRDb2x1bW4oY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUdyaWRDb2x1bW4oY29tcCwgdGhpcy50b3RhbEdyaWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0R3JpZFJvdyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlR3JpZFJvdyhjb21wKTtcbiAgfVxuXG4gIGdldENvbXBvbmVudEhlaWdodChjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1JbnB1dChjb21wLnR5cGUpKSB7XG4gICAgICBjb25zdCBoID0gY29tcC5sYXlvdXQ/LmhlaWdodDtcbiAgICAgIGlmIChoID09PSAnODVweCcgfHwgIWggfHwgaCA9PT0gJ2F1dG8nKSByZXR1cm4gJ2F1dG8nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZUNvbXBvbmVudEhlaWdodChjb21wKTtcbiAgfVxuXG4gIGdldENvbXBvbmVudE1pbkhlaWdodChjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1JbnB1dChjb21wLnR5cGUpKSB7XG4gICAgICBjb25zdCBtaW5IID0gY29tcC5sYXlvdXQ/Lm1pbkhlaWdodDtcbiAgICAgIGlmIChtaW5IID09PSAnODVweCcgfHwgIW1pbkggfHwgbWluSCA9PT0gJ2F1dG8nKSByZXR1cm4gJ2F1dG8nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZUNvbXBvbmVudE1pbkhlaWdodChjb21wKTtcbiAgfVxuXG4gIGlzRm9ybUlucHV0KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlID09PSAnaW5wdXQnIHx8XG4gICAgICB0eXBlID09PSAnZHJvcGRvd24nIHx8XG4gICAgICB0eXBlID09PSAnZGF0ZScgfHxcbiAgICAgIHR5cGUgPT09ICdkYXRlLXJhbmdlJyB8fFxuICAgICAgdHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgIHR5cGUgPT09ICdyYWRpbycgfHxcbiAgICAgIHR5cGUgPT09ICdidXR0b24nXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29tcG9uZW50VmlzaWJsZShjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzID0gY29tcC52aXNpYmlsaXR5O1xuICAgIGlmICghdmlzKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtKCkuZ2V0KHZpcy5kZXBlbmRzT24pO1xuICAgIGNvbnN0IHZhbCA9IGN0cmwgPyBjdHJsLnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAodmlzLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICdlcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsID09PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdub3RFcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsICE9PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoU3RyaW5nKHZpcy52YWx1ZSkpO1xuICAgICAgY2FzZSAnZ3JlYXRlclRoYW4nOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCkgPiBOdW1iZXIodmlzLnZhbHVlKTtcbiAgICAgIGNhc2UgJ2xlc3NUaGFuJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpIDwgTnVtYmVyKHZpcy52YWx1ZSk7XG4gICAgICBjYXNlICdpc05vdEVtcHR5JzpcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09ICcnO1xuICAgICAgY2FzZSAnaXNFbXB0eSc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZi5pbnZhbGlkKSB7XG4gICAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5mb3JtQnVpbGRlci5leHRyYWN0VmFsdWVzKGYpO1xuICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3RlZC5lbWl0KHtcbiAgICAgIGRlZmluaXRpb246IHRoaXMuZGVmaW5pdGlvbigpLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24sIGNvbXA/OiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyh0aGlzLmZvcm0oKSk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdleGVjdXRlLXJlcG9ydCc6XG4gICAgICBjYXNlICdzdWJtaXQnOlxuICAgICAgICB0aGlzLm9uU3VibWl0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgIHRoaXMuZm9ybSgpLnJlc2V0KHRoaXMuaW5pdGlhbFZhbHVlcygpKTtcbiAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZC5lbWl0KHsgZGVmaW5pdGlvbjogdGhpcy5kZWZpbml0aW9uKCkgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdleHBvcnQnOiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IChhY3Rpb24ucGFyYW1zPy5bJ2Zvcm1hdCddIGFzIHN0cmluZykgfHwgJ2V4Y2VsJztcbiAgICAgICAgY29uc3QgZGVmYXVsdE5hbWUgPSB0aGlzLmRlZmluaXRpb24oKS5uYW1lXG4gICAgICAgICAgPyB0aGlzLmRlZmluaXRpb24oKS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTlfLV0vZ2ksICdfJylcbiAgICAgICAgICA6ICdyZXBvcnQnO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IChhY3Rpb24ucGFyYW1zPy5bJ2ZpbGVOYW1lJ10gYXMgc3RyaW5nKSB8fCBgJHtkZWZhdWx0TmFtZX1fJHtEYXRlLm5vdygpfWA7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VsdERhdGEoKTtcblxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5leHBvcnRTZXJ2aWNlKSB7XG4gICAgICAgICAgY29uc3QgZm10ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGZtdCA9PT0gJ2NzdicpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRDc3YoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uY3N2YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm10ID09PSAnZXhjZWwnIHx8IGZtdCA9PT0gJ3hsc3gnIHx8IGZtdCA9PT0gJ3hscycpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRFeGNlbChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0SHRtbChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke2ZpbGVOYW1lfS5odG1sYCxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGVmaW5pdGlvbigpPy5uYW1lIHx8ICdSZXBvcnQgRXhwb3J0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm10ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRKc29uKGRhdGEsIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke2ZpbGVOYW1lfS5qc29uYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwb3J0UmVxdWVzdGVkLmVtaXQoe1xuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAncHJpbnQtcmVwb3J0Jzoge1xuICAgICAgICBjb25zdCBycHRGaWxlTmFtZSA9IChhY3Rpb24ucGFyYW1zPy5bJ3JwdEZpbGVOYW1lJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgICAgICAgY29uc3QgZXhwb3J0VHlwZSA9IChhY3Rpb24ucGFyYW1zPy5bJ2V4cG9ydFR5cGUnXSBhcyBzdHJpbmcpIHx8ICdwZGYnO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bHREYXRhKCk7XG5cbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZXhwb3J0U2VydmljZSAmJiAhcnB0RmlsZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UucHJpbnRSZXBvcnQoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5kZWZpbml0aW9uKCk/Lm5hbWUgfHwgJ1JlcG9ydCBQcmludCBQcmV2aWV3JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJpbnRSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICAgICAgcnB0RmlsZU5hbWUsXG4gICAgICAgICAgZXhwb3J0VHlwZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ25hdmlnYXRlJzoge1xuICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSAoYWN0aW9uLnBhcmFtcz8uWyd0YXJnZXRVcmwnXSBhcyBzdHJpbmcpIHx8ICcnO1xuICAgICAgICBjb25zdCBvcGVuTmV3VGFiID0gYWN0aW9uLnBhcmFtcz8uWydvcGVuTmV3VGFiJ10gPT09IHRydWU7XG5cbiAgICAgICAgaWYgKHRhcmdldFVybCkge1xuICAgICAgICAgIGlmIChvcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRhcmdldFVybCwgb3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlcikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldFVybF0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY3VzdG9tLWV2ZW50JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb21wKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21BY3Rpb25UcmlnZ2VyZWQuZW1pdCh7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uR3JpZFJvd0NsaWNrKGV2ZW50OiB7XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb2x1bW4/OiBHcmlkQ29sdW1uRGVmaW5pdGlvbjtcbiAgICBldmVudD86IE1vdXNlRXZlbnQ7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5kZWZpbml0aW9uKCkuZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50LmNvbHVtbj8uYWN0aW9uID8/IGdyaWQucm93Q2xpY2tBY3Rpb24gPz8gZ3JpZC5vcHRpb25zPy5yb3dDbGlja0FjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyh0aGlzLmZvcm0oKSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgbWFwcGVkUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChhY3Rpb24ucGFyYW1ldGVyTWFwcGluZyAmJiBPYmplY3Qua2V5cyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBbdGFyZ2V0S2V5LCBleHByXSBvZiBPYmplY3QuZW50cmllcyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykpIHtcbiAgICAgICAgbGV0IHZhbDogdW5rbm93biA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGV4cHIuc3RhcnRzV2l0aCgncm93LicpKSB7XG4gICAgICAgICAgY29uc3Qgcm93RmllbGQgPSBleHByLnNsaWNlKDQpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgcm93RmllbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cHIuc3RhcnRzV2l0aCgnZm9ybS4nKSB8fCBleHByLnN0YXJ0c1dpdGgoJ2Zvcm1WYWx1ZXMuJykpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBleHByLnJlcGxhY2UoL15mb3JtXFwufF5mb3JtVmFsdWVzXFwuLywgJycpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGZvcm1WYWx1ZXMsIGZvcm1GaWVsZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwci5zdGFydHNXaXRoKCdzZXNzaW9uLicpKSB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbkZpZWxkID0gZXhwci5zbGljZSg4KTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShzZXNzaW9uLCBzZXNzaW9uRmllbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdCByb3cgZmllbGQgb3IgbGl0ZXJhbFxuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgZXhwcikgPz8gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBtYXBwZWRQYXJhbWV0ZXJzW3RhcmdldEtleV0gPSB2YWwgIT09IHVuZGVmaW5lZCA/IHZhbCA6ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBjb3B5IGVudGlyZSByb3cgZGF0YVxuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwZWRQYXJhbWV0ZXJzLCBldmVudC5yb3cpO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ25hdmlnYXRlJyAmJiBhY3Rpb24udGFyZ2V0VXJsKSB7XG4gICAgICBsZXQgdGFyZ2V0VXJsID0gYWN0aW9uLnRhcmdldFVybDtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50LnJvdykpIHtcbiAgICAgICAgdGFyZ2V0VXJsID0gdGFyZ2V0VXJsLnJlcGxhY2UoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXFxcXHtcXFxce1xcXFxzKig/OnJvd1xcXFwuKT8ke2t9XFxcXHMqXFxcXH1cXFxcfWAsICdnaScpLFxuICAgICAgICAgIFN0cmluZyh2ID8/ICcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5vcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odGFyZ2V0VXJsLCBhY3Rpb24ub3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucm91dGVyKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFyZ2V0VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucm93QWN0aW9uVHJpZ2dlcmVkLmVtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgcm93OiBldmVudC5yb3csXG4gICAgICBwYXJhbWV0ZXJzOiBtYXBwZWRQYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgb25HcmlkU2VsZWN0aW9uQ2hhbmdlKHJvd3M6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChyb3dzKTtcbiAgfVxufVxuIl19
@@ -1,15 +1,28 @@
1
+ import { BWAYS_REPORT_ENDPOINTS } from '../../data-access/adapters/endpoint-tokens';
2
+ import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
1
3
  import { inject, Injectable } from '@angular/core';
2
- import { throwError } from 'rxjs';
4
+ import { throwError, map, timeout, take } from 'rxjs';
3
5
  import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source.contract';
4
6
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
5
7
  import { ReportApiExecutionService } from '../../core/services/report-api-execution.service';
6
- import { findMissingCanvasFields, resolveExecutionDataSource, resolveParameterMappings, } from '../../core/utils/report-parameter.util';
8
+ import { findMissingCanvasFields, normalizeParameterNames, resolveCanvasFieldValue, resolveExecutionDataSource, resolveParameterMappings, } from '../../core/utils/report-parameter.util';
7
9
  import * as i0 from "@angular/core";
8
10
  /**
9
11
  * Runs a report's result query. Shared by the Live Runtime, the designer's
10
12
  * Live Preview and the designer canvas so all three behave identically.
11
13
  */
12
14
  export class ReportExecutionService {
15
+ config = inject(REPORTING_CONFIG, { optional: true });
16
+ endpoints = inject(BWAYS_REPORT_ENDPOINTS, { optional: true });
17
+ guard(source) {
18
+ const context = () => JSON.stringify([this.session?.getCurrentSessionContext() ?? {}, this.endpoints ? { ...this.endpoints } : null]);
19
+ const captured = context();
20
+ return source.pipe(take(1), timeout({ first: this.config?.executionTimeoutMs ?? this.config?.lookupTimeoutMs ?? 300000 }), map(value => {
21
+ if (captured !== context())
22
+ throw new Error('Reporting context changed. Please run the report again.');
23
+ return value;
24
+ }));
25
+ }
13
26
  adapter = inject(ReportDataSourceAdapter, { optional: true });
14
27
  session = inject(ReportSessionContextService, { optional: true });
15
28
  apiExecutionService = inject(ReportApiExecutionService, { optional: true });
@@ -24,7 +37,13 @@ export class ReportExecutionService {
24
37
  return throwError(() => new Error('No data source configured. Select the Run Report button and choose a stored procedure in its Report Data section.'));
25
38
  }
26
39
  const session = this.session?.getCurrentSessionContext() ?? {};
27
- const resolved = resolveParameterMappings(ds.parameterMappings, session, formValues);
40
+ let resolved;
41
+ try {
42
+ resolved = resolveParameterMappings(ds.parameterMappings, session, formValues);
43
+ }
44
+ catch (error) {
45
+ return throwError(() => error);
46
+ }
28
47
  // Expand compound objects (e.g. dateRange: { from, to }) into top-level parameters
29
48
  const flattenedFormValues = { ...formValues };
30
49
  for (const [k, v] of Object.entries(formValues)) {
@@ -42,26 +61,51 @@ export class ReportExecutionService {
42
61
  }
43
62
  }
44
63
  }
45
- const params = { ...flattenedFormValues, ...resolved };
46
64
  // Delegate to ReportApiExecutionService if data source is an API endpoint
47
65
  const isApiSource = ds.type === 'api' ||
48
66
  ds.endpoint.startsWith('http://') ||
49
67
  ds.endpoint.startsWith('https://') ||
50
68
  (ds.type !== 'table' && ds.type !== 'view' && ds.type !== 'stored_procedure' && ds.endpoint.startsWith('/'));
51
69
  if (isApiSource && this.apiExecutionService) {
52
- return this.apiExecutionService.executeApi({
70
+ return this.guard(this.apiExecutionService.executeApi({
53
71
  endpoint: ds.endpoint,
54
72
  method: ds.method,
55
73
  dataPath: ds.dataPath,
56
74
  headers: ds.headers,
57
75
  useProxy: ds.useProxy,
58
76
  bodyTemplate: ds.bodyTemplate,
59
- }, flattenedFormValues, resolved);
77
+ }, flattenedFormValues, resolved));
60
78
  }
61
79
  if (!this.adapter) {
62
80
  return throwError(() => new Error('No ReportDataSourceAdapter provided to execute the data source.'));
63
81
  }
64
- return this.adapter.execute({ ...ds, name: ds.name || ds.endpoint, type: ds.type ?? 'stored_procedure' }, params);
82
+ const isProcedure = ds.method === 'STORED_PROCEDURE' || ds.type === 'stored_procedure' || ds.type === 'procedure' || !ds.type;
83
+ let params = { ...flattenedFormValues, ...resolved };
84
+ if (isProcedure) {
85
+ // Form controls are expression inputs, never an implicit SQL argument list.
86
+ const declared = {};
87
+ const mappedNames = new Set(Object.keys(resolved).map(key => key.toLowerCase()));
88
+ const keys = ds.parameterKeys ?? (ds.parameterMappings === undefined ? [
89
+ ...def.parameters.map(parameter => parameter.key),
90
+ ...def.components.flatMap(component => component.binding?.parameterKey ? [component.binding.parameterKey] : []),
91
+ ] : []);
92
+ for (const key of keys) {
93
+ if (mappedNames.has(key.replace(/^@+/, '').toLowerCase()))
94
+ continue;
95
+ const control = def.components.find(component => component.binding?.parameterKey === key);
96
+ const parameter = def.parameters.find(item => item.key === key);
97
+ const value = resolveCanvasFieldValue(formValues, control?.key || key) ?? resolveCanvasFieldValue(formValues, key.replace(/^@+/, '')) ?? parameter?.defaultValue;
98
+ if (value !== undefined)
99
+ Object.defineProperty(declared, key, { value, enumerable: true, configurable: true });
100
+ }
101
+ try {
102
+ params = normalizeParameterNames({ ...declared, ...resolved });
103
+ }
104
+ catch (error) {
105
+ return throwError(() => error);
106
+ }
107
+ }
108
+ return this.guard(this.adapter.execute({ ...ds, name: ds.name || ds.endpoint, type: ds.type ?? 'stored_procedure' }, params));
65
109
  }
66
110
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExecutionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
111
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExecutionService, providedIn: 'root' });
@@ -70,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
70
114
  type: Injectable,
71
115
  args: [{ providedIn: 'root' }]
72
116
  }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FDekIsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFaEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixPQUFPLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsT0FBTyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLDhFQUE4RTtJQUM5RSxnQkFBZ0IsQ0FBQyxHQUFxQixFQUFFLFVBQW1DO1FBQ3pFLE1BQU0sRUFBRSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sdUJBQXVCLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FB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QyxRQUFRO2dCQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7YUFDOUIsRUFDRCxtQkFBbUIsRUFDbkIsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3pCLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxFQUM1RSxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7d0dBekVVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRFQsTUFBTTs7NEZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtYXBpLWV4ZWN1dGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGZpbmRNaXNzaW5nQ2FudmFzRmllbGRzLFxuICByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZSxcbiAgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzLFxufSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG5cbi8qKlxuICogUnVucyBhIHJlcG9ydCdzIHJlc3VsdCBxdWVyeS4gU2hhcmVkIGJ5IHRoZSBMaXZlIFJ1bnRpbWUsIHRoZSBkZXNpZ25lcidzXG4gKiBMaXZlIFByZXZpZXcgYW5kIHRoZSBkZXNpZ25lciBjYW52YXMgc28gYWxsIHRocmVlIGJlaGF2ZSBpZGVudGljYWxseS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeGVjdXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogQ2FudmFzIGZpZWxkIGtleXMgdGhlIHVzZXIgc3RpbGwgaGFzIHRvIGZpbGwgYmVmb3JlIHRoZSByZXBvcnQgY2FuIHJ1bi4gKi9cbiAgZ2V0TWlzc2luZ0ZpZWxkcyhkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRzID0gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmKTtcbiAgICByZXR1cm4gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoZHM/LnBhcmFtZXRlck1hcHBpbmdzLCBmb3JtVmFsdWVzKTtcbiAgfVxuXG4gIGV4ZWN1dGUoZGVmOiBSZXBvcnREZWZpbml0aW9uLCBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIGlmICghZHMpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdObyBkYXRhIHNvdXJjZSBjb25maWd1cmVkLiBTZWxlY3QgdGhlIFJ1biBSZXBvcnQgYnV0dG9uIGFuZCBjaG9vc2UgYSBzdG9yZWQgcHJvY2VkdXJlIGluIGl0cyBSZXBvcnQgRGF0YSBzZWN0aW9uLidcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBzZXNzaW9uLCBmb3JtVmFsdWVzKTtcblxuICAgIC8vIEV4cGFuZCBjb21wb3VuZCBvYmplY3RzIChlLmcuIGRhdGVSYW5nZTogeyBmcm9tLCB0byB9KSBpbnRvIHRvcC1sZXZlbCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZmxhdHRlbmVkRm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZvcm1WYWx1ZXMgfTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhmb3JtVmFsdWVzKSkge1xuICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICgnZnJvbScgaW4gb2JqICYmICd0bycgaW4gb2JqKSB7XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV9mcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9X3RvYF0gPSBvYmpbJ3RvJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfUZyb21gXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Ub2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSkgZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1sndG9EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddID0gb2JqWyd0byddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5mbGF0dGVuZWRGb3JtVmFsdWVzLCAuLi5yZXNvbHZlZCB9O1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSBpZiBkYXRhIHNvdXJjZSBpcyBhbiBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCBpc0FwaVNvdXJjZSA9XG4gICAgICBkcy50eXBlID09PSAnYXBpJyB8fFxuICAgICAgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwczovLycpIHx8XG4gICAgICAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJy8nKSk7XG5cbiAgICBpZiAoaXNBcGlTb3VyY2UgJiYgdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlLmV4ZWN1dGVBcGkoXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRwb2ludDogZHMuZW5kcG9pbnQsXG4gICAgICAgICAgbWV0aG9kOiBkcy5tZXRob2QgYXMgYW55LFxuICAgICAgICAgIGRhdGFQYXRoOiBkcy5kYXRhUGF0aCxcbiAgICAgICAgICBoZWFkZXJzOiBkcy5oZWFkZXJzLFxuICAgICAgICAgIHVzZVByb3h5OiBkcy51c2VQcm94eSxcbiAgICAgICAgICBib2R5VGVtcGxhdGU6IGRzLmJvZHlUZW1wbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlcyxcbiAgICAgICAgcmVzb2x2ZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgcHJvdmlkZWQgdG8gZXhlY3V0ZSB0aGUgZGF0YSBzb3VyY2UuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZXhlY3V0ZShcbiAgICAgIHsgLi4uZHMsIG5hbWU6IGRzLm5hbWUgfHwgZHMuZW5kcG9pbnQsIHR5cGU6IGRzLnR5cGUgPz8gJ3N0b3JlZF9wcm9jZWR1cmUnIH0sXG4gICAgICBwYXJhbXNcbiAgICApO1xuICB9XG59XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsMEJBQTBCLEVBQzFCLHdCQUF3QixHQUN6QixNQUFNLHdDQUF3QyxDQUFDOztBQUVoRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsS0FBSyxDQUFJLE1BQXFCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMs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LEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLEVBQzVFLE1BQU0sQ0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTFHVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG1hcCwgdGltZW91dCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZmluZE1pc3NpbmdDYW52YXNGaWVsZHMsXG4gIG5vcm1hbGl6ZVBhcmFtZXRlck5hbWVzLFxuICByZXNvbHZlQ2FudmFzRmllbGRWYWx1ZSxcbiAgcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UsXG4gIHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyxcbn0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuXG4vKipcbiAqIFJ1bnMgYSByZXBvcnQncyByZXN1bHQgcXVlcnkuIFNoYXJlZCBieSB0aGUgTGl2ZSBSdW50aW1lLCB0aGUgZGVzaWduZXInc1xuICogTGl2ZSBQcmV2aWV3IGFuZCB0aGUgZGVzaWduZXIgY2FudmFzIHNvIGFsbCB0aHJlZSBiZWhhdmUgaWRlbnRpY2FsbHkuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RXhlY3V0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgZ3VhcmQ8VD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgY29udGV4dCA9ICgpID0+IEpTT04uc3RyaW5naWZ5KFt0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9LCB0aGlzLmVuZHBvaW50cyA/IHsgLi4udGhpcy5lbmRwb2ludHMgfSA6IG51bGxdKTtcbiAgICBjb25zdCBjYXB0dXJlZCA9IGNvbnRleHQoKTtcbiAgICByZXR1cm4gc291cmNlLnBpcGUodGFrZSgxKSwgdGltZW91dCh7IGZpcnN0OiB0aGlzLmNvbmZpZz8uZXhlY3V0aW9uVGltZW91dE1zID8/IHRoaXMuY29uZmlnPy5sb29rdXBUaW1lb3V0TXMgPz8gMzAwMDAwIH0pLCBtYXAodmFsdWUgPT4ge1xuICAgICAgaWYgKGNhcHR1cmVkICE9PSBjb250ZXh0KCkpIHRocm93IG5ldyBFcnJvcignUmVwb3J0aW5nIGNvbnRleHQgY2hhbmdlZC4gUGxlYXNlIHJ1biB0aGUgcmVwb3J0IGFnYWluLicpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbiA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpRXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBDYW52YXMgZmllbGQga2V5cyB0aGUgdXNlciBzdGlsbCBoYXMgdG8gZmlsbCBiZWZvcmUgdGhlIHJlcG9ydCBjYW4gcnVuLiAqL1xuICBnZXRNaXNzaW5nRmllbGRzKGRlZjogUmVwb3J0RGVmaW5pdGlvbiwgZm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIHJldHVybiBmaW5kTWlzc2luZ0NhbnZhc0ZpZWxkcyhkcz8ucGFyYW1ldGVyTWFwcGluZ3MsIGZvcm1WYWx1ZXMpO1xuICB9XG5cbiAgZXhlY3V0ZShkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBjb25zdCBkcyA9IHJlc29sdmVFeGVjdXRpb25EYXRhU291cmNlKGRlZik7XG4gICAgaWYgKCFkcykge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ05vIGRhdGEgc291cmNlIGNvbmZpZ3VyZWQuIFNlbGVjdCB0aGUgUnVuIFJlcG9ydCBidXR0b24gYW5kIGNob29zZSBhIHN0b3JlZCBwcm9jZWR1cmUgaW4gaXRzIFJlcG9ydCBEYXRhIHNlY3Rpb24uJ1xuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbj8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgbGV0IHJlc29sdmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB0cnkgeyByZXNvbHZlZCA9IHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhkcy5wYXJhbWV0ZXJNYXBwaW5ncywgc2Vzc2lvbiwgZm9ybVZhbHVlcyk7IH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpOyB9XG5cbiAgICAvLyBFeHBhbmQgY29tcG91bmQgb2JqZWN0cyAoZS5nLiBkYXRlUmFuZ2U6IHsgZnJvbSwgdG8gfSkgaW50byB0b3AtbGV2ZWwgcGFyYW1ldGVyc1xuICAgIGNvbnN0IGZsYXR0ZW5lZEZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5mb3JtVmFsdWVzIH07XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlcykpIHtcbiAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICBjb25zdCBvYmogPSB2IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBpZiAoJ2Zyb20nIGluIG9iaiAmJiAndG8nIGluIG9iaikge1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31fZnJvbWBdID0gb2JqWydmcm9tJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV90b2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Gcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9VG9gXSA9IG9ialsndG8nXTtcbiAgICAgICAgICBpZiAoIWZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ2Zyb21EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ2Zyb21EYXRlJ10gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBpZiAoIWZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddKSBmbGF0dGVuZWRGb3JtVmFsdWVzWyd0b0RhdGUnXSA9IG9ialsndG8nXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAvLyBEZWxlZ2F0ZSB0byBSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlIGlmIGRhdGEgc291cmNlIGlzIGFuIEFQSSBlbmRwb2ludFxuICAgIGNvbnN0IGlzQXBpU291cmNlID1cbiAgICAgIGRzLnR5cGUgPT09ICdhcGknIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHxcbiAgICAgIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgfHxcbiAgICAgIChkcy50eXBlICE9PSAndGFibGUnICYmIGRzLnR5cGUgIT09ICd2aWV3JyAmJiBkcy50eXBlICE9PSAnc3RvcmVkX3Byb2NlZHVyZScgJiYgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpKTtcblxuICAgIGlmIChpc0FwaVNvdXJjZSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmd1YXJkKHRoaXMuYXBpRXhlY3V0aW9uU2VydmljZS5leGVjdXRlQXBpKFxuICAgICAgICB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGRzLmVuZHBvaW50LFxuICAgICAgICAgIG1ldGhvZDogZHMubWV0aG9kIGFzIGFueSxcbiAgICAgICAgICBkYXRhUGF0aDogZHMuZGF0YVBhdGgsXG4gICAgICAgICAgaGVhZGVyczogZHMuaGVhZGVycyxcbiAgICAgICAgICB1c2VQcm94eTogZHMudXNlUHJveHksXG4gICAgICAgICAgYm9keVRlbXBsYXRlOiBkcy5ib2R5VGVtcGxhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXMsXG4gICAgICAgIHJlc29sdmVkXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyBSZXBvcnREYXRhU291cmNlQWRhcHRlciBwcm92aWRlZCB0byBleGVjdXRlIHRoZSBkYXRhIHNvdXJjZS4nKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNQcm9jZWR1cmUgPSBkcy5tZXRob2QgPT09ICdTVE9SRURfUFJPQ0VEVVJFJyB8fCBkcy50eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScgfHwgZHMudHlwZSA9PT0gJ3Byb2NlZHVyZScgfHwgIWRzLnR5cGU7XG4gICAgbGV0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZsYXR0ZW5lZEZvcm1WYWx1ZXMsIC4uLnJlc29sdmVkIH07XG4gICAgaWYgKGlzUHJvY2VkdXJlKSB7XG4gICAgICAvLyBGb3JtIGNvbnRyb2xzIGFyZSBleHByZXNzaW9uIGlucHV0cywgbmV2ZXIgYW4gaW1wbGljaXQgU1FMIGFyZ3VtZW50IGxpc3QuXG4gICAgICBjb25zdCBkZWNsYXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGNvbnN0IG1hcHBlZE5hbWVzID0gbmV3IFNldChPYmplY3Qua2V5cyhyZXNvbHZlZCkubWFwKGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgY29uc3Qga2V5cyA9IGRzLnBhcmFtZXRlcktleXMgPz8gKGRzLnBhcmFtZXRlck1hcHBpbmdzID09PSB1bmRlZmluZWQgPyBbXG4gICAgICAgIC4uLmRlZi5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLmtleSksXG4gICAgICAgIC4uLmRlZi5jb21wb25lbnRzLmZsYXRNYXAoY29tcG9uZW50ID0+IGNvbXBvbmVudC5iaW5kaW5nPy5wYXJhbWV0ZXJLZXkgPyBbY29tcG9uZW50LmJpbmRpbmcucGFyYW1ldGVyS2V5XSA6IFtdKSxcbiAgICAgIF0gOiBbXSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChtYXBwZWROYW1lcy5oYXMoa2V5LnJlcGxhY2UoL15AKy8sICcnKS50b0xvd2VyQ2FzZSgpKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZWYuY29tcG9uZW50cy5maW5kKGNvbXBvbmVudCA9PiBjb21wb25lbnQuYmluZGluZz8ucGFyYW1ldGVyS2V5ID09PSBrZXkpO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBkZWYucGFyYW1ldGVycy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywgY29udHJvbD8ua2V5IHx8IGtleSkgPz8gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywga2V5LnJlcGxhY2UoL15AKy8sICcnKSkgPz8gcGFyYW1ldGVyPy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVjbGFyZWQsIGtleSwgeyB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgdHJ5IHsgcGFyYW1zID0gbm9ybWFsaXplUGFyYW1ldGVyTmFtZXMoeyAuLi5kZWNsYXJlZCwgLi4ucmVzb2x2ZWQgfSk7IH1cbiAgICAgIGNhdGNoIChlcnJvcikgeyByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ndWFyZCh0aGlzLmFkYXB0ZXIuZXhlY3V0ZShcbiAgICAgIHsgLi4uZHMsIG5hbWU6IGRzLm5hbWUgfHwgZHMuZW5kcG9pbnQsIHR5cGU6IGRzLnR5cGUgPz8gJ3N0b3JlZF9wcm9jZWR1cmUnIH0sXG4gICAgICBwYXJhbXNcbiAgICApKTtcbiAgfVxufVxuIl19