bways-report 0.1.9 → 0.2.0

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 (93) hide show
  1. package/README.md +463 -316
  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/services/report-api-execution.service.mjs +33 -11
  5. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  6. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  7. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  8. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  9. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  10. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +8 -1
  11. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +5 -2
  12. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  13. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  14. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  15. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  16. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  17. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -50
  18. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  19. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  20. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  22. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  23. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  24. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  25. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  26. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +50 -40
  27. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -8
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +9 -4
  31. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  32. package/esm2022/lib/features/designer/designer.component.mjs +100 -67
  33. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  34. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  35. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  36. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  37. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  38. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  39. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  40. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  41. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  42. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  43. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  44. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  45. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  46. package/esm2022/lib/features/runtime/report-execution.service.mjs +18 -5
  47. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +4 -2
  48. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  49. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  50. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  51. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  52. package/esm2022/lib/provide-reporting.mjs +9 -29
  53. package/fesm2022/bways-report.mjs +1789 -1041
  54. package/fesm2022/bways-report.mjs.map +1 -1
  55. package/lib/core/config/bways-report-config.d.ts +14 -5
  56. package/lib/core/models/report-datasource.model.d.ts +5 -0
  57. package/lib/core/services/report-session-context.service.d.ts +9 -0
  58. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  59. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  60. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  61. package/lib/core/utils/report-request-scope.d.ts +14 -0
  62. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  63. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  64. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  65. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  66. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  67. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  68. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  69. package/lib/data-access/adapters/index.d.ts +1 -1
  70. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  71. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  72. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  73. package/lib/data-access/contracts/index.d.ts +1 -0
  74. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  75. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  76. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  77. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  78. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  79. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  80. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  81. package/lib/features/designer/designer.component.d.ts +15 -2
  82. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  83. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  84. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  85. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  86. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  87. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  88. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  89. package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
  90. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  91. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  93. package/package.json +2 -1
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { inject, Injectable } from '@angular/core';
8
8
  import { HttpClient, HttpHeaders } from '@angular/common/http';
9
- import { of } from 'rxjs';
9
+ import { of, throwError } from 'rxjs';
10
10
  import { catchError, map } from 'rxjs/operators';
11
11
  import { MasterDataProvider, } from '../contracts/master-data.provider';
12
12
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
@@ -18,6 +18,9 @@ export class EndpointMasterDataAdapter extends MasterDataProvider {
18
18
  endpoints = inject(BWAYS_REPORT_ENDPOINTS);
19
19
  sessionService = inject(ReportSessionContextService, { optional: true });
20
20
  getMasterData(masterName, options) {
21
+ if (!this.endpoints.executeEndpoint) {
22
+ return throwError(() => new Error('[bways-report] No executeEndpoint configured.'));
23
+ }
21
24
  const session = this.sessionService?.sessionContext() ?? {};
22
25
  let headers = new HttpHeaders();
23
26
  if (session['companyId'] !== undefined && session['companyId'] !== null) {
@@ -54,4 +57,4 @@ export class EndpointMasterDataAdapter extends MasterDataProvider {
54
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointMasterDataAdapter, decorators: [{
55
58
  type: Injectable
56
59
  }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUdMLGtCQUFrQixHQUNuQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGtCQUFrQjtJQUM5QyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUYsYUFBYSxDQUNYLFVBQWtCLEVBQ2xCLE9BQTJCO1FBRTNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRTVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxPQUFnQjtZQUN0QixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUU7WUFDakMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksR0FBRztTQUMzQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3pCLGtEQUFrRDtnQkFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQW9CLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzt3R0E1Q1UseUJBQXlCOzRHQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIG1hc3RlciBkYXRhIGFkYXB0ZXIuXG4gKlxuICogUmV1c2VzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCB0byBmZXRjaCBtYXN0ZXIvbG9va3VwIGRhdGEuXG4gKiBUaGUgbWFzdGVyIGRhdGEgbmFtZSBpcyB0cmVhdGVkIGFzIGEgdGFibGUgbmFtZS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIE1hc3RlckRhdGFJdGVtLFxuICBNYXN0ZXJEYXRhT3B0aW9ucyxcbiAgTWFzdGVyRGF0YVByb3ZpZGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdFJvd0FycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciBleHRlbmRzIE1hc3RlckRhdGFQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGdldE1hc3RlckRhdGEoXG4gICAgbWFzdGVyTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXN0ZXJEYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE1hc3RlckRhdGFJdGVtW10+IHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgaWYgKHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1Db21wYW55LUlkJywgU3RyaW5nKHNlc3Npb25bJ2NvbXBhbnlJZCddKSk7XG4gICAgfVxuICAgIGlmIChzZXNzaW9uWydicmFuY2hJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUJyYW5jaC1JZCcsIFN0cmluZyhzZXNzaW9uWydicmFuY2hJZCddKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGtpbmQ6ICd0YWJsZScgYXMgY29uc3QsXG4gICAgICBuYW1lOiBtYXN0ZXJOYW1lLFxuICAgICAgc2NoZW1hOiAnZGJvJyxcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnM/LmZpbHRlciA/PyB7fSxcbiAgICAgIHRvcDogb3B0aW9ucz8ubGltaXQgPz8gNTAwLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx1bmtub3duPih0aGlzLmVuZHBvaW50cy5leGVjdXRlRW5kcG9pbnQsIHBheWxvYWQsIHsgaGVhZGVycyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByb3dzID0gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcm93cy5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgdmFsdWUvbGFiZWwgZnJvbSBjb21tb24gcGF0dGVybnNcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcj8uaWQgPz8gcj8udmFsdWUgPz8gcj8uY29kZSA/PyBPYmplY3QudmFsdWVzKHIgPz8ge30pWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByPy5uYW1lID8/IHI/LmxhYmVsID8/IHI/LnRpdGxlID8/IHI/LmRlc2NyaXB0aW9uID8/IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgbGFiZWwsIC4uLnIgfSBhcyBNYXN0ZXJEYXRhSXRlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW0VuZHBvaW50TWFzdGVyRGF0YUFkYXB0ZXJdIEZhaWxlZCB0byBmZXRjaCBtYXN0ZXIgZGF0YSBcIiR7bWFzdGVyTmFtZX1cIjpgLCBlcnIpO1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFHTCxrQkFBa0IsR0FDbkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRzNELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFDOUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDM0MsY0FBYyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTFGLGFBQWEsQ0FDWCxVQUFrQixFQUNsQixPQUEyQjtRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRTVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxPQUFnQjtZQUN0QixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUU7WUFDakMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksR0FBRztTQUMzQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBVSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3pCLGtEQUFrRDtnQkFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQW9CLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLDREQUE0RCxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzt3R0EvQ1UseUJBQXlCOzRHQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIG1hc3RlciBkYXRhIGFkYXB0ZXIuXG4gKlxuICogUmV1c2VzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCB0byBmZXRjaCBtYXN0ZXIvbG9va3VwIGRhdGEuXG4gKiBUaGUgbWFzdGVyIGRhdGEgbmFtZSBpcyB0cmVhdGVkIGFzIGEgdGFibGUgbmFtZS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIE1hc3RlckRhdGFJdGVtLFxuICBNYXN0ZXJEYXRhT3B0aW9ucyxcbiAgTWFzdGVyRGF0YVByb3ZpZGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdFJvd0FycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciBleHRlbmRzIE1hc3RlckRhdGFQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGdldE1hc3RlckRhdGEoXG4gICAgbWFzdGVyTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYXN0ZXJEYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE1hc3RlckRhdGFJdGVtW10+IHtcbiAgICBpZiAoIXRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyBleGVjdXRlRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICB9XG4gICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAga2luZDogJ3RhYmxlJyBhcyBjb25zdCxcbiAgICAgIG5hbWU6IG1hc3Rlck5hbWUsXG4gICAgICBzY2hlbWE6ICdkYm8nLFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucz8uZmlsdGVyID8/IHt9LFxuICAgICAgdG9wOiBvcHRpb25zPy5saW1pdCA/PyA1MDAsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHVua25vd24+KHRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCwgcGF5bG9hZCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd3MgPSBleHRyYWN0Um93QXJyYXkocmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiByb3dzLm1hcCgocjogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gZXh0cmFjdCB2YWx1ZS9sYWJlbCBmcm9tIGNvbW1vbiBwYXR0ZXJuc1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByPy5pZCA/PyByPy52YWx1ZSA/PyByPy5jb2RlID8/IE9iamVjdC52YWx1ZXMociA/PyB7fSlbMF07XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHI/Lm5hbWUgPz8gcj8ubGFiZWwgPz8gcj8udGl0bGUgPz8gcj8uZGVzY3JpcHRpb24gPz8gU3RyaW5nKHZhbHVlID8/ICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBsYWJlbCwgLi4uciB9IGFzIE1hc3RlckRhdGFJdGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBbRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlcl0gRmFpbGVkIHRvIGZldGNoIG1hc3RlciBkYXRhIFwiJHttYXN0ZXJOYW1lfVwiOmAsIGVycik7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,8 +1,12 @@
1
+ import { reportIdAvailability, reportIdInspection } from './report-id-availability';
2
+ import { resolveReportsEndpoint } from '../../core/utils/report-endpoint.util';
3
+ import { ReportSessionContextService } from '../../core/services/report-session-context.service';
4
+ import { reportSessionHeaders } from './session-headers';
1
5
  /**
2
6
  * Endpoint-based persistence adapter.
3
7
  *
4
8
  * Calls `reportsEndpoint` for CRUD operations on saved report definitions.
5
- * When `reportsEndpoint` is null, falls back to `LocalStorageReportPersistenceAdapter`.
9
+ * When omitted, derives the built-in reports route from the reporting service.
6
10
  */
7
11
  import { inject, Injectable } from '@angular/core';
8
12
  import { HttpClient } from '@angular/common/http';
@@ -12,20 +16,30 @@ import { ReportPersistenceAdapter } from '../contracts/report-persistence.contra
12
16
  import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
13
17
  import * as i0 from "@angular/core";
14
18
  export class EndpointPersistenceAdapter extends ReportPersistenceAdapter {
19
+ session = inject(ReportSessionContextService, { optional: true });
20
+ get headers() { return reportSessionHeaders(this.session?.getCurrentSessionContext() ?? {}); }
15
21
  http = inject(HttpClient);
16
22
  endpoints = inject(BWAYS_REPORT_ENDPOINTS);
23
+ checkId(reportId) {
24
+ const url = resolveReportsEndpoint(this.endpoints) + '/' + encodeURIComponent(reportId) + '/availability';
25
+ return reportIdAvailability(this.http, url, this.headers, () => super.checkId(reportId));
26
+ }
27
+ inspectId(reportId) {
28
+ const url = resolveReportsEndpoint(this.endpoints) + '/' + encodeURIComponent(reportId) + '/availability';
29
+ return reportIdInspection(this.http, url, this.headers, () => super.inspectId(reportId));
30
+ }
17
31
  load(reportId) {
18
- const url = this.endpoints.reportsEndpoint;
32
+ const url = resolveReportsEndpoint(this.endpoints);
19
33
  if (!url) {
20
34
  return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
21
35
  }
22
- return this.http.get(`${url}/${encodeURIComponent(reportId)}`).pipe(catchError((err) => {
36
+ return this.http.get(`${url}/${encodeURIComponent(reportId)}`, { headers: this.headers }).pipe(catchError((err) => {
23
37
  const msg = err?.error?.message || err?.message || 'Failed to load report';
24
38
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
25
39
  }));
26
40
  }
27
- save(report) {
28
- const url = this.endpoints.reportsEndpoint;
41
+ save(report, options) {
42
+ const url = resolveReportsEndpoint(this.endpoints);
29
43
  if (!url) {
30
44
  return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
31
45
  }
@@ -38,39 +52,41 @@ export class EndpointPersistenceAdapter extends ReportPersistenceAdapter {
38
52
  version: report.version,
39
53
  isPublished: report.isPublished,
40
54
  definition: report,
55
+ ...(options?.createOnly ? { createOnly: true } : {}),
56
+ ...(options?.expectedVersion !== undefined ? { expectedVersion: options.expectedVersion } : {}),
41
57
  };
42
- return this.http.post(url, payload).pipe(catchError((err) => {
58
+ return this.http.post(url, payload, { headers: this.headers }).pipe(catchError((err) => {
43
59
  const msg = err?.error?.message || err?.message || 'Failed to save report';
44
60
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
45
61
  }));
46
62
  }
47
63
  list() {
48
- const url = this.endpoints.reportsEndpoint;
64
+ const url = resolveReportsEndpoint(this.endpoints);
49
65
  if (!url) {
50
66
  return of([]);
51
67
  }
52
- return this.http.get(url).pipe(catchError((err) => {
68
+ return this.http.get(url, { headers: this.headers }).pipe(catchError((err) => {
53
69
  console.warn('[EndpointPersistenceAdapter] Failed to list reports:', err);
54
- return of([]);
70
+ return throwError(() => new Error(err?.error?.message || err?.message || 'Failed to list reports'));
55
71
  }));
56
72
  }
57
73
  delete(reportId) {
58
- const url = this.endpoints.reportsEndpoint;
74
+ const url = resolveReportsEndpoint(this.endpoints);
59
75
  if (!url) {
60
76
  return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
61
77
  }
62
- return this.http.delete(`${url}/${encodeURIComponent(reportId)}`).pipe(catchError((err) => {
78
+ return this.http.delete(`${url}/${encodeURIComponent(reportId)}`, { headers: this.headers }).pipe(catchError((err) => {
63
79
  const msg = err?.error?.message || err?.message || 'Failed to delete report';
64
80
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
65
81
  }));
66
82
  }
67
83
  publish(reportId, version) {
68
- const url = this.endpoints.reportsEndpoint;
84
+ const url = resolveReportsEndpoint(this.endpoints);
69
85
  if (!url) {
70
86
  return throwError(() => new Error('[bways-report] No reportsEndpoint configured.'));
71
87
  }
72
88
  return this.http
73
- .post(`${url}/${encodeURIComponent(reportId)}/publish`, { version })
89
+ .post(`${url}/${encodeURIComponent(reportId)}/publish`, { version }, { headers: this.headers })
74
90
  .pipe(catchError((err) => {
75
91
  const msg = err?.error?.message || err?.message || 'Failed to publish report';
76
92
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
@@ -82,4 +98,4 @@ export class EndpointPersistenceAdapter extends ReportPersistenceAdapter {
82
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointPersistenceAdapter, decorators: [{
83
99
  type: Injectable
84
100
  }] });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcGVyc2lzdGVuY2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBS2pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUczRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsd0JBQXdCO0lBQ3JELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxRQUFnQjtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW1CLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ25GLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7WUFDM0UsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxNQUF3QjtRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxNQUFNO1lBQ1QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDeEQsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztZQUMzRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFrQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQzdDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0RBQXNELEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBZ0I7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFPLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUkseUJBQXlCLENBQUM7WUFDN0UsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFnQixFQUFFLE9BQWU7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDM0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFPLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN6RSxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQztZQUM5RSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO3dHQS9FVSwwQkFBMEI7NEdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW5kcG9pbnQtYmFzZWQgcGVyc2lzdGVuY2UgYWRhcHRlci5cbiAqXG4gKiBDYWxscyBgcmVwb3J0c0VuZHBvaW50YCBmb3IgQ1JVRCBvcGVyYXRpb25zIG9uIHNhdmVkIHJlcG9ydCBkZWZpbml0aW9ucy5cbiAqIFdoZW4gYHJlcG9ydHNFbmRwb2ludGAgaXMgbnVsbCwgZmFsbHMgYmFjayB0byBgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyYC5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgUmVwb3J0RGVmaW5pdGlvbixcbiAgUmVwb3J0U3VtbWFyeSxcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuXG4gIGxvYWQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydERlZmluaXRpb24+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsb2FkIHJlcG9ydCc7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihBcnJheS5pc0FycmF5KG1zZykgPyBtc2cuam9pbignLCAnKSA6IG1zZykpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2F2ZShyZXBvcnQ6IFJlcG9ydERlZmluaXRpb24pOiBPYnNlcnZhYmxlPFJlcG9ydERlZmluaXRpb24+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5yZXBvcnRzRW5kcG9pbnQ7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gTm8gcmVwb3J0c0VuZHBvaW50IGNvbmZpZ3VyZWQuJykpO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgLi4ucmVwb3J0LFxuICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgIG5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHJlcG9ydC5kZXNjcmlwdGlvbixcbiAgICAgIGNhdGVnb3J5OiByZXBvcnQuY2F0ZWdvcnksXG4gICAgICB2ZXJzaW9uOiByZXBvcnQudmVyc2lvbixcbiAgICAgIGlzUHVibGlzaGVkOiByZXBvcnQuaXNQdWJsaXNoZWQsXG4gICAgICBkZWZpbml0aW9uOiByZXBvcnQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVwb3J0RGVmaW5pdGlvbj4odXJsLCBwYXlsb2FkKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2F2ZSByZXBvcnQnO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxpc3QoKTogT2JzZXJ2YWJsZTxSZXBvcnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmVuZHBvaW50cy5yZXBvcnRzRW5kcG9pbnQ7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydFN1bW1hcnlbXT4odXJsKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyXSBGYWlsZWQgdG8gbGlzdCByZXBvcnRzOicsIGVycik7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBkZWxldGUocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBkZWxldGUgcmVwb3J0JztcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaXNoKHJlcG9ydElkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZW5kcG9pbnRzLnJlcG9ydHNFbmRwb2ludDtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHZvaWQ+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfS9wdWJsaXNoYCwgeyB2ZXJzaW9uIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBwdWJsaXNoIHJlcG9ydCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtcGVyc2lzdGVuY2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQ7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBS2pELE9BQU8sRUFBRSx3QkFBd0IsRUFBcUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHdCQUF3QjtJQUNyRCxPQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkYsSUFBWSxPQUFPLEtBQUssT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFD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LEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFPLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDcEcsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksMEJBQTBCLENBQUM7WUFDOUUsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzt3R0E3RlUsMEJBQTBCOzRHQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXBvcnRJZEF2YWlsYWJpbGl0eSwgcmVwb3J0SWRJbnNwZWN0aW9uIH0gZnJvbSAnLi9yZXBvcnQtaWQtYXZhaWxhYmlsaXR5JztcbmltcG9ydCB7IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1lbmRwb2ludC51dGlsJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IHJlcG9ydFNlc3Npb25IZWFkZXJzIH0gZnJvbSAnLi9zZXNzaW9uLWhlYWRlcnMnO1xuLyoqXG4gKiBFbmRwb2ludC1iYXNlZCBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICpcbiAqIENhbGxzIGByZXBvcnRzRW5kcG9pbnRgIGZvciBDUlVEIG9wZXJhdGlvbnMgb24gc2F2ZWQgcmVwb3J0IGRlZmluaXRpb25zLlxuICogV2hlbiBvbWl0dGVkLCBkZXJpdmVzIHRoZSBidWlsdC1pbiByZXBvcnRzIHJvdXRlIGZyb20gdGhlIHJlcG9ydGluZyBzZXJ2aWNlLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBSZXBvcnREZWZpbml0aW9uLFxuICBSZXBvcnRTdW1tYXJ5LFxufSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIFJlcG9ydFNhdmVPcHRpb25zLCBSZXBvcnRJZFN0YXR1cyB9IGZyb20gJy4uL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4vZW5kcG9pbnQtdG9rZW5zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyIGV4dGVuZHMgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBnZXQgaGVhZGVycygpIHsgcmV0dXJuIHJlcG9ydFNlc3Npb25IZWFkZXJzKHRoaXMuc2Vzc2lvbj8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge30pOyB9XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG5cbiAgb3ZlcnJpZGUgY2hlY2tJZChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3QgdXJsID0gcmVzb2x2ZVJlcG9ydHNFbmRwb2ludCh0aGlzLmVuZHBvaW50cykgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpICsgJy9hdmFpbGFiaWxpdHknO1xuICAgIHJldHVybiByZXBvcnRJZEF2YWlsYWJpbGl0eSh0aGlzLmh0dHAsIHVybCwgdGhpcy5oZWFkZXJzLCAoKSA9PiBzdXBlci5jaGVja0lkKHJlcG9ydElkKSk7XG4gIH1cblxuICBvdmVycmlkZSBpbnNwZWN0SWQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVwb3J0SWRTdGF0dXM+IHtcbiAgICBjb25zdCB1cmwgPSByZXNvbHZlUmVwb3J0c0VuZHBvaW50KHRoaXMuZW5kcG9pbnRzKSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChyZXBvcnRJZCkgKyAnL2F2YWlsYWJpbGl0eSc7XG4gICAgcmV0dXJuIHJlcG9ydElkSW5zcGVjdGlvbih0aGlzLmh0dHAsIHVybCwgdGhpcy5oZWFkZXJzLCAoKSA9PiBzdXBlci5pbnNwZWN0SWQocmVwb3J0SWQpKTtcbiAgfVxuXG4gIGxvYWQocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbj4ge1xuICAgIGNvbnN0IHVybCA9IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQodGhpcy5lbmRwb2ludHMpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1tid2F5cy1yZXBvcnRdIE5vIHJlcG9ydHNFbmRwb2ludCBjb25maWd1cmVkLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UmVwb3J0RGVmaW5pdGlvbj4oYCR7dXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChyZXBvcnRJZCl9YCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxvYWQgcmVwb3J0JztcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzYXZlKHJlcG9ydDogUmVwb3J0RGVmaW5pdGlvbiwgb3B0aW9ucz86IFJlcG9ydFNhdmVPcHRpb25zKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uPiB7XG4gICAgY29uc3QgdXJsID0gcmVzb2x2ZVJlcG9ydHNFbmRwb2ludCh0aGlzLmVuZHBvaW50cyk7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gTm8gcmVwb3J0c0VuZHBvaW50IGNvbmZpZ3VyZWQuJykpO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgLi4ucmVwb3J0LFxuICAgICAgaWQ6IHJlcG9ydC5pZCxcbiAgICAgIG5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHJlcG9ydC5kZXNjcmlwdGlvbixcbiAgICAgIGNhdGVnb3J5OiByZXBvcnQuY2F0ZWdvcnksXG4gICAgICB2ZXJzaW9uOiByZXBvcnQudmVyc2lvbixcbiAgICAgIGlzUHVibGlzaGVkOiByZXBvcnQuaXNQdWJsaXNoZWQsXG4gICAgICBkZWZpbml0aW9uOiByZXBvcnQsXG4gICAgICAuLi4ob3B0aW9ucz8uY3JlYXRlT25seSA/IHsgY3JlYXRlT25seTogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnM/LmV4cGVjdGVkVmVyc2lvbiAhPT0gdW5kZWZpbmVkID8geyBleHBlY3RlZFZlcnNpb246IG9wdGlvbnMuZXhwZWN0ZWRWZXJzaW9uIH0gOiB7fSksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVwb3J0RGVmaW5pdGlvbj4odXJsLCBwYXlsb2FkLCB7IGhlYWRlcnM6IHRoaXMuaGVhZGVycyB9KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2F2ZSByZXBvcnQnO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxpc3QoKTogT2JzZXJ2YWJsZTxSZXBvcnRTdW1tYXJ5W10+IHtcbiAgICBjb25zdCB1cmwgPSByZXNvbHZlUmVwb3J0c0VuZHBvaW50KHRoaXMuZW5kcG9pbnRzKTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UmVwb3J0U3VtbWFyeVtdPih1cmwsIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXJdIEZhaWxlZCB0byBsaXN0IHJlcG9ydHM6JywgZXJyKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCByZXBvcnRzJykpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlKHJlcG9ydElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCB1cmwgPSByZXNvbHZlUmVwb3J0c0VuZHBvaW50KHRoaXMuZW5kcG9pbnRzKTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyByZXBvcnRzRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWAsIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBkZWxldGUgcmVwb3J0JztcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaXNoKHJlcG9ydElkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHVybCA9IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQodGhpcy5lbmRwb2ludHMpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1tid2F5cy1yZXBvcnRdIE5vIHJlcG9ydHNFbmRwb2ludCBjb25maWd1cmVkLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8dm9pZD4oYCR7dXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChyZXBvcnRJZCl9L3B1Ymxpc2hgLCB7IHZlcnNpb24gfSwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHB1Ymxpc2ggcmVwb3J0JztcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { ReportSessionContextService } from '../../core/services/report-session-context.service';
1
2
  /**
2
3
  * Endpoint-based schema discovery adapter.
3
4
  *
@@ -7,9 +8,9 @@
7
8
  * (each list item carries its columns/parameters inline).
8
9
  */
9
10
  import { inject, Injectable } from '@angular/core';
10
- import { HttpClient } from '@angular/common/http';
11
- import { Observable, of } from 'rxjs';
12
- import { catchError, map, shareReplay, tap } from 'rxjs/operators';
11
+ import { HttpClient, HttpHeaders } from '@angular/common/http';
12
+ import { of, forkJoin } from 'rxjs';
13
+ import { catchError, map, shareReplay } from 'rxjs/operators';
13
14
  import { ReportSchemaDiscoveryAdapter, } from '../contracts/schema-discovery.contract';
14
15
  import { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
15
16
  import * as i0 from "@angular/core";
@@ -19,8 +20,18 @@ export class EndpointSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter
19
20
  /** Cached list responses so we don't re-fetch on every getColumns/getParameters call */
20
21
  spCache$ = null;
21
22
  tableCache$ = null;
22
- spItems = [];
23
- tableItems = [];
23
+ session = inject(ReportSessionContextService, { optional: true });
24
+ spCacheKey = '';
25
+ tableCacheKey = '';
26
+ context(url) {
27
+ const session = this.session?.getCurrentSessionContext() ?? {};
28
+ let headers = new HttpHeaders();
29
+ if (session['companyId'] != null)
30
+ headers = headers.set('X-Company-Id', String(session['companyId']));
31
+ if (session['branchId'] != null)
32
+ headers = headers.set('X-Branch-Id', String(session['branchId']));
33
+ return { key: JSON.stringify([url, session]), headers };
34
+ }
24
35
  getEntities(types) {
25
36
  const needSps = !types || types.includes('stored_procedure');
26
37
  const needTables = !types || types.includes('table') || types.includes('view');
@@ -48,26 +59,7 @@ export class EndpointSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter
48
59
  if (results.length === 0) {
49
60
  return of([]);
50
61
  }
51
- // Combine SP and table results
52
- if (results.length === 1) {
53
- return results[0];
54
- }
55
- return new Observable((subscriber) => {
56
- const combined = [];
57
- let completed = 0;
58
- const subs = results.map((obs) => obs.subscribe({
59
- next: (items) => combined.push(...items),
60
- error: (err) => subscriber.error(err),
61
- complete: () => {
62
- completed++;
63
- if (completed === results.length) {
64
- subscriber.next(combined);
65
- subscriber.complete();
66
- }
67
- },
68
- }));
69
- return () => subs.forEach((s) => s.unsubscribe());
70
- });
62
+ return forkJoin(results).pipe(map(groups => groups.flat()));
71
63
  }
72
64
  getColumns(entityName, schema = 'dbo', type) {
73
65
  // For SPs, columns come from the first execute response (not available at schema time).
@@ -108,12 +100,18 @@ export class EndpointSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter
108
100
  }
109
101
  /** Fetch and cache the SP list from the endpoint */
110
102
  fetchSps() {
103
+ const context = this.context(this.endpoints.spEndpoint);
104
+ if (context.key !== this.spCacheKey) {
105
+ this.spCache$ = null;
106
+ this.spCacheKey = context.key;
107
+ }
111
108
  if (!this.spCache$) {
112
109
  if (!this.endpoints?.spEndpoint) {
113
110
  return of([]);
114
111
  }
115
- this.spCache$ = this.http.get(this.endpoints.spEndpoint).pipe(tap((items) => (this.spItems = items)), catchError((err) => {
112
+ this.spCache$ = this.http.get(this.endpoints.spEndpoint, { headers: context.headers }).pipe(catchError((err) => {
116
113
  console.warn('[EndpointSchemaDiscovery] Failed to fetch SPs:', err);
114
+ this.spCache$ = null;
117
115
  return of([]);
118
116
  }), shareReplay({ bufferSize: 1, refCount: true }));
119
117
  }
@@ -121,12 +119,18 @@ export class EndpointSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter
121
119
  }
122
120
  /** Fetch and cache the tables list from the endpoint */
123
121
  fetchTables() {
122
+ const context = this.context(this.endpoints.tablesEndpoint);
123
+ if (context.key !== this.tableCacheKey) {
124
+ this.tableCache$ = null;
125
+ this.tableCacheKey = context.key;
126
+ }
124
127
  if (!this.tableCache$) {
125
128
  if (!this.endpoints?.tablesEndpoint) {
126
129
  return of([]);
127
130
  }
128
- this.tableCache$ = this.http.get(this.endpoints.tablesEndpoint).pipe(tap((items) => (this.tableItems = items)), catchError((err) => {
131
+ this.tableCache$ = this.http.get(this.endpoints.tablesEndpoint, { headers: context.headers }).pipe(catchError((err) => {
129
132
  console.warn('[EndpointSchemaDiscovery] Failed to fetch tables:', err);
133
+ this.tableCache$ = null;
130
134
  return of([]);
131
135
  }), shareReplay({ bufferSize: 1, refCount: true }));
132
136
  }
@@ -160,4 +164,4 @@ function humanizeColumnName(name) {
160
164
  .replace(/\b\w/g, (c) => c.toUpperCase())
161
165
  .trim();
162
166
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFLTCw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFzQzNELE1BQU0sT0FBTyw4QkFBK0IsU0FBUSw0QkFBNEI7SUFDN0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQXlCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRWxGLHdGQUF3RjtJQUNoRixRQUFRLEdBQW9DLElBQUksQ0FBQztJQUNqRCxXQUFXLEdBQXVDLElBQUksQ0FBQztJQUN2RCxPQUFPLEdBQWlCLEVBQUUsQ0FBQztJQUMzQixVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUV6QyxXQUFXLENBQUMsS0FBNEI7UUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sVUFBVSxHQUFH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QUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQVMsa0JBQWtCLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN4QyxJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBzaW5nbGUgYGFwaUJhc2VVcmwgKyAvc2NoZW1hLy4uLmAgcGF0dGVybiwgdGhpcyBhZGFwdGVyXG4gKiBmZXRjaGVzIFNQcyBmcm9tIGBzcEVuZHBvaW50YCBhbmQgdGFibGVzIGZyb20gYHRhYmxlc0VuZHBvaW50YC5cbiAqIENvbHVtbnMgYW5kIHBhcmFtZXRlcnMgYXJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZWQgbGlzdCByZXNwb25zZXNcbiAqIChlYWNoIGxpc3QgaXRlbSBjYXJyaWVzIGl0cyBjb2x1bW5zL3BhcmFtZXRlcnMgaW5saW5lKS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0YWJhc2VFbnRpdHlNZXRhZGF0YSxcbiAgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICBFbnRpdHlDb2x1bW5NZXRhZGF0YSxcbiAgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEsXG4gIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG4vKipcbiAqIFJhdyBTUCBpdGVtIGFzIHJldHVybmVkIGJ5IHRoZSBob3N0J3MgYHNwRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgU3BMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzcWxUeXBlPzogc3RyaW5nO1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICAgIGZyaWVuZGx5TGFiZWw/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG4vKipcbiAqIFJhdyB0YWJsZS92aWV3IGl0ZW0gYXMgcmV0dXJuZWQgYnkgdGhlIGhvc3QncyBgdGFibGVzRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgVGFibGVMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICB0eXBlPzogJ3RhYmxlJyB8ICd2aWV3JztcbiAgY29sdW1ucz86IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmllbGQ/OiBzdHJpbmc7XG4gICAgc3FsVHlwZT86IHN0cmluZztcbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBudWxsYWJsZT86IGJvb2xlYW47XG4gIH0+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIGV4dGVuZHMgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHM6IEJ3YXlzUmVwb3J0RW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuXG4gIC8qKiBDYWNoZWQgbGlzdCByZXNwb25zZXMgc28gd2UgZG9uJ3QgcmUtZmV0Y2ggb24gZXZlcnkgZ2V0Q29sdW1ucy9nZXRQYXJhbWV0ZXJzIGNhbGwgKi9cbiAgcHJpdmF0ZSBzcENhY2hlJDogT2JzZXJ2YWJsZTxTcExpc3RJdGVtW10+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFibGVDYWNoZSQ6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNwSXRlbXM6IFNwTGlzdEl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIHRhYmxlSXRlbXM6IFRhYmxlTGlzdEl0ZW1bXSA9IFtdO1xuXG4gIGdldEVudGl0aWVzKHR5cGVzPzogRGF0YWJhc2VFbnRpdHlUeXBlW10pOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IG5lZWRTcHMgPSAhdHlwZXMgfHwgdHlwZXMuaW5jbHVkZXMoJ3N0b3JlZF9wcm9jZWR1cmUnKTtcbiAgICBjb25zdCBuZWVkVGFibGVzID0gIXR5cGVzIHx8IHR5cGVzLmluY2x1ZGVzKCd0YWJsZScpIHx8IHR5cGVzLmluY2x1ZGVzKCd2aWV3Jyk7XG5cbiAgICBjb25zdCByZXN1bHRzOiBPYnNlcnZhYmxlPERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXT5bXSA9IFtdO1xuXG4gICAgaWYgKG5lZWRTcHMpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgdGhpcy5mZXRjaFNwcygpLnBpcGUoXG4gICAgICAgICAgbWFwKChpdGVtcykgPT5cbiAgICAgICAgICAgIGl0ZW1zLm1hcCgoc3ApID0+ICh7XG4gICAgICAgICAgICAgIG5hbWU6IHNwLm5hbWUsXG4gICAgICAgICAgICAgIHNjaGVtYTogc3Auc2NoZW1hID8/ICdkYm8nLFxuICAgICAgICAgICAgICB0eXBlOiAnc3RvcmVkX3Byb2NlZHVyZScgYXMgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChuZWVkVGFibGVzKSB7XG4gICAgICByZXN1bHRzLnB1c2goXG4gICAgICAgIHRoaXMuZmV0Y2hUYWJsZXMoKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZCA9IGl0ZW1zO1xuICAgICAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKHQpID0+IHR5cGVzLmluY2x1ZGVzKCh0LnR5cGUgPz8gJ3RhYmxlJykgYXMgRGF0YWJhc2VFbnRpdHlUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKCh0KSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgICAgICAgIHNjaGVtYTogdC5zY2hlbWEgPz8gJ2RibycsXG4gICAgICAgICAgICAgIHR5cGU6ICh0LnR5cGUgPz8gJ3RhYmxlJykgYXMgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIENvbWJpbmUgU1AgYW5kIHRhYmxlIHJlc3VsdHNcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxEYXRhYmFzZUVudGl0eU1ldGFkYXRhW10+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBjb21iaW5lZDogRGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdID0gW107XG4gICAgICBsZXQgY29tcGxldGVkID0gMDtcbiAgICAgIGNvbnN0IHN1YnMgPSByZXN1bHRzLm1hcCgob2JzKSA9PlxuICAgICAgICBvYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoaXRlbXMpID0+IGNvbWJpbmVkLnB1c2goLi4uaXRlbXMpLFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbXBsZXRlZCsrO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGNvbWJpbmVkKTtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHN1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbHVtbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHNjaGVtYSA9ICdkYm8nLFxuICAgIHR5cGU/OiBEYXRhYmFzZUVudGl0eVR5cGVcbiAgKTogT2JzZXJ2YWJsZTxFbnRpdHlDb2x1bW5NZXRhZGF0YVtdPiB7XG4gICAgLy8gRm9yIFNQcywgY29sdW1ucyBjb21lIGZyb20gdGhlIGZpcnN0IGV4ZWN1dGUgcmVzcG9uc2UgKG5vdCBhdmFpbGFibGUgYXQgc2NoZW1hIHRpbWUpLlxuICAgIC8vIFdlIHJldHVybiBhbiBlbXB0eSBhcnJheTsgdGhlIHJ1bnRpbWUgZGlzY292ZXJzIGNvbHVtbnMgZnJvbSB0aGUgcmVzdWx0LlxuICAgIGlmICh0eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScpIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuXG4gICAgLy8gTG9vayBpbiBjYWNoZWQgdGFibGUgaXRlbXMgZmlyc3RcbiAgICByZXR1cm4gdGhpcy5mZXRjaFRhYmxlcygpLnBpcGUoXG4gICAgICBtYXAoKHRhYmxlcykgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRhYmxlcy5maW5kKFxuICAgICAgICAgICh0KSA9PiB0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZW50aXR5TmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICh0LnNjaGVtYSA/PyAnZGJvJykudG9Mb3dlckNhc2UoKSA9PT0gc2NoZW1hLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtYXRjaD8uY29sdW1ucykgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gbWF0Y2guY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogY29sLmZpZWxkID8/IGNvbC5uYW1lLFxuICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwgPz8gaHVtYW5pemVDb2x1bW5OYW1lKGNvbC5uYW1lID8/IGNvbC5maWVsZCA/PyAnJyksXG4gICAgICAgICAgZGF0YVR5cGU6IG1hcFNxbERhdGFUeXBlKGNvbC5kYXRhVHlwZSA/PyBjb2wuc3FsVHlwZSA/PyAnc3RyaW5nJyksXG4gICAgICAgICAgbnVsbGFibGU6IGNvbC5udWxsYWJsZSA/PyB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBzY2hlbWEgPSAnZGJvJ1xuICApOiBPYnNlcnZhYmxlPFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFNwcygpLnBpcGUoXG4gICAgICBtYXAoKHNwcykgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNwcy5maW5kKFxuICAgICAgICAgIChzcCkgPT4gc3AubmFtZS50b0xvd2VyQ2FzZSgpID09PSBlbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAgICAgICAgIChzcC5zY2hlbWEgPz8gJ2RibycpLnRvTG93ZXJDYXNlKCkgPT09IHNjaGVtYS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWF0Y2g/LnBhcmFtZXRlcnMpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIG1hdGNoLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBwLmZyaWVuZGx5TGFiZWwsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHAuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGF0YVR5cGU6IG1hcFNxbERhdGFUeXBlKHAuZGF0YVR5cGUgPz8gcC5zcWxUeXBlID8/ICdzdHJpbmcnKSxcbiAgICAgICAgICBzcWxUeXBlOiBwLnNxbFR5cGUgPz8gJ1ZBUkNIQVInLFxuICAgICAgICAgIHJlcXVpcmVkOiBwLnJlcXVpcmVkID8/IGZhbHNlLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcC5kZWZhdWx0VmFsdWUsXG4gICAgICAgIH0pKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBGZXRjaCBhbmQgY2FjaGUgdGhlIFNQIGxpc3QgZnJvbSB0aGUgZW5kcG9pbnQgKi9cbiAgcHJpdmF0ZSBmZXRjaFNwcygpOiBPYnNlcnZhYmxlPFNwTGlzdEl0ZW1bXT4ge1xuICAgIGlmICghdGhpcy5zcENhY2hlJCkge1xuICAgICAgaWYgKCF0aGlzLmVuZHBvaW50cz8uc3BFbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy5zcENhY2hlJCA9IHRoaXMuaHR0cC5nZXQ8U3BMaXN0SXRlbVtdPih0aGlzLmVuZHBvaW50cy5zcEVuZHBvaW50KS5waXBlKFxuICAgICAgICB0YXAoKGl0ZW1zKSA9PiAodGhpcy5zcEl0ZW1zID0gaXRlbXMpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnldIEZhaWxlZCB0byBmZXRjaCBTUHM6JywgZXJyKTtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3BDYWNoZSQ7XG4gIH1cblxuICAvKiogRmV0Y2ggYW5kIGNhY2hlIHRoZSB0YWJsZXMgbGlzdCBmcm9tIHRoZSBlbmRwb2ludCAqL1xuICBwcml2YXRlIGZldGNoVGFibGVzKCk6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB7XG4gICAgaWYgKCF0aGlzLnRhYmxlQ2FjaGUkKSB7XG4gICAgICBpZiAoIXRoaXMuZW5kcG9pbnRzPy50YWJsZXNFbmRwb2ludCkge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJsZUNhY2hlJCA9IHRoaXMuaHR0cC5nZXQ8VGFibGVMaXN0SXRlbVtdPih0aGlzLmVuZHBvaW50cy50YWJsZXNFbmRwb2ludCkucGlwZShcbiAgICAgICAgdGFwKChpdGVtcykgPT4gKHRoaXMudGFibGVJdGVtcyA9IGl0ZW1zKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0VuZHBvaW50U2NoZW1hRGlzY292ZXJ5XSBGYWlsZWQgdG8gZmV0Y2ggdGFibGVzOicsIGVycik7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRhYmxlQ2FjaGUkO1xuICB9XG59XG5cbi8qKiBNYXBzIFNRTCB0eXBlIHN0cmluZ3MgdG8gdGhlIGZvdXIgY2Fub25pY2FsIGRhdGEgdHlwZXMgKi9cbmZ1bmN0aW9uIG1hcFNxbERhdGFUeXBlKHJhdzogc3RyaW5nKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB7XG4gIGNvbnN0IGxvd2VyID0gKHJhdyA/PyAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChbJ2ludCcsICdpbnRlZ2VyJywgJ2JpZ2ludCcsICdzbWFsbGludCcsICd0aW55aW50JywgJ2RlY2ltYWwnLCAnbnVtZXJpYycsICdmbG9hdCcsICdyZWFsJywgJ21vbmV5JywgJ3NtYWxsbW9uZXknLCAnbnVtYmVyJ10uaW5jbHVkZXMobG93ZXIpKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9XG4gIGlmIChbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAnZGF0ZXRpbWUyJywgJ3NtYWxsZGF0ZXRpbWUnLCAnZGF0ZXRpbWVvZmZzZXQnLCAndGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2RhdGUnO1xuICB9XG4gIGlmIChbJ2JpdCcsICdib29sZWFuJywgJ2Jvb2wnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICB9XG4gIHJldHVybiAnc3RyaW5nJztcbn1cblxuLyoqIENyZWF0ZXMgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmcm9tIGEgY29sdW1uIG5hbWUgKi9cbmZ1bmN0aW9uIGh1bWFuaXplQ29sdW1uTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKVxuICAgIC50cmltKCk7XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFLTCw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFzQzNELE1BQU0sT0FBTyw4QkFBK0IsU0FBUSw0QkFBNEI7SUFDN0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixTQUFTLEdBQXlCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRWxGLHdGQUF3RjtJQUNoRixRQUFRLEdBQW9DLElBQUksQ0FBQztJQUNqRCxXQUFXLEdBQXVDLElBQUksQ0FBQztJQUM5QyxPQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0UsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNoQixhQUFhLEdBQUcsRUFBRSxDQUFD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Q0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoSixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUcsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQVMsa0JBQWtCLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN4QyxJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG4vKipcbiAqIEVuZHBvaW50LWJhc2VkIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBzaW5nbGUgYGFwaUJhc2VVcmwgKyAvc2NoZW1hLy4uLmAgcGF0dGVybiwgdGhpcyBhZGFwdGVyXG4gKiBmZXRjaGVzIFNQcyBmcm9tIGBzcEVuZHBvaW50YCBhbmQgdGFibGVzIGZyb20gYHRhYmxlc0VuZHBvaW50YC5cbiAqIENvbHVtbnMgYW5kIHBhcmFtZXRlcnMgYXJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZWQgbGlzdCByZXNwb25zZXNcbiAqIChlYWNoIGxpc3QgaXRlbSBjYXJyaWVzIGl0cyBjb2x1bW5zL3BhcmFtZXRlcnMgaW5saW5lKS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0YWJhc2VFbnRpdHlNZXRhZGF0YSxcbiAgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICBFbnRpdHlDb2x1bW5NZXRhZGF0YSxcbiAgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEsXG4gIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG4vKipcbiAqIFJhdyBTUCBpdGVtIGFzIHJldHVybmVkIGJ5IHRoZSBob3N0J3MgYHNwRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgU3BMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzcWxUeXBlPzogc3RyaW5nO1xuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICAgIGZyaWVuZGx5TGFiZWw/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG4vKipcbiAqIFJhdyB0YWJsZS92aWV3IGl0ZW0gYXMgcmV0dXJuZWQgYnkgdGhlIGhvc3QncyBgdGFibGVzRW5kcG9pbnRgLlxuICovXG5pbnRlcmZhY2UgVGFibGVMaXN0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hPzogc3RyaW5nO1xuICB0eXBlPzogJ3RhYmxlJyB8ICd2aWV3JztcbiAgY29sdW1ucz86IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmllbGQ/OiBzdHJpbmc7XG4gICAgc3FsVHlwZT86IHN0cmluZztcbiAgICBkYXRhVHlwZT86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBudWxsYWJsZT86IGJvb2xlYW47XG4gIH0+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIGV4dGVuZHMgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHM6IEJ3YXlzUmVwb3J0RW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMpO1xuXG4gIC8qKiBDYWNoZWQgbGlzdCByZXNwb25zZXMgc28gd2UgZG9uJ3QgcmUtZmV0Y2ggb24gZXZlcnkgZ2V0Q29sdW1ucy9nZXRQYXJhbWV0ZXJzIGNhbGwgKi9cbiAgcHJpdmF0ZSBzcENhY2hlJDogT2JzZXJ2YWJsZTxTcExpc3RJdGVtW10+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFibGVDYWNoZSQ6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHNwQ2FjaGVLZXkgPSAnJztcbiAgcHJpdmF0ZSB0YWJsZUNhY2hlS2V5ID0gJyc7XG5cbiAgcHJpdmF0ZSBjb250ZXh0KHVybDogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgaGVhZGVyczogSHR0cEhlYWRlcnMgfSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbj8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT0gbnVsbCkgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICBpZiAoc2Vzc2lvblsnYnJhbmNoSWQnXSAhPSBudWxsKSBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICByZXR1cm4geyBrZXk6IEpTT04uc3RyaW5naWZ5KFt1cmwsIHNlc3Npb25dKSwgaGVhZGVycyB9O1xuICB9XG5cbiAgZ2V0RW50aXRpZXModHlwZXM/OiBEYXRhYmFzZUVudGl0eVR5cGVbXSk6IE9ic2VydmFibGU8RGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdPiB7XG4gICAgY29uc3QgbmVlZFNwcyA9ICF0eXBlcyB8fCB0eXBlcy5pbmNsdWRlcygnc3RvcmVkX3Byb2NlZHVyZScpO1xuICAgIGNvbnN0IG5lZWRUYWJsZXMgPSAhdHlwZXMgfHwgdHlwZXMuaW5jbHVkZXMoJ3RhYmxlJykgfHwgdHlwZXMuaW5jbHVkZXMoJ3ZpZXcnKTtcblxuICAgIGNvbnN0IHJlc3VsdHM6IE9ic2VydmFibGU8RGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdPltdID0gW107XG5cbiAgICBpZiAobmVlZFNwcykge1xuICAgICAgcmVzdWx0cy5wdXNoKFxuICAgICAgICB0aGlzLmZldGNoU3BzKCkucGlwZShcbiAgICAgICAgICBtYXAoKGl0ZW1zKSA9PlxuICAgICAgICAgICAgaXRlbXMubWFwKChzcCkgPT4gKHtcbiAgICAgICAgICAgICAgbmFtZTogc3AubmFtZSxcbiAgICAgICAgICAgICAgc2NoZW1hOiBzcC5zY2hlbWEgPz8gJ2RibycsXG4gICAgICAgICAgICAgIHR5cGU6ICdzdG9yZWRfcHJvY2VkdXJlJyBhcyBEYXRhYmFzZUVudGl0eVR5cGUsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRUYWJsZXMpIHtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgdGhpcy5mZXRjaFRhYmxlcygpLnBpcGUoXG4gICAgICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbHRlcmVkID0gaXRlbXM7XG4gICAgICAgICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigodCkgPT4gdHlwZXMuaW5jbHVkZXMoKHQudHlwZSA/PyAndGFibGUnKSBhcyBEYXRhYmFzZUVudGl0eVR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoKHQpID0+ICh7XG4gICAgICAgICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgICAgICAgc2NoZW1hOiB0LnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgICAgICAgICAgdHlwZTogKHQudHlwZSA/PyAndGFibGUnKSBhcyBEYXRhYmFzZUVudGl0eVR5cGUsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKHJlc3VsdHMpLnBpcGUobWFwKGdyb3VwcyA9PiBncm91cHMuZmxhdCgpKSk7XG4gIH1cblxuICBnZXRDb2x1bW5zKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBzY2hlbWEgPSAnZGJvJyxcbiAgICB0eXBlPzogRGF0YWJhc2VFbnRpdHlUeXBlXG4gICk6IE9ic2VydmFibGU8RW50aXR5Q29sdW1uTWV0YWRhdGFbXT4ge1xuICAgIC8vIEZvciBTUHMsIGNvbHVtbnMgY29tZSBmcm9tIHRoZSBmaXJzdCBleGVjdXRlIHJlc3BvbnNlIChub3QgYXZhaWxhYmxlIGF0IHNjaGVtYSB0aW1lKS5cbiAgICAvLyBXZSByZXR1cm4gYW4gZW1wdHkgYXJyYXk7IHRoZSBydW50aW1lIGRpc2NvdmVycyBjb2x1bW5zIGZyb20gdGhlIHJlc3VsdC5cbiAgICBpZiAodHlwZSA9PT0gJ3N0b3JlZF9wcm9jZWR1cmUnKSB7XG4gICAgICByZXR1cm4gb2YoW10pO1xuICAgIH1cblxuICAgIC8vIExvb2sgaW4gY2FjaGVkIHRhYmxlIGl0ZW1zIGZpcnN0XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hUYWJsZXMoKS5waXBlKFxuICAgICAgbWFwKCh0YWJsZXMpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0YWJsZXMuZmluZChcbiAgICAgICAgICAodCkgPT4gdC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGVudGl0eU5hbWUudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgICAgICAgICAodC5zY2hlbWEgPz8gJ2RibycpLnRvTG93ZXJDYXNlKCkgPT09IHNjaGVtYS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghbWF0Y2g/LmNvbHVtbnMpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIG1hdGNoLmNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCA/PyBjb2wubmFtZSxcbiAgICAgICAgICBsYWJlbDogY29sLmxhYmVsID8/IGh1bWFuaXplQ29sdW1uTmFtZShjb2wubmFtZSA/PyBjb2wuZmllbGQgPz8gJycpLFxuICAgICAgICAgIGRhdGFUeXBlOiBtYXBTcWxEYXRhVHlwZShjb2wuZGF0YVR5cGUgPz8gY29sLnNxbFR5cGUgPz8gJ3N0cmluZycpLFxuICAgICAgICAgIG51bGxhYmxlOiBjb2wubnVsbGFibGUgPz8gdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UGFyYW1ldGVycyhcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgc2NoZW1hID0gJ2RibydcbiAgKTogT2JzZXJ2YWJsZTxQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hTcHMoKS5waXBlKFxuICAgICAgbWFwKChzcHMpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzcHMuZmluZChcbiAgICAgICAgICAoc3ApID0+IHNwLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZW50aXR5TmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAoc3Auc2NoZW1hID8/ICdkYm8nKS50b0xvd2VyQ2FzZSgpID09PSBzY2hlbWEudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIW1hdGNoPy5wYXJhbWV0ZXJzKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBtYXRjaC5wYXJhbWV0ZXJzLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgZnJpZW5kbHlMYWJlbDogcC5mcmllbmRseUxhYmVsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGRhdGFUeXBlOiBtYXBTcWxEYXRhVHlwZShwLmRhdGFUeXBlID8/IHAuc3FsVHlwZSA/PyAnc3RyaW5nJyksXG4gICAgICAgICAgc3FsVHlwZTogcC5zcWxUeXBlID8/ICdWQVJDSEFSJyxcbiAgICAgICAgICByZXF1aXJlZDogcC5yZXF1aXJlZCA/PyBmYWxzZSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHAuZGVmYXVsdFZhbHVlLFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKiogRmV0Y2ggYW5kIGNhY2hlIHRoZSBTUCBsaXN0IGZyb20gdGhlIGVuZHBvaW50ICovXG4gIHByaXZhdGUgZmV0Y2hTcHMoKTogT2JzZXJ2YWJsZTxTcExpc3RJdGVtW10+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0KHRoaXMuZW5kcG9pbnRzLnNwRW5kcG9pbnQpO1xuICAgIGlmIChjb250ZXh0LmtleSAhPT0gdGhpcy5zcENhY2hlS2V5KSB7XG4gICAgICB0aGlzLnNwQ2FjaGUkID0gbnVsbDtcbiAgICAgIHRoaXMuc3BDYWNoZUtleSA9IGNvbnRleHQua2V5O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BDYWNoZSQpIHtcbiAgICAgIGlmICghdGhpcy5lbmRwb2ludHM/LnNwRW5kcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BDYWNoZSQgPSB0aGlzLmh0dHAuZ2V0PFNwTGlzdEl0ZW1bXT4odGhpcy5lbmRwb2ludHMuc3BFbmRwb2ludCwgeyBoZWFkZXJzOiBjb250ZXh0LmhlYWRlcnMgfSkucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnldIEZhaWxlZCB0byBmZXRjaCBTUHM6JywgZXJyKTtcbiAgICAgICAgICB0aGlzLnNwQ2FjaGUkID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3BDYWNoZSQ7XG4gIH1cblxuICAvKiogRmV0Y2ggYW5kIGNhY2hlIHRoZSB0YWJsZXMgbGlzdCBmcm9tIHRoZSBlbmRwb2ludCAqL1xuICBwcml2YXRlIGZldGNoVGFibGVzKCk6IE9ic2VydmFibGU8VGFibGVMaXN0SXRlbVtdPiB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCh0aGlzLmVuZHBvaW50cy50YWJsZXNFbmRwb2ludCk7XG4gICAgaWYgKGNvbnRleHQua2V5ICE9PSB0aGlzLnRhYmxlQ2FjaGVLZXkpIHtcbiAgICAgIHRoaXMudGFibGVDYWNoZSQgPSBudWxsO1xuICAgICAgdGhpcy50YWJsZUNhY2hlS2V5ID0gY29udGV4dC5rZXk7XG4gICAgfVxuICAgIGlmICghdGhpcy50YWJsZUNhY2hlJCkge1xuICAgICAgaWYgKCF0aGlzLmVuZHBvaW50cz8udGFibGVzRW5kcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVDYWNoZSQgPSB0aGlzLmh0dHAuZ2V0PFRhYmxlTGlzdEl0ZW1bXT4odGhpcy5lbmRwb2ludHMudGFibGVzRW5kcG9pbnQsIHsgaGVhZGVyczogY29udGV4dC5oZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0VuZHBvaW50U2NoZW1hRGlzY292ZXJ5XSBGYWlsZWQgdG8gZmV0Y2ggdGFibGVzOicsIGVycik7XG4gICAgICAgICAgdGhpcy50YWJsZUNhY2hlJCA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRhYmxlQ2FjaGUkO1xuICB9XG59XG5cbi8qKiBNYXBzIFNRTCB0eXBlIHN0cmluZ3MgdG8gdGhlIGZvdXIgY2Fub25pY2FsIGRhdGEgdHlwZXMgKi9cbmZ1bmN0aW9uIG1hcFNxbERhdGFUeXBlKHJhdzogc3RyaW5nKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB7XG4gIGNvbnN0IGxvd2VyID0gKHJhdyA/PyAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChbJ2ludCcsICdpbnRlZ2VyJywgJ2JpZ2ludCcsICdzbWFsbGludCcsICd0aW55aW50JywgJ2RlY2ltYWwnLCAnbnVtZXJpYycsICdmbG9hdCcsICdyZWFsJywgJ21vbmV5JywgJ3NtYWxsbW9uZXknLCAnbnVtYmVyJ10uaW5jbHVkZXMobG93ZXIpKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9XG4gIGlmIChbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAnZGF0ZXRpbWUyJywgJ3NtYWxsZGF0ZXRpbWUnLCAnZGF0ZXRpbWVvZmZzZXQnLCAndGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2RhdGUnO1xuICB9XG4gIGlmIChbJ2JpdCcsICdib29sZWFuJywgJ2Jvb2wnXS5pbmNsdWRlcyhsb3dlcikpIHtcbiAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICB9XG4gIHJldHVybiAnc3RyaW5nJztcbn1cblxuLyoqIENyZWF0ZXMgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmcm9tIGEgY29sdW1uIG5hbWUgKi9cbmZ1bmN0aW9uIGh1bWFuaXplQ29sdW1uTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKVxuICAgIC50cmltKCk7XG59XG4iXX0=
@@ -9,4 +9,4 @@ import { InjectionToken } from '@angular/core';
9
9
  * Injection token for the endpoint URLs.
10
10
  */
11
11
  export const BWAYS_REPORT_ENDPOINTS = new InjectionToken('BWAYS_REPORT_ENDPOINTS');
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWdCL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsd0JBQXdCLENBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluamVjdGlvbiB0b2tlbnMgZm9yIHRoZSBlbmRwb2ludC1iYXNlZCBhZGFwdGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogV2hlbiB0aGUgZGV2ZWxvcGVyIHVzZXMgYEJ3YXlzUmVwb3J0Q29uZmlnYCAoc2ltcGxlIGNvbmZpZyksIHRoZXNlIHRva2Vuc1xuICogYXJlIHBvcHVsYXRlZCB3aXRoIHRoZSBlbmRwb2ludCBVUkxzIHNvIGFkYXB0ZXJzIGNhbiBpbmplY3QgdGhlbS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbCc7XG5cbi8qKlxuICogRW5kcG9pbnQgVVJMcyB1c2VkIGJ5IHRoZSBlbmRwb2ludC1iYXNlZCBhZGFwdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydEVuZHBvaW50cyB7XG4gIHNwRW5kcG9pbnQ6IHN0cmluZztcbiAgdGFibGVzRW5kcG9pbnQ6IHN0cmluZztcbiAgZXhlY3V0ZUVuZHBvaW50OiBzdHJpbmc7XG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3J0c0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuICBhcGlzRW5kcG9pbnQ/OiBzdHJpbmcgfCBudWxsO1xuICBhcGlFbmRwb2ludHM/OiBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb25bXTtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSBlbmRwb2ludCBVUkxzLlxuICovXG5leHBvcnQgY29uc3QgQldBWVNfUkVQT1JUX0VORFBPSU5UUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCd2F5c1JlcG9ydEVuZHBvaW50cz4oXG4gICdCV0FZU19SRVBPUlRfRU5EUE9JTlRTJ1xuKTtcbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFCL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsd0JBQXdCLENBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluamVjdGlvbiB0b2tlbnMgZm9yIHRoZSBlbmRwb2ludC1iYXNlZCBhZGFwdGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogV2hlbiB0aGUgZGV2ZWxvcGVyIHVzZXMgYEJ3YXlzUmVwb3J0Q29uZmlnYCAoc2ltcGxlIGNvbmZpZyksIHRoZXNlIHRva2Vuc1xuICogYXJlIHBvcHVsYXRlZCB3aXRoIHRoZSBlbmRwb2ludCBVUkxzIHNvIGFkYXB0ZXJzIGNhbiBpbmplY3QgdGhlbS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbCc7XG5cbi8qKlxuICogRW5kcG9pbnQgVVJMcyB1c2VkIGJ5IHRoZSBlbmRwb2ludC1iYXNlZCBhZGFwdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydEVuZHBvaW50cyB7XG4gIHNwRW5kcG9pbnQ6IHN0cmluZztcbiAgdGFibGVzRW5kcG9pbnQ6IHN0cmluZztcbiAgZXhlY3V0ZUVuZHBvaW50OiBzdHJpbmc7XG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3J0c0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuICBhcGlzRW5kcG9pbnQ/OiBzdHJpbmcgfCBudWxsO1xuICBhcGlFbmRwb2ludHM/OiBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb25bXTtcbn1cblxuLyoqIFBlci1kZXNpZ25lciBVUkwgb3ZlcnJpZGVzLiBPbWl0dGVkL3VuZGVmaW5lZCBwcm9wZXJ0aWVzIGluaGVyaXQgYXBwIGRlZmF1bHRzLiAqL1xuZXhwb3J0IHR5cGUgQndheXNSZXBvcnRBcGlVcmxzID0ge1xuICBbS2V5IGluICdzcEVuZHBvaW50JyB8ICd0YWJsZXNFbmRwb2ludCcgfCAnZXhlY3V0ZUVuZHBvaW50JyB8ICdsb29rdXBFbmRwb2ludCcgfCAncmVwb3J0c0VuZHBvaW50JyB8ICdhcGlzRW5kcG9pbnQnXT86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgZW5kcG9pbnQgVVJMcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QndheXNSZXBvcnRFbmRwb2ludHM+KFxuICAnQldBWVNfUkVQT1JUX0VORFBPSU5UUydcbik7XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
2
  import { HttpClient, HttpHeaders } from '@angular/common/http';
3
- import { of, throwError } from 'rxjs';
3
+ import { throwError } from 'rxjs';
4
4
  import { catchError, map } from 'rxjs/operators';
5
5
  import { ReportDataSourceAdapter } from '../contracts/data-source.contract';
6
6
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
@@ -10,7 +10,7 @@ import * as i0 from "@angular/core";
10
10
  /**
11
11
  * Built-in HTTP adapter for executing report data sources against the reporting backend.
12
12
  * Automatically injects active multi-tenant session headers (X-Company-Id, X-Branch-Id)
13
- * and includes rich development fallback data when the backend is unreachable.
13
+ * and propagates execution errors to the caller.
14
14
  */
15
15
  export class HttpReportDataSourceAdapter extends ReportDataSourceAdapter {
16
16
  http = inject(HttpClient, { optional: true });
@@ -37,39 +37,7 @@ export class HttpReportDataSourceAdapter extends ReportDataSourceAdapter {
37
37
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
38
38
  }));
39
39
  }
40
- return of(this.getMockExecutionData(parameters));
41
- }
42
- getMockExecutionData(parameters) {
43
- const rawData = [
44
- { invoiceNo: 'INV-2024-001', date: '2024-01-05', customer: 'Acme Corp', branch: 'New York', amount: 12500, status: 'Paid', customerId: 101, branchId: 1 },
45
- { invoiceNo: 'INV-2024-002', date: '2024-01-12', customer: 'Globex Inc', branch: 'London', amount: 8400, status: 'Paid', customerId: 102, branchId: 2 },
46
- { invoiceNo: 'INV-2024-003', date: '2024-01-18', customer: 'Initech Software', branch: 'New York', amount: 3200, status: 'Pending', customerId: 103, branchId: 1 },
47
- { invoiceNo: 'INV-2024-004', date: '2024-01-25', customer: 'Umbrella Corp', branch: 'Singapore', amount: 21000, status: 'Paid', customerId: 104, branchId: 3 },
48
- { invoiceNo: 'INV-2024-005', date: '2024-02-02', customer: 'Wayne Enterprises', branch: 'London', amount: 15600, status: 'Pending', customerId: 105, branchId: 2 },
49
- { invoiceNo: 'INV-2024-006', date: '2024-02-08', customer: 'Stark Industries', branch: 'New York', amount: 45000, status: 'Paid', customerId: 106, branchId: 1 },
50
- { invoiceNo: 'INV-2024-007', date: '2024-02-14', customer: 'Acme Corp', branch: 'New York', amount: 6750, status: 'Pending', customerId: 101, branchId: 1 },
51
- { invoiceNo: 'INV-2024-008', date: '2024-02-20', customer: 'Globex Inc', branch: 'London', amount: 11200, status: 'Paid', customerId: 102, branchId: 2 },
52
- { invoiceNo: 'INV-2024-009', date: '2024-02-24', customer: 'Initech Software', branch: 'New York', amount: 4800, status: 'Overdue', customerId: 103, branchId: 1 },
53
- { invoiceNo: 'INV-2024-010', date: '2024-02-28', customer: 'Wayne Enterprises', branch: 'London', amount: 9800, status: 'Paid', customerId: 105, branchId: 2 },
54
- ];
55
- let result = [...rawData];
56
- if (parameters['customerId']) {
57
- const cid = Number(parameters['customerId']);
58
- result = result.filter((row) => row.customerId === cid);
59
- }
60
- if (parameters['status']) {
61
- const st = String(parameters['status']).toLowerCase();
62
- result = result.filter((row) => row.status.toLowerCase().includes(st) || st.includes(row.status.toLowerCase()));
63
- }
64
- if (parameters['fromDate']) {
65
- const from = String(parameters['fromDate']);
66
- result = result.filter((row) => row.date >= from);
67
- }
68
- if (parameters['toDate']) {
69
- const to = String(parameters['toDate']);
70
- result = result.filter((row) => row.date <= to);
71
- }
72
- return result;
40
+ return throwError(() => new Error('[bways-report] HTTP execution requires HttpClient and apiBaseUrl. Use withLocalStorage() for mock data.'));
73
41
  }
74
42
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportDataSourceAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
75
43
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportDataSourceAdapter });
@@ -77,6 +45,5 @@ export class HttpReportDataSourceAdapter extends ReportDataSourceAdapter {
77
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportDataSourceAdapter, decorators: [{
78
46
  type: Injectable
79
47
  }] });
80
- /** Convenience alias */
81
48
  export const HttpDataSourceAdapter = HttpReportDataSourceAdapter;
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1kYXRhc291cmNlLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9odHRwLWRhdGFzb3VyY2UuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQUUzRTs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHVCQUF1QjtJQUNyRCxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUYsT0FBTyxDQUNMLFVBQXNDLEVBQ3RDLFVBQW1DO1FBRW5DLE1BQU0sT0FBTyxH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QUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQXpFVSwyQkFBMkI7NEdBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVTs7QUE2RVgsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kYXRhc291cmNlLm1vZGVsJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEV4ZWN1dGVSZXBvcnRSZXF1ZXN0IH0gZnJvbSAnLi4vY29udHJhY3RzL2FwaS1kdG9zJztcbmltcG9ydCB7IGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG4vKipcbiAqIEJ1aWx0LWluIEhUVFAgYWRhcHRlciBmb3IgZXhlY3V0aW5nIHJlcG9ydCBkYXRhIHNvdXJjZXMgYWdhaW5zdCB0aGUgcmVwb3J0aW5nIGJhY2tlbmQuXG4gKiBBdXRvbWF0aWNhbGx5IGluamVjdHMgYWN0aXZlIG11bHRpLXRlbmFudCBzZXNzaW9uIGhlYWRlcnMgKFgtQ29tcGFueS1JZCwgWC1CcmFuY2gtSWQpXG4gKiBhbmQgaW5jbHVkZXMgcmljaCBkZXZlbG9wbWVudCBmYWxsYmFjayBkYXRhIHdoZW4gdGhlIGJhY2tlbmQgaXMgdW5yZWFjaGFibGUuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBleGVjdXRlKFxuICAgIGRhdGFTb3VyY2U6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uLFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuXG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgaWYgKHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IG51bGwpIHtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uWydicmFuY2hJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF5bG9hZDogRXhlY3V0ZVJlcG9ydFJlcXVlc3QgPSB7XG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgIHNlc3Npb25Db250ZXh0OiBzZXNzaW9uLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHVua25vd24+KGAke2Jhc2VVcmx9L2V4ZWN1dGVgLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdSZXBvcnQgZXhlY3V0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZih0aGlzLmdldE1vY2tFeGVjdXRpb25EYXRhKHBhcmFtZXRlcnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9ja0V4ZWN1dGlvbkRhdGEocGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duW10ge1xuICAgIGNvbnN0IHJhd0RhdGEgPSBbXG4gICAgICB7IGludm9pY2VObzogJ0lOVi0yMDI0LTAwMScsIGRhdGU6ICcyMDI0LTAxLTA1JywgY3VzdG9tZXI6ICdBY21lIENvcnAnLCBicmFuY2g6ICdOZXcgWW9yaycsIGFtb3VudDogMTI1MDAsIHN0YXR1czogJ1BhaWQnLCBjdXN0b21lcklkOiAxMDEsIGJyYW5jaElkOiAxIH0sXG4gICAgICB7IGludm9pY2VObzogJ0lOVi0yMDI0LTAwMicsIGRhdGU6ICcyMDI0LTAxLTEyJywgY3VzdG9tZXI6ICdHbG9iZXggSW5jJywgYnJhbmNoOiAnTG9uZG9uJywgYW1vdW50OiA4NDAwLCBzdGF0dXM6ICdQYWlkJywgY3VzdG9tZXJJZDogMTAyLCBicmFuY2hJZDogMiB9LFxuICAgICAgeyBpbnZvaWNlTm86ICdJTlYtMjAyNC0wMDMnLCBkYXRlOiAnMjAyNC0wMS0xOCcsIGN1c3RvbWVyOiAnSW5pdGVjaCBTb2Z0d2FyZScsIGJyYW5jaDogJ05ldyBZb3JrJywgYW1vdW50OiAzMjAwLCBzdGF0dXM6ICdQZW5kaW5nJywgY3VzdG9tZXJJZDogMTAzLCBicmFuY2hJZDogMSB9LFxuICAgICAgeyBpbnZvaWNlTm86ICdJTlYtMjAyNC0wMDQnLCBkYXRlOiAnMjAyNC0wMS0yNScsIGN1c3RvbWVyOiAnVW1icmVsbGEgQ29ycCcsIGJyYW5jaDogJ1NpbmdhcG9yZScsIGFtb3VudDogMjEwMDAsIHN0YXR1czogJ1BhaWQnLCBjdXN0b21lcklkOiAxMDQsIGJyYW5jaElkOiAzIH0sXG4gICAgICB7IGludm9pY2VObzogJ0lOVi0yMDI0LTAwNScsIGRhdGU6ICcyMDI0LTAyLTAyJywgY3VzdG9tZXI6ICdXYXluZSBFbnRlcnByaXNlcycsIGJyYW5jaDogJ0xvbmRvbicsIGFtb3VudDogMTU2MDAsIHN0YXR1czogJ1BlbmRpbmcnLCBjdXN0b21lcklkOiAxMDUsIGJyYW5jaElkOiAyIH0sXG4gICAgICB7IGludm9pY2VObzogJ0lOVi0yMDI0LTAwNicsIGRhdGU6ICcyMDI0LTAyLTA4JywgY3VzdG9tZXI6ICdTdGFyayBJbmR1c3RyaWVzJywgYnJhbmNoOiAnTmV3IFlvcmsnLCBhbW91bnQ6IDQ1MDAwLCBzdGF0dXM6ICdQYWlkJywgY3VzdG9tZXJJZDogMTA2LCBicmFuY2hJZDogMSB9LFxuICAgICAgeyBpbnZvaWNlTm86ICdJTlYtMjAyNC0wMDcnLCBkYXRlOiAnMjAyNC0wMi0xNCcsIGN1c3RvbWVyOiAnQWNtZSBDb3JwJywgYnJhbmNoOiAnTmV3IFlvcmsnLCBhbW91bnQ6IDY3NTAsIHN0YXR1czogJ1BlbmRpbmcnLCBjdXN0b21lcklkOiAxMDEsIGJyYW5jaElkOiAxIH0sXG4gICAgICB7IGludm9pY2VObzogJ0lOVi0yMDI0LTAwOCcsIGRhdGU6ICcyMDI0LTAyLTIwJywgY3VzdG9tZXI6ICdHbG9iZXggSW5jJywgYnJhbmNoOiAnTG9uZG9uJywgYW1vdW50OiAxMTIwMCwgc3RhdHVzOiAnUGFpZCcsIGN1c3RvbWVySWQ6IDEwMiwgYnJhbmNoSWQ6IDIgfSxcbiAgICAgIHsgaW52b2ljZU5vOiAnSU5WLTIwMjQtMDA5JywgZGF0ZTogJzIwMjQtMDItMjQnLCBjdXN0b21lcjogJ0luaXRlY2ggU29mdHdhcmUnLCBicmFuY2g6ICdOZXcgWW9yaycsIGFtb3VudDogNDgwMCwgc3RhdHVzOiAnT3ZlcmR1ZScsIGN1c3RvbWVySWQ6IDEwMywgYnJhbmNoSWQ6IDEgfSxcbiAgICAgIHsgaW52b2ljZU5vOiAnSU5WLTIwMjQtMDEwJywgZGF0ZTogJzIwMjQtMDItMjgnLCBjdXN0b21lcjogJ1dheW5lIEVudGVycHJpc2VzJywgYnJhbmNoOiAnTG9uZG9uJywgYW1vdW50OiA5ODAwLCBzdGF0dXM6ICdQYWlkJywgY3VzdG9tZXJJZDogMTA1LCBicmFuY2hJZDogMiB9LFxuICAgIF07XG5cbiAgICBsZXQgcmVzdWx0ID0gWy4uLnJhd0RhdGFdO1xuXG4gICAgaWYgKHBhcmFtZXRlcnNbJ2N1c3RvbWVySWQnXSkge1xuICAgICAgY29uc3QgY2lkID0gTnVtYmVyKHBhcmFtZXRlcnNbJ2N1c3RvbWVySWQnXSk7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChyb3cpID0+IHJvdy5jdXN0b21lcklkID09PSBjaWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1ldGVyc1snc3RhdHVzJ10pIHtcbiAgICAgIGNvbnN0IHN0ID0gU3RyaW5nKHBhcmFtZXRlcnNbJ3N0YXR1cyddKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocm93KSA9PiByb3cuc3RhdHVzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3QpIHx8IHN0LmluY2x1ZGVzKHJvdy5zdGF0dXMudG9Mb3dlckNhc2UoKSkpO1xuICAgIH1cbiAgICBpZiAocGFyYW1ldGVyc1snZnJvbURhdGUnXSkge1xuICAgICAgY29uc3QgZnJvbSA9IFN0cmluZyhwYXJhbWV0ZXJzWydmcm9tRGF0ZSddKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHJvdykgPT4gcm93LmRhdGUgPj0gZnJvbSk7XG4gICAgfVxuICAgIGlmIChwYXJhbWV0ZXJzWyd0b0RhdGUnXSkge1xuICAgICAgY29uc3QgdG8gPSBTdHJpbmcocGFyYW1ldGVyc1sndG9EYXRlJ10pO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocm93KSA9PiByb3cuZGF0ZSA8PSB0byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXMgKi9cbmV4cG9ydCBjb25zdCBIdHRwRGF0YVNvdXJjZUFkYXB0ZXIgPSBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXI7XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1kYXRhc291cmNlLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9odHRwLWRhdGFzb3VyY2UuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBRTNFOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsdUJBQXVCO0lBQ3JELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRixPQUFPLENBQ0wsVUFBc0MsRUFDdEMsVUFBbUM7UUFFbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFNUQsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN0RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUF5QjtnQkFDcEMsVUFBVTtnQkFDVixVQUFVO2dCQUNWLGNBQWMsRUFBRSxPQUFPO2FBQ3hCLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFVLEdBQUcsT0FBTyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzdFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzVDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDO2dCQUM3RSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMseUdBQXlHLENBQUMsQ0FBQyxDQUFDO0lBQ2hKLENBQUM7d0dBckNVLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVOztBQXlDWCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kYXRhc291cmNlLm1vZGVsJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEV4ZWN1dGVSZXBvcnRSZXF1ZXN0IH0gZnJvbSAnLi4vY29udHJhY3RzL2FwaS1kdG9zJztcbmltcG9ydCB7IGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG4vKipcbiAqIEJ1aWx0LWluIEhUVFAgYWRhcHRlciBmb3IgZXhlY3V0aW5nIHJlcG9ydCBkYXRhIHNvdXJjZXMgYWdhaW5zdCB0aGUgcmVwb3J0aW5nIGJhY2tlbmQuXG4gKiBBdXRvbWF0aWNhbGx5IGluamVjdHMgYWN0aXZlIG11bHRpLXRlbmFudCBzZXNzaW9uIGhlYWRlcnMgKFgtQ29tcGFueS1JZCwgWC1CcmFuY2gtSWQpXG4gKiBhbmQgcHJvcGFnYXRlcyBleGVjdXRpb24gZXJyb3JzIHRvIHRoZSBjYWxsZXIuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBleGVjdXRlKFxuICAgIGRhdGFTb3VyY2U6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uLFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuXG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgaWYgKHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IG51bGwpIHtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uWydicmFuY2hJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF5bG9hZDogRXhlY3V0ZVJlcG9ydFJlcXVlc3QgPSB7XG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgIHNlc3Npb25Db250ZXh0OiBzZXNzaW9uLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHVua25vd24+KGAke2Jhc2VVcmx9L2V4ZWN1dGVgLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSkucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdSZXBvcnQgZXhlY3V0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gSFRUUCBleGVjdXRpb24gcmVxdWlyZXMgSHR0cENsaWVudCBhbmQgYXBpQmFzZVVybC4gVXNlIHdpdGhMb2NhbFN0b3JhZ2UoKSBmb3IgbW9jayBkYXRhLicpKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSHR0cERhdGFTb3VyY2VBZGFwdGVyID0gSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyO1xuIl19