@wavemaker/app-ng-runtime 11.14.3-rc.6401 → 11.15.0-2.247

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +22 -5
  71. package/components/data/table/esm2022/table.component.mjs +23 -6
  72. package/components/data/table/fesm2022/index.mjs +22 -5
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +28 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +10 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +28 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +5 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -259,9 +259,6 @@ export class BaseSpaPageComponent extends FragmentMonitor {
259
259
  // MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
260
260
  if (this.pageName) {
261
261
  $unwatchAllByScope('Page', this.pageName);
262
- // if (removedCount > 0) {
263
- // console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
264
- // }
265
262
  }
266
263
  this.savePageSnapShot();
267
264
  // MEMORY LEAK FIX: Complete Subjects to release subscriptions
@@ -363,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
363
360
  type: HostListener,
364
361
  args: ['window:beforeunload']
365
362
  }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zcGEtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYmFzZS1zcGEtcGFnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQXVCLFNBQVMsRUFBRSxTQUFTLEVBQW9CLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsR0FBRyxFQUNILFlBQVksRUFDWixJQUFJLEVBQ0osY0FBYyxFQUNkLFlBQVksRUFDZixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFLdkMsTUFBTSxPQUFnQixvQkFB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QUFZLEVBQUUsRUFBQyxNQUFNLEVBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1IsSUFBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLG9CQUFvQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQzsrR0F6WmlCLG9CQUFvQjttR0FBcEIsb0JBQW9CLCtJQW9CM0IsZ0JBQWdCOzs0RkFwQlQsb0JBQW9CO2tCQUR6QyxTQUFTOzhCQXFCdUIsZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkE4TzNCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRGlyZWN0aXZlLCBBZnRlckNvbnRlbnRJbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBpc0FuZHJvaWQsIGlzSW9zLCBWaWV3cG9ydCwgU2NyaXB0TG9hZGVyU2VydmljZSwgcmVnaXN0ZXJGbkJ5RXhwciB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IExheW91dERpcmVjdGl2ZSwgU3BhUGFnZURpcmVjdGl2ZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL3BhZ2UnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICR1bndhdGNoQWxsQnlTY29wZSxcbiAgICBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgIEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UsXG4gICAgQXBwLFxuICAgIG11dGVXYXRjaGVycyxcbiAgICBub29wLFxuICAgIHVuTXV0ZVdhdGNoZXJzLFxuICAgIFV0aWxzU2VydmljZVxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBjb21tb25QYXJ0aWFsV2lkZ2V0cyB9IGZyb20gJy4vYmFzZS1wYXJ0aWFsLmNvbXBvbmVudCc7XG5cblxuaW1wb3J0IHsgVmFyaWFibGVzU2VydmljZSB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQXBwTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZyYWdtZW50TW9uaXRvciB9IGZyb20gJy4uL3V0aWwvZnJhZ21lbnQtbW9uaXRvcic7XG5pbXBvcnQgeyBDQUNIRV9QQUdFIH0gZnJvbSAnLi4vdXRpbC93bS1yb3V0ZS1yZXVzZS1zdHJhdGVneSc7XG5pbXBvcnQge2VhY2gsIGV4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTcGFQYWdlQ29tcG9uZW50IGV4dGVuZHMgRnJhZ21lbnRNb25pdG9yIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBzdGF0aWMgbGFzdFBhZ2VTbmFwU2hvdCA9IG51bGw7XG4gICAgV2lkZ2V0czogYW55O1xuICAgIFZhcmlhYmxlczogYW55O1xuICAgIEFjdGlvbnM6IGFueTtcbiAgICBBcHA6IEFwcDtcbiAgICBpbmplY3RvcjogSW5qZWN0b3I7XG4gICAgcGFnZU5hbWU6IHN0cmluZztcbiAgICBhY3RpdmVQYWdlTmFtZTogc3RyaW5nO1xuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZTtcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogQWJzdHJhY3ROYXZpZ2F0aW9uU2VydmljZTtcbiAgICByb3V0ZXI6IFJvdXRlcjtcbiAgICBwYWdlUGFyYW1zOiBhbnk7XG4gICAgc2hvd1BhZ2VDb250ZW50OiBib29sZWFuO1xuICAgIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlO1xuICAgIGFwcExvY2FsZTogYW55O1xuICAgIHN0YXJ0dXBWYXJpYWJsZXNMb2FkZWQgPSBmYWxzZTtcbiAgICBwYWdlVHJhbnNpdGlvbkNvbXBsZXRlZCA9IGZhbHNlO1xuICAgIGxheW91dERpcmVjdGl2ZTogTGF5b3V0RGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoU3BhUGFnZURpcmVjdGl2ZSkgc3BhUGFnZURpcmVjdGl2ZTtcbiAgICAkcGFnZTtcbiAgICBzY3JpcHRMb2FkZXJTZXJ2aWNlOiBTY3JpcHRMb2FkZXJTZXJ2aWNlO1xuICAgIFZpZXdwb3J0OiBWaWV3cG9ydDtcblxuICAgIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgICB2aWV3SW5pdCQgPSBuZXcgU3ViamVjdCgpO1xuICAgIGZvcm1hdHNCeUxvY2FsZSA9IHsndGltZXpvbmUnOiAnJ307XG5cbiAgICBhYnN0cmFjdCBldmFsVXNlclNjcmlwdChwcmVmYWJDb250ZXh0OiBhbnksIGFwcENvbnRleHQ6IGFueSwgdXRpbHM6IGFueSk7XG4gICAgYWJzdHJhY3QgZ2V0VmFyaWFibGVzKCk7XG4gICAgYWJzdHJhY3QgZ2V0RXhwcmVzc2lvbnMoKTtcblxuICAgIGluaXQoKSB7XG5cbiAgICAgICAgbXV0ZVdhdGNoZXJzKCk7XG5cbiAgICAgICAgdGhpcy5BcHAgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoQXBwKSA6IGluamVjdChBcHApO1xuICAgICAgICB0aGlzLnJvdXRlID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKSA6IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlciA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChBcHBNYW5hZ2VyU2VydmljZSkgOiBpbmplY3QoQXBwTWFuYWdlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UpIDogaW5qZWN0KEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UpO1xuICAgICAgICB0aGlzLnNjcmlwdExvYWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoU2NyaXB0TG9hZGVyU2VydmljZSkgOiBpbmplY3QoU2NyaXB0TG9hZGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoQWJzdHJhY3RJMThuU2VydmljZSkgOiBpbmplY3QoQWJzdHJhY3RJMThuU2VydmljZSk7XG4gICAgICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcikgOiBpbmplY3QoUm91dGVyKTtcbiAgICAgICAgdGhpcy5WaWV3cG9ydCA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChWaWV3cG9ydCkgOiBpbmplY3QoVmlld3BvcnQpO1xuICAgICAgICB0aGlzLmxheW91dERpcmVjdGl2ZSA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChMYXlvdXREaXJlY3RpdmUpIDogaW5qZWN0KExheW91dERpcmVjdGl2ZSk7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgZnVuY3Rpb25zIGZvciBiaW5kaW5nIGV2YWx1YXRpb25cbiAgICAgICAgdGhpcy5yZWdpc3RlckV4cHJlc3Npb25zKCk7XG4gICAgICAgIHRoaXMuaW5pdFVzZXJTY3JpcHQoKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyV2lkZ2V0cygpO1xuICAgICAgICB0aGlzLmluaXRWYXJpYWJsZXMoKTtcblxuICAgICAgICB0aGlzLkFwcC5sYXN0QWN0aXZlUGFnZU5hbWUgPSB0aGlzLkFwcC5hY3RpdmVQYWdlTmFtZTtcbiAgICAgICAgdGhpcy5BcHAuYWN0aXZlUGFnZU5hbWUgPSB0aGlzLnBhZ2VOYW1lO1xuICAgICAgICB0aGlzLkFwcC5hY3RpdmVQYWdlID0gdGhpcztcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlTmFtZSA9IHRoaXMucGFnZU5hbWU7IC8vIFRvZG86IHJlbW92ZSB0aGlzXG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclBhZ2VQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5kZWZpbmVJMThuUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyV2lkZ2V0cygpIHtcbiAgICAgICAgLy8gY29tbW9uIHBhcnRpYWwgd2lkZ2V0cyBzaG91bGQgYmUgYWNjZXNzaWJsZSBmcm9tIHBhZ2VcbiAgICAgICAgdGhpcy5XaWRnZXRzID0gT2JqZWN0LmNyZWF0ZShjb21tb25QYXJ0aWFsV2lkZ2V0cyk7XG5cbiAgICAgICAgLy8gZXhwb3NlIGN1cnJlbnQgcGFnZSB3aWRnZXRzIG9uIGFwcFxuICAgICAgICAodGhpcy5BcHAgYXMgYW55KS5XaWRnZXRzID0gT2JqZWN0LmNyZWF0ZSh0aGlzLldpZGdldHMpO1xuICAgIH1cblxuICAgIGluaXRVc2VyU2NyaXB0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ldmFsVXNlclNjcmlwdCh0aGlzLCB0aGlzLkFwcCwgdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KFV0aWxzU2VydmljZSkgOiBpbmplY3QoVXRpbHNTZXJ2aWNlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIGV2YWx1YXRpbmcgcGFnZSAoJHt0aGlzLnBhZ2VOYW1lfSkgc2NyaXB0XFxuYCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlclBhZ2VQYXJhbXMoKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB0aGlzLnBhZ2VQYXJhbXMgPSAodGhpcy5BcHAgYXMgYW55KS5wYWdlUGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKG5vb3AsIG5vb3AsICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIGRlZmluZUkxOG5Qcm9wcygpIHtcbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldEFwcExvY2FsZSgpO1xuICAgIH1cblxuICAgIGluaXRWYXJpYWJsZXMoKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoVmFyaWFibGVzU2VydmljZSkgOiBpbmplY3QoVmFyaWFibGVzU2VydmljZSk7XG5cbiAgICAgICAgLy8gZ2V0IHZhcmlhYmxlcyBhbmQgYWN0aW9ucyBpbnN0YW5jZXMgZm9yIHRoZSBwYWdlXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlQ29sbGVjdGlvbiA9IHZhcmlhYmxlc1NlcnZpY2UucmVnaXN0ZXIodGhpcy5wYWdlTmFtZSwgdGhpcy5nZXRWYXJpYWJsZXMoKSwgdGhpcyk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5hbWVzcGFjZSBmb3IgVmFyaWFibGVzIG5hZCBBY3Rpb25zIG9uIHBhZ2UvcGFydGlhbCwgd2hpY2ggaW5oZXJpdHMgdGhlIFZhcmlhYmxlcyBhbmQgQWN0aW9ucyBmcm9tIEFwcCBpbnN0YW5jZVxuICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IE9iamVjdC5jcmVhdGUodGhpcy5BcHAuVmFyaWFibGVzKTtcbiAgICAgICAgdGhpcy5BY3Rpb25zID0gT2JqZWN0LmNyZWF0ZSh0aGlzLkFwcC5BY3Rpb25zKTtcblxuICAgICAgICAvLyBhc3NpZ24gYWxsIHRoZSBwYWdlIHZhcmlhYmxlcyB0byB0aGUgcGFnZUluc3RhbmNlXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlQ29sbGVjdGlvbi5WYXJpYWJsZXMpLmZvckVhY2goKFtuYW1lLCB2YXJpYWJsZV0pID0+IHRoaXMuVmFyaWFibGVzW25hbWVdID0gdmFyaWFibGUpO1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YXJpYWJsZUNvbGxlY3Rpb24uQWN0aW9ucykuZm9yRWFjaCgoW25hbWUsIGFjdGlvbl0pID0+IHRoaXMuQWN0aW9uc1tuYW1lXSA9IGFjdGlvbik7XG5cblxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0luaXQkLnN1YnNjcmliZShub29wLCBub29wLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5hcHBNYW5hZ2VyLmlzQXBwVmFyaWFibGVzRmlyZWQoKSkge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlQ29sbGVjdGlvbi5jYWxsYmFjayh0aGlzLkFwcC5WYXJpYWJsZXMpLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdhcHAtdmFyaWFibGVzLWRhdGEtbG9hZGVkJywge3BhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVDb2xsZWN0aW9uLmNhbGxiYWNrKHRoaXMuQXBwLkFjdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5hcHBWYXJpYWJsZXNSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5pc0FwcFZhcmlhYmxlc0ZpcmVkKHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXJpYWJsZUNvbGxlY3Rpb24uY2FsbGJhY2sodmFyaWFibGVDb2xsZWN0aW9uLlZhcmlhYmxlcylcbiAgICAgICAgICAgICAgICAuY2F0Y2gobm9vcClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ3BhZ2UtdmFyaWFibGVzLWRhdGEtbG9hZGVkJywge3BhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnR1cFZhcmlhYmxlc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhpZGUgdGhlIGxvYWRlciBvbmx5IGFmdGVyIHRoZSBzb21lIHNldFRpbWVvdXQgZm9yIHNtb290aCBwYWdlIGxvYWQuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyaWFibGVDb2xsZWN0aW9uLmNhbGxiYWNrKHZhcmlhYmxlQ29sbGVjdGlvbi5BY3Rpb25zKTtcblxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYmluZCBleHByZXNzaW9ucyBnZW5lcmF0ZWQgaW4gdGhpcyBwYWdlIGluc3RhbmNlXG4gICAgICogZ2V0RXhwcmVzc2lvbnMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiB0aGUgZ2VuZXJhdGVkIHBhZ2UuY29tcC50cyBmaWxlXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb25zLCBtYXAgb2YgYmluZCBleHByZXNzaW9uIHZzIGdlbmVyYXRlZCBmdW5jdGlvblxuICAgICAqL1xuICAgIHJlZ2lzdGVyRXhwcmVzc2lvbnMoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5nZXRFeHByZXNzaW9ucygpO1xuICAgICAgICBlYWNoKGV4cHJlc3Npb25zLCAoZm4sIGV4cHIpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdGVyRm5CeUV4cHIoZXhwciwgZm5bMF0sIGZuWzFdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcnVuUGFnZVRyYW5zaXRpb24odHJhbnNpdGlvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbiB8fCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFBhZ2VUcmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gQmFzZVNwYVBhZ2VDb21wb25lbnQubGFzdFBhZ2VTbmFwU2hvdFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvblxuICAgICAgICAgICAgICAgICYmICF0cmFuc2l0aW9uLnN0YXJ0c1dpdGgoJ25vbmUnKVxuICAgICAgICAgICAgICAgICYmIGxhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9IGxhc3RQYWdlLnBhcmVudCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlICYmICEoZSAmJiBlLnBzZXVkb0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0Lm9mZignYW5pbWF0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQucmVtb3ZlQ2xhc3ModHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0LmNoaWxkcmVuKCkuZmlyc3QoKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uID0gJ3BhZ2UtdHJhbnNpdGlvbiBwYWdlLXRyYW5zaXRpb24tJyArIHRyYW5zaXRpb247XG4gICAgICAgICAgICAgICAgbGFzdFBhZ2UuYWRkQ2xhc3MoJ3BhZ2UtZXhpdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHBhZ2UuYWRkQ2xhc3MoJ3BhZ2UtZW50cnknKTtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0LmFkZENsYXNzKHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICAgICR0YXJnZXQub24oJ2FuaW1hdGlvbmVuZCcsIG9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgYSBtYXhpbXVtIG9mIDEgc2Vjb25kIGZvciB0cmFuc2l0aW9uIHRvIGVuZC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRwYWdlICYmIHRoaXMuJHBhZ2UucmVtb3ZlQ2xhc3MoJ3BhZ2UtZW50cnknKTtcbiAgICAgICAgICAgIGlmIChsYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgIGxhc3RQYWdlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlVHJhbnNpdGlvbkNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGludm9rZU9uUmVhZHkoKSB7XG4gICAgICAgIHRoaXMub25SZWFkeSgpO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdoaWdobGlnaHRBY3RpdmVMaW5rJywgeydwYWdlTmFtZScgOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ3BhZ2VSZWFkeScsIHsnbmFtZScgOiB0aGlzLnBhZ2VOYW1lLCBpbnN0YW5jZTogdGhpc30pO1xuICAgICAgICAodGhpcy5BcHAub25QYWdlUmVhZHkgfHwgbm9vcCkodGhpcy5wYWdlTmFtZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkU2NyaXB0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRzUmVxdWlyZWQgPSB0aGlzLnNwYVBhZ2VEaXJlY3RpdmUgJiYgdGhpcy5zcGFQYWdlRGlyZWN0aXZlLiRlbGVtZW50LmF0dHIoJ3NjcmlwdHMtdG8tbG9hZCcpO1xuXG4gICAgICAgICAgICBpZiAoc2NyaXB0c1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHRMb2FkZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKC4uLnNjcmlwdHNSZXF1aXJlZC5zcGxpdCgnLCcpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVMYXN0UGFnZVNuYXBzaG90KCkge31cblxuICAgIHByaXZhdGUgc2F2ZVBhZ2VTbmFwU2hvdCgpIHtcbiAgICAgICAgaWYgKEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QpIHtcbiAgICAgICAgICAgIEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgZm4gPSAoJGVsLCBrZXksIHJlY3Vyc2l2ZSA9IHRydWUsICR0YXJnZXQgPSAkZWwpICA9PiB7XG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgJGVsLmNoaWxkcmVuKCkuZWFjaCgoaSwgdikgPT4gZm4oJCh2KSwga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxEYXRhID0ge1xuICAgICAgICAgICAgICAgIHg6ICR0YXJnZXQuc2Nyb2xsTGVmdCgpLFxuICAgICAgICAgICAgICAgIHk6ICR0YXJnZXQuc2Nyb2xsVG9wKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZihzY3JvbGxEYXRhLnggPiAwIHx8IHNjcm9sbERhdGEueSA+IDApIHtcbiAgICAgICAgICAgICAgICAkZWwuYXR0cihrZXksIHNjcm9sbERhdGEueCArICcsJyArIHNjcm9sbERhdGEueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZuKHRoaXMuJHBhZ2UsICdkYXRhLXNjcm9sbC1wb3NpdGlvbicpO1xuICAgICAgICB0aGlzLiRwYWdlLmF0dHIoJ2RhdGEtd2luZG93LXNjcm9sbC1wb3NpdGlvbicsIHdpbmRvdy5zY3JvbGxYICsgJywnICsgd2luZG93LnNjcm9sbFkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBmbiA9ICgkZWwsIGtleSwgcmVjdXJzaXZlICA9IHRydWUsICR0YXJnZXQgPSAkZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbERhdGEgPSAoJGVsLmF0dHIoa2V5KSB8fCAnJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGlmKHNjcm9sbERhdGEubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICR0YXJnZXQuc2Nyb2xsTGVmdChzY3JvbGxEYXRhWzBdKTtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0LnNjcm9sbFRvcChzY3JvbGxEYXRhWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyKGtleSk7XG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgJGVsLmNoaWxkcmVuKCkuZWFjaCgoaSwgdikgPT4gZm4oJCh2KSwga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZuKHRoaXMuJHBhZ2UsICdkYXRhLXNjcm9sbC1wb3NpdGlvbicpO1xuICAgICAgICBmbih0aGlzLiRwYWdlLCAnZGF0YS13aW5kb3ctc2Nyb2xsLXBvc2l0aW9uJywgZmFsc2UsICQod2luZG93KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FuRGVhY3RpdmF0ZSBpcyBjYWxsZWQgYmVmb3JlIGEgcm91dGUgY2hhbmdlLlxuICAgICAqIFRoaXMgd2lsbCBpbnRlcm5hbGx5IGNhbGwgb25CZWZvcmVQYWdlTGVhdmUgbWV0aG9kIHByZXNlbnRcbiAgICAgKiBhdCBwYWdlIGxldmVsIGFuZCBhcHAgbGV2ZWwgaW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBkZWNpZGVcbiAgICAgKiB3aGV0aGVyIHRvIGNoYW5nZSByb3V0ZSBvciBub3QgYmFzZWQgb24gcmV0dXJuIHZhbHVlLlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIGNhbkRlYWN0aXZhdGUobmV4dFN0YXRlPzogc3RyaW5nKXtcbiAgICAgICAgbGV0IHJldFZhbDtcbiAgICAgICAgLy8gQ2FsbGluZyBvbkJlZm9yZVBhZ2VMZWF2ZSBtZXRob2QgcHJlc2VudCBhdCBwYWdlIGxldmVsXG4gICAgICAgIHJldFZhbCA9IHRoaXMub25CZWZvcmVQYWdlTGVhdmUoKTtcbiAgICAgICAgLy8gQ2FsbGluZyBvbkJlZm9yZVBhZ2VMZWF2ZSBtZXRob2QgcHJlc2VudCBhdCBhcHAgbGV2ZWwgb25seSBpZiBwYWdlIGxldmVsIG1ldGhvZCByZXR1cm4gdHJ1ZVxuICAgICAgICAvLyBvciBpZiB0aGVyZSBpcyBubyBwYWdlIGxldmVsIG1ldGhvZFxuICAgICAgICBpZiAocmV0VmFsICE9PSBmYWxzZSApIHtcbiAgICAgICAgICAgIHJldFZhbCA9ICAodGhpcy5BcHAub25CZWZvcmVQYWdlTGVhdmUgfHwgbm9vcCkodGhpcy5BcHAuYWN0aXZlUGFnZU5hbWUsIHRoaXMuQXBwLmFjdGl2ZVBhZ2UsIG5leHRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHJldFZhbDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGUuc25hcHNob3QuZGF0YVtDQUNIRV9QQUdFXSA9IHRoaXMuY2FuUmV1c2UoKTtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLiRwYWdlID0gdGhpcy5sYXlvdXREaXJlY3RpdmUuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHBhZ2UuYWRkQ2xhc3MoJ2lvcy1wYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBbmRyb2lkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRwYWdlLmFkZENsYXNzKCdhbmRyb2lkLXBhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3RvcmVMYXN0UGFnZVNuYXBzaG90KCk7XG4gICAgICAgIHRoaXMubG9hZFNjcmlwdHMoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucnVuUGFnZVRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5jb21waWxlUGFnZUNvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25QYWdlQ29udGVudFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzTG9hZGVkJC5zdWJzY3JpYmUobm9vcCwgbm9vcCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uUmVhZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bk11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luaXQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VDb250ZW50UmVhZHkgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVud2F0Y2ggYWxsIFBhZ2Utc2NvcGVkIHdhdGNoZXJzIGZvciBUSElTIHNwZWNpZmljIHBhZ2Ugd2hlbiBwYWdlIGlzIGRlc3Ryb3llZFxuICAgICAgICBpZiAodGhpcy5wYWdlTmFtZSkge1xuICAgICAgICAgICAgJHVud2F0Y2hBbGxCeVNjb3BlKCdQYWdlJywgdGhpcy5wYWdlTmFtZSk7XG4gICAgICAgICAgICAvLyBpZiAocmVtb3ZlZENvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGDwn6e5IENsZWFuZWQgdXAgJHtyZW1vdmVkQ291bnR9IFBhZ2Utc2NvcGVkIHdhdGNoZXIocykgZm9yIHBhZ2UgJHt0aGlzLnBhZ2VOYW1lfWApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2F2ZVBhZ2VTbmFwU2hvdCgpO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ29tcGxldGUgU3ViamVjdHMgdG8gcmVsZWFzZSBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3kkKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aWV3SW5pdCQpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0luaXQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXdJbml0JCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIHJlZmVyZW5jZXMgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgICAgdGhpcy5XaWRnZXRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5WYXJpYWJsZXMgPSBudWxsO1xuICAgICAgICB0aGlzLkFjdGlvbnMgPSBudWxsO1xuICAgICAgICB0aGlzLkFwcCA9IG51bGw7XG4gICAgICAgIHRoaXMucm91dGUgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXIgPSBudWxsO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yb3V0ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnBhZ2VQYXJhbXMgPSBudWxsO1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBudWxsO1xuICAgICAgICB0aGlzLmxheW91dERpcmVjdGl2ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3BhUGFnZURpcmVjdGl2ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuJHBhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnNjcmlwdExvYWRlclNlcnZpY2UgPSBudWxsO1xuICAgICAgICB0aGlzLlZpZXdwb3J0ID0gbnVsbDtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFudXAgRnJhZ21lbnRNb25pdG9yIHJlc291cmNlc1xuICAgICAgICB0aGlzLmNsZWFudXBGcmFnbWVudE1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBvblJlYWR5KCkge31cblxuICAgIG9uQmVmb3JlUGFnZVJlYWR5KCkge31cblxuICAgIG9uQmVmb3JlUGFnZUxlYXZlKCkge31cblxuICAgIG9uUGFnZUNvbnRlbnRSZWFkeSgpIHt9XG5cbiAgICBjYW5SZXVzZSgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc3BhUGFnZURpcmVjdGl2ZSAmJiB0aGlzLnNwYVBhZ2VEaXJlY3RpdmUuY2FjaGUpO1xuICAgIH1cblxuICAgIG11dGUoKSB7XG4gICAgICAgIGNvbnN0IG0gPSBvID0+IHsgbyAmJiBvLm11dGUgJiYgby5tdXRlKCk7IH07XG4gICAgICAgIGVhY2godGhpcy5XaWRnZXRzLCBtKTtcbiAgICAgICAgZWFjaCh0aGlzLlZhcmlhYmxlcywgbSk7XG4gICAgICAgIGVhY2godGhpcy5BY3Rpb25zLCBtKTtcbiAgICB9XG5cbiAgICB1bm11dGUoYyA9IHRoaXMpIHtcbiAgICAgICAgY29uc3QgdW0gPSBvID0+IHsgbyAmJiBvLnVubXV0ZSAmJiBvLnVubXV0ZSgpOyB9O1xuICAgICAgICBlYWNoKHRoaXMuV2lkZ2V0cywgdW0pO1xuICAgICAgICBlYWNoKHRoaXMuVmFyaWFibGVzLCB1bSk7XG4gICAgICAgIGVhY2godGhpcy5BY3Rpb25zLCB1bSk7XG4gICAgfVxuXG4gICAgbmdPbkF0dGFjaCgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhW0NBQ0hFX1BBR0VdID0gdGhpcy5jYW5SZXVzZSgpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyUGFnZVBhcmFtcygpO1xuICAgICAgICB0aGlzLkFwcC5sYXN0QWN0aXZlUGFnZU5hbWUgPSB0aGlzLkFwcC5hY3RpdmVQYWdlTmFtZTtcbiAgICAgICAgdGhpcy5BcHAuYWN0aXZlUGFnZU5hbWUgPSB0aGlzLnBhZ2VOYW1lO1xuICAgICAgICB0aGlzLkFwcC5hY3RpdmVQYWdlID0gdGhpcztcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlTmFtZSA9IHRoaXMucGFnZU5hbWU7XG4gICAgICAgIHRoaXMucmVzdG9yZUxhc3RQYWdlU25hcHNob3QoKTtcbiAgICAgICAgdGhpcy51bm11dGUoKTtcbiAgICAgICAgLy8gZXhwb3NlIGN1cnJlbnQgcGFnZSB3aWRnZXRzIG9uIGFwcFxuICAgICAgICAodGhpcy5BcHAgYXMgYW55KS5XaWRnZXRzID0gT2JqZWN0LmNyZWF0ZSh0aGlzLldpZGdldHMpO1xuICAgICAgICBpZih0aGlzLnNwYVBhZ2VEaXJlY3RpdmUgJiYgdGhpcy5zcGFQYWdlRGlyZWN0aXZlLnJlZnJlc2hkYXRhb25hdHRhY2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZnJlc2ggPSB2ID0+IHsgdiAmJiB2LnN0YXJ0VXBkYXRlICYmIHYuaW52b2tlICYmIHYuaW52b2tlKCk7IH07XG4gICAgICAgICAgICBlYWNoKHRoaXMuVmFyaWFibGVzLCByZWZyZXNoKTtcbiAgICAgICAgICAgIGVhY2godGhpcy5BY3Rpb25zLCByZWZyZXNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJ1blBhZ2VUcmFuc2l0aW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzdG9yZVNjcm9sbFBvc2l0aW9uKCksIDEwMCk7XG4gICAgICAgICAgICBlYWNoKHRoaXMuV2lkZ2V0cywgdyA9PiB3ICYmIHcubmdPbkF0dGFjaCAmJiB3Lm5nT25BdHRhY2goKSk7XG4gICAgICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdwYWdlQXR0YWNoJywgeyduYW1lJyA6IHRoaXMucGFnZU5hbWUsIGluc3RhbmNlOiB0aGlzfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdoaWdobGlnaHRBY3RpdmVMaW5rJywgeydwYWdlTmFtZSc6IHRoaXMucGFnZU5hbWV9KTtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLnNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVQYWdlU25hcFNob3QoKTtcbiAgICAgICAgdGhpcy5tdXRlKCk7XG4gICAgICAgIGVhY2godGhpcy5XaWRnZXRzLCB3ID0+IHcgJiYgdy5uZ09uRGV0YWNoICYmIHcubmdPbkRldGFjaCgpKTtcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLm5vdGlmeSgncGFnZURldGFjaCcsIHsnbmFtZScgOiB0aGlzLnBhZ2VOYW1lLCBpbnN0YW5jZTogdGhpc30pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZVBhZ2VSZWFkeSgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjbGVhcigpIHtcbiAgICAgICAgaWYoQmFzZVNwYVBhZ2VDb21wb25lbnQubGFzdFBhZ2VTbmFwU2hvdCkge1xuICAgICAgICAgICAgQmFzZVNwYVBhZ2VDb21wb25lbnQubGFzdFBhZ2VTbmFwU2hvdC5yZW1vdmUoKTtcbiAgICAgICAgICAgIEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zcGEtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYmFzZS1zcGEtcGFnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQXVCLFNBQVMsRUFBRSxTQUFTLEVBQW9CLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsR0FBRyxFQUNILFlBQVksRUFDWixJQUFJLEVBQ0osY0FBYyxFQUNkLFlBQVksRUFDZixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFLdkMsTUFBTSxPQUFnQixvQkFB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QVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1IsSUFBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLG9CQUFvQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQzsrR0F0WmlCLG9CQUFvQjttR0FBcEIsb0JBQW9CLCtJQW9CM0IsZ0JBQWdCOzs0RkFwQlQsb0JBQW9CO2tCQUR6QyxTQUFTOzhCQXFCdUIsZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkE4TzNCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRGlyZWN0aXZlLCBBZnRlckNvbnRlbnRJbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBpc0FuZHJvaWQsIGlzSW9zLCBWaWV3cG9ydCwgU2NyaXB0TG9hZGVyU2VydmljZSwgcmVnaXN0ZXJGbkJ5RXhwciB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IExheW91dERpcmVjdGl2ZSwgU3BhUGFnZURpcmVjdGl2ZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL3BhZ2UnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgICR1bndhdGNoQWxsQnlTY29wZSxcbiAgICBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgIEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UsXG4gICAgQXBwLFxuICAgIG11dGVXYXRjaGVycyxcbiAgICBub29wLFxuICAgIHVuTXV0ZVdhdGNoZXJzLFxuICAgIFV0aWxzU2VydmljZVxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBjb21tb25QYXJ0aWFsV2lkZ2V0cyB9IGZyb20gJy4vYmFzZS1wYXJ0aWFsLmNvbXBvbmVudCc7XG5cblxuaW1wb3J0IHsgVmFyaWFibGVzU2VydmljZSB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQXBwTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZyYWdtZW50TW9uaXRvciB9IGZyb20gJy4uL3V0aWwvZnJhZ21lbnQtbW9uaXRvcic7XG5pbXBvcnQgeyBDQUNIRV9QQUdFIH0gZnJvbSAnLi4vdXRpbC93bS1yb3V0ZS1yZXVzZS1zdHJhdGVneSc7XG5pbXBvcnQge2VhY2gsIGV4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTcGFQYWdlQ29tcG9uZW50IGV4dGVuZHMgRnJhZ21lbnRNb25pdG9yIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBzdGF0aWMgbGFzdFBhZ2VTbmFwU2hvdCA9IG51bGw7XG4gICAgV2lkZ2V0czogYW55O1xuICAgIFZhcmlhYmxlczogYW55O1xuICAgIEFjdGlvbnM6IGFueTtcbiAgICBBcHA6IEFwcDtcbiAgICBpbmplY3RvcjogSW5qZWN0b3I7XG4gICAgcGFnZU5hbWU6IHN0cmluZztcbiAgICBhY3RpdmVQYWdlTmFtZTogc3RyaW5nO1xuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZTtcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogQWJzdHJhY3ROYXZpZ2F0aW9uU2VydmljZTtcbiAgICByb3V0ZXI6IFJvdXRlcjtcbiAgICBwYWdlUGFyYW1zOiBhbnk7XG4gICAgc2hvd1BhZ2VDb250ZW50OiBib29sZWFuO1xuICAgIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlO1xuICAgIGFwcExvY2FsZTogYW55O1xuICAgIHN0YXJ0dXBWYXJpYWJsZXNMb2FkZWQgPSBmYWxzZTtcbiAgICBwYWdlVHJhbnNpdGlvbkNvbXBsZXRlZCA9IGZhbHNlO1xuICAgIGxheW91dERpcmVjdGl2ZTogTGF5b3V0RGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoU3BhUGFnZURpcmVjdGl2ZSkgc3BhUGFnZURpcmVjdGl2ZTtcbiAgICAkcGFnZTtcbiAgICBzY3JpcHRMb2FkZXJTZXJ2aWNlOiBTY3JpcHRMb2FkZXJTZXJ2aWNlO1xuICAgIFZpZXdwb3J0OiBWaWV3cG9ydDtcblxuICAgIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgICB2aWV3SW5pdCQgPSBuZXcgU3ViamVjdCgpO1xuICAgIGZvcm1hdHNCeUxvY2FsZSA9IHsndGltZXpvbmUnOiAnJ307XG5cbiAgICBhYnN0cmFjdCBldmFsVXNlclNjcmlwdChwcmVmYWJDb250ZXh0OiBhbnksIGFwcENvbnRleHQ6IGFueSwgdXRpbHM6IGFueSk7XG4gICAgYWJzdHJhY3QgZ2V0VmFyaWFibGVzKCk7XG4gICAgYWJzdHJhY3QgZ2V0RXhwcmVzc2lvbnMoKTtcblxuICAgIGluaXQoKSB7XG5cbiAgICAgICAgbXV0ZVdhdGNoZXJzKCk7XG5cbiAgICAgICAgdGhpcy5BcHAgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoQXBwKSA6IGluamVjdChBcHApO1xuICAgICAgICB0aGlzLnJvdXRlID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKSA6IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlciA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChBcHBNYW5hZ2VyU2VydmljZSkgOiBpbmplY3QoQXBwTWFuYWdlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UpIDogaW5qZWN0KEFic3RyYWN0TmF2aWdhdGlvblNlcnZpY2UpO1xuICAgICAgICB0aGlzLnNjcmlwdExvYWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoU2NyaXB0TG9hZGVyU2VydmljZSkgOiBpbmplY3QoU2NyaXB0TG9hZGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoQWJzdHJhY3RJMThuU2VydmljZSkgOiBpbmplY3QoQWJzdHJhY3RJMThuU2VydmljZSk7XG4gICAgICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcikgOiBpbmplY3QoUm91dGVyKTtcbiAgICAgICAgdGhpcy5WaWV3cG9ydCA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChWaWV3cG9ydCkgOiBpbmplY3QoVmlld3BvcnQpO1xuICAgICAgICB0aGlzLmxheW91dERpcmVjdGl2ZSA9IHRoaXMuaW5qZWN0b3IgPyB0aGlzLmluamVjdG9yLmdldChMYXlvdXREaXJlY3RpdmUpIDogaW5qZWN0KExheW91dERpcmVjdGl2ZSk7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgZnVuY3Rpb25zIGZvciBiaW5kaW5nIGV2YWx1YXRpb25cbiAgICAgICAgdGhpcy5yZWdpc3RlckV4cHJlc3Npb25zKCk7XG4gICAgICAgIHRoaXMuaW5pdFVzZXJTY3JpcHQoKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyV2lkZ2V0cygpO1xuICAgICAgICB0aGlzLmluaXRWYXJpYWJsZXMoKTtcblxuICAgICAgICB0aGlzLkFwcC5sYXN0QWN0aXZlUGFnZU5hbWUgPSB0aGlzLkFwcC5hY3RpdmVQYWdlTmFtZTtcbiAgICAgICAgdGhpcy5BcHAuYWN0aXZlUGFnZU5hbWUgPSB0aGlzLnBhZ2VOYW1lO1xuICAgICAgICB0aGlzLkFwcC5hY3RpdmVQYWdlID0gdGhpcztcbiAgICAgICAgdGhpcy5hY3RpdmVQYWdlTmFtZSA9IHRoaXMucGFnZU5hbWU7IC8vIFRvZG86IHJlbW92ZSB0aGlzXG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclBhZ2VQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5kZWZpbmVJMThuUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyV2lkZ2V0cygpIHtcbiAgICAgICAgLy8gY29tbW9uIHBhcnRpYWwgd2lkZ2V0cyBzaG91bGQgYmUgYWNjZXNzaWJsZSBmcm9tIHBhZ2VcbiAgICAgICAgdGhpcy5XaWRnZXRzID0gT2JqZWN0LmNyZWF0ZShjb21tb25QYXJ0aWFsV2lkZ2V0cyk7XG5cbiAgICAgICAgLy8gZXhwb3NlIGN1cnJlbnQgcGFnZSB3aWRnZXRzIG9uIGFwcFxuICAgICAgICAodGhpcy5BcHAgYXMgYW55KS5XaWRnZXRzID0gT2JqZWN0LmNyZWF0ZSh0aGlzLldpZGdldHMpO1xuICAgIH1cblxuICAgIGluaXRVc2VyU2NyaXB0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ldmFsVXNlclNjcmlwdCh0aGlzLCB0aGlzLkFwcCwgdGhpcy5pbmplY3RvciA/IHRoaXMuaW5qZWN0b3IuZ2V0KFV0aWxzU2VydmljZSkgOiBpbmplY3QoVXRpbHNTZXJ2aWNlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIGV2YWx1YXRpbmcgcGFnZSAoJHt0aGlzLnBhZ2VOYW1lfSkgc2NyaXB0XFxuYCwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlclBhZ2VQYXJhbXMoKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB0aGlzLnBhZ2VQYXJhbXMgPSAodGhpcy5BcHAgYXMgYW55KS5wYWdlUGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKG5vb3AsIG5vb3AsICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIGRlZmluZUkxOG5Qcm9wcygpIHtcbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldEFwcExvY2FsZSgpO1xuICAgIH1cblxuICAgIGluaXRWYXJpYWJsZXMoKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yID8gdGhpcy5pbmplY3Rvci5nZXQoVmFyaWFibGVzU2VydmljZSkgOiBpbmplY3QoVmFyaWFibGVzU2VydmljZSk7XG5cbiAgICAgICAgLy8gZ2V0IHZhcmlhYmxlcyBhbmQgYWN0aW9ucyBpbnN0YW5jZXMgZm9yIHRoZSBwYWdlXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlQ29sbGVjdGlvbiA9IHZhcmlhYmxlc1NlcnZpY2UucmVnaXN0ZXIodGhpcy5wYWdlTmFtZSwgdGhpcy5nZXRWYXJpYWJsZXMoKSwgdGhpcyk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5hbWVzcGFjZSBmb3IgVmFyaWFibGVzIG5hZCBBY3Rpb25zIG9uIHBhZ2UvcGFydGlhbCwgd2hpY2ggaW5oZXJpdHMgdGhlIFZhcmlhYmxlcyBhbmQgQWN0aW9ucyBmcm9tIEFwcCBpbnN0YW5jZVxuICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IE9iamVjdC5jcmVhdGUodGhpcy5BcHAuVmFyaWFibGVzKTtcbiAgICAgICAgdGhpcy5BY3Rpb25zID0gT2JqZWN0LmNyZWF0ZSh0aGlzLkFwcC5BY3Rpb25zKTtcblxuICAgICAgICAvLyBhc3NpZ24gYWxsIHRoZSBwYWdlIHZhcmlhYmxlcyB0byB0aGUgcGFnZUluc3RhbmNlXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlQ29sbGVjdGlvbi5WYXJpYWJsZXMpLmZvckVhY2goKFtuYW1lLCB2YXJpYWJsZV0pID0+IHRoaXMuVmFyaWFibGVzW25hbWVdID0gdmFyaWFibGUpO1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YXJpYWJsZUNvbGxlY3Rpb24uQWN0aW9ucykuZm9yRWFjaCgoW25hbWUsIGFjdGlvbl0pID0+IHRoaXMuQWN0aW9uc1tuYW1lXSA9IGFjdGlvbik7XG5cblxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0luaXQkLnN1YnNjcmliZShub29wLCBub29wLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5hcHBNYW5hZ2VyLmlzQXBwVmFyaWFibGVzRmlyZWQoKSkge1xuICAgICAgICAgICAgICAgIHZhcmlhYmxlQ29sbGVjdGlvbi5jYWxsYmFjayh0aGlzLkFwcC5WYXJpYWJsZXMpLmNhdGNoKG5vb3ApLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdhcHAtdmFyaWFibGVzLWRhdGEtbG9hZGVkJywge3BhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyaWFibGVDb2xsZWN0aW9uLmNhbGxiYWNrKHRoaXMuQXBwLkFjdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5hcHBWYXJpYWJsZXNSZWFkeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5pc0FwcFZhcmlhYmxlc0ZpcmVkKHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXJpYWJsZUNvbGxlY3Rpb24uY2FsbGJhY2sodmFyaWFibGVDb2xsZWN0aW9uLlZhcmlhYmxlcylcbiAgICAgICAgICAgICAgICAuY2F0Y2gobm9vcClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ3BhZ2UtdmFyaWFibGVzLWRhdGEtbG9hZGVkJywge3BhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnR1cFZhcmlhYmxlc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhpZGUgdGhlIGxvYWRlciBvbmx5IGFmdGVyIHRoZSBzb21lIHNldFRpbWVvdXQgZm9yIHNtb290aCBwYWdlIGxvYWQuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyaWFibGVDb2xsZWN0aW9uLmNhbGxiYWNrKHZhcmlhYmxlQ29sbGVjdGlvbi5BY3Rpb25zKTtcblxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYmluZCBleHByZXNzaW9ucyBnZW5lcmF0ZWQgaW4gdGhpcyBwYWdlIGluc3RhbmNlXG4gICAgICogZ2V0RXhwcmVzc2lvbnMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiB0aGUgZ2VuZXJhdGVkIHBhZ2UuY29tcC50cyBmaWxlXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb25zLCBtYXAgb2YgYmluZCBleHByZXNzaW9uIHZzIGdlbmVyYXRlZCBmdW5jdGlvblxuICAgICAqL1xuICAgIHJlZ2lzdGVyRXhwcmVzc2lvbnMoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5nZXRFeHByZXNzaW9ucygpO1xuICAgICAgICBlYWNoKGV4cHJlc3Npb25zLCAoZm4sIGV4cHIpID0+IHtcbiAgICAgICAgICAgIHJlZ2lzdGVyRm5CeUV4cHIoZXhwciwgZm5bMF0sIGZuWzFdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcnVuUGFnZVRyYW5zaXRpb24odHJhbnNpdGlvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbiB8fCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFBhZ2VUcmFuc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gQmFzZVNwYVBhZ2VDb21wb25lbnQubGFzdFBhZ2VTbmFwU2hvdFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvblxuICAgICAgICAgICAgICAgICYmICF0cmFuc2l0aW9uLnN0YXJ0c1dpdGgoJ25vbmUnKVxuICAgICAgICAgICAgICAgICYmIGxhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9IGxhc3RQYWdlLnBhcmVudCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlICYmICEoZSAmJiBlLnBzZXVkb0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0Lm9mZignYW5pbWF0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQucmVtb3ZlQ2xhc3ModHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0LmNoaWxkcmVuKCkuZmlyc3QoKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uID0gJ3BhZ2UtdHJhbnNpdGlvbiBwYWdlLXRyYW5zaXRpb24tJyArIHRyYW5zaXRpb247XG4gICAgICAgICAgICAgICAgbGFzdFBhZ2UuYWRkQ2xhc3MoJ3BhZ2UtZXhpdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuJHBhZ2UuYWRkQ2xhc3MoJ3BhZ2UtZW50cnknKTtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0LmFkZENsYXNzKHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICAgICR0YXJnZXQub24oJ2FuaW1hdGlvbmVuZCcsIG9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgYSBtYXhpbXVtIG9mIDEgc2Vjb25kIGZvciB0cmFuc2l0aW9uIHRvIGVuZC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRwYWdlICYmIHRoaXMuJHBhZ2UucmVtb3ZlQ2xhc3MoJ3BhZ2UtZW50cnknKTtcbiAgICAgICAgICAgIGlmIChsYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgIGxhc3RQYWdlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlVHJhbnNpdGlvbkNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGludm9rZU9uUmVhZHkoKSB7XG4gICAgICAgIHRoaXMub25SZWFkeSgpO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdoaWdobGlnaHRBY3RpdmVMaW5rJywgeydwYWdlTmFtZScgOiB0aGlzLnBhZ2VOYW1lfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ3BhZ2VSZWFkeScsIHsnbmFtZScgOiB0aGlzLnBhZ2VOYW1lLCBpbnN0YW5jZTogdGhpc30pO1xuICAgICAgICAodGhpcy5BcHAub25QYWdlUmVhZHkgfHwgbm9vcCkodGhpcy5wYWdlTmFtZSwgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkU2NyaXB0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRzUmVxdWlyZWQgPSB0aGlzLnNwYVBhZ2VEaXJlY3RpdmUgJiYgdGhpcy5zcGFQYWdlRGlyZWN0aXZlLiRlbGVtZW50LmF0dHIoJ3NjcmlwdHMtdG8tbG9hZCcpO1xuXG4gICAgICAgICAgICBpZiAoc2NyaXB0c1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHRMb2FkZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5sb2FkKC4uLnNjcmlwdHNSZXF1aXJlZC5zcGxpdCgnLCcpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVMYXN0UGFnZVNuYXBzaG90KCkge31cblxuICAgIHByaXZhdGUgc2F2ZVBhZ2VTbmFwU2hvdCgpIHtcbiAgICAgICAgaWYgKEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QpIHtcbiAgICAgICAgICAgIEJhc2VTcGFQYWdlQ29tcG9uZW50Lmxhc3RQYWdlU25hcFNob3QucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgZm4gPSAoJGVsLCBrZXksIHJlY3Vyc2l2ZSA9IHRydWUsICR0YXJnZXQgPSAkZWwpICA9PiB7XG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgJGVsLmNoaWxkcmVuKCkuZWFjaCgoaSwgdikgPT4gZm4oJCh2KSwga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxEYXRhID0ge1xuICAgICAgICAgICAgICAgIHg6ICR0YXJnZXQuc2Nyb2xsTGVmdCgpLFxuICAgICAgICAgICAgICAgIHk6ICR0YXJnZXQuc2Nyb2xsVG9wKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZihzY3JvbGxEYXRhLnggPiAwIHx8IHNjcm9sbERhdGEueSA+IDApIHtcbiAgICAgICAgICAgICAgICAkZWwuYXR0cihrZXksIHNjcm9sbERhdGEueCArICcsJyArIHNjcm9sbERhdGEueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZuKHRoaXMuJHBhZ2UsICdkYXRhLXNjcm9sbC1wb3NpdGlvbicpO1xuICAgICAgICB0aGlzLiRwYWdlLmF0dHIoJ2RhdGEtd2luZG93LXNjcm9sbC1wb3NpdGlvbicsIHdpbmRvdy5zY3JvbGxYICsgJywnICsgd2luZG93LnNjcm9sbFkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBmbiA9ICgkZWwsIGtleSwgcmVjdXJzaXZlICA9IHRydWUsICR0YXJnZXQgPSAkZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbERhdGEgPSAoJGVsLmF0dHIoa2V5KSB8fCAnJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGlmKHNjcm9sbERhdGEubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICR0YXJnZXQuc2Nyb2xsTGVmdChzY3JvbGxEYXRhWzBdKTtcbiAgICAgICAgICAgICAgICAkdGFyZ2V0LnNjcm9sbFRvcChzY3JvbGxEYXRhWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRlbC5yZW1vdmVBdHRyKGtleSk7XG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgJGVsLmNoaWxkcmVuKCkuZWFjaCgoaSwgdikgPT4gZm4oJCh2KSwga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZuKHRoaXMuJHBhZ2UsICdkYXRhLXNjcm9sbC1wb3NpdGlvbicpO1xuICAgICAgICBmbih0aGlzLiRwYWdlLCAnZGF0YS13aW5kb3ctc2Nyb2xsLXBvc2l0aW9uJywgZmFsc2UsICQod2luZG93KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FuRGVhY3RpdmF0ZSBpcyBjYWxsZWQgYmVmb3JlIGEgcm91dGUgY2hhbmdlLlxuICAgICAqIFRoaXMgd2lsbCBpbnRlcm5hbGx5IGNhbGwgb25CZWZvcmVQYWdlTGVhdmUgbWV0aG9kIHByZXNlbnRcbiAgICAgKiBhdCBwYWdlIGxldmVsIGFuZCBhcHAgbGV2ZWwgaW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBkZWNpZGVcbiAgICAgKiB3aGV0aGVyIHRvIGNoYW5nZSByb3V0ZSBvciBub3QgYmFzZWQgb24gcmV0dXJuIHZhbHVlLlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIGNhbkRlYWN0aXZhdGUobmV4dFN0YXRlPzogc3RyaW5nKXtcbiAgICAgICAgbGV0IHJldFZhbDtcbiAgICAgICAgLy8gQ2FsbGluZyBvbkJlZm9yZVBhZ2VMZWF2ZSBtZXRob2QgcHJlc2VudCBhdCBwYWdlIGxldmVsXG4gICAgICAgIHJldFZhbCA9IHRoaXMub25CZWZvcmVQYWdlTGVhdmUoKTtcbiAgICAgICAgLy8gQ2FsbGluZyBvbkJlZm9yZVBhZ2VMZWF2ZSBtZXRob2QgcHJlc2VudCBhdCBhcHAgbGV2ZWwgb25seSBpZiBwYWdlIGxldmVsIG1ldGhvZCByZXR1cm4gdHJ1ZVxuICAgICAgICAvLyBvciBpZiB0aGVyZSBpcyBubyBwYWdlIGxldmVsIG1ldGhvZFxuICAgICAgICBpZiAocmV0VmFsICE9PSBmYWxzZSApIHtcbiAgICAgICAgICAgIHJldFZhbCA9ICAodGhpcy5BcHAub25CZWZvcmVQYWdlTGVhdmUgfHwgbm9vcCkodGhpcy5BcHAuYWN0aXZlUGFnZU5hbWUsIHRoaXMuQXBwLmFjdGl2ZVBhZ2UsIG5leHRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHJldFZhbDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGUuc25hcHNob3QuZGF0YVtDQUNIRV9QQUdFXSA9IHRoaXMuY2FuUmV1c2UoKTtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLiRwYWdlID0gdGhpcy5sYXlvdXREaXJlY3RpdmUuJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHBhZ2UuYWRkQ2xhc3MoJ2lvcy1wYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBbmRyb2lkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRwYWdlLmFkZENsYXNzKCdhbmRyb2lkLXBhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3RvcmVMYXN0UGFnZVNuYXBzaG90KCk7XG4gICAgICAgIHRoaXMubG9hZFNjcmlwdHMoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucnVuUGFnZVRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5jb21waWxlUGFnZUNvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25QYWdlQ29udGVudFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzTG9hZGVkJC5zdWJzY3JpYmUobm9vcCwgbm9vcCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uUmVhZHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bk11dGVXYXRjaGVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0luaXQkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VDb250ZW50UmVhZHkgPSBub29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFVud2F0Y2ggYWxsIFBhZ2Utc2NvcGVkIHdhdGNoZXJzIGZvciBUSElTIHNwZWNpZmljIHBhZ2Ugd2hlbiBwYWdlIGlzIGRlc3Ryb3llZFxuICAgICAgICBpZiAodGhpcy5wYWdlTmFtZSkge1xuICAgICAgICAgICAgJHVud2F0Y2hBbGxCeVNjb3BlKCdQYWdlJywgdGhpcy5wYWdlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYXZlUGFnZVNuYXBTaG90KCk7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSBTdWJqZWN0cyB0byByZWxlYXNlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveSQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdJbml0JCkge1xuICAgICAgICAgICAgdGhpcy52aWV3SW5pdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMudmlld0luaXQkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgcmVmZXJlbmNlcyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgICAgICB0aGlzLldpZGdldHMgPSBudWxsO1xuICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuQWN0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMuQXBwID0gbnVsbDtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlciA9IG51bGw7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBudWxsO1xuICAgICAgICB0aGlzLnJvdXRlciA9IG51bGw7XG4gICAgICAgIHRoaXMucGFnZVBhcmFtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IG51bGw7XG4gICAgICAgIHRoaXMubGF5b3V0RGlyZWN0aXZlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zcGFQYWdlRGlyZWN0aXZlID0gbnVsbDtcbiAgICAgICAgdGhpcy4kcGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2NyaXB0TG9hZGVyU2VydmljZSA9IG51bGw7XG4gICAgICAgIHRoaXMuVmlld3BvcnQgPSBudWxsO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYW51cCBGcmFnbWVudE1vbml0b3IgcmVzb3VyY2VzXG4gICAgICAgIHRoaXMuY2xlYW51cEZyYWdtZW50TW9uaXRvcigpO1xuICAgIH1cblxuICAgIG9uUmVhZHkoKSB7fVxuXG4gICAgb25CZWZvcmVQYWdlUmVhZHkoKSB7fVxuXG4gICAgb25CZWZvcmVQYWdlTGVhdmUoKSB7fVxuXG4gICAgb25QYWdlQ29udGVudFJlYWR5KCkge31cblxuICAgIGNhblJldXNlKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5zcGFQYWdlRGlyZWN0aXZlICYmIHRoaXMuc3BhUGFnZURpcmVjdGl2ZS5jYWNoZSk7XG4gICAgfVxuXG4gICAgbXV0ZSgpIHtcbiAgICAgICAgY29uc3QgbSA9IG8gPT4geyBvICYmIG8ubXV0ZSAmJiBvLm11dGUoKTsgfTtcbiAgICAgICAgZWFjaCh0aGlzLldpZGdldHMsIG0pO1xuICAgICAgICBlYWNoKHRoaXMuVmFyaWFibGVzLCBtKTtcbiAgICAgICAgZWFjaCh0aGlzLkFjdGlvbnMsIG0pO1xuICAgIH1cblxuICAgIHVubXV0ZShjID0gdGhpcykge1xuICAgICAgICBjb25zdCB1bSA9IG8gPT4geyBvICYmIG8udW5tdXRlICYmIG8udW5tdXRlKCk7IH07XG4gICAgICAgIGVhY2godGhpcy5XaWRnZXRzLCB1bSk7XG4gICAgICAgIGVhY2godGhpcy5WYXJpYWJsZXMsIHVtKTtcbiAgICAgICAgZWFjaCh0aGlzLkFjdGlvbnMsIHVtKTtcbiAgICB9XG5cbiAgICBuZ09uQXR0YWNoKCkge1xuICAgICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbQ0FDSEVfUEFHRV0gPSB0aGlzLmNhblJldXNlKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJQYWdlUGFyYW1zKCk7XG4gICAgICAgIHRoaXMuQXBwLmxhc3RBY3RpdmVQYWdlTmFtZSA9IHRoaXMuQXBwLmFjdGl2ZVBhZ2VOYW1lO1xuICAgICAgICB0aGlzLkFwcC5hY3RpdmVQYWdlTmFtZSA9IHRoaXMucGFnZU5hbWU7XG4gICAgICAgIHRoaXMuQXBwLmFjdGl2ZVBhZ2UgPSB0aGlzO1xuICAgICAgICB0aGlzLmFjdGl2ZVBhZ2VOYW1lID0gdGhpcy5wYWdlTmFtZTtcbiAgICAgICAgdGhpcy5yZXN0b3JlTGFzdFBhZ2VTbmFwc2hvdCgpO1xuICAgICAgICB0aGlzLnVubXV0ZSgpO1xuICAgICAgICAvLyBleHBvc2UgY3VycmVudCBwYWdlIHdpZGdldHMgb24gYXBwXG4gICAgICAgICh0aGlzLkFwcCBhcyBhbnkpLldpZGdldHMgPSBPYmplY3QuY3JlYXRlKHRoaXMuV2lkZ2V0cyk7XG4gICAgICAgIGlmKHRoaXMuc3BhUGFnZURpcmVjdGl2ZSAmJiB0aGlzLnNwYVBhZ2VEaXJlY3RpdmUucmVmcmVzaGRhdGFvbmF0dGFjaCkge1xuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCA9IHYgPT4geyB2ICYmIHYuc3RhcnRVcGRhdGUgJiYgdi5pbnZva2UgJiYgdi5pbnZva2UoKTsgfTtcbiAgICAgICAgICAgIGVhY2godGhpcy5WYXJpYWJsZXMsIHJlZnJlc2gpO1xuICAgICAgICAgICAgZWFjaCh0aGlzLkFjdGlvbnMsIHJlZnJlc2gpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucnVuUGFnZVRyYW5zaXRpb24oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSwgMTAwKTtcbiAgICAgICAgICAgIGVhY2godGhpcy5XaWRnZXRzLCB3ID0+IHcgJiYgdy5uZ09uQXR0YWNoICYmIHcubmdPbkF0dGFjaCgpKTtcbiAgICAgICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ3BhZ2VBdHRhY2gnLCB7J25hbWUnIDogdGhpcy5wYWdlTmFtZSwgaW5zdGFuY2U6IHRoaXN9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5ub3RpZnkoJ2hpZ2hsaWdodEFjdGl2ZUxpbmsnLCB7J3BhZ2VOYW1lJzogdGhpcy5wYWdlTmFtZX0pO1xuICAgIH1cblxuICAgIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuc2F2ZVBhZ2VTbmFwU2hvdCgpO1xuICAgICAgICB0aGlzLm11dGUoKTtcbiAgICAgICAgZWFjaCh0aGlzLldpZGdldHMsIHcgPT4gdyAmJiB3Lm5nT25EZXRhY2ggJiYgdy5uZ09uRGV0YWNoKCkpO1xuICAgICAgICB0aGlzLmFwcE1hbmFnZXIubm90aWZ5KCdwYWdlRGV0YWNoJywgeyduYW1lJyA6IHRoaXMucGFnZU5hbWUsIGluc3RhbmNlOiB0aGlzfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLm9uQmVmb3JlUGFnZVJlYWR5KCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsZWFyKCkge1xuICAgICAgICBpZihCYXNlU3BhUGFnZUNvbXBvbmVudC5sYXN0UGFnZVNuYXBTaG90KSB7XG4gICAgICAgICAgICBCYXNlU3BhUGFnZUNvbXBvbmVudC5sYXN0UGFnZVNuYXBTaG90LnJlbW92ZSgpO1xuICAgICAgICAgICAgQmFzZVNwYVBhZ2VDb21wb25lbnQubGFzdFBhZ2VTbmFwU2hvdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
2
+ import { from, Subject, switchMap } from 'rxjs';
3
3
  import { tap } from 'rxjs/operators';
4
4
  import { httpService, appManager } from '@wm/variables';
5
5
  import { WmHttpRequest, WmHttpResponse } from '@wm/http';
@@ -32,18 +32,19 @@ export class HttpCallInterceptor {
32
32
  let apiUrl = _WM_APP_PROJECT.apiUrl + request.url;
33
33
  request = request.clone({ url: apiUrl });
34
34
  }
35
- if (appManager && appManager.appOnBeforeServiceCall) {
36
- // Convert the angular HttpRequest to wm HttpRequest
37
- const req = this.wmHttpRequest.angularToWmRequest(request);
38
- // trigger the common onBeforeServiceCall handler present in app.js
39
- modifiedReq = appManager.appOnBeforeServiceCall(req);
40
- if (modifiedReq) {
41
- // Convert the wm HttpRequest to angular HttpRequest
42
- modifiedReq = this.wmHttpRequest.wmToAngularRequest(modifiedReq);
43
- request = modifiedReq;
35
+ return from(Promise.resolve().then(() => {
36
+ if (appManager && appManager.appOnBeforeServiceCall) {
37
+ const wmReq = this.wmHttpRequest.angularToWmRequest(request);
38
+ return appManager.appOnBeforeServiceCall(wmReq);
44
39
  }
45
- }
46
- return next.handle(request).pipe(tap((response) => {
40
+ return null;
41
+ }))
42
+ .pipe(switchMap((receivedModifiedReq) => {
43
+ if (receivedModifiedReq) {
44
+ request = this.wmHttpRequest.wmToAngularRequest(receivedModifiedReq);
45
+ }
46
+ return next.handle(request);
47
+ }), tap((response) => {
47
48
  if (response && response.type === 4 && appManager && appManager.appOnServiceSuccess) {
48
49
  // Convert the angular HttpResponse to wm HttpResponse
49
50
  const resp = this.wmHttpResponse.angularToWmResponse(response);
@@ -79,4 +80,4 @@ export class HttpCallInterceptor {
79
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HttpCallInterceptor, decorators: [{
80
81
  type: Injectable
81
82
  }], ctorParameters: () => [] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFFekM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUs1QjtRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNsRCxJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwVCxDQUFDO1FBQ0QsSUFBRyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xCLElBQUksTUFBTSxHQUFFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRCxvREFBb0Q7WUFDcEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRCxtRUFBbUU7WUFDbkUsV0FBVyxHQUFJLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNkLG9EQUFvRDtnQkFDcEQsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2pFLE9BQU8sR0FBRyxXQUFXLENBQUM7WUFDMUIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNkLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFVBQVUsSUFBSyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDbkYsc0RBQXNEO2dCQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCx1REFBdUQ7Z0JBQ3ZELFlBQVksR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixzREFBc0Q7b0JBQ3RELFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtZQUNKLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksV0FBVyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDN0Msc0RBQXNEO2dCQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxxREFBcUQ7Z0JBQ3JELFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixzREFBc0Q7b0JBQ3RELFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FDSixDQUNKLENBQUM7SUFDTixDQUFDOytHQXpFUSxtQkFBbUI7bUhBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBodHRwU2VydmljZSwgYXBwTWFuYWdlciB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgV21IdHRwUmVxdWVzdCwgV21IdHRwUmVzcG9uc2UgfSBmcm9tICdAd20vaHR0cCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtfV01fQVBQX1BST0pFQ1R9IGZyb20gXCJAd20vY29yZVwiO1xuXG4vKipcbiAqIFRoaXMgSW50ZXJjZXB0b3IgaW50ZXJjZXB0cyBhbGwgbmV0d29yayBjYWxscyBhbmQgaWYgYSBuZXR3b3JrIGNhbGwgZmFpbHNcbiAqIGR1ZSB0byBzZXNzaW9uIHRpbWVvdXQsIHRoZW4gaXQgY2FsbHMgYSBmdW5jdGlvbiB0byBoYW5kbGUgc2Vzc2lvbiB0aW1lb3V0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cENhbGxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICB3bUh0dHBSZXF1ZXN0OiBhbnk7XG4gICAgd21IdHRwUmVzcG9uc2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLndtSHR0cFJlcXVlc3QgPSBuZXcgV21IdHRwUmVxdWVzdCgpO1xuICAgICAgICB0aGlzLndtSHR0cFJlc3BvbnNlID0gbmV3IFdtSHR0cFJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU3ViamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuXG4gICAgaXNBYnNvbHV0ZVVybCh1cmw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KHVybCk7XG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgICAgICBsZXQgbW9kaWZpZWRSZXE7XG4gICAgICAgIGxldCBtb2RpZmllZFJlc3A7XG4gICAgICAgIGxldCBpc1JlbGF0aXZlQVBJVXJsID0gZmFsc2U7XG4gICAgICAgIGlmKCF0aGlzLmlzQWJzb2x1dGVVcmwocmVxdWVzdC51cmwpKSB7XG4gICAgICAgICAgICBpc1JlbGF0aXZlQVBJVXJsID0gcmVxdWVzdC51cmwuaW5kZXhPZihcInNlcnZpY2VzL1wiKSAhPT0gLTEgfHwgcmVxdWVzdC51cmwuaW5kZXhPZihcImpfc3ByaW5nX3NlY3VyaXR5X2NoZWNrXCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5pbmRleE9mKFwial9zcHJpbmdfc2VjdXJpdHlfbG9nb3V0XCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5pbmRleE9mKFwib0F1dGhDYWxsYmFjay5odG1sXCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwicmVzb3VyY2VzL1wiKSB8fCByZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwicHJlZmFicy9cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNSZWxhdGl2ZUFQSVVybCkge1xuICAgICAgICAgICAgbGV0IGFwaVVybD0gX1dNX0FQUF9QUk9KRUNULmFwaVVybCArIHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyB1cmw6IGFwaVVybCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBwTWFuYWdlciAmJiBhcHBNYW5hZ2VyLmFwcE9uQmVmb3JlU2VydmljZUNhbGwpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFuZ3VsYXIgSHR0cFJlcXVlc3QgdG8gd20gSHR0cFJlcXVlc3RcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHRoaXMud21IdHRwUmVxdWVzdC5hbmd1bGFyVG9XbVJlcXVlc3QocmVxdWVzdCk7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSBjb21tb24gb25CZWZvcmVTZXJ2aWNlQ2FsbCBoYW5kbGVyIHByZXNlbnQgaW4gYXBwLmpzXG4gICAgICAgICAgICBtb2RpZmllZFJlcSA9ICBhcHBNYW5hZ2VyLmFwcE9uQmVmb3JlU2VydmljZUNhbGwocmVxKTtcbiAgICAgICAgICAgIGlmIChtb2RpZmllZFJlcSkge1xuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHdtIEh0dHBSZXF1ZXN0IHRvIGFuZ3VsYXIgSHR0cFJlcXVlc3RcbiAgICAgICAgICAgICAgICBtb2RpZmllZFJlcSA9IHRoaXMud21IdHRwUmVxdWVzdC53bVRvQW5ndWxhclJlcXVlc3QobW9kaWZpZWRSZXEpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBtb2RpZmllZFJlcTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSA9PT0gNCAmJiBhcHBNYW5hZ2VyICYmICBhcHBNYW5hZ2VyLmFwcE9uU2VydmljZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFuZ3VsYXIgSHR0cFJlc3BvbnNlIHRvIHdtIEh0dHBSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcCA9IHRoaXMud21IdHRwUmVzcG9uc2UuYW5ndWxhclRvV21SZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSBjb21tb24gc3VjY2VzcyBoYW5kbGVyIHByZXNlbnQgaW4gYXBwLmpzXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZFJlc3AgPSBhcHBNYW5hZ2VyLmFwcE9uU2VydmljZVN1Y2Nlc3MocmVzcC5ib2R5LCByZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZFJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSB3bSBIdHRwUmVzcG9uc2UgdG8gYW5ndWxhciBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZFJlc3AgPSB0aGlzLndtSHR0cFJlc3BvbnNlLndtVG9Bbmd1bGFyUmVzcG9uc2UobW9kaWZpZWRSZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzcG9uc2UsIG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuXzQwMVN1YnNjcmliZXIgPSB0aGlzLmNyZWF0ZVN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBTZXJ2aWNlLmlzUGxhdGZvcm1TZXNzaW9uVGltZW91dChlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBTZXJ2aWNlLmhhbmRsZVNlc3Npb25UaW1lb3V0KHJlcXVlc3QsIGVycm9yLl80MDFTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwTWFuYWdlciAmJiBhcHBNYW5hZ2VyLmFwcE9uU2VydmljZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXNwb25zZSB0byB3bSBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IHRoaXMud21IdHRwUmVzcG9uc2UuYW5ndWxhclRvV21SZXNwb25zZShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSBjb21tb24gZXJyb3IgaGFuZGxlciBwcmVzZW50IGluIGFwcC5qc1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gYXBwTWFuYWdlci5hcHBPblNlcnZpY2VFcnJvcihlcnIubWVzc2FnZSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllZFJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSB3bSBIdHRwUmVzcG9uc2UgdG8gYW5ndWxhciBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZFJlc3AgPSB0aGlzLndtSHR0cFJlc3BvbnNlLndtVG9Bbmd1bGFyUmVzcG9uc2UobW9kaWZpZWRSZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQoZXJyb3IsIG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBQyxJQUFJLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDOztBQUV6Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBSzVCO1FBQ0ksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVc7UUFDckIsT0FBTywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQ2xELElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElB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Q0FBQztnQkFDN0Msc0RBQXNEO2dCQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxxREFBcUQ7Z0JBQ3JELFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixzREFBc0Q7b0JBQ3RELFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNyRSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FDSixDQUNSLENBQUM7SUFDTixDQUFDOytHQTdFUSxtQkFBbUI7bUhBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBodHRwU2VydmljZSwgYXBwTWFuYWdlciB9IGZyb20gJ0B3bS92YXJpYWJsZXMnO1xuaW1wb3J0IHsgV21IdHRwUmVxdWVzdCwgV21IdHRwUmVzcG9uc2UgfSBmcm9tICdAd20vaHR0cCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtfV01fQVBQX1BST0pFQ1R9IGZyb20gXCJAd20vY29yZVwiO1xuXG4vKipcbiAqIFRoaXMgSW50ZXJjZXB0b3IgaW50ZXJjZXB0cyBhbGwgbmV0d29yayBjYWxscyBhbmQgaWYgYSBuZXR3b3JrIGNhbGwgZmFpbHNcbiAqIGR1ZSB0byBzZXNzaW9uIHRpbWVvdXQsIHRoZW4gaXQgY2FsbHMgYSBmdW5jdGlvbiB0byBoYW5kbGUgc2Vzc2lvbiB0aW1lb3V0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cENhbGxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICB3bUh0dHBSZXF1ZXN0OiBhbnk7XG4gICAgd21IdHRwUmVzcG9uc2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLndtSHR0cFJlcXVlc3QgPSBuZXcgV21IdHRwUmVxdWVzdCgpO1xuICAgICAgICB0aGlzLndtSHR0cFJlc3BvbnNlID0gbmV3IFdtSHR0cFJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU3ViamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuXG4gICAgaXNBYnNvbHV0ZVVybCh1cmw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KHVybCk7XG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgICAgICBsZXQgbW9kaWZpZWRSZXE7XG4gICAgICAgIGxldCBtb2RpZmllZFJlc3A7XG4gICAgICAgIGxldCBpc1JlbGF0aXZlQVBJVXJsID0gZmFsc2U7XG4gICAgICAgIGlmKCF0aGlzLmlzQWJzb2x1dGVVcmwocmVxdWVzdC51cmwpKSB7XG4gICAgICAgICAgICBpc1JlbGF0aXZlQVBJVXJsID0gcmVxdWVzdC51cmwuaW5kZXhPZihcInNlcnZpY2VzL1wiKSAhPT0gLTEgfHwgcmVxdWVzdC51cmwuaW5kZXhPZihcImpfc3ByaW5nX3NlY3VyaXR5X2NoZWNrXCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5pbmRleE9mKFwial9zcHJpbmdfc2VjdXJpdHlfbG9nb3V0XCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5pbmRleE9mKFwib0F1dGhDYWxsYmFjay5odG1sXCIpICE9PSAtMSB8fCByZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwicmVzb3VyY2VzL1wiKSB8fCByZXF1ZXN0LnVybC5zdGFydHNXaXRoKFwicHJlZmFicy9cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNSZWxhdGl2ZUFQSVVybCkge1xuICAgICAgICAgICAgbGV0IGFwaVVybD0gX1dNX0FQUF9QUk9KRUNULmFwaVVybCArIHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyB1cmw6IGFwaVVybCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcE1hbmFnZXIgJiYgYXBwTWFuYWdlci5hcHBPbkJlZm9yZVNlcnZpY2VDYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdtUmVxID0gdGhpcy53bUh0dHBSZXF1ZXN0LmFuZ3VsYXJUb1dtUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcE1hbmFnZXIuYXBwT25CZWZvcmVTZXJ2aWNlQ2FsbCh3bVJlcSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJlY2VpdmVkTW9kaWZpZWRSZXEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkTW9kaWZpZWRSZXEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0aGlzLndtSHR0cFJlcXVlc3Qud21Ub0FuZ3VsYXJSZXF1ZXN0KHJlY2VpdmVkTW9kaWZpZWRSZXEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSA9PT0gNCAmJiBhcHBNYW5hZ2VyICYmICBhcHBNYW5hZ2VyLmFwcE9uU2VydmljZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXNwb25zZSB0byB3bSBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS5hbmd1bGFyVG9XbVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSBjb21tb24gc3VjY2VzcyBoYW5kbGVyIHByZXNlbnQgaW4gYXBwLmpzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gYXBwTWFuYWdlci5hcHBPblNlcnZpY2VTdWNjZXNzKHJlc3AuYm9keSwgcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVkUmVzcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSB3bSBIdHRwUmVzcG9uc2UgdG8gYW5ndWxhciBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gdGhpcy53bUh0dHBSZXNwb25zZS53bVRvQW5ndWxhclJlc3BvbnNlKG1vZGlmaWVkUmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNwb25zZSwgbW9kaWZpZWRSZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLl80MDFTdWJzY3JpYmVyID0gdGhpcy5jcmVhdGVTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFNlcnZpY2UuaXNQbGF0Zm9ybVNlc3Npb25UaW1lb3V0KGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBTZXJ2aWNlLmhhbmRsZVNlc3Npb25UaW1lb3V0KHJlcXVlc3QsIGVycm9yLl80MDFTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBNYW5hZ2VyICYmIGFwcE1hbmFnZXIuYXBwT25TZXJ2aWNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhbmd1bGFyIEh0dHBSZXNwb25zZSB0byB3bSBIdHRwUmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSB0aGlzLndtSHR0cFJlc3BvbnNlLmFuZ3VsYXJUb1dtUmVzcG9uc2UoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgdGhlIGNvbW1vbiBlcnJvciBoYW5kbGVyIHByZXNlbnQgaW4gYXBwLmpzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRSZXNwID0gYXBwTWFuYWdlci5hcHBPblNlcnZpY2VFcnJvcihlcnIubWVzc2FnZSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRSZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHdtIEh0dHBSZXNwb25zZSB0byBhbmd1bGFyIEh0dHBSZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZFJlc3AgPSB0aGlzLndtSHR0cFJlc3BvbnNlLndtVG9Bbmd1bGFyUmVzcG9uc2UobW9kaWZpZWRSZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKGVycm9yLCBtb2RpZmllZFJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -12,7 +12,7 @@ import * as i4 from '@wm/variables';
12
12
  import { $rootScope, VariablesService, MODE_CONSTANTS, CONSTANTS, appManager, httpService, MetadataService } from '@wm/variables';
13
13
  import { isEmpty, trim, forEach, extend, get, merge, isUndefined, isObject, endsWith, each, isNil, capitalize, startsWith, split, includes, isString, isNumber, find, intersection, map, toLower, values, findKey, keys, isEqual, filter } from 'lodash-es';
14
14
  import { SpaPageDirective, PageDirective, LayoutDirective, ContentComponent, PageContentComponent, RouterOutletDirective } from '@wm/components/page';
15
- import { Subject } from 'rxjs';
15
+ import { Subject, from, switchMap } from 'rxjs';
16
16
  import { WidgetRef, PartialDirective, TextContentDirective, ContainerDirective, PartialParamHandlerDirective, PartialContainerDirective, PartialParamDirective, FileIconClassPipe, FileExtensionFromMimePipe, StateClassPipe, FileSizePipe, FilterPipe, ToDatePipe, ToNumberPipe, ToCurrencyPipe, PrefixPipe, SuffixPipe, TimeFromNowPipe, NumberToStringPipe, StringToNumberPipe, CustomPipe, TrustAsPipe, SanitizePipe, TemplateReplacePipe, ItemTemplateDirective, RepeatTemplateDirective, LazyLoadDirective, MessageComponent, CustomWidgetContainerDirective, RedrawableDirective, ShowInDeviceDirective, TrailingZeroDecimalPipe, ImagePipe, DialogServiceImpl } from '@wm/components/base';
17
17
  import { __decorate, __param, __metadata } from 'tslib';
18
18
  import { CheckboxsetComponent } from '@wm/components/input/checkboxset';
@@ -936,7 +936,7 @@ class BasePartialComponent extends FragmentMonitor {
936
936
  }
937
937
  loadScripts() {
938
938
  return new Promise((resolve) => {
939
- const scriptsRequired = this.partialDirective.$element.attr('scripts-to-load');
939
+ const scriptsRequired = this.partialDirective?.$element.attr('scripts-to-load');
940
940
  if (scriptsRequired) {
941
941
  this.scriptLoaderService
942
942
  .load(...scriptsRequired.split(','))
@@ -1453,10 +1453,7 @@ class BasePageComponent extends FragmentMonitor {
1453
1453
  ngOnDestroy() {
1454
1454
  // MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
1455
1455
  if (this.pageName) {
1456
- const removedCount = $unwatchAllByScope('Page', this.pageName);
1457
- if (removedCount > 0) {
1458
- console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
1459
- }
1456
+ $unwatchAllByScope('Page', this.pageName);
1460
1457
  }
1461
1458
  //this.captureApplicationThumbnail();
1462
1459
  this.savePageSnapShot();
@@ -1912,6 +1909,7 @@ class BasePrefabComponent extends FragmentMonitor {
1912
1909
  constructor() {
1913
1910
  super(...arguments);
1914
1911
  this.compileContent = false;
1912
+ this.scriptsLoaded = false;
1915
1913
  this.destroy$ = new Subject();
1916
1914
  this.viewInit$ = new Subject();
1917
1915
  }
@@ -2061,6 +2059,10 @@ class BasePrefabComponent extends FragmentMonitor {
2061
2059
  }
2062
2060
  loadScripts() {
2063
2061
  return new Promise((resolve) => {
2062
+ if (!this.prefabContainerDirective) {
2063
+ resolve();
2064
+ return;
2065
+ }
2064
2066
  const scriptsRequired = this.prefabContainerDirective.$element.attr('scripts-to-load');
2065
2067
  if (scriptsRequired) {
2066
2068
  this.scriptLoaderService
@@ -2097,16 +2099,19 @@ class BasePrefabComponent extends FragmentMonitor {
2097
2099
  this.mute();
2098
2100
  each(this.Widgets, w => w && w.ngOnDetach && w.ngOnDetach());
2099
2101
  }
2100
- ngAfterViewInit() {
2101
- this.loadScripts().then(() => {
2102
- this.compileContent = true;
2103
- this.registerChangeListeners();
2104
- setTimeout(() => {
2105
- // trigger viewInit$.complete after a timeout so that the widget listeners are ready before Variable xhr call.
2106
- this.viewInit$.complete();
2107
- this.fragmentsLoaded$.subscribe(noop$1, noop$1, () => this.invokeOnReady());
2108
- }, 100);
2109
- });
2102
+ ngAfterViewChecked() {
2103
+ if (!this.scriptsLoaded && this.prefabContainerDirective) {
2104
+ this.scriptsLoaded = true;
2105
+ this.loadScripts().then(() => {
2106
+ this.compileContent = true;
2107
+ this.registerChangeListeners();
2108
+ setTimeout(() => {
2109
+ // trigger viewInit$.complete after a timeout so that the widget listeners are ready before Variable xhr call.
2110
+ this.viewInit$.complete();
2111
+ this.fragmentsLoaded$.subscribe(noop$1, noop$1, () => this.invokeOnReady());
2112
+ }, 100);
2113
+ });
2114
+ }
2110
2115
  }
2111
2116
  ngOnDestroy() {
2112
2117
  // MEMORY LEAK FIX: Unwatch all Prefab-scoped watchers for THIS specific prefab when prefab is destroyed
@@ -2150,7 +2155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2150
2155
  type: Directive
2151
2156
  }], propDecorators: { prefabContainerDirective: [{
2152
2157
  type: ViewChild,
2153
- args: [PrefabContainerDirective]
2158
+ args: [PrefabContainerDirective, { static: false }]
2154
2159
  }] } });
2155
2160
 
2156
2161
  class BaseLayoutComponent {
@@ -2903,9 +2908,6 @@ class BaseSpaPageComponent extends FragmentMonitor {
2903
2908
  // MEMORY LEAK FIX: Unwatch all Page-scoped watchers for THIS specific page when page is destroyed
2904
2909
  if (this.pageName) {
2905
2910
  $unwatchAllByScope('Page', this.pageName);
2906
- // if (removedCount > 0) {
2907
- // console.log(`🧹 Cleaned up ${removedCount} Page-scoped watcher(s) for page ${this.pageName}`);
2908
- // }
2909
2911
  }
2910
2912
  this.savePageSnapShot();
2911
2913
  // MEMORY LEAK FIX: Complete Subjects to release subscriptions
@@ -4917,18 +4919,19 @@ class HttpCallInterceptor {
4917
4919
  let apiUrl = _WM_APP_PROJECT.apiUrl + request.url;
4918
4920
  request = request.clone({ url: apiUrl });
4919
4921
  }
4920
- if (appManager && appManager.appOnBeforeServiceCall) {
4921
- // Convert the angular HttpRequest to wm HttpRequest
4922
- const req = this.wmHttpRequest.angularToWmRequest(request);
4923
- // trigger the common onBeforeServiceCall handler present in app.js
4924
- modifiedReq = appManager.appOnBeforeServiceCall(req);
4925
- if (modifiedReq) {
4926
- // Convert the wm HttpRequest to angular HttpRequest
4927
- modifiedReq = this.wmHttpRequest.wmToAngularRequest(modifiedReq);
4928
- request = modifiedReq;
4922
+ return from(Promise.resolve().then(() => {
4923
+ if (appManager && appManager.appOnBeforeServiceCall) {
4924
+ const wmReq = this.wmHttpRequest.angularToWmRequest(request);
4925
+ return appManager.appOnBeforeServiceCall(wmReq);
4929
4926
  }
4930
- }
4931
- return next.handle(request).pipe(tap((response) => {
4927
+ return null;
4928
+ }))
4929
+ .pipe(switchMap((receivedModifiedReq) => {
4930
+ if (receivedModifiedReq) {
4931
+ request = this.wmHttpRequest.wmToAngularRequest(receivedModifiedReq);
4932
+ }
4933
+ return next.handle(request);
4934
+ }), tap((response) => {
4932
4935
  if (response && response.type === 4 && appManager && appManager.appOnServiceSuccess) {
4933
4936
  // Convert the angular HttpResponse to wm HttpResponse
4934
4937
  const resp = this.wmHttpResponse.angularToWmResponse(response);