http-request-manager 18.2.0 → 19.0.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 (51) hide show
  1. package/esm2022/lib/http-request-manager.module.mjs +5 -5
  2. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +3 -3
  3. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +3 -3
  4. package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +3 -3
  5. package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +3 -3
  6. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +3 -3
  7. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +4 -4
  8. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +3 -3
  9. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +3 -3
  10. package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +3 -3
  11. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +4 -4
  12. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +3 -3
  13. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +3 -3
  14. package/esm2022/lib/interceptors/credentials.interceptor.mjs +3 -3
  15. package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +3 -3
  16. package/esm2022/lib/interceptors/request-error.interceptor.mjs +3 -3
  17. package/esm2022/lib/interceptors/request-header.interceptor.mjs +3 -3
  18. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +6 -6
  19. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +8 -8
  20. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +3 -3
  21. package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +3 -3
  22. package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +3 -3
  23. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +3 -3
  24. package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +3 -3
  25. package/esm2022/lib/services/request-manager-services/request.service.mjs +7 -5
  26. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +100 -7
  27. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +4 -3
  28. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +12 -0
  29. package/esm2022/lib/services/utils/app.service.mjs +3 -3
  30. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +3 -3
  31. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +3 -3
  32. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +3 -3
  33. package/esm2022/lib/services/utils/headers.service.mjs +3 -3
  34. package/esm2022/lib/services/utils/object-merger.service.mjs +3 -3
  35. package/esm2022/lib/services/utils/path-query.service.mjs +3 -3
  36. package/esm2022/lib/services/utils/utils.service.mjs +3 -3
  37. package/esm2022/lib/services/ws-manager-service/models/assortment-data.model.mjs +10 -0
  38. package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +133 -0
  39. package/fesm2022/http-request-manager.mjs +341 -116
  40. package/fesm2022/http-request-manager.mjs.map +1 -1
  41. package/http-request-manager-19.0.0.tgz +0 -0
  42. package/lib/services/database-manager-services/database.manager.service.d.ts +1 -1
  43. package/lib/services/database-manager-services/db.storage.service.d.ts +2 -2
  44. package/lib/services/request-manager-services/request.service.d.ts +2 -1
  45. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +21 -8
  46. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +4 -1
  47. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +14 -0
  48. package/lib/services/ws-manager-service/models/assortment-data.model.d.ts +10 -0
  49. package/lib/services/ws-manager-service/websocket.service.d.ts +21 -0
  50. package/package.json +1 -1
  51. package/http-request-manager-18.2.0.tgz +0 -0
@@ -4,9 +4,11 @@ import { BehaviorSubject, throwError } from 'rxjs';
4
4
  import { catchError, delay, finalize, map } from 'rxjs/operators';
5
5
  import { PathQueryService, HeadersService } from '../utils';
6
6
  import { requestStreaming } from './rxjs-operators/request-streaming';
7
+ import { WebsocketService } from '../ws-manager-service/websocket.service';
7
8
  import * as i0 from "@angular/core";
8
- export class RequestService {
9
+ export class RequestService extends WebsocketService {
9
10
  constructor() {
11
+ super(...arguments);
10
12
  this.http = inject(HttpClient);
11
13
  this.pathQueryService = inject(PathQueryService);
12
14
  this.headersService = inject(HeadersService);
@@ -177,13 +179,13 @@ export class RequestService {
177
179
  }
178
180
  : headers;
179
181
  }
180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
181
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestService, providedIn: 'root' }); }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
183
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, providedIn: 'root' }); }
182
184
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestService, decorators: [{
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, decorators: [{
184
186
  type: Injectable,
185
187
  args: [{
186
188
  providedIn: 'root'
187
189
  }]
188
190
  }] });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBTXRFLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV6QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMzQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUvQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDL0MsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXpELGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQTtRQUN6QyxjQUFTLEdBQUcsSUFBSSxD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QUFDO1lBQ3RELFFBQVEsR0FBRywwQkFBMEIsQ0FBQTtRQUN2QyxDQUFDO2FBQ0ksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsUUFBUSxHQUFHLG1FQUFtRSxDQUFBO1FBQ2hGLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQTtJQUVqQixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxXQUFvQjtRQUV2RCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN0QjtnQkFDRSxHQUFHLE9BQU87Z0JBQ1YsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFlBQVksRUFBRSxNQUFNO2dCQUNwQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsTUFBTSxFQUFFLG1CQUFtQjthQUM1QjtZQUNELENBQUMsQ0FBQyxPQUFPLENBQUE7SUFFWCxDQUFDOytHQXJQVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlbGF5LCBmaW5hbGl6ZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBcGlSZXF1ZXN0IH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvbW9kZWxzL2FwaS1yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IFBhdGhRdWVyeVNlcnZpY2UsIEhlYWRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcmVxdWVzdFN0cmVhbWluZyB9IGZyb20gJy4vcnhqcy1vcGVyYXRvcnMvcmVxdWVzdC1zdHJlYW1pbmcnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTZXJ2aWNlIHtcblxuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudClcblxuICBwcml2YXRlIHBhdGhRdWVyeVNlcnZpY2UgPSBpbmplY3QoUGF0aFF1ZXJ5U2VydmljZSlcbiAgcHJpdmF0ZSBoZWFkZXJzU2VydmljZSA9IGluamVjdChIZWFkZXJzU2VydmljZSlcblxuICBpc1BlbmRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICBpc1BlbmRpbmckID0gdGhpcy5pc1BlbmRpbmcuYXNPYnNlcnZhYmxlKCkucGlwZShkZWxheSgxKSlcblxuICBwcm9ncmVzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICBwcm9ncmVzcyQgPSB0aGlzLnByb2dyZXNzLmFzT2JzZXJ2YWJsZSgpXG5cbiAgZ2V0UmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUPiB7XG5cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRDb21iaW5lZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIChvcHRpb25zLnN0cmVhbSlcbiAgICAgICAgPyB0aGlzLmh0dHAuZ2V0PGFueT4odXJsUGF0aCwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW1pbmcoKSxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5odHRwLmdldDxUPih1cmxQYXRoLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgICAgICApXG4gIH1cblxuICBjcmVhdGVSZWNvcmRSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIGRhdGE6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkQ29tYmluZWRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiAob3B0aW9ucy5zdHJlYW0pXG4gICAgICAgID8gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmxQYXRoLCBkYXRhLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICAgICAgcmVxdWVzdFN0cmVhbWluZygpLFxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5hbGl6ZSgpXG4gICAgICAgIClcbiAgICAgICAgOiB0aGlzLmh0dHAucG9zdDxUPih1cmxQYXRoLCBkYXRhLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgICAgICApXG4gIH1cblxuICB1cGRhdGVSZWNvcmRSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIGRhdGE6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55Pih1cmxQYXRoLCBkYXRhLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgKVxuICB9XG5cbiAgZGVsZXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUPiB7XG5cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4odXJsUGF0aCwgaGVhZGVycykucGlwZShcbiAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICApXG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb25zXG4gIHByaXZhdGUgYnVpbGRVcmxQYXRoKG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhdGhRdWVyeVNlcnZpY2UuYnVpbGRBUElQYXRoKG9wdGlvbnMuc2VydmVyLCBvcHRpb25zLnBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEhlYWRlcnMob3B0aW9uczogQXBpUmVxdWVzdCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyc1NlcnZpY2UuZ2VuZXJhdGVIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29tYmluZWRIZWFkZXJzKG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBhbnkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnNTZXJ2aWNlLmdlbmVyYXRlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMuY29tYmluZUhlYWRlcnMoaGVhZGVycywgb3B0aW9ucy5zdHJlYW0gfHwgZmFsc2UpXG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IChzb3VyY2U6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPGFueT4pOiBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgICAgIHJldHVybiBzb3VyY2UkLnBpcGUoXG4gICAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9ucz8uYWRhcHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSlcbiAgICAgICAgICAgICAgPyBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiBvcHRpb25zLmFkYXB0ZXIoaXRlbSkpXG4gICAgICAgICAgICAgIDogb3B0aW9ucy5hZGFwdGVyKGRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZG93bmxvYWRGaWxlUmVxdWVzdChvcHRpb25zOiBBcGlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmxQYXRoLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InLCBvYnNlcnZlOiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfSlcbiAgICAucGlwZShcbiAgICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XG5cbiAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKVxuXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBIZWFkZXJSZXNwb25zZSkge1xuICAgICAgICAgIGlmKGV2ZW50LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAwXHRTZW50XHRSZXF1ZXN0IGhhcyBiZWVuIHNlbnQuXG4gICAgICAgIC8vIDFcdFVwbG9hZFByb2dyZXNzXHRVcGxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIC8vIDJcdFJlc3BvbnNlSGVhZGVyXHRSZXNwb25zZSBoZWFkZXJzIHJlY2VpdmVkLlxuICAgICAgICAvLyAzXHREb3dubG9hZFByb2dyZXNzXHREb3dubG9hZCBpcyBpbiBwcm9ncmVzcy5cbiAgICAgICAgLy8gNFx0UmVzcG9uc2VcdFJlc3BvbnNlIGlzIGZ1bGx5IHJlY2VpdmVkLlxuICAgICAgICAvLyA1XHRVc2VyXHRDdXN0b20gdXNlciBldmVudC5cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcblxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gKGV2ZW50LnRvdGFsKSA/IE1hdGgucm91bmQoZXZlbnQubG9hZGVkIC8gKGV2ZW50LnRvdGFsIHx8IDEpICogMTAwKSA6IDEwMFxuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChzdGF0dXMpXG4gICAgICAgICAgcmV0dXJuIHN0YXR1c1xuXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuXG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGF0aCA9IChvcHRpb25zPy5zYXZlQXMpID8gb3B0aW9ucy5zYXZlQXMgOiAob3B0aW9ucy5wYXRoKSA/IG9wdGlvbnMucGF0aFtvcHRpb25zLnBhdGgubGVuZ3RoIC0gMV0gOiBbXVxuICAgICAgICAgICAgICBjb25zdCBoZWFkZXJfY29udGVudCA9IGV2ZW50LmhlYWRlcnMuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJykgfHwgJyc7XG4gICAgICAgICAgICAgIC8vIGNoZWNrcyBpZiBoZWFkZXJfY29udGVudCBpcyBub3QgZW1wdHkgYW5kIHNwbGl0cyB0aGUgaGVhZGVyX2NvbnRlbnQgdG8gZ2V0IHRoZSBmaWxlIG5hbWVcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgZmlsZURvd25sb2FkIC0gY29udGFpbnMgdGhlIGZpbGUgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSAoaGVhZGVyX2NvbnRlbnQpID8gaGVhZGVyX2NvbnRlbnQuc3BsaXQoJz0nKVsxXS5zdWJzdHJpbmcoMCwgaGVhZGVyX2NvbnRlbnQuc3BsaXQoJz0nKVsxXS5sZW5ndGgpIDogJydcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IChmaWxlTmFtZVBhdGggIT09ICcnKSA/IGZpbGVOYW1lUGF0aCA6IGZpbGVcblxuICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYXZlIEZpbGU6IChmaWxlIG5hbWUgYW5kIGV4dGVuc2lvbikgbm90IGZvdW5kIGluIEhlYWRlcnMgb3IgUGF0aCcpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZmlsZU5hbWUsIGV2ZW50LmJvZHkpXG4gICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIDEwMFxuXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rvd25sb2FkIGZhaWxlZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG5cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmluYWxpemUoKTogKHNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+KSA9PiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRmlsZShmaWxlOnN0cmluZywgZmlsZURhdGE6IGFueSkge1xuXG4gICAgY29uc3QgbmF2aWdhdG9yQW55ID0gd2luZG93Lm5hdmlnYXRvciBhcyBhbnlcblxuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUuc3BsaXQoJy4nKVsxXS50b0xvd2VyQ2FzZSgpXG5cbiAgICB2YXIgbmV3QmxvYiA9IG5ldyBCbG9iKFtmaWxlRGF0YV0sIHsgdHlwZTogdGhpcy5jcmVhdGVGaWxlVHlwZShleHRlbnNpb24pIH0pXG5cbiAgICBpZiAobmF2aWdhdG9yQW55Lm1zU2F2ZU9yT3BlbkJsb2IpIHtcbiAgICAgIG5hdmlnYXRvckFueS5tc1NhdmVPck9wZW5CbG9iKG5ld0Jsb2IsIGZpbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ld0Jsb2IpXG4gICAgICBsaW5rLmhyZWYgPSB1cmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlXG4gICAgICBsaW5rLmNsaWNrKClcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsZVR5cGUoZXh0OiBhbnkpOiBzdHJpbmcge1xuXG4gICAgbGV0IGZpbGVUeXBlOiBzdHJpbmcgPSBcIlwiXG5cbiAgICBpZiAoZXh0ID09ICdwZGYnIHx8IGV4dCA9PSAnY3N2Jykge1xuICAgICAgZmlsZVR5cGUgPSBgYXBwbGljYXRpb24vJHtleHR9YFxuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ2pwZWcnIHx8IGV4dCA9PSAnanBnJyB8fCBleHQgPT0gJ3BuZycpIHtcbiAgICAgIGZpbGVUeXBlID0gYGltYWdlLyR7ZXh0fWBcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICd0eHQnKSB7XG4gICAgICBmaWxlVHlwZSA9ICd0ZXh0L3BsYWluJ1xuICAgIH1cblxuICAgIGVsc2UgaWYgKGV4dCA9PSAncHB0JyB8fCBleHQgPT0gJ3BvdCcgfHwgZXh0ID09ICdwcHMnIHx8IGV4dCA9PSAncHBhJykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAncHB0eCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAnZG9jJyB8fCBleHQgPT0gJ2RvdCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL21zd29yZCdcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdkb2N4Jykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAneGxzJyB8fCBleHQgPT0gJ3hsdCcgfHwgZXh0ID09ICd4bGEnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAneGxzeCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlVHlwZVxuXG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVIZWFkZXJzKGhlYWRlcnM6IGFueSwgaXNTdHJlYW1pbmc6IGJvb2xlYW4pIHtcblxuICAgIHJldHVybiAoaXNTdHJlYW1pbmcpID9cbiAgICB7XG4gICAgICAuLi5oZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgQWNjZXB0OiAndGV4dC9ldmVudC1zdHJlYW0nXG4gICAgfVxuICAgIDogaGVhZGVyc1xuXG4gIH1cblxufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxjQUFlLFNBQVEsZ0JBQWdCO0lBSHBEOztRQUtVLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFekIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDM0MsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFL0MsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQy9DLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV6RCxhQUFR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RyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0RCxRQUFRLEdBQUcsMEJBQTBCLENBQUE7UUFDdkMsQ0FBQzthQUNJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxtRUFBbUUsQ0FBQTtRQUNoRixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFFakIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsV0FBb0I7UUFFdkQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdEI7Z0JBQ0UsR0FBRyxPQUFPO2dCQUNWLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixZQUFZLEVBQUUsTUFBTTtnQkFDcEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLE1BQU0sRUFBRSxtQkFBbUI7YUFDNUI7WUFDRCxDQUFDLENBQUMsT0FBTyxDQUFBO0lBRVgsQ0FBQzsrR0FyUFUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgZmluYWxpemUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBQYXRoUXVlcnlTZXJ2aWNlLCBIZWFkZXJzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHJlcXVlc3RTdHJlYW1pbmcgfSBmcm9tICcuL3J4anMtb3BlcmF0b3JzL3JlcXVlc3Qtc3RyZWFtaW5nJztcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi93cy1tYW5hZ2VyLXNlcnZpY2Uvd2Vic29ja2V0LnNlcnZpY2UnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTZXJ2aWNlIGV4dGVuZHMgV2Vic29ja2V0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpXG5cbiAgcHJpdmF0ZSBwYXRoUXVlcnlTZXJ2aWNlID0gaW5qZWN0KFBhdGhRdWVyeVNlcnZpY2UpXG4gIHByaXZhdGUgaGVhZGVyc1NlcnZpY2UgPSBpbmplY3QoSGVhZGVyc1NlcnZpY2UpXG5cbiAgaXNQZW5kaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgaXNQZW5kaW5nJCA9IHRoaXMuaXNQZW5kaW5nLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVsYXkoMSkpXG5cbiAgcHJvZ3Jlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcHJvZ3Jlc3MkID0gdGhpcy5wcm9ncmVzcy5hc09ic2VydmFibGUoKVxuXG4gIGdldFJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkQ29tYmluZWRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiAob3B0aW9ucy5zdHJlYW0pXG4gICAgICAgID8gdGhpcy5odHRwLmdldDxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtaW5nKCksXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaHR0cC5nZXQ8VD4odXJsUGF0aCwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgY3JlYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuc3RyZWFtKVxuICAgICAgICA/IHRoaXMuaHR0cC5wb3N0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW1pbmcoKSxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5odHRwLnBvc3Q8VD4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgdXBkYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgKVxuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uc1xuICBwcml2YXRlIGJ1aWxkVXJsUGF0aChvcHRpb25zOiBBcGlSZXF1ZXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoUXVlcnlTZXJ2aWNlLmJ1aWxkQVBJUGF0aChvcHRpb25zLnNlcnZlciwgb3B0aW9ucy5wYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnNTZXJ2aWNlLmdlbmVyYXRlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zOiBBcGlSZXF1ZXN0KTogYW55IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzU2VydmljZS5nZW5lcmF0ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLmNvbWJpbmVIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMuc3RyZWFtIHx8IGZhbHNlKVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiAoc291cmNlOiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpXG4gICAgICAgICAgICAgID8gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMuYWRhcHRlcihkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkRmlsZVJlcXVlc3Qob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsUGF0aCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgb2JzZXJ2ZTogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzOiB0cnVlIH0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuXG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSlcblxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwSGVhZGVyUmVzcG9uc2UpIHtcbiAgICAgICAgICBpZihldmVudC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG93bmxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMFx0U2VudFx0UmVxdWVzdCBoYXMgYmVlbiBzZW50LlxuICAgICAgICAvLyAxXHRVcGxvYWRQcm9ncmVzc1x0VXBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAgICAvLyAyXHRSZXNwb25zZUhlYWRlclx0UmVzcG9uc2UgaGVhZGVycyByZWNlaXZlZC5cbiAgICAgICAgLy8gM1x0RG93bmxvYWRQcm9ncmVzc1x0RG93bmxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIC8vIDRcdFJlc3BvbnNlXHRSZXNwb25zZSBpcyBmdWxseSByZWNlaXZlZC5cbiAgICAgICAgLy8gNVx0VXNlclx0Q3VzdG9tIHVzZXIgZXZlbnQuXG5cbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcblxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChldmVudC50b3RhbCkgPyBNYXRoLnJvdW5kKGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCB8fCAxKSAqIDEwMCkgOiAxMDBcbiAgICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQoc3RhdHVzKVxuICAgICAgICAgIHJldHVybiBzdGF0dXNcblxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcblxuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhdGggPSAob3B0aW9ucz8uc2F2ZUFzKSA/IG9wdGlvbnMuc2F2ZUFzIDogKG9wdGlvbnMucGF0aCkgPyBvcHRpb25zLnBhdGhbb3B0aW9ucy5wYXRoLmxlbmd0aCAtIDFdIDogW11cbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVyX2NvbnRlbnQgPSBldmVudC5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgICAgICAgICAgICAvLyBjaGVja3MgaWYgaGVhZGVyX2NvbnRlbnQgaXMgbm90IGVtcHR5IGFuZCBzcGxpdHMgdGhlIGhlYWRlcl9jb250ZW50IHRvIGdldCB0aGUgZmlsZSBuYW1lXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGZpbGVEb3dubG9hZCAtIGNvbnRhaW5zIHRoZSBmaWxlIG5hbWUgYW5kIGV4dGVuc2lvblxuICAgICAgICAgICAgICBjb25zdCBmaWxlID0gKGhlYWRlcl9jb250ZW50KSA/IGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0ubGVuZ3RoKSA6ICcnXG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoZmlsZU5hbWVQYXRoICE9PSAnJykgPyBmaWxlTmFtZVBhdGggOiBmaWxlXG5cbiAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2F2ZSBGaWxlOiAoZmlsZSBuYW1lIGFuZCBleHRlbnNpb24pIG5vdCBmb3VuZCBpbiBIZWFkZXJzIG9yIFBhdGgnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKGZpbGVOYW1lLCBldmVudC5ib2R5KVxuICAgICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuXG4gICAgICAgICAgICAgIHJldHVybiAxMDBcblxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuXG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbmFsaXplKCk6IChzb3VyY2U6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZmlsZTpzdHJpbmcsIGZpbGVEYXRhOiBhbnkpIHtcblxuICAgIGNvbnN0IG5hdmlnYXRvckFueSA9IHdpbmRvdy5uYXZpZ2F0b3IgYXMgYW55XG5cbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLnNwbGl0KCcuJylbMV0udG9Mb3dlckNhc2UoKVxuXG4gICAgdmFyIG5ld0Jsb2IgPSBuZXcgQmxvYihbZmlsZURhdGFdLCB7IHR5cGU6IHRoaXMuY3JlYXRlRmlsZVR5cGUoZXh0ZW5zaW9uKSB9KVxuXG4gICAgaWYgKG5hdmlnYXRvckFueS5tc1NhdmVPck9wZW5CbG9iKSB7XG4gICAgICBuYXZpZ2F0b3JBbnkubXNTYXZlT3JPcGVuQmxvYihuZXdCbG9iLCBmaWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdCbG9iKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZVxuICAgICAgbGluay5jbGljaygpXG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpbGVUeXBlKGV4dDogYW55KTogc3RyaW5nIHtcblxuICAgIGxldCBmaWxlVHlwZTogc3RyaW5nID0gXCJcIlxuXG4gICAgaWYgKGV4dCA9PSAncGRmJyB8fCBleHQgPT0gJ2NzdicpIHtcbiAgICAgIGZpbGVUeXBlID0gYGFwcGxpY2F0aW9uLyR7ZXh0fWBcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdqcGVnJyB8fCBleHQgPT0gJ2pwZycgfHwgZXh0ID09ICdwbmcnKSB7XG4gICAgICBmaWxlVHlwZSA9IGBpbWFnZS8ke2V4dH1gXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAndHh0Jykge1xuICAgICAgZmlsZVR5cGUgPSAndGV4dC9wbGFpbidcbiAgICB9XG5cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdCcgfHwgZXh0ID09ICdwb3QnIHx8IGV4dCA9PSAncHBzJyB8fCBleHQgPT0gJ3BwYScpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdHgnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ2RvYycgfHwgZXh0ID09ICdkb3QnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAnZG9jeCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hscycgfHwgZXh0ID09ICd4bHQnIHx8IGV4dCA9PSAneGxhJykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hsc3gnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVR5cGVcblxuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lSGVhZGVycyhoZWFkZXJzOiBhbnksIGlzU3RyZWFtaW5nOiBib29sZWFuKSB7XG5cbiAgICByZXR1cm4gKGlzU3RyZWFtaW5nKSA/XG4gICAge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIEFjY2VwdDogJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgIH1cbiAgICA6IGhlYWRlcnNcblxuICB9XG5cbn1cbiJdfQ==
@@ -30,6 +30,15 @@ export class HTTPManagerStateService extends ComponentStore {
30
30
  // ----------
31
31
  this.hasDatabase = false;
32
32
  this.streamedResponse = [];
33
+ // WS
34
+ this.status$ = this.httpManagerService.connectionStatus$;
35
+ this.messages$ = null;
36
+ this.connectionStatus$ = null;
37
+ this.userList = [];
38
+ this.channels = [];
39
+ this.channelList = [];
40
+ this.messages = [];
41
+ this.wsConnection = false;
33
42
  // --------------------------------------------------------------------------------------------------
34
43
  // SELECTORS
35
44
  this.data$ = this.select(({ data, dataObject }) => {
@@ -64,11 +73,18 @@ export class HTTPManagerStateService extends ComponentStore {
64
73
  });
65
74
  this.addData$ = this.updater((state, data) => {
66
75
  if (this.dataType === DataType.ARRAY) {
67
- const newState = [...state.data, data];
68
- return { ...state, ...{ data: newState } };
76
+ const exists = state.data.some(item => item.id === data.id);
77
+ if (exists) {
78
+ const updatedData = state.data.map(item => item.id === data.id ? data : item);
79
+ return { ...state, data: updatedData };
80
+ }
81
+ else {
82
+ const newState = [...state.data, data];
83
+ return { ...state, data: newState };
84
+ }
69
85
  }
70
86
  else {
71
- return { ...state, ...{ dataObject: data } };
87
+ return { ...state, dataObject: data };
72
88
  }
73
89
  });
74
90
  this.deleteData$ = this.updater((state, data) => {
@@ -120,6 +136,22 @@ export class HTTPManagerStateService extends ComponentStore {
120
136
  this.setData$(data);
121
137
  }));
122
138
  })));
139
+ // FETCH RECORD
140
+ this.fetchRecord = (options, method) => this.effect(() => of(RequestOptions.adapt(options)).pipe(switchMap((options) => {
141
+ this.streamedResponse = [];
142
+ const requestOptions = this.updateRequestOptions(options?.headers);
143
+ return this.httpManagerService.getRequest(requestOptions, options?.path)
144
+ .pipe(tap((data) => {
145
+ data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
146
+ const id = options.path?.length ? options.path[options.path.length - 1] : 0;
147
+ if (method === 'DELETE')
148
+ this.deleteData$({ id });
149
+ if (method === 'UPDATE')
150
+ this.updateData$(data);
151
+ if (method === 'CREATE')
152
+ this.addData$(data);
153
+ }));
154
+ })));
123
155
  // CREATE RECORD
124
156
  this.createRecord = (data, options) => this.effect(() => of(data).pipe(switchMap((data) => {
125
157
  this.streamedResponse = [];
@@ -128,6 +160,8 @@ export class HTTPManagerStateService extends ComponentStore {
128
160
  .pipe(tap((data) => {
129
161
  data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
130
162
  this.addData$(data);
163
+ if (this.wsConnection)
164
+ this.wsCommunication('CREATE', [...options?.path || [], data.id]);
131
165
  }));
132
166
  })));
133
167
  // UPDATE RECORD
@@ -138,6 +172,8 @@ export class HTTPManagerStateService extends ComponentStore {
138
172
  .pipe(tap((data) => {
139
173
  data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
140
174
  this.updateData$(data);
175
+ if (this.wsConnection)
176
+ this.wsCommunication('UPDATE', [...options?.path || []]);
141
177
  }));
142
178
  })));
143
179
  // DELETE RECORD
@@ -148,6 +184,8 @@ export class HTTPManagerStateService extends ComponentStore {
148
184
  .pipe(tap((data) => {
149
185
  data = (!data) ? (this.dataType === DataType.ARRAY) ? [] : {} : data;
150
186
  this.deleteData$(data);
187
+ if (this.wsConnection)
188
+ this.wsCommunication('DELETE', [...options?.path || []]);
151
189
  }));
152
190
  })));
153
191
  // --------------------------------------------------------------------------------------------------
@@ -202,6 +240,55 @@ export class HTTPManagerStateService extends ComponentStore {
202
240
  this.dataType = (dataType) ? dataType : DataType.ARRAY;
203
241
  this.hasDatabase = this.database?.table === "" ? false : true;
204
242
  this.database = (this.hasDatabase) ? DatabaseStorage.adapt(database) : undefined;
243
+ console.log('WS API Options:', this.apiOptions.ws);
244
+ this.initWS(this.apiOptions.ws);
245
+ }
246
+ initWS(wsOptions) {
247
+ if (wsOptions?.wsServer)
248
+ this.httpManagerService.connect(wsOptions.wsServer, wsOptions.jwtToken);
249
+ // connection status
250
+ this.connectionStatus$ = this.httpManagerService.connectionStatus$
251
+ .subscribe((isConnected) => {
252
+ this.wsConnection = isConnected;
253
+ if (isConnected) {
254
+ console.log('🟢 WebSocket connection is open.');
255
+ this.httpManagerService.getAllChannels();
256
+ }
257
+ else {
258
+ console.log('🔴 WebSocket connection is closed.');
259
+ }
260
+ });
261
+ // Subscribe to incoming messages
262
+ this.messages$ = this.httpManagerService.messages$
263
+ .subscribe((message) => {
264
+ if (!message)
265
+ return;
266
+ console.log('Received message:', message);
267
+ switch (message.type) {
268
+ case 'channelsList':
269
+ console.log('💬 Channels:', message.channels);
270
+ this.channelList = message.channels;
271
+ if (this.channelList.includes(wsOptions.id)) {
272
+ this.httpManagerService.subscribeToChannel(wsOptions.id);
273
+ }
274
+ else {
275
+ this.httpManagerService.createChannel(wsOptions.id);
276
+ }
277
+ break;
278
+ case 'channelMessage':
279
+ console.log('💬 Message:', message.content);
280
+ this.fetchRecord(RequestOptions.adapt({ path: message.content.path }), message.content.method);
281
+ break;
282
+ case 'usersInChannel':
283
+ this.userList = message.users;
284
+ console.log('👥 Users:', message.users);
285
+ break;
286
+ default:
287
+ if (message)
288
+ this.messages.push(message);
289
+ break;
290
+ }
291
+ });
205
292
  }
206
293
  get ApiRequestOptions() {
207
294
  return this.apiOptions;
@@ -237,6 +324,12 @@ export class HTTPManagerStateService extends ComponentStore {
237
324
  });
238
325
  return [...updatedData, ...addedData];
239
326
  }
327
+ wsCommunication(method, path) {
328
+ if (this.wsConnection && this.apiOptions.ws) {
329
+ const wsServer = this.apiOptions.ws.id;
330
+ this.httpManagerService.sendMessage(wsServer, { method, path });
331
+ }
332
+ }
240
333
  // --------------------------------------------------------------------------------------------------
241
334
  // MISC
242
335
  isEmpty(obj) {
@@ -249,10 +342,10 @@ export class HTTPManagerStateService extends ComponentStore {
249
342
  : { ...options.headers };
250
343
  return options;
251
344
  }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerStateService, deps: [{ token: API_OPTS }, { token: "dataType" }, { token: "database" }], target: i0.ɵɵFactoryTarget.Injectable }); }
253
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerStateService }); }
345
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerStateService, deps: [{ token: API_OPTS }, { token: "dataType" }, { token: "database" }], target: i0.ɵɵFactoryTarget.Injectable }); }
346
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerStateService }); }
254
347
  }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerStateService, decorators: [{
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerStateService, decorators: [{
256
349
  type: Injectable
257
350
  }], ctorParameters: () => [{ type: undefined, decorators: [{
258
351
  type: Inject,
@@ -264,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
264
357
  type: Inject,
265
358
  args: ["database"]
266
359
  }] }] });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXN0YXRlLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9odHRwLW1hbmFnZXItc3RhdGUuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUd0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBYSxVQUFVLENBQUMsQ0FBQztBQU81RCxNQUFNLFlBQVksR0FBNkI7SUFDN0MsSUFBSSxFQUFFLEVBQUU7SUFDUixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDO0FBR0YsTUFBTSxPQUFPLHVCQUFrRCxTQUFRLGNBQXNDO0lBc0IzRyxZQUM0QixhQUFhLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFDN0IsUUFBOEIsRUFDOUIsUUFBc0M7UUFFbEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBSk0sZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBOEI7UUF2QnBFLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRS9DLFdBQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFBO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU5RCxhQUFhO1FBQ0wsU0FBSSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFBO1FBQzdDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRXhCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNuRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFcEMsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ25ELGdCQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUM1QyxhQUFhO1FBRUwsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFFM0IscUJBQWdCLEdBQUcsRUFBRSxDQUFBO1FBcUNyQixxR0FBcUc7UUFDckcsWUFBWTtRQUVILFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtZQUNwRCxNQUFNLE9BQU8sR0FBRSxDQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUNqRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1FBQ3RDLENBQUMsQ0FBQyxDQUFBO1FBRU8sa0JBQWEsR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDbEQsSUFBSSxDQUFDLEtBQUssRUFDVixDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBYSxDQUFBO1lBQ3RELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFRLElBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixxR0FBcUc7UUFFckcsV0FBVztRQUVNLGFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBNkIsRUFBRSxJQUFtQixFQUFFLEVBQUU7WUFFOUYsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFFckMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUVyRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO2dCQUNqRixNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFFN0UsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUMxSCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO2dCQUU3SSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUE0QixDQUFDO1lBRXJGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDcEQsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBNEIsQ0FBQztZQUNsRixDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUE4QmMsYUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUE2QixFQUFFLElBQU8sRUFBRSxFQUFFO1lBRWxGLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFBO1lBQzVDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFBO1lBQzlDLENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQTtRQUVlLGdCQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQTZCLEVBQUUsSUFBd0IsRUFBRSxFQUFFO1lBQ3RHLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBQy9ELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUE7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUE7WUFDOUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRWUsZ0JBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBNkIsRUFBRSxJQUFPLEVBQUUsRUFBRTtZQUVyRixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUVyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUVsRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNoQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFBO29CQUN6QixPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFBO2dCQUM1QyxDQUFDO2dCQUVELE9BQU8sS0FBSyxDQUFBO1lBRWQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUE7WUFDOUMsQ0FBQztRQUVILENBQUMsQ0FBQyxDQUFBO1FBRUYscUdBQXFHO1FBQ3JHLFVBQVU7UUFFRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDekMsSUFBSSxDQUFDLElBQUksQ0FDUCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNuQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNuQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQyxDQUFBO1FBRU8sZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3hDLElBQUksQ0FBQyxJQUFJLENBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLG1FQUFtRTtZQUNuRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDckIsQ0FBQyxDQUFDLENBQ0wsQ0FBQyxDQUFBO1FBRUYscUdBQXFHO1FBQ3JHLGtCQUFrQjtRQUVsQixnQkFBZ0I7UUFDUCxpQkFBWSxHQUFHLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQ25ELElBQUksQ0FBQyxNQUFNLENBQU0sR0FBRyxFQUFFLENBQ3RCLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBRWIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtZQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRWxFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztpQkFDdkUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO2dCQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3JCLENBQUMsQ0FBQyxDQUNILENBQUE7UUFFSCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUE7UUFFRCxnQkFBZ0I7UUFDUCxpQkFBWSxHQUFHLENBQUMsSUFBYyxFQUFFLE9BQXdCLEVBQUUsRUFBRSxDQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFNLEdBQUcsRUFBRSxDQUNwQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNYLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBRXhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7WUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVsRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO2lCQUM5RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7Z0JBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDckIsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVILENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQTtRQUVELGdCQUFnQjtRQUNQLGlCQUFZLEdBQUcsQ0FBQyxJQUFjLEVBQUUsT0FBd0IsRUFBRSxFQUFFLENBQ25FLElBQUksQ0FBQyxNQUFNLENBQU0sR0FBRyxFQUFFLENBQ3RCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFFdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtZQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRWxFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7aUJBQzdFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtnQkFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUgsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFBO1FBRUQsZ0JBQWdCO1FBQ1AsaUJBQVksR0FBRyxDQUFDLE9BQXdCLEVBQUUsRUFBRSxDQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFNLEdBQUcsRUFBRSxDQUN0QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBRXRCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUE7WUFDMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVsRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7aUJBQzFFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtnQkFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUgsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFBO1FBRUQscUdBQXFHO1FBQ3JHLGVBQWU7UUFFTixpQkFBWSxHQUFHLENBQUMsSUFBYyxFQUFFLE9BQXdCLEVBQUUsRUFBRSxDQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFNLEdBQUcsRUFBRSxDQUN0QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNYLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUN2RCxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUV0QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRWxFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7aUJBQzlFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDZixJQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFBO1lBQzdCLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFFckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFBO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBRS9CLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7Z0JBRTVCLElBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUM5QyxDQUFDO1lBRUgsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVILENBQUMsQ0FBQyxDQUNILENBRUYsQ0FBQTtRQUVRLGdCQUFXLEdBQUcsQ0FBQyxPQUF3QixFQUFFLEVBQUUsQ0FDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBTSxHQUFHLEVBQUUsQ0FDdEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDZCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDdkQsU0FBUyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFFekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNsRSxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUU1QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7aUJBQ3ZFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFZixJQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFBO1lBQzdCLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFFckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFBO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBRTlCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7Z0JBRTVCLElBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUM5QyxDQUFDO1lBRUgsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVILENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQTtRQTFVQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBdUIsRUFBRSxRQUFtQixFQUFFLFFBQTBCO1FBRTNGLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQTtRQUV0RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWxGLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxtQ0FBbUM7UUFDakMsd0VBQXdFO1FBQ3hFLCtIQUErSDtRQUMvSCx5R0FBeUc7UUFDM0csSUFBSTtJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JCLENBQUM7SUFnRE8sZ0JBQWdCLENBQUMsV0FBa0IsRUFBRSxPQUFjO1FBRXpELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUMzRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3pFLENBQUMsQ0FBQTtRQUVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFFekcsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO2dCQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzVGLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNyRCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7Z0JBQ3RELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDOUYsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFBO0lBRXpDLENBQUM7SUF1T0MscUdBQXFHO0lBQ3JHLE9BQU87SUFFQyxPQUFPLENBQUMsR0FBUTtRQUN0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBYTtRQUV4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUV4RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUNwQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUU5QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDOytHQXhYVSx1QkFBdUIsa0JBdUJ4QixRQUFRLGFBQ1IsVUFBVSxhQUNWLFVBQVU7bUhBekJULHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7MEJBd0JOLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxVQUFVOzswQkFDakIsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgc3dpdGNoTWFwLCBjb25jYXRNYXAsIHNjYW4sIGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YWJhc2VTdG9yYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGFiYXNlLXN0b3JhZ2UubW9kZWwnO1xuaW1wb3J0IHsgSFRUUE1hbmFnZXJTZXJ2aWNlLCBEYXRhVHlwZSB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJztcblxuXG5jb25zdCBBUElfT1BUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcGlSZXF1ZXN0PignQVBJX09QVFMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+IHtcbiAgZGF0YTogVFtdXG4gIGRhdGFPYmplY3Q6IFQgfCBudWxsXG59XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxhbnk+ID0ge1xuICBkYXRhOiBbXSxcbiAgZGF0YU9iamVjdDogbnVsbCxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclN0YXRlU2VydmljZTxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIH0+IGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8QVBJU3RhdGVNYW5hZ2VyRGF0YTxUPj4ge1xuXG4gIGh0dHBNYW5hZ2VyU2VydmljZSA9IGluamVjdChIVFRQTWFuYWdlclNlcnZpY2UpXG5cbiAgZXJyb3IkID0gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZXJyb3IkXG4gIGlzUGVuZGluZyQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmckLnBpcGUoZGVsYXkoMSkpXG5cbiAgLy8gUEFHSU5BVElPTlxuICBwcml2YXRlIHBhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGFnZSQgPSB0aGlzLnBhZ2UuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHRvdGFsUGFnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgdG90YWxQYWdlcyQgPSB0aGlzLnRvdGFsUGFnZXMuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHBlcmNlbnRhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGVyY2VudGFnZSQgPSB0aGlzLnBlcmNlbnRhZ2UuYXNPYnNlcnZhYmxlKClcbiAgLy8gLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFzRGF0YWJhc2UgPSBmYWxzZVxuXG4gIHN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQVBJX09QVFMpIHByaXZhdGUgYXBpT3B0aW9ucyA9IEFwaVJlcXVlc3QuYWRhcHQoKSxcbiAgICBASW5qZWN0KFwiZGF0YVR5cGVcIikgcHJpdmF0ZSBkYXRhVHlwZTogRGF0YVR5cGUgfCB1bmRlZmluZWQsXG4gICAgQEluamVjdChcImRhdGFiYXNlXCIpIHByaXZhdGUgZGF0YWJhc2U/OiBEYXRhYmFzZVN0b3JhZ2UgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZGVmYXVsdFN0YXRlKTtcbiAgICB0aGlzLnNldEFwaVJlcXVlc3RPcHRpb25zKGFwaU9wdGlvbnMsIGRhdGFUeXBlLCBkYXRhYmFzZSlcbiAgfVxuXG4gIHNldEFwaVJlcXVlc3RPcHRpb25zKGFwaU9wdGlvbnM/OiBBcGlSZXF1ZXN0LCBkYXRhVHlwZT86IERhdGFUeXBlLCBkYXRhYmFzZT86IERhdGFiYXNlU3RvcmFnZSkge1xuXG4gICAgdGhpcy5hcGlPcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdChhcGlPcHRpb25zKVxuICAgIHRoaXMuZGF0YVR5cGUgPSAoZGF0YVR5cGUpID8gZGF0YVR5cGUgOiBEYXRhVHlwZS5BUlJBWVxuXG4gICAgdGhpcy5oYXNEYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2U/LnRhYmxlID09PSBcIlwiID8gZmFsc2UgOiB0cnVlXG4gICAgdGhpcy5kYXRhYmFzZSA9ICh0aGlzLmhhc0RhdGFiYXNlKSA/IERhdGFiYXNlU3RvcmFnZS5hZGFwdChkYXRhYmFzZSkgOiB1bmRlZmluZWRcblxuICB9XG5cbiAgZ2V0IEFwaVJlcXVlc3RPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFwaU9wdGlvbnNcbiAgfVxuXG4gIGluaXRTdG9yYWdlKCkge1xuICAgIC8vIGlmKHRoaXMub3RoZXJPcHRpb25zLmRhdGFiYXNlKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnSGFzIERhdGFiYXNlIE9wdGlvbjonLCB0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZS50YWJsZSlcbiAgICAgIC8vIGNvbnN0IHNjaGVtYSA9ICh0aGlzLm90aGVyT3B0aW9ucy5hZGFwdGVycz8uaW5jb21pbmcpID8gT2JqZWN0LmtleXModGhpcy5vdGhlck9wdGlvbnMuYWRhcHRlcnMuaW5jb21pbmcoe30pKS5qb2luKCkgOiAnKytpZCdcbiAgICAgIC8vIHRoaXMuYXBpU2VydmljZS5pbml0REIodGhpcy5vdGhlck9wdGlvbnMuZGF0YWJhc2UuZXhwaXJlc0luLCB0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZS50YWJsZSwgc2NoZW1hKVxuICAgIC8vIH1cbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTRUxFQ1RPUlNcblxuICByZWFkb25seSBkYXRhJCA9IHRoaXMuc2VsZWN0KCh7IGRhdGEsIGRhdGFPYmplY3QgfSkgPT4ge1xuICAgIGNvbnN0IGlzQXJyYXkgPSggdGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gdHJ1ZSA6IGZhbHNlXG4gICAgcmV0dXJuIChpc0FycmF5KSA/IGRhdGEgOiBkYXRhT2JqZWN0XG4gIH0pXG5cbiAgcmVhZG9ubHkgc2VsZWN0UmVjb3JkJCA9IChpZDogbnVtYmVyKSA9PiB0aGlzLnNlbGVjdChcbiAgICB0aGlzLmRhdGEkLFxuICAgIChkYXRhKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gZGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpIGFzIFQgfCBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVCkuaWQgPT09IGlkID8gZGF0YSA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBVUERBVEVSU1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0RGF0YSQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+LCBkYXRhOiBUIHwgVFtdIHwgYW55KSA9PiB7XG5cbiAgICBpZiAoIWRhdGEpIHJldHVybiBzdGF0ZTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuXG4gICAgICBjb25zdCBkYXRhQXJyYXkgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXVxuXG4gICAgICBjb25zdCBzdGF0ZURhdGFTYW1wbGUgPSAoc3RhdGUuZGF0YS5sZW5ndGggPiAwKSA/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFbMF0pIDogW11cbiAgICAgIGNvbnN0IG5ld0RhdGFTYW1wbGUgPSAoZGF0YUFycmF5Lmxlbmd0aCA+IDApID8gT2JqZWN0LmtleXMoZGF0YUFycmF5WzBdKSA6IFtdXG5cbiAgICAgIGNvbnN0IGlzU2FtZSA9IChzdGF0ZS5kYXRhLmxlbmd0aCA9PT0gMCkgPyBmYWxzZSA6IHN0YXRlRGF0YVNhbXBsZS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gbmV3RGF0YVNhbXBsZVtpbmRleF0pXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9ICghaXNTYW1lICYmIGRhdGFBcnJheS5sZW5ndGggIT09IDApID8gdGhpcy51cGRhdGVBcnJheVN0YXRlKFtdLCBkYXRhQXJyYXkpIDogdGhpcy51cGRhdGVBcnJheVN0YXRlKHN0YXRlLmRhdGEsIGRhdGFBcnJheSlcblxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IHVwZGF0ZWREYXRhLCBkYXRhT2JqZWN0OiBudWxsIH0gYXMgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPjtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhT2JqZWN0ID0gdGhpcy5pc0VtcHR5KGRhdGEpID8gbnVsbCA6IGRhdGE7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0YTogW10sIGRhdGFPYmplY3Q6IGRhdGFPYmplY3QgfSBhcyBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+O1xuICAgIH1cblxuICB9KTtcblxuICBwcml2YXRlIHVwZGF0ZUFycmF5U3RhdGUoY3VycmVudERhdGE6IGFueVtdLCBuZXdEYXRhOiBhbnlbXSk6IGFueVtdIHtcblxuICAgIGNvbnN0IGZpbHRlckN1cnJlbnREYXRhID0gKCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5zdHJlYW1lZFJlc3BvbnNlLm1hcCgob2JqOiBhbnkpID0+IG9iai5pZClcbiAgICAgIHJldHVybiBjdXJyZW50RGF0YS5maWx0ZXIob2JqID0+IChvYmouaWQpID8gaWRzLmluY2x1ZGVzKG9iai5pZCkgOiBvYmopXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDdXJyZW50RGF0YSA9ICh0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcudmFsdWUpID8gY3VycmVudERhdGEgOiBmaWx0ZXJDdXJyZW50RGF0YSgpXG5cbiAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGZpbHRlcmVkQ3VycmVudERhdGEubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBuZXdJdGVtID0gbmV3RGF0YS5maW5kKG5ld0l0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0lkID0gKG5ld0l0ZW0/LmlkICYmIGl0ZW0/LmlkKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgIHJldHVybiAoaGFzSWQpID8gbmV3SXRlbS5pZCA9PT0gaXRlbS5pZCA6IEpTT04uc3RyaW5naWZ5KG5ld0l0ZW0pID09PSBKU09OLnN0cmluZ2lmeShpdGVtKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gKG5ld0l0ZW0pID8geyAuLi5pdGVtLCAuLi5uZXdJdGVtIH0gOiBpdGVtXG4gICAgfSlcblxuICAgIGNvbnN0IGFkZGVkRGF0YSA9IG5ld0RhdGEuZmlsdGVyKG5ld0l0ZW0gPT4ge1xuICAgICAgcmV0dXJuICFmaWx0ZXJlZEN1cnJlbnREYXRhLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFzSWQgPSAobmV3SXRlbT8uaWQgJiYgaXRlbT8uaWQpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgcmV0dXJuIChoYXNJZCkgPyBpdGVtLmlkID09PSBuZXdJdGVtLmlkIDogSlNPTi5zdHJpbmdpZnkobmV3SXRlbSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gWy4uLnVwZGF0ZWREYXRhLCAuLi5hZGRlZERhdGFdXG5cbn1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFkZERhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhLCBkYXRhXTtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBkYXRhIH0gfVxuICAgIH1cblxuICB9KVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVsZXRlRGF0YSQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+LCBkYXRhOiBUICYgeyBpZDogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlLmRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gZGF0YS5pZClcbiAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhOiBuZXdTdGF0ZSB9IH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLnsgZGF0YU9iamVjdDogbnVsbCB9IH1cbiAgICB9XG4gIH0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVEYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQpID0+IHtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuXG4gICAgICBjb25zdCBvYmpJbmRleCA9IHN0YXRlLmRhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZGF0YS5pZClcblxuICAgICAgaWYgKG9iakluZGV4ID4gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBbLi4uc3RhdGUuZGF0YV1cbiAgICAgICAgbmV3U3RhdGVbb2JqSW5kZXhdID0gZGF0YVxuICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhOiBuZXdTdGF0ZSB9IH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlXG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIC4uLnsgZGF0YU9iamVjdDogZGF0YSB9IH1cbiAgICB9XG5cbiAgfSlcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFRkZFQ1RTXG5cbiAgcmVhZG9ubHkgY2xlYXJSZWNvcmRzID0gdGhpcy5lZmZlY3QoZGF0YSA9PlxuICAgIGRhdGEucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YSQoW10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhJCh7fSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgKSlcblxuICByZWFkb25seSByZWZyZXNoRGF0YSA9IHRoaXMuZWZmZWN0KGRhdGEgPT5cbiAgICBkYXRhLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmFwaVNlcnZpY2UuZmx1c2hEYXRhYmFzZSh0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZT8udGFibGUpXG4gICAgICAgIHRoaXMuZmV0Y2hSZWNvcmRzKClcbiAgICAgIH0pXG4gICkpXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ1JVRCBPUEVSQVRJT05TXG5cbiAgLy8gRkVUQ0ggUkVDT1JEU1xuICByZWFkb25seSBmZXRjaFJlY29yZHMgPSAob3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICBvZihSZXF1ZXN0T3B0aW9ucy5hZGFwdChvcHRpb25zKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhJChkYXRhKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyBDUkVBVEUgUkVDT1JEXG4gIHJlYWRvbmx5IGNyZWF0ZVJlY29yZCA9IChkYXRhOiBhbnl8bnVsbCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnBvc3RSZXF1ZXN0KGRhdGEsIHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgZGF0YSA9ICghZGF0YSkgPyAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gW10gOiB7fSA6IGRhdGFcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0YSQoZGF0YSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIFVQREFURSBSRUNPUkRcbiAgcmVhZG9ubHkgdXBkYXRlUmVjb3JkID0gKGRhdGE6IGFueXxudWxsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IFtdXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5wdXRSZXF1ZXN0KGRhdGEsIHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgZGF0YSA9ICghZGF0YSkgPyAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpID8gW10gOiB7fSA6IGRhdGFcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSQoZGF0YSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIERFTEVURSBSRUNPUkRcbiAgcmVhZG9ubHkgZGVsZXRlUmVjb3JkID0gKG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2Yob3B0aW9ucykucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmRlbGV0ZVJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5kZWxldGVEYXRhJChkYXRhKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRkVUQ0ggU1RSRUFNXG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RyZWFtID0gKGRhdGE6IGFueXxudWxsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UucG9zdFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfTtcblxuICAgICAgICAgIH0sIHsgcHJldmlvdXM6IG51bGwsIGN1cnJlbnQ6IG51bGwgfSksXG4gICAgICAgICAgdGFwKCh7IHByZXZpb3VzLCBjdXJyZW50IH0pID0+IHtcblxuICAgICAgICAgICAgaWYocHJldmlvdXMgJiYgSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KSkge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KHRydWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuXG4gIClcblxuICByZWFkb25seSBmZXRjaFN0cmVhbSA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKG9wdGlvbnMpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuc3RyZWFtID0gdHJ1ZVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5nZXRSZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfVxuXG4gICAgICAgICAgfSwgeyBwcmV2aW91czogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICAgICAgICB0YXAoKHsgcHJldmlvdXMsIGN1cnJlbnQgfSkgPT4ge1xuXG4gICAgICAgICAgICBpZihwcmV2aW91cyAmJiBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSksXG4gICAgKVxuICApXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTUlTQ1xuXG4gIHByaXZhdGUgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMFxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZXF1ZXN0T3B0aW9ucyhoZWFkZXJzPzogYW55KTogQXBpUmVxdWVzdCB7XG5cbiAgICBjb25zdCBvcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdCh7IC4uLnRoaXMuYXBpT3B0aW9ucyB9KVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gKGhlYWRlcnMpXG4gICAgICAgICAgPyB7IC4uLm9wdGlvbnMuaGVhZGVycywgLi4uaGVhZGVycyB9XG4gICAgICAgICAgOiB7IC4uLm9wdGlvbnMuaGVhZGVycyB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbn1cbiJdfQ==
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLXN0YXRlLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9odHRwLW1hbmFnZXItc3RhdGUuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFJdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQWEsVUFBVSxDQUFDLENBQUM7QUFPNUQsTUFBTSxZQUFZLEdBQTZCO0lBQzdDLElBQUksRUFBRSxFQUFFO0lBQ1IsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQztBQUdGLE1BQU0sT0FBTyx1QkFBa0QsU0FBUSxjQUFzQztJQWtDM0csWUFDNEIsYUFBYSxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQzdCLFFBQThCLEVBQzlCLFFBQXNDO1FBRWxFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUpNLGVBQVUsR0FBVixVQUFVLENBQXFC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Q0FBQzsrR0FyZ0JVLHVCQUF1QixrQkFtQ3hCLFFBQVEsYUFDUixVQUFVLGFBQ1YsVUFBVTttSEFyQ1QsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOzswQkFvQ04sTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgY29uY2F0TWFwLCBzY2FuLCBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFiYXNlU3RvcmFnZSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhYmFzZS1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7IEhUVFBNYW5hZ2VyU2VydmljZSwgRGF0YVR5cGUgfSBmcm9tICcuLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdCwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDaGFubmVsSW5mbyB9IGZyb20gJy4uL3dzLW1hbmFnZXItc2VydmljZS9tb2RlbHMvYXNzb3J0bWVudC1kYXRhLm1vZGVsJztcblxuXG5jb25zdCBBUElfT1BUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcGlSZXF1ZXN0PignQVBJX09QVFMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBBUElTdGF0ZU1hbmFnZXJEYXRhPFQ+IHtcbiAgZGF0YTogVFtdXG4gIGRhdGFPYmplY3Q6IFQgfCBudWxsXG59XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxhbnk+ID0ge1xuICBkYXRhOiBbXSxcbiAgZGF0YU9iamVjdDogbnVsbCxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclN0YXRlU2VydmljZTxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIH0+IGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8QVBJU3RhdGVNYW5hZ2VyRGF0YTxUPj4ge1xuXG4gIGh0dHBNYW5hZ2VyU2VydmljZSA9IGluamVjdChIVFRQTWFuYWdlclNlcnZpY2UpXG5cbiAgZXJyb3IkID0gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZXJyb3IkXG4gIGlzUGVuZGluZyQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmckLnBpcGUoZGVsYXkoMSkpXG5cbiAgLy8gUEFHSU5BVElPTlxuICBwcml2YXRlIHBhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGFnZSQgPSB0aGlzLnBhZ2UuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHRvdGFsUGFnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgdG90YWxQYWdlcyQgPSB0aGlzLnRvdGFsUGFnZXMuYXNPYnNlcnZhYmxlKClcblxuICBwcml2YXRlIHBlcmNlbnRhZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcGVyY2VudGFnZSQgPSB0aGlzLnBlcmNlbnRhZ2UuYXNPYnNlcnZhYmxlKClcbiAgLy8gLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaGFzRGF0YWJhc2UgPSBmYWxzZVxuXG4gIHN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuXG4gIC8vIFdTXG4gIHN0YXR1cyQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJDtcblxuICBtZXNzYWdlcyQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBjb25uZWN0aW9uU3RhdHVzJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgdXNlckxpc3Q6IHN0cmluZ1tdID0gW11cbiAgY2hhbm5lbHM6IENoYW5uZWxJbmZvW10gPSBbXVxuICBjaGFubmVsTGlzdDogc3RyaW5nW10gPSBbXVxuICBtZXNzYWdlczogYW55W10gPSBbXVxuICB3c0Nvbm5lY3Rpb24gPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQVBJX09QVFMpIHByaXZhdGUgYXBpT3B0aW9ucyA9IEFwaVJlcXVlc3QuYWRhcHQoKSxcbiAgICBASW5qZWN0KFwiZGF0YVR5cGVcIikgcHJpdmF0ZSBkYXRhVHlwZTogRGF0YVR5cGUgfCB1bmRlZmluZWQsXG4gICAgQEluamVjdChcImRhdGFiYXNlXCIpIHByaXZhdGUgZGF0YWJhc2U/OiBEYXRhYmFzZVN0b3JhZ2UgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZGVmYXVsdFN0YXRlKTtcbiAgICB0aGlzLnNldEFwaVJlcXVlc3RPcHRpb25zKGFwaU9wdGlvbnMsIGRhdGFUeXBlLCBkYXRhYmFzZSlcbiAgfVxuXG4gIHNldEFwaVJlcXVlc3RPcHRpb25zKGFwaU9wdGlvbnM/OiBBcGlSZXF1ZXN0LCBkYXRhVHlwZT86IERhdGFUeXBlLCBkYXRhYmFzZT86IERhdGFiYXNlU3RvcmFnZSkge1xuXG4gICAgdGhpcy5hcGlPcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdChhcGlPcHRpb25zKVxuICAgIHRoaXMuZGF0YVR5cGUgPSAoZGF0YVR5cGUpID8gZGF0YVR5cGUgOiBEYXRhVHlwZS5BUlJBWVxuXG4gICAgdGhpcy5oYXNEYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2U/LnRhYmxlID09PSBcIlwiID8gZmFsc2UgOiB0cnVlXG4gICAgdGhpcy5kYXRhYmFzZSA9ICh0aGlzLmhhc0RhdGFiYXNlKSA/IERhdGFiYXNlU3RvcmFnZS5hZGFwdChkYXRhYmFzZSkgOiB1bmRlZmluZWRcblxuICAgIGNvbnNvbGUubG9nKCdXUyBBUEkgT3B0aW9uczonLCB0aGlzLmFwaU9wdGlvbnMud3MpXG4gICAgdGhpcy5pbml0V1ModGhpcy5hcGlPcHRpb25zLndzKVxuICB9XG5cbiAgaW5pdFdTKHdzT3B0aW9uczogYW55KSB7XG5cbiAgICBpZih3c09wdGlvbnM/LndzU2VydmVyKSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5jb25uZWN0KHdzT3B0aW9ucy53c1NlcnZlciwgd3NPcHRpb25zLmp3dFRva2VuKVxuXG4gICAgICAvLyBjb25uZWN0aW9uIHN0YXR1c1xuICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQgPSB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJFxuICAgIC5zdWJzY3JpYmUoXG4gICAgICAoaXNDb25uZWN0ZWQ6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMud3NDb25uZWN0aW9uID0gaXNDb25uZWN0ZWRcblxuICAgICAgICBpZiAoaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn8J+foiBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBvcGVuLicpXG4gICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZ2V0QWxsQ2hhbm5lbHMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5S0IFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZC4nKVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICApXG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gaW5jb21pbmcgbWVzc2FnZXNcbiAgICB0aGlzLm1lc3NhZ2VzJCA9IHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLm1lc3NhZ2VzJFxuICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IGFueSkgPT4ge1xuXG4gICAgICBpZighbWVzc2FnZSkgcmV0dXJuXG5cbiAgICAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIG1lc3NhZ2U6JywgbWVzc2FnZSlcblxuICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NoYW5uZWxzTGlzdCc6XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5KsIENoYW5uZWxzOicsIG1lc3NhZ2UuY2hhbm5lbHMpXG5cbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbExpc3QgPSBtZXNzYWdlLmNoYW5uZWxzXG5cbiAgICAgICAgICAgIGlmKHRoaXMuY2hhbm5lbExpc3QuaW5jbHVkZXMod3NPcHRpb25zLmlkKSkge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5zdWJzY3JpYmVUb0NoYW5uZWwod3NPcHRpb25zLmlkKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuY3JlYXRlQ2hhbm5lbCh3c09wdGlvbnMuaWQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2hhbm5lbE1lc3NhZ2UnOlxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn8J+SrCBNZXNzYWdlOicsIG1lc3NhZ2UuY29udGVudClcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hSZWNvcmQoUmVxdWVzdE9wdGlvbnMuYWRhcHQoeyBwYXRoOiBtZXNzYWdlLmNvbnRlbnQucGF0aCB9KSwgbWVzc2FnZS5jb250ZW50Lm1ldGhvZClcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd1c2Vyc0luQ2hhbm5lbCc6XG5cbiAgICAgICAgICAgIHRoaXMudXNlckxpc3QgPSBtZXNzYWdlLnVzZXJzXG4gICAgICAgICAgICBjb25zb2xlLmxvZygn8J+RpSBVc2VyczonLCBtZXNzYWdlLnVzZXJzKVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG5cbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgIH0pXG5cbiAgfVxuXG4gIGdldCBBcGlSZXF1ZXN0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlPcHRpb25zXG4gIH1cblxuICBpbml0U3RvcmFnZSgpIHtcbiAgICAvLyBpZih0aGlzLm90aGVyT3B0aW9ucy5kYXRhYmFzZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0hhcyBEYXRhYmFzZSBPcHRpb246JywgdGhpcy5vdGhlck9wdGlvbnMuZGF0YWJhc2UudGFibGUpXG4gICAgICAvLyBjb25zdCBzY2hlbWEgPSAodGhpcy5vdGhlck9wdGlvbnMuYWRhcHRlcnM/LmluY29taW5nKSA/IE9iamVjdC5rZXlzKHRoaXMub3RoZXJPcHRpb25zLmFkYXB0ZXJzLmluY29taW5nKHt9KSkuam9pbigpIDogJysraWQnXG4gICAgICAvLyB0aGlzLmFwaVNlcnZpY2UuaW5pdERCKHRoaXMub3RoZXJPcHRpb25zLmRhdGFiYXNlLmV4cGlyZXNJbiwgdGhpcy5vdGhlck9wdGlvbnMuZGF0YWJhc2UudGFibGUsIHNjaGVtYSlcbiAgICAvLyB9XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZXREYXRhJChkYXRhKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU0VMRUNUT1JTXG5cbiAgcmVhZG9ubHkgZGF0YSQgPSB0aGlzLnNlbGVjdCgoeyBkYXRhLCBkYXRhT2JqZWN0IH0pID0+IHtcbiAgICBjb25zdCBpc0FycmF5ID0oIHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IHRydWUgOiBmYWxzZVxuICAgIHJldHVybiAoaXNBcnJheSkgPyBkYXRhIDogZGF0YU9iamVjdFxuICB9KVxuXG4gIHJlYWRvbmx5IHNlbGVjdFJlY29yZCQgPSAoaWQ6IG51bWJlcikgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKSBhcyBUIHwgbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChkYXRhIGFzIFQpLmlkID09PSBpZCA/IGRhdGEgOiBudWxsXG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVVBEQVRFUlNcblxuICBwcml2YXRlIHJlYWRvbmx5IHNldERhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCB8IFRbXSB8IGFueSkgPT4ge1xuXG4gICAgaWYgKCFkYXRhKSByZXR1cm4gc3RhdGU7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcblxuICAgICAgY29uc3QgZGF0YUFycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV1cblxuICAgICAgY29uc3Qgc3RhdGVEYXRhU2FtcGxlID0gKHN0YXRlLmRhdGEubGVuZ3RoID4gMCkgPyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhWzBdKSA6IFtdXG4gICAgICBjb25zdCBuZXdEYXRhU2FtcGxlID0gKGRhdGFBcnJheS5sZW5ndGggPiAwKSA/IE9iamVjdC5rZXlzKGRhdGFBcnJheVswXSkgOiBbXVxuXG4gICAgICBjb25zdCBpc1NhbWUgPSAoc3RhdGUuZGF0YS5sZW5ndGggPT09IDApID8gZmFsc2UgOiBzdGF0ZURhdGFTYW1wbGUuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IG5ld0RhdGFTYW1wbGVbaW5kZXhdKVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSAoIWlzU2FtZSAmJiBkYXRhQXJyYXkubGVuZ3RoICE9PSAwKSA/IHRoaXMudXBkYXRlQXJyYXlTdGF0ZShbXSwgZGF0YUFycmF5KSA6IHRoaXMudXBkYXRlQXJyYXlTdGF0ZShzdGF0ZS5kYXRhLCBkYXRhQXJyYXkpXG5cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhOiB1cGRhdGVkRGF0YSwgZGF0YU9iamVjdDogbnVsbCB9IGFzIEFQSVN0YXRlTWFuYWdlckRhdGE8VD47XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YU9iamVjdCA9IHRoaXMuaXNFbXB0eShkYXRhKSA/IG51bGwgOiBkYXRhO1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IFtdLCBkYXRhT2JqZWN0OiBkYXRhT2JqZWN0IH0gYXMgQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPjtcbiAgICB9XG5cbiAgfSk7XG5cbiAgcHJpdmF0ZSB1cGRhdGVBcnJheVN0YXRlKGN1cnJlbnREYXRhOiBhbnlbXSwgbmV3RGF0YTogYW55W10pOiBhbnlbXSB7XG5cbiAgICBjb25zdCBmaWx0ZXJDdXJyZW50RGF0YSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuc3RyZWFtZWRSZXNwb25zZS5tYXAoKG9iajogYW55KSA9PiBvYmouaWQpXG4gICAgICByZXR1cm4gY3VycmVudERhdGEuZmlsdGVyKG9iaiA9PiAob2JqLmlkKSA/IGlkcy5pbmNsdWRlcyhvYmouaWQpIDogb2JqKVxuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkQ3VycmVudERhdGEgPSAodGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLnZhbHVlKSA/IGN1cnJlbnREYXRhIDogZmlsdGVyQ3VycmVudERhdGEoKVxuXG4gICAgY29uc3QgdXBkYXRlZERhdGEgPSBmaWx0ZXJlZEN1cnJlbnREYXRhLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ld0RhdGEuZmluZChuZXdJdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBoYXNJZCA9IChuZXdJdGVtPy5pZCAmJiBpdGVtPy5pZCkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICByZXR1cm4gKGhhc0lkKSA/IG5ld0l0ZW0uaWQgPT09IGl0ZW0uaWQgOiBKU09OLnN0cmluZ2lmeShuZXdJdGVtKSA9PT0gSlNPTi5zdHJpbmdpZnkoaXRlbSlcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIChuZXdJdGVtKSA/IHsgLi4uaXRlbSwgLi4ubmV3SXRlbSB9IDogaXRlbVxuICAgIH0pXG5cbiAgICBjb25zdCBhZGRlZERhdGEgPSBuZXdEYXRhLmZpbHRlcihuZXdJdGVtID0+IHtcbiAgICAgIHJldHVybiAhZmlsdGVyZWRDdXJyZW50RGF0YS5zb21lKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0lkID0gKG5ld0l0ZW0/LmlkICYmIGl0ZW0/LmlkKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgIHJldHVybiAoaGFzSWQpID8gaXRlbS5pZCA9PT0gbmV3SXRlbS5pZCA6IEpTT04uc3RyaW5naWZ5KG5ld0l0ZW0pID09PSBKU09OLnN0cmluZ2lmeShpdGVtKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIFsuLi51cGRhdGVkRGF0YSwgLi4uYWRkZWREYXRhXVxuXG59XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhZGREYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQpID0+IHtcblxuICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuQVJSQVkpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHN0YXRlLmRhdGEuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGRhdGEuaWQpO1xuXG4gICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBzdGF0ZS5kYXRhLm1hcChpdGVtID0+XG4gICAgICAgICAgaXRlbS5pZCA9PT0gZGF0YS5pZCA/IGRhdGEgOiBpdGVtXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IHVwZGF0ZWREYXRhIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhLCBkYXRhXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGRhdGE6IG5ld1N0YXRlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBkYXRhT2JqZWN0OiBkYXRhIH07XG4gICAgfVxuXG4gIH0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWxldGVEYXRhJCA9IHRoaXMudXBkYXRlcigoc3RhdGU6IEFQSVN0YXRlTWFuYWdlckRhdGE8VD4sIGRhdGE6IFQgJiB7IGlkOiBudW1iZXIgfSkgPT4ge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gc3RhdGUuZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBkYXRhLmlkKVxuICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBudWxsIH0gfVxuICAgIH1cbiAgfSlcblxuICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZURhdGEkID0gdGhpcy51cGRhdGVyKChzdGF0ZTogQVBJU3RhdGVNYW5hZ2VyRGF0YTxUPiwgZGF0YTogVCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG5cbiAgICAgIGNvbnN0IG9iakluZGV4ID0gc3RhdGUuZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKVxuXG4gICAgICBpZiAob2JqSW5kZXggPiAtMSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IFsuLi5zdGF0ZS5kYXRhXVxuICAgICAgICBuZXdTdGF0ZVtvYmpJbmRleF0gPSBkYXRhXG4gICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi57IGRhdGE6IG5ld1N0YXRlIH0gfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ueyBkYXRhT2JqZWN0OiBkYXRhIH0gfVxuICAgIH1cblxuICB9KVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVGRkVDVFNcblxuICByZWFkb25seSBjbGVhclJlY29yZHMgPSB0aGlzLmVmZmVjdChkYXRhID0+XG4gICAgZGF0YS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEkKHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICApKVxuXG4gIHJlYWRvbmx5IHJlZnJlc2hEYXRhID0gdGhpcy5lZmZlY3QoZGF0YSA9PlxuICAgIGRhdGEucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuYXBpU2VydmljZS5mbHVzaERhdGFiYXNlKHRoaXMub3RoZXJPcHRpb25zLmRhdGFiYXNlPy50YWJsZSlcbiAgICAgICAgdGhpcy5mZXRjaFJlY29yZHMoKVxuICAgICAgfSlcbiAgKSlcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDUlVEIE9QRVJBVElPTlNcblxuICAvLyBGRVRDSCBSRUNPUkRTXG4gIHJlYWRvbmx5IGZldGNoUmVjb3JkcyA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcblxuICAgICAgICB0aGlzLnN0cmVhbWVkUmVzcG9uc2UgPSBbXVxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuZ2V0UmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucz8ucGF0aClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLnNldERhdGEkKGRhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICB9KVxuICAgIClcbiAgKVxuXG4gIC8vIEZFVENIIFJFQ09SRFxuICByZWFkb25seSBmZXRjaFJlY29yZCA9IChvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgbWV0aG9kOiBzdHJpbmcpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKFJlcXVlc3RPcHRpb25zLmFkYXB0KG9wdGlvbnMpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmdldFJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG5cbiAgICAgICAgICAgIGNvbnN0IGlkID0gKG9wdGlvbnMgYXMgYW55KS5wYXRoPy5sZW5ndGggPyBvcHRpb25zLnBhdGhbb3B0aW9ucy5wYXRoLmxlbmd0aCAtMV0gOiAwXG5cbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ0RFTEVURScpIHRoaXMuZGVsZXRlRGF0YSQoeyBpZCB9IGFzIFQgJiB7IGlkOiBudW1iZXIgfSlcbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ1VQREFURScpIHRoaXMudXBkYXRlRGF0YSQoZGF0YSlcbiAgICAgICAgICAgIGlmKG1ldGhvZCA9PT0gJ0NSRUFURScpIHRoaXMuYWRkRGF0YSQoZGF0YSlcblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyBDUkVBVEUgUkVDT1JEXG4gIHJlYWRvbmx5IGNyZWF0ZVJlY29yZCA9IChkYXRhOiBhbnl8bnVsbCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PlxuICAgIHRoaXMuZWZmZWN0PGFueT4oKCkgPT5cbiAgICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnBvc3RSZXF1ZXN0KGRhdGEsIHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5hZGREYXRhJChkYXRhKVxuXG4gICAgICAgICAgICBpZih0aGlzLndzQ29ubmVjdGlvbikgdGhpcy53c0NvbW11bmljYXRpb24oJ0NSRUFURScsIFsuLi5vcHRpb25zPy5wYXRoIHx8IFtdLCBkYXRhLmlkXSlcblxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gVVBEQVRFIFJFQ09SRFxuICByZWFkb25seSB1cGRhdGVSZWNvcmQgPSAoZGF0YTogYW55fG51bGwsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT5cbiAgICB0aGlzLmVmZmVjdDxhbnk+KCgpID0+XG4gICAgb2YoZGF0YSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5zdHJlYW1lZFJlc3BvbnNlID0gW11cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLnVwZGF0ZVJlcXVlc3RPcHRpb25zKG9wdGlvbnM/LmhlYWRlcnMpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnB1dFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSAoIWRhdGEpID8gKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLkFSUkFZKSA/IFtdIDoge30gOiBkYXRhXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGEkKGRhdGEpXG5cbiAgICAgICAgICAgIGlmKHRoaXMud3NDb25uZWN0aW9uKSB0aGlzLndzQ29tbXVuaWNhdGlvbignVVBEQVRFJywgWy4uLm9wdGlvbnM/LnBhdGggfHwgW11dKVxuXG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgfSlcbiAgICApXG4gIClcblxuICAvLyBERUxFVEUgUkVDT1JEXG4gIHJlYWRvbmx5IGRlbGV0ZVJlY29yZCA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKG9wdGlvbnMpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IFtdXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gdGhpcy51cGRhdGVSZXF1ZXN0T3B0aW9ucyhvcHRpb25zPy5oZWFkZXJzKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5kZWxldGVSZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gKCFkYXRhKSA/ICh0aGlzLmRhdGFUeXBlID09PSBEYXRhVHlwZS5BUlJBWSkgPyBbXSA6IHt9IDogZGF0YVxuICAgICAgICAgICAgdGhpcy5kZWxldGVEYXRhJChkYXRhKVxuXG4gICAgICAgICAgICBpZih0aGlzLndzQ29ubmVjdGlvbikgdGhpcy53c0NvbW11bmljYXRpb24oJ0RFTEVURScsIFsuLi5vcHRpb25zPy5wYXRoIHx8IFtdXSlcblxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuICApXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRkVUQ0ggU1RSRUFNXG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RyZWFtID0gKGRhdGE6IGFueXxudWxsLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKGRhdGEpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UucG9zdFJlcXVlc3QoZGF0YSwgcmVxdWVzdE9wdGlvbnMsIG9wdGlvbnM/LnBhdGgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfTtcblxuICAgICAgICAgIH0sIHsgcHJldmlvdXM6IG51bGwsIGN1cnJlbnQ6IG51bGwgfSksXG4gICAgICAgICAgdGFwKCh7IHByZXZpb3VzLCBjdXJyZW50IH0pID0+IHtcblxuICAgICAgICAgICAgaWYocHJldmlvdXMgJiYgSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpID09PSBKU09OLnN0cmluZ2lmeShjdXJyZW50KSkge1xuICAgICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhJChbXSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KHRydWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgIH0pXG4gICAgKVxuXG4gIClcblxuICByZWFkb25seSBmZXRjaFN0cmVhbSA9IChvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+XG4gICAgdGhpcy5lZmZlY3Q8YW55PigoKSA9PlxuICAgIG9mKG9wdGlvbnMpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zOiBhbnkpID0+IHtcblxuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHRoaXMudXBkYXRlUmVxdWVzdE9wdGlvbnMob3B0aW9ucz8uaGVhZGVycylcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuc3RyZWFtID0gdHJ1ZVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyU2VydmljZS5nZXRSZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCBvcHRpb25zPy5wYXRoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIGlmKHJlcy5sZW5ndGggPiAwKSB0aGlzLnNldERhdGEkKHJlcylcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtZWRSZXNwb25zZSA9IHJlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjYW4oKGFjYywgcmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBhY2MuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHJlc1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJldmlvdXMsIGN1cnJlbnQgfVxuXG4gICAgICAgICAgfSwgeyBwcmV2aW91czogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICAgICAgICB0YXAoKHsgcHJldmlvdXMsIGN1cnJlbnQgfSkgPT4ge1xuXG4gICAgICAgICAgICBpZihwcmV2aW91cyAmJiBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLnNldERhdGEkKFtdKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlclNlcnZpY2UuaXNQZW5kaW5nLm5leHQodHJ1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgfSksXG4gICAgKVxuICApXG5cbiAgcHJpdmF0ZSB3c0NvbW11bmljYXRpb24obWV0aG9kOiBzdHJpbmcsIHBhdGg/OiBzdHJpbmd8bnVtYmVyW10pIHtcblxuICAgIGlmKHRoaXMud3NDb25uZWN0aW9uICYmIHRoaXMuYXBpT3B0aW9ucy53cykge1xuICAgICAgY29uc3Qgd3NTZXJ2ZXIgPSB0aGlzLmFwaU9wdGlvbnMud3MuaWRcbiAgICAgIHRoaXMuaHR0cE1hbmFnZXJTZXJ2aWNlLnNlbmRNZXNzYWdlKHdzU2VydmVyLCB7IG1ldGhvZCwgcGF0aCB9KVxuICAgIH1cblxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTUlTQ1xuXG4gIHByaXZhdGUgaXNFbXB0eShvYmo6IGFueSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMFxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSZXF1ZXN0T3B0aW9ucyhoZWFkZXJzPzogYW55KTogQXBpUmVxdWVzdCB7XG5cbiAgICBjb25zdCBvcHRpb25zID0gQXBpUmVxdWVzdC5hZGFwdCh7IC4uLnRoaXMuYXBpT3B0aW9ucyB9KVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gKGhlYWRlcnMpXG4gICAgICAgICAgPyB7IC4uLm9wdGlvbnMuaGVhZGVycywgLi4uaGVhZGVycyB9XG4gICAgICAgICAgOiB7IC4uLm9wdGlvbnMuaGVhZGVycyB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { RetryOptions } from "../../request-manager-services";
2
2
  export class ApiRequest {
3
- constructor(server = '', path, headers, adapter, mapper, polling, retry, stream, displayError, saveAs) {
3
+ constructor(server = '', path, headers, adapter, mapper, polling, retry, stream, displayError, saveAs, ws) {
4
4
  this.server = server;
5
5
  this.path = path;
6
6
  this.headers = headers;
@@ -11,10 +11,11 @@ export class ApiRequest {
11
11
  this.stream = stream;
12
12
  this.displayError = displayError;
13
13
  this.saveAs = saveAs;
14
+ this.ws = ws;
14
15
  }
15
16
  static adapt(item) {
16
17
  const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';
17
- return new ApiRequest(server, (item?.path) ? item.path : [], (item?.headers) ? item.headers : {}, item?.adapter, item?.mapper, item?.polling ? Math.floor(item.polling) : 0, item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(), (item?.stream) ? item.stream : false, (item?.displayError) ? item.displayError : false, item?.saveAs);
18
+ return new ApiRequest(server, (item?.path) ? item.path : [], (item?.headers) ? item.headers : {}, item?.adapter, item?.mapper, item?.polling ? Math.floor(item.polling) : 0, item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(), (item?.stream) ? item.stream : false, (item?.displayError) ? item.displayError : false, item?.saveAs, item?.ws);
18
19
  }
19
20
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlcXVlc3QubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFlN0QsTUFBTSxPQUFPLFVBQVU7SUFFckIsWUFDUyxTQUFTLEVBQUUsRUFDWCxJQUFZLEVBQ1osT0FBYSxFQUNiLE9BQWEsRUFDYixNQUFZLEVBQ1osT0FBZ0IsRUFDaEIsS0FBb0IsRUFDcEIsTUFBZ0IsRUFDaEIsWUFBc0IsRUFDdEIsTUFBZTtRQVRmLFdBQU0sR0FBTixNQUFNLENBQUs7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBTTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQU07UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFNO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUztJQUNyQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFeEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxFQUNOLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQzdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ25DLElBQUksRUFBRSxPQUFPLEVBQ2IsSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUNuRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNwQyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNoRCxJQUFJLEVBQUUsTUFBTSxDQUNiLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRyeU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzXCJcblxuZXhwb3J0IGludGVyZmFjZSBBcGlSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgc2VydmVyOiBzdHJpbmdcbiAgcGF0aD86IGFueVtdXG4gIGhlYWRlcnM/OiBhbnlcbiAgYWRhcHRlcj86IGFueVxuICBtYXBwZXI/OiBhbnlcbiAgcG9sbGluZz86IG51bWJlciAvLyBzZWNvbmRzICh1bmRlZmluZWQgfCAwID0gbm9uZSlcbiAgcmV0cnk/OiBSZXRyeU9wdGlvbnNcbiAgc3RyZWFtPzogYm9vbGVhblxuICBkaXNwbGF5RXJyb3I/OiBib29sZWFuXG4gIHNhdmVBcz86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdCBpbXBsZW1lbnRzIEFwaVJlcXVlc3RJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzZXJ2ZXIgPSAnJyxcbiAgICBwdWJsaWMgcGF0aD86IGFueVtdLFxuICAgIHB1YmxpYyBoZWFkZXJzPzogYW55LFxuICAgIHB1YmxpYyBhZGFwdGVyPzogYW55LFxuICAgIHB1YmxpYyBtYXBwZXI/OiBhbnksXG4gICAgcHVibGljIHBvbGxpbmc/OiBudW1iZXIsXG4gICAgcHVibGljIHJldHJ5PzogUmV0cnlPcHRpb25zLFxuICAgIHB1YmxpYyBzdHJlYW0/OiBib29sZWFuLFxuICAgIHB1YmxpYyBkaXNwbGF5RXJyb3I/OiBib29sZWFuLFxuICAgIHB1YmxpYyBzYXZlQXM/OiBzdHJpbmcsXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IEFwaVJlcXVlc3Qge1xuXG4gICAgY29uc3Qgc2VydmVyID0gQXJyYXkuaXNBcnJheShpdGVtPy5zZXJ2ZXIpID8gaXRlbS5zZXJ2ZXIuam9pbignLycpIDogaXRlbT8uc2VydmVyIHx8ICcnO1xuXG4gICAgcmV0dXJuIG5ldyBBcGlSZXF1ZXN0KFxuICAgICAgc2VydmVyLFxuICAgICAgKGl0ZW0/LnBhdGgpID8gaXRlbS5wYXRoIDogW10sXG4gICAgICAoaXRlbT8uaGVhZGVycykgPyBpdGVtLmhlYWRlcnMgOiB7fSxcbiAgICAgIGl0ZW0/LmFkYXB0ZXIsXG4gICAgICBpdGVtPy5tYXBwZXIsXG4gICAgICBpdGVtPy5wb2xsaW5nID8gTWF0aC5mbG9vcihpdGVtLnBvbGxpbmcpIDogMCxcbiAgICAgIGl0ZW0/LnJldHJ5ID8gUmV0cnlPcHRpb25zLmFkYXB0KGl0ZW0ucmV0cnkpIDogUmV0cnlPcHRpb25zLmFkYXB0KCksXG4gICAgICAoaXRlbT8uc3RyZWFtKSA/IGl0ZW0uc3RyZWFtIDogZmFsc2UsXG4gICAgICAoaXRlbT8uZGlzcGxheUVycm9yKSA/IGl0ZW0uZGlzcGxheUVycm9yIDogZmFsc2UsXG4gICAgICBpdGVtPy5zYXZlQXMsXG4gICAgKVxuXG4gIH1cblxufVxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlcXVlc3QubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFpQjdELE1BQU0sT0FBTyxVQUFVO0lBRXJCLFlBQ1MsU0FBUyxFQUFFLEVBQ1gsSUFBWSxFQUNaLE9BQWEsRUFDYixPQUFhLEVBQ2IsTUFBWSxFQUNaLE9BQWdCLEVBQ2hCLEtBQW9CLEVBQ3BCLE1BQWdCLEVBQ2hCLFlBQXNCLEVBQ3RCLE1BQWUsRUFDZixFQUFjO1FBVmQsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQUNYLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFNO1FBQ2IsWUFBTyxHQUFQLE9BQU8sQ0FBTTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQU07UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2YsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUNwQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFeEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxFQUNOLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQzdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ25DLElBQUksRUFBRSxPQUFPLEVBQ2IsSUFBSSxFQUFFLE1BQU0sRUFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1QyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUNuRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNwQyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNoRCxJQUFJLEVBQUUsTUFBTSxFQUNaLElBQUksRUFBRSxFQUFFLENBQ1QsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJldHJ5T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXNcIlxuaW1wb3J0IHsgV1NPcHRpb25zIH0gZnJvbSBcIi4vd3Mtb3B0aW9ucy5tb2RlbFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVxdWVzdEludGVyZmFjZSB7XG4gIHNlcnZlcjogc3RyaW5nXG4gIHBhdGg/OiBhbnlbXVxuICBoZWFkZXJzPzogYW55XG4gIGFkYXB0ZXI/OiBhbnlcbiAgbWFwcGVyPzogYW55XG4gIHBvbGxpbmc/OiBudW1iZXIgLy8gc2Vjb25kcyAodW5kZWZpbmVkIHwgMCA9IG5vbmUpXG4gIHJldHJ5PzogUmV0cnlPcHRpb25zXG4gIHN0cmVhbT86IGJvb2xlYW5cbiAgZGlzcGxheUVycm9yPzogYm9vbGVhblxuICBzYXZlQXM/OiBzdHJpbmdcbiAgd3M/OiBXU09wdGlvbnMgLy8gV2Vic29ja2V0IE9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3QgaW1wbGVtZW50cyBBcGlSZXF1ZXN0SW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc2VydmVyID0gJycsXG4gICAgcHVibGljIHBhdGg/OiBhbnlbXSxcbiAgICBwdWJsaWMgaGVhZGVycz86IGFueSxcbiAgICBwdWJsaWMgYWRhcHRlcj86IGFueSxcbiAgICBwdWJsaWMgbWFwcGVyPzogYW55LFxuICAgIHB1YmxpYyBwb2xsaW5nPzogbnVtYmVyLFxuICAgIHB1YmxpYyByZXRyeT86IFJldHJ5T3B0aW9ucyxcbiAgICBwdWJsaWMgc3RyZWFtPzogYm9vbGVhbixcbiAgICBwdWJsaWMgZGlzcGxheUVycm9yPzogYm9vbGVhbixcbiAgICBwdWJsaWMgc2F2ZUFzPzogc3RyaW5nLFxuICAgIHB1YmxpYyB3cz86IFdTT3B0aW9ucyxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogQXBpUmVxdWVzdCB7XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSBBcnJheS5pc0FycmF5KGl0ZW0/LnNlcnZlcikgPyBpdGVtLnNlcnZlci5qb2luKCcvJykgOiBpdGVtPy5zZXJ2ZXIgfHwgJyc7XG5cbiAgICByZXR1cm4gbmV3IEFwaVJlcXVlc3QoXG4gICAgICBzZXJ2ZXIsXG4gICAgICAoaXRlbT8ucGF0aCkgPyBpdGVtLnBhdGggOiBbXSxcbiAgICAgIChpdGVtPy5oZWFkZXJzKSA/IGl0ZW0uaGVhZGVycyA6IHt9LFxuICAgICAgaXRlbT8uYWRhcHRlcixcbiAgICAgIGl0ZW0/Lm1hcHBlcixcbiAgICAgIGl0ZW0/LnBvbGxpbmcgPyBNYXRoLmZsb29yKGl0ZW0ucG9sbGluZykgOiAwLFxuICAgICAgaXRlbT8ucmV0cnkgPyBSZXRyeU9wdGlvbnMuYWRhcHQoaXRlbS5yZXRyeSkgOiBSZXRyeU9wdGlvbnMuYWRhcHQoKSxcbiAgICAgIChpdGVtPy5zdHJlYW0pID8gaXRlbS5zdHJlYW0gOiBmYWxzZSxcbiAgICAgIChpdGVtPy5kaXNwbGF5RXJyb3IpID8gaXRlbS5kaXNwbGF5RXJyb3IgOiBmYWxzZSxcbiAgICAgIGl0ZW0/LnNhdmVBcyxcbiAgICAgIGl0ZW0/LndzLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export class WSOptions {
2
+ constructor(id = '', wsServer = '', jwtToken = '', permissions) {
3
+ this.id = id;
4
+ this.wsServer = wsServer;
5
+ this.jwtToken = jwtToken;
6
+ this.permissions = permissions;
7
+ }
8
+ static adapt(item) {
9
+ return new WSOptions(item?.id, item?.wsServer, item?.jwtToken, (item?.permissions) ? item.permissions.split(',').map((p) => p.trim()) : []);
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3Mtb3B0aW9ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvbW9kZWxzL3dzLW9wdGlvbnMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDUyxLQUFhLEVBQUUsRUFDZixXQUFtQixFQUFFLEVBQ3JCLFdBQW1CLEVBQUUsRUFDckIsV0FBc0I7UUFIdEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBVztJQUM1QixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE9BQU8sSUFBSSxTQUFTLENBQ2xCLElBQUksRUFBRSxFQUFFLEVBQ1IsSUFBSSxFQUFFLFFBQVEsRUFDZCxJQUFJLEVBQUUsUUFBUSxFQUNkLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BGLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFdTT3B0aW9uc0ludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICB3c1NlcnZlcjogc3RyaW5nLFxuICAgIGp3dFRva2VuOiBzdHJpbmcsXG4gICAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXSxcbn1cblxuZXhwb3J0IGNsYXNzIFdTT3B0aW9ucyBpbXBsZW1lbnRzIFdTT3B0aW9uc0ludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGlkOiBzdHJpbmcgPSAnJyxcbiAgICBwdWJsaWMgd3NTZXJ2ZXI6IHN0cmluZyA9ICcnLFxuICAgIHB1YmxpYyBqd3RUb2tlbjogc3RyaW5nID0gJycsXG4gICAgcHVibGljIHBlcm1pc3Npb25zPzogc3RyaW5nW10sXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IFdTT3B0aW9ucyB7XG5cbiAgICByZXR1cm4gbmV3IFdTT3B0aW9ucyhcbiAgICAgIGl0ZW0/LmlkLFxuICAgICAgaXRlbT8ud3NTZXJ2ZXIsXG4gICAgICBpdGVtPy5qd3RUb2tlbixcbiAgICAgIChpdGVtPy5wZXJtaXNzaW9ucykgPyBpdGVtLnBlcm1pc3Npb25zLnNwbGl0KCcsJykubWFwKChwOiBzdHJpbmcpID0+IHAudHJpbSgpKSA6IFtdLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -11,10 +11,10 @@ export class AppService {
11
11
  this.id = id;
12
12
  this.appID = this.id;
13
13
  }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, deps: [{ token: APP_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
15
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, providedIn: 'root' }); }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppService, deps: [{ token: APP_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
15
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppService, providedIn: 'root' }); }
16
16
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, decorators: [{
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppService, decorators: [{
18
18
  type: Injectable,
19
19
  args: [{
20
20
  providedIn: 'root'
@@ -174,10 +174,10 @@ export class AsymmetricalEncryptionService {
174
174
  return testSequence$;
175
175
  }
176
176
  ;
177
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
178
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsymmetricalEncryptionService, providedIn: 'root' }); }
177
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
178
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsymmetricalEncryptionService, providedIn: 'root' }); }
179
179
  }
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsymmetricalEncryptionService, decorators: [{
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsymmetricalEncryptionService, decorators: [{
181
181
  type: Injectable,
182
182
  args: [{
183
183
  providedIn: 'root'
@@ -23,10 +23,10 @@ export class EncryptionTestService {
23
23
  }
24
24
  return this.hasHighEntropy(str);
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EncryptionTestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EncryptionTestService, providedIn: 'root' }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EncryptionTestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EncryptionTestService, providedIn: 'root' }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EncryptionTestService, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EncryptionTestService, decorators: [{
30
30
  type: Injectable,
31
31
  args: [{
32
32
  providedIn: 'root'
@@ -65,10 +65,10 @@ export class SymmetricalEncryptionService {
65
65
  const signature = hash.toString(CryptoJS.enc.Hex);
66
66
  return signature;
67
67
  }
68
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
69
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SymmetricalEncryptionService, providedIn: 'root' }); }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
69
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SymmetricalEncryptionService, providedIn: 'root' }); }
70
70
  }
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SymmetricalEncryptionService, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SymmetricalEncryptionService, decorators: [{
72
72
  type: Injectable,
73
73
  args: [{
74
74
  providedIn: 'root'