@tiba-spark/client-shared-lib 25.4.1-35 → 25.4.1-41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/esm2022/libraries/constants/version-constants.mjs +1 -10
  2. package/esm2022/libraries/enums/http-cancel-blacklist.enum.mjs +10 -8
  3. package/esm2022/libraries/enums/localization.enum.mjs +2 -1
  4. package/esm2022/libraries/guards/sub-module-guard.mjs +3 -3
  5. package/esm2022/libraries/localization/localization.action.mjs +1 -10
  6. package/esm2022/libraries/localization/localization.module.mjs +1 -4
  7. package/esm2022/libraries/localization/localization.state.mjs +5 -21
  8. package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.mjs +1 -7
  9. package/esm2022/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.mjs +5 -20
  10. package/esm2022/libraries/modules/auth/session.actions.mjs +1 -10
  11. package/esm2022/libraries/modules/auth/session.state.mjs +5 -78
  12. package/esm2022/libraries/modules/login/login.actions.mjs +1 -9
  13. package/esm2022/libraries/modules/login/login.module.mjs +4 -4
  14. package/esm2022/libraries/modules/login/login.state.mjs +5 -24
  15. package/esm2022/libraries/modules/security/security.actions.mjs +1 -8
  16. package/esm2022/libraries/modules/security/security.state.mjs +5 -18
  17. package/esm2022/libraries/modules/smartparks/smartpark.actions.mjs +1 -12
  18. package/esm2022/libraries/modules/smartparks/smartpark.state.mjs +5 -20
  19. package/esm2022/libraries/modules/tenant-logo/tenant-logo.actions.mjs +1 -7
  20. package/esm2022/libraries/modules/tenant-logo/tenant-logo.state.mjs +5 -16
  21. package/esm2022/libraries/modules/user-settings/user-settings.state.mjs +5 -57
  22. package/esm2022/libraries/resolvers/index.mjs +1 -4
  23. package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +133 -790
  24. package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +1 -560
  25. package/esm2022/libraries/service-proxy/service-proxy.module.mjs +4 -8
  26. package/esm2022/libraries/services/auth-token.service.mjs +68 -9
  27. package/esm2022/libraries/services/refresh-token.service.mjs +18 -16
  28. package/esm2022/libraries/services/smartpark.service.mjs +12 -8
  29. package/esm2022/libraries/services/tenant.service.mjs +7 -27
  30. package/fesm2022/tiba-spark-client-shared-lib.mjs +1853 -3372
  31. package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
  32. package/libraries/constants/version-constants.d.ts +0 -4
  33. package/libraries/constants/version-constants.d.ts.map +1 -1
  34. package/libraries/enums/http-cancel-blacklist.enum.d.ts.map +1 -1
  35. package/libraries/enums/localization.enum.d.ts +2 -1
  36. package/libraries/enums/localization.enum.d.ts.map +1 -1
  37. package/libraries/localization/localization.action.d.ts +0 -4
  38. package/libraries/localization/localization.action.d.ts.map +1 -1
  39. package/libraries/localization/localization.module.d.ts.map +1 -1
  40. package/libraries/localization/localization.state.d.ts +2 -4
  41. package/libraries/localization/localization.state.d.ts.map +1 -1
  42. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.d.ts +0 -5
  43. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.actions.d.ts.map +1 -1
  44. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.d.ts +3 -5
  45. package/libraries/modules/alerts-and-notifications/alerts-and-notifications.state.d.ts.map +1 -1
  46. package/libraries/modules/auth/session.actions.d.ts +0 -8
  47. package/libraries/modules/auth/session.actions.d.ts.map +1 -1
  48. package/libraries/modules/auth/session.state.d.ts +3 -9
  49. package/libraries/modules/auth/session.state.d.ts.map +1 -1
  50. package/libraries/modules/login/login.actions.d.ts +0 -7
  51. package/libraries/modules/login/login.actions.d.ts.map +1 -1
  52. package/libraries/modules/login/login.module.d.ts +1 -1
  53. package/libraries/modules/login/login.state.d.ts +3 -5
  54. package/libraries/modules/login/login.state.d.ts.map +1 -1
  55. package/libraries/modules/security/security.actions.d.ts +0 -6
  56. package/libraries/modules/security/security.actions.d.ts.map +1 -1
  57. package/libraries/modules/security/security.state.d.ts +2 -7
  58. package/libraries/modules/security/security.state.d.ts.map +1 -1
  59. package/libraries/modules/smartparks/smartpark.actions.d.ts +0 -6
  60. package/libraries/modules/smartparks/smartpark.actions.d.ts.map +1 -1
  61. package/libraries/modules/smartparks/smartpark.state.d.ts +3 -5
  62. package/libraries/modules/smartparks/smartpark.state.d.ts.map +1 -1
  63. package/libraries/modules/tenant-logo/tenant-logo.actions.d.ts +0 -5
  64. package/libraries/modules/tenant-logo/tenant-logo.actions.d.ts.map +1 -1
  65. package/libraries/modules/tenant-logo/tenant-logo.state.d.ts +3 -5
  66. package/libraries/modules/tenant-logo/tenant-logo.state.d.ts.map +1 -1
  67. package/libraries/modules/user-settings/user-settings.state.d.ts +3 -6
  68. package/libraries/modules/user-settings/user-settings.state.d.ts.map +1 -1
  69. package/libraries/resolvers/index.d.ts +0 -3
  70. package/libraries/resolvers/index.d.ts.map +1 -1
  71. package/libraries/service-proxy/cloud-service-proxies.d.ts +35 -111
  72. package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
  73. package/libraries/service-proxy/identity-service-proxies.d.ts +0 -53
  74. package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
  75. package/libraries/service-proxy/service-proxy.module.d.ts.map +1 -1
  76. package/libraries/services/auth-token.service.d.ts +4 -0
  77. package/libraries/services/auth-token.service.d.ts.map +1 -1
  78. package/libraries/services/refresh-token.service.d.ts +3 -4
  79. package/libraries/services/refresh-token.service.d.ts.map +1 -1
  80. package/libraries/services/smartpark.service.d.ts +3 -1
  81. package/libraries/services/smartpark.service.d.ts.map +1 -1
  82. package/libraries/services/tenant.service.d.ts +3 -6
  83. package/libraries/services/tenant.service.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/esm2022/libraries/resolvers/mobile-command-center-module.resolver.mjs +0 -53
  86. package/esm2022/libraries/resolvers/mobile-config.resolver.mjs +0 -21
  87. package/esm2022/libraries/resolvers/mobile-version.resolver.mjs +0 -24
  88. package/libraries/resolvers/mobile-command-center-module.resolver.d.ts +0 -21
  89. package/libraries/resolvers/mobile-command-center-module.resolver.d.ts.map +0 -1
  90. package/libraries/resolvers/mobile-config.resolver.d.ts +0 -12
  91. package/libraries/resolvers/mobile-config.resolver.d.ts.map +0 -1
  92. package/libraries/resolvers/mobile-version.resolver.d.ts +0 -13
  93. package/libraries/resolvers/mobile-version.resolver.d.ts.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
2
2
  import { NgModule } from '@angular/core';
3
- import { AlertsAndNotificationsCloudServiceProxy, AssetCloudServiceProxy, AuditCloudServiceProxy, BackofficeCloudServiceProxy, ConfigurationCloudServiceProxy, DynamicPricingCloudServiceProxy, FileCloudServiceProxy, LicenseCloudServiceProxy, LocalizationCloudServiceProxy, MobileCloudServiceProxy, RateTestPlanCloudServiceProxy, RoleCloudServiceProxy, SMTPDetailsCloudServiceProxy, SmartparkCloudServiceProxy, UsersCloudServiceProxy, VendorCloudServiceProxy, PermissionsCloudServiceProxy } from './cloud-service-proxies';
3
+ import { AlertsAndNotificationsCloudServiceProxy, AssetCloudServiceProxy, AuditCloudServiceProxy, BackofficeCloudServiceProxy, LocalizationCloudServiceProxy, ConfigurationCloudServiceProxy, DynamicPricingCloudServiceProxy, FileCloudServiceProxy, LicenseCloudServiceProxy, PermissionsCloudServiceProxy, RateTestPlanCloudServiceProxy, RoleCloudServiceProxy, SMTPDetailsCloudServiceProxy, SmartparkCloudServiceProxy, UsersCloudServiceProxy, VendorCloudServiceProxy } from './cloud-service-proxies';
4
4
  import { ConfigurationServiceProxy, UsersServiceProxy } from './edge-service-proxies';
5
- import { AssetIdentityServiceProxy, BackofficeUserIdentityServiceProxy, ConfigurationIdentityServiceProxy, FacilityIdentityServiceProxy, MobileIdentityServiceProxy } from './identity-service-proxies';
6
- import { AccessProfileRpcServiceProxy, AccountRpcServiceProxy, ActionReasonRpcServiceProxy, BatchRpcServiceProxy, CashierRpcServiceProxy, CategoryRpcServiceProxy, CarRpcServiceProxy, ChaserTicketRpcServiceProxy, CreditCardRpcServiceProxy, DeviceRpcServiceProxy, EvoucherRpcServiceProxy, FacilityRpcServiceProxy, FileRpcServiceProxy, GroupRpcServiceProxy, GuestRpcServiceProxy, ISFRpcServiceProxy, JobTitleRpcServiceProxy, KeyOptionRpcServiceProxy, LPRBlackListRpcServiceProxy, LprTransactionsRpcServiceProxy, MonthlyRpcServiceProxy, PaymentRpcServiceProxy, RateRpcServiceProxy, RemoteCommandRpcServiceProxy, ReportsRpcServiceProxy, SchedulerAccessProfileAlternativeRpcServiceProxy, SchedulerDeviceActivityRpcServiceProxy, SchedulerPrepaidKeyRpcServiceProxy, SchedulerRateRpcServiceProxy, SpecialDayRpcServiceProxy, SpecialTransientRpcServiceProxy, TransientRpcServiceProxy, ValidationProfileRpcServiceProxy, ValidationRpcServiceProxy, ZRpcServiceProxy, ZoneRpcServiceProxy } from './rpc-service-proxies';
5
+ import { AssetIdentityServiceProxy, BackofficeUserIdentityServiceProxy, ConfigurationIdentityServiceProxy, FacilityIdentityServiceProxy } from './identity-service-proxies';
6
+ import { AccessProfileRpcServiceProxy, AccountRpcServiceProxy, ActionReasonRpcServiceProxy, BatchRpcServiceProxy, CarRpcServiceProxy, CashierRpcServiceProxy, CategoryRpcServiceProxy, ChaserTicketRpcServiceProxy, CreditCardRpcServiceProxy, DeviceRpcServiceProxy, EvoucherRpcServiceProxy, FacilityRpcServiceProxy, FileRpcServiceProxy, GroupRpcServiceProxy, GuestRpcServiceProxy, ISFRpcServiceProxy, JobTitleRpcServiceProxy, KeyOptionRpcServiceProxy, LPRBlackListRpcServiceProxy, LprTransactionsRpcServiceProxy, MonthlyRpcServiceProxy, PaymentRpcServiceProxy, RateRpcServiceProxy, RemoteCommandRpcServiceProxy, ReportsRpcServiceProxy, SchedulerAccessProfileAlternativeRpcServiceProxy, SchedulerDeviceActivityRpcServiceProxy, SchedulerPrepaidKeyRpcServiceProxy, SchedulerRateRpcServiceProxy, SpecialDayRpcServiceProxy, SpecialTransientRpcServiceProxy, TransientRpcServiceProxy, ValidationProfileRpcServiceProxy, ValidationRpcServiceProxy, ZRpcServiceProxy, ZoneRpcServiceProxy } from './rpc-service-proxies';
7
7
  import * as i0 from "@angular/core";
8
8
  export class ServiceProxyModule {
9
9
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceProxyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -22,7 +22,6 @@ export class ServiceProxyModule {
22
22
  DynamicPricingCloudServiceProxy,
23
23
  FileCloudServiceProxy,
24
24
  LocalizationCloudServiceProxy,
25
- MobileCloudServiceProxy,
26
25
  RateTestPlanCloudServiceProxy,
27
26
  RoleCloudServiceProxy,
28
27
  SMTPDetailsCloudServiceProxy,
@@ -35,7 +34,6 @@ export class ServiceProxyModule {
35
34
  BackofficeUserIdentityServiceProxy,
36
35
  ConfigurationIdentityServiceProxy,
37
36
  FacilityIdentityServiceProxy,
38
- MobileIdentityServiceProxy,
39
37
  // Rpc
40
38
  AccountRpcServiceProxy,
41
39
  AccessProfileRpcServiceProxy,
@@ -95,7 +93,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
95
93
  DynamicPricingCloudServiceProxy,
96
94
  FileCloudServiceProxy,
97
95
  LocalizationCloudServiceProxy,
98
- MobileCloudServiceProxy,
99
96
  RateTestPlanCloudServiceProxy,
100
97
  RoleCloudServiceProxy,
101
98
  SMTPDetailsCloudServiceProxy,
@@ -108,7 +105,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
108
105
  BackofficeUserIdentityServiceProxy,
109
106
  ConfigurationIdentityServiceProxy,
110
107
  FacilityIdentityServiceProxy,
111
- MobileIdentityServiceProxy,
112
108
  // Rpc
113
109
  AccountRpcServiceProxy,
114
110
  AccessProfileRpcServiceProxy,
@@ -150,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
150
146
  ]
151
147
  }]
152
148
  }] });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wcm94eS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3NlcnZpY2UtcHJveHkvc2VydmljZS1wcm94eS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsdUNBQXVDLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQ3BILDhCQUE4QixFQUFFLCtCQUErQixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUNoSCw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxxQkFBcUIsRUFDNUcsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQ3hJLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUNMLHlCQUF5QixFQUFFLGtDQUFrQyxFQUFFLGlDQUFpQyxFQUNoRyw0QkFBNEIsRUFBRSwwQkFBMEIsRUFDekQsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQy9ILHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUNuRyxxQkFBcUIsRUFBRSx1QkFBdUIsRUFDOUMsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVC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Qix5QkFBeUI7d0JBQ3pCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLDJCQUEyQjt3QkFDM0IsOEJBQThCO3dCQUM5Qix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLDRCQUE0Qjt3QkFDNUIsc0JBQXNCO3dCQUN0QixnREFBZ0Q7d0JBQ2hELHNDQUFzQzt3QkFDdEMsa0NBQWtDO3dCQUNsQyw0QkFBNEI7d0JBQzVCLHlCQUF5Qjt3QkFDekIsK0JBQStCO3dCQUMvQix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsZ0NBQWdDO3dCQUNoQyxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbGVydHNBbmROb3RpZmljYXRpb25zQ2xvdWRTZXJ2aWNlUHJveHksIEFzc2V0Q2xvdWRTZXJ2aWNlUHJveHksIEF1ZGl0Q2xvdWRTZXJ2aWNlUHJveHksIEJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eSxcbiAgQ29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LCBEeW5hbWljUHJpY2luZ0Nsb3VkU2VydmljZVByb3h5LCBGaWxlQ2xvdWRTZXJ2aWNlUHJveHksIExpY2Vuc2VDbG91ZFNlcnZpY2VQcm94eSxcbiAgTG9jYWxpemF0aW9uQ2xvdWRTZXJ2aWNlUHJveHksIE1vYmlsZUNsb3VkU2VydmljZVByb3h5LCBSYXRlVGVzdFBsYW5DbG91ZFNlcnZpY2VQcm94eSwgUm9sZUNsb3VkU2VydmljZVByb3h5LFxuICBTTVRQRGV0YWlsc0Nsb3VkU2VydmljZVByb3h5LCBTbWFydHBhcmtDbG91ZFNlcnZpY2VQcm94eSwgVXNlcnNDbG91ZFNlcnZpY2VQcm94eSwgVmVuZG9yQ2xvdWRTZXJ2aWNlUHJveHksIFBlcm1pc3Npb25zQ2xvdWRTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eSwgVXNlcnNTZXJ2aWNlUHJveHkgfSBmcm9tICcuL2VkZ2Utc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIEFzc2V0SWRlbnRpdHlTZXJ2aWNlUHJveHksIEJhY2tvZmZpY2VVc2VySWRlbnRpdHlTZXJ2aWNlUHJveHksIENvbmZpZ3VyYXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgRmFjaWxpdHlJZGVudGl0eVNlcnZpY2VQcm94eSwgTW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgQWNjZXNzUHJvZmlsZVJwY1NlcnZpY2VQcm94eSwgQWNjb3VudFJwY1NlcnZpY2VQcm94eSwgQWN0aW9uUmVhc29uUnBjU2VydmljZVByb3h5LCBCYXRjaFJwY1NlcnZpY2VQcm94eSwgQ2FzaGllclJwY1NlcnZpY2VQcm94eSxcbiAgQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksIENhclJwY1NlcnZpY2VQcm94eSwgQ2hhc2VyVGlja2V0UnBjU2VydmljZVByb3h5LCBDcmVkaXRDYXJkUnBjU2VydmljZVByb3h5LFxuICBEZXZpY2VScGNTZXJ2aWNlUHJveHksIEV2b3VjaGVyUnBjU2VydmljZVByb3h5LFxuICBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSwgRmlsZVJwY1NlcnZpY2VQcm94eSwgR3JvdXBScGNTZXJ2aWNlUHJveHksIEd1ZXN0UnBjU2VydmljZVByb3h5LCBJU0ZScGNTZXJ2aWNlUHJveHksIEpvYlRpdGxlUnBjU2VydmljZVByb3h5LFxuICBLZXlPcHRpb25ScGNTZXJ2aWNlUHJveHksIExQUkJsYWNrTGlzdFJwY1NlcnZpY2VQcm94eSwgTHByVHJhbnNhY3Rpb25zUnBjU2VydmljZVByb3h5LCBNb250aGx5UnBjU2VydmljZVByb3h5LCBQYXltZW50UnBjU2VydmljZVByb3h5LFxuICBSYXRlUnBjU2VydmljZVByb3h5LCBSZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LCBSZXBvcnRzUnBjU2VydmljZVByb3h5LCBTY2hlZHVsZXJBY2Nlc3NQcm9maWxlQWx0ZXJuYXRpdmVScGNTZXJ2aWNlUHJveHksXG4gIFNjaGVkdWxlckRldmljZUFjdGl2aXR5UnBjU2VydmljZVByb3h5LCBTY2hlZHVsZXJQcmVwYWlkS2V5UnBjU2VydmljZVByb3h5LCBTY2hlZHVsZXJSYXRlUnBjU2VydmljZVByb3h5LCBTcGVjaWFsRGF5UnBjU2VydmljZVByb3h5LFxuICBTcGVjaWFsVHJhbnNpZW50UnBjU2VydmljZVByb3h5LCBUcmFuc2llbnRScGNTZXJ2aWNlUHJveHksIFZhbGlkYXRpb25Qcm9maWxlUnBjU2VydmljZVByb3h5LCBWYWxpZGF0aW9uUnBjU2VydmljZVByb3h5LCBaUnBjU2VydmljZVByb3h5LCBab25lUnBjU2VydmljZVByb3h5XG59IGZyb20gJy4vcnBjLXNlcnZpY2UtcHJveGllcyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzRnJvbURpKCkpLFxuXG4gICAgLy8gRWRnZVxuICAgIENvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHksXG4gICAgVXNlcnNTZXJ2aWNlUHJveHksXG5cbiAgICAvLyBDbG91ZFxuICAgIEFzc2V0Q2xvdWRTZXJ2aWNlUHJveHksXG4gICAgQWxlcnRzQW5kTm90aWZpY2F0aW9uc0Nsb3VkU2VydmljZVByb3h5LFxuICAgIEF1ZGl0Q2xvdWRTZXJ2aWNlUHJveHksXG4gICAgQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LFxuICAgIENvbmZpZ3VyYXRpb25DbG91ZFNlcnZpY2VQcm94eSxcbiAgICBEeW5hbWljUHJpY2luZ0Nsb3VkU2VydmljZVByb3h5LFxuICAgIEZpbGVDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBMb2NhbGl6YXRpb25DbG91ZFNlcnZpY2VQcm94eSxcbiAgICBNb2JpbGVDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBSYXRlVGVzdFBsYW5DbG91ZFNlcnZpY2VQcm94eSxcbiAgICBSb2xlQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgU01UUERldGFpbHNDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBTbWFydHBhcmtDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBVc2Vyc0Nsb3VkU2VydmljZVByb3h5LFxuICAgIFZlbmRvckNsb3VkU2VydmljZVByb3h5LFxuICAgIFBlcm1pc3Npb25zQ2xvdWRTZXJ2aWNlUHJveHksXG5cbiAgICAvLyBJZGVudGl0eVxuICAgIEFzc2V0SWRlbnRpdHlTZXJ2aWNlUHJveHksXG4gICAgQmFja29mZmljZVVzZXJJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBDb25maWd1cmF0aW9uSWRlbnRpdHlTZXJ2aWNlUHJveHksXG4gICAgRmFjaWxpdHlJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBNb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBcbiAgICAvLyBScGNcbiAgICBBY2NvdW50UnBjU2VydmljZVByb3h5LFxuICAgIEFjY2Vzc1Byb2ZpbGVScGNTZXJ2aWNlUHJveHksXG4gICAgQWN0aW9uUmVhc29uUnBjU2VydmljZVByb3h5LFxuICAgIEJhdGNoUnBjU2VydmljZVByb3h5LFxuICAgIENhc2hpZXJScGNTZXJ2aWNlUHJveHksXG4gICAgQ2FyUnBjU2VydmljZVByb3h5LFxuICAgIENhdGVnb3J5UnBjU2VydmljZVByb3h5LFxuICAgIENoYXNlclRpY2tldFJwY1NlcnZpY2VQcm94eSxcbiAgICBDcmVkaXRDYXJkUnBjU2VydmljZVByb3h5LFxuICAgIERldmljZVJwY1NlcnZpY2VQcm94eSxcbiAgICBFdm91Y2hlclJwY1NlcnZpY2VQcm94eSxcbiAgICBGYWNpbGl0eVJwY1NlcnZpY2VQcm94eSxcbiAgICBGaWxlUnBjU2VydmljZVByb3h5LFxuICAgIEdyb3VwUnBjU2VydmljZVByb3h5LFxuICAgIEd1ZXN0UnBjU2VydmljZVByb3h5LFxuICAgIElTRlJwY1NlcnZpY2VQcm94eSxcbiAgICBKb2JUaXRsZVJwY1NlcnZpY2VQcm94eSxcbiAgICBMaWNlbnNlQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgTFBSQmxhY2tMaXN0UnBjU2VydmljZVByb3h5LFxuICAgIExwclRyYW5zYWN0aW9uc1JwY1NlcnZpY2VQcm94eSxcbiAgICBLZXlPcHRpb25ScGNTZXJ2aWNlUHJveHksXG4gICAgTW9udGhseVJwY1NlcnZpY2VQcm94eSxcbiAgICBSYXRlUnBjU2VydmljZVByb3h5LFxuICAgIFBheW1lbnRScGNTZXJ2aWNlUHJveHksXG4gICAgUmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eSxcbiAgICBSZXBvcnRzUnBjU2VydmljZVByb3h5LFxuICAgIFNjaGVkdWxlckFjY2Vzc1Byb2ZpbGVBbHRlcm5hdGl2ZVJwY1NlcnZpY2VQcm94eSxcbiAgICBTY2hlZHVsZXJEZXZpY2VBY3Rpdml0eVJwY1NlcnZpY2VQcm94eSxcbiAgICBTY2hlZHVsZXJQcmVwYWlkS2V5UnBjU2VydmljZVByb3h5LFxuICAgIFNjaGVkdWxlclJhdGVScGNTZXJ2aWNlUHJveHksXG4gICAgU3BlY2lhbERheVJwY1NlcnZpY2VQcm94eSxcbiAgICBTcGVjaWFsVHJhbnNpZW50UnBjU2VydmljZVByb3h5LFxuICAgIFRyYW5zaWVudFJwY1NlcnZpY2VQcm94eSxcbiAgICBWYWxpZGF0aW9uUnBjU2VydmljZVByb3h5LFxuICAgIFZhbGlkYXRpb25Qcm9maWxlUnBjU2VydmljZVByb3h5LFxuICAgIFpScGNTZXJ2aWNlUHJveHksXG4gICAgWm9uZVJwY1NlcnZpY2VQcm94eSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUHJveHlNb2R1bGUge1xufVxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wcm94eS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3NlcnZpY2UtcHJveHkvc2VydmljZS1wcm94eS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsdUNBQXVDLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQ25KLDhCQUE4QixFQUFFLCtCQUErQixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFDLDRCQUE0QixFQUM3SSw2QkFBNkIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFDaEssTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0NBQWtDLEVBQUUsaUNBQWlDLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1SyxPQUFPLEVBQ0wsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQ3ZHLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUMzSCxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFDeEksa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVB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QUNwQixvQkFBb0I7d0JBQ3BCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLDJCQUEyQjt3QkFDM0IsOEJBQThCO3dCQUM5Qix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLDRCQUE0Qjt3QkFDNUIsc0JBQXNCO3dCQUN0QixnREFBZ0Q7d0JBQ2hELHNDQUFzQzt3QkFDdEMsa0NBQWtDO3dCQUNsQyw0QkFBNEI7d0JBQzVCLHlCQUF5Qjt3QkFDekIsK0JBQStCO3dCQUMvQix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsZ0NBQWdDO3dCQUNoQyxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbGVydHNBbmROb3RpZmljYXRpb25zQ2xvdWRTZXJ2aWNlUHJveHksIEFzc2V0Q2xvdWRTZXJ2aWNlUHJveHksIEF1ZGl0Q2xvdWRTZXJ2aWNlUHJveHksIEJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eSwgTG9jYWxpemF0aW9uQ2xvdWRTZXJ2aWNlUHJveHksXG4gIENvbmZpZ3VyYXRpb25DbG91ZFNlcnZpY2VQcm94eSwgRHluYW1pY1ByaWNpbmdDbG91ZFNlcnZpY2VQcm94eSwgRmlsZUNsb3VkU2VydmljZVByb3h5LCBMaWNlbnNlQ2xvdWRTZXJ2aWNlUHJveHksUGVybWlzc2lvbnNDbG91ZFNlcnZpY2VQcm94eSxcbiAgUmF0ZVRlc3RQbGFuQ2xvdWRTZXJ2aWNlUHJveHksIFJvbGVDbG91ZFNlcnZpY2VQcm94eSwgU01UUERldGFpbHNDbG91ZFNlcnZpY2VQcm94eSwgU21hcnRwYXJrQ2xvdWRTZXJ2aWNlUHJveHksIFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksIFZlbmRvckNsb3VkU2VydmljZVByb3h5XG59IGZyb20gJy4vY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHksIFVzZXJzU2VydmljZVByb3h5IH0gZnJvbSAnLi9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBc3NldElkZW50aXR5U2VydmljZVByb3h5LCBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LCBDb25maWd1cmF0aW9uSWRlbnRpdHlTZXJ2aWNlUHJveHksIEZhY2lsaXR5SWRlbnRpdHlTZXJ2aWNlUHJveHkgfSBmcm9tICcuL2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBBY2Nlc3NQcm9maWxlUnBjU2VydmljZVByb3h5LCBBY2NvdW50UnBjU2VydmljZVByb3h5LCBBY3Rpb25SZWFzb25ScGNTZXJ2aWNlUHJveHksIEJhdGNoUnBjU2VydmljZVByb3h5LFxuICBDYXJScGNTZXJ2aWNlUHJveHksIENhc2hpZXJScGNTZXJ2aWNlUHJveHksIENhdGVnb3J5UnBjU2VydmljZVByb3h5LCBDaGFzZXJUaWNrZXRScGNTZXJ2aWNlUHJveHksIENyZWRpdENhcmRScGNTZXJ2aWNlUHJveHksXG4gIERldmljZVJwY1NlcnZpY2VQcm94eSwgRXZvdWNoZXJScGNTZXJ2aWNlUHJveHksIEZhY2lsaXR5UnBjU2VydmljZVByb3h5LCBGaWxlUnBjU2VydmljZVByb3h5LCBHcm91cFJwY1NlcnZpY2VQcm94eSwgR3Vlc3RScGNTZXJ2aWNlUHJveHksIFxuICBJU0ZScGNTZXJ2aWNlUHJveHksIEpvYlRpdGxlUnBjU2VydmljZVByb3h5LCBLZXlPcHRpb25ScGNTZXJ2aWNlUHJveHksIExQUkJsYWNrTGlzdFJwY1NlcnZpY2VQcm94eSwgTHByVHJhbnNhY3Rpb25zUnBjU2VydmljZVByb3h5LFxuICBNb250aGx5UnBjU2VydmljZVByb3h5LCBQYXltZW50UnBjU2VydmljZVByb3h5LCBSYXRlUnBjU2VydmljZVByb3h5LCBSZW1vdGVDb21tYW5kUnBjU2VydmljZVByb3h5LCBSZXBvcnRzUnBjU2VydmljZVByb3h5LCBcbiAgU2NoZWR1bGVyQWNjZXNzUHJvZmlsZUFsdGVybmF0aXZlUnBjU2VydmljZVByb3h5LCBTY2hlZHVsZXJEZXZpY2VBY3Rpdml0eVJwY1NlcnZpY2VQcm94eSwgU2NoZWR1bGVyUHJlcGFpZEtleVJwY1NlcnZpY2VQcm94eSwgXG4gIFNjaGVkdWxlclJhdGVScGNTZXJ2aWNlUHJveHksIFNwZWNpYWxEYXlScGNTZXJ2aWNlUHJveHksIFNwZWNpYWxUcmFuc2llbnRScGNTZXJ2aWNlUHJveHksIFRyYW5zaWVudFJwY1NlcnZpY2VQcm94eSxcbiAgVmFsaWRhdGlvblByb2ZpbGVScGNTZXJ2aWNlUHJveHksIFZhbGlkYXRpb25ScGNTZXJ2aWNlUHJveHksIFpScGNTZXJ2aWNlUHJveHksIFpvbmVScGNTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi9ycGMtc2VydmljZS1wcm94aWVzJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW10sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnNGcm9tRGkoKSksXG5cbiAgICAvLyBFZGdlXG4gICAgQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eSxcbiAgICBVc2Vyc1NlcnZpY2VQcm94eSxcblxuICAgIC8vIENsb3VkXG4gICAgQXNzZXRDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBBbGVydHNBbmROb3RpZmljYXRpb25zQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgQXVkaXRDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBCYWNrb2ZmaWNlQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgQ29uZmlndXJhdGlvbkNsb3VkU2VydmljZVByb3h5LFxuICAgIER5bmFtaWNQcmljaW5nQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgRmlsZUNsb3VkU2VydmljZVByb3h5LFxuICAgIExvY2FsaXphdGlvbkNsb3VkU2VydmljZVByb3h5LFxuICAgIFJhdGVUZXN0UGxhbkNsb3VkU2VydmljZVByb3h5LFxuICAgIFJvbGVDbG91ZFNlcnZpY2VQcm94eSxcbiAgICBTTVRQRGV0YWlsc0Nsb3VkU2VydmljZVByb3h5LFxuICAgIFNtYXJ0cGFya0Nsb3VkU2VydmljZVByb3h5LFxuICAgIFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgVmVuZG9yQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgUGVybWlzc2lvbnNDbG91ZFNlcnZpY2VQcm94eSxcblxuICAgIC8vIElkZW50aXR5XG4gICAgQXNzZXRJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5LFxuICAgIENvbmZpZ3VyYXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBGYWNpbGl0eUlkZW50aXR5U2VydmljZVByb3h5LFxuXG4gICAgLy8gUnBjXG4gICAgQWNjb3VudFJwY1NlcnZpY2VQcm94eSxcbiAgICBBY2Nlc3NQcm9maWxlUnBjU2VydmljZVByb3h5LFxuICAgIEFjdGlvblJlYXNvblJwY1NlcnZpY2VQcm94eSxcbiAgICBCYXRjaFJwY1NlcnZpY2VQcm94eSxcbiAgICBDYXNoaWVyUnBjU2VydmljZVByb3h5LFxuICAgIENhclJwY1NlcnZpY2VQcm94eSxcbiAgICBDYXRlZ29yeVJwY1NlcnZpY2VQcm94eSxcbiAgICBDaGFzZXJUaWNrZXRScGNTZXJ2aWNlUHJveHksXG4gICAgQ3JlZGl0Q2FyZFJwY1NlcnZpY2VQcm94eSxcbiAgICBEZXZpY2VScGNTZXJ2aWNlUHJveHksXG4gICAgRXZvdWNoZXJScGNTZXJ2aWNlUHJveHksXG4gICAgRmFjaWxpdHlScGNTZXJ2aWNlUHJveHksXG4gICAgRmlsZVJwY1NlcnZpY2VQcm94eSxcbiAgICBHcm91cFJwY1NlcnZpY2VQcm94eSxcbiAgICBHdWVzdFJwY1NlcnZpY2VQcm94eSxcbiAgICBJU0ZScGNTZXJ2aWNlUHJveHksXG4gICAgSm9iVGl0bGVScGNTZXJ2aWNlUHJveHksXG4gICAgTGljZW5zZUNsb3VkU2VydmljZVByb3h5LFxuICAgIExQUkJsYWNrTGlzdFJwY1NlcnZpY2VQcm94eSxcbiAgICBMcHJUcmFuc2FjdGlvbnNScGNTZXJ2aWNlUHJveHksXG4gICAgS2V5T3B0aW9uUnBjU2VydmljZVByb3h5LFxuICAgIE1vbnRobHlScGNTZXJ2aWNlUHJveHksXG4gICAgUmF0ZVJwY1NlcnZpY2VQcm94eSxcbiAgICBQYXltZW50UnBjU2VydmljZVByb3h5LFxuICAgIFJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHksXG4gICAgUmVwb3J0c1JwY1NlcnZpY2VQcm94eSxcbiAgICBTY2hlZHVsZXJBY2Nlc3NQcm9maWxlQWx0ZXJuYXRpdmVScGNTZXJ2aWNlUHJveHksXG4gICAgU2NoZWR1bGVyRGV2aWNlQWN0aXZpdHlScGNTZXJ2aWNlUHJveHksXG4gICAgU2NoZWR1bGVyUHJlcGFpZEtleVJwY1NlcnZpY2VQcm94eSxcbiAgICBTY2hlZHVsZXJSYXRlUnBjU2VydmljZVByb3h5LFxuICAgIFNwZWNpYWxEYXlScGNTZXJ2aWNlUHJveHksXG4gICAgU3BlY2lhbFRyYW5zaWVudFJwY1NlcnZpY2VQcm94eSxcbiAgICBUcmFuc2llbnRScGNTZXJ2aWNlUHJveHksXG4gICAgVmFsaWRhdGlvblJwY1NlcnZpY2VQcm94eSxcbiAgICBWYWxpZGF0aW9uUHJvZmlsZVJwY1NlcnZpY2VQcm94eSxcbiAgICBaUnBjU2VydmljZVByb3h5LFxuICAgIFpvbmVScGNTZXJ2aWNlUHJveHksXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZVByb3h5TW9kdWxlIHtcbn1cbiJdfQ==
@@ -23,14 +23,21 @@ import * as i4 from "../services/app-config.service";
23
23
  import * as i5 from "./refresh-token.service";
24
24
  import * as i6 from "./local-storage.service";
25
25
  const AUTHENTICATE_APIS = [
26
+ // Web
26
27
  'api/services/web/users/verify-2fa-auth',
27
28
  'api/services/web/users/authenticate',
28
29
  'api/services/web/users/multi-tenants-authenticate',
29
- 'api/services/backofficeuser/authenticate'
30
+ // Backoffice
31
+ 'api/services/backofficeuser/authenticate',
32
+ // Mobile
33
+ 'api/services/v2/mobile/users/verify-2fa-auth',
34
+ 'api/services/v2/mobile/users/authenticate',
35
+ 'api/services/v2/mobile/users/multi-tenants-authenticate',
30
36
  ];
31
37
  const EDGE_PREFIX_API = '/api/services/web/sp';
38
+ const MOBOILE_EDGE_PREFIX_API = '/api/services/v2/mobile/sp';
32
39
  const REFRESH_TOKEN_API = 'api/services/web/users/refresh-token';
33
- const REFRESH_MOBILE_TOKEN_API = 'api/services/mobile/users/refresh-token';
40
+ const REFRESH_MOBILE_TOKEN_API = 'api/services/v2/mobile/users/refresh-token';
34
41
  const EXTERNAL_APIS = [
35
42
  'api/services/selfvalidation/details',
36
43
  '/execute/self-validation', // TODO: Remove when self-validation is handled by the new project (MatanShomer)
@@ -53,10 +60,17 @@ const ANONYMOUS_APIS = [
53
60
  'api/services/web/users/activate',
54
61
  // Backoffice URLs
55
62
  'api/services/backofficeuser/authenticate',
56
- // Mobile URLs
57
- 'api/services/mobile/users/authenticate',
58
- 'api/services/mobile/asset/logo',
59
- 'api/services/mobile/configuration/spark-mobile-version',
63
+ ];
64
+ const MOBILE_ANONYMOUS_APIS = [
65
+ // Mobile
66
+ REFRESH_MOBILE_TOKEN_API,
67
+ 'api/services/v2/mobile/users/multi-tenants-authenticate',
68
+ 'api/services/v2/mobile/users/authenticate',
69
+ 'api/services/v2/mobile/users/verify-2fa-auth',
70
+ 'api/services/v2/mobile/users/verify-2fa-auth-login',
71
+ 'api/services/v2/mobile/asset/logo',
72
+ 'api/services/v2/mobile/configuration/spark-mobile-version',
73
+ 'api/services/v2/mobile/tenant/data',
60
74
  ];
61
75
  export class AuthTokenService {
62
76
  constructor(sessionStorageService, store, router, appConfig, refreshTokenService, localStorageService) {
@@ -108,6 +122,7 @@ export class AuthTokenService {
108
122
  req = req.clone({
109
123
  headers: req.headers
110
124
  .set('timeZone', getUserTimeZone())
125
+ .set('Application-Type', applicationType.toString())
111
126
  .set('Access-Control-Allow-Origin', '*')
112
127
  .set('ClientVersion', this.appConfig.getConfig().packageInfo.version)
113
128
  });
@@ -118,8 +133,8 @@ export class AuthTokenService {
118
133
  req = this.setRequestHeaders(req);
119
134
  let request = next.handle(req);
120
135
  const refreshInfo = this.sessionStorageService.getAuth;
121
- if (this.shouldHandleRefreshToken(req) && this.isRefreshTokenExpired(refreshInfo)) {
122
- request = this.refreshTokenService.handleMobileRefreshToken(req, next);
136
+ if (this.shouldHandleMobileRefreshToken(req) && this.isRefreshTokenExpired(refreshInfo)) {
137
+ request = this.refreshTokenService.handleRefreshToken(req, next);
123
138
  }
124
139
  return request;
125
140
  }
@@ -145,11 +160,34 @@ export class AuthTokenService {
145
160
  }
146
161
  return response;
147
162
  }
163
+ handleMobileEventStatusError(e, req, next) {
164
+ let response;
165
+ switch (e.status) {
166
+ case HttpStatusCode.Unauthorized:
167
+ if (this.shouldHandleMobileRefreshToken(req)) {
168
+ response = this.refreshTokenService.handleMobileRefreshToken(req, next);
169
+ }
170
+ else {
171
+ response = this.handleErrorResponse(e);
172
+ }
173
+ break;
174
+ default:
175
+ response = this.handleErrorResponse(e);
176
+ break;
177
+ }
178
+ return response;
179
+ }
148
180
  handleSuccessResponse(req, event) {
149
181
  if (event?.status === HttpStatusCode.Ok || event?.status === HttpStatusCode.Accepted) {
150
182
  this.checkAndClearParkStatusGlobalErrorNotification(req.url);
151
183
  }
152
184
  }
185
+ mobileHandleSuccessResponse(req, event) {
186
+ if (event?.status === HttpStatusCode.Ok || event?.status === HttpStatusCode.Accepted) {
187
+ this.mobileCheckAndClearParkStatusGlobalErrorNotification(req.url);
188
+ }
189
+ }
190
+ ;
153
191
  setRequestHeaders(req) {
154
192
  const applicationType = AppTypeMap.get(this.appConfig.getConfig().appType);
155
193
  const appModule = this.store.selectSnapshot(SidenavState.appModule);
@@ -178,6 +216,7 @@ export class AuthTokenService {
178
216
  else {
179
217
  req = req.clone({
180
218
  headers: req.headers
219
+ .set('Application-Type', applicationType.toString())
181
220
  .set('timeZone', getUserTimeZone())
182
221
  .set('Access-Control-Allow-Origin', '*')
183
222
  .set('ClientVersion', this.appConfig.getConfig().packageInfo.version)
@@ -189,6 +228,9 @@ export class AuthTokenService {
189
228
  shouldHandleRefreshToken(req) {
190
229
  return !ANONYMOUS_APIS.some(api => req.url.includes(api)) && !this.isRefreshTokenRequest(req) && !EXTERNAL_APIS.some(api => req.url.includes(api)) && !this.isSelfValidationLinkURL;
191
230
  }
231
+ shouldHandleMobileRefreshToken(req) {
232
+ return !MOBILE_ANONYMOUS_APIS.some(api => req.url.includes(api)) && !this.isRefreshTokenRequest(req);
233
+ }
192
234
  getSmartParkDto(requestUrl) {
193
235
  let guid = null;
194
236
  const guidPattern = /[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}/;
@@ -219,6 +261,23 @@ export class AuthTokenService {
219
261
  }
220
262
  }
221
263
  }
264
+ mobileCheckAndClearParkStatusGlobalErrorNotification(url) {
265
+ if (url?.startsWith(MOBOILE_EDGE_PREFIX_API)) {
266
+ const appModule = this.store.selectSnapshot(SidenavState.appModule);
267
+ if (appModule == AppModule.Cc || appModule == AppModule.Management) {
268
+ const connectionStatusDictionary = this.store.selectSnapshot(FacilityState.parkConnectionStatusMap);
269
+ const guid = this.store.selectSnapshot(FacilityState.guid);
270
+ const parkId = this.store.selectSnapshot(FacilityState.parkId);
271
+ if (guid && parkId && connectionStatusDictionary[guid]) {
272
+ var parkConnectionStatus = connectionStatusDictionary[guid][parkId];
273
+ if (parkConnectionStatus.status == ParkConnectionStatus.SparkCoreServerDisconnected ||
274
+ parkConnectionStatus.status == ParkConnectionStatus.SparkCoreCloudServerDisconnected) {
275
+ this.updateServicesRunningStatus(guid);
276
+ }
277
+ }
278
+ }
279
+ }
280
+ }
222
281
  updateServicesRunningStatus(smartParkGuid) {
223
282
  const servicesRunningStatusDictionary = this.store.selectSnapshot(FacilityState.servicesRunningStatusDictionary);
224
283
  const currentFacilityServicesRunningStatus = servicesRunningStatusDictionary[smartParkGuid];
@@ -290,4 +349,4 @@ __decorate([
290
349
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthTokenService, decorators: [{
291
350
  type: Injectable
292
351
  }], ctorParameters: () => [{ type: i1.SessionStorageService }, { type: i2.Store }, { type: i3.Router }, { type: i4.AppConfigService }, { type: i5.RefreshTokenService }, { type: i6.LocalStorageService }], propDecorators: { logout: [], servicesRunningStatusChanged: [], setConflictDetected: [], clearConflictDetected: [] } });
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9hdXRoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBd0UsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQXFELE1BQU0sd0NBQXdDLENBQUM7QUFLdEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQUtyRCxN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R0FBRyxVQUFVLEVBQUU7Z0JBQzlCLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBL09VLGdCQUFnQjttSEFBaEIsZ0JBQWdCOztBQWtQUDtJQUFuQixRQUFRLEVBQUU7Z0RBQWlJO0FBRWhJO0lBQVgsUUFBUSxFQUFFO3NFQUMyRDtBQUUxRDtJQUFYLFFBQVEsRUFBRTs2REFBb0Y7QUFDbkY7SUFBWCxRQUFRLEVBQUU7K0RBQTJEOzRGQXhQM0QsZ0JBQWdCO2tCQUQ1QixVQUFVO3NPQW1QVyxNQUFNLE1BRWQsNEJBQTRCLE1BRzVCLG1CQUFtQixNQUNuQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSwgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICdAbmd4cy1sYWJzL2Rpc3BhdGNoLWRlY29yYXRvcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNFU1NJT04gfSBmcm9tICcuLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZU1hcCB9IGZyb20gJy4uL2VudW1zL2FwcC10eXBlLW1hcC5lbnVtJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmtDb25uZWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTcGFya1Nlc3Npb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NwYXJrLXNlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlZnJlc2hJbmZvIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL21vZGVsL3JlZnJlc2gtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJDb25mbGljdERldGVjdGVkLCBMb2dvdXRBY3Rpb24sIFNldENvbmZsaWN0RGV0ZWN0ZWQgfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvc2Vzc2lvbi5hY3Rpb25zJztcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQgeyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFNtYXJ0cGFya1N0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9zbWFydHBhcmtzL3NtYXJ0cGFyay5zdGF0ZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrRHRvLCBTdWJNb2R1bGUgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTbWFydHBhcmtCYXNpY0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVHlwZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvcnBjLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFVzZXJUaW1lWm9uZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZnJlc2hUb2tlblNlcnZpY2UgfSBmcm9tICcuL3JlZnJlc2gtdG9rZW4uc2VydmljZSc7XG5cbmNvbnN0IEFVVEhFTlRJQ0FURV9BUElTID0gW1xuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZScsXG4gICdhcGkvc2VydmljZXMvYmFja29mZmljZXVzZXIvYXV0aGVudGljYXRlJ1xuXTtcblxuY29uc3QgRURHRV9QUkVGSVhfQVBJID0gJy9hcGkvc2VydmljZXMvd2ViL3NwJztcbmNvbnN0IFJFRlJFU0hfVE9LRU5fQVBJID0gJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvcmVmcmVzaC10b2tlbic7XG5jb25zdCBSRUZSRVNIX01PQklMRV9UT0tFTl9BUEkgPSAnYXBpL3NlcnZpY2VzL21vYmlsZS91c2Vycy9yZWZyZXNoLXRva2VuJztcbmNvbnN0IEVYVEVSTkFMX0FQSVMgPSBbXG4gICdhcGkvc2VydmljZXMvc2VsZnZhbGlkYXRpb24vZGV0YWlscycsXG4gICcvZXhlY3V0ZS9zZWxmLXZhbGlkYXRpb24nLCAvLyBUT0RPOiBSZW1vdmUgd2hlbiBzZWxmLXZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbmV3IHByb2plY3QgKE1hdGFuU2hvbWVyKVxuXTtcbmNvbnN0IEFOT05ZTU9VU19BUElTID0gW1xuICBSRUZSRVNIX1RPS0VOX0FQSSxcbiAgLy8gTGF0ZXN0IFdlYiBVUkxzXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbicsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL29pZGMtYXV0aCcsXG4gICdhcGkvc2VydmljZXMvd2ViL2Fzc2V0L2xvZ28nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGV0YWlscycsXG4gICdhcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vc3BhcmstbW9iaWxlLXZlcnNpb24nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGF0YScsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZCcsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZC10ZW5hbnRsZXNzJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYWN0aXZhdGUnLFxuICAvLyBCYWNrb2ZmaWNlIFVSTHNcbiAgJ2FwaS9zZXJ2aWNlcy9iYWNrb2ZmaWNldXNlci9hdXRoZW50aWNhdGUnLFxuICAvLyBNb2JpbGUgVVJMc1xuICAnYXBpL3NlcnZpY2VzL21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL21vYmlsZS9hc3NldC9sb2dvJyxcbiAgJ2FwaS9zZXJ2aWNlcy9tb2JpbGUvY29uZmlndXJhdGlvbi9zcGFyay1tb2JpbGUtdmVyc2lvbicsXG5dO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aFRva2VuU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVmcmVzaFRva2VuU2VydmljZTogUmVmcmVzaFRva2VuU2VydmljZSwgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlKSB7XG4gIH1cblxuICBwdWJsaWMgaXNSZWZyZXNoVG9rZW5FeHBpcmVkID0gKHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbykgPT5cbiAgICAhcmVmcmVzaEluZm8gfHwgbmV3IERhdGUoKSA+IG5ldyBEYXRlKG1vbWVudChyZWZyZXNoSW5mby5leHBpcmF0aW9uKS5hZGQoLSByZWZyZXNoSW5mby5yZWZyZXNoSW50ZXJ2YWwgKiAwLjEsICdtaWxsaXNlY29uZHMnKS5mb3JtYXQoKSk7XG5cbiAgcHVibGljIGhhbmRsZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMocmVxKTtcbiAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gPSBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkgJiYgdGhpcy5pc1JlZnJlc2hUb2tlbkV4cGlyZWQocmVmcmVzaEluZm8pKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5yZWZyZXNoVG9rZW5TZXJ2aWNlLmhhbmRsZVJlZnJlc2hUb2tlbihyZXEsIG5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tPZmZpY2VSZXF1ZXN0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICByZXEgPSB0aGlzLnNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvblR5cGU6IEFwcGxpY2F0aW9uVHlwZSA9IEFwcFR5cGVNYXAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUpO1xuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbikge1xuICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnNcbiAgICAgICAgICAuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VufWApXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ25nc3ctYnlwYXNzJywgJ3RydWUnKVxuICAgICAgICAgIC5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJylcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnNcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJylcbiAgICAgICAgICAuc2V0KCdDbGllbnRWZXJzaW9uJywgdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMocmVxKTtcbiAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gPSBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkgJiYgdGhpcy5pc1JlZnJlc2hUb2tlbkV4cGlyZWQocmVmcmVzaEluZm8pKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5yZWZyZXNoVG9rZW5TZXJ2aWNlLmhhbmRsZU1vYmlsZVJlZnJlc2hUb2tlbihyZXEsIG5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tvZmZpY2VFdmVudFN0YXR1c0Vycm9yKGU6IEh0dHBFcnJvclJlc3BvbnNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgbGV0IHJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUJhY2tvZmZpY2VFcnJvclJlc3BvbnNlKGUpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVFdmVudFN0YXR1c0Vycm9yKGU6IEh0dHBFcnJvclJlc3BvbnNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgbGV0IHJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gICAgc3dpdGNoIChlLnN0YXR1cykge1xuICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhhbmRsZVJlZnJlc2hUb2tlbihyZXEpKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVN1Y2Nlc3NSZXNwb25zZShyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGlmIChldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5PayB8fCBldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5BY2NlcHRlZCkge1xuICAgICAgdGhpcy5jaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHJlcS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1JlZnJlc2hUb2tlblJlcXVlc3QgPSAocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSA9PiByZXEudXJsLmluY2x1ZGVzKFJFRlJFU0hfVE9LRU5fQVBJKSB8fCByZXEudXJsLmluY2x1ZGVzKFJFRlJFU0hfTU9CSUxFX1RPS0VOX0FQSSk7XG5cbiAgcHJpdmF0ZSBzZXRSZXF1ZXN0SGVhZGVycyhyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvblR5cGU6IEFwcGxpY2F0aW9uVHlwZSA9IEFwcFR5cGVNYXAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUpO1xuICAgIGNvbnN0IGFwcE1vZHVsZTogQXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICBjb25zdCBzdWJNb2R1bGU6IFN1Yk1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLnN1Yk1vZHVsZSk7XG4gICAgY29uc3QgYXBwTW9kdWxlU3RyID0gYXBwTW9kdWxlPy50b1N0cmluZygpIHx8ICcnO1xuICAgIGNvbnN0IHN1Yk1vZHVsZVN0ciA9IHN1Yk1vZHVsZT8udG9TdHJpbmcoKSB8fCAnJztcblxuICAgIGNvbnN0IHNtYXJ0UGFya0R0byA9IHRoaXMuZ2V0U21hcnRQYXJrRHRvKHJlcS51cmwpIHx8IHt9O1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHNtYXJ0UGFya0R0b1tcInNwYXJrVmVyc2lvblwiXSA/PyAnJztcbiAgICBjb25zdCBzbWFydFBhcmtWZXJzaW9uID0gKHNtYXJ0UGFya0R0b1tcInNtYXJ0UGFya1ZlcnNpb25cIl0gPz8gJycpLnJlcGxhY2UoXCIgQnVpbGQoXCIsIFwiX1wiKS5yZXBsYWNlKFwiKVwiLCBcIlwiKS50cmltKCk7XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzXG4gICAgICAgICAgLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbn1gKVxuICAgICAgICAgIC5zZXQoJ0FwcGxpY2F0aW9uLVR5cGUnLCBhcHBsaWNhdGlvblR5cGUudG9TdHJpbmcoKSlcbiAgICAgICAgICAuc2V0KCduZ3N3LWJ5cGFzcycsICd0cnVlJylcbiAgICAgICAgICAuc2V0KCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpXG4gICAgICAgICAgLnNldCgnYXBwTW9kdWxlJywgYXBwTW9kdWxlU3RyKSAvLyBUT0RPOiBSZW1vdmUgd2hlbiA4LjEgaXMgZGVwcmVjYXRlZCA/P1xuICAgICAgICAgIC5zZXQoJ0FwcC1Nb2R1bGUnLCBhcHBNb2R1bGVTdHIpXG4gICAgICAgICAgLnNldCgnU3ViLU1vZHVsZScsIHN1Yk1vZHVsZVN0cilcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgICAgIC5zZXQoJ1NwYXJrVmVyc2lvbicsIHNwYXJrVmVyc2lvbilcbiAgICAgICAgICAuc2V0KCdTbWFydFBhcmtWZXJzaW9uJywgc21hcnRQYXJrVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzXG4gICAgICAgICAgLnNldCgndGltZVpvbmUnLCBnZXRVc2VyVGltZVpvbmUoKSlcbiAgICAgICAgICAuc2V0KCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICAgICAgLnNldCgnU3BhcmtWZXJzaW9uJywgc3BhcmtWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcTogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIHJldHVybiAhQU5PTllNT1VTX0FQSVMuc29tZShhcGkgPT4gcmVxLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhdGhpcy5pc1JlZnJlc2hUb2tlblJlcXVlc3QocmVxKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiByZXEudXJsLmluY2x1ZGVzKGFwaSkpICYmICF0aGlzLmlzU2VsZlZhbGlkYXRpb25MaW5rVVJMO1xuICB9XG5cbiAgLy8gVGVtcG9yYXJ5IGNoZWNrIGZvciAnc2VsZi12YWxpZGF0aW9uP3Rva2VuPScgaW4gVVJMLlxuICAvLyBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2Ugc2VsZiB2YWxpZGF0aW9uIGxpbmtzIGFyZSBoYW5kbGVkIGJ5IHRoZSBuZXcgcHJvamVjdC5cbiAgcHJpdmF0ZSBpc1NlbGZWYWxpZGF0aW9uTGlua1VSTCA9IGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9zZWxmLXZhbGlkYXRpb24/dG9rZW49Jyk7XG5cbiAgcHJpdmF0ZSBnZXRTbWFydFBhcmtEdG8ocmVxdWVzdFVybDogc3RyaW5nKTogU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgIGxldCBndWlkID0gbnVsbDtcblxuICAgIGNvbnN0IGd1aWRQYXR0ZXJuID0gL1thLWZBLUYwLTldezh9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezEyfS87XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlcXVlc3RVcmwubWF0Y2goZ3VpZFBhdHRlcm4pO1xuXG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBndWlkID0gbWF0Y2hlc1swXTtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RVcmwuaW5jbHVkZXMoJy9zZW5kLW1haWwtZnJvbS1lbnRpdHknKSkge1xuICAgICAgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbWFydFBhcmtEdG8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNtYXJ0cGFya1N0YXRlLnNtYXJ0cGFya3MpPy5maW5kKHNtYXJ0UGFyayA9PiBzbWFydFBhcmsuZ3VpZCA9PT0gZ3VpZCk7XG4gICAgcmV0dXJuIHNtYXJ0UGFya0R0bztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRDbGVhclBhcmtTdGF0dXNHbG9iYWxFcnJvck5vdGlmaWNhdGlvbih1cmw6IHN0cmluZykge1xuICAgIGlmICh1cmw/LnN0YXJ0c1dpdGgoRURHRV9QUkVGSVhfQVBJKSkge1xuICAgICAgY29uc3QgYXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICAgIGlmIChhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLkNjIHx8IGFwcE1vZHVsZSA9PSBBcHBNb2R1bGUuTWFuYWdlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUucGFya0Nvbm5lY3Rpb25TdGF0dXNNYXApO1xuICAgICAgICBjb25zdCBndWlkOiBzdHJpbmcgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICAgIGNvbnN0IHBhcmtJZDogbnVtYmVyID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICAgICAgaWYgKGd1aWQgJiYgcGFya0lkICYmIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdKSB7XG4gICAgICAgICAgdmFyIHBhcmtDb25uZWN0aW9uU3RhdHVzID0gY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXTtcbiAgICAgICAgICBpZiAocGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZVNlcnZlckRpc2Nvbm5lY3RlZCB8fFxuICAgICAgICAgICAgcGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZUNsb3VkU2VydmVyRGlzY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcnZpY2VzUnVubmluZ1N0YXR1cyhndWlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VzUnVubmluZ1N0YXR1cyhzbWFydFBhcmtHdWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkpO1xuICAgIGNvbnN0IGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvID0gc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtzbWFydFBhcmtHdWlkXTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSB0cnVlO1xuICAgIGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSB0cnVlO1xuICAgIGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQoY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLCBzbWFydFBhcmtHdWlkKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3JSZXNwb25zZShlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkICYmICFBVVRIRU5USUNBVEVfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSkge1xuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgICAgY29uc3QgdGVuYW50ID0gc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xuICAgICAgaWYgKHRlbmFudD8udXNlcj8uc3NvQXV0aGVudGljYXRlZCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbih0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0KSB7XG4gICAgICB0aGlzLnNldENvbmZsaWN0RGV0ZWN0ZWQoZSk7XG4gICAgICB0aGlzLmxvZ291dChmYWxzZSwgZmFsc2UpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJDb25mbGljdERldGVjdGVkKCk7XG4gICAgICB9LCAzMDAwKTsgLy8gRGVsYXkgdGhlIHJlc2V0IHRvIGVuc3VyZSB0aGUgVUkgcmVhY3RzIGZpcnN0XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNwYXJrU2Vzc2lvbnMgPSAoKTogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4gPT4gSlNPTi5wYXJzZSh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKSk/LnNwYXJrU2Vzc2lvbnMgPz8ge307XG5cbiAgcHJpdmF0ZSBoYW5kbGVCYWNrb2ZmaWNlRXJyb3JSZXNwb25zZShlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkICYmICFBVVRIRU5USUNBVEVfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSkge1xuXG4gICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpO1xuICAgIH1cblxuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuQ29uZmxpY3QpIHtcbiAgICAgIHRoaXMuc2V0Q29uZmxpY3REZXRlY3RlZChlKTtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0xvZ2luKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckNvbmZsaWN0RGV0ZWN0ZWQoKTtcbiAgICAgIH0sIDMwMDApOyAvLyBEZWxheSB0aGUgcmVzZXQgdG8gZW5zdXJlIHRoZSBVSSByZWFjdHMgZmlyc3RcbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG9Mb2dpbih0ZW5hbnROYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgbG9naW5Sb3V0ZSA9ICcvYWNjb3VudC9sb2dpbic7XG5cbiAgICAvLyBJZiBtb2JpbGUg4oaSIGFsd2F5cyAnJywgb3RoZXJ3aXNlIGJ1aWxkIHJvdXRlICh3aXRoIG9yIHdpdGhvdXQgdGVuYW50KVxuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZVxuICAgICAgPyAnJ1xuICAgICAgOiB0ZW5hbnROYW1lXG4gICAgICAgID8gYCR7dGVuYW50TmFtZX0ke2xvZ2luUm91dGV9YFxuICAgICAgICA6IGxvZ2luUm91dGU7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG4gIH1cblxuXG4gIEBEaXNwYXRjaCgpIHByaXZhdGUgbG9nb3V0ID0gKGxvZ291dEF1ZGl0OiBib29sZWFuLCBsb2dvdXRCYWNrb2ZmaWNlQXVkaXQ6IGJvb2xlYW4pID0+IG5ldyBMb2dvdXRBY3Rpb24obG9nb3V0QXVkaXQsIGxvZ291dEJhY2tvZmZpY2VBdWRpdCk7IC8vIHdoZW4gNDAxIGRvIG5vdCBpbnZva2UgaW4gdGhlIGxvZ291dCBhY3Rpb24gdGhlIGxvZ291dCBBdWRpdFxuXG4gIEBEaXNwYXRjaCgpIHNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQgPSAoc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbihzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQpO1xuXG4gIEBEaXNwYXRjaCgpIHNldENvbmZsaWN0RGV0ZWN0ZWQgPSAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBuZXcgU2V0Q29uZmxpY3REZXRlY3RlZChlcnJvcik7XG4gIEBEaXNwYXRjaCgpIGNsZWFyQ29uZmxpY3REZXRlY3RlZCA9ICgpID0+IG5ldyBDbGVhckNvbmZsaWN0RGV0ZWN0ZWQoKTtcbn1cbiJdfQ==
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9hdXRoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBd0UsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQXFELE1BQU0sd0NBQXdDLENBQUM7QUFLdEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQUtyRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE1BQU07SUFDTix3Q0FBd0M7SUFDeEMscUNBQXFDO0lBQ3JDLG1EQUFtRDtJQUVuRCxhQUFhO0lBQ2IsMENBQTBDO0lBRTFDLFNBQVM7SUFDVCw4Q0FBOEM7SUFDOUMsMkNBQTJDO0lBQzNDLHlEQUF5RDtDQUMxRCxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7QUFDL0MsTUFBTSx1QkFBdUIsR0FBRyw0QkFBNEIsQ0FBQztBQUU3RCxNQUFNLGlCQUFpQixHQUFHLHNDQUFzQyxDQUFDO0FBQ2pFLE1BQU0sd0JBQXdCLEdBQUcsNENBQTRDLENBQUM7QUFFOUUsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUNBQXFDO0lBQ3JDLDBCQUEwQixFQUFFLGdGQUFnRjtDQUM3RyxDQUFDO0FBQ0YsTUFBTSxjQUFjLEdBQUc7SUFDckIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtREFBbUQ7SUFDbkQscUNBQXFDO0lBQ3JDLHdDQUF3QztJQUN4Qyw4Q0FBOEM7SUFDOUMsNENBQTRDO0lBQzVDLGtDQUFrQztJQUNsQyw2QkFBNkI7SUFDN0IsaUNBQWlDO0lBQ2pDLHFEQUFxRDtJQUNyRCw4QkFBOEI7SUFDOUIsd0NBQXdDO0lBQ3hDLG1EQUFtRDtJQUNuRCxpQ0FBaUM7SUFFakMsa0JBQWtCO0lBQ2xCLDBDQUEwQztDQUMzQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixTQUFTO0lBQ1Qsd0JBQXdCO0lBQ3hCLHlEQUF5RDtJQUN6RCwyQ0FBMkM7SUFDM0MsOENBQThDO0lBQzlDLG9EQUFvRDtJQUNwRCxtQ0FBbUM7SUFDbkMsMkRBQTJEO0lBQzNELG9DQUFvQztDQUNyQyxDQUFDO0FBR0YsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQixxQkFBNEMsRUFBVSxLQUFZLEVBQVUsTUFBYyxFQUNwRyxTQUEyQixFQUFVLG1CQUF3QyxFQUFVLG1CQUF3QztRQURySCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDcEcsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQVUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUdsSSwwQkFBcUIsR0FBRyxDQUFDLFdBQXdCLEVBQUUsRUFBRSxDQUMxRCxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUUsV0FBVyxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQTZHbkksMEJBQXFCLEdBQUcsQ0FBQyxHQUFxQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFtRDVJLHVEQUF1RDtRQUN2RCxpRkFBaUY7UUFDekUsNEJBQXVCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQXlGNUUscUJBQWdCLEdBQUcsR0FBNEIsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFpQ2pILFdBQU0sR0FBRyxDQUFDLFdBQW9CLEVBQUUscUJBQThCLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsK0RBQStEO1FBRWhNLGlDQUE0QixHQUFHLENBQUMscUJBQStDLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FDM0csSUFBSSxrQ0FBa0MsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRCx3QkFBbUIsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkYsMEJBQXFCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBclN0RSxDQUFDO0lBS00sYUFBYSxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDM0QsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBK0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBZ0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztRQUNwRSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRixPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLHVCQUF1QixDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDckUsR0FBRyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sR0FBK0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sMkJBQTJCLENBQUMsR0FBcUI7UUFDdkQsTUFBTSxlQUFlLEdBQW9CLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDZCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87cUJBQ2pCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQ3hFLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ25ELEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO3FCQUMxQixHQUFHLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDO3FCQUN2QyxHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxDQUFDO3FCQUNsQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQzthQUN4RSxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQ0ksQ0FBQztZQUNKLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNkLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztxQkFDakIsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQztxQkFDbEMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDbkQsR0FBRyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQztxQkFDdkMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7YUFDeEUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDakUsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBK0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBZ0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztRQUNwRSxJQUFJLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN4RixPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLGdDQUFnQyxDQUFDLENBQW9CLEVBQUUsR0FBcUIsRUFBRSxJQUFpQjtRQUNwRyxJQUFJLFFBQXlCLENBQUM7UUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sc0JBQXNCLENBQUMsQ0FBb0IsRUFBRSxHQUFxQixFQUFFLElBQWlCO1FBQzFGLElBQUksUUFBeUIsQ0FBQztRQUM5QixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixLQUFLLGNBQWMsQ0FBQyxZQUFZO2dCQUM5QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2QyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQ0QsTUFBTTtZQUNSO2dCQUNFLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07UUFDVixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLDRCQUE0QixDQUFDLENBQW9CLEVBQUUsR0FBcUIsRUFBRSxJQUFpQjtRQUNoRyxJQUFJLFFBQXlCLENBQUM7UUFDOUIsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsS0FBSyxjQUFjLENBQUMsWUFBWTtnQkFDOUIsSUFBSSxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFFLENBQUM7cUJBQU0sQ0FBQztvQkFDTixRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO2dCQUNELE1BQU07WUFDUjtnQkFDRSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxHQUFxQixFQUFFLEtBQXdCO1FBQzFFLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxjQUFjLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JGLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFTSwyQkFBMkIsQ0FBQyxHQUFxQixFQUFFLEtBQXdCO1FBQ2hGLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxjQUFjLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxvREFBb0QsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFMkksQ0FBQztJQUVySSxpQkFBaUIsQ0FBQyxHQUFxQjtRQUM3QyxNQUFNLGVBQWUsR0FBb0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVGLE1BQU0sU0FBUyxHQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxNQUFNLFNBQVMsR0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0UsTUFBTSxZQUFZLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWpELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbEgsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0MsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO3FCQUNqQixHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUN4RSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUNuRCxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztxQkFDMUIsR0FBRyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQztxQkFDdkMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyx5Q0FBeUM7cUJBQ3hFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDO3FCQUMvQixHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztxQkFDL0IsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQztxQkFDbEMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7cUJBQ3BFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO3FCQUNqQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLENBQUM7WUFDSixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDZCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87cUJBQ2pCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ25ELEdBQUcsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLENBQUM7cUJBQ2xDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUM7cUJBQ3ZDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO3FCQUNwRSxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQzthQUNyQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sd0JBQXdCLENBQUMsR0FBcUI7UUFDcEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEwsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEdBQXFCO1FBQzFELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFNTyxlQUFlLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWhCLE1BQU0sV0FBVyxHQUFHLDZFQUE2RSxDQUFDO1FBQ2xHLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyw4Q0FBOEMsQ0FBQyxHQUFXO1FBQ2hFLElBQUksR0FBRyxFQUFFLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsRUFBRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25FLE1BQU0sMEJBQTBCLEdBQStCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNoSSxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELElBQUksb0JBQW9CLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BFLElBQUksb0JBQW9CLENBQUMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLDJCQUEyQjt3QkFDakYsb0JBQW9CLENBQUMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLGdDQUFnQyxFQUFFLENBQUM7d0JBQ3ZGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sb0RBQW9ELENBQUMsR0FBVztRQUN0RSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsRUFBRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25FLE1BQU0sMEJBQTBCLEdBQStCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNoSSxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELElBQUksb0JBQW9CLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BFLElBQUksb0JBQW9CLENBQUMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLDJCQUEyQjt3QkFDakYsb0JBQW9CLENBQUMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLGdDQUFnQyxFQUFFLENBQUM7d0JBQ3ZGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsYUFBcUI7UUFDdkQsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNqSCxNQUFNLG9DQUFvQyxHQUE2QiwrQkFBK0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0SCxvQ0FBb0MsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakUsb0NBQW9DLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xFLG9DQUFvQyxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztRQUM1RSxvQ0FBb0MsQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7UUFDM0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDLG9DQUFvQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxDQUFvQjtRQUM5QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZKLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuRCxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtRQUM1RCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUlPLDZCQUE2QixDQUFDLENBQW9CO1FBQ3hELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsWUFBWSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFdkosSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxnREFBZ0Q7UUFDNUQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxlQUFlLENBQUMsVUFBbUI7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyx3RUFBd0U7UUFDeEUsTUFBTSxHQUFHLEdBQUcsZUFBZTtZQUN6QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxVQUFVO2dCQUNWLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLEVBQUU7Z0JBQzlCLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBaFNVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOztBQW1TUDtJQUFuQixRQUFRLEVBQUU7Z0RBQWlJO0FBRWhJO0lBQVgsUUFBUSxFQUFFO3NFQUMyRDtBQUUxRDtJQUFYLFFBQVEsRUFBRTs2REFBb0Y7QUFDbkY7SUFBWCxRQUFRLEVBQUU7K0RBQTJEOzRGQXpTM0QsZ0JBQWdCO2tCQUQ1QixVQUFVO3NPQW9TVyxNQUFNLE1BRWQsNEJBQTRCLE1BRzVCLG1CQUFtQixNQUNuQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSwgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICdAbmd4cy1sYWJzL2Rpc3BhdGNoLWRlY29yYXRvcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNFU1NJT04gfSBmcm9tICcuLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZU1hcCB9IGZyb20gJy4uL2VudW1zL2FwcC10eXBlLW1hcC5lbnVtJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmtDb25uZWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTcGFya1Nlc3Npb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NwYXJrLXNlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlZnJlc2hJbmZvIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL21vZGVsL3JlZnJlc2gtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJDb25mbGljdERldGVjdGVkLCBMb2dvdXRBY3Rpb24sIFNldENvbmZsaWN0RGV0ZWN0ZWQgfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvc2Vzc2lvbi5hY3Rpb25zJztcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQgeyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFNtYXJ0cGFya1N0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9zbWFydHBhcmtzL3NtYXJ0cGFyay5zdGF0ZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrRHRvLCBTdWJNb2R1bGUgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTbWFydHBhcmtCYXNpY0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVHlwZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvcnBjLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFVzZXJUaW1lWm9uZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZnJlc2hUb2tlblNlcnZpY2UgfSBmcm9tICcuL3JlZnJlc2gtdG9rZW4uc2VydmljZSc7XG5cbmNvbnN0IEFVVEhFTlRJQ0FURV9BUElTID0gW1xuICAvLyBXZWJcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGUnLFxuXG4gIC8vIEJhY2tvZmZpY2VcbiAgJ2FwaS9zZXJ2aWNlcy9iYWNrb2ZmaWNldXNlci9hdXRoZW50aWNhdGUnLFxuXG4gIC8vIE1vYmlsZVxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZScsXG5dO1xuXG5jb25zdCBFREdFX1BSRUZJWF9BUEkgPSAnL2FwaS9zZXJ2aWNlcy93ZWIvc3AnO1xuY29uc3QgTU9CT0lMRV9FREdFX1BSRUZJWF9BUEkgPSAnL2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvc3AnO1xuXG5jb25zdCBSRUZSRVNIX1RPS0VOX0FQSSA9ICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL3JlZnJlc2gtdG9rZW4nO1xuY29uc3QgUkVGUkVTSF9NT0JJTEVfVE9LRU5fQVBJID0gJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvcmVmcmVzaC10b2tlbic7XG5cbmNvbnN0IEVYVEVSTkFMX0FQSVMgPSBbXG4gICdhcGkvc2VydmljZXMvc2VsZnZhbGlkYXRpb24vZGV0YWlscycsXG4gICcvZXhlY3V0ZS9zZWxmLXZhbGlkYXRpb24nLCAvLyBUT0RPOiBSZW1vdmUgd2hlbiBzZWxmLXZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbmV3IHByb2plY3QgKE1hdGFuU2hvbWVyKVxuXTtcbmNvbnN0IEFOT05ZTU9VU19BUElTID0gW1xuICBSRUZSRVNIX1RPS0VOX0FQSSxcbiAgLy8gTGF0ZXN0IFdlYiBVUkxzXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbicsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL29pZGMtYXV0aCcsXG4gICdhcGkvc2VydmljZXMvd2ViL2Fzc2V0L2xvZ28nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGV0YWlscycsXG4gICdhcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vc3BhcmstbW9iaWxlLXZlcnNpb24nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGF0YScsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZCcsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZC10ZW5hbnRsZXNzJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYWN0aXZhdGUnLFxuICBcbiAgLy8gQmFja29mZmljZSBVUkxzXG4gICdhcGkvc2VydmljZXMvYmFja29mZmljZXVzZXIvYXV0aGVudGljYXRlJyxcbl07XG5cbmNvbnN0IE1PQklMRV9BTk9OWU1PVVNfQVBJUyA9IFtcbiAgLy8gTW9iaWxlXG4gIFJFRlJFU0hfTU9CSUxFX1RPS0VOX0FQSSxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgtbG9naW4nLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS9hc3NldC9sb2dvJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvY29uZmlndXJhdGlvbi9zcGFyay1tb2JpbGUtdmVyc2lvbicsXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3RlbmFudC9kYXRhJyxcbl07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoVG9rZW5TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSByZWZyZXNoVG9rZW5TZXJ2aWNlOiBSZWZyZXNoVG9rZW5TZXJ2aWNlLCBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBpc1JlZnJlc2hUb2tlbkV4cGlyZWQgPSAocmVmcmVzaEluZm86IFJlZnJlc2hJbmZvKSA9PlxuICAgICFyZWZyZXNoSW5mbyB8fCBuZXcgRGF0ZSgpID4gbmV3IERhdGUobW9tZW50KHJlZnJlc2hJbmZvLmV4cGlyYXRpb24pLmFkZCgtIHJlZnJlc2hJbmZvLnJlZnJlc2hJbnRlcnZhbCAqIDAuMSwgJ21pbGxpc2Vjb25kcycpLmZvcm1hdCgpKTtcblxuICBwdWJsaWMgaGFuZGxlUmVxdWVzdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgcmVxID0gdGhpcy5zZXRSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVSZWZyZXNoVG9rZW4ocmVxKSAmJiB0aGlzLmlzUmVmcmVzaFRva2VuRXhwaXJlZChyZWZyZXNoSW5mbykpIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQmFja09mZmljZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0QmFja09mZmljZVJlcXVlc3RIZWFkZXJzKHJlcSk7XG4gICAgbGV0IHJlcXVlc3Q6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+ID0gbmV4dC5oYW5kbGUocmVxKTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFja09mZmljZVJlcXVlc3RIZWFkZXJzKHJlcTogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uVHlwZTogQXBwbGljYXRpb25UeXBlID0gQXBwVHlwZU1hcC5nZXQodGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSk7XG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW59YClcbiAgICAgICAgICAuc2V0KCdBcHBsaWNhdGlvbi1UeXBlJywgYXBwbGljYXRpb25UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnbmdzdy1ieXBhc3MnLCAndHJ1ZScpXG4gICAgICAgICAgLnNldCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJylcbiAgICAgICAgICAuc2V0KCdDbGllbnRWZXJzaW9uJywgdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMocmVxKTtcbiAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gPSBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSkgJiYgdGhpcy5pc1JlZnJlc2hUb2tlbkV4cGlyZWQocmVmcmVzaEluZm8pKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5yZWZyZXNoVG9rZW5TZXJ2aWNlLmhhbmRsZVJlZnJlc2hUb2tlbihyZXEsIG5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tvZmZpY2VFdmVudFN0YXR1c0Vycm9yKGU6IEh0dHBFcnJvclJlc3BvbnNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgbGV0IHJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUJhY2tvZmZpY2VFcnJvclJlc3BvbnNlKGUpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVFdmVudFN0YXR1c0Vycm9yKGU6IEh0dHBFcnJvclJlc3BvbnNlLCByZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgbGV0IHJlc3BvbnNlOiBPYnNlcnZhYmxlPGFueT47XG4gICAgc3dpdGNoIChlLnN0YXR1cykge1xuICAgICAgY2FzZSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhhbmRsZVJlZnJlc2hUb2tlbihyZXEpKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSkpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMucmVmcmVzaFRva2VuU2VydmljZS5oYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxLCBuZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlc3BvbnNlID0gdGhpcy5oYW5kbGVFcnJvclJlc3BvbnNlKGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSB7XG4gICAgaWYgKGV2ZW50Py5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLk9rIHx8IGV2ZW50Py5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkFjY2VwdGVkKSB7XG4gICAgICB0aGlzLmNoZWNrQW5kQ2xlYXJQYXJrU3RhdHVzR2xvYmFsRXJyb3JOb3RpZmljYXRpb24ocmVxLnVybCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vYmlsZUhhbmRsZVN1Y2Nlc3NSZXNwb25zZShyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGlmIChldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5PayB8fCBldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5BY2NlcHRlZCkge1xuICAgICAgdGhpcy5tb2JpbGVDaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHJlcS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1JlZnJlc2hUb2tlblJlcXVlc3QgPSAocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSA9PiByZXEudXJsLmluY2x1ZGVzKFJFRlJFU0hfVE9LRU5fQVBJKSB8fCByZXEudXJsLmluY2x1ZGVzKFJFRlJFU0hfTU9CSUxFX1RPS0VOX0FQSSk7O1xuXG4gIHByaXZhdGUgc2V0UmVxdWVzdEhlYWRlcnMocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgYXBwbGljYXRpb25UeXBlOiBBcHBsaWNhdGlvblR5cGUgPSBBcHBUeXBlTWFwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlKTtcbiAgICBjb25zdCBhcHBNb2R1bGU6IEFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3Qgc3ViTW9kdWxlOiBTdWJNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5zdWJNb2R1bGUpO1xuICAgIGNvbnN0IGFwcE1vZHVsZVN0ciA9IGFwcE1vZHVsZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBzdWJNb2R1bGVTdHIgPSBzdWJNb2R1bGU/LnRvU3RyaW5nKCkgfHwgJyc7XG5cbiAgICBjb25zdCBzbWFydFBhcmtEdG8gPSB0aGlzLmdldFNtYXJ0UGFya0R0byhyZXEudXJsKSB8fCB7fTtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSBzbWFydFBhcmtEdG9bXCJzcGFya1ZlcnNpb25cIl0gPz8gJyc7XG4gICAgY29uc3Qgc21hcnRQYXJrVmVyc2lvbiA9IChzbWFydFBhcmtEdG9bXCJzbWFydFBhcmtWZXJzaW9uXCJdID8/ICcnKS5yZXBsYWNlKFwiIEJ1aWxkKFwiLCBcIl9cIikucmVwbGFjZShcIilcIiwgXCJcIikudHJpbSgpO1xuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW59YClcbiAgICAgICAgICAuc2V0KCdBcHBsaWNhdGlvbi1UeXBlJywgYXBwbGljYXRpb25UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnbmdzdy1ieXBhc3MnLCAndHJ1ZScpXG4gICAgICAgICAgLnNldCgnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKVxuICAgICAgICAgIC5zZXQoJ2FwcE1vZHVsZScsIGFwcE1vZHVsZVN0cikgLy8gVE9ETzogUmVtb3ZlIHdoZW4gOC4xIGlzIGRlcHJlY2F0ZWQgPz9cbiAgICAgICAgICAuc2V0KCdBcHAtTW9kdWxlJywgYXBwTW9kdWxlU3RyKVxuICAgICAgICAgIC5zZXQoJ1N1Yi1Nb2R1bGUnLCBzdWJNb2R1bGVTdHIpXG4gICAgICAgICAgLnNldCgndGltZVpvbmUnLCBnZXRVc2VyVGltZVpvbmUoKSlcbiAgICAgICAgICAuc2V0KCdDbGllbnRWZXJzaW9uJywgdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbilcbiAgICAgICAgICAuc2V0KCdTcGFya1ZlcnNpb24nLCBzcGFya1ZlcnNpb24pXG4gICAgICAgICAgLnNldCgnU21hcnRQYXJrVmVyc2lvbicsIHNtYXJ0UGFya1ZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ0FwcGxpY2F0aW9uLVR5cGUnLCBhcHBsaWNhdGlvblR5cGUudG9TdHJpbmcoKSlcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJylcbiAgICAgICAgICAuc2V0KCdDbGllbnRWZXJzaW9uJywgdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkucGFja2FnZUluZm8udmVyc2lvbilcbiAgICAgICAgICAuc2V0KCdTcGFya1ZlcnNpb24nLCBzcGFya1ZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRIYW5kbGVSZWZyZXNoVG9rZW4ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgcmV0dXJuICFBTk9OWU1PVVNfQVBJUy5zb21lKGFwaSA9PiByZXEudXJsLmluY2x1ZGVzKGFwaSkpICYmICF0aGlzLmlzUmVmcmVzaFRva2VuUmVxdWVzdChyZXEpICYmICFFWFRFUk5BTF9BUElTLnNvbWUoYXBpID0+IHJlcS51cmwuaW5jbHVkZXMoYXBpKSkgJiYgIXRoaXMuaXNTZWxmVmFsaWRhdGlvbkxpbmtVUkw7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEhhbmRsZU1vYmlsZVJlZnJlc2hUb2tlbihyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICByZXR1cm4gIU1PQklMRV9BTk9OWU1PVVNfQVBJUy5zb21lKGFwaSA9PiByZXEudXJsLmluY2x1ZGVzKGFwaSkpICYmICF0aGlzLmlzUmVmcmVzaFRva2VuUmVxdWVzdChyZXEpO1xuICB9XG5cbiAgLy8gVGVtcG9yYXJ5IGNoZWNrIGZvciAnc2VsZi12YWxpZGF0aW9uP3Rva2VuPScgaW4gVVJMLlxuICAvLyBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2Ugc2VsZiB2YWxpZGF0aW9uIGxpbmtzIGFyZSBoYW5kbGVkIGJ5IHRoZSBuZXcgcHJvamVjdC5cbiAgcHJpdmF0ZSBpc1NlbGZWYWxpZGF0aW9uTGlua1VSTCA9IGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9zZWxmLXZhbGlkYXRpb24/dG9rZW49Jyk7XG5cbiAgcHJpdmF0ZSBnZXRTbWFydFBhcmtEdG8ocmVxdWVzdFVybDogc3RyaW5nKTogU21hcnRwYXJrRHRvIHwgU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgIGxldCBndWlkID0gbnVsbDtcblxuICAgIGNvbnN0IGd1aWRQYXR0ZXJuID0gL1thLWZBLUYwLTldezh9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezR9LVthLWZBLUYwLTldezEyfS87XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlcXVlc3RVcmwubWF0Y2goZ3VpZFBhdHRlcm4pO1xuXG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBndWlkID0gbWF0Y2hlc1swXTtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RVcmwuaW5jbHVkZXMoJy9zZW5kLW1haWwtZnJvbS1lbnRpdHknKSkge1xuICAgICAgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbWFydFBhcmtEdG8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNtYXJ0cGFya1N0YXRlLnNtYXJ0cGFya3MpPy5maW5kKHNtYXJ0UGFyayA9PiBzbWFydFBhcmsuZ3VpZCA9PT0gZ3VpZCk7XG4gICAgcmV0dXJuIHNtYXJ0UGFya0R0bztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRDbGVhclBhcmtTdGF0dXNHbG9iYWxFcnJvck5vdGlmaWNhdGlvbih1cmw6IHN0cmluZykge1xuICAgIGlmICh1cmw/LnN0YXJ0c1dpdGgoRURHRV9QUkVGSVhfQVBJKSkge1xuICAgICAgY29uc3QgYXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICAgIGlmIChhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLkNjIHx8IGFwcE1vZHVsZSA9PSBBcHBNb2R1bGUuTWFuYWdlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUucGFya0Nvbm5lY3Rpb25TdGF0dXNNYXApO1xuICAgICAgICBjb25zdCBndWlkOiBzdHJpbmcgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICAgIGNvbnN0IHBhcmtJZDogbnVtYmVyID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICAgICAgaWYgKGd1aWQgJiYgcGFya0lkICYmIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdKSB7XG4gICAgICAgICAgdmFyIHBhcmtDb25uZWN0aW9uU3RhdHVzID0gY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXTtcbiAgICAgICAgICBpZiAocGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZVNlcnZlckRpc2Nvbm5lY3RlZCB8fFxuICAgICAgICAgICAgcGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZUNsb3VkU2VydmVyRGlzY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcnZpY2VzUnVubmluZ1N0YXR1cyhndWlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vYmlsZUNoZWNrQW5kQ2xlYXJQYXJrU3RhdHVzR2xvYmFsRXJyb3JOb3RpZmljYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodXJsPy5zdGFydHNXaXRoKE1PQk9JTEVfRURHRV9QUkVGSVhfQVBJKSkge1xuICAgICAgY29uc3QgYXBwTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKTtcbiAgICAgIGlmIChhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLkNjIHx8IGFwcE1vZHVsZSA9PSBBcHBNb2R1bGUuTWFuYWdlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUucGFya0Nvbm5lY3Rpb25TdGF0dXNNYXApO1xuICAgICAgICBjb25zdCBndWlkOiBzdHJpbmcgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICAgIGNvbnN0IHBhcmtJZDogbnVtYmVyID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICAgICAgaWYgKGd1aWQgJiYgcGFya0lkICYmIGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdKSB7XG4gICAgICAgICAgdmFyIHBhcmtDb25uZWN0aW9uU3RhdHVzID0gY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXTtcbiAgICAgICAgICBpZiAocGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZVNlcnZlckRpc2Nvbm5lY3RlZCB8fFxuICAgICAgICAgICAgcGFya0Nvbm5lY3Rpb25TdGF0dXMuc3RhdHVzID09IFBhcmtDb25uZWN0aW9uU3RhdHVzLlNwYXJrQ29yZUNsb3VkU2VydmVyRGlzY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcnZpY2VzUnVubmluZ1N0YXR1cyhndWlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcnZpY2VzUnVubmluZ1N0YXR1cyhzbWFydFBhcmtHdWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkpO1xuICAgIGNvbnN0IGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvID0gc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtzbWFydFBhcmtHdWlkXTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSB0cnVlO1xuICAgIGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSB0cnVlO1xuICAgIGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQoY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLCBzbWFydFBhcmtHdWlkKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3JSZXNwb25zZShlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkICYmICFBVVRIRU5USUNBVEVfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSkge1xuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgICAgY29uc3QgdGVuYW50ID0gc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xuICAgICAgaWYgKHRlbmFudD8udXNlcj8uc3NvQXV0aGVudGljYXRlZCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbih0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0KSB7XG4gICAgICB0aGlzLnNldENvbmZsaWN0RGV0ZWN0ZWQoZSk7XG4gICAgICB0aGlzLmxvZ291dChmYWxzZSwgZmFsc2UpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJDb25mbGljdERldGVjdGVkKCk7XG4gICAgICB9LCAzMDAwKTsgLy8gRGVsYXkgdGhlIHJlc2V0IHRvIGVuc3VyZSB0aGUgVUkgcmVhY3RzIGZpcnN0XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNwYXJrU2Vzc2lvbnMgPSAoKTogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4gPT4gSlNPTi5wYXJzZSh0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKSk/LnNwYXJrU2Vzc2lvbnMgPz8ge307XG5cbiAgcHJpdmF0ZSBoYW5kbGVCYWNrb2ZmaWNlRXJyb3JSZXNwb25zZShlOiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkICYmICFBVVRIRU5USUNBVEVfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiBlLnVybC5pbmNsdWRlcyhhcGkpKSkge1xuXG4gICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpO1xuICAgIH1cblxuICAgIGlmIChlLnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuQ29uZmxpY3QpIHtcbiAgICAgIHRoaXMuc2V0Q29uZmxpY3REZXRlY3RlZChlKTtcbiAgICAgIHRoaXMubmF2aWdhdGVUb0xvZ2luKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhckNvbmZsaWN0RGV0ZWN0ZWQoKTtcbiAgICAgIH0sIDMwMDApOyAvLyBEZWxheSB0aGUgcmVzZXQgdG8gZW5zdXJlIHRoZSBVSSByZWFjdHMgZmlyc3RcbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG9Mb2dpbih0ZW5hbnROYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgbG9naW5Sb3V0ZSA9ICcvYWNjb3VudC9sb2dpbic7XG5cbiAgICAvLyBJZiBtb2JpbGUg4oaSIGFsd2F5cyAnJywgb3RoZXJ3aXNlIGJ1aWxkIHJvdXRlICh3aXRoIG9yIHdpdGhvdXQgdGVuYW50KVxuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZVxuICAgICAgPyAnJ1xuICAgICAgOiB0ZW5hbnROYW1lXG4gICAgICAgID8gYCR7dGVuYW50TmFtZX0ke2xvZ2luUm91dGV9YFxuICAgICAgICA6IGxvZ2luUm91dGU7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG4gIH1cblxuXG4gIEBEaXNwYXRjaCgpIHByaXZhdGUgbG9nb3V0ID0gKGxvZ291dEF1ZGl0OiBib29sZWFuLCBsb2dvdXRCYWNrb2ZmaWNlQXVkaXQ6IGJvb2xlYW4pID0+IG5ldyBMb2dvdXRBY3Rpb24obG9nb3V0QXVkaXQsIGxvZ291dEJhY2tvZmZpY2VBdWRpdCk7IC8vIHdoZW4gNDAxIGRvIG5vdCBpbnZva2UgaW4gdGhlIGxvZ291dCBhY3Rpb24gdGhlIGxvZ291dCBBdWRpdFxuXG4gIEBEaXNwYXRjaCgpIHNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQgPSAoc2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbihzZXJ2aWNlc1J1bm5pbmdTdGF0dXMsIGd1aWQpO1xuXG4gIEBEaXNwYXRjaCgpIHNldENvbmZsaWN0RGV0ZWN0ZWQgPSAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBuZXcgU2V0Q29uZmxpY3REZXRlY3RlZChlcnJvcik7XG4gIEBEaXNwYXRjaCgpIGNsZWFyQ29uZmxpY3REZXRlY3RlZCA9ICgpID0+IG5ldyBDbGVhckNvbmZsaWN0RGV0ZWN0ZWQoKTtcbn1cbiJdfQ==
@@ -2,19 +2,17 @@ import { Injectable } from '@angular/core';
2
2
  import { ofActionDispatched } from '@ngxs/store';
3
3
  import { first, Subject, throwError } from 'rxjs';
4
4
  import { catchError, filter, finalize, switchMap, take, tap } from 'rxjs/operators';
5
- import { VERSION_MOBILE_LATEST } from '../constants/version-constants';
6
- import { LogoutAction, LogoutMobileAction, SetStateAction } from '../modules/auth/session.actions';
5
+ import { LogoutAction, SetStateAction } from '../modules/auth/session.actions';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "@ngxs/store";
9
8
  import * as i2 from "../service-proxy/identity-service-proxies";
10
9
  import * as i3 from "./session-storage.service";
11
10
  export class RefreshTokenService {
12
- constructor(store, actions$, usersServiceProxyIdentity, sessionStorageService, mobileIdentityServiceProxy) {
11
+ constructor(store, actions$, usersServiceProxyIdentity, sessionStorageService) {
13
12
  this.store = store;
14
13
  this.actions$ = actions$;
15
14
  this.usersServiceProxyIdentity = usersServiceProxyIdentity;
16
15
  this.sessionStorageService = sessionStorageService;
17
- this.mobileIdentityServiceProxy = mobileIdentityServiceProxy;
18
16
  this.isRefreshing = false;
19
17
  this.refreshTokenSubject = new Subject();
20
18
  }
@@ -42,10 +40,10 @@ export class RefreshTokenService {
42
40
  }
43
41
  handleMobileRefreshToken(request, next) {
44
42
  if (!this.isRefreshing) {
45
- const subscription = this.listenToLogoutMobileAction();
43
+ const subscription = this.listenToLogoutAction();
46
44
  this.isRefreshing = true;
47
45
  const refreshInfo = this.sessionStorageService.getAuth;
48
- return this.mobileIdentityServiceProxy.mobileRefreshToken(VERSION_MOBILE_LATEST, refreshInfo?.refreshToken).pipe(switchMap(tokenResult => {
46
+ return this.usersServiceProxyIdentity.refreshToken(refreshInfo?.refreshToken).pipe(switchMap(tokenResult => {
49
47
  this.setAuthSession(tokenResult.data);
50
48
  return next.handle(this.addToken(request, tokenResult.data.accessToken));
51
49
  }), catchError((error) => throwError(() => error)), finalize(() => {
@@ -53,8 +51,7 @@ export class RefreshTokenService {
53
51
  subscription.unsubscribe();
54
52
  }
55
53
  this.isRefreshing = false;
56
- // Process the request queue after token refresh completes
57
- this.refreshTokenSubject.next(this.sessionStorageService.accessToken);
54
+ this.handleTokenRefreshResult();
58
55
  }));
59
56
  }
60
57
  else {
@@ -87,11 +84,6 @@ export class RefreshTokenService {
87
84
  this.clearRefreshTokenQueue();
88
85
  });
89
86
  }
90
- listenToLogoutMobileAction() {
91
- return this.actions$.pipe(ofActionDispatched(LogoutMobileAction), first()).subscribe(() => {
92
- this.clearRefreshTokenQueue();
93
- });
94
- }
95
87
  clearRefreshTokenQueue() {
96
88
  this.refreshTokenSubject.complete();
97
89
  this.refreshTokenSubject = new Subject();
@@ -107,10 +99,20 @@ export class RefreshTokenService {
107
99
  }
108
100
  });
109
101
  }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenService, deps: [{ token: i1.Store }, { token: i1.Actions }, { token: i2.UsersIdentityServiceProxy }, { token: i3.SessionStorageService }, { token: i2.MobileIdentityServiceProxy }], target: i0.ɵɵFactoryTarget.Injectable }); }
102
+ handleTokenRefreshResult() {
103
+ if (this.sessionStorageService.accessToken) {
104
+ // Token refresh succeeded → notify queued requests with the new access token
105
+ this.refreshTokenSubject.next(this.sessionStorageService.accessToken);
106
+ }
107
+ else {
108
+ // Token refresh failed or expired → clear pending requests to prevent memory leaks
109
+ this.clearRefreshTokenQueue();
110
+ }
111
+ }
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenService, deps: [{ token: i1.Store }, { token: i1.Actions }, { token: i2.UsersIdentityServiceProxy }, { token: i3.SessionStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
111
113
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenService }); }
112
114
  }
113
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenService, decorators: [{
114
116
  type: Injectable
115
- }], ctorParameters: () => [{ type: i1.Store }, { type: i1.Actions }, { type: i2.UsersIdentityServiceProxy }, { type: i3.SessionStorageService }, { type: i2.MobileIdentityServiceProxy }] });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9yZWZyZXNoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVcsa0JBQWtCLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQUtuRyxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQW9CLEtBQVksRUFDdEIsUUFBaUIsRUFDakIseUJBQW9ELEVBQ3BELHFCQUE0QyxFQUM1QywwQkFBc0Q7UUFKNUMsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBUHhELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHdCQUFtQixHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO0lBTy9ELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQ3BFLElB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgb2ZBY3Rpb25EaXNwYXRjaGVkLCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGZpcnN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVkVSU0lPTl9NT0JJTEVfTEFURVNUIH0gZnJvbSAnLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZnJlc2hJbmZvIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL21vZGVsL3JlZnJlc2gtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTG9nb3V0QWN0aW9uLCBMb2dvdXRNb2JpbGVBY3Rpb24sIFNldFN0YXRlQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBNb2JpbGVJZGVudGl0eVNlcnZpY2VQcm94eSwgUmVmcmVzaFRva2VuRHRvLCBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5TZXJ2aWNlIHtcblxuICBwcml2YXRlIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlZnJlc2hUb2tlblN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eTogVXNlcnNJZGVudGl0eVNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlSWRlbnRpdHlTZXJ2aWNlUHJveHk6IE1vYmlsZUlkZW50aXR5U2VydmljZVByb3h5KSB7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlUmVmcmVzaFRva2VuKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlblRvTG9nb3V0QWN0aW9uKCk7XG4gICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgICBjb25zdCByZWZyZXNoSW5mbzogUmVmcmVzaEluZm8gPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRBdXRoO1xuICAgICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS5yZWZyZXNoVG9rZW4ocmVmcmVzaEluZm8/LnJlZnJlc2hUb2tlbikucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHRva2VuUmVzdWx0ID0+IHtcbiAgICAgICAgICB0aGlzLnNldEF1dGhTZXNzaW9uKHRva2VuUmVzdWx0LmRhdGEpO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuYWRkVG9rZW4ocmVxdWVzdCwgdG9rZW5SZXN1bHQuZGF0YS5hY2Nlc3NUb2tlbikpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgcmVxdWVzdCBxdWV1ZSBhZnRlciB0b2tlbiByZWZyZXNoIGNvbXBsZXRlc1xuICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFF1ZXVlIHRoZSBmYWlsZWQgcmVxdWVzdFxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVmcmVzaFRva2VuUXVldWUocmVxdWVzdCwgbmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZVJlZnJlc2hUb2tlbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW5Ub0xvZ291dE1vYmlsZUFjdGlvbigpO1xuICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICAgIHJldHVybiB0aGlzLm1vYmlsZUlkZW50aXR5U2VydmljZVByb3h5Lm1vYmlsZVJlZnJlc2hUb2tlbihWRVJTSU9OX01PQklMRV9MQVRFU1QsIHJlZnJlc2hJbmZvPy5yZWZyZXNoVG9rZW4pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh0b2tlblJlc3VsdCA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRBdXRoU2Vzc2lvbih0b2tlblJlc3VsdC5kYXRhKTtcblxuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZFRva2VuKHJlcXVlc3QsIHRva2VuUmVzdWx0LmRhdGEuYWNjZXNzVG9rZW4pKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIHJlcXVlc3QgcXVldWUgYWZ0ZXIgdG9rZW4gcmVmcmVzaCBjb21wbGV0ZXNcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFF1ZXVlIHRoZSBmYWlsZWQgcmVxdWVzdFxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVmcmVzaFRva2VuUXVldWUocmVxdWVzdCwgbmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFJlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS5yZWZyZXNoVG9rZW4ocmVmcmVzaEluZm8/LnJlZnJlc2hUb2tlbikucGlwZSh0YXAoe1xuICAgICAgbmV4dDogdG9rZW5SZXN1bHQgPT4gdGhpcy5zZXRBdXRoU2Vzc2lvbih0b2tlblJlc3VsdC5kYXRhKVxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROZXdSZWZyZXNoSW5mbyh0b2tlblJlc3VsdDogUmVmcmVzaFRva2VuRHRvKTogUmVmcmVzaEluZm8ge1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgY29uc3QgbmV3UmVmcmVzaERhdGE6IFJlZnJlc2hJbmZvID0ge1xuICAgICAgcmVmcmVzaFRva2VuOiB0b2tlblJlc3VsdC5yZWZyZXNoVG9rZW4sXG4gICAgICBleHBpcmF0aW9uOiB0b2tlblJlc3VsdC5leHBpcmF0aW9uLFxuICAgICAgcmVmcmVzaEludGVydmFsOiByZWZyZXNoSW5mby5yZWZyZXNoSW50ZXJ2YWwsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXdSZWZyZXNoRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBdXRoU2Vzc2lvbih0b2tlblJlc3VsdDogUmVmcmVzaFRva2VuRHRvKSB7XG4gICAgY29uc3QgbmV3UmVmcmVzaERhdGE6IFJlZnJlc2hJbmZvID0gdGhpcy5nZXROZXdSZWZyZXNoSW5mbyh0b2tlblJlc3VsdCk7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0QXV0aFNlc3Npb24odG9rZW5SZXN1bHQuYWNjZXNzVG9rZW4sIG5ld1JlZnJlc2hEYXRhKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBTZXRTdGF0ZUFjdGlvbih0b2tlblJlc3VsdC5hY2Nlc3NUb2tlbiwgbmV3UmVmcmVzaERhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVG9Mb2dvdXRBY3Rpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChMb2dvdXRBY3Rpb24pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhclJlZnJlc2hUb2tlblF1ZXVlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRvTG9nb3V0TW9iaWxlQWN0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoTG9nb3V0TW9iaWxlQWN0aW9uKSwgZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJSZWZyZXNoVG9rZW5RdWV1ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlZnJlc2hUb2tlblF1ZXVlKCkge1xuICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWZyZXNoVG9rZW5RdWV1ZShyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKGZpbHRlcigodG9rZW4pID0+ICF0aGlzLmlzUmVmcmVzaGluZyAmJiAhIXRva2VuKSwgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgodG9rZW46IHN0cmluZykgPT4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlbihyZXF1ZXN0LCB0b2tlbikpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRva2VuKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIHRva2VuOiBzdHJpbmcpOiBIdHRwUmVxdWVzdDxhbnk+IHtcbiAgICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
117
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i1.Actions }, { type: i2.UsersIdentityServiceProxy }, { type: i3.SessionStorageService }] });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9yZWZyZXNoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVcsa0JBQWtCLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQUsvRSxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQW9CLEtBQVksRUFDdEIsUUFBaUIsRUFDakIseUJBQW9ELEVBQ3BELHFCQUE0QztRQUhsQyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBTjlDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHdCQUFtQixHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO0lBTS9ELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVks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QUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUMxRSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDNUYsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFFTyxRQUFRLENBQUMsT0FBeUIsRUFBRSxLQUFhO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNuQixVQUFVLEVBQUU7Z0JBQ1YsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFO2FBQ2pDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQyw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDTixtRkFBbUY7WUFDbkYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7K0dBNUhVLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgb2ZBY3Rpb25EaXNwYXRjaGVkLCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGZpcnN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVmcmVzaEluZm8gfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvbW9kZWwvcmVmcmVzaC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMb2dvdXRBY3Rpb24sIFNldFN0YXRlQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBSZWZyZXNoVG9rZW5EdG8sIFVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZnJlc2hUb2tlblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5OiBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZWZyZXNoVG9rZW4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuVG9Mb2dvdXRBY3Rpb24oKTtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnJlZnJlc2hUb2tlbihyZWZyZXNoSW5mbz8ucmVmcmVzaFRva2VuKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodG9rZW5SZXN1bHQgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0QXV0aFNlc3Npb24odG9rZW5SZXN1bHQuZGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlbihyZXF1ZXN0LCB0b2tlblJlc3VsdC5kYXRhLmFjY2Vzc1Rva2VuKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcikpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgcmVxdWVzdCBxdWV1ZSBhZnRlciB0b2tlbiByZWZyZXNoIGNvbXBsZXRlc1xuICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBRdWV1ZSB0aGUgZmFpbGVkIHJlcXVlc3RcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJlZnJlc2hUb2tlblF1ZXVlKHJlcXVlc3QsIG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuVG9Mb2dvdXRBY3Rpb24oKTtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnJlZnJlc2hUb2tlbihyZWZyZXNoSW5mbz8ucmVmcmVzaFRva2VuKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodG9rZW5SZXN1bHQgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0QXV0aFNlc3Npb24odG9rZW5SZXN1bHQuZGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlbihyZXF1ZXN0LCB0b2tlblJlc3VsdC5kYXRhLmFjY2Vzc1Rva2VuKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcikpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVRva2VuUmVmcmVzaFJlc3VsdCgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUXVldWUgdGhlIGZhaWxlZCByZXF1ZXN0XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSZWZyZXNoVG9rZW5RdWV1ZShyZXF1ZXN0LCBuZXh0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnJlZnJlc2hUb2tlbihyZWZyZXNoSW5mbz8ucmVmcmVzaFRva2VuKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiB0b2tlblJlc3VsdCA9PiB0aGlzLnNldEF1dGhTZXNzaW9uKHRva2VuUmVzdWx0LmRhdGEpXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGdldE5ld1JlZnJlc2hJbmZvKHRva2VuUmVzdWx0OiBSZWZyZXNoVG9rZW5EdG8pOiBSZWZyZXNoSW5mbyB7XG4gICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICBjb25zdCBuZXdSZWZyZXNoRGF0YTogUmVmcmVzaEluZm8gPSB7XG4gICAgICByZWZyZXNoVG9rZW46IHRva2VuUmVzdWx0LnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyYXRpb246IHRva2VuUmVzdWx0LmV4cGlyYXRpb24sXG4gICAgICByZWZyZXNoSW50ZXJ2YWw6IHJlZnJlc2hJbmZvLnJlZnJlc2hJbnRlcnZhbCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld1JlZnJlc2hEYXRhO1xuICB9XG5cbiAgcHVibGljIHNldEF1dGhTZXNzaW9uKHRva2VuUmVzdWx0OiBSZWZyZXNoVG9rZW5EdG8pIHtcbiAgICBjb25zdCBuZXdSZWZyZXNoRGF0YTogUmVmcmVzaEluZm8gPSB0aGlzLmdldE5ld1JlZnJlc2hJbmZvKHRva2VuUmVzdWx0KTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRBdXRoU2Vzc2lvbih0b2tlblJlc3VsdC5hY2Nlc3NUb2tlbiwgbmV3UmVmcmVzaERhdGEpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFN0YXRlQWN0aW9uKHRva2VuUmVzdWx0LmFjY2Vzc1Rva2VuLCBuZXdSZWZyZXNoRGF0YSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ub0xvZ291dEFjdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKExvZ291dEFjdGlvbiksIGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyUmVmcmVzaFRva2VuUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJSZWZyZXNoVG9rZW5RdWV1ZSgpIHtcbiAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVmcmVzaFRva2VuUXVldWUocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QucGlwZShmaWx0ZXIoKHRva2VuKSA9PiAhdGhpcy5pc1JlZnJlc2hpbmcgJiYgISF0b2tlbiksIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKHRva2VuOiBzdHJpbmcpID0+IG5leHQuaGFuZGxlKHRoaXMuYWRkVG9rZW4ocmVxdWVzdCwgdG9rZW4pKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb2tlbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCB0b2tlbjogc3RyaW5nKTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUb2tlblJlZnJlc2hSZXN1bHQoKSB7XG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAvLyBUb2tlbiByZWZyZXNoIHN1Y2NlZWRlZCDihpIgbm90aWZ5IHF1ZXVlZCByZXF1ZXN0cyB3aXRoIHRoZSBuZXcgYWNjZXNzIHRva2VuXG4gICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dCh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRva2VuIHJlZnJlc2ggZmFpbGVkIG9yIGV4cGlyZWQg4oaSIGNsZWFyIHBlbmRpbmcgcmVxdWVzdHMgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgIHRoaXMuY2xlYXJSZWZyZXNoVG9rZW5RdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuIl19