@c8y/ngx-components 1019.2.4 → 1019.2.8

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 (167) hide show
  1. package/core/common/forOf.directive.d.ts +10 -1
  2. package/core/common/forOf.directive.d.ts.map +1 -1
  3. package/core/common/geo.service.d.ts +9 -0
  4. package/core/common/geo.service.d.ts.map +1 -0
  5. package/core/common/index.d.ts +1 -0
  6. package/core/common/index.d.ts.map +1 -1
  7. package/core/common/load-more.component.d.ts +1 -0
  8. package/core/common/load-more.component.d.ts.map +1 -1
  9. package/core/core.module.d.ts +50 -49
  10. package/core/core.module.d.ts.map +1 -1
  11. package/core/index.d.ts +1 -0
  12. package/core/index.d.ts.map +1 -1
  13. package/core/realtime/realtime-button.component.d.ts +5 -2
  14. package/core/realtime/realtime-button.component.d.ts.map +1 -1
  15. package/core/router/context-route.service.d.ts +6 -5
  16. package/core/router/context-route.service.d.ts.map +1 -1
  17. package/core/time-interval/index.d.ts +3 -0
  18. package/core/time-interval/index.d.ts.map +1 -0
  19. package/core/time-interval/time-interval.component.d.ts +26 -0
  20. package/core/time-interval/time-interval.component.d.ts.map +1 -0
  21. package/core/time-interval/time-interval.model.d.ts +33 -0
  22. package/core/time-interval/time-interval.model.d.ts.map +1 -0
  23. package/esm2022/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +1 -1
  24. package/esm2022/core/audit-log/audit-log.component.mjs +1 -1
  25. package/esm2022/core/bootstrap/bootstrap.component.mjs +3 -3
  26. package/esm2022/core/common/forOf.directive.mjs +18 -2
  27. package/esm2022/core/common/geo.service.mjs +30 -0
  28. package/esm2022/core/common/index.mjs +2 -1
  29. package/esm2022/core/common/load-more.component.mjs +5 -2
  30. package/esm2022/core/core.module.mjs +11 -7
  31. package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +1 -1
  32. package/esm2022/core/index.mjs +2 -1
  33. package/esm2022/core/realtime/realtime-button.component.mjs +10 -4
  34. package/esm2022/core/router/context-route.service.mjs +10 -4
  35. package/esm2022/core/search/search-input.component.mjs +1 -1
  36. package/esm2022/core/time-interval/index.mjs +3 -0
  37. package/esm2022/core/time-interval/time-interval.component.mjs +85 -0
  38. package/esm2022/core/time-interval/time-interval.model.mjs +54 -0
  39. package/esm2022/datapoint-library/list/datapoint-library-list.component.mjs +2 -2
  40. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +1 -1
  41. package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
  42. package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +1 -1
  43. package/esm2022/device-shell/shell/shell.component.mjs +1 -1
  44. package/esm2022/diagnostics/diagnostics.component.mjs +1 -1
  45. package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +1 -1
  46. package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +1 -1
  47. package/esm2022/location/location.component.mjs +1 -1
  48. package/esm2022/map/cluster-map.component.mjs +7 -7
  49. package/esm2022/map/map.component.mjs +92 -36
  50. package/esm2022/map/map.model.mjs +3 -2
  51. package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
  52. package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +1 -1
  53. package/esm2022/operations/operations-list/operations-list.component.mjs +1 -1
  54. package/esm2022/operations/operations-timeline/operations-timeline.component.mjs +1 -1
  55. package/esm2022/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.mjs +1 -1
  56. package/esm2022/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.mjs +1 -1
  57. package/esm2022/operations/stepper-bulk-type-firmware/select-firmware.component.mjs +1 -1
  58. package/esm2022/operations/stepper-bulk-type-firmware/version-or-patch.component.mjs +1 -1
  59. package/esm2022/operations/stepper-bulk-type-software/select-software-step.component.mjs +1 -1
  60. package/esm2022/protocol-lpwan/lpwan-set-connections.component.mjs +1 -1
  61. package/esm2022/protocol-lpwan/lpwan-set-device-protocol.component.mjs +1 -1
  62. package/esm2022/repository/configuration/list/configuration-detail.component.mjs +1 -1
  63. package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
  64. package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +1 -1
  65. package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +1 -1
  66. package/esm2022/repository/firmware/list/firmware-details.component.mjs +1 -1
  67. package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
  68. package/esm2022/repository/shared/software-type/software-type.component.mjs +1 -1
  69. package/esm2022/repository/software/device-tab/device-software-list.component.mjs +1 -1
  70. package/esm2022/repository/software/list/add-software-modal.component.mjs +1 -1
  71. package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +1 -1
  72. package/esm2022/repository/software/list/software-details.component.mjs +1 -1
  73. package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
  74. package/esm2022/tracking/c8y-ngx-components-tracking.mjs +5 -0
  75. package/esm2022/tracking/index.mjs +6 -0
  76. package/esm2022/tracking/tracking-marker-popup.component.mjs +34 -0
  77. package/esm2022/tracking/tracking-tab.guard.mjs +25 -0
  78. package/esm2022/tracking/tracking.component.mjs +92 -0
  79. package/esm2022/tracking/tracking.feature.mjs +16 -0
  80. package/esm2022/tracking/tracking.service.mjs +124 -0
  81. package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +5 -5
  82. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +1 -1
  83. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +2 -2
  84. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
  85. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +1 -1
  87. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
  89. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
  91. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
  93. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
  95. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  97. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  99. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-location.mjs +1 -1
  101. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-map.mjs +95 -38
  103. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
  105. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
  107. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  109. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
  111. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
  113. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
  115. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  116. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
  117. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  118. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
  119. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  120. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
  121. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  122. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -2
  123. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  124. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
  125. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  126. package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -1
  127. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  128. package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -4
  129. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  130. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  131. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  132. package/fesm2022/c8y-ngx-components-tracking.mjs +271 -0
  133. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -0
  134. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -5
  135. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  136. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +1 -1
  137. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  138. package/fesm2022/c8y-ngx-components.mjs +204 -16
  139. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  140. package/locales/de.po +158 -83
  141. package/locales/en.po +6 -0
  142. package/locales/fr.po +342 -186
  143. package/locales/locales.pot +34 -28
  144. package/locales/nl.po +326 -170
  145. package/locales/pt_BR.po +342 -186
  146. package/map/cluster-map.component.d.ts +3 -3
  147. package/map/cluster-map.component.d.ts.map +1 -1
  148. package/map/map.component.d.ts +17 -7
  149. package/map/map.component.d.ts.map +1 -1
  150. package/map/map.model.d.ts +14 -6
  151. package/map/map.model.d.ts.map +1 -1
  152. package/package.json +1 -1
  153. package/tracking/c8y-ngx-components-tracking.d.ts.map +1 -0
  154. package/tracking/index.d.ts +6 -0
  155. package/tracking/index.d.ts.map +1 -0
  156. package/tracking/tracking-marker-popup.component.d.ts +17 -0
  157. package/tracking/tracking-marker-popup.component.d.ts.map +1 -0
  158. package/tracking/tracking-tab.guard.d.ts +12 -0
  159. package/tracking/tracking-tab.guard.d.ts.map +1 -0
  160. package/tracking/tracking.component.d.ts +33 -0
  161. package/tracking/tracking.component.d.ts.map +1 -0
  162. package/tracking/tracking.feature.d.ts +3 -0
  163. package/tracking/tracking.feature.d.ts.map +1 -0
  164. package/tracking/tracking.service.d.ts +38 -0
  165. package/tracking/tracking.service.d.ts.map +1 -0
  166. package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
  167. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
@@ -140,10 +140,10 @@ export class BootstrapComponent {
140
140
  this.pluginsResolve.markPluginsAsLoaded();
141
141
  }
142
142
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BootstrapComponent, deps: [{ token: i1.TabsService }, { token: i2.AppStateService }, { token: i3.NavigatorService }, { token: i4.ActionBarService }, { token: i5.HeaderService }, { token: i6.OptionsService }, { token: i7.PluginsResolveService }, { token: i8.SetupService }, { token: i9.LoginService }], target: i0.ɵɵFactoryTarget.Component }); }
143
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar *ngIf=\"!headerService.hideHeader\" #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n [ngClass]=\"{\n mcontainer: !headerService.hideHeader,\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: i12.LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i13.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i14.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: i15.ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: i16.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i17.SetupComponent, selector: "c8y-setup" }, { kind: "component", type: i18.DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: i19.CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }] }); }
143
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BootstrapComponent, selector: "c8y-bootstrap", ngImport: i0, template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar *ngIf=\"!headerService.hideHeader\" #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n data-cy=\"bootstrap.template--c8y-drawer-outlet\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n [ngClass]=\"{\n mcontainer: !headerService.hideHeader,\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n", dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.HeaderBarComponent, selector: "c8y-header-bar", inputs: ["simple"] }, { kind: "component", type: i12.LoginComponent, selector: "c8y-login", inputs: ["name"] }, { kind: "directive", type: i13.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i14.TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: ["tabs", "orientation", "navigatorOpen"] }, { kind: "component", type: i15.ActionBarComponent, selector: "c8y-action-bar", inputs: ["navigatorOpen", "hasTabs", "isTabsHorizontal", "items$"] }, { kind: "component", type: i16.AlertOutletComponent, selector: "c8y-alert-outlet" }, { kind: "component", type: i17.SetupComponent, selector: "c8y-setup" }, { kind: "component", type: i18.DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: i19.CookieBannerComponent, selector: "c8y-cookie-banner" }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }] }); }
144
144
  }
145
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BootstrapComponent, decorators: [{
146
146
  type: Component,
147
- args: [{ selector: 'c8y-bootstrap', template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar *ngIf=\"!headerService.hideHeader\" #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n [ngClass]=\"{\n mcontainer: !headerService.hideHeader,\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n" }]
147
+ args: [{ selector: 'c8y-bootstrap', template: "<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div class=\"init-load\" *ngIf=\"showLoadingIndicator$ | async\">\n <div class=\"spinner-snake\"></div>\n <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n *ngIf=\"showMainView$ | async\"\n [class.head-open]=\"headerService.headerOpen\"\n>\n <c8y-header-bar *ngIf=\"!headerService.hideHeader\" #header></c8y-header-bar>\n <c8y-drawer-outlet\n role=\"region\"\n position=\"left\"\n data-cy=\"bootstrap.template--c8y-drawer-outlet\"\n [open]=\"headerService.navigatorOpen$ | async\"\n [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n ></c8y-drawer-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n role=\"navigation\"\n ></c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n [items$]=\"actionBar.items$\"\n role=\"group\"\n ></c8y-action-bar>\n\n <div\n [ngClass]=\"{\n mcontainer: !headerService.hideHeader,\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent?.hidden\n }\"\n >\n <main id=\"main-content\" class=\"container-fluid\" tabindex=\"-1\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </main>\n </div>\n</div>\n\n<div *ngIf=\"showSetup$ | async\">\n <c8y-header-bar [simple]=\"true\"></c8y-header-bar>\n <div class=\"mcontainer\" role=\"main\">\n <div class=\"container-fluid\">\n <c8y-setup></c8y-setup>\n </div>\n </div>\n</div>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n" }]
148
148
  }], ctorParameters: function () { return [{ type: i1.TabsService }, { type: i2.AppStateService }, { type: i3.NavigatorService }, { type: i4.ActionBarService }, { type: i5.HeaderService }, { type: i6.OptionsService }, { type: i7.PluginsResolveService }, { type: i8.SetupService }, { type: i9.LoginService }]; } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU10RCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIs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SyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBVSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0I7YUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQzsrR0E3SVUsa0JBQWtCO21HQUFsQixrQkFBa0IscURDcEIvQixrbUVBbUVBOzs0RkQvQ2Esa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy5tb2RlbCc7XG5pbXBvcnQgeyBTZXR1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXR1cC9zZXR1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib290c3RyYXAudGVtcGxhdGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnkgPSB0cnVlO1xuICBzaG93TG9naW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzaG93TG9hZGluZ0luZGljYXRvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dNYWluVmlldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dTZXR1cCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dXBTZXJ2aWNlOiBTZXR1cFNlcnZpY2UsXG4gICAgcHVibGljIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubm9BcHBzTWFyZ2luJCA9IHRoaXMuaGVhZGVyU2VydmljZS5tYXAoKHsgbmF2IH0pID0+ICFuYXYub3BlbiAmJiBuYXYuaGlkZGVuT25TdGFydHVwKTtcbiAgICB0aGlzLnRhYnNPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy50YWJzSG9yaXpvbnRhbCA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgdGhpcy51aVxuICAgICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3Rpb25CYXIucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zaG93UG93ZXJlZEJ5ID0gIXRoaXMub3B0aW9ucy5nZXQoJ2hpZGVQb3dlcmVkJyk7XG4gICAgY29uc3Qgbm9Mb2dpbiQgPSBvZih0aGlzLm9wdGlvbnMuZ2V0PGJvb2xlYW4+KCdub0xvZ2luJywgZmFsc2UpKTtcbiAgICB0aGlzLnNob3dMb2dpbiQgPSBjb21iaW5lTGF0ZXN0KFtub0xvZ2luJCwgdGhpcy51aS5jdXJyZW50VXNlcl0pLnBpcGUoXG4gICAgICBtYXAoKFtub0xvZ2luLCBjdXJyZW50VXNlcl0pID0+ICFub0xvZ2luICYmICFjdXJyZW50VXNlcilcbiAgICApO1xuICAgIHRoaXMuc2hvd0xvYWRpbmdJbmRpY2F0b3IkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBub0xvZ2luJCxcbiAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICB0aGlzLmxvZ2luU2VydmljZS5hdXRvbWF0aWNMb2dpbkluUHJvZ3Jlc3MkLFxuICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbm9Mb2dpbiwgY3VycmVudFVzZXIsIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcywgYWxsUGx1Z2luc0xvYWRlZF0pID0+XG4gICAgICAgICAgKCFub0xvZ2luICYmIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcykgfHwgKGN1cnJlbnRVc2VyICYmICFhbGxQbHVnaW5zTG9hZGVkKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aCh0cnVlKVxuICAgICk7XG4gICAgdGhpcy5zaG93TWFpblZpZXckID0gbm9Mb2dpbiQucGlwZShcbiAgICAgIHN3aXRjaE1hcChub0xvZ2luID0+IHtcbiAgICAgICAgaWYgKG5vTG9naW4pIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICAgICAgdGhpcy5zZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQsXG4gICAgICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2N1cnJlbnRVc2VyLCBpc1NldHVwTmVlZGVkLCBhbGxQbHVnaW5zTG9hZGVkXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyICYmICFpc1NldHVwTmVlZGVkICYmIGFsbFBsdWdpbnNMb2FkZWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dTZXR1cCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVpLmN1cnJlbnRVc2VyLCB0aGlzLnNldHVwU2VydmljZS5pc1NldHVwTmVlZGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjdXJyZW50VXNlciwgaXNTZXR1cE5lZWRlZF0pID0+IGN1cnJlbnRVc2VyICYmIGlzU2V0dXBOZWVkZWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdGVzKGNvbmZpZzogUGx1Z2luc0NvbmZpZyk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgbGV0IHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgICBpZiAoISFjb25maWc/LnJlbW90ZXMpIHtcbiAgICAgIC8vIE1lcmdlIHBsdWdpbnMgY29uZmlnIHJlbW90ZXMgYW5kIHJlbW90ZXMgcGFzc2VkIGluIHRoZSBVUkwuXG4gICAgICAvLyBSZW1vdGVzIGluIHRoZSBVUkwgYXJlIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuXG4gICAgICByZW1vdGVzID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5tZXJnZU1GUmVtb3RlcyhbXG4gICAgICAgIGNvbmZpZy5yZW1vdGVzLFxuICAgICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRVcmxSZW1vdGVzKClcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVzID0gdGhpcy5vcHRpb25zPy5yZW1vdGVzO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIHBsdWdpbnMgbXVsdGlwbGUgdGltZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcyB8fCB7fSkuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5nZXQoY29udGV4dFBhdGgpKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzW2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNFbXB0eShyZW1vdGVzKSA/IHVuZGVmaW5lZCA6IHJlbW90ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFJlbW90ZXMocmVtb3Rlcyk7XG5cbiAgICAvLyBDYWNoZSBsb2FkZWQgcmVtb3Rlcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzKS5mb3JFYWNoKGNvbnRleHRQYXRoID0+XG4gICAgICB0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLnNldChjb250ZXh0UGF0aCwgdHJ1ZSlcbiAgICApO1xuXG4gICAgaWYgKHJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLnJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBjYXNlIGxvYWRpbmcgYWxsIG1vZHVsZXMgdmlhIHBsdWdpbnNSZXNvbHZlLmxvYWRSZW1vdGVzIGZhaWxlZFxuICAgICAgLy8gKGUuZy4gYWxsIHBsdWdpbnMgdGhhdCB3ZXJlIGluc3RhbGxlZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSB0ZW5hbnQpXG4gICAgICAvLyB3ZSBzdGlsbCBuZWVkIHRvIG1hcmsgbG9hZGluZyB0aGUgcGx1Z2lucyBhcyBzdWNjZXNzZnVsLlxuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTG9hZFJlbW90ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ25vUGx1Z2lucycsIGZhbHNlKSkge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmdldDxib29sZWFuPignbm9Mb2dpbicsIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2FkUmVtb3Rlcyh0aGlzLmdldFJlbW90ZXMobnVsbCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjb25maWc6IFBsdWdpbnNDb25maWcpID0+IHRoaXMubG9hZFJlbW90ZXModGhpcy5nZXRSZW1vdGVzKGNvbmZpZykpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlV2VNYXJrUGx1Z2luc0FzTG9hZGVkKCk6IHZvaWQge1xuICAgIC8vIGVuc3VyZSB3ZSBjYWxsIG1hcmtQbHVnaW5zQXNMb2FkZWQgb24gdGhlIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cbn1cbiIsIjxjOHktbG9naW4gKm5nSWY9XCJzaG93TG9naW4kIHwgYXN5bmNcIj48L2M4eS1sb2dpbj5cblxuPGRpdiBjbGFzcz1cImluaXQtbG9hZFwiICpuZ0lmPVwic2hvd0xvYWRpbmdJbmRpY2F0b3IkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItc25ha2VcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1haW5sb2dvLXBsYWNlaG9sZGVyIG1haW5sb2dvXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICAqbmdJZj1cInNob3dNYWluVmlldyQgfCBhc3luY1wiXG4gIFtjbGFzcy5oZWFkLW9wZW5dPVwiaGVhZGVyU2VydmljZS5oZWFkZXJPcGVuXCJcbj5cbiAgPGM4eS1oZWFkZXItYmFyICpuZ0lmPVwiIWhlYWRlclNlcnZpY2UuaGlkZUhlYWRlclwiICNoZWFkZXI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGM4eS1kcmF3ZXItb3V0bGV0XG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgcG9zaXRpb249XCJsZWZ0XCJcbiAgICBbb3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIFt0YWJpbmRleF09XCIoaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jKSA/ICcwJyA6ICctMSdcIlxuICA+PC9jOHktZHJhd2VyLW91dGxldD5cblxuICA8ZGl2IGNsYXNzPVwiYWxlcnRzXCI+XG4gICAgPGM4eS1hbGVydC1vdXRsZXQ+PC9jOHktYWxlcnQtb3V0bGV0PlxuICA8L2Rpdj5cbiAgPGM4eS10YWJzLW91dGxldFxuICAgICN0YWJzQ29tcG9uZW50XG4gICAgW3RhYnNdPVwidGFicy5pdGVtcyQgfCBhc3luY1wiXG4gICAgW25hdmlnYXRvck9wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbb3JpZW50YXRpb25dPVwidGFicy5vcmllbnRhdGlvbiQgfCBhc3luY1wiXG4gICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICA+PC9jOHktdGFicy1vdXRsZXQ+XG4gIDxjOHktYWN0aW9uLWJhclxuICAgICNhY3Rpb25CYXJDb21wb25lbnRcbiAgICBbbmF2aWdhdG9yT3Blbl09XCJoZWFkZXJTZXJ2aWNlLm5hdmlnYXRvck9wZW4kIHwgYXN5bmNcIlxuICAgIFtoYXNUYWJzXT1cInRhYnNDb21wb25lbnQuaGFzVGFic1wiXG4gICAgW2lzVGFic0hvcml6b250YWxdPVwidGFic0NvbXBvbmVudD8uaXNIb3Jpem9udGFsXCJcbiAgICBbaXRlbXMkXT1cImFjdGlvbkJhci5pdGVtcyRcIlxuICAgIHJvbGU9XCJncm91cFwiXG4gID48L2M4eS1hY3Rpb24tYmFyPlxuXG4gIDxkaXZcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICBtY29udGFpbmVyOiAhaGVhZGVyU2VydmljZS5oaWRlSGVhZGVyLFxuICAgICAgb3BlbjogaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jLFxuICAgICAgJ25vLWFwcHMtbWFyZ2luJzogbm9BcHBzTWFyZ2luJCB8IGFzeW5jLFxuICAgICAgJ2hvcml6b250YWwtdGFicyc6IHRhYnNDb21wb25lbnQuaXNIb3Jpem9udGFsLFxuICAgICAgJ3ZlcnRpY2FsLXRhYnMnOiAhdGFic0NvbXBvbmVudC5pc0hvcml6b250YWwsXG4gICAgICAnaGFzLXRhYnMnOiB0YWJzQ29tcG9uZW50Lmhhc1RhYnMsXG4gICAgICAnaGFzLWFjdGlvbi1iYXInOiAhYWN0aW9uQmFyQ29tcG9uZW50Py5oaWRkZW5cbiAgICB9XCJcbiAgPlxuICAgIDxtYWluIGlkPVwibWFpbi1jb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIjYzh5LWxlZ2FjeS12aWV3XCI+PC9uZy1jb250ZW50PlxuICAgICAgPCEtLSBsZWdhY3kgbmctdmlldywgd2lsbCBub3QgYmUgbWlncmF0ZWQgYXRtIC0tPlxuICAgIDwvbWFpbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInNob3dTZXR1cCQgfCBhc3luY1wiPlxuICA8Yzh5LWhlYWRlci1iYXIgW3NpbXBsZV09XCJ0cnVlXCI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGRpdiBjbGFzcz1cIm1jb250YWluZXJcIiByb2xlPVwibWFpblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICAgIDxjOHktc2V0dXA+PC9jOHktc2V0dXA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxjOHktY29va2llLWJhbm5lcj48L2M4eS1jb29raWUtYmFubmVyPlxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Jvb3RzdHJhcC9ib290c3RyYXAudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU10RCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1MsSUFBaUIsRUFDakIsRUFBbUIsRUFDbkIs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SyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBVSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0I7YUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQzsrR0E3SVUsa0JBQWtCO21HQUFsQixrQkFBa0IscURDcEIvQix5cEVBb0VBOzs0RkRoRGEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy5tb2RlbCc7XG5pbXBvcnQgeyBTZXR1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXR1cC9zZXR1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib290c3RyYXAudGVtcGxhdGUuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQm9vdHN0cmFwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnkgPSB0cnVlO1xuICBzaG93TG9naW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzaG93TG9hZGluZ0luZGljYXRvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dNYWluVmlldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNob3dTZXR1cCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYnM6IFRhYnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHVibGljIGFjdGlvbkJhcjogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1Jlc29sdmU6IFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgICBwdWJsaWMgc2V0dXBTZXJ2aWNlOiBTZXR1cFNlcnZpY2UsXG4gICAgcHVibGljIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubm9BcHBzTWFyZ2luJCA9IHRoaXMuaGVhZGVyU2VydmljZS5tYXAoKHsgbmF2IH0pID0+ICFuYXYub3BlbiAmJiBuYXYuaGlkZGVuT25TdGFydHVwKTtcbiAgICB0aGlzLnRhYnNPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy50YWJzSG9yaXpvbnRhbCA/ICdob3Jpem9udGFsJyA6ICd2ZXJ0aWNhbCc7XG4gICAgdGhpcy51aVxuICAgICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hY3Rpb25CYXIucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5zaG93UG93ZXJlZEJ5ID0gIXRoaXMub3B0aW9ucy5nZXQoJ2hpZGVQb3dlcmVkJyk7XG4gICAgY29uc3Qgbm9Mb2dpbiQgPSBvZih0aGlzLm9wdGlvbnMuZ2V0PGJvb2xlYW4+KCdub0xvZ2luJywgZmFsc2UpKTtcbiAgICB0aGlzLnNob3dMb2dpbiQgPSBjb21iaW5lTGF0ZXN0KFtub0xvZ2luJCwgdGhpcy51aS5jdXJyZW50VXNlcl0pLnBpcGUoXG4gICAgICBtYXAoKFtub0xvZ2luLCBjdXJyZW50VXNlcl0pID0+ICFub0xvZ2luICYmICFjdXJyZW50VXNlcilcbiAgICApO1xuICAgIHRoaXMuc2hvd0xvYWRpbmdJbmRpY2F0b3IkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBub0xvZ2luJCxcbiAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICB0aGlzLmxvZ2luU2VydmljZS5hdXRvbWF0aWNMb2dpbkluUHJvZ3Jlc3MkLFxuICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbm9Mb2dpbiwgY3VycmVudFVzZXIsIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcywgYWxsUGx1Z2luc0xvYWRlZF0pID0+XG4gICAgICAgICAgKCFub0xvZ2luICYmIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcykgfHwgKGN1cnJlbnRVc2VyICYmICFhbGxQbHVnaW5zTG9hZGVkKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aCh0cnVlKVxuICAgICk7XG4gICAgdGhpcy5zaG93TWFpblZpZXckID0gbm9Mb2dpbiQucGlwZShcbiAgICAgIHN3aXRjaE1hcChub0xvZ2luID0+IHtcbiAgICAgICAgaWYgKG5vTG9naW4pIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudWkuY3VycmVudFVzZXIsXG4gICAgICAgICAgdGhpcy5zZXR1cFNlcnZpY2UuaXNTZXR1cE5lZWRlZCQsXG4gICAgICAgICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2N1cnJlbnRVc2VyLCBpc1NldHVwTmVlZGVkLCBhbGxQbHVnaW5zTG9hZGVkXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyICYmICFpc1NldHVwTmVlZGVkICYmIGFsbFBsdWdpbnNMb2FkZWQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dTZXR1cCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVpLmN1cnJlbnRVc2VyLCB0aGlzLnNldHVwU2VydmljZS5pc1NldHVwTmVlZGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjdXJyZW50VXNlciwgaXNTZXR1cE5lZWRlZF0pID0+IGN1cnJlbnRVc2VyICYmIGlzU2V0dXBOZWVkZWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Mb2FkUmVtb3RlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdGVzKGNvbmZpZzogUGx1Z2luc0NvbmZpZyk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgbGV0IHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgICBpZiAoISFjb25maWc/LnJlbW90ZXMpIHtcbiAgICAgIC8vIE1lcmdlIHBsdWdpbnMgY29uZmlnIHJlbW90ZXMgYW5kIHJlbW90ZXMgcGFzc2VkIGluIHRoZSBVUkwuXG4gICAgICAvLyBSZW1vdGVzIGluIHRoZSBVUkwgYXJlIHVzZWQgaW4gdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuXG4gICAgICByZW1vdGVzID0gdGhpcy5wbHVnaW5zUmVzb2x2ZS5tZXJnZU1GUmVtb3RlcyhbXG4gICAgICAgIGNvbmZpZy5yZW1vdGVzLFxuICAgICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLmxvYWRVcmxSZW1vdGVzKClcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdGVzID0gdGhpcy5vcHRpb25zPy5yZW1vdGVzO1xuICAgIH1cblxuICAgIC8vIEJsb2NrIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIHBsdWdpbnMgbXVsdGlwbGUgdGltZXMuXG4gICAgT2JqZWN0LmtleXMocmVtb3RlcyB8fCB7fSkuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWRSZW1vdGVzQ29udGV4dFBhdGhDYWNoZS5nZXQoY29udGV4dFBhdGgpKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzW2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNFbXB0eShyZW1vdGVzKSA/IHVuZGVmaW5lZCA6IHJlbW90ZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIGlmICghcmVtb3Rlcykge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1Jlc29sdmUubG9hZFJlbW90ZXMocmVtb3Rlcyk7XG5cbiAgICAvLyBDYWNoZSBsb2FkZWQgcmVtb3Rlcy5cbiAgICBPYmplY3Qua2V5cyhyZW1vdGVzKS5mb3JFYWNoKGNvbnRleHRQYXRoID0+XG4gICAgICB0aGlzLmxvYWRlZFJlbW90ZXNDb250ZXh0UGF0aENhY2hlLnNldChjb250ZXh0UGF0aCwgdHJ1ZSlcbiAgICApO1xuXG4gICAgaWYgKHJlbW90ZU1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBsdWdpbnNSZXNvbHZlLnJlc29sdmVSZW1vdGVQbHVnaW5zKHJlbW90ZU1vZHVsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbiBjYXNlIGxvYWRpbmcgYWxsIG1vZHVsZXMgdmlhIHBsdWdpbnNSZXNvbHZlLmxvYWRSZW1vdGVzIGZhaWxlZFxuICAgICAgLy8gKGUuZy4gYWxsIHBsdWdpbnMgdGhhdCB3ZXJlIGluc3RhbGxlZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSB0ZW5hbnQpXG4gICAgICAvLyB3ZSBzdGlsbCBuZWVkIHRvIG1hcmsgbG9hZGluZyB0aGUgcGx1Z2lucyBhcyBzdWNjZXNzZnVsLlxuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTG9hZFJlbW90ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5nZXQoJ25vUGx1Z2lucycsIGZhbHNlKSkge1xuICAgICAgdGhpcy5lbnN1cmVXZU1hcmtQbHVnaW5zQXNMb2FkZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmdldDxib29sZWFuPignbm9Mb2dpbicsIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2FkUmVtb3Rlcyh0aGlzLmdldFJlbW90ZXMobnVsbCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudWkuY3VycmVudEFwcGxpY2F0aW9uQ29uZmlnXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChjb25maWc6IFBsdWdpbnNDb25maWcpID0+IHRoaXMubG9hZFJlbW90ZXModGhpcy5nZXRSZW1vdGVzKGNvbmZpZykpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlV2VNYXJrUGx1Z2luc0FzTG9hZGVkKCk6IHZvaWQge1xuICAgIC8vIGVuc3VyZSB3ZSBjYWxsIG1hcmtQbHVnaW5zQXNMb2FkZWQgb24gdGhlIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgdGhpcy5wbHVnaW5zUmVzb2x2ZS5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cbn1cbiIsIjxjOHktbG9naW4gKm5nSWY9XCJzaG93TG9naW4kIHwgYXN5bmNcIj48L2M4eS1sb2dpbj5cblxuPGRpdiBjbGFzcz1cImluaXQtbG9hZFwiICpuZ0lmPVwic2hvd0xvYWRpbmdJbmRpY2F0b3IkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItc25ha2VcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1haW5sb2dvLXBsYWNlaG9sZGVyIG1haW5sb2dvXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICAqbmdJZj1cInNob3dNYWluVmlldyQgfCBhc3luY1wiXG4gIFtjbGFzcy5oZWFkLW9wZW5dPVwiaGVhZGVyU2VydmljZS5oZWFkZXJPcGVuXCJcbj5cbiAgPGM4eS1oZWFkZXItYmFyICpuZ0lmPVwiIWhlYWRlclNlcnZpY2UuaGlkZUhlYWRlclwiICNoZWFkZXI+PC9jOHktaGVhZGVyLWJhcj5cbiAgPGM4eS1kcmF3ZXItb3V0bGV0XG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgcG9zaXRpb249XCJsZWZ0XCJcbiAgICBkYXRhLWN5PVwiYm9vdHN0cmFwLnRlbXBsYXRlLS1jOHktZHJhd2VyLW91dGxldFwiXG4gICAgW29wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbdGFiaW5kZXhdPVwiKGhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luYykgPyAnMCcgOiAnLTEnXCJcbiAgPjwvYzh5LWRyYXdlci1vdXRsZXQ+XG5cbiAgPGRpdiBjbGFzcz1cImFsZXJ0c1wiPlxuICAgIDxjOHktYWxlcnQtb3V0bGV0PjwvYzh5LWFsZXJ0LW91dGxldD5cbiAgPC9kaXY+XG4gIDxjOHktdGFicy1vdXRsZXRcbiAgICAjdGFic0NvbXBvbmVudFxuICAgIFt0YWJzXT1cInRhYnMuaXRlbXMkIHwgYXN5bmNcIlxuICAgIFtuYXZpZ2F0b3JPcGVuXT1cImhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luY1wiXG4gICAgW29yaWVudGF0aW9uXT1cInRhYnMub3JpZW50YXRpb24kIHwgYXN5bmNcIlxuICAgIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgPjwvYzh5LXRhYnMtb3V0bGV0PlxuICA8Yzh5LWFjdGlvbi1iYXJcbiAgICAjYWN0aW9uQmFyQ29tcG9uZW50XG4gICAgW25hdmlnYXRvck9wZW5dPVwiaGVhZGVyU2VydmljZS5uYXZpZ2F0b3JPcGVuJCB8IGFzeW5jXCJcbiAgICBbaGFzVGFic109XCJ0YWJzQ29tcG9uZW50Lmhhc1RhYnNcIlxuICAgIFtpc1RhYnNIb3Jpem9udGFsXT1cInRhYnNDb21wb25lbnQ/LmlzSG9yaXpvbnRhbFwiXG4gICAgW2l0ZW1zJF09XCJhY3Rpb25CYXIuaXRlbXMkXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuICA+PC9jOHktYWN0aW9uLWJhcj5cblxuICA8ZGl2XG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgbWNvbnRhaW5lcjogIWhlYWRlclNlcnZpY2UuaGlkZUhlYWRlcixcbiAgICAgIG9wZW46IGhlYWRlclNlcnZpY2UubmF2aWdhdG9yT3BlbiQgfCBhc3luYyxcbiAgICAgICduby1hcHBzLW1hcmdpbic6IG5vQXBwc01hcmdpbiQgfCBhc3luYyxcbiAgICAgICdob3Jpem9udGFsLXRhYnMnOiB0YWJzQ29tcG9uZW50LmlzSG9yaXpvbnRhbCxcbiAgICAgICd2ZXJ0aWNhbC10YWJzJzogIXRhYnNDb21wb25lbnQuaXNIb3Jpem9udGFsLFxuICAgICAgJ2hhcy10YWJzJzogdGFic0NvbXBvbmVudC5oYXNUYWJzLFxuICAgICAgJ2hhcy1hY3Rpb24tYmFyJzogIWFjdGlvbkJhckNvbXBvbmVudD8uaGlkZGVuXG4gICAgfVwiXG4gID5cbiAgICA8bWFpbiBpZD1cIm1haW4tY29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiI2M4eS1sZWdhY3ktdmlld1wiPjwvbmctY29udGVudD5cbiAgICAgIDwhLS0gbGVnYWN5IG5nLXZpZXcsIHdpbGwgbm90IGJlIG1pZ3JhdGVkIGF0bSAtLT5cbiAgICA8L21haW4+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93U2V0dXAkIHwgYXN5bmNcIj5cbiAgPGM4eS1oZWFkZXItYmFyIFtzaW1wbGVdPVwidHJ1ZVwiPjwvYzh5LWhlYWRlci1iYXI+XG4gIDxkaXYgY2xhc3M9XCJtY29udGFpbmVyXCIgcm9sZT1cIm1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICA8Yzh5LXNldHVwPjwvYzh5LXNldHVwPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48Yzh5LWNvb2tpZS1iYW5uZXI+PC9jOHktY29va2llLWJhbm5lcj5cbiJdfQ==
@@ -174,6 +174,12 @@ export class ForOfDirective {
174
174
  set c8yForLoadNextLabel(loadNextLabel) {
175
175
  this.loadNextLabel = loadNextLabel;
176
176
  }
177
+ /**
178
+ * Loading text label.
179
+ */
180
+ set c8yForLoadingLabel(loadingLabel) {
181
+ this.loadingLabel = loadingLabel;
182
+ }
177
183
  /**
178
184
  * A RealtimeService instance.
179
185
  */
@@ -218,6 +224,10 @@ export class ForOfDirective {
218
224
  * The number of items currently loaded in the list.
219
225
  */
220
226
  this.c8yForCount = new EventEmitter();
227
+ /**
228
+ * The current instance of the `LoadMoreComponent`.
229
+ */
230
+ this.c8yForLoadMoreComponent = new EventEmitter();
221
231
  this.count = 0;
222
232
  }
223
233
  ngOnInit() {
@@ -377,6 +387,8 @@ export class ForOfDirective {
377
387
  instance.noMoreDataHint = this.notFoundTemplate;
378
388
  instance.loadingTemplate = this.loadingTemplate;
379
389
  instance.loadNextLabel = this.loadNextLabel;
390
+ instance.loadingLabel = this.loadingLabel;
391
+ this.c8yForLoadMoreComponent.emit(instance);
380
392
  this.pagingSub = instance.onLoad
381
393
  .pipe(map((data) => this.checkForDuplicates(data)), tap((data) => {
382
394
  this.cachedData = this.cachedData.concat(data);
@@ -482,7 +494,7 @@ export class ForOfDirective {
482
494
  }
483
495
  }
484
496
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ForOfDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
485
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ForOfDirective, selector: "[c8yFor]", inputs: { c8yForOf: "c8yForOf", c8yForLoadMore: "c8yForLoadMore", c8yForPipe: "c8yForPipe", c8yForNotFound: "c8yForNotFound", c8yForMaxIterations: "c8yForMaxIterations", c8yForLoadingTemplate: "c8yForLoadingTemplate", c8yForLoadNextLabel: "c8yForLoadNextLabel", c8yForRealtime: "c8yForRealtime", c8yForRealtimeOptions: "c8yForRealtimeOptions", c8yForComparator: "c8yForComparator", c8yForEnableVirtualScroll: "c8yForEnableVirtualScroll", c8yForVirtualScrollElementSize: "c8yForVirtualScrollElementSize", c8yForVirtualScrollStrategy: "c8yForVirtualScrollStrategy", c8yForVirtualScrollContainerHeight: "c8yForVirtualScrollContainerHeight" }, outputs: { c8yForCount: "c8yForCount" }, usesOnChanges: true, ngImport: i0 }); }
497
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ForOfDirective, selector: "[c8yFor]", inputs: { c8yForOf: "c8yForOf", c8yForLoadMore: "c8yForLoadMore", c8yForPipe: "c8yForPipe", c8yForNotFound: "c8yForNotFound", c8yForMaxIterations: "c8yForMaxIterations", c8yForLoadingTemplate: "c8yForLoadingTemplate", c8yForLoadNextLabel: "c8yForLoadNextLabel", c8yForLoadingLabel: "c8yForLoadingLabel", c8yForRealtime: "c8yForRealtime", c8yForRealtimeOptions: "c8yForRealtimeOptions", c8yForComparator: "c8yForComparator", c8yForEnableVirtualScroll: "c8yForEnableVirtualScroll", c8yForVirtualScrollElementSize: "c8yForVirtualScrollElementSize", c8yForVirtualScrollStrategy: "c8yForVirtualScrollStrategy", c8yForVirtualScrollContainerHeight: "c8yForVirtualScrollContainerHeight" }, outputs: { c8yForCount: "c8yForCount", c8yForLoadMoreComponent: "c8yForLoadMoreComponent" }, usesOnChanges: true, ngImport: i0 }); }
486
498
  }
487
499
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ForOfDirective, decorators: [{
488
500
  type: Directive,
@@ -503,6 +515,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
503
515
  type: Input
504
516
  }], c8yForLoadNextLabel: [{
505
517
  type: Input
518
+ }], c8yForLoadingLabel: [{
519
+ type: Input
506
520
  }], c8yForRealtime: [{
507
521
  type: Input
508
522
  }], c8yForRealtimeOptions: [{
@@ -519,5 +533,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
519
533
  type: Input
520
534
  }], c8yForCount: [{
521
535
  type: Output
536
+ }], c8yForLoadMoreComponent: [{
537
+ type: Output
522
538
  }] } });
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yT2YuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZm9yT2YuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUNMLGFBQWEsRUFDYixZQUFZLEVBRVosRUFBRSxFQUNGLElBQUksRUFDSixPQUFPLEVBR1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scURBQXFELENBQUM7O0FBRXRHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEZHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUF1QnpCLElBQVksdUJBQXVCO1FBQ2pDLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUks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LENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ2hFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQzsrR0FuZlUsY0FBYzttR0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO2lCQUNyQjtpS0EyQ0ssUUFBUTtzQkFEWCxLQUFLO2dCQTBCRixjQUFjO3NCQURqQixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFXRixjQUFjO3NCQURqQixLQUFLO2dCQVlGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFTRixxQkFBcUI7c0JBRHhCLEtBQUs7Z0JBU0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVNGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBU0YscUJBQXFCO3NCQUR4QixLQUFLO2dCQVVGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFTRSx5QkFBeUI7c0JBRGhDLEtBQUs7Z0JBT0UsOEJBQThCO3NCQURyQyxLQUFLO2dCQVNFLDJCQUEyQjtzQkFEbEMsS0FBSztnQkFPRSxrQ0FBa0M7c0JBRHpDLEtBQUs7Z0JBT0UsV0FBVztzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgYXNzaWduLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgaXNPYnNlcnZhYmxlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcGlwZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBVbmFyeUZ1bmN0aW9uXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vcmVhbHRpbWUvcmVhbHRpbWUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JPZlJlYWx0aW1lT3B0aW9ucywgRm9yT2ZGaWx0ZXJQaXBlIH0gZnJvbSAnLi9mb3JPZi5tb2RlbCc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkTW9yZU1vZGUgfSBmcm9tICcuL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byBpdGVyYXRlIG92ZXIgSVJlc3VsdExpc3Q8VD4gZGF0YSBmcm9tIEBjOHkvY2xpZW50LlxuICogRGVwZW5kaW5nIG9uIHRoZSBbYzh5Rm9yTG9hZE1vcmVdIGEgbG9hZCBtb3JlIGJ1dHRvbiBpczpcbiAqICAtIGF1dG86IFRyaWVzIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb3JlIGRhdGEgKGRlZmF1bHQgbWF4aW11bSAxMCBpdGVyYXRpb25zOyBjYW4gYmVcbiAqICAgICAgICAgIGNoYW5nZSB3aXRoIG1heEl0ZXJhdGlvbnMgc2V0dGluZ3MpLlxuICogIC0gc2hvdzogU2hvd3MgYSBsb2FkIG1vcmUgYnV0dG9uIGZvciB0aGUgdXNlciB0byBkZWNpZGVcbiAqICAtIG5vbmU6IERvZXNuJ3QgcGVyZm9ybSBhbnkgbG9hZCBtb3JlIGFjdGlvbi5cbiAqICAtIGhpZGRlbjogTG9hZHMgbW9yZSBkYXRhIGF1dG9tYXRpY2FsbHkgYnV0IHdpdGggbm8gdmlzaWJsZSBidXR0b24gZm9yIHRoZSB1c2VyLlxuICpcbiAqIEFkZGl0aW9uYWwsIGFueSByeGpzIG9wZXJhdG9yIHBpcGUgY2FuIGJlIGFwcGxpZWQgdG8gdGhlIFtjOHlGb3JQaXBlXSBpbnB1dCwgZS5nLiB0b1xuICogZmlsdGVyIHRoZSBkYXRhIGRpc3BsYXllZCBjdXJyZW50bHkgYXMgd2VsbCBhcyB0aGUgZGF0YSBsb2FkZWQgYnkgc3Vic2VxdWVudCByZXF1ZXN0cy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2ICpjOHlGb3I9XCJsZXQgZGV2aWNlIG9mIGRldmljZXM7IGxvYWRNb3JlOiAnYXV0byc7IGxldCBpID0gaW5kZXg7IHBpcGU6IGZpbHRlclBpcGU7XCI+XG4gKiAge3sgaSArIDEgfX0uIHt7ZGV2aWNlLm5hbWV9fVxuICogPC9kaXY+XG4gKiBgYGBcbiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbGlzdCBhbGwgZW50aXRpZXMgdGhhdCBhcmUgYXBwbGllZCB0byBgZGV2aWNlc2A6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmRldmljZXMgPSB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAxMCwgZnJhZ21lbnRUeXBlOiAnYzh5X0lzRGV2aWNlJyB9KVxuICogYGBgXG4gKiBJdCB3aWxsIGRpc3BsYXkgdGhlIGZpcnN0IDEwIGl0ZW1zLCBpZiB0aGVyZSBpcyBtb3JlIHNwYWNlIGxlZnQgb24gdGhlIHNjcmVlbiwgYW5kIHRoZXJlIGFyZSBtb3JlXG4gKiB0aGFuIDEwIGRldmljZXMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkIHVwIHRvIDEwIHBhZ2VzIG1vcmUuIElmIGl0IHN0aWxsIGNhbid0IGZpdCB0aGUgc2NyZWVuXG4gKiBpdCB3aWxsIHN0b3AgYW5kIHN3aXRjaCB0byBgc2hvd2AgbW9kZS5cbiAqXG4gKiBBIHBpcGUgY2FuIGJlIGFwcGxpZWQgZS5nLiBmb3IgZmlsdGVyaW5nIG9yIGdyb3VwaW5nLiBUaGlzIHBpcGUgaXMgYXR0YWNoZWQgdG8gZXZlcnkgZm9sbG93IHVwXG4gKiByZXF1ZXN0IGRvbmUgYnkgdGhlIGxvYWQgbW9yZSBjb21wb25lbnQ6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmZpbHRlclBpcGUgPSBwaXBlKFxuICogICAgbWFwKChkYXRhOiBbXSkgPT4ge1xuICogICAgIHJldHVybiBkYXRhLmZpbHRlcihcbiAqICAgICAgKG1vOiBhbnkpID0+IG1vLm5hbWUgJiYgbW8ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgPiAtMVxuICogICAgKTtcbiAqICB9KVxuICogKTtcbiAqIGBgYFxuICogVGhlIHBpcGUgbXVzdCBiZSBhbiByeGpzIHBpcGUgYW5kIGNhbiB0YWtlIGFueSBvcGVyYXRvci5cbiAqXG4gKiBFeGFtcGxlIHdpdGggcmVhbHRpbWUgc3VwcG9ydCBhbmQgaXRlbXMgY291bnQgb3V0cHV0IChlLmcuIGZvciBoYW5kbGluZyBlbXB0eSBzdGF0ZSBhbmQgaGVhZGVyKTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8Yzh5LWxpc3QtZ3JvdXA+XG4gKiAgIDxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGVcIiAqbmdJZj1cImNvdW50ID09PSAwXCI+XG4gKiAgICAgKC4uLilcbiAqICAgPC9kaXY+XG4gKlxuICogICA8ZGl2IGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14cyBjOHktbGlzdF9faXRlbSBjOHktbGlzdC0tdGltZWxpbmVcIiAqbmdJZj1cImNvdW50ID4gMFwiPlxuICogICAgICguLi4pXG4gKiAgIDwvZGl2PlxuICpcbiAqICAgPG5nLXRlbXBsYXRlXG4gKiAgICAgYzh5Rm9yXG4gKiAgICAgbGV0LW9wZXJhdGlvblxuICogICAgIFtjOHlGb3JPZl09XCJpdGVtcyRcIlxuICogICAgIFtjOHlGb3JQaXBlXT1cImZpbHRlclBpcGVcIlxuICogICAgIFtjOHlGb3JSZWFsdGltZV09XCJyZWFsdGltZVwiXG4gKiAgICAgW2M4eUZvclJlYWx0aW1lT3B0aW9uc109XCJyZWFsdGltZU9wdGlvbnNcIlxuICogICAgIChjOHlGb3JDb3VudCk9XCJjb3VudCA9ICRldmVudFwiXG4gKiAgID5cbiAqICAgICA8Yzh5LWxpLXRpbWVsaW5lPlxuICogICAgICAgKC4uLilcbiAqICAgICA8L2M4eS1saS10aW1lbGluZT5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvYzh5LWxpc3QtZ3JvdXA+XG4gKiBgYGBcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgKC4uLilcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gKiAgIEBJbnB1dCgpIGRldmljZUlkOiBJSWRlbnRpZmllZDtcbiAqICAgaXRlbXMkID0gdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmxpc3Qoe1xuICogICAgIGRldmljZUlkOiB0aGlzLmRldmljZUlkLFxuICogICAgIGZyYWdtZW50VHlwZTogJ2M4eV9NeU9wZXJhdGlvbicsXG4gKiAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gKiAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICogICAgIHJldmVydDogdHJ1ZSxcbiAqICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICogICB9KTtcbiAqICAgZmlsdGVyUGlwZSA9IHBpcGUobWFwKChvcHM6IElPcGVyYXRpb25bXSkgPT4gb3BzLmZpbHRlcihvcCA9PiBvcC5jOHlfTXlPcGVyYXRpb24pKSk7XG4gKiAgIHJlYWx0aW1lT3B0aW9uczogRm9yT2ZSZWFsdGltZU9wdGlvbnMgPSB7XG4gKiAgICAgZW50aXR5T3JJZDogdGhpcy5kZXZpY2VJZCxcbiAqICAgICByZW1vdmVPblVwZGF0ZTogdHJ1ZSxcbiAqICAgICBpbnNlcnRPblVwZGF0ZTogdHJ1ZVxuICogICB9IGFzIEZvck9mUmVhbHRpbWVPcHRpb25zO1xuICogICBjb3VudDogbnVtYmVyO1xuICpcbiAqICAgY29uc3RydWN0b3IoXG4gKiAgICAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxuICogICAgIHB1YmxpYyByZWFsdGltZTogT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlXG4gKiAgICkge31cbiAqIH1cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYzh5Rm9yXSdcbn0pXG5leHBvcnQgY2xhc3MgRm9yT2ZEaXJlY3RpdmUge1xuICBwcml2YXRlIGNhY2hlZERhdGE6IElJZGVudGlmaWVkW10gPSBbXTtcbiAgcHJpdmF0ZSBwYWdpbmc6IFBhZ2luZzxJSWRlbnRpZmllZD47XG4gIHByaXZhdGUgbG9hZE1vcmVNb2RlOiBMb2FkTW9yZU1vZGUgPSAnYXV0byc7XG4gIHByaXZhdGUgZGF0YVBpcGU6IEZvck9mRmlsdGVyUGlwZSA9IHBpcGUodGFwKCkpO1xuICBwcml2YXRlIGl0ZW1EYXRhUGlwZTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPElJZGVudGlmaWVkPiwgT2JzZXJ2YWJsZTxJSWRlbnRpZmllZD4+ID0gcGlwZShcbiAgICBtYXAoaXRlbSA9PiBbaXRlbV0pLFxuICAgIHNyYyA9PiB0aGlzLmRhdGFQaXBlKHNyYyksXG4gICAgbWFwKChbaXRlbV0pID0+IGl0ZW0pXG4gICk7XG4gIHByaXZhdGUgcGFnaW5nU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb2JzJDogT2JzZXJ2YWJsZTxJSWRlbnRpZmllZFtdPjtcbiAgcHJpdmF0ZSBsb2FkTW9yZTogTG9hZE1vcmVDb21wb25lbnQ7XG4gIHByaXZhdGUgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgcHJpdmF0ZSBub3RGb3VuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGxvYWROZXh0TGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWVTZXJ2aWNlPElJZGVudGlmaWVkPjtcbiAgcHJpdmF0ZSByZWFsdGltZU9wdGlvbnM6IEZvck9mUmVhbHRpbWVPcHRpb25zID0ge307XG4gIHByaXZhdGUgY29tcGFyYXRvcjogKGl0ZW1BOiBJSWRlbnRpZmllZCwgaXRlbUI6IElJZGVudGlmaWVkKSA9PiBudW1iZXI7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsSW5zdGFuY2U6IFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBnZXQgc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9hZE1vcmVNb2RlID09PSAnYXV0bycgfHwgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdzaG93JyB8fCB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2hpZGRlbidcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzTW9yZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZE1vcmUgJiYgdGhpcy5sb2FkTW9yZS5oYXNNb3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlZERhdGEubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNldHRlci4gTXVzdCBiZSBhIHJlc3BvbnNlIGZyb20gQGM4eS9kYXRhIG9yIGFuIG9ic2VydmFibGUuXG4gICAqIFlvdSBjYW4gcGFzcyBhbiBvYnNlcnZhYmxlIHdpdGggbnVsbCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvck9mKGZldGNoRGF0YTogSVJlc3VsdExpc3Q8SUlkZW50aWZpZWQ+IHwgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJSWRlbnRpZmllZD4+KSB7XG4gICAgaWYgKGZldGNoRGF0YSkge1xuICAgICAgdGhpcy5vYnMkID0gKGlzT2JzZXJ2YWJsZShmZXRjaERhdGEpID8gZmV0Y2hEYXRhIDogb2YoZmV0Y2hEYXRhKSkucGlwZShcbiAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmcgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IHBhZ2luZywgZGF0YSB9ID0gcmVzdWx0O1xuICAgICAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1vZGUgc2V0dGVyOlxuICAgKiAgLSBhdXRvOiBUcmllcyB0byBhdXRvbWF0aWNhbGx5IGxvYWQgbW9yZSBkYXRhIChkZWZhdWx0IG1heGltdW0gMTAgaXRlcmF0aW9uczsgY2FuIGJlXG4gICAqICAgICAgICAgIGNoYW5nZSB3aXRoIG1heEl0ZXJhdGlvbnMgc2V0dGluZ3MpLlxuICAgKiAgLSBzaG93OiBTaG93cyBhIGxvYWQgbW9yZSBidXR0b24gZm9yIHRoZSB1c2VyIHRvIGRlY2lkZVxuICAgKiAgLSBub25lOiBEb2Vzbid0IHBlcmZvcm0gYW55IGxvYWQgbW9yZSBhY3Rpb24uXG4gICAqICAtIGhpZGRlbjogTG9hZHMgbW9yZSBkYXRhIGF1dG9tYXRpY2FsbHkgYnV0IHdpdGggbm8gdmlzaWJsZSBidXR0b24gZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWRNb3JlKHR5cGU6IEZvck9mRGlyZWN0aXZlWydsb2FkTW9yZU1vZGUnXSkge1xuICAgIHRoaXMubG9hZE1vcmVNb2RlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGlwZSBzZXR0ZXIgdG8gYXR0YWNoIGFueSByeGpzIHBpcGUgdG8gdGhlIGN1cnJlbnQgYW5kIG1vcmUgbG9hZGVkIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yUGlwZShkYXRhUGlwZTogRm9yT2ZEaXJlY3RpdmVbJ2RhdGFQaXBlJ10pIHtcbiAgICBpZiAoZGF0YVBpcGUpIHtcbiAgICAgIHRoaXMuZGF0YVBpcGUgPSBkYXRhUGlwZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSB0byB1c2UgaWYgbm8gZGF0YSBpcyBmb3VuZCBhdCBhbGwgKGUuZy4gaWYgeW91IGFwcGx5IGEgZmlsdGVyIHBpcGUpLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvck5vdEZvdW5kKG5vdEZvdW5kVGVtcGxhdGU6IEZvck9mRGlyZWN0aXZlWydub3RGb3VuZFRlbXBsYXRlJ10pIHtcbiAgICB0aGlzLm5vdEZvdW5kVGVtcGxhdGUgPSBub3RGb3VuZFRlbXBsYXRlO1xuICAgIGlmICh0aGlzLmxvYWRNb3JlKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlLm5vTW9yZURhdGFIaW50ID0gbm90Rm91bmRUZW1wbGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVycyBvZiBpdGVyYXRpb25zIHRvIGNhbGwgZGF0YSBmcm9tIHRoZSBhcGkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yTWF4SXRlcmF0aW9ucyhtYXhJdGVyYXRpb25zOiBudW1iZXIpIHtcbiAgICB0aGlzLm1heEl0ZXJhdGlvbnMgPSBtYXhJdGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY3VzdG9tIGxvYWRpbmcgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWRpbmdUZW1wbGF0ZShsb2FkaW5nVGVtcGxhdGU6IEZvck9mRGlyZWN0aXZlWydsb2FkaW5nVGVtcGxhdGUnXSkge1xuICAgIHRoaXMubG9hZGluZ1RlbXBsYXRlID0gbG9hZGluZ1RlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbmV4dCB0ZXh0IGxhYmVsLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWROZXh0TGFiZWwobG9hZE5leHRMYWJlbDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkTmV4dExhYmVsID0gbG9hZE5leHRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFJlYWx0aW1lU2VydmljZSBpbnN0YW5jZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JSZWFsdGltZShzb3VyY2U6IEZvck9mRGlyZWN0aXZlWydyZWFsdGltZSddKSB7XG4gICAgdGhpcy5yZWFsdGltZSA9IHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsdGltZSBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvclJlYWx0aW1lT3B0aW9ucyhyZWFsdGltZU9wdGlvbnM6IEZvck9mRGlyZWN0aXZlWydyZWFsdGltZU9wdGlvbnMnXSkge1xuICAgIHRoaXMucmVhbHRpbWVPcHRpb25zID0gcmVhbHRpbWVPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29tcGFyYXRvciBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIGxpc3QgaXRlbXMuIFVzZWQgdG8gZGV0ZXJtaW5lXG4gICAqIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBhIG5ldyBlbGVtZW50IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JDb21wYXJhdG9yKGNvbXBhcmF0b3I6IEZvck9mRGlyZWN0aXZlWydjb21wYXJhdG9yJ10pIHtcbiAgICB0aGlzLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbCByZW5kZXJpbmcgbWV0aG9kLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGZpeGVkIGl0ZW0gc2l6ZSBmb3IgdmlydHVhbCBzY3JvbGwgd2luZG93IHN0cmF0ZWd5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JWaXJ0dWFsU2Nyb2xsRWxlbWVudFNpemU7XG5cbiAgLyoqXG4gICAqIFNldHMgbW9kZSBvZiB2aXJ0dWFsIHNjcm9sbGVyIGluc3RhbmNlLlxuICAgKiB3aW5kb3cgaXMgdXNlZCBmb3IgY2FzZSB3aGVuIHdob2xlIHZpZXdwb3J0IGlzIHNjcm9sbGVkLlxuICAgKiBmaXhlZCBjYW4gYmUgdXNlZCBvbiBpbm5lci1zY3JvbGwgY29udGFpbmVycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgYzh5Rm9yVmlydHVhbFNjcm9sbFN0cmF0ZWd5OiAnZml4ZWQnIHwgJ3dpbmRvdycgPSAnd2luZG93JztcblxuICAvKipcbiAgICogV2hlbiB1c2VkIGZpeGVkIHN0cmF0ZWd5LCB0aGVyZSBuZWVkcyB0byBiZSBmaXhlZCBoZWlnaHQgc2V0IG9uIHNjcm9sbGluZyBjb250YWluZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIGM4eUZvclZpcnR1YWxTY3JvbGxDb250YWluZXJIZWlnaHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSBsaXN0LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHByaXZhdGUgYzh5Rm9yQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBjb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cGw6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlUmVhbHRpbWUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnMkICYmIChjaGFuZ2VzLmM4eUZvclBpcGUgfHwgY2hhbmdlcy5jOHlGb3JPZikpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVQYWdpbmcoKTtcblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLmZpbHRlclBpcGUgPSB0aGlzLmRhdGFQaXBlO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmUtcmVuZGVyaW5nICBvbiBmaWx0ZXJpbmcgaWYgYWxsIGRhdGEgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgIC8vIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgIGNvbnN0IHJlUmVuZGVyID0gIXRoaXMuaGFzTW9yZURhdGEgJiYgISFjaGFuZ2VzLmM4eUZvclBpcGUgJiYgIWNoYW5nZXMuYzh5Rm9yT2Y7XG5cbiAgICAgIGlmIChyZVJlbmRlcikge1xuICAgICAgICB0aGlzLm9icyQgPSBvZih0aGlzLmNhY2hlZERhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdpbmdTdWIgPSB0aGlzLm9icyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZVJlbmRlcikge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZERhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoc3JjID0+IHRoaXMuZGF0YVBpcGUoc3JjKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogW10pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvdW50KGRhdGEubGVuZ3RoKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcihkYXRhLCByZVJlbmRlcik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmVQYWdpbmcoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVhbHRpbWUoKSB7XG4gICAgaWYgKHRoaXMucmVhbHRpbWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWVDcmVhdGUoKTtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWVVcGRhdGUoKTtcbiAgICAgIHRoaXMuaGFuZGxlUmVhbHRpbWVEZWxldGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT24gY3JlYXRlIG5vdGlmaWNhdGlvbjpcbiAgICogLSBpZiBpdGVtIHBhc3NlcyBkYXRhIHBpcGUsIHRoZW4gaW5zZXJ0IGl0LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZUNyZWF0ZSgpIHtcbiAgICBjb25zdCB7IGVudGl0eU9ySWQgfSA9IHRoaXMucmVhbHRpbWVPcHRpb25zO1xuICAgIHRoaXMucmVhbHRpbWVcbiAgICAgIC5vbkNyZWF0ZSQoZW50aXR5T3JJZClcbiAgICAgIC5waXBlKFxuICAgICAgICBpdGVtJCA9PiB0aGlzLml0ZW1EYXRhUGlwZShpdGVtJCksXG4gICAgICAgIGZpbHRlcihpdGVtID0+ICEhaXRlbSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoaXRlbSA9PiB0aGlzLmluc2VydChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogT24gdXBkYXRlIG5vdGlmaWNhdGlvbjpcbiAgICogLSBpZiBpdGVtIGlzIGRpc3BsYXllZCBhbmQgcGFzc2VzIGRhdGEgcGlwZSwgdGhlbiB1cGRhdGUgaXQsXG4gICAqIC0gaWYgaXRlbSBpcyBkaXNwbGF5ZWQgYW5kIGRvZXNuJ3QgcGFzcyBkYXRhIHBpcGUsIHRoZW4gcmVtb3ZlIGl0IChpZiBgcmVtb3ZlT25VcGRhdGVgIGlzIHRydWUpLFxuICAgKiAtIGlmIGl0ZW0gaXMgbm90IGRpc3BsYXllZCBhbmQgcGFzc2VzIGRhdGEgcGlwZSwgdGhlbiBpbnNlcnQgaXQgKGlmIGBpbnNlcnRPblVwZGF0ZWAgaXMgdHJ1ZSksXG4gICAqIC0gaWYgaXRlbSBpcyBub3QgZGlzcGxheWVkIGFuZCBkb2Vzbid0IHBhc3MgZGF0YSBwaXBlLCB0aGVuIGlnbm9yZSBpdC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVhbHRpbWVVcGRhdGUoKSB7XG4gICAgY29uc3QgeyBlbnRpdHlPcklkIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICB0aGlzLnJlYWx0aW1lXG4gICAgICAub25VcGRhdGUkKGVudGl0eU9ySWQpXG4gICAgICAucGlwZShcbiAgICAgICAgaXRlbSQgPT5cbiAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIGl0ZW0kLFxuICAgICAgICAgICAgaXRlbSQucGlwZShcbiAgICAgICAgICAgICAgc3JjID0+IHRoaXMuaXRlbURhdGFQaXBlKHNyYyksXG4gICAgICAgICAgICAgIG1hcChpdGVtID0+IGl0ZW0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW2l0ZW0sIHBhc3Nlc0RhdGFQaXBlXSkgPT4ge1xuICAgICAgICBjb25zdCB7IGluc2VydE9uVXBkYXRlLCByZW1vdmVPblVwZGF0ZSB9ID0gdGhpcy5yZWFsdGltZU9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZCA9IHRoaXMuaXNEaXNwbGF5ZWQoY29lcmNlTnVtYmVyUHJvcGVydHkoaXRlbS5pZCkpO1xuICAgICAgICBpZiAoZGlzcGxheWVkKSB7XG4gICAgICAgICAgaWYgKHBhc3Nlc0RhdGFQaXBlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShpdGVtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlbW92ZU9uVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShjb2VyY2VOdW1iZXJQcm9wZXJ0eShpdGVtLmlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhc3Nlc0RhdGFQaXBlICYmIGluc2VydE9uVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5pbnNlcnQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGRlbGV0ZSBub3RpZmljYXRpb246XG4gICAqIC0gcmVtb3ZlIGl0ZW0gZnJvbSB0aGUgbGlzdCAoaWYgbm90IHRoZXJlLCBpdCB3aWxsIGJlIGp1c3QgaWdub3JlZCkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lRGVsZXRlKCkge1xuICAgIGNvbnN0IHsgZW50aXR5T3JJZCB9ID0gdGhpcy5yZWFsdGltZU9wdGlvbnM7XG4gICAgdGhpcy5yZWFsdGltZVxuICAgICAgLm9uRGVsZXRlJChlbnRpdHlPcklkKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgIC5zdWJzY3JpYmUoaWQgPT4gdGhpcy5yZW1vdmUoY29lcmNlTnVtYmVyUHJvcGVydHkoaWQpKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcihkYXRhLCByZVJlbmRlciA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZSA9IHRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFdyYXBwZXJDb21wb25lbnQoKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24pIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb3JlID0gdGhpcy5jcmVhdGVMb2FkTW9yZUJ1dHRvbkNvbXBvbmVudChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRWaXJ0dWFsU2Nyb2xsQ29udGVudHMoZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcblxuICAgIGRhdGEuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXG4gICAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZURhdGEsXG4gICAgICAgIGxvYWRNb3JlQ29tcG9uZW50OiB0aGlzLmxvYWRNb3JlXG4gICAgICB9O1xuICAgICAgdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudHBsLCBjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNob3VsZFVzZUxvYWRNb3JlQnV0dG9uKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlID0gdGhpcy5jcmVhdGVMb2FkTW9yZUJ1dHRvbkNvbXBvbmVudChyZVJlbmRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmQoZGF0YSkge1xuICAgIGlmICh0aGlzLmM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuYXBwZW5kVmlydHVhbFNjcm9sbENvbnRlbnQoZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNob3VsZFVzZUxvYWRNb3JlQnV0dG9uID8gdGhpcy52Y3IubGVuZ3RoIC0gMSA6IHRoaXMudmNyLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXG4gICAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZURhdGEsXG4gICAgICAgIGxvYWRNb3JlQ29tcG9uZW50OiB0aGlzLmxvYWRNb3JlXG4gICAgICB9O1xuICAgICAgdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudHBsLCBjb250ZXh0LCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb3JlRGF0YShkYXRhKSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51cGRhdGVDb3VudChkYXRhLmxlbmd0aCk7XG4gICAgICB0aGlzLmFwcGVuZChkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KHJlUmVuZGVyKSB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KExvYWRNb3JlQ29tcG9uZW50KTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICBpbnN0YW5jZS5wYWdpbmcgPSB0aGlzLnBhZ2luZztcbiAgICBpbnN0YW5jZS51c2VJbnRlcnNlY3Rpb24gPSB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2F1dG8nIHx8IHRoaXMubG9hZE1vcmVNb2RlID09PSAnaGlkZGVuJztcbiAgICBpbnN0YW5jZS5oaWRkZW4gPSB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2hpZGRlbic7XG4gICAgaW5zdGFuY2UubWF4SXRlcmF0aW9ucyA9IHRoaXMubWF4SXRlcmF0aW9ucztcbiAgICBpbnN0YW5jZS5ub01vcmVEYXRhSGludCA9IHRoaXMubm90Rm91bmRUZW1wbGF0ZTtcbiAgICBpbnN0YW5jZS5sb2FkaW5nVGVtcGxhdGUgPSB0aGlzLmxvYWRpbmdUZW1wbGF0ZTtcbiAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTmV4dExhYmVsO1xuICAgIHRoaXMucGFnaW5nU3ViID0gaW5zdGFuY2Uub25Mb2FkXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBbXSkgPT4gdGhpcy5jaGVja0ZvckR1cGxpY2F0ZXMoZGF0YSkpLFxuICAgICAgICB0YXAoKGRhdGE6IFtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZWREYXRhID0gdGhpcy5jYWNoZWREYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHNyYyA9PiB0aGlzLmRhdGFQaXBlKHNyYykpXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5sb2FkTW9yZURhdGEoZGF0YSkpO1xuICAgIGlmIChyZVJlbmRlcikge1xuICAgICAgYXNzaWduKGluc3RhbmNlLCB0aGlzLmxvYWRNb3JlKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWaXJ0dWFsU2Nyb2xsV3JhcHBlckNvbXBvbmVudCgpIHtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQoVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudDtcbiAgICBpbnN0YW5jZS5pdGVtcyA9IHRoaXMuY2FjaGVkRGF0YTtcbiAgICBpbnN0YW5jZS5pdGVtSGVpZ2h0ID0gdGhpcy5jOHlGb3JWaXJ0dWFsU2Nyb2xsRWxlbWVudFNpemU7XG4gICAgaW5zdGFuY2UudGVtcGxhdGUgPSB0aGlzLnRwbDtcbiAgICBpbnN0YW5jZS5zdHJhdGVneSA9IHRoaXMuYzh5Rm9yVmlydHVhbFNjcm9sbFN0cmF0ZWd5O1xuICAgIGluc3RhbmNlLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuYzh5Rm9yVmlydHVhbFNjcm9sbENvbnRhaW5lckhlaWdodDtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0KGl0ZW0pIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgaWYgKHRoaXMuY29tcGFyYXRvciAmJiB0aGlzLmNhY2hlZERhdGEubGVuZ3RoKSB7XG4gICAgICBsZXQgY29tcGFyaXNpb25SZXN1bHQ6IG51bWJlcjtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgdmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4gPSB0aGlzLnZjci5nZXQoaW5kZXgpIGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICAgICAgICBjb25zdCBpdGVtQiA9IGdldCh2aWV3LCAnY29udGV4dC4kaW1wbGljaXQnKTtcbiAgICAgICAgY29tcGFyaXNpb25SZXN1bHQgPSBpdGVtICYmIGl0ZW1CID8gdGhpcy5jb21wYXJhdG9yKGl0ZW0sIGl0ZW1CKSA6IDA7XG4gICAgICAgIGlmIChjb21wYXJpc2lvblJlc3VsdCA8PSAwKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoY29tcGFyaXNpb25SZXN1bHQgPD0gMCAmJiBpbmRleCA8IHRoaXMuY2FjaGVkRGF0YS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBhcHBlbmQgZWxlbWVudHMgYWZ0ZXIgdGhlIGxhc3Qgb25lIGN1cnJlbnRseSBsb2FkZWQsXG4gICAgLy8gYXMgaXQgbWF5IGJlbG9uZyBmdXJ0aGVyIGRvd24gdGhlcmUgb24gdGhlIGxpc3QgYW5kIHdpbGxcbiAgICAvLyBiZSBldmVudHVhbGx5IGxvYWRlZCB3aXRoIG9uZSBvZiB0aGUgbmV4dCBwYWdlcy5cbiAgICBpZiAoaW5kZXggPCB0aGlzLmNhY2hlZERhdGEubGVuZ3RoIHx8IHRoaXMuY2FjaGVkRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXG4gICAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZURhdGFcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FjaGVkRGF0YS5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgY29uc3Qgdmlld1JlZjogVmlld1JlZiA9IHRoaXMudHBsLmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICAgIHRoaXMudmNyLmluc2VydCh2aWV3UmVmLCBpbmRleCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50KDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKHVwZGF0ZWRJdGVtKSB7XG4gICAgdGhpcy5mb3JNYXRjaGluZ0VtYmVkZGVkVmlld1JlZihcbiAgICAgIChpdGVtOiBJSWRlbnRpZmllZCkgPT4gaXRlbSAmJiB1cGRhdGVkSXRlbSAmJiBpdGVtLmlkID09PSB1cGRhdGVkSXRlbS5pZCxcbiAgICAgICh2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PikgPT4ge1xuICAgICAgICB2aWV3LmNvbnRleHQuJGltcGxpY2l0ID0gdXBkYXRlZEl0ZW07XG4gICAgICAgIHZpZXcubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlKGlkVG9SZW1vdmUpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXllZChpZFRvUmVtb3ZlKSkge1xuICAgICAgdGhpcy51cGRhdGVDb3VudCgtMSk7XG4gICAgfVxuICAgIHRoaXMuZm9yTWF0Y2hpbmdFbWJlZGRlZFZpZXdSZWYoXG4gICAgICAoaXRlbTogSUlkZW50aWZpZWQpID0+IGl0ZW0gJiYgY29lcmNlTnVtYmVyUHJvcGVydHkoaXRlbS5pZCwgTmFOKSA9PT0gaWRUb1JlbW92ZSxcbiAgICAgICh2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PikgPT4gdmlldy5kZXN0cm95KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb3VudChjb3VudENoYW5nZTogbnVtYmVyKSB7XG4gICAgdGhpcy5jb3VudCArPSBjb3VudENoYW5nZTtcbiAgICB0aGlzLmM4eUZvckNvdW50LmVtaXQodGhpcy5jb3VudCk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzcGxheWVkKGlkVG9DaGVjaykge1xuICAgIGxldCBkaXNwbGF5ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgICAgKGl0ZW06IElJZGVudGlmaWVkKSA9PiBpdGVtICYmIGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQsIE5hTikgPT09IGlkVG9DaGVjayxcbiAgICAgICgpID0+IHtcbiAgICAgICAgZGlzcGxheWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBwcml2YXRlIGZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgIGZpbHRlckZuOiAoaXRlbTogSUlkZW50aWZpZWQpID0+IGJvb2xlYW4sXG4gICAgY2FsbGJhY2tGbjogKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSA9PiB2b2lkXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52Y3IubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gdGhpcy52Y3IuZ2V0KGkpIGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICAgICAgY29uc3QgaXRlbTogSUlkZW50aWZpZWQgPSBnZXQodmlldywgJ2NvbnRleHQuJGltcGxpY2l0Jyk7XG4gICAgICBpZiAoZmlsdGVyRm4oaXRlbSkpIHtcbiAgICAgICAgY2FsbGJhY2tGbih2aWV3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yRHVwbGljYXRlcyhkYXRhOiBJSWRlbnRpZmllZFtdKTogSUlkZW50aWZpZWRbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVhbHRpbWVcbiAgICAgID8gZGF0YS5maWx0ZXIoaXRlbSA9PiAhdGhpcy5jYWNoZWREYXRhLnNvbWUoY2FjaGVkID0+IGNhY2hlZC5pZCA9PT0gaXRlbS5pZCkpXG4gICAgICA6IGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlUGFnaW5nKCkge1xuICAgIGlmICh0aGlzLnBhZ2luZ1N1Yikge1xuICAgICAgdGhpcy5wYWdpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZpcnR1YWxTY3JvbGxDb250ZW50cyhpdGVtcykge1xuICAgIGlmICh0aGlzLmM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwgJiYgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLml0ZW1zID0gaXRlbXM7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5hcHBseSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kVmlydHVhbFNjcm9sbENvbnRlbnQoaXRlbXMpIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsICYmIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5pdGVtcyA9IHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlLml0ZW1zLmNvbmNhdChpdGVtcyk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5hcHBseSgpO1xuICAgIH1cbiAgfVxufVxuIl19
539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yT2YuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZm9yT2YuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUNMLGFBQWEsRUFDYixZQUFZLEVBRVosRUFBRSxFQUNGLElBQUksRUFDSixPQUFPLEVBR1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scURBQXFELENBQUM7O0FBRXRHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEZHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUF3QnpCLElBQVksdUJBQXVCO1FBQ2pDLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUks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QkFPQyx1QkFBdUI7c0JBRDlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgSVJlc3VsdExpc3QsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGFzc2lnbiwgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGlzT2JzZXJ2YWJsZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHBpcGUsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgVW5hcnlGdW5jdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4uL3JlYWx0aW1lL3JlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9yT2ZGaWx0ZXJQaXBlLCBGb3JPZlJlYWx0aW1lT3B0aW9ucyB9IGZyb20gJy4vZm9yT2YubW9kZWwnO1xuaW1wb3J0IHsgTG9hZE1vcmVDb21wb25lbnQgfSBmcm9tICcuL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi9sb2FkLW1vcmUubW9kZWwnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gaXRlcmF0ZSBvdmVyIElSZXN1bHRMaXN0PFQ+IGRhdGEgZnJvbSBAYzh5L2NsaWVudC5cbiAqIERlcGVuZGluZyBvbiB0aGUgW2M4eUZvckxvYWRNb3JlXSBhIGxvYWQgbW9yZSBidXR0b24gaXM6XG4gKiAgLSBhdXRvOiBUcmllcyB0byBhdXRvbWF0aWNhbGx5IGxvYWQgbW9yZSBkYXRhIChkZWZhdWx0IG1heGltdW0gMTAgaXRlcmF0aW9uczsgY2FuIGJlXG4gKiAgICAgICAgICBjaGFuZ2Ugd2l0aCBtYXhJdGVyYXRpb25zIHNldHRpbmdzKS5cbiAqICAtIHNob3c6IFNob3dzIGEgbG9hZCBtb3JlIGJ1dHRvbiBmb3IgdGhlIHVzZXIgdG8gZGVjaWRlXG4gKiAgLSBub25lOiBEb2Vzbid0IHBlcmZvcm0gYW55IGxvYWQgbW9yZSBhY3Rpb24uXG4gKiAgLSBoaWRkZW46IExvYWRzIG1vcmUgZGF0YSBhdXRvbWF0aWNhbGx5IGJ1dCB3aXRoIG5vIHZpc2libGUgYnV0dG9uIGZvciB0aGUgdXNlci5cbiAqXG4gKiBBZGRpdGlvbmFsLCBhbnkgcnhqcyBvcGVyYXRvciBwaXBlIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBbYzh5Rm9yUGlwZV0gaW5wdXQsIGUuZy4gdG9cbiAqIGZpbHRlciB0aGUgZGF0YSBkaXNwbGF5ZWQgY3VycmVudGx5IGFzIHdlbGwgYXMgdGhlIGRhdGEgbG9hZGVkIGJ5IHN1YnNlcXVlbnQgcmVxdWVzdHMuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiAqYzh5Rm9yPVwibGV0IGRldmljZSBvZiBkZXZpY2VzOyBsb2FkTW9yZTogJ2F1dG8nOyBsZXQgaSA9IGluZGV4OyBwaXBlOiBmaWx0ZXJQaXBlO1wiPlxuICogIHt7IGkgKyAxIH19LiB7e2RldmljZS5uYW1lfX1cbiAqIDwvZGl2PlxuICogYGBgXG4gKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGxpc3QgYWxsIGVudGl0aWVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gYGRldmljZXNgOlxuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5kZXZpY2VzID0gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMTAsIGZyYWdtZW50VHlwZTogJ2M4eV9Jc0RldmljZScgfSlcbiAqIGBgYFxuICogSXQgd2lsbCBkaXNwbGF5IHRoZSBmaXJzdCAxMCBpdGVtcywgaWYgdGhlcmUgaXMgbW9yZSBzcGFjZSBsZWZ0IG9uIHRoZSBzY3JlZW4sIGFuZCB0aGVyZSBhcmUgbW9yZVxuICogdGhhbiAxMCBkZXZpY2VzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbG9hZCB1cCB0byAxMCBwYWdlcyBtb3JlLiBJZiBpdCBzdGlsbCBjYW4ndCBmaXQgdGhlIHNjcmVlblxuICogaXQgd2lsbCBzdG9wIGFuZCBzd2l0Y2ggdG8gYHNob3dgIG1vZGUuXG4gKlxuICogQSBwaXBlIGNhbiBiZSBhcHBsaWVkIGUuZy4gZm9yIGZpbHRlcmluZyBvciBncm91cGluZy4gVGhpcyBwaXBlIGlzIGF0dGFjaGVkIHRvIGV2ZXJ5IGZvbGxvdyB1cFxuICogcmVxdWVzdCBkb25lIGJ5IHRoZSBsb2FkIG1vcmUgY29tcG9uZW50OlxuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5maWx0ZXJQaXBlID0gcGlwZShcbiAqICAgIG1hcCgoZGF0YTogW10pID0+IHtcbiAqICAgICByZXR1cm4gZGF0YS5maWx0ZXIoXG4gKiAgICAgIChtbzogYW55KSA9PiBtby5uYW1lICYmIG1vLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAqICAgICk7XG4gKiAgfSlcbiAqICk7XG4gKiBgYGBcbiAqIFRoZSBwaXBlIG11c3QgYmUgYW4gcnhqcyBwaXBlIGFuZCBjYW4gdGFrZSBhbnkgb3BlcmF0b3IuXG4gKlxuICogRXhhbXBsZSB3aXRoIHJlYWx0aW1lIHN1cHBvcnQgYW5kIGl0ZW1zIGNvdW50IG91dHB1dCAoZS5nLiBmb3IgaGFuZGxpbmcgZW1wdHkgc3RhdGUgYW5kIGhlYWRlcik6XG4gKlxuICogYGBgaHRtbFxuICogPGM4eS1saXN0LWdyb3VwPlxuICogICA8ZGl2IGNsYXNzPVwiYzh5LWVtcHR5LXN0YXRlXCIgKm5nSWY9XCJjb3VudCA9PT0gMFwiPlxuICogICAgICguLi4pXG4gKiAgIDwvZGl2PlxuICpcbiAqICAgPGRpdiBjbGFzcz1cInBhZ2Utc3RpY2t5LWhlYWRlciBoaWRkZW4teHMgYzh5LWxpc3RfX2l0ZW0gYzh5LWxpc3QtLXRpbWVsaW5lXCIgKm5nSWY9XCJjb3VudCA+IDBcIj5cbiAqICAgICAoLi4uKVxuICogICA8L2Rpdj5cbiAqXG4gKiAgIDxuZy10ZW1wbGF0ZVxuICogICAgIGM4eUZvclxuICogICAgIGxldC1vcGVyYXRpb25cbiAqICAgICBbYzh5Rm9yT2ZdPVwiaXRlbXMkXCJcbiAqICAgICBbYzh5Rm9yUGlwZV09XCJmaWx0ZXJQaXBlXCJcbiAqICAgICBbYzh5Rm9yUmVhbHRpbWVdPVwicmVhbHRpbWVcIlxuICogICAgIFtjOHlGb3JSZWFsdGltZU9wdGlvbnNdPVwicmVhbHRpbWVPcHRpb25zXCJcbiAqICAgICAoYzh5Rm9yQ291bnQpPVwiY291bnQgPSAkZXZlbnRcIlxuICogICA+XG4gKiAgICAgPGM4eS1saS10aW1lbGluZT5cbiAqICAgICAgICguLi4pXG4gKiAgICAgPC9jOHktbGktdGltZWxpbmU+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKiA8L2M4eS1saXN0LWdyb3VwPlxuICogYGBgXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiAgICguLi4pXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICogICBASW5wdXQoKSBkZXZpY2VJZDogSUlkZW50aWZpZWQ7XG4gKiAgIGl0ZW1zJCA9IHRoaXMub3BlcmF0aW9uU2VydmljZS5saXN0KHtcbiAqICAgICBkZXZpY2VJZDogdGhpcy5kZXZpY2VJZCxcbiAqICAgICBmcmFnbWVudFR5cGU6ICdjOHlfTXlPcGVyYXRpb24nLFxuICogICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICogICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAqICAgICByZXZlcnQ6IHRydWUsXG4gKiAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAqICAgfSk7XG4gKiAgIGZpbHRlclBpcGUgPSBwaXBlKG1hcCgob3BzOiBJT3BlcmF0aW9uW10pID0+IG9wcy5maWx0ZXIob3AgPT4gb3AuYzh5X015T3BlcmF0aW9uKSkpO1xuICogICByZWFsdGltZU9wdGlvbnM6IEZvck9mUmVhbHRpbWVPcHRpb25zID0ge1xuICogICAgIGVudGl0eU9ySWQ6IHRoaXMuZGV2aWNlSWQsXG4gKiAgICAgcmVtb3ZlT25VcGRhdGU6IHRydWUsXG4gKiAgICAgaW5zZXJ0T25VcGRhdGU6IHRydWVcbiAqICAgfSBhcyBGb3JPZlJlYWx0aW1lT3B0aW9ucztcbiAqICAgY291bnQ6IG51bWJlcjtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKFxuICogICAgIHByaXZhdGUgb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcbiAqICAgICBwdWJsaWMgcmVhbHRpbWU6IE9wZXJhdGlvblJlYWx0aW1lU2VydmljZVxuICogICApIHt9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2M4eUZvcl0nXG59KVxuZXhwb3J0IGNsYXNzIEZvck9mRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBjYWNoZWREYXRhOiBJSWRlbnRpZmllZFtdID0gW107XG4gIHByaXZhdGUgcGFnaW5nOiBQYWdpbmc8SUlkZW50aWZpZWQ+O1xuICBwcml2YXRlIGxvYWRNb3JlTW9kZTogTG9hZE1vcmVNb2RlID0gJ2F1dG8nO1xuICBwcml2YXRlIGRhdGFQaXBlOiBGb3JPZkZpbHRlclBpcGUgPSBwaXBlKHRhcCgpKTtcbiAgcHJpdmF0ZSBpdGVtRGF0YVBpcGU6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxJSWRlbnRpZmllZD4sIE9ic2VydmFibGU8SUlkZW50aWZpZWQ+PiA9IHBpcGUoXG4gICAgbWFwKGl0ZW0gPT4gW2l0ZW1dKSxcbiAgICBzcmMgPT4gdGhpcy5kYXRhUGlwZShzcmMpLFxuICAgIG1hcCgoW2l0ZW1dKSA9PiBpdGVtKVxuICApO1xuICBwcml2YXRlIHBhZ2luZ1N1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9icyQ6IE9ic2VydmFibGU8SUlkZW50aWZpZWRbXT47XG4gIHByaXZhdGUgbG9hZE1vcmU6IExvYWRNb3JlQ29tcG9uZW50O1xuICBwcml2YXRlIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBtYXhJdGVyYXRpb25zID0gMTA7XG4gIHByaXZhdGUgbm90Rm91bmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBsb2FkTmV4dExhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgbG9hZGluZ0xhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lU2VydmljZTxJSWRlbnRpZmllZD47XG4gIHByaXZhdGUgcmVhbHRpbWVPcHRpb25zOiBGb3JPZlJlYWx0aW1lT3B0aW9ucyA9IHt9O1xuICBwcml2YXRlIGNvbXBhcmF0b3I6IChpdGVtQTogSUlkZW50aWZpZWQsIGl0ZW1COiBJSWRlbnRpZmllZCkgPT4gbnVtYmVyO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgdmlydHVhbFNjcm9sbEluc3RhbmNlOiBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgZ2V0IHNob3VsZFVzZUxvYWRNb3JlQnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxvYWRNb3JlTW9kZSA9PT0gJ2F1dG8nIHx8IHRoaXMubG9hZE1vcmVNb2RlID09PSAnc2hvdycgfHwgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdoaWRkZW4nXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc01vcmVEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmxvYWRNb3JlICYmIHRoaXMubG9hZE1vcmUuaGFzTW9yZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBzZXR0ZXIuIE11c3QgYmUgYSByZXNwb25zZSBmcm9tIEBjOHkvZGF0YSBvciBhbiBvYnNlcnZhYmxlLlxuICAgKiBZb3UgY2FuIHBhc3MgYW4gb2JzZXJ2YWJsZSB3aXRoIG51bGwgdG8gZXhwbGljaXRseSBjbGVhciB0aGUgbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JPZihmZXRjaERhdGE6IElSZXN1bHRMaXN0PElJZGVudGlmaWVkPiB8IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8SUlkZW50aWZpZWQ+Pikge1xuICAgIGlmIChmZXRjaERhdGEpIHtcbiAgICAgIHRoaXMub2JzJCA9IChpc09ic2VydmFibGUoZmV0Y2hEYXRhKSA/IGZldGNoRGF0YSA6IG9mKGZldGNoRGF0YSkpLnBpcGUoXG4gICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5nID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBwYWdpbmcsIGRhdGEgfSA9IHJlc3VsdDtcbiAgICAgICAgICB0aGlzLnBhZ2luZyA9IHBhZ2luZztcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIHNldHRlcjpcbiAgICogIC0gYXV0bzogVHJpZXMgdG8gYXV0b21hdGljYWxseSBsb2FkIG1vcmUgZGF0YSAoZGVmYXVsdCBtYXhpbXVtIDEwIGl0ZXJhdGlvbnM7IGNhbiBiZVxuICAgKiAgICAgICAgICBjaGFuZ2Ugd2l0aCBtYXhJdGVyYXRpb25zIHNldHRpbmdzKS5cbiAgICogIC0gc2hvdzogU2hvd3MgYSBsb2FkIG1vcmUgYnV0dG9uIGZvciB0aGUgdXNlciB0byBkZWNpZGVcbiAgICogIC0gbm9uZTogRG9lc24ndCBwZXJmb3JtIGFueSBsb2FkIG1vcmUgYWN0aW9uLlxuICAgKiAgLSBoaWRkZW46IExvYWRzIG1vcmUgZGF0YSBhdXRvbWF0aWNhbGx5IGJ1dCB3aXRoIG5vIHZpc2libGUgYnV0dG9uIGZvciB0aGUgdXNlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JMb2FkTW9yZSh0eXBlOiBGb3JPZkRpcmVjdGl2ZVsnbG9hZE1vcmVNb2RlJ10pIHtcbiAgICB0aGlzLmxvYWRNb3JlTW9kZSA9IHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBpcGUgc2V0dGVyIHRvIGF0dGFjaCBhbnkgcnhqcyBwaXBlIHRvIHRoZSBjdXJyZW50IGFuZCBtb3JlIGxvYWRlZCBkYXRhLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvclBpcGUoZGF0YVBpcGU6IEZvck9mRGlyZWN0aXZlWydkYXRhUGlwZSddKSB7XG4gICAgaWYgKGRhdGFQaXBlKSB7XG4gICAgICB0aGlzLmRhdGFQaXBlID0gZGF0YVBpcGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgdGVtcGxhdGUgdG8gdXNlIGlmIG5vIGRhdGEgaXMgZm91bmQgYXQgYWxsIChlLmcuIGlmIHlvdSBhcHBseSBhIGZpbHRlciBwaXBlKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JOb3RGb3VuZChub3RGb3VuZFRlbXBsYXRlOiBGb3JPZkRpcmVjdGl2ZVsnbm90Rm91bmRUZW1wbGF0ZSddKSB7XG4gICAgdGhpcy5ub3RGb3VuZFRlbXBsYXRlID0gbm90Rm91bmRUZW1wbGF0ZTtcbiAgICBpZiAodGhpcy5sb2FkTW9yZSkge1xuICAgICAgdGhpcy5sb2FkTW9yZS5ub01vcmVEYXRhSGludCA9IG5vdEZvdW5kVGVtcGxhdGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlcnMgb2YgaXRlcmF0aW9ucyB0byBjYWxsIGRhdGEgZnJvbSB0aGUgYXBpLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvck1heEl0ZXJhdGlvbnMobWF4SXRlcmF0aW9uczogbnVtYmVyKSB7XG4gICAgdGhpcy5tYXhJdGVyYXRpb25zID0gbWF4SXRlcmF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBsb2FkaW5nIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JMb2FkaW5nVGVtcGxhdGUobG9hZGluZ1RlbXBsYXRlOiBGb3JPZkRpcmVjdGl2ZVsnbG9hZGluZ1RlbXBsYXRlJ10pIHtcbiAgICB0aGlzLmxvYWRpbmdUZW1wbGF0ZSA9IGxvYWRpbmdUZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIG5leHQgdGV4dCBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjOHlGb3JMb2FkTmV4dExhYmVsKGxvYWROZXh0TGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMubG9hZE5leHRMYWJlbCA9IGxvYWROZXh0TGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogTG9hZGluZyB0ZXh0IGxhYmVsLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckxvYWRpbmdMYWJlbChsb2FkaW5nTGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xhYmVsID0gbG9hZGluZ0xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgUmVhbHRpbWVTZXJ2aWNlIGluc3RhbmNlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvclJlYWx0aW1lKHNvdXJjZTogRm9yT2ZEaXJlY3RpdmVbJ3JlYWx0aW1lJ10pIHtcbiAgICB0aGlzLnJlYWx0aW1lID0gc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWx0aW1lIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgYzh5Rm9yUmVhbHRpbWVPcHRpb25zKHJlYWx0aW1lT3B0aW9uczogRm9yT2ZEaXJlY3RpdmVbJ3JlYWx0aW1lT3B0aW9ucyddKSB7XG4gICAgdGhpcy5yZWFsdGltZU9wdGlvbnMgPSByZWFsdGltZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQSBjb21wYXJhdG9yIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgbGlzdCBpdGVtcy4gVXNlZCB0byBkZXRlcm1pbmVcbiAgICogdGhlIHBvc2l0aW9uIGF0IHdoaWNoIGEgbmV3IGVsZW1lbnQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGM4eUZvckNvbXBhcmF0b3IoY29tcGFyYXRvcjogRm9yT2ZEaXJlY3RpdmVbJ2NvbXBhcmF0b3InXSkge1xuICAgIHRoaXMuY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsIHJlbmRlcmluZyBtZXRob2QuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIGM4eUZvckVuYWJsZVZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgZml4ZWQgaXRlbSBzaXplIGZvciB2aXJ0dWFsIHNjcm9sbCB3aW5kb3cgc3RyYXRlZ3kuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIGM4eUZvclZpcnR1YWxTY3JvbGxFbGVtZW50U2l6ZTtcblxuICAvKipcbiAgICogU2V0cyBtb2RlIG9mIHZpcnR1YWwgc2Nyb2xsZXIgaW5zdGFuY2UuXG4gICAqIHdpbmRvdyBpcyB1c2VkIGZvciBjYXNlIHdoZW4gd2hvbGUgdmlld3BvcnQgaXMgc2Nyb2xsZWQuXG4gICAqIGZpeGVkIGNhbiBiZSB1c2VkIG9uIGlubmVyLXNjcm9sbCBjb250YWluZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3k6ICdmaXhlZCcgfCAnd2luZG93JyA9ICd3aW5kb3cnO1xuXG4gIC8qKlxuICAgKiBXaGVuIHVzZWQgZml4ZWQgc3RyYXRlZ3ksIHRoZXJlIG5lZWRzIHRvIGJlIGZpeGVkIGhlaWdodCBzZXQgb24gc2Nyb2xsaW5nIGNvbnRhaW5lci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgYzh5Rm9yVmlydHVhbFNjcm9sbENvbnRhaW5lckhlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHJpdmF0ZSBjOHlGb3JDb3VudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYExvYWRNb3JlQ29tcG9uZW50YC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcml2YXRlIGM4eUZvckxvYWRNb3JlQ29tcG9uZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxMb2FkTW9yZUNvbXBvbmVudD4oKTtcblxuICBwcml2YXRlIGNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRwbDogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZWFsdGltZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9icyQgJiYgKGNoYW5nZXMuYzh5Rm9yUGlwZSB8fCBjaGFuZ2VzLmM4eUZvck9mKSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZVBhZ2luZygpO1xuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuZmlsdGVyUGlwZSA9IHRoaXMuZGF0YVBpcGU7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSByZS1yZW5kZXJpbmcgIG9uIGZpbHRlcmluZyBpZiBhbGwgZGF0YSBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgLy8gZnJvbSB0aGUgYmFja2VuZFxuICAgICAgY29uc3QgcmVSZW5kZXIgPSAhdGhpcy5oYXNNb3JlRGF0YSAmJiAhIWNoYW5nZXMuYzh5Rm9yUGlwZSAmJiAhY2hhbmdlcy5jOHlGb3JPZjtcblxuICAgICAgaWYgKHJlUmVuZGVyKSB7XG4gICAgICAgIHRoaXMub2JzJCA9IG9mKHRoaXMuY2FjaGVkRGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2luZ1N1YiA9IHRoaXMub2JzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAucGlwZShzcmMgPT4gdGhpcy5kYXRhUGlwZShzcmMpKVxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoZGF0YS5sZW5ndGgpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKGRhdGEsIHJlUmVuZGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZVBhZ2luZygpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZSgpIHtcbiAgICBpZiAodGhpcy5yZWFsdGltZSkge1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZUNyZWF0ZSgpO1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZVVwZGF0ZSgpO1xuICAgICAgdGhpcy5oYW5kbGVSZWFsdGltZURlbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBjcmVhdGUgbm90aWZpY2F0aW9uOlxuICAgKiAtIGlmIGl0ZW0gcGFzc2VzIGRhdGEgcGlwZSwgdGhlbiBpbnNlcnQgaXQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlYWx0aW1lQ3JlYXRlKCkge1xuICAgIGNvbnN0IHsgZW50aXR5T3JJZCB9ID0gdGhpcy5yZWFsdGltZU9wdGlvbnM7XG4gICAgdGhpcy5yZWFsdGltZVxuICAgICAgLm9uQ3JlYXRlJChlbnRpdHlPcklkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGl0ZW0kID0+IHRoaXMuaXRlbURhdGFQaXBlKGl0ZW0kKSxcbiAgICAgICAgZmlsdGVyKGl0ZW0gPT4gISFpdGVtKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShpdGVtID0+IHRoaXMuaW5zZXJ0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiB1cGRhdGUgbm90aWZpY2F0aW9uOlxuICAgKiAtIGlmIGl0ZW0gaXMgZGlzcGxheWVkIGFuZCBwYXNzZXMgZGF0YSBwaXBlLCB0aGVuIHVwZGF0ZSBpdCxcbiAgICogLSBpZiBpdGVtIGlzIGRpc3BsYXllZCBhbmQgZG9lc24ndCBwYXNzIGRhdGEgcGlwZSwgdGhlbiByZW1vdmUgaXQgKGlmIGByZW1vdmVPblVwZGF0ZWAgaXMgdHJ1ZSksXG4gICAqIC0gaWYgaXRlbSBpcyBub3QgZGlzcGxheWVkIGFuZCBwYXNzZXMgZGF0YSBwaXBlLCB0aGVuIGluc2VydCBpdCAoaWYgYGluc2VydE9uVXBkYXRlYCBpcyB0cnVlKSxcbiAgICogLSBpZiBpdGVtIGlzIG5vdCBkaXNwbGF5ZWQgYW5kIGRvZXNuJ3QgcGFzcyBkYXRhIHBpcGUsIHRoZW4gaWdub3JlIGl0LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVSZWFsdGltZVVwZGF0ZSgpIHtcbiAgICBjb25zdCB7IGVudGl0eU9ySWQgfSA9IHRoaXMucmVhbHRpbWVPcHRpb25zO1xuICAgIHRoaXMucmVhbHRpbWVcbiAgICAgIC5vblVwZGF0ZSQoZW50aXR5T3JJZClcbiAgICAgIC5waXBlKFxuICAgICAgICBpdGVtJCA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgaXRlbSQsXG4gICAgICAgICAgICBpdGVtJC5waXBlKFxuICAgICAgICAgICAgICBzcmMgPT4gdGhpcy5pdGVtRGF0YVBpcGUoc3JjKSxcbiAgICAgICAgICAgICAgbWFwKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbaXRlbSwgcGFzc2VzRGF0YVBpcGVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5zZXJ0T25VcGRhdGUsIHJlbW92ZU9uVXBkYXRlIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZChjb2VyY2VOdW1iZXJQcm9wZXJ0eShpdGVtLmlkKSk7XG4gICAgICAgIGlmIChkaXNwbGF5ZWQpIHtcbiAgICAgICAgICBpZiAocGFzc2VzRGF0YVBpcGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKGl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVtb3ZlT25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFzc2VzRGF0YVBpcGUgJiYgaW5zZXJ0T25VcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmluc2VydChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT24gZGVsZXRlIG5vdGlmaWNhdGlvbjpcbiAgICogLSByZW1vdmUgaXRlbSBmcm9tIHRoZSBsaXN0IChpZiBub3QgdGhlcmUsIGl0IHdpbGwgYmUganVzdCBpZ25vcmVkKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVhbHRpbWVEZWxldGUoKSB7XG4gICAgY29uc3QgeyBlbnRpdHlPcklkIH0gPSB0aGlzLnJlYWx0aW1lT3B0aW9ucztcbiAgICB0aGlzLnJlYWx0aW1lXG4gICAgICAub25EZWxldGUkKGVudGl0eU9ySWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgLnN1YnNjcmliZShpZCA9PiB0aGlzLnJlbW92ZShjb2VyY2VOdW1iZXJQcm9wZXJ0eShpZCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKGRhdGEsIHJlUmVuZGVyID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlID0gdGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsV3JhcHBlckNvbXBvbmVudCgpO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VMb2FkTW9yZUJ1dHRvbikge1xuICAgICAgICAgIHRoaXMubG9hZE1vcmUgPSB0aGlzLmNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFZpcnR1YWxTY3JvbGxDb250ZW50cyhkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZjci5jbGVhcigpO1xuXG4gICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YSxcbiAgICAgICAgbG9hZE1vcmVDb21wb25lbnQ6IHRoaXMubG9hZE1vcmVcbiAgICAgIH07XG4gICAgICB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50cGwsIGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24pIHtcbiAgICAgIHRoaXMubG9hZE1vcmUgPSB0aGlzLmNyZWF0ZUxvYWRNb3JlQnV0dG9uQ29tcG9uZW50KHJlUmVuZGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZChkYXRhKSB7XG4gICAgaWYgKHRoaXMuYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5hcHBlbmRWaXJ0dWFsU2Nyb2xsQ29udGVudChkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2hvdWxkVXNlTG9hZE1vcmVCdXR0b24gPyB0aGlzLnZjci5sZW5ndGggLSAxIDogdGhpcy52Y3IubGVuZ3RoO1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YSxcbiAgICAgICAgbG9hZE1vcmVDb21wb25lbnQ6IHRoaXMubG9hZE1vcmVcbiAgICAgIH07XG4gICAgICB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50cGwsIGNvbnRleHQsIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1vcmVEYXRhKGRhdGEpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50KGRhdGEubGVuZ3RoKTtcbiAgICAgIHRoaXMuYXBwZW5kKGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVCdXR0b25Db21wb25lbnQocmVSZW5kZXIpIHtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQoTG9hZE1vcmVDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIExvYWRNb3JlQ29tcG9uZW50O1xuICAgIGluc3RhbmNlLnBhZ2luZyA9IHRoaXMucGFnaW5nO1xuICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMubG9hZE1vcmVNb2RlID09PSAnYXV0bycgfHwgdGhpcy5sb2FkTW9yZU1vZGUgPT09ICdoaWRkZW4nO1xuICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMubG9hZE1vcmVNb2RlID09PSAnaGlkZGVuJztcbiAgICBpbnN0YW5jZS5tYXhJdGVyYXRpb25zID0gdGhpcy5tYXhJdGVyYXRpb25zO1xuICAgIGluc3RhbmNlLm5vTW9yZURhdGFIaW50ID0gdGhpcy5ub3RGb3VuZFRlbXBsYXRlO1xuICAgIGluc3RhbmNlLmxvYWRpbmdUZW1wbGF0ZSA9IHRoaXMubG9hZGluZ1RlbXBsYXRlO1xuICAgIGluc3RhbmNlLmxvYWROZXh0TGFiZWwgPSB0aGlzLmxvYWROZXh0TGFiZWw7XG4gICAgaW5zdGFuY2UubG9hZGluZ0xhYmVsID0gdGhpcy5sb2FkaW5nTGFiZWw7XG4gICAgdGhpcy5jOHlGb3JMb2FkTW9yZUNvbXBvbmVudC5lbWl0KGluc3RhbmNlKTtcbiAgICB0aGlzLnBhZ2luZ1N1YiA9IGluc3RhbmNlLm9uTG9hZFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogW10pID0+IHRoaXMuY2hlY2tGb3JEdXBsaWNhdGVzKGRhdGEpKSxcbiAgICAgICAgdGFwKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IHRoaXMuY2FjaGVkRGF0YS5jb25jYXQoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShzcmMgPT4gdGhpcy5kYXRhUGlwZShzcmMpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHRoaXMubG9hZE1vcmVEYXRhKGRhdGEpKTtcbiAgICBpZiAocmVSZW5kZXIpIHtcbiAgICAgIGFzc2lnbihpbnN0YW5jZSwgdGhpcy5sb2FkTW9yZSk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlydHVhbFNjcm9sbFdyYXBwZXJDb21wb25lbnQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQ7XG4gICAgaW5zdGFuY2UuaXRlbXMgPSB0aGlzLmNhY2hlZERhdGE7XG4gICAgaW5zdGFuY2UuaXRlbUhlaWdodCA9IHRoaXMuYzh5Rm9yVmlydHVhbFNjcm9sbEVsZW1lbnRTaXplO1xuICAgIGluc3RhbmNlLnRlbXBsYXRlID0gdGhpcy50cGw7XG4gICAgaW5zdGFuY2Uuc3RyYXRlZ3kgPSB0aGlzLmM4eUZvclZpcnR1YWxTY3JvbGxTdHJhdGVneTtcbiAgICBpbnN0YW5jZS5jb250YWluZXJIZWlnaHQgPSB0aGlzLmM4eUZvclZpcnR1YWxTY3JvbGxDb250YWluZXJIZWlnaHQ7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGluc2VydChpdGVtKSB7XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIGlmICh0aGlzLmNvbXBhcmF0b3IgJiYgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCkge1xuICAgICAgbGV0IGNvbXBhcmlzaW9uUmVzdWx0OiBudW1iZXI7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gdGhpcy52Y3IuZ2V0KGluZGV4KSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgICAgY29uc3QgaXRlbUIgPSBnZXQodmlldywgJ2NvbnRleHQuJGltcGxpY2l0Jyk7XG4gICAgICAgIGNvbXBhcmlzaW9uUmVzdWx0ID0gaXRlbSAmJiBpdGVtQiA/IHRoaXMuY29tcGFyYXRvcihpdGVtLCBpdGVtQikgOiAwO1xuICAgICAgICBpZiAoY29tcGFyaXNpb25SZXN1bHQgPD0gMCkge1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKGNvbXBhcmlzaW9uUmVzdWx0IDw9IDAgJiYgaW5kZXggPCB0aGlzLmNhY2hlZERhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgYXBwZW5kIGVsZW1lbnRzIGFmdGVyIHRoZSBsYXN0IG9uZSBjdXJyZW50bHkgbG9hZGVkLFxuICAgIC8vIGFzIGl0IG1heSBiZWxvbmcgZnVydGhlciBkb3duIHRoZXJlIG9uIHRoZSBsaXN0IGFuZCB3aWxsXG4gICAgLy8gYmUgZXZlbnR1YWxseSBsb2FkZWQgd2l0aCBvbmUgb2YgdGhlIG5leHQgcGFnZXMuXG4gICAgaWYgKGluZGV4IDwgdGhpcy5jYWNoZWREYXRhLmxlbmd0aCB8fCB0aGlzLmNhY2hlZERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVEYXRhXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhY2hlZERhdGEuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgIGNvbnN0IHZpZXdSZWY6IFZpZXdSZWYgPSB0aGlzLnRwbC5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dCk7XG4gICAgICB0aGlzLnZjci5pbnNlcnQodmlld1JlZiwgaW5kZXgpO1xuICAgICAgdGhpcy51cGRhdGVDb3VudCgxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZSh1cGRhdGVkSXRlbSkge1xuICAgIHRoaXMuZm9yTWF0Y2hpbmdFbWJlZGRlZFZpZXdSZWYoXG4gICAgICAoaXRlbTogSUlkZW50aWZpZWQpID0+IGl0ZW0gJiYgdXBkYXRlZEl0ZW0gJiYgaXRlbS5pZCA9PT0gdXBkYXRlZEl0ZW0uaWQsXG4gICAgICAodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4pID0+IHtcbiAgICAgICAgdmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICB2aWV3Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZShpZFRvUmVtb3ZlKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5ZWQoaWRUb1JlbW92ZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlQ291bnQoLTEpO1xuICAgIH1cbiAgICB0aGlzLmZvck1hdGNoaW5nRW1iZWRkZWRWaWV3UmVmKFxuICAgICAgKGl0ZW06IElJZGVudGlmaWVkKSA9PiBpdGVtICYmIGNvZXJjZU51bWJlclByb3BlcnR5KGl0ZW0uaWQsIE5hTikgPT09IGlkVG9SZW1vdmUsXG4gICAgICAodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4pID0+IHZpZXcuZGVzdHJveSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ291bnQoY291bnRDaGFuZ2U6IG51bWJlcikge1xuICAgIHRoaXMuY291bnQgKz0gY291bnRDaGFuZ2U7XG4gICAgdGhpcy5jOHlGb3JDb3VudC5lbWl0KHRoaXMuY291bnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc3BsYXllZChpZFRvQ2hlY2spIHtcbiAgICBsZXQgZGlzcGxheWVkID0gZmFsc2U7XG4gICAgdGhpcy5mb3JNYXRjaGluZ0VtYmVkZGVkVmlld1JlZihcbiAgICAgIChpdGVtOiBJSWRlbnRpZmllZCkgPT4gaXRlbSAmJiBjb2VyY2VOdW1iZXJQcm9wZXJ0eShpdGVtLmlkLCBOYU4pID09PSBpZFRvQ2hlY2ssXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGRpc3BsYXllZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gZGlzcGxheWVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JNYXRjaGluZ0VtYmVkZGVkVmlld1JlZihcbiAgICBmaWx0ZXJGbjogKGl0ZW06IElJZGVudGlmaWVkKSA9PiBib29sZWFuLFxuICAgIGNhbGxiYWNrRm46ICh2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PikgPT4gdm9pZFxuICApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmNyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB2aWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PiA9IHRoaXMudmNyLmdldChpKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgICAgIGNvbnN0IGl0ZW06IElJZGVudGlmaWVkID0gZ2V0KHZpZXcsICdjb250ZXh0LiRpbXBsaWNpdCcpO1xuICAgICAgaWYgKGZpbHRlckZuKGl0ZW0pKSB7XG4gICAgICAgIGNhbGxiYWNrRm4odmlldyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckR1cGxpY2F0ZXMoZGF0YTogSUlkZW50aWZpZWRbXSk6IElJZGVudGlmaWVkW10ge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lXG4gICAgICA/IGRhdGEuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuY2FjaGVkRGF0YS5zb21lKGNhY2hlZCA9PiBjYWNoZWQuaWQgPT09IGl0ZW0uaWQpKVxuICAgICAgOiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVBhZ2luZygpIHtcbiAgICBpZiAodGhpcy5wYWdpbmdTdWIpIHtcbiAgICAgIHRoaXMucGFnaW5nU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRWaXJ0dWFsU2Nyb2xsQ29udGVudHMoaXRlbXMpIHtcbiAgICBpZiAodGhpcy5jOHlGb3JFbmFibGVWaXJ0dWFsU2Nyb2xsICYmIHRoaXMudmlydHVhbFNjcm9sbEluc3RhbmNlKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5pdGVtcyA9IGl0ZW1zO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuYXBwbHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFZpcnR1YWxTY3JvbGxDb250ZW50KGl0ZW1zKSB7XG4gICAgaWYgKHRoaXMuYzh5Rm9yRW5hYmxlVmlydHVhbFNjcm9sbCAmJiB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuaXRlbXMgPSB0aGlzLnZpcnR1YWxTY3JvbGxJbnN0YW5jZS5pdGVtcy5jb25jYXQoaXRlbXMpO1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSW5zdGFuY2UuYXBwbHkoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { get, isNaN } from 'lodash-es';
3
+ import * as i0 from "@angular/core";
4
+ export class GeoService {
5
+ constructor() {
6
+ this.C8Y_POSITION_FRAGMENT = 'c8y_Position';
7
+ }
8
+ getLatLong(mo) {
9
+ const fragment = get(mo, this.C8Y_POSITION_FRAGMENT);
10
+ if (!fragment) {
11
+ return undefined;
12
+ }
13
+ const lat = Number(fragment.lat);
14
+ const lng = Number(fragment.lng);
15
+ if (!isNaN(lat) &&
16
+ !isNaN(lng) &&
17
+ Math.abs(fragment.lng) <= 180 &&
18
+ Math.abs(fragment.lat) <= 90) {
19
+ return [lat, lng];
20
+ }
21
+ return undefined;
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeoService, providedIn: 'root' }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GeoService, decorators: [{
27
+ type: Injectable,
28
+ args: [{ providedIn: 'root' }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9nZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUd2QyxNQUFNLE9BQU8sVUFBVTtJQUR2QjtRQUVtQiwwQkFBcUIsR0FBRyxjQUFjLENBQUM7S0FtQnpEO0lBakJDLFVBQVUsQ0FBQyxFQUEyQjtRQUNwQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUNFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNYLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUc7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUM1QjtZQUNBLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOytHQW5CVSxVQUFVO21IQUFWLFVBQVUsY0FERyxNQUFNOzs0RkFDbkIsVUFBVTtrQkFEdEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRXZlbnQsIElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZ2V0LCBpc05hTiB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgR2VvU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgQzhZX1BPU0lUSU9OX0ZSQUdNRU5UID0gJ2M4eV9Qb3NpdGlvbic7XG5cbiAgZ2V0TGF0TG9uZyhtbzogSUV2ZW50IHwgSU1hbmFnZWRPYmplY3QpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGdldChtbywgdGhpcy5DOFlfUE9TSVRJT05fRlJBR01FTlQpO1xuICAgIGlmICghZnJhZ21lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxhdCA9IE51bWJlcihmcmFnbWVudC5sYXQpO1xuICAgIGNvbnN0IGxuZyA9IE51bWJlcihmcmFnbWVudC5sbmcpO1xuICAgIGlmIChcbiAgICAgICFpc05hTihsYXQpICYmXG4gICAgICAhaXNOYU4obG5nKSAmJlxuICAgICAgTWF0aC5hYnMoZnJhZ21lbnQubG5nKSA8PSAxODAgJiZcbiAgICAgIE1hdGguYWJzKGZyYWdtZW50LmxhdCkgPD0gOTBcbiAgICApIHtcbiAgICAgIHJldHVybiBbbGF0LCBsbmddO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -11,6 +11,7 @@ export * from './files.service';
11
11
  export * from './forOf.directive';
12
12
  export * from './forOf.model';
13
13
  export * from './generic-file-icon.pipe';
14
+ export * from './geo.service';
14
15
  export * from './get-group-icon.pipe';
15
16
  export * from './global-config.service';
16
17
  export * from './group-fragment.model';
@@ -56,4 +57,4 @@ export * from './virtual-scroll/virtual-scroll-window-strategy';
56
57
  export * from './virtual-scroll/virtual-scroll-window.directive';
57
58
  export * from './virtual-scroll/virtual-scroller-wrapper.component';
58
59
  export * from './zip.service';
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBcHBsaWNhdGlvbk9wdGlvbnMgfSBmcm9tICdAYzh5L2RldmtpdC9vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYnl0ZXMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24uY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RldmljZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24tZGlyZWN0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V4dGVuc2lvbi1ob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtZmlsZS1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtZ3JvdXAtaWNvbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdXAtZnJhZ21lbnQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaHVtYW5pemUtYXBwLW5hbWUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9odW1hbml6ZS1hcHAtbmFtZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vaHVtYW5pemUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ljb24uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaWYtYWxsb3dlZC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkLW1vcmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZC1tb3JlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9tYW5hZ2VkLW9iamVjdC10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbWFwLWZ1bmN0aW9uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXJrZG93bi10by1odG1sLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1vaXplLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21vLW5hbWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL251bWJlci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLXJlc3VsdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9vdXRsZXQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2dyZXNzLWJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXRyeS13aXRoLWRlbGF5Lm9wZXJhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvcnRlbi11c2VyLW5hbWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3VsZC1zaG93LW1vLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zaG93LWlmLWZpbHRlci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2tpcC1saW5rLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLXNlcnZpY2UuYWJzdHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0dXMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmdpZnktb2JqZWN0LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJzZXQtYXJpYS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtdWkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RleHRhcmVhLWF1dG9yZXNpemUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGhyb3R0bGUuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdWktc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItbmFtZS1pbml0aWFscy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2UubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZXMtc3RvcmFnZS1sb2NhbCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy1zdG9yZS1pbnZlbnRvcnknO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy1zdHJhdGVneSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vemlwLnNlcnZpY2UnO1xuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBcHBsaWNhdGlvbk9wdGlvbnMgfSBmcm9tICdAYzh5L2RldmtpdC9vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYnl0ZXMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24uY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RldmljZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24tZGlyZWN0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V4dGVuc2lvbi1ob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtZmlsZS1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1ncm91cC1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nbG9iYWwtY29uZmlnLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC1mcmFnbWVudC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9odW1hbml6ZS1hcHAtbmFtZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2h1bWFuaXplLWFwcC1uYW1lLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odW1hbml6ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9pZi1hbGxvd2VkLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkLW1vcmUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21hbmFnZWQtb2JqZWN0LXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXAtZnVuY3Rpb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtkb3duLXRvLWh0bWwucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9pemUuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbW8tbmFtZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbnVtYmVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tcmVzdWx0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL29wdGlvbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL291dGxldC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JldHJ5LXdpdGgtZGVsYXkub3BlcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zaG9ydGVuLXVzZXItbmFtZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvdWxkLXNob3ctbW8ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3ctaWYtZmlsdGVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9za2lwLWxpbmsuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUtc2VydmljZS5hYnN0cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZ2lmeS1vYmplY3QucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnNldC1hcmlhLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC11aS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dGFyZWEtYXV0b3Jlc2l6ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90aHJvdHRsZS5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1uYW1lLWluaXRpYWxzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy1zdG9yYWdlLWxvY2FsJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLXN0b3JlLWludmVudG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwtd2luZG93LXN0cmF0ZWd5JztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwtd2luZG93LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi96aXAuc2VydmljZSc7XG4iXX0=
@@ -12,6 +12,9 @@ export class LoadMoreComponent {
12
12
  get hasMore() {
13
13
  return (this.paging && (this.paging.totalPages > this.paging.currentPage || !!this.paging.nextPage));
14
14
  }
15
+ get isLastPage() {
16
+ return this.paging && this.paging.totalPages === this.paging.currentPage;
17
+ }
15
18
  constructor(element, cdRef) {
16
19
  this.element = element;
17
20
  this.cdRef = cdRef;
@@ -81,7 +84,7 @@ export class LoadMoreComponent {
81
84
  return this.LOAD_SAME_PAGE_THRESHOLD * this.counter++;
82
85
  }
83
86
  shouldShowNoMoreDataHint() {
84
- return (this.counter !== 0 || this.noMoreDataHint) && !this.hasMore && !this.hidden;
87
+ return (this.counter !== 0 || this.noMoreDataHint) && !this.hasMore;
85
88
  }
86
89
  shouldSwitchMode() {
87
90
  return this.counter < this.maxIterations || this.hidden;
@@ -136,4 +139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
136
139
  type: HostBinding,
137
140
  args: ['class']
138
141
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1tb3JlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9sb2FkLW1vcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7O0FBTWxELE1BQU0sT0FBTyxpQkFBaUI7SUFrQzVCLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQW9CLE9BQW1CLEVBQVUsS0FBd0I7UUFBckQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBekN6RSxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUV2QixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSWYsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBRXpCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBTW5CLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQU0zQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUV6QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUVMLDZCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUV2QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBYWtELENBQUM7SUFFN0Usa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxzQkFBc0IsSUFBSSxNQUFNLEVBQUU7WUFDNUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDM0QsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEUsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBTTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLElBQUksS0FBSyxFQUFFO2dCQUNULEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDdEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksRUFBRTtZQUM5RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3RGLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxRCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjthQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLG1EQUFtRDtZQUNuRCxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUNsQztJQUNILENBQUM7K0dBNUhVLGlCQUFpQjttR0FBakIsaUJBQWlCLG1kQ2hCOUIsdWpEQXlDQTs7NEZEekJhLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxlQUFlO2lJQUt6QixNQUFNO3NCQURMLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sS0FBSztzQkFESixLQUFLO2dCQUdOLGFBQWE7c0JBRFosS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sZUFBZTtzQkFEZCxLQUFLO2dCQUdOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxLQUFLO2dCQUdOLE1BQU07c0JBREwsTUFBTTtnQkFZSCxTQUFTO3NCQURaLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxvYWQtbW9yZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkLW1vcmUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExvYWRNb3JlQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgcGFnaW5nOiBQYWdpbmc8YW55PjtcbiAgQElucHV0KClcbiAgdXNlSW50ZXJzZWN0aW9uID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgaGlkZGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQElucHV0KClcbiAgY2xhc3MgPSAnYzh5LWxpc3RfX2l0ZW0nO1xuICBASW5wdXQoKVxuICBtYXhJdGVyYXRpb25zID0gMTA7XG4gIEBJbnB1dCgpXG4gIG5vTW9yZURhdGFIaW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKVxuICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpXG4gIGhpZGVOb01vcmVEYXRhSGludCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBsb2FkTmV4dExhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdMYWJlbDogc3RyaW5nO1xuICBAT3V0cHV0KClcbiAgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxJSWRlbnRpZmllZD4oKTtcblxuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgY291bnRlciA9IDA7XG4gIGhhc05vTW9yZURhdGEgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2FkVW50aWxJbnRlcnNlY3RlZDtcbiAgcHJpdmF0ZSByZWFkb25seSBMT0FEX1NBTUVfUEFHRV9USFJFU0hPTEQgPSA1MDtcbiAgcHJpdmF0ZSBpbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZGVuIHx8ICghdGhpcy5oYXNNb3JlICYmICF0aGlzLmhhc05vTW9yZURhdGEpID8gJycgOiB0aGlzLmNsYXNzO1xuICB9XG5cbiAgZ2V0IGhhc01vcmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucGFnaW5nICYmICh0aGlzLnBhZ2luZy50b3RhbFBhZ2VzID4gdGhpcy5wYWdpbmcuY3VycmVudFBhZ2UgfHwgISF0aGlzLnBhZ2luZy5uZXh0UGFnZSlcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy51c2VJbnRlcnNlY3Rpb24gJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZXZlbnQgPT4gdGhpcy5idXR0b25JblZpZXcoZXZlbnRbMF0pLCB7XG4gICAgICAgIHJvb3Q6IHRoaXMuY29udGFpbmVyID8gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCA6IG51bGxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5oYXNOb01vcmVEYXRhID0gdGhpcy5zaG91bGRTaG93Tm9Nb3JlRGF0YUhpbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoZXZlbnQ/KSB7XG4gICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNNb3JlKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGFnaW5nLm5leHQoKTtcbiAgICAgICAgdGhpcy5wYWdpbmcgPSByZXN1bHQucGFnaW5nO1xuICAgICAgICB0aGlzLm9uTG9hZC5lbWl0KHJlc3VsdC5kYXRhKTtcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25Mb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuaGFzTm9Nb3JlRGF0YSA9IHRoaXMuc2hvdWxkU2hvd05vTW9yZURhdGFIaW50KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnRlcnNlY3Rpb25Mb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiB0aGlzLmhhc01vcmUgJiYgdGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkTW9yZSgpLCB0aGlzLmdldExvYWRpbmdUaHJlc2hvbGQoKSk7XG4gICAgICB0aGlzLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuc2hvdWxkU3dpdGNoTW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9hZGluZ1RocmVzaG9sZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLkxPQURfU0FNRV9QQUdFX1RIUkVTSE9MRCAqIHRoaXMuY291bnRlcisrO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRTaG93Tm9Nb3JlRGF0YUhpbnQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmNvdW50ZXIgIT09IDAgfHwgdGhpcy5ub01vcmVEYXRhSGludCkgJiYgIXRoaXMuaGFzTW9yZSAmJiAhdGhpcy5oaWRkZW47XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFN3aXRjaE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRlciA8IHRoaXMubWF4SXRlcmF0aW9ucyB8fCB0aGlzLmhpZGRlbjtcbiAgfVxuXG4gIHByaXZhdGUgYnV0dG9uSW5WaWV3KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCk7XG4gICAgICB0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkID0gbnVsbDtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXZvaWRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVuIHRpbWVvdXQgaXMgZmFzdGVyXG4gICAgICAvLyBjbGVhcmVkIHRoZW4gc2V0XG4gICAgICB0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrIHRleHQtY2VudGVyXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIHRpdGxlPVwie3sgJ0xvYWQgbW9yZScgfCB0cmFuc2xhdGUgfX1cIlxuICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgW3N0eWxlLnZpc2liaWxpdHldPVwiaGlkZGVuID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxuICBbc3R5bGUuaGVpZ2h0XT1cImhpZGRlbiA/ICcxcHgnIDogbnVsbFwiXG4gIChjbGljayk9XCJsb2FkTW9yZSgkZXZlbnQpXCJcbiAgKm5nSWY9XCJoYXNNb3JlICYmICEobG9hZGluZ1RlbXBsYXRlICYmIGlzTG9hZGluZylcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgIDxzcGFuICpuZ0lmPVwibG9hZE5leHRMYWJlbDsgZWxzZSBsb2FkUGFnZVwiIFtpbm5lckhUTUxdPVwibG9hZE5leHRMYWJlbCB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRQYWdlPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlIG5nTm9uQmluZGFibGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IHBhZ2VObzogcGFnaW5nLmN1cnJlbnRQYWdlICsgMSB9XCI+XG4gICAgICAgIExvYWQgcGFnZSB7eyBwYWdlTm8gfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ0xhYmVsOyBlbHNlIGxvYWRpbmdcIiBbaW5uZXJIVE1MXT1cImxvYWRpbmdMYWJlbCB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gICAgICA8c3BhbiB0cmFuc2xhdGUgbmdOb25CaW5kYWJsZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgcGFnZU5vOiBwYWdpbmcuY3VycmVudFBhZ2UgKyAxIH1cIj5cbiAgICAgICAgUGFnZSB7eyBwYWdlTm8gfX0gaXMgbG9hZGluZ+KAplxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9idXR0b24+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNOb01vcmVEYXRhICYmICFoaWRlTm9Nb3JlRGF0YUhpbnQgJiYgIWlzTG9hZGluZ1wiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9Nb3JlRGF0YUhpbnQgfHwgZmluaXNoSGludFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZmluaXNoSGludD5cbiAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrIGNlbnRlciBsYXN0LXJlY29yZFwiIHRpdGxlPVwie3sgJ0xhc3QgcmVjb3JkJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgIDxpIFtjOHlJY29uXT1cIidjaXJjbGUnXCI+PC9pPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nVGVtcGxhdGUgJiYgaXNMb2FkaW5nXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1tb3JlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9sb2FkLW1vcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7O0FBTWxELE1BQU0sT0FBTyxpQkFBaUI7SUFrQzVCLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUMzRSxDQUFDO0lBRUQsWUFDVSxPQUFtQixFQUNuQixLQUF3QjtRQUR4QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLFVB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QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzsrR0FuSVUsaUJBQWlCO21HQUFqQixpQkFBaUIsbWRDaEI5Qix1akRBeUNBOzs0RkR6QmEsaUJBQWlCO2tCQUo3QixTQUFTOytCQUNFLGVBQWU7aUlBS3pCLE1BQU07c0JBREwsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUdOLGFBQWE7c0JBRFosS0FBSztnQkFHTixZQUFZO3NCQURYLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxNQUFNO2dCQVlILFNBQVM7c0JBRFosV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbG9hZC1tb3JlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWQtbW9yZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTG9hZE1vcmVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBwYWdpbmc6IFBhZ2luZzxhbnk+O1xuICBASW5wdXQoKVxuICB1c2VJbnRlcnNlY3Rpb24gPSB0cnVlO1xuICBASW5wdXQoKVxuICBoaWRkZW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKVxuICBjbGFzcyA9ICdjOHktbGlzdF9faXRlbSc7XG4gIEBJbnB1dCgpXG4gIG1heEl0ZXJhdGlvbnMgPSAxMDtcbiAgQElucHV0KClcbiAgbm9Nb3JlRGF0YUhpbnQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KClcbiAgaGlkZU5vTW9yZURhdGFIaW50ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGxvYWROZXh0TGFiZWw6IHN0cmluZztcbiAgQElucHV0KClcbiAgbG9hZGluZ0xhYmVsOiBzdHJpbmc7XG4gIEBPdXRwdXQoKVxuICBvbkxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPElJZGVudGlmaWVkPigpO1xuXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBjb3VudGVyID0gMDtcbiAgaGFzTm9Nb3JlRGF0YSA9IGZhbHNlO1xuICBwcml2YXRlIGxvYWRVbnRpbEludGVyc2VjdGVkO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQURfU0FNRV9QQUdFX1RIUkVTSE9MRCA9IDUwO1xuICBwcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5oaWRkZW4gfHwgKCF0aGlzLmhhc01vcmUgJiYgIXRoaXMuaGFzTm9Nb3JlRGF0YSkgPyAnJyA6IHRoaXMuY2xhc3M7XG4gIH1cblxuICBnZXQgaGFzTW9yZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wYWdpbmcgJiYgKHRoaXMucGFnaW5nLnRvdGFsUGFnZXMgPiB0aGlzLnBhZ2luZy5jdXJyZW50UGFnZSB8fCAhIXRoaXMucGFnaW5nLm5leHRQYWdlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaXNMYXN0UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdpbmcgJiYgdGhpcy5wYWdpbmcudG90YWxQYWdlcyA9PT0gdGhpcy5wYWdpbmcuY3VycmVudFBhZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihldmVudCA9PiB0aGlzLmJ1dHRvbkluVmlldyhldmVudFswXSksIHtcbiAgICAgICAgcm9vdDogdGhpcy5jb250YWluZXIgPyB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IDogbnVsbFxuICAgICAgfSk7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmhhc05vTW9yZURhdGEgPSB0aGlzLnNob3VsZFNob3dOb01vcmVEYXRhSGludCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZShldmVudD8pIHtcbiAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc01vcmUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wYWdpbmcubmV4dCgpO1xuICAgICAgICB0aGlzLnBhZ2luZyA9IHJlc3VsdC5wYWdpbmc7XG4gICAgICAgIHRoaXMub25Mb2FkLmVtaXQocmVzdWx0LmRhdGEpO1xuICAgICAgICB0aGlzLmludGVyc2VjdGlvbkxvYWRpbmcoKTtcbiAgICAgICAgdGhpcy5oYXNOb01vcmVEYXRhID0gdGhpcy5zaG91bGRTaG93Tm9Nb3JlRGF0YUhpbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludGVyc2VjdGlvbkxvYWRpbmcoKSB7XG4gICAgaWYgKHRoaXMudXNlSW50ZXJzZWN0aW9uICYmIHRoaXMuaGFzTW9yZSAmJiB0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRNb3JlKCksIHRoaXMuZ2V0TG9hZGluZ1RocmVzaG9sZCgpKTtcbiAgICAgIHRoaXMudXNlSW50ZXJzZWN0aW9uID0gdGhpcy5zaG91bGRTd2l0Y2hNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRVbnRpbEludGVyc2VjdGVkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2FkaW5nVGhyZXNob2xkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuTE9BRF9TQU1FX1BBR0VfVEhSRVNIT0xEICogdGhpcy5jb3VudGVyKys7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dOb01vcmVEYXRhSGludCgpIHtcbiAgICByZXR1cm4gKHRoaXMuY291bnRlciAhPT0gMCB8fCB0aGlzLm5vTW9yZURhdGFIaW50KSAmJiAhdGhpcy5oYXNNb3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRTd2l0Y2hNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmNvdW50ZXIgPCB0aGlzLm1heEl0ZXJhdGlvbnMgfHwgdGhpcy5oaWRkZW47XG4gIH1cblxuICBwcml2YXRlIGJ1dHRvbkluVmlldyhldmVudCkge1xuICAgIGlmIChldmVudC5pc0ludGVyc2VjdGluZykge1xuICAgICAgdGhpcy5sb2FkTW9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZFVudGlsSW50ZXJzZWN0ZWQpO1xuICAgICAgdGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCA9IG51bGw7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF2b2lkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aW1lb3V0IGlzIGZhc3RlclxuICAgICAgLy8gY2xlYXJlZCB0aGVuIHNldFxuICAgICAgdGhpcy5sb2FkVW50aWxJbnRlcnNlY3RlZCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9jayB0ZXh0LWNlbnRlclwiXG4gIHR5cGU9XCJidXR0b25cIlxuICB0aXRsZT1cInt7ICdMb2FkIG1vcmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gIFtzdHlsZS52aXNpYmlsaXR5XT1cImhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgW3N0eWxlLmhlaWdodF09XCJoaWRkZW4gPyAnMXB4JyA6IG51bGxcIlxuICAoY2xpY2spPVwibG9hZE1vcmUoJGV2ZW50KVwiXG4gICpuZ0lmPVwiaGFzTW9yZSAmJiAhKGxvYWRpbmdUZW1wbGF0ZSAmJiBpc0xvYWRpbmcpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICA8c3BhbiAqbmdJZj1cImxvYWROZXh0TGFiZWw7IGVsc2UgbG9hZFBhZ2VcIiBbaW5uZXJIVE1MXT1cImxvYWROZXh0TGFiZWwgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkUGFnZT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZSBuZ05vbkJpbmRhYmxlIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBwYWdlTm86IHBhZ2luZy5jdXJyZW50UGFnZSArIDEgfVwiPlxuICAgICAgICBMb2FkIHBhZ2Uge3sgcGFnZU5vIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdMYWJlbDsgZWxzZSBsb2FkaW5nXCIgW2lubmVySFRNTF09XCJsb2FkaW5nTGFiZWwgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlIG5nTm9uQmluZGFibGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IHBhZ2VObzogcGFnaW5nLmN1cnJlbnRQYWdlICsgMSB9XCI+XG4gICAgICAgIFBhZ2Uge3sgcGFnZU5vIH19IGlzIGxvYWRpbmfigKZcbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYnV0dG9uPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTm9Nb3JlRGF0YSAmJiAhaGlkZU5vTW9yZURhdGFIaW50ICYmICFpc0xvYWRpbmdcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vTW9yZURhdGFIaW50IHx8IGZpbmlzaEhpbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2ZpbmlzaEhpbnQ+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9jayBjZW50ZXIgbGFzdC1yZWNvcmRcIiB0aXRsZT1cInt7ICdMYXN0IHJlY29yZCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICA8aSBbYzh5SWNvbl09XCInY2lyY2xlJ1wiPjwvaT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1RlbXBsYXRlICYmIGlzTG9hZGluZ1wiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==