@veloceapps/sdk 3.0.16 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/bundles/veloce-sdk-cms.umd.js +74 -836
  2. package/bundles/veloce-sdk-cms.umd.js.map +1 -1
  3. package/bundles/veloce-sdk-core.umd.js +1269 -0
  4. package/bundles/veloce-sdk-core.umd.js.map +1 -0
  5. package/bundles/veloce-sdk-runtime.umd.js +53 -166
  6. package/bundles/veloce-sdk-runtime.umd.js.map +1 -1
  7. package/bundles/veloce-sdk.umd.js +322 -155
  8. package/bundles/veloce-sdk.umd.js.map +1 -1
  9. package/cms/cms.default.d.ts +1 -1
  10. package/cms/components/element-renderer/element-renderer.component.d.ts +1 -1
  11. package/cms/components/preview/preview.component.d.ts +1 -3
  12. package/cms/decorators/element.decorator.d.ts +2 -2
  13. package/cms/index.d.ts +1 -1
  14. package/cms/injection-tokens.d.ts +1 -1
  15. package/cms/launcher.module.d.ts +2 -3
  16. package/cms/plugins/script.plugin.d.ts +1 -0
  17. package/cms/services/launcher.service.d.ts +1 -1
  18. package/cms/types/common.types.d.ts +4 -9
  19. package/cms/types/configuration.types.d.ts +0 -5
  20. package/cms/types/index.d.ts +1 -2
  21. package/cms/types/path.types.d.ts +11 -0
  22. package/cms/utils/element.utils.d.ts +6 -5
  23. package/cms/utils/elements-resolver.d.ts +2 -1
  24. package/cms/utils/index.d.ts +3 -1
  25. package/cms/utils/path.utils.d.ts +2 -1
  26. package/cms/vendor-map.d.ts +677 -2
  27. package/core/core.module.d.ts +8 -0
  28. package/core/index.d.ts +6 -0
  29. package/{cms → core}/modules/configuration/configuration.module.d.ts +0 -0
  30. package/{cms → core}/modules/configuration/helpers.d.ts +1 -2
  31. package/{cms → core}/modules/configuration/index.d.ts +0 -1
  32. package/{cms → core}/modules/configuration/services/configuration-runtime.service.d.ts +2 -3
  33. package/{cms → core}/modules/configuration/services/configuration.service.d.ts +2 -2
  34. package/{cms → core}/modules/configuration/services/runtime-context.service.d.ts +1 -1
  35. package/{cms → core}/modules/configuration/types/configuration-runtime.types.d.ts +0 -0
  36. package/{cms → core}/modules/flow-configuration/flow-configuration.module.d.ts +0 -0
  37. package/{cms → core}/modules/flow-configuration/index.d.ts +0 -0
  38. package/{cms → core}/modules/flow-configuration/services/flow-configuration.service.d.ts +7 -4
  39. package/{cms → core}/modules/flow-configuration/services/flow-update.service.d.ts +0 -0
  40. package/{cms → core}/modules/flow-configuration/types/update.types.d.ts +0 -0
  41. package/{cms → core}/modules/index.d.ts +0 -0
  42. package/core/package.json +10 -0
  43. package/{runtime → core}/services/context.service.d.ts +0 -0
  44. package/core/services/index.d.ts +2 -0
  45. package/{runtime/services/quote.service.d.ts → core/services/quote-draft.service.d.ts} +11 -6
  46. package/core/types/index.d.ts +3 -0
  47. package/core/types/quote-states.types.d.ts +6 -0
  48. package/{runtime/types/runtime-context.types.d.ts → core/types/runtime.types.d.ts} +4 -5
  49. package/{cms → core}/types/ui-definition.types.d.ts +0 -4
  50. package/core/utils/index.d.ts +2 -0
  51. package/{cms → core}/utils/line-item.utils.d.ts +0 -2
  52. package/{cms/types/line-item.types.d.ts → core/utils/line-item.worker.d.ts} +0 -0
  53. package/core/veloce-sdk-core.d.ts +5 -0
  54. package/esm2015/cms/cms.default.js +1 -1
  55. package/esm2015/cms/components/element-renderer/element-renderer.component.js +3 -3
  56. package/esm2015/cms/components/preview/preview.component.js +9 -10
  57. package/esm2015/cms/decorators/element.decorator.js +1 -1
  58. package/esm2015/cms/index.js +1 -2
  59. package/esm2015/cms/injection-tokens.js +1 -1
  60. package/esm2015/cms/launcher.module.js +5 -6
  61. package/esm2015/cms/plugins/configuration.plugin.js +3 -4
  62. package/esm2015/cms/plugins/script.plugin.js +27 -14
  63. package/esm2015/cms/services/launcher.service.js +1 -1
  64. package/esm2015/cms/types/common.types.js +1 -1
  65. package/esm2015/cms/types/configuration.types.js +1 -1
  66. package/esm2015/cms/types/index.js +2 -3
  67. package/esm2015/cms/types/path.types.js +2 -0
  68. package/esm2015/cms/utils/element.utils.js +1 -1
  69. package/esm2015/cms/utils/elements-resolver.js +1 -1
  70. package/esm2015/cms/utils/index.js +4 -2
  71. package/esm2015/cms/utils/path.utils.js +11 -1
  72. package/esm2015/cms/vendor-map.js +6 -5
  73. package/esm2015/core/core.module.js +18 -0
  74. package/esm2015/core/index.js +7 -0
  75. package/esm2015/core/modules/configuration/configuration.module.js +34 -0
  76. package/esm2015/core/modules/configuration/helpers.js +10 -0
  77. package/esm2015/core/modules/configuration/index.js +5 -0
  78. package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +93 -0
  79. package/esm2015/core/modules/configuration/services/configuration.service.js +147 -0
  80. package/esm2015/core/modules/configuration/services/runtime-context.service.js +61 -0
  81. package/esm2015/core/modules/configuration/types/configuration-runtime.types.js +2 -0
  82. package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +18 -0
  83. package/esm2015/core/modules/flow-configuration/index.js +5 -0
  84. package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +90 -0
  85. package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +114 -0
  86. package/esm2015/core/modules/flow-configuration/types/update.types.js +2 -0
  87. package/esm2015/core/modules/index.js +3 -0
  88. package/esm2015/core/services/context.service.js +41 -0
  89. package/esm2015/core/services/index.js +3 -0
  90. package/esm2015/core/services/quote-draft.service.js +67 -0
  91. package/esm2015/core/types/index.js +4 -0
  92. package/esm2015/core/types/quote-states.types.js +2 -0
  93. package/esm2015/core/types/runtime.types.js +16 -0
  94. package/esm2015/core/types/ui-definition.types.js +2 -0
  95. package/esm2015/core/utils/index.js +3 -0
  96. package/esm2015/core/utils/line-item.utils.js +98 -0
  97. package/esm2015/core/utils/line-item.worker.js +19 -0
  98. package/esm2015/core/veloce-sdk-core.js +5 -0
  99. package/esm2015/runtime/components/component-preview/component-preview.component.js +2 -2
  100. package/esm2015/runtime/components/ui-runtime/runtime.component.js +10 -9
  101. package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +3 -3
  102. package/esm2015/runtime/execution/directives/section-script.directive.js +19 -20
  103. package/esm2015/runtime/execution/directives/velo-port.directive.js +1 -1
  104. package/esm2015/runtime/execution/directives/vl-quote.directive.js +1 -1
  105. package/esm2015/runtime/execution/directives/vl-ramp.directive.js +2 -2
  106. package/esm2015/runtime/execution/runtime-execution.module.js +6 -8
  107. package/esm2015/runtime/runtime.module.js +7 -9
  108. package/esm2015/runtime/services/cart.service.js +5 -6
  109. package/esm2015/runtime/services/configuration.service.js +9 -9
  110. package/esm2015/runtime/services/index.js +1 -3
  111. package/esm2015/runtime/services/runtime-context.service.js +4 -4
  112. package/esm2015/runtime/services/runtime.service.js +3 -3
  113. package/esm2015/runtime/types/index.js +1 -2
  114. package/esm2015/runtime/types/runtime.types.js +1 -1
  115. package/esm2015/src/components/dialog/dialog.component.js +30 -0
  116. package/esm2015/src/components/dialog/dialog.module.js +19 -0
  117. package/esm2015/src/components/dialog/dialog.types.js +2 -0
  118. package/esm2015/src/components/header/cart-overlay/cart-overlay.component.js +2 -2
  119. package/esm2015/src/components/header/header.component.js +51 -11
  120. package/esm2015/src/flow.component.js +2 -2
  121. package/esm2015/src/flow.module.js +33 -6
  122. package/esm2015/src/pages/debug/debug.component.js +14 -16
  123. package/esm2015/src/pages/legacy-product/legacy-product.component.js +12 -11
  124. package/esm2015/src/pages/product/product.component.js +12 -12
  125. package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +1 -1
  126. package/esm2015/src/resolvers/context.resolver.js +2 -2
  127. package/esm2015/src/resolvers/quote.resolver.js +9 -16
  128. package/esm2015/src/services/flow-router.service.js +2 -2
  129. package/esm2015/src/services/fow-dialog.service.js +58 -0
  130. package/esm2015/src/types/flow-customization.types.js +1 -1
  131. package/esm2015/src/utils/flow.utils.js +11 -1
  132. package/fesm2015/veloce-sdk-cms.js +64 -714
  133. package/fesm2015/veloce-sdk-cms.js.map +1 -1
  134. package/fesm2015/veloce-sdk-core.js +785 -0
  135. package/fesm2015/veloce-sdk-core.js.map +1 -0
  136. package/fesm2015/veloce-sdk-runtime.js +48 -144
  137. package/fesm2015/veloce-sdk-runtime.js.map +1 -1
  138. package/fesm2015/veloce-sdk.js +260 -99
  139. package/fesm2015/veloce-sdk.js.map +1 -1
  140. package/package.json +2 -2
  141. package/runtime/components/ui-runtime/runtime.component.d.ts +3 -3
  142. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +1 -1
  143. package/runtime/execution/directives/section-script.directive.d.ts +2 -3
  144. package/runtime/execution/directives/velo-port.directive.d.ts +2 -2
  145. package/runtime/execution/directives/vl-ramp.directive.d.ts +1 -1
  146. package/runtime/execution/runtime-execution.module.d.ts +2 -1
  147. package/runtime/runtime.module.d.ts +2 -1
  148. package/runtime/services/cart.service.d.ts +2 -3
  149. package/runtime/services/configuration.service.d.ts +4 -5
  150. package/runtime/services/index.d.ts +0 -2
  151. package/runtime/services/runtime-context.service.d.ts +3 -3
  152. package/runtime/services/runtime.service.d.ts +5 -6
  153. package/runtime/types/index.d.ts +0 -1
  154. package/runtime/types/runtime.types.d.ts +5 -6
  155. package/src/components/dialog/dialog.component.d.ts +13 -0
  156. package/src/components/dialog/dialog.module.d.ts +9 -0
  157. package/src/components/dialog/dialog.types.d.ts +6 -0
  158. package/src/components/header/cart-overlay/cart-overlay.component.d.ts +1 -1
  159. package/src/components/header/header.component.d.ts +10 -5
  160. package/src/flow.component.d.ts +1 -1
  161. package/src/flow.module.d.ts +3 -1
  162. package/src/pages/debug/debug.component.d.ts +3 -4
  163. package/src/pages/legacy-product/legacy-product.component.d.ts +4 -3
  164. package/src/pages/product/product.component.d.ts +3 -4
  165. package/src/pages/shopping-cart/shopping-cart.component.d.ts +1 -1
  166. package/src/resolvers/context.resolver.d.ts +1 -1
  167. package/src/resolvers/quote.resolver.d.ts +3 -4
  168. package/src/services/flow-router.service.d.ts +1 -1
  169. package/src/services/fow-dialog.service.d.ts +17 -0
  170. package/src/types/flow-customization.types.d.ts +1 -1
  171. package/src/utils/flow.utils.d.ts +2 -0
  172. package/cms/modules/configuration/types/configuration.types.d.ts +0 -15
  173. package/esm2015/cms/modules/configuration/configuration.module.js +0 -37
  174. package/esm2015/cms/modules/configuration/helpers.js +0 -10
  175. package/esm2015/cms/modules/configuration/index.js +0 -6
  176. package/esm2015/cms/modules/configuration/services/configuration-runtime.service.js +0 -93
  177. package/esm2015/cms/modules/configuration/services/configuration.service.js +0 -147
  178. package/esm2015/cms/modules/configuration/services/runtime-context.service.js +0 -61
  179. package/esm2015/cms/modules/configuration/types/configuration-runtime.types.js +0 -2
  180. package/esm2015/cms/modules/configuration/types/configuration.types.js +0 -2
  181. package/esm2015/cms/modules/flow-configuration/flow-configuration.module.js +0 -18
  182. package/esm2015/cms/modules/flow-configuration/index.js +0 -5
  183. package/esm2015/cms/modules/flow-configuration/services/flow-configuration.service.js +0 -83
  184. package/esm2015/cms/modules/flow-configuration/services/flow-update.service.js +0 -114
  185. package/esm2015/cms/modules/flow-configuration/types/update.types.js +0 -2
  186. package/esm2015/cms/modules/index.js +0 -3
  187. package/esm2015/cms/types/line-item.types.js +0 -19
  188. package/esm2015/cms/types/ui-definition.types.js +0 -2
  189. package/esm2015/cms/utils/line-item.utils.js +0 -107
  190. package/esm2015/runtime/services/context.service.js +0 -41
  191. package/esm2015/runtime/services/quote.service.js +0 -53
  192. package/esm2015/runtime/types/runtime-context.types.js +0 -16
@@ -18,7 +18,7 @@ import * as i2 from "../../services/form-scope.service";
18
18
  import * as i3 from "../../services/collapsible-state.service";
19
19
  import * as i4 from "../../services/runtime-form.service";
20
20
  import * as i5 from "../../services/runtime.service";
21
- import * as i6 from "../../services/context.service";
21
+ import * as i6 from "@veloce/sdk/core";
22
22
  import * as i7 from "@veloce/core";
23
23
  import * as i8 from "@veloce/components";
24
24
  import * as i9 from "../section-renderer/section-renderer.component";
@@ -300,9 +300,10 @@ export class RuntimeComponent {
300
300
  this.cdr.detectChanges();
301
301
  }
302
302
  handleSolutionFailedUpdate(error) {
303
+ var _a;
303
304
  const hasErrorMessage = EntityUtil.isPresent(error.error) && EntityUtil.isPresent(error.error.message);
304
305
  const message = hasErrorMessage ? error.error.message : 'Configuration failed';
305
- const { isHandlingConfigurationErrors } = this.runtimeContext.uiDefinition;
306
+ const { isHandlingConfigurationErrors } = (_a = this.runtimeContext.uiDefinition) !== null && _a !== void 0 ? _a : {};
306
307
  if (isHandlingConfigurationErrors) {
307
308
  this.messageService.add({ key: this.messageBucketId, summary: message });
308
309
  }
@@ -351,11 +352,11 @@ export class RuntimeComponent {
351
352
  this.sectionsService.destroy();
352
353
  }
353
354
  startRuntime() {
354
- var _a, _b;
355
+ var _a, _b, _c;
355
356
  const uiDefinition = this.runtimeContext.uiDefinition;
356
357
  const defaultTab = (_a = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.tabs) === null || _a === void 0 ? void 0 : _a.find(tab => tab.isDefault);
357
358
  this.activeUITab = EntityUtil.isPresent(defaultTab) ? defaultTab : (_b = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.tabs) === null || _b === void 0 ? void 0 : _b[0];
358
- this.sectionsService.compileModule(uiDefinition.sections, uiDefinition.isViewEncapsulated);
359
+ this.sectionsService.compileModule((_c = uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.sections) !== null && _c !== void 0 ? _c : [], uiDefinition === null || uiDefinition === void 0 ? void 0 : uiDefinition.isViewEncapsulated);
359
360
  this.processSolution();
360
361
  this.solutionIsReady = true;
361
362
  this.cdr.detectChanges();
@@ -368,12 +369,12 @@ export class RuntimeComponent {
368
369
  this.runtimeService.stopRuntime(lineItem);
369
370
  }
370
371
  processSolution(isUpdate, isError) {
371
- var _a;
372
+ var _a, _b, _c, _d, _e, _f;
372
373
  //1. Bind sections to solution
373
- let sections = EntityUtil.clone(this.runtimeContext.uiDefinition.sections);
374
- const sourceSections = EntityUtil.clone(this.runtimeContext.uiDefinition.sections);
374
+ let sections = (_b = EntityUtil.clone((_a = this.runtimeContext.uiDefinition) === null || _a === void 0 ? void 0 : _a.sections)) !== null && _b !== void 0 ? _b : [];
375
+ const sourceSections = (_d = EntityUtil.clone((_c = this.runtimeContext.uiDefinition) === null || _c === void 0 ? void 0 : _c.sections)) !== null && _d !== void 0 ? _d : [];
375
376
  this.updateLineItemsSectionPath(this.solutionLineItem);
376
- SectionsBinderHelper.setLineItemsPath(this.runtimeContext.runtimeModel, this.solutionLineItem, sections, sourceSections, (sec) => !sec.parentId && sec.boundData, (_a = this.runtimeContext.uiDefinition.pricingEnabled) !== null && _a !== void 0 ? _a : false);
377
+ SectionsBinderHelper.setLineItemsPath(this.runtimeContext.runtimeModel, this.solutionLineItem, sections, sourceSections, (sec) => !sec.parentId && sec.boundData, (_f = (_e = this.runtimeContext.uiDefinition) === null || _e === void 0 ? void 0 : _e.pricingEnabled) !== null && _f !== void 0 ? _f : false);
377
378
  sections = sections.filter(s => s.model && s.template);
378
379
  //2. Init form
379
380
  this.form = this.formService.initForm(sections, this.solutionLineItem);
@@ -426,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
426
427
  }] }, { type: i6.ContextService }, { type: i7.OrderByPipe }, { type: i7.SearchFilterPipe }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { solutionUpdated: [{
427
428
  type: Output
428
429
  }] } });
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL2NvbXBvbmVudHMvdWktcnVudGltZS9ydW50aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lL3J1bnRpbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBR0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBSWhCLElBQUksR0FDTCxNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FB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QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFdBQVcsRUFBRSx3QkFBd0I7b0JBQ3JDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixFQUFFLHdCQUF3QixDQUFDO29CQUNyRSxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3RGOzswQkF5QkksTUFBTTsyQkFBQyxjQUFjO2tLQVJHLGVBQWU7c0JBQXpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENoYXJnZUl0ZW0sXG4gIEVudGl0eVV0aWwsXG4gIExpbmVJdGVtLFxuICBPcmRlckJ5UGlwZSxcbiAgUHJpY2VBZGp1c3RtZW50LFxuICBTYWxlc2ZvcmNlSWRVdGlscyxcbiAgU2VhcmNoRmlsdGVyUGlwZSxcbiAgU2VjdGlvbixcbiAgU2VjdGlvblBhdGgsXG4gIFVJVGFiLFxuICBVVUlELFxufSBmcm9tICdAdmVsb2NlL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbGxhcHNpYmxlU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sbGFwc2libGUtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2NvcGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1zY29wZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bnRpbWVGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3J1bnRpbWUtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3Rpb25IZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdGlvbi1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTZWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZUNvbnRleHQsIFNvbHV0aW9uUmVhZHlBd2FyZSwgVXBkYXRlRGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJvdW5kRGF0YVR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9ib3VuZC1kYXRhLnR5cGVzJztcbmltcG9ydCB7IExpbmVJdGVtVXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL2xpbmUtaXRlbS51dGlsJztcbmltcG9ydCB7IGdldFNlY3Rpb25UcmVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2VjdGlvbi51dGlscyc7XG5pbXBvcnQgeyBTZWN0aW9uc0JpbmRlckhlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3NlY3Rpb25zLWJpbmRlci5oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1ydW50aW1lJyxcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgdGVtcGxhdGVVcmw6ICdydW50aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVudGltZS1sZWdhY3ktc3R5bGVzLnNjc3MnLCAncnVudGltZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGb3JtU2NvcGVTZXJ2aWNlLCBDb2xsYXBzaWJsZVN0YXRlU2VydmljZSwgT3JkZXJCeVBpcGUsIFNlYXJjaEZpbHRlclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFNvbHV0aW9uUmVhZHlBd2FyZSB7XG4gIHJlYWRvbmx5IG1lc3NhZ2VCdWNrZXRJZCA9ICd1aS5ydW50aW1lJztcblxuICBwdWJsaWMgc29ydGVkU2VjdGlvbnM6IFNlY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgc3RhdGljU2VjdGlvbnM6IFNlY3Rpb25bXSA9IFtdO1xuXG4gIHJ1bnRpbWVDb250ZXh0ITogUnVudGltZUNvbnRleHQ7XG4gIHNvbHV0aW9uTGluZUl0ZW0hOiBMaW5lSXRlbTtcbiAgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgYWN0aXZlVUlUYWI/OiBVSVRhYjtcblxuICBzb2x1dGlvbklzUmVhZHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBzb2x1dGlvblVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlY3Rpb25zU2VydmljZTogU2VjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNjb3BlOiBGb3JtU2NvcGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29sbGFwc2libGVTdGF0ZTogQ29sbGFwc2libGVTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogUnVudGltZUZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNlcnZpY2U6IFJ1bnRpbWVTZXJ2aWNlLFxuICAgIEBJbmplY3QoTWVzc2FnZVNlcnZpY2UpIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3JkZXJCeVBpcGU6IE9yZGVyQnlQaXBlLFxuICAgIHByaXZhdGUgc2VhcmNoRmlsdGVyUGlwZTogU2VhcmNoRmlsdGVyUGlwZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBwcml2YXRlIGFkanVzdFByaWNlKFxuICAgIHZhbHVlT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgc2VjdGlvbjogU2VjdGlvbixcbiAgICBzb2x1dGlvbkxpbmVJdGVtOiBMaW5lSXRlbSxcbiAgICBwYXRjaDogRGljdGlvbmFyeTxQcmljZUFkanVzdG1lbnQ+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICBpZiAoIXBhcmVudExpbmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLm1hcChsaW5lSXRlbSA9PiB7XG4gICAgICBjb25zdCB7IHByb2R1Y3RJZCwgY2hhcmdlSXRlbXMgfSA9IGxpbmVJdGVtO1xuXG4gICAgICBpZiAocHJvZHVjdElkICE9PSB2YWx1ZU9wdGlvbikge1xuICAgICAgICByZXR1cm4gbGluZUl0ZW07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoYXJnZUl0ZW0gPSBjaGFyZ2VJdGVtcy5zaGlmdCgpO1xuICAgICAgY29uc3QgdXBkYXRlZENoYXJnZUl0ZW0gPSB7XG4gICAgICAgIC4uLmNoYXJnZUl0ZW0sXG4gICAgICAgIC4uLnBhdGNoLFxuICAgICAgfSBhcyBDaGFyZ2VJdGVtO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW5lSXRlbSxcbiAgICAgICAgY2hhcmdlSXRlbXM6IFt1cGRhdGVkQ2hhcmdlSXRlbSwgLi4uY2hhcmdlSXRlbXNdLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVNjb3BlLmZvcm1TdWJtaXRFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChlOiBVcGRhdGVEYXRhKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICBjb25zdCBzb2x1dGlvbkxpbmVJdGVtID0gRW50aXR5VXRpbC5jbG9uZSh0aGlzLnNvbHV0aW9uTGluZUl0ZW0pO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZpbmRTZWN0aW9uKGUuaWQpO1xuXG4gICAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICAgIHRocm93ICdTZWN0aW9uIG5vdCBmb3VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IHNlY3Rpb24uYm91bmREYXRhLmVudGl0eVR5cGU7XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5QT1JUXSB8fCBlbnRpdHlUeXBlID09PSBCb3VuZERhdGFUeXBlW0JvdW5kRGF0YVR5cGUuVFlQRV0pIHtcbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdwYXRjaCcgJiYgRW50aXR5VXRpbC5pc1ByZXNlbnQoZS52YWx1ZU9wdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT3B0aW9uOiBhbnkgPSBlWyd2YWx1ZU9wdGlvbiddO1xuXG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24ubW9kZWw/LnBhcmVudElkKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29sbGFwc2libGVTdGF0ZS5jbGVhclN0YXRlKHNlY3Rpb24uaWQpO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUodmFsdWVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5wYXJlbnRJZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmR4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHNlY3Rpb24ubW9kZWw/LmlkKTtcblxuICAgICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5zcGxpY2UoaW5keCwgMSwgdmFsdWVPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVN0YXRlLmNsZWFyU3RhdGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5QT1JUXSkge1xuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3Vwc2VydCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSBpLnR5cGUudG9Mb3dlckNhc2UoKSkgPCAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGksIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtcyA9IHBhcmVudExpbmVJdGVtPy5saW5lSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIGkgPT5cbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSBpLnR5cGUudG9Mb3dlckNhc2UoKSkgPiAtMSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucz8uZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobGluZUl0ZW1zPy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gdi50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVMaW5lSXRlbShzZWN0aW9uLCB2LCBwYXJlbnRMaW5lSXRlbSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZU9wdGlvbiA9IGUudmFsdWVPcHRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVMaW5lSXRlbShzZWN0aW9uLCB2YWx1ZU9wdGlvbiwgcGFyZW50TGluZUl0ZW0pO1xuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMucHVzaChsaW5lSXRlbSk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdjb3B5Jykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVPcHRpb24gPSBlLnZhbHVlT3B0aW9uO1xuICAgICAgICAgICAgICBjb25zdCBsaW5lSXRlbVRvQ29weSA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kKGxpID0+IGxpLmlkID09PSB2YWx1ZU9wdGlvbik7XG4gICAgICAgICAgICAgIGlmIChsaW5lSXRlbVRvQ29weSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtOiBMaW5lSXRlbSA9IHsgLi4ubGluZUl0ZW1Ub0NvcHksIGlkOiAnJyB9O1xuICAgICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGxpbmVJdGVtKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIC8vQXNzdW1pbmcgdGhhdCByYWRpbyBjb250cm9sIGlzIHRoZSBvbmx5IGNvbnRyb2wsIHRoYXQgJ3VwZGF0ZXMnIHZhbHVlc1xuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHNlY3Rpb24ubW9kZWw/LmxpbmVJdGVtcy5maWx0ZXIobGkgPT4gbGkucG9ydCAmJiBsaS5wb3J0ID09PSBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lKVswXTtcblxuICAgICAgICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIHByZXZpb3VzLCAwKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChsaSA9PiBsaS5pZCA9PT0gcHJldmlvdXM/LmlkKTtcblxuICAgICAgICAgICAgICBjb25zdCBsaW5lSXRlbTogTGluZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgICAgICAgICAgIHF0eTogcHJldmlvdXM/LnF0eSxcbiAgICAgICAgICAgICAgICBwb3J0OiBwcmV2aW91cz8ucG9ydCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFbnRpdHlVdGlsLmlzUHJlc2VudChlLnZhbHVlT3B0aW9uKSA/IGUudmFsdWVPcHRpb24gOiB0aGlzLmZvcm0uY29udHJvbHNbZS5pZF0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2ZnU3RhdHVzOiAnTmV3JyxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogcHJldmlvdXM/LnBhcmVudElkLFxuICAgICAgICAgICAgICB9IGFzIExpbmVJdGVtO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXNbaW5kZXhdID0gbGluZUl0ZW07XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbSAmJlxuICAgICAgICAgICAgICBTZWN0aW9uc0JpbmRlckhlbHBlci5pc1JlbW92ZUFsbG93ZWQocGFyZW50TGluZUl0ZW0sIHNlY3Rpb24uYm91bmREYXRhLm5hbWUsIHNlY3Rpb24ubW9kZWw/LnF0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZS52YWx1ZU9wdGlvbj8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCByZW1vdmVkLCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdxdHlVcGRhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGUudmFsdWVPcHRpb25cbiAgICAgICAgICAgICAgPyBTZWN0aW9uSGVscGVyU2VydmljZS5maW5kU2VjdGlvbkZvclZhbHVlKHNlY3Rpb24sIGUudmFsdWVPcHRpb24pXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlTGluZUl0ZW0gPSB0eXBlU2VjdGlvbj8ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHR5cGVTZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuICAgICAgICAgICAgaWYgKHR5cGVTZWN0aW9uICYmIHR5cGVMaW5lSXRlbSkge1xuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0ucXR5ID0gK3RoaXMuZm9ybS5jb250cm9sc1t0eXBlU2VjdGlvbi5pZCArICdxdHknXS52YWx1ZTtcbiAgICAgICAgICAgICAgdHlwZUxpbmVJdGVtLmNmZ1N0YXR1cyA9ICdVc2VyJztcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ2FkanVzdE5ldFByaWNlJykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZU9wdGlvbiwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgICAgIGNvbnN0IHsgYW1vdW50IH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBwcmljZUFkanVzdG1lbnQ6IFByaWNlQWRqdXN0bWVudCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ09WRVJSSURFX0FNT1VOVCcsXG4gICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiAnTWFudWFsIG5ldCBwcmljZSBhZGp1c3RtZW50JyxcbiAgICAgICAgICAgICAgYW1vdW50LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RQcmljZSh2YWx1ZU9wdGlvbiwgc2VjdGlvbiwgc29sdXRpb25MaW5lSXRlbSwgeyBwcmljZUFkanVzdG1lbnQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAnYWRqdXN0TGlzdFByaWNlJykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZU9wdGlvbiwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgICAgIGNvbnN0IHsgYW1vdW50IH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBsaXN0UHJpY2VBZGp1c3RtZW50OiBQcmljZUFkanVzdG1lbnQgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdPVkVSUklERV9BTU9VTlQnLFxuICAgICAgICAgICAgICBleHBsYW5hdGlvbjogJ01hbnVhbCBsaXN0IHByaWNlIGFkanVzdG1lbnQnLFxuICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFkanVzdFByaWNlKHZhbHVlT3B0aW9uLCBzZWN0aW9uLCBzb2x1dGlvbkxpbmVJdGVtLCB7IGxpc3RQcmljZUFkanVzdG1lbnQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5UWVBFXSkge1xuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID1cbiAgICAgICAgICAgICAgc2VjdGlvbi5tb2RlbD8ucGFyZW50SWQgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwucGFyZW50SWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcGFyZW50TGluZUl0ZW0gJiZcbiAgICAgICAgICAgICAgc2VjdGlvbi5tb2RlbCAmJlxuICAgICAgICAgICAgICBzZWN0aW9uLm1vZGVsLnBvcnQgJiZcbiAgICAgICAgICAgICAgU2VjdGlvbnNCaW5kZXJIZWxwZXIuaXNSZW1vdmVBbGxvd2VkKHBhcmVudExpbmVJdGVtLCBzZWN0aW9uLm1vZGVsLnBvcnQsIHNlY3Rpb24ubW9kZWw/LnF0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBzZWN0aW9uLm1vZGVsPy5pZCk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgcmVtb3ZlZCwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVN0YXRlLmNsZWFyU3RhdGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAncXR5VXBkYXRlJykge1xuICAgICAgICAgICAgY29uc3QgdHlwZUxpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVMaW5lSXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCBxdHkgPSArdGhpcy5mb3JtLmNvbnRyb2xzW2UuaWQgKyAncXR5J10udmFsdWU7XG4gICAgICAgICAgICAgIGlmICh0eXBlTGluZUl0ZW0ucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IExpbmVJdGVtVXRpbC5maW5kQnlJZCh0eXBlTGluZUl0ZW0ucGFyZW50SWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgdHlwZUxpbmVJdGVtLCBxdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0ucXR5ID0gcXR5O1xuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0uY2ZnU3RhdHVzID0gJ1VzZXInO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5BVFRSSUJVVEVdKSB7XG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gcGFyZW50TGluZUl0ZW0/LmF0dHJpYnV0ZXMuZmluZChcbiAgICAgICAgICAgICAgYXR0ciA9PiBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbi5ib3VuZERhdGEubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAvL0V4cGxpY2l0bHkgc2V0IHZhbHVlIGFsd2F5cyB3aW5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdHlwZW9mIGUudmFsdWVPcHRpb24gIT09ICd1bmRlZmluZWQnID8gZS52YWx1ZU9wdGlvbiA6IHRoaXMuZm9ybS5jb250cm9sc1tlLmlkXS52YWx1ZTtcblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnR5cGUgPT09ICdCT09MRUFOJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuY2ZnU3RhdHVzID0gJ1VzZXInO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsga2V5OiB0aGlzLm1lc3NhZ2VCdWNrZXRJZCwgc3VtbWFyeTogYENvbmZpZ3VyYXRpb24gZmFpbGVkICR7KGUgYXMgYW55KT8ubWVzc2FnZX1gIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5vblNvbHV0aW9uUmVhZHlFdmVudFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShsaW5lSXRlbSA9PiB0aGlzLm9uU29sdXRpb25SZWFkeShsaW5lSXRlbSkpO1xuXG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5vblNvbHV0aW9uVXBkYXRlZEV2ZW50XG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBMaW5lSXRlbSB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTb2x1dGlvblVwZGF0ZShkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlU29sdXRpb25GYWlsZWRVcGRhdGUoZGF0YSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucnVudGltZVNlcnZpY2Uub25VSVJlZnJlc2hFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgdWlEZWZpbml0aW9uIH0gPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLmdldFJ1bnRpbWVDb250ZXh0KCkgPz8ge307XG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbiA9IHVpRGVmaW5pdGlvbiBhcyBhbnk7XG4gICAgICB0aGlzLmZvcm1TY29wZS5zY3JpcHRTZXNzaW9uU2NvcGUgPSB7fTtcbiAgICAgIHRoaXMuc3RhcnRSdW50aW1lKCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNvbHV0aW9uUmVhZHkobGluZUl0ZW06IExpbmVJdGVtKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UuZ2V0UnVudGltZUNvbnRleHQoKSBhcyBSdW50aW1lQ29udGV4dDtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uQ29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQ29udGV4dDogUnVudGltZUNvbnRleHQgPSB7XG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgIC4uLmNvbmZpZ3VyYXRpb25Db250ZXh0LnByb3BlcnRpZXMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50SWQgPSBtZXJnZUNvbnRleHQucHJvcGVydGllcz8uQWNjb3VudElkO1xuICAgIGlmIChhY2NvdW50SWQgJiYgYWNjb3VudElkLmxlbmd0aCA9PT0gMTUpIHtcbiAgICAgIHRoaXMucnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgIC4uLm1lcmdlQ29udGV4dCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLm1lcmdlQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAgIEFjY291bnRJZDogU2FsZXNmb3JjZUlkVXRpbHMuZ2VuZXJhdGVJZDE4RnJvbUlkMTUoYWNjb3VudElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgYW55O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0ID0gbWVyZ2VDb250ZXh0IGFzIGFueTtcbiAgICB9XG5cbiAgICB0aGlzLnNvbHV0aW9uTGluZUl0ZW0gPSBsaW5lSXRlbTtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnNldFJ1bnRpbWVDb250ZXh0KHRoaXMucnVudGltZUNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGFydFJ1bnRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU29sdXRpb25VcGRhdGUodXBkYXRlZExpbmVJdGVtOiBMaW5lSXRlbSkge1xuICAgIHRoaXMuc29sdXRpb25MaW5lSXRlbSA9IHVwZGF0ZWRMaW5lSXRlbTtcbiAgICB0aGlzLnByb2Nlc3NTb2x1dGlvbih0cnVlKTtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnNvbHV0aW9uUHJvY2Vzc2VkKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTb2x1dGlvbkZhaWxlZFVwZGF0ZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNFcnJvck1lc3NhZ2UgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChlcnJvci5lcnJvcikgJiYgRW50aXR5VXRpbC5pc1ByZXNlbnQoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGhhc0Vycm9yTWVzc2FnZSA/IGVycm9yLmVycm9yLm1lc3NhZ2UgOiAnQ29uZmlndXJhdGlvbiBmYWlsZWQnO1xuICAgIGNvbnN0IHsgaXNIYW5kbGluZ0NvbmZpZ3VyYXRpb25FcnJvcnMgfSA9IHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uO1xuXG4gICAgaWYgKGlzSGFuZGxpbmdDb25maWd1cmF0aW9uRXJyb3JzKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlQnVja2V0SWQsIHN1bW1hcnk6IG1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb2x1dGlvbkxpbmVJdGVtID0ge1xuICAgICAgLi4udGhpcy5zb2x1dGlvbkxpbmVJdGVtLFxuICAgICAgbWVzc2FnZXM6IFsuLi50aGlzLnNvbHV0aW9uTGluZUl0ZW0ubWVzc2FnZXMsIGBFOiR7bWVzc2FnZX1gXSxcbiAgICB9O1xuICAgIHRoaXMucHJvY2Vzc1NvbHV0aW9uKHRydWUsIHRydWUpO1xuICAgIHRoaXMucnVudGltZVNlcnZpY2Uuc29sdXRpb25Qcm9jZXNzZWQodGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnQ6IExpbmVJdGVtLCB1cGRhdGVkOiBMaW5lSXRlbSwgbmV3UXVhbnRpdHk/OiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3J0RG9tYWluID0gdXBkYXRlZC5wb3J0ID8gcGFyZW50LnBvcnREb21haW5zW3VwZGF0ZWQucG9ydF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZG9tYWluVHlwZSA9IHBvcnREb21haW4/LmRvbWFpblR5cGVzLmZpbmQodCA9PiB0Lm5hbWUgPT09IHVwZGF0ZWQudHlwZSk7XG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSBkb21haW5UeXBlPy5jYXJkaW5hbGl0eSA/PyAwO1xuXG4gICAgbGV0IHF0eTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkb21haW5UeXBlPy5jYXJkaW5hbGl0eSkpIHtcbiAgICAgIHF0eSA9IE51bWJlci5pc0Zpbml0ZShuZXdRdWFudGl0eSkgPyBuZXdRdWFudGl0eSA6IHVwZGF0ZWQucXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBxdHkgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChuZXdRdWFudGl0eSlcbiAgICAgICAgPyBjYXJkaW5hbGl0eSAtIHVwZGF0ZWQucXR5ICsgKG5ld1F1YW50aXR5IGFzIG51bWJlcilcbiAgICAgICAgOiBjYXJkaW5hbGl0eSArIHVwZGF0ZWQucXR5O1xuICAgIH1cblxuICAgIGNvbnN0IGNhcmRpbmFsaXR5TmFtZSA9ICcjQ1YtJyArIHVwZGF0ZWQudHlwZSArICdAJyArIHVwZGF0ZWQucG9ydDtcblxuICAgIGxldCBjYXJkaW5hbGl0eVZhcmlhYmxlID0gcGFyZW50LmF0dHJpYnV0ZXMuZmluZChhID0+IGEubmFtZSA9PT0gY2FyZGluYWxpdHlOYW1lKTtcbiAgICBpZiAoIWNhcmRpbmFsaXR5VmFyaWFibGUpIHtcbiAgICAgIGNhcmRpbmFsaXR5VmFyaWFibGUgPSB7XG4gICAgICAgIGlkOiBVVUlELlVVSUQoKSxcbiAgICAgICAgbmFtZTogY2FyZGluYWxpdHlOYW1lLFxuICAgICAgfSBhcyBBdHRyaWJ1dGU7XG4gICAgICBwYXJlbnQuYXR0cmlidXRlcy5wdXNoKGNhcmRpbmFsaXR5VmFyaWFibGUpO1xuICAgIH1cbiAgICBjYXJkaW5hbGl0eVZhcmlhYmxlLnZhbHVlID0gcXR5O1xuICAgIGNhcmRpbmFsaXR5VmFyaWFibGUuY2ZnU3RhdHVzID0gJ1VzZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaW5lSXRlbShzZWN0aW9uOiBTZWN0aW9uLCB2YWx1ZU9wdGlvbj86IHN0cmluZywgcGFyZW50TGluZUl0ZW0/OiBMaW5lSXRlbSk6IExpbmVJdGVtIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXR5OiArdGhpcy5mb3JtLmNvbnRyb2xzW3NlY3Rpb24uaWQgKyAncXR5J10udmFsdWUsXG4gICAgICBwb3J0OiBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lLFxuICAgICAgdHlwZTogRW50aXR5VXRpbC5pc1ByZXNlbnQodmFsdWVPcHRpb24pID8gdmFsdWVPcHRpb24gOiB0aGlzLmZvcm0uY29udHJvbHNbc2VjdGlvbi5pZF0udmFsdWUsXG4gICAgICBjZmdTdGF0dXM6ICdOZXcnLFxuICAgICAgcGFyZW50SWQ6IHBhcmVudExpbmVJdGVtPy5pZCxcbiAgICB9IGFzIExpbmVJdGVtO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XG5cbiAgICB0aGlzLnNlY3Rpb25zU2VydmljZS5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UnVudGltZSgpIHtcbiAgICBjb25zdCB1aURlZmluaXRpb24gPSB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbjtcblxuICAgIGNvbnN0IGRlZmF1bHRUYWIgPSB1aURlZmluaXRpb24/LnRhYnM/LmZpbmQodGFiID0+IHRhYi5pc0RlZmF1bHQpO1xuICAgIHRoaXMuYWN0aXZlVUlUYWIgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIgOiB1aURlZmluaXRpb24/LnRhYnM/LlswXTtcblxuICAgIHRoaXMuc2VjdGlvbnNTZXJ2aWNlLmNvbXBpbGVNb2R1bGUodWlEZWZpbml0aW9uLnNlY3Rpb25zLCB1aURlZmluaXRpb24uaXNWaWV3RW5jYXBzdWxhdGVkKTtcblxuICAgIHRoaXMucHJvY2Vzc1NvbHV0aW9uKCk7XG5cbiAgICB0aGlzLnNvbHV0aW9uSXNSZWFkeSA9IHRydWU7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJ1bnRpbWUobGluZUl0ZW06IExpbmVJdGVtKSB7XG4gICAgdGhpcy5zb2x1dGlvblVwZGF0ZWQuZW1pdChsaW5lSXRlbSk7XG4gIH1cblxuICBhZGRUb0NhcnQoKSB7XG4gICAgY29uc3QgbGluZUl0ZW0gPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG5cbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnN0b3BSdW50aW1lKGxpbmVJdGVtKTtcbiAgfVxuXG4gIHByb2Nlc3NTb2x1dGlvbihpc1VwZGF0ZT86IGJvb2xlYW4sIGlzRXJyb3I/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8xLiBCaW5kIHNlY3Rpb25zIHRvIHNvbHV0aW9uXG4gICAgbGV0IHNlY3Rpb25zID0gRW50aXR5VXRpbC5jbG9uZSh0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbi5zZWN0aW9ucyk7XG4gICAgY29uc3Qgc291cmNlU2VjdGlvbnMgPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uLnNlY3Rpb25zKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVJdGVtc1NlY3Rpb25QYXRoKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG4gICAgU2VjdGlvbnNCaW5kZXJIZWxwZXIuc2V0TGluZUl0ZW1zUGF0aChcbiAgICAgIHRoaXMucnVudGltZUNvbnRleHQucnVudGltZU1vZGVsLFxuICAgICAgdGhpcy5zb2x1dGlvbkxpbmVJdGVtLFxuICAgICAgc2VjdGlvbnMsXG4gICAgICBzb3VyY2VTZWN0aW9ucyxcbiAgICAgIChzZWM6IGFueSkgPT4gIXNlYy5wYXJlbnRJZCAmJiBzZWMuYm91bmREYXRhLFxuICAgICAgdGhpcy5ydW50aW1lQ29udGV4dC51aURlZmluaXRpb24ucHJpY2luZ0VuYWJsZWQgPz8gZmFsc2UsXG4gICAgKTtcblxuICAgIHNlY3Rpb25zID0gc2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5tb2RlbCAmJiBzLnRlbXBsYXRlKTtcblxuICAgIC8vMi4gSW5pdCBmb3JtXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtU2VydmljZS5pbml0Rm9ybShzZWN0aW9ucywgdGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcbiAgICB0aGlzLmZvcm1TY29wZS5mb3JtID0gdGhpcy5mb3JtO1xuXG4gICAgdGhpcy5zb3J0ZWRTZWN0aW9ucyA9IHRoaXMuZmlsdGVyQW5kU29ydChnZXRTZWN0aW9uVHJlZShzZWN0aW9ucy5maWx0ZXIocyA9PiAhcy5pc1N0YXRpYykpKTtcblxuICAgIGlmICghaXNVcGRhdGUpIHtcbiAgICAgIHRoaXMuc3RhdGljU2VjdGlvbnMgPSB0aGlzLmZpbHRlckFuZFNvcnQoZ2V0U2VjdGlvblRyZWUoc2VjdGlvbnMuZmlsdGVyKHMgPT4gcy5pc1N0YXRpYykpKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXJyb3IpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY2xlYXIodGhpcy5tZXNzYWdlQnVja2V0SWQpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLmNhbmNlbFJ1bnRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUl0ZW1zU2VjdGlvblBhdGgobGluZUl0ZW06IExpbmVJdGVtLCBwYXJlbnQ/OiBTZWN0aW9uUGF0aCkge1xuICAgIGNvbnN0IHBhdGg6IFNlY3Rpb25QYXRoID0ge1xuICAgICAgdHlwZXM6IHBhcmVudCA/IHBhcmVudC50eXBlcy5jb25jYXQoW2xpbmVJdGVtLnR5cGVdKSA6IFtsaW5lSXRlbS50eXBlXSxcbiAgICAgIHBvcnRzOiBwYXJlbnQgPyBwYXJlbnQucG9ydHMuY29uY2F0KGxpbmVJdGVtLnBvcnQgPyBbbGluZUl0ZW0ucG9ydF0gOiBbXSkgOiBbXSxcbiAgICB9IGFzIFNlY3Rpb25QYXRoO1xuXG4gICAgbGluZUl0ZW0ucGF0aCA9IHBhdGg7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGxpbmVJdGVtLmxpbmVJdGVtcykge1xuICAgICAgdGhpcy51cGRhdGVMaW5lSXRlbXNTZWN0aW9uUGF0aChjaGlsZCwgbGluZUl0ZW0ucGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBbmRTb3J0KHNlY3Rpb25zOiBTZWN0aW9uW10pOiBTZWN0aW9uW10ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5zZWFyY2hGaWx0ZXJQaXBlLnRyYW5zZm9ybShzZWN0aW9ucywgdGhpcy5hY3RpdmVVSVRhYj8uaWQsICdwYWdlJyk7XG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMub3JkZXJCeVBpcGUudHJhbnNmb3JtKGZpbHRlcmVkLCAnb3JkZXInLCAnYXNjJyk7XG5cbiAgICByZXR1cm4gb3JkZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFNlY3Rpb24oaWQ6IHN0cmluZyk6IFNlY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBFbnRpdHlVdGlsLmZpbmRCeUZpZWxkSGllcmFyY2hpY2FsbHkoJ2lkJywgaWQsIFsuLi50aGlzLnNvcnRlZFNlY3Rpb25zLCAuLi50aGlzLnN0YXRpY1NlY3Rpb25zXSwgJ2NoaWxkcmVuJyk7XG4gIH1cbn1cbiIsIjx2bC1sb2FkZXIgbGFiZWw9XCJMb2FkaW5nIFVJXCIgKm5nSWY9XCIhc29sdXRpb25Jc1JlYWR5OyBlbHNlIGNvbnRlbnRcIj48L3ZsLWxvYWRlcj5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8IS0tIFRPRE86IEFkZCB2YWxpZGF0aW9uIG1lc3NhZ2VzIC0tPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cInNpZGViYXItdGFic1wiXG4gICAgW25nQ2xhc3NdPVwieyBoaWRkZW46ICFydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uPy5kZWZhdWx0UGFuZWxzIH1cIlxuICAgICN1aVRhYnM9XCJzaWRlYmFyVGFic1wiXG4gICAgc2lkZWJhclRhYnM9XCJ7eyBhY3RpdmVVSVRhYj8uaWQgfX1cIlxuICAgIGlkPVwidmwtZGVmYXVsdC1zaWRlYmFyLXRhYnNcIlxuICA+XG4gICAgPHVsPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgcnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbj8udGFicyB8IG9yZGVyQnk6ICdvcmRlcic6J2FzYydcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogdWlUYWJzLmFjdGl2ZVRhYiA9PT0gdGFiLmlkIH1cIlxuICAgICAgICAoY2xpY2spPVwidWlUYWJzLnN3aXRjaFRhYih0YWIuaWQpXCJcbiAgICAgID5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIj57eyB0YWIubmFtZSB9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLXdyYXBwZXJcIj5cbiAgICA8Zm9ybSByb2xlPVwiZm9ybVwiIG5hbWU9XCJmb3JtXCIgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBub3ZhbGlkYXRlIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzdGF0aWNTZWN0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbi5tb2RlbCAmJiBzZWN0aW9uLnRlbXBsYXRlICYmICFzZWN0aW9uLmhpZGRlblwiPlxuICAgICAgICAgIDx2bC1zZWN0aW9uLXJlbmRlcmVyIFtzZWN0aW9uXT1cInNlY3Rpb25cIiBbZm9ybV09XCJmb3JtXCI+PC92bC1zZWN0aW9uLXJlbmRlcmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNvcnRlZFNlY3Rpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uLm1vZGVsICYmIHNlY3Rpb24udGVtcGxhdGUgJiYgIXNlY3Rpb24uaGlkZGVuXCI+XG4gICAgICAgICAgPHZsLXNlY3Rpb24tcmVuZGVyZXIgW3NlY3Rpb25dPVwic2VjdGlvblwiIFtmb3JtXT1cImZvcm1cIj48L3ZsLXNlY3Rpb24tcmVuZGVyZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mb3JtPlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1mb290ZXJcIlxuICAgICAgKm5nSWY9XCJydW50aW1lQ29udGV4dD8ucnVudGltZU1vZGUgPT09IDFcIlxuICAgICAgaWQ9XCJ2bC1ydW50aW1lLWRlZmF1bHQtZm9vdGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiAhcnVudGltZUNvbnRleHQ/LnVpRGVmaW5pdGlvbj8uZGVmYXVsdFBhbmVscyB9XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGlucHV0LWZvcm0taW5wdXRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIChjbGljayk9XCJmb3JtLnZhbGlkICYmIGFkZFRvQ2FydCgpXCIgaWQ9XCJhZGQtdG8tY2FydC1idG5cIlxuICAgICAgICAgID5BZGQgdG8gY2FydDwvYVxuICAgICAgICA+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmtcIiAoY2xpY2spPVwiaGlkZU1vZGFsKClcIiBpZD1cImNhbmNlbC1idG5cIj5DYW5jZWw8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICAgIDwhLS0gVE9ETzogQWRkIHZhbGlkYXRpb24gbWVzc2FnZXMgLS0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9ydW50aW1lL2NvbXBvbmVudHMvdWktcnVudGltZS9ydW50aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lL3J1bnRpbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBR0wsVUFBVSxFQUVWLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBSWhCLElBQUksR0FDTCxNQUFNLGNBQWMsQ0FBQztBQUd0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FB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QUFnQix3TEF3QmpCLGNBQWM7a0dBeEJiLGdCQUFnQixzRkFGaEIsQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsMEJDdkN2Riw2b0VBeURBOzRGRGhCYSxnQkFBZ0I7a0JBUDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsV0FBVyxFQUFFLHdCQUF3QjtvQkFDckMsU0FBUyxFQUFFLENBQUMsOEJBQThCLEVBQUUsd0JBQXdCLENBQUM7b0JBQ3JFLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDdEY7OzBCQXlCSSxNQUFNOzJCQUFDLGNBQWM7a0tBUkcsZUFBZTtzQkFBekMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQ2hhcmdlSXRlbSxcbiAgRW50aXR5VXRpbCxcbiAgTGluZUl0ZW0sXG4gIE9yZGVyQnlQaXBlLFxuICBQcmljZUFkanVzdG1lbnQsXG4gIFNhbGVzZm9yY2VJZFV0aWxzLFxuICBTZWFyY2hGaWx0ZXJQaXBlLFxuICBTZWN0aW9uLFxuICBTZWN0aW9uUGF0aCxcbiAgVUlUYWIsXG4gIFVVSUQsXG59IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2Uvc2RrL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbGxhcHNpYmxlU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sbGFwc2libGUtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2NvcGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1zY29wZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bnRpbWVGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3J1bnRpbWUtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3Rpb25IZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdGlvbi1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTZWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGVnYWN5UnVudGltZUNvbnRleHQsIFNvbHV0aW9uUmVhZHlBd2FyZSwgVXBkYXRlRGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEJvdW5kRGF0YVR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9ib3VuZC1kYXRhLnR5cGVzJztcbmltcG9ydCB7IExpbmVJdGVtVXRpbCB9IGZyb20gJy4uLy4uL3V0aWxzL2xpbmUtaXRlbS51dGlsJztcbmltcG9ydCB7IGdldFNlY3Rpb25UcmVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2VjdGlvbi51dGlscyc7XG5pbXBvcnQgeyBTZWN0aW9uc0JpbmRlckhlbHBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3NlY3Rpb25zLWJpbmRlci5oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1ydW50aW1lJyxcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgdGVtcGxhdGVVcmw6ICdydW50aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVudGltZS1sZWdhY3ktc3R5bGVzLnNjc3MnLCAncnVudGltZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGb3JtU2NvcGVTZXJ2aWNlLCBDb2xsYXBzaWJsZVN0YXRlU2VydmljZSwgT3JkZXJCeVBpcGUsIFNlYXJjaEZpbHRlclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFNvbHV0aW9uUmVhZHlBd2FyZSB7XG4gIHJlYWRvbmx5IG1lc3NhZ2VCdWNrZXRJZCA9ICd1aS5ydW50aW1lJztcblxuICBwdWJsaWMgc29ydGVkU2VjdGlvbnM6IFNlY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgc3RhdGljU2VjdGlvbnM6IFNlY3Rpb25bXSA9IFtdO1xuXG4gIHJ1bnRpbWVDb250ZXh0ITogTGVnYWN5UnVudGltZUNvbnRleHQ7XG4gIHNvbHV0aW9uTGluZUl0ZW0hOiBMaW5lSXRlbTtcbiAgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgYWN0aXZlVUlUYWI/OiBVSVRhYjtcblxuICBzb2x1dGlvbklzUmVhZHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgcHJpdmF0ZSByZWFkb25seSBzb2x1dGlvblVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlY3Rpb25zU2VydmljZTogU2VjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNjb3BlOiBGb3JtU2NvcGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29sbGFwc2libGVTdGF0ZTogQ29sbGFwc2libGVTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogUnVudGltZUZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNlcnZpY2U6IFJ1bnRpbWVTZXJ2aWNlLFxuICAgIEBJbmplY3QoTWVzc2FnZVNlcnZpY2UpIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3JkZXJCeVBpcGU6IE9yZGVyQnlQaXBlLFxuICAgIHByaXZhdGUgc2VhcmNoRmlsdGVyUGlwZTogU2VhcmNoRmlsdGVyUGlwZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBwcml2YXRlIGFkanVzdFByaWNlKFxuICAgIHZhbHVlT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgc2VjdGlvbjogU2VjdGlvbixcbiAgICBzb2x1dGlvbkxpbmVJdGVtOiBMaW5lSXRlbSxcbiAgICBwYXRjaDogRGljdGlvbmFyeTxQcmljZUFkanVzdG1lbnQ+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICBpZiAoIXBhcmVudExpbmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLm1hcChsaW5lSXRlbSA9PiB7XG4gICAgICBjb25zdCB7IHByb2R1Y3RJZCwgY2hhcmdlSXRlbXMgfSA9IGxpbmVJdGVtO1xuXG4gICAgICBpZiAocHJvZHVjdElkICE9PSB2YWx1ZU9wdGlvbikge1xuICAgICAgICByZXR1cm4gbGluZUl0ZW07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoYXJnZUl0ZW0gPSBjaGFyZ2VJdGVtcy5zaGlmdCgpO1xuICAgICAgY29uc3QgdXBkYXRlZENoYXJnZUl0ZW0gPSB7XG4gICAgICAgIC4uLmNoYXJnZUl0ZW0sXG4gICAgICAgIC4uLnBhdGNoLFxuICAgICAgfSBhcyBDaGFyZ2VJdGVtO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW5lSXRlbSxcbiAgICAgICAgY2hhcmdlSXRlbXM6IFt1cGRhdGVkQ2hhcmdlSXRlbSwgLi4uY2hhcmdlSXRlbXNdLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVNjb3BlLmZvcm1TdWJtaXRFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChlOiBVcGRhdGVEYXRhKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICBjb25zdCBzb2x1dGlvbkxpbmVJdGVtID0gRW50aXR5VXRpbC5jbG9uZSh0aGlzLnNvbHV0aW9uTGluZUl0ZW0pO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZpbmRTZWN0aW9uKGUuaWQpO1xuXG4gICAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICAgIHRocm93ICdTZWN0aW9uIG5vdCBmb3VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IHNlY3Rpb24uYm91bmREYXRhLmVudGl0eVR5cGU7XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5QT1JUXSB8fCBlbnRpdHlUeXBlID09PSBCb3VuZERhdGFUeXBlW0JvdW5kRGF0YVR5cGUuVFlQRV0pIHtcbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdwYXRjaCcgJiYgRW50aXR5VXRpbC5pc1ByZXNlbnQoZS52YWx1ZU9wdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT3B0aW9uOiBhbnkgPSBlWyd2YWx1ZU9wdGlvbiddO1xuXG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24ubW9kZWw/LnBhcmVudElkKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29sbGFwc2libGVTdGF0ZS5jbGVhclN0YXRlKHNlY3Rpb24uaWQpO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUodmFsdWVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5wYXJlbnRJZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmR4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHNlY3Rpb24ubW9kZWw/LmlkKTtcblxuICAgICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5zcGxpY2UoaW5keCwgMSwgdmFsdWVPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVN0YXRlLmNsZWFyU3RhdGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5QT1JUXSkge1xuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3Vwc2VydCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSBpLnR5cGUudG9Mb3dlckNhc2UoKSkgPCAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGksIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtcyA9IHBhcmVudExpbmVJdGVtPy5saW5lSXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIGkgPT5cbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgIGUuc2VsZWN0ZWRWYWx1ZU9wdGlvbnMuZmluZEluZGV4KHYgPT4gdi50b0xvd2VyQ2FzZSgpID09PSBpLnR5cGUudG9Mb3dlckNhc2UoKSkgPiAtMSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZS5zZWxlY3RlZFZhbHVlT3B0aW9ucz8uZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobGluZUl0ZW1zPy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gdi50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVMaW5lSXRlbShzZWN0aW9uLCB2LCBwYXJlbnRMaW5lSXRlbSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IHNlY3Rpb24ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwuaWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRMaW5lSXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZU9wdGlvbiA9IGUudmFsdWVPcHRpb247XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVMaW5lSXRlbShzZWN0aW9uLCB2YWx1ZU9wdGlvbiwgcGFyZW50TGluZUl0ZW0pO1xuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXMucHVzaChsaW5lSXRlbSk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdjb3B5Jykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVPcHRpb24gPSBlLnZhbHVlT3B0aW9uO1xuICAgICAgICAgICAgICBjb25zdCBsaW5lSXRlbVRvQ29weSA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kKGxpID0+IGxpLmlkID09PSB2YWx1ZU9wdGlvbik7XG4gICAgICAgICAgICAgIGlmIChsaW5lSXRlbVRvQ29weSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtOiBMaW5lSXRlbSA9IHsgLi4ubGluZUl0ZW1Ub0NvcHksIGlkOiAnJyB9O1xuICAgICAgICAgICAgICAgIHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5wdXNoKGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIGxpbmVJdGVtKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICAgIC8vQXNzdW1pbmcgdGhhdCByYWRpbyBjb250cm9sIGlzIHRoZSBvbmx5IGNvbnRyb2wsIHRoYXQgJ3VwZGF0ZXMnIHZhbHVlc1xuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHNlY3Rpb24ubW9kZWw/LmxpbmVJdGVtcy5maWx0ZXIobGkgPT4gbGkucG9ydCAmJiBsaS5wb3J0ID09PSBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lKVswXTtcblxuICAgICAgICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRpbmFsaXR5VmFyaWFibGUocGFyZW50TGluZUl0ZW0sIHByZXZpb3VzLCAwKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLmZpbmRJbmRleChsaSA9PiBsaS5pZCA9PT0gcHJldmlvdXM/LmlkKTtcblxuICAgICAgICAgICAgICBjb25zdCBsaW5lSXRlbTogTGluZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgICAgICAgICAgIHF0eTogcHJldmlvdXM/LnF0eSxcbiAgICAgICAgICAgICAgICBwb3J0OiBwcmV2aW91cz8ucG9ydCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFbnRpdHlVdGlsLmlzUHJlc2VudChlLnZhbHVlT3B0aW9uKSA/IGUudmFsdWVPcHRpb24gOiB0aGlzLmZvcm0uY29udHJvbHNbZS5pZF0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2ZnU3RhdHVzOiAnTmV3JyxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogcHJldmlvdXM/LnBhcmVudElkLFxuICAgICAgICAgICAgICB9IGFzIExpbmVJdGVtO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgbGluZUl0ZW0pO1xuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbS5saW5lSXRlbXNbaW5kZXhdID0gbGluZUl0ZW07XG5cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwYXJlbnRMaW5lSXRlbSAmJlxuICAgICAgICAgICAgICBTZWN0aW9uc0JpbmRlckhlbHBlci5pc1JlbW92ZUFsbG93ZWQocGFyZW50TGluZUl0ZW0sIHNlY3Rpb24uYm91bmREYXRhLm5hbWUsIHNlY3Rpb24ubW9kZWw/LnF0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgaXRlbSA9PiBpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZS52YWx1ZU9wdGlvbj8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkID0gcGFyZW50TGluZUl0ZW0ubGluZUl0ZW1zLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkaW5hbGl0eVZhcmlhYmxlKHBhcmVudExpbmVJdGVtLCByZW1vdmVkLCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZS5hY3Rpb24gPT09ICdxdHlVcGRhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGUudmFsdWVPcHRpb25cbiAgICAgICAgICAgICAgPyBTZWN0aW9uSGVscGVyU2VydmljZS5maW5kU2VjdGlvbkZvclZhbHVlKHNlY3Rpb24sIGUudmFsdWVPcHRpb24pXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCB0eXBlTGluZUl0ZW0gPSB0eXBlU2VjdGlvbj8ubW9kZWwgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHR5cGVTZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuICAgICAgICAgICAgaWYgKHR5cGVTZWN0aW9uICYmIHR5cGVMaW5lSXRlbSkge1xuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0ucXR5ID0gK3RoaXMuZm9ybS5jb250cm9sc1t0eXBlU2VjdGlvbi5pZCArICdxdHknXS52YWx1ZTtcbiAgICAgICAgICAgICAgdHlwZUxpbmVJdGVtLmNmZ1N0YXR1cyA9ICdVc2VyJztcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ2FkanVzdE5ldFByaWNlJykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZU9wdGlvbiwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgICAgIGNvbnN0IHsgYW1vdW50IH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBwcmljZUFkanVzdG1lbnQ6IFByaWNlQWRqdXN0bWVudCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ09WRVJSSURFX0FNT1VOVCcsXG4gICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiAnTWFudWFsIG5ldCBwcmljZSBhZGp1c3RtZW50JyxcbiAgICAgICAgICAgICAgYW1vdW50LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZGp1c3RQcmljZSh2YWx1ZU9wdGlvbiwgc2VjdGlvbiwgc29sdXRpb25MaW5lSXRlbSwgeyBwcmljZUFkanVzdG1lbnQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAnYWRqdXN0TGlzdFByaWNlJykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWx1ZU9wdGlvbiwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgICAgIGNvbnN0IHsgYW1vdW50IH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgICAgICAgICBjb25zdCBsaXN0UHJpY2VBZGp1c3RtZW50OiBQcmljZUFkanVzdG1lbnQgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdPVkVSUklERV9BTU9VTlQnLFxuICAgICAgICAgICAgICBleHBsYW5hdGlvbjogJ01hbnVhbCBsaXN0IHByaWNlIGFkanVzdG1lbnQnLFxuICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFkanVzdFByaWNlKHZhbHVlT3B0aW9uLCBzZWN0aW9uLCBzb2x1dGlvbkxpbmVJdGVtLCB7IGxpc3RQcmljZUFkanVzdG1lbnQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5UWVBFXSkge1xuICAgICAgICAgIGlmIChlLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudExpbmVJdGVtID1cbiAgICAgICAgICAgICAgc2VjdGlvbi5tb2RlbD8ucGFyZW50SWQgJiYgTGluZUl0ZW1VdGlsLmZpbmRCeUlkKHNlY3Rpb24ubW9kZWwucGFyZW50SWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcGFyZW50TGluZUl0ZW0gJiZcbiAgICAgICAgICAgICAgc2VjdGlvbi5tb2RlbCAmJlxuICAgICAgICAgICAgICBzZWN0aW9uLm1vZGVsLnBvcnQgJiZcbiAgICAgICAgICAgICAgU2VjdGlvbnNCaW5kZXJIZWxwZXIuaXNSZW1vdmVBbGxvd2VkKHBhcmVudExpbmVJdGVtLCBzZWN0aW9uLm1vZGVsLnBvcnQsIHNlY3Rpb24ubW9kZWw/LnF0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBzZWN0aW9uLm1vZGVsPy5pZCk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHBhcmVudExpbmVJdGVtLmxpbmVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgcmVtb3ZlZCwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVN0YXRlLmNsZWFyU3RhdGUoc2VjdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW50aW1lKHNvbHV0aW9uTGluZUl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAncXR5VXBkYXRlJykge1xuICAgICAgICAgICAgY29uc3QgdHlwZUxpbmVJdGVtID0gc2VjdGlvbi5tb2RlbCAmJiBMaW5lSXRlbVV0aWwuZmluZEJ5SWQoc2VjdGlvbi5tb2RlbC5pZCwgW3NvbHV0aW9uTGluZUl0ZW1dKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVMaW5lSXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCBxdHkgPSArdGhpcy5mb3JtLmNvbnRyb2xzW2UuaWQgKyAncXR5J10udmFsdWU7XG4gICAgICAgICAgICAgIGlmICh0eXBlTGluZUl0ZW0ucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRMaW5lSXRlbSA9IExpbmVJdGVtVXRpbC5maW5kQnlJZCh0eXBlTGluZUl0ZW0ucGFyZW50SWQsIFtzb2x1dGlvbkxpbmVJdGVtXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50TGluZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnRMaW5lSXRlbSwgdHlwZUxpbmVJdGVtLCBxdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0ucXR5ID0gcXR5O1xuICAgICAgICAgICAgICB0eXBlTGluZUl0ZW0uY2ZnU3RhdHVzID0gJ1VzZXInO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1bnRpbWUoc29sdXRpb25MaW5lSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT09IEJvdW5kRGF0YVR5cGVbQm91bmREYXRhVHlwZS5BVFRSSUJVVEVdKSB7XG4gICAgICAgICAgaWYgKGUuYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TGluZUl0ZW0gPSBzZWN0aW9uLm1vZGVsICYmIExpbmVJdGVtVXRpbC5maW5kQnlJZChzZWN0aW9uLm1vZGVsLmlkLCBbc29sdXRpb25MaW5lSXRlbV0pO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gcGFyZW50TGluZUl0ZW0/LmF0dHJpYnV0ZXMuZmluZChcbiAgICAgICAgICAgICAgYXR0ciA9PiBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbi5ib3VuZERhdGEubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAvL0V4cGxpY2l0bHkgc2V0IHZhbHVlIGFsd2F5cyB3aW5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdHlwZW9mIGUudmFsdWVPcHRpb24gIT09ICd1bmRlZmluZWQnID8gZS52YWx1ZU9wdGlvbiA6IHRoaXMuZm9ybS5jb250cm9sc1tlLmlkXS52YWx1ZTtcblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLnR5cGUgPT09ICdCT09MRUFOJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyAxIDogMDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuY2ZnU3RhdHVzID0gJ1VzZXInO1xuXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVudGltZShzb2x1dGlvbkxpbmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsga2V5OiB0aGlzLm1lc3NhZ2VCdWNrZXRJZCwgc3VtbWFyeTogYENvbmZpZ3VyYXRpb24gZmFpbGVkICR7KGUgYXMgYW55KT8ubWVzc2FnZX1gIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5vblNvbHV0aW9uUmVhZHlFdmVudFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShsaW5lSXRlbSA9PiB0aGlzLm9uU29sdXRpb25SZWFkeShsaW5lSXRlbSkpO1xuXG4gICAgdGhpcy5ydW50aW1lU2VydmljZS5vblNvbHV0aW9uVXBkYXRlZEV2ZW50XG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBMaW5lSXRlbSB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTb2x1dGlvblVwZGF0ZShkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlU29sdXRpb25GYWlsZWRVcGRhdGUoZGF0YSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucnVudGltZVNlcnZpY2Uub25VSVJlZnJlc2hFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHsgdWlEZWZpbml0aW9uIH0gPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLmdldFJ1bnRpbWVDb250ZXh0KCkgPz8ge307XG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbiA9IHVpRGVmaW5pdGlvbiBhcyBhbnk7XG4gICAgICB0aGlzLmZvcm1TY29wZS5zY3JpcHRTZXNzaW9uU2NvcGUgPSB7fTtcbiAgICAgIHRoaXMuc3RhcnRSdW50aW1lKCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNvbHV0aW9uUmVhZHkobGluZUl0ZW06IExpbmVJdGVtKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UuZ2V0UnVudGltZUNvbnRleHQoKSBhcyBMZWdhY3lSdW50aW1lQ29udGV4dDtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uQ29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQ29udGV4dDogTGVnYWN5UnVudGltZUNvbnRleHQgPSB7XG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5jb250ZXh0LnByb3BlcnRpZXMsXG4gICAgICAgIC4uLmNvbmZpZ3VyYXRpb25Db250ZXh0LnByb3BlcnRpZXMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBhY2NvdW50SWQgPSBtZXJnZUNvbnRleHQucHJvcGVydGllcz8uQWNjb3VudElkO1xuICAgIGlmIChhY2NvdW50SWQgJiYgYWNjb3VudElkLmxlbmd0aCA9PT0gMTUpIHtcbiAgICAgIHRoaXMucnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgIC4uLm1lcmdlQ29udGV4dCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLm1lcmdlQ29udGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICAgIEFjY291bnRJZDogU2FsZXNmb3JjZUlkVXRpbHMuZ2VuZXJhdGVJZDE4RnJvbUlkMTUoYWNjb3VudElkKSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgYW55O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0ID0gbWVyZ2VDb250ZXh0IGFzIGFueTtcbiAgICB9XG5cbiAgICB0aGlzLnNvbHV0aW9uTGluZUl0ZW0gPSBsaW5lSXRlbTtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnNldFJ1bnRpbWVDb250ZXh0KHRoaXMucnVudGltZUNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGFydFJ1bnRpbWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU29sdXRpb25VcGRhdGUodXBkYXRlZExpbmVJdGVtOiBMaW5lSXRlbSkge1xuICAgIHRoaXMuc29sdXRpb25MaW5lSXRlbSA9IHVwZGF0ZWRMaW5lSXRlbTtcbiAgICB0aGlzLnByb2Nlc3NTb2x1dGlvbih0cnVlKTtcbiAgICB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnNvbHV0aW9uUHJvY2Vzc2VkKHRoaXMuc29sdXRpb25MaW5lSXRlbSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTb2x1dGlvbkZhaWxlZFVwZGF0ZShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNFcnJvck1lc3NhZ2UgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChlcnJvci5lcnJvcikgJiYgRW50aXR5VXRpbC5pc1ByZXNlbnQoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGhhc0Vycm9yTWVzc2FnZSA/IGVycm9yLmVycm9yLm1lc3NhZ2UgOiAnQ29uZmlndXJhdGlvbiBmYWlsZWQnO1xuICAgIGNvbnN0IHsgaXNIYW5kbGluZ0NvbmZpZ3VyYXRpb25FcnJvcnMgfSA9IHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uID8/IHt9O1xuXG4gICAgaWYgKGlzSGFuZGxpbmdDb25maWd1cmF0aW9uRXJyb3JzKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlQnVja2V0SWQsIHN1bW1hcnk6IG1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb2x1dGlvbkxpbmVJdGVtID0ge1xuICAgICAgLi4udGhpcy5zb2x1dGlvbkxpbmVJdGVtLFxuICAgICAgbWVzc2FnZXM6IFsuLi50aGlzLnNvbHV0aW9uTGluZUl0ZW0ubWVzc2FnZXMsIGBFOiR7bWVzc2FnZX1gXSxcbiAgICB9O1xuICAgIHRoaXMucHJvY2Vzc1NvbHV0aW9uKHRydWUsIHRydWUpO1xuICAgIHRoaXMucnVudGltZVNlcnZpY2Uuc29sdXRpb25Qcm9jZXNzZWQodGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2FyZGluYWxpdHlWYXJpYWJsZShwYXJlbnQ6IExpbmVJdGVtLCB1cGRhdGVkOiBMaW5lSXRlbSwgbmV3UXVhbnRpdHk/OiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3J0RG9tYWluID0gdXBkYXRlZC5wb3J0ID8gcGFyZW50LnBvcnREb21haW5zW3VwZGF0ZWQucG9ydF0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZG9tYWluVHlwZSA9IHBvcnREb21haW4/LmRvbWFpblR5cGVzLmZpbmQodCA9PiB0Lm5hbWUgPT09IHVwZGF0ZWQudHlwZSk7XG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSBkb21haW5UeXBlPy5jYXJkaW5hbGl0eSA/PyAwO1xuXG4gICAgbGV0IHF0eTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkb21haW5UeXBlPy5jYXJkaW5hbGl0eSkpIHtcbiAgICAgIHF0eSA9IE51bWJlci5pc0Zpbml0ZShuZXdRdWFudGl0eSkgPyBuZXdRdWFudGl0eSA6IHVwZGF0ZWQucXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBxdHkgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChuZXdRdWFudGl0eSlcbiAgICAgICAgPyBjYXJkaW5hbGl0eSAtIHVwZGF0ZWQucXR5ICsgKG5ld1F1YW50aXR5IGFzIG51bWJlcilcbiAgICAgICAgOiBjYXJkaW5hbGl0eSArIHVwZGF0ZWQucXR5O1xuICAgIH1cblxuICAgIGNvbnN0IGNhcmRpbmFsaXR5TmFtZSA9ICcjQ1YtJyArIHVwZGF0ZWQudHlwZSArICdAJyArIHVwZGF0ZWQucG9ydDtcblxuICAgIGxldCBjYXJkaW5hbGl0eVZhcmlhYmxlID0gcGFyZW50LmF0dHJpYnV0ZXMuZmluZChhID0+IGEubmFtZSA9PT0gY2FyZGluYWxpdHlOYW1lKTtcbiAgICBpZiAoIWNhcmRpbmFsaXR5VmFyaWFibGUpIHtcbiAgICAgIGNhcmRpbmFsaXR5VmFyaWFibGUgPSB7XG4gICAgICAgIGlkOiBVVUlELlVVSUQoKSxcbiAgICAgICAgbmFtZTogY2FyZGluYWxpdHlOYW1lLFxuICAgICAgfSBhcyBBdHRyaWJ1dGU7XG4gICAgICBwYXJlbnQuYXR0cmlidXRlcy5wdXNoKGNhcmRpbmFsaXR5VmFyaWFibGUpO1xuICAgIH1cbiAgICBjYXJkaW5hbGl0eVZhcmlhYmxlLnZhbHVlID0gcXR5O1xuICAgIGNhcmRpbmFsaXR5VmFyaWFibGUuY2ZnU3RhdHVzID0gJ1VzZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMaW5lSXRlbShzZWN0aW9uOiBTZWN0aW9uLCB2YWx1ZU9wdGlvbj86IHN0cmluZywgcGFyZW50TGluZUl0ZW0/OiBMaW5lSXRlbSk6IExpbmVJdGVtIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXR5OiArdGhpcy5mb3JtLmNvbnRyb2xzW3NlY3Rpb24uaWQgKyAncXR5J10udmFsdWUsXG4gICAgICBwb3J0OiBzZWN0aW9uLmJvdW5kRGF0YS5uYW1lLFxuICAgICAgdHlwZTogRW50aXR5VXRpbC5pc1ByZXNlbnQodmFsdWVPcHRpb24pID8gdmFsdWVPcHRpb24gOiB0aGlzLmZvcm0uY29udHJvbHNbc2VjdGlvbi5pZF0udmFsdWUsXG4gICAgICBjZmdTdGF0dXM6ICdOZXcnLFxuICAgICAgcGFyZW50SWQ6IHBhcmVudExpbmVJdGVtPy5pZCxcbiAgICB9IGFzIExpbmVJdGVtO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XG5cbiAgICB0aGlzLnNlY3Rpb25zU2VydmljZS5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UnVudGltZSgpIHtcbiAgICBjb25zdCB1aURlZmluaXRpb24gPSB0aGlzLnJ1bnRpbWVDb250ZXh0LnVpRGVmaW5pdGlvbjtcblxuICAgIGNvbnN0IGRlZmF1bHRUYWIgPSB1aURlZmluaXRpb24/LnRhYnM/LmZpbmQodGFiID0+IHRhYi5pc0RlZmF1bHQpO1xuICAgIHRoaXMuYWN0aXZlVUlUYWIgPSBFbnRpdHlVdGlsLmlzUHJlc2VudChkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIgOiB1aURlZmluaXRpb24/LnRhYnM/LlswXTtcblxuICAgIHRoaXMuc2VjdGlvbnNTZXJ2aWNlLmNvbXBpbGVNb2R1bGUodWlEZWZpbml0aW9uPy5zZWN0aW9ucyA/PyBbXSwgdWlEZWZpbml0aW9uPy5pc1ZpZXdFbmNhcHN1bGF0ZWQpO1xuXG4gICAgdGhpcy5wcm9jZXNzU29sdXRpb24oKTtcblxuICAgIHRoaXMuc29sdXRpb25Jc1JlYWR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUnVudGltZShsaW5lSXRlbTogTGluZUl0ZW0pIHtcbiAgICB0aGlzLnNvbHV0aW9uVXBkYXRlZC5lbWl0KGxpbmVJdGVtKTtcbiAgfVxuXG4gIGFkZFRvQ2FydCgpIHtcbiAgICBjb25zdCBsaW5lSXRlbSA9IEVudGl0eVV0aWwuY2xvbmUodGhpcy5zb2x1dGlvbkxpbmVJdGVtKTtcblxuICAgIHRoaXMucnVudGltZVNlcnZpY2Uuc3RvcFJ1bnRpbWUobGluZUl0ZW0pO1xuICB9XG5cbiAgcHJvY2Vzc1NvbHV0aW9uKGlzVXBkYXRlPzogYm9vbGVhbiwgaXNFcnJvcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLzEuIEJpbmQgc2VjdGlvbnMgdG8gc29sdXRpb25cbiAgICBsZXQgc2VjdGlvbnMgPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uPy5zZWN0aW9ucykgPz8gW107XG4gICAgY29uc3Qgc291cmNlU2VjdGlvbnMgPSBFbnRpdHlVdGlsLmNsb25lKHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uPy5zZWN0aW9ucykgPz8gW107XG4gICAgdGhpcy51cGRhdGVMaW5lSXRlbXNTZWN0aW9uUGF0aCh0aGlzLnNvbHV0aW9uTGluZUl0ZW0pO1xuICAgIFNlY3Rpb25zQmluZGVySGVscGVyLnNldExpbmVJdGVtc1BhdGgoXG4gICAgICB0aGlzLnJ1bnRpbWVDb250ZXh0LnJ1bnRpbWVNb2RlbCxcbiAgICAgIHRoaXMuc29sdXRpb25MaW5lSXRlbSxcbiAgICAgIHNlY3Rpb25zLFxuICAgICAgc291cmNlU2VjdGlvbnMsXG4gICAgICAoc2VjOiBhbnkpID0+ICFzZWMucGFyZW50SWQgJiYgc2VjLmJvdW5kRGF0YSxcbiAgICAgIHRoaXMucnVudGltZUNvbnRleHQudWlEZWZpbml0aW9uPy5wcmljaW5nRW5hYmxlZCA/PyBmYWxzZSxcbiAgICApO1xuXG4gICAgc2VjdGlvbnMgPSBzZWN0aW9ucy5maWx0ZXIocyA9PiBzLm1vZGVsICYmIHMudGVtcGxhdGUpO1xuXG4gICAgLy8yLiBJbml0IGZvcm1cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1TZXJ2aWNlLmluaXRGb3JtKHNlY3Rpb25zLCB0aGlzLnNvbHV0aW9uTGluZUl0ZW0pO1xuICAgIHRoaXMuZm9ybVNjb3BlLmZvcm0gPSB0aGlzLmZvcm07XG5cbiAgICB0aGlzLnNvcnRlZFNlY3Rpb25zID0gdGhpcy5maWx0ZXJBbmRTb3J0KGdldFNlY3Rpb25UcmVlKHNlY3Rpb25zLmZpbHRlcihzID0+ICFzLmlzU3RhdGljKSkpO1xuXG4gICAgaWYgKCFpc1VwZGF0ZSkge1xuICAgICAgdGhpcy5zdGF0aWNTZWN0aW9ucyA9IHRoaXMuZmlsdGVyQW5kU29ydChnZXRTZWN0aW9uVHJlZShzZWN0aW9ucy5maWx0ZXIocyA9PiBzLmlzU3RhdGljKSkpO1xuICAgIH1cblxuICAgIGlmICghaXNFcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5jbGVhcih0aGlzLm1lc3NhZ2VCdWNrZXRJZCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMucnVudGltZVNlcnZpY2UuY2FuY2VsUnVudGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lSXRlbXNTZWN0aW9uUGF0aChsaW5lSXRlbTogTGluZUl0ZW0sIHBhcmVudD86IFNlY3Rpb25QYXRoKSB7XG4gICAgY29uc3QgcGF0aDogU2VjdGlvblBhdGggPSB7XG4gICAgICB0eXBlczogcGFyZW50ID8gcGFyZW50LnR5cGVzLmNvbmNhdChbbGluZUl0ZW0udHlwZV0pIDogW2xpbmVJdGVtLnR5cGVdLFxuICAgICAgcG9ydHM6IHBhcmVudCA/IHBhcmVudC5wb3J0cy5jb25jYXQobGluZUl0ZW0ucG9ydCA/IFtsaW5lSXRlbS5wb3J0XSA6IFtdKSA6IFtdLFxuICAgIH0gYXMgU2VjdGlvblBhdGg7XG5cbiAgICBsaW5lSXRlbS5wYXRoID0gcGF0aDtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgbGluZUl0ZW0ubGluZUl0ZW1zKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxpbmVJdGVtc1NlY3Rpb25QYXRoKGNoaWxkLCBsaW5lSXRlbS5wYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckFuZFNvcnQoc2VjdGlvbnM6IFNlY3Rpb25bXSk6IFNlY3Rpb25bXSB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnNlYXJjaEZpbHRlclBpcGUudHJhbnNmb3JtKHNlY3Rpb25zLCB0aGlzLmFjdGl2ZVVJVGFiPy5pZCwgJ3BhZ2UnKTtcbiAgICBjb25zdCBvcmRlcmVkID0gdGhpcy5vcmRlckJ5UGlwZS50cmFuc2Zvcm0oZmlsdGVyZWQsICdvcmRlcicsICdhc2MnKTtcblxuICAgIHJldHVybiBvcmRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2VjdGlvbihpZDogc3RyaW5nKTogU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIEVudGl0eVV0aWwuZmluZEJ5RmllbGRIaWVyYXJjaGljYWxseSgnaWQnLCBpZCwgWy4uLnRoaXMuc29ydGVkU2VjdGlvbnMsIC4uLnRoaXMuc3RhdGljU2VjdGlvbnNdLCAnY2hpbGRyZW4nKTtcbiAgfVxufVxuIiwiPHZsLWxvYWRlciBsYWJlbD1cIkxvYWRpbmcgVUlcIiAqbmdJZj1cIiFzb2x1dGlvbklzUmVhZHk7IGVsc2UgY29udGVudFwiPjwvdmwtbG9hZGVyPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gIDwhLS0gVE9ETzogQWRkIHZhbGlkYXRpb24gbWVzc2FnZXMgLS0+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2lkZWJhci10YWJzXCJcbiAgICBbbmdDbGFzc109XCJ7IGhpZGRlbjogIXJ1bnRpbWVDb250ZXh0Py51aURlZmluaXRpb24/LmRlZmF1bHRQYW5lbHMgfVwiXG4gICAgI3VpVGFicz1cInNpZGViYXJUYWJzXCJcbiAgICBzaWRlYmFyVGFicz1cInt7IGFjdGl2ZVVJVGFiPy5pZCB9fVwiXG4gICAgaWQ9XCJ2bC1kZWZhdWx0LXNpZGViYXItdGFic1wiXG4gID5cbiAgICA8dWw+XG4gICAgICA8bGlcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiBydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uPy50YWJzIHwgb3JkZXJCeTogJ29yZGVyJzonYXNjJ1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB1aVRhYnMuYWN0aXZlVGFiID09PSB0YWIuaWQgfVwiXG4gICAgICAgIChjbGljayk9XCJ1aVRhYnMuc3dpdGNoVGFiKHRhYi5pZClcIlxuICAgICAgPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiPnt7IHRhYi5uYW1lIH19PC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwic2VjdGlvbnMtd3JhcHBlclwiPlxuICAgIDxmb3JtIHJvbGU9XCJmb3JtXCIgbmFtZT1cImZvcm1cIiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIG5vdmFsaWRhdGUgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHN0YXRpY1NlY3Rpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uLm1vZGVsICYmIHNlY3Rpb24udGVtcGxhdGUgJiYgIXNlY3Rpb24uaGlkZGVuXCI+XG4gICAgICAgICAgPHZsLXNlY3Rpb24tcmVuZGVyZXIgW3NlY3Rpb25dPVwic2VjdGlvblwiIFtmb3JtXT1cImZvcm1cIj48L3ZsLXNlY3Rpb24tcmVuZGVyZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc29ydGVkU2VjdGlvbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb24ubW9kZWwgJiYgc2VjdGlvbi50ZW1wbGF0ZSAmJiAhc2VjdGlvbi5oaWRkZW5cIj5cbiAgICAgICAgICA8dmwtc2VjdGlvbi1yZW5kZXJlciBbc2VjdGlvbl09XCJzZWN0aW9uXCIgW2Zvcm1dPVwiZm9ybVwiPjwvdmwtc2VjdGlvbi1yZW5kZXJlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Zvcm0+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWZvb3RlclwiXG4gICAgICAqbmdJZj1cInJ1bnRpbWVDb250ZXh0Py5ydW50aW1lTW9kZSA9PT0gMVwiXG4gICAgICBpZD1cInZsLXJ1bnRpbWUtZGVmYXVsdC1mb290ZXJcIlxuICAgICAgW25nQ2xhc3NdPVwieyBoaWRkZW46ICFydW50aW1lQ29udGV4dD8udWlEZWZpbml0aW9uPy5kZWZhdWx0UGFuZWxzIH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgaW5wdXQtZm9ybS1pbnB1dFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgKGNsaWNrKT1cImZvcm0udmFsaWQgJiYgYWRkVG9DYXJ0KClcIiBpZD1cImFkZC10by1jYXJ0LWJ0blwiXG4gICAgICAgICAgPkFkZCB0byBjYXJ0PC9hXG4gICAgICAgID5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBjbGFzcz1cImJ0biBidG4tbGlua1wiIChjbGljayk9XCJoaWRlTW9kYWwoKVwiIGlkPVwiY2FuY2VsLWJ0blwiPkNhbmNlbDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XG4gICAgPCEtLSBUT0RPOiBBZGQgdmFsaWRhdGlvbiBtZXNzYWdlcyAtLT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,13 +1,13 @@
1
1
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { ConfigurationContextMode, EntityUtil, RuntimeModel, SectionPathUtil, } from '@veloce/core';
3
+ import { RuntimeMode } from '@veloce/sdk/core';
3
4
  import { combineLatest, Subject } from 'rxjs';
4
5
  import { takeUntil } from 'rxjs/operators';
5
- import { RuntimeMode } from '../../types';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "../../services/runtime.service";
8
8
  import * as i2 from "../../services/product-model-cache.service";
9
9
  import * as i3 from "@veloce/api";
10
- import * as i4 from "../../services/context.service";
10
+ import * as i4 from "@veloce/sdk/core";
11
11
  import * as i5 from "../ui-runtime/runtime.component";
12
12
  export class RuntimePreviewComponent {
13
13
  constructor(runtimeService, modelCacheService, configurationApiService, contextService) {
@@ -106,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
106
106
  }], uiDefinition: [{
107
107
  type: Input
108
108
  }] } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lLXByZXZpZXcvcnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lLXByZXZpZXcvcnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLFVBQVUsRUFJVixZQUFZLEVBQ1osZUFBZSxHQUVoQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7QUFRMUQsTUFBTSxPQUFPLHVCQUF1QjtJQWFsQyxZQUNVLGNBQThCLEVBQzlCLGlCQUEyQyxFQUMzQyx1QkFBZ0QsRUFDaEQsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFOaEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPcEMsQ0FBQztJQWhCSixJQUFhLFlBQVksQ0FBQyxLQUFtQjtRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJ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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2UvYXBpJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZSxcbiAgRW50aXR5VXRpbCxcbiAgTGluZUl0ZW0sXG4gIFByb2R1Y3RBdHRyaWJ1dGUsXG4gIFByb2R1Y3RNb2RlbHNDb250YWluZXIsXG4gIFJ1bnRpbWVNb2RlbCxcbiAgU2VjdGlvblBhdGhVdGlsLFxuICBVSURlZmluaXRpb24sXG59IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RNb2RlbENhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3QtbW9kZWwtY2FjaGUuc2VydmljZSc7XG5pbXBvcnQgeyBSdW50aW1lU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3J1bnRpbWUuc2VydmljZSc7XG5pbXBvcnQgeyBSdW50aW1lQ29udGV4dCwgUnVudGltZU1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLXJ1bnRpbWUtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAncnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3J1bnRpbWUtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnVudGltZVByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldCB1aURlZmluaXRpb24odmFsdWU6IFVJRGVmaW5pdGlvbikge1xuICAgIHRoaXMuX3VpRGVmaW5pdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuaW5pdERlZmluaXRpb24odmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwcml2YXRlIGluaXRpYWxpc2VkVWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwcml2YXRlIHByb2R1Y3RNb2RlbENvbnRhaW5lcj86IFByb2R1Y3RNb2RlbHNDb250YWluZXI7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RlbENhY2hlU2VydmljZTogUHJvZHVjdE1vZGVsQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2RlbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbENhY2hlU2VydmljZVxuICAgICAgLmdldFByb2R1Y3RNb2RlbCh0aGlzLm1vZGVsSWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGNvbnRhaW5lciA9PiB7XG4gICAgICAgIHRoaXMucHJvZHVjdE1vZGVsQ29udGFpbmVyID0gY29udGFpbmVyO1xuXG4gICAgICAgIGlmICh0aGlzLl91aURlZmluaXRpb24pIHtcbiAgICAgICAgICB0aGlzLmluaXREZWZpbml0aW9uKHRoaXMuX3VpRGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0RGVmaW5pdGlvbih1aURlZmluaXRpb246IFVJRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9kdWN0TW9kZWxDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsaXNlZFVpRGVmaW5pdGlvbiA9IEVudGl0eVV0aWwuY2xvbmUodWlEZWZpbml0aW9uKTtcblxuICAgIGNvbnN0IGV4dGVybmFsczogUHJvZHVjdEF0dHJpYnV0ZVtdID0gdGhpcy5wcm9kdWN0TW9kZWxDb250YWluZXIubWFpbi5leHRlcm5hbHM7XG4gICAgaWYgKGV4dGVybmFscykge1xuICAgICAgaW5pdGlhbGlzZWRVaURlZmluaXRpb24uZXh0ZXJuYWxzID0gZXh0ZXJuYWxzLnJlZHVjZTxEaWN0aW9uYXJ5PHN0cmluZz4+KCh0cnVuaywgdmFyaWFibGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50cnVuayxcbiAgICAgICAgICBbdmFyaWFibGUubmFtZV06IGluaXRpYWxpc2VkVWlEZWZpbml0aW9uLmV4dGVybmFscz8uW3ZhcmlhYmxlLm5hbWVdID8/ICcnLFxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgaW5pdGlhbGlzZWRVaURlZmluaXRpb24uZXh0ZXJuYWxzO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGlzZWRVaURlZmluaXRpb24gPSBpbml0aWFsaXNlZFVpRGVmaW5pdGlvbjtcblxuICAgIHRoaXMubGF1bmNoUnVudGltZSgpO1xuICB9XG5cbiAgcHVibGljIG9uU29sdXRpb25VcGRhdGVkKGxpbmVJdGVtOiBMaW5lSXRlbSk6IHZvaWQge1xuICAgIHRoaXMucnVudGltZVNlcnZpY2UudXBkYXRlUnVudGltZSh7IGNvbmZpZ3VyYWJsZVJhbXA6IGxpbmVJdGVtIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXVuY2hSdW50aW1lKCkge1xuICAgIGlmICghdGhpcy5tb2RlbElkIHx8ICF0aGlzLmluaXRpYWxpc2VkVWlEZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU2VjdGlvblBhdGhVdGlsLnVwZGF0ZVNlY3Rpb25zUGF0aCh0aGlzLmluaXRpYWxpc2VkVWlEZWZpbml0aW9uLnNlY3Rpb25zKTtcblxuICAgIGNvbnN0IHVpRGVmaW5pdGlvbiA9IEVudGl0eVV0aWwuY2xvbmUodGhpcy5pbml0aWFsaXNlZFVpRGVmaW5pdGlvbik7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbkFwaVNlcnZpY2UuZ2V0UnVudGltZURhdGFCeU1vZGVsSWQodGhpcy5tb2RlbElkKSxcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKCdUZXN0SWQnLCBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuVEVTVCksXG4gICAgXSkuc3Vic2NyaWJlKChbcnVudGltZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBydW50aW1lTW9kZWwgPSBSdW50aW1lTW9kZWwuY3JlYXRlKHJ1bnRpbWVEYXRhLnR5cGVzLCBydW50aW1lRGF0YS5wcm9kdWN0cyk7XG4gICAgICBjb25zdCByb290VHlwZSA9IEFycmF5LmZyb20ocnVudGltZU1vZGVsLmNvbXBvbmVudHMudmFsdWVzKCkpLmZpbmQoXG4gICAgICAgIGMgPT5cbiAgICAgICAgICB1aURlZmluaXRpb24ucm9vdFR5cGUgJiZcbiAgICAgICAgICBydW50aW1lTW9kZWwuaXNFcXVhbHMoYy50eXBlTmFtZSwgdWlEZWZpbml0aW9uLnJvb3RUeXBlKSAmJlxuICAgICAgICAgIEVudGl0eVV0aWwuaXNQcmVzZW50KGMucHJvZHVjdElkKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChyb290VHlwZT8udHlwZU5hbWUpIHtcbiAgICAgICAgdWlEZWZpbml0aW9uLnJvb3RUeXBlID0gcm9vdFR5cGUudHlwZU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm9kdWN0SWQgPSByb290VHlwZSA/IHJvb3RUeXBlLnByb2R1Y3RJZCA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY29udGV4dDogUnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgIG1vZGVsSWQ6IHRoaXMubW9kZWxJZCA/PyAnJyxcbiAgICAgICAgdWlEZWZpbml0aW9uOiB1aURlZmluaXRpb24sXG4gICAgICAgIHJ1bnRpbWVNb2RlbCxcbiAgICAgICAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLlRFU1QsXG4gICAgICAgIHByb2R1Y3RJZDogY29udGV4dFByb2R1Y3RJZCxcbiAgICAgICAgcHJvcGVydGllczogdWlEZWZpbml0aW9uLmV4dGVybmFscyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucnVudGltZVNlcnZpY2Uuc3RhcnRSdW50aW1lKGNvbnRleHQsIHt9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHZsLXJ1bnRpbWUgKHNvbHV0aW9uVXBkYXRlZCk9XCJvblNvbHV0aW9uVXBkYXRlZCgkZXZlbnQpXCI+PC92bC1ydW50aW1lPlxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lLXByZXZpZXcvcnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3J1bnRpbWUvY29tcG9uZW50cy91aS1ydW50aW1lLXByZXZpZXcvcnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLFVBQVUsRUFJVixZQUFZLEVBQ1osZUFBZSxHQUVoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVczQyxNQUFNLE9BQU8sdUJBQXVCO0lBYWxDLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQTJDLEVBQzNDLHVCQUFnRCxFQUNoRCxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUMzQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQU5oQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU9wQyxDQUFDO0lBaEJKLElBQWEsWUFBWSxDQUFDLEtBQW1CO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElB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aGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZS9hcGknO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLFxuICBFbnRpdHlVdGlsLFxuICBMaW5lSXRlbSxcbiAgUHJvZHVjdEF0dHJpYnV0ZSxcbiAgUHJvZHVjdE1vZGVsc0NvbnRhaW5lcixcbiAgUnVudGltZU1vZGVsLFxuICBTZWN0aW9uUGF0aFV0aWwsXG4gIFVJRGVmaW5pdGlvbixcbn0gZnJvbSAnQHZlbG9jZS9jb3JlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlLCBSdW50aW1lTW9kZSB9IGZyb20gJ0B2ZWxvY2Uvc2RrL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9kdWN0TW9kZWxDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0LW1vZGVsLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGVnYWN5UnVudGltZUNvbnRleHQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLXJ1bnRpbWUtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAncnVudGltZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3J1bnRpbWUtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnVudGltZVByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNldCB1aURlZmluaXRpb24odmFsdWU6IFVJRGVmaW5pdGlvbikge1xuICAgIHRoaXMuX3VpRGVmaW5pdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuaW5pdERlZmluaXRpb24odmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwcml2YXRlIGluaXRpYWxpc2VkVWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwcml2YXRlIHByb2R1Y3RNb2RlbENvbnRhaW5lcj86IFByb2R1Y3RNb2RlbHNDb250YWluZXI7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RlbENhY2hlU2VydmljZTogUHJvZHVjdE1vZGVsQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkFwaVNlcnZpY2U6IENvbmZpZ3VyYXRpb25BcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2RlbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbENhY2hlU2VydmljZVxuICAgICAgLmdldFByb2R1Y3RNb2RlbCh0aGlzLm1vZGVsSWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGNvbnRhaW5lciA9PiB7XG4gICAgICAgIHRoaXMucHJvZHVjdE1vZGVsQ29udGFpbmVyID0gY29udGFpbmVyO1xuXG4gICAgICAgIGlmICh0aGlzLl91aURlZmluaXRpb24pIHtcbiAgICAgICAgICB0aGlzLmluaXREZWZpbml0aW9uKHRoaXMuX3VpRGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0RGVmaW5pdGlvbih1aURlZmluaXRpb246IFVJRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9kdWN0TW9kZWxDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsaXNlZFVpRGVmaW5pdGlvbiA9IEVudGl0eVV0aWwuY2xvbmUodWlEZWZpbml0aW9uKTtcblxuICAgIGNvbnN0IGV4dGVybmFsczogUHJvZHVjdEF0dHJpYnV0ZVtdID0gdGhpcy5wcm9kdWN0TW9kZWxDb250YWluZXIubWFpbi5leHRlcm5hbHM7XG4gICAgaWYgKGV4dGVybmFscykge1xuICAgICAgaW5pdGlhbGlzZWRVaURlZmluaXRpb24uZXh0ZXJuYWxzID0gZXh0ZXJuYWxzLnJlZHVjZTxEaWN0aW9uYXJ5PHN0cmluZz4+KCh0cnVuaywgdmFyaWFibGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50cnVuayxcbiAgICAgICAgICBbdmFyaWFibGUubmFtZV06IGluaXRpYWxpc2VkVWlEZWZpbml0aW9uLmV4dGVybmFscz8uW3ZhcmlhYmxlLm5hbWVdID8/ICcnLFxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgaW5pdGlhbGlzZWRVaURlZmluaXRpb24uZXh0ZXJuYWxzO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGlzZWRVaURlZmluaXRpb24gPSBpbml0aWFsaXNlZFVpRGVmaW5pdGlvbjtcblxuICAgIHRoaXMubGF1bmNoUnVudGltZSgpO1xuICB9XG5cbiAgcHVibGljIG9uU29sdXRpb25VcGRhdGVkKGxpbmVJdGVtOiBMaW5lSXRlbSk6IHZvaWQge1xuICAgIHRoaXMucnVudGltZVNlcnZpY2UudXBkYXRlUnVudGltZSh7IGNvbmZpZ3VyYWJsZVJhbXA6IGxpbmVJdGVtIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXVuY2hSdW50aW1lKCkge1xuICAgIGlmICghdGhpcy5tb2RlbElkIHx8ICF0aGlzLmluaXRpYWxpc2VkVWlEZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgU2VjdGlvblBhdGhVdGlsLnVwZGF0ZVNlY3Rpb25zUGF0aCh0aGlzLmluaXRpYWxpc2VkVWlEZWZpbml0aW9uLnNlY3Rpb25zKTtcblxuICAgIGNvbnN0IHVpRGVmaW5pdGlvbiA9IEVudGl0eVV0aWwuY2xvbmUodGhpcy5pbml0aWFsaXNlZFVpRGVmaW5pdGlvbik7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbkFwaVNlcnZpY2UuZ2V0UnVudGltZURhdGFCeU1vZGVsSWQodGhpcy5tb2RlbElkKSxcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKCdUZXN0SWQnLCBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuVEVTVCksXG4gICAgXSkuc3Vic2NyaWJlKChbcnVudGltZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBydW50aW1lTW9kZWwgPSBSdW50aW1lTW9kZWwuY3JlYXRlKHJ1bnRpbWVEYXRhLnR5cGVzLCBydW50aW1lRGF0YS5wcm9kdWN0cyk7XG4gICAgICBjb25zdCByb290VHlwZSA9IEFycmF5LmZyb20ocnVudGltZU1vZGVsLmNvbXBvbmVudHMudmFsdWVzKCkpLmZpbmQoXG4gICAgICAgIGMgPT5cbiAgICAgICAgICB1aURlZmluaXRpb24ucm9vdFR5cGUgJiZcbiAgICAgICAgICBydW50aW1lTW9kZWwuaXNFcXVhbHMoYy50eXBlTmFtZSwgdWlEZWZpbml0aW9uLnJvb3RUeXBlKSAmJlxuICAgICAgICAgIEVudGl0eVV0aWwuaXNQcmVzZW50KGMucHJvZHVjdElkKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChyb290VHlwZT8udHlwZU5hbWUpIHtcbiAgICAgICAgdWlEZWZpbml0aW9uLnJvb3RUeXBlID0gcm9vdFR5cGUudHlwZU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm9kdWN0SWQgPSByb290VHlwZSA/IHJvb3RUeXBlLnByb2R1Y3RJZCA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY29udGV4dDogTGVnYWN5UnVudGltZUNvbnRleHQgPSB7XG4gICAgICAgIG1vZGVsSWQ6IHRoaXMubW9kZWxJZCA/PyAnJyxcbiAgICAgICAgdWlEZWZpbml0aW9uOiB1aURlZmluaXRpb24sXG4gICAgICAgIHJ1bnRpbWVNb2RlbCxcbiAgICAgICAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLlRFU1QsXG4gICAgICAgIHByb2R1Y3RJZDogY29udGV4dFByb2R1Y3RJZCxcbiAgICAgICAgcHJvcGVydGllczogdWlEZWZpbml0aW9uLmV4dGVybmFscyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucnVudGltZVNlcnZpY2Uuc3RhcnRSdW50aW1lKGNvbnRleHQsIHt9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHZsLXJ1bnRpbWUgKHNvbHV0aW9uVXBkYXRlZCk9XCJvblNvbHV0aW9uVXBkYXRlZCgkZXZlbnQpXCI+PC92bC1ydW50aW1lPlxuIl19
@@ -18,16 +18,15 @@ import * as i2 from "../../services/section-scope.service";
18
18
  import * as i3 from "@angular/forms";
19
19
  import * as i4 from "../../services/runtime.service";
20
20
  import * as i5 from "../../services/cart.service";
21
- import * as i6 from "../../services/context.service";
21
+ import * as i6 from "@veloce/sdk/core";
22
22
  import * as i7 from "../../services/current-state.service";
23
- import * as i8 from "../../services/quote.service";
24
- import * as i9 from "./sf-query.directive";
25
- import * as i10 from "./velo-port.directive";
26
- import * as i11 from "./vl-quote.directive";
27
- import * as i12 from "./vl-document-templates.directive";
28
- import * as i13 from "./vl-ramp.directive";
29
- import * as i14 from "./vl-approval.directive";
30
- import * as i15 from "./vl-document-attachments.directive";
23
+ import * as i8 from "./sf-query.directive";
24
+ import * as i9 from "./velo-port.directive";
25
+ import * as i10 from "./vl-quote.directive";
26
+ import * as i11 from "./vl-document-templates.directive";
27
+ import * as i12 from "./vl-ramp.directive";
28
+ import * as i13 from "./vl-approval.directive";
29
+ import * as i14 from "./vl-document-attachments.directive";
31
30
  const SHA1 = UUID.SHA1();
32
31
  const SCRIPT_GLOBAL_NAME = `$velo`;
33
32
  export class SectionScriptDirective {
@@ -184,12 +183,12 @@ export class SectionScriptDirective {
184
183
  solutionUpdated: this.runtimeService.onSolutionProcessed,
185
184
  cartService: this.cartService,
186
185
  configurationContextService: this.contextService,
187
- quoteDraft: this.quoteService.getQuote(),
186
+ quoteDraft: this.quoteService.quoteSnapshot,
188
187
  currentStateService: this.currentStateService,
189
188
  };
190
189
  }
191
190
  }
192
- SectionScriptDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SectionScriptDirective, deps: [{ token: DOCUMENT }, { token: SfQueryDirective }, { token: LineItemDirective }, { token: VlQuoteDirective }, { token: VlDocumentTemplatesDirective }, { token: VlRampDirective }, { token: VlApprovalDirective }, { token: VlDocumentAttachmentsDirective }, { token: i1.FormScopeService }, { token: i2.SectionScopeService }, { token: i0.Renderer2 }, { token: i3.FormBuilder }, { token: i4.RuntimeService }, { token: i0.ChangeDetectorRef }, { token: i5.ShoppingCartService }, { token: i6.ContextService }, { token: i7.CurrentStateService }, { token: i8.QuoteService }], target: i0.ɵɵFactoryTarget.Directive });
191
+ SectionScriptDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SectionScriptDirective, deps: [{ token: DOCUMENT }, { token: SfQueryDirective }, { token: LineItemDirective }, { token: VlQuoteDirective }, { token: VlDocumentTemplatesDirective }, { token: VlRampDirective }, { token: VlApprovalDirective }, { token: VlDocumentAttachmentsDirective }, { token: i1.FormScopeService }, { token: i2.SectionScopeService }, { token: i0.Renderer2 }, { token: i3.FormBuilder }, { token: i4.RuntimeService }, { token: i0.ChangeDetectorRef }, { token: i5.ShoppingCartService }, { token: i6.ContextService }, { token: i7.CurrentStateService }, { token: i6.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Directive });
193
192
  SectionScriptDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.15", type: SectionScriptDirective, selector: "section-script", providers: [
194
193
  SfQueryDirective,
195
194
  LineItemDirective,
@@ -218,26 +217,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
218
217
  }], ctorParameters: function () { return [{ type: Document, decorators: [{
219
218
  type: Inject,
220
219
  args: [DOCUMENT]
221
- }] }, { type: i9.SfQueryDirective, decorators: [{
220
+ }] }, { type: i8.SfQueryDirective, decorators: [{
222
221
  type: Inject,
223
222
  args: [SfQueryDirective]
224
- }] }, { type: i10.LineItemDirective, decorators: [{
223
+ }] }, { type: i9.LineItemDirective, decorators: [{
225
224
  type: Inject,
226
225
  args: [LineItemDirective]
227
- }] }, { type: i11.VlQuoteDirective, decorators: [{
226
+ }] }, { type: i10.VlQuoteDirective, decorators: [{
228
227
  type: Inject,
229
228
  args: [VlQuoteDirective]
230
- }] }, { type: i12.VlDocumentTemplatesDirective, decorators: [{
229
+ }] }, { type: i11.VlDocumentTemplatesDirective, decorators: [{
231
230
  type: Inject,
232
231
  args: [VlDocumentTemplatesDirective]
233
- }] }, { type: i13.VlRampDirective, decorators: [{
232
+ }] }, { type: i12.VlRampDirective, decorators: [{
234
233
  type: Inject,
235
234
  args: [VlRampDirective]
236
- }] }, { type: i14.VlApprovalDirective, decorators: [{
235
+ }] }, { type: i13.VlApprovalDirective, decorators: [{
237
236
  type: Inject,
238
237
  args: [VlApprovalDirective]
239
- }] }, { type: i15.VlDocumentAttachmentsDirective, decorators: [{
238
+ }] }, { type: i14.VlDocumentAttachmentsDirective, decorators: [{
240
239
  type: Inject,
241
240
  args: [VlDocumentAttachmentsDirective]
242
- }] }, { type: i1.FormScopeService }, { type: i2.SectionScopeService }, { type: i0.Renderer2 }, { type: i3.FormBuilder }, { type: i4.RuntimeService }, { type: i0.ChangeDetectorRef }, { type: i5.ShoppingCartService }, { type: i6.ContextService }, { type: i7.CurrentStateService }, { type: i8.QuoteService }]; } });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1zY3JpcHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9leGVjdXRpb24vZGlyZWN0aXZlcy9zZWN0aW9uLXNjcmlwdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFXLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBU2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcs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LGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsNEJBQTRCO1FBQzVCLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsOEJBQThCO0tBQy9COzRGQUVVLHNCQUFzQjtrQkFkbEMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixTQUFTLEVBQUU7d0JBQ1QsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsNEJBQTRCO3dCQUM1QixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsOEJBQThCO3FCQUMvQjtpQkFDRjswREFRd0MsUUFBUTswQkFBNUMsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLDRCQUE0Qjs7MEJBQ25DLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsLCBQYWdlZEVudGl0eSwgU2VjdGlvbiwgVVVJRCB9IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyByeGpzT3BlcmF0b3JzIGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VycmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1cnJlbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2NvcGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1zY29wZS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1b3RlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1b3RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnVudGltZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ydW50aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VjdGlvblNjb3BlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3Rpb24tc2NvcGUuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JpcHRSZWdpc3RyeSB9IGZyb20gJy4uLy4uL3R5cGVzL3NjcmlwdC1yZWdpc3RyeS50eXBlcyc7XG5pbXBvcnQgeyBTZlF1ZXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi9zZi1xdWVyeS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGluZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL3ZlbG8tcG9ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmxBcHByb3ZhbERpcmVjdGl2ZSB9IGZyb20gJy4vdmwtYXBwcm92YWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZsRG9jdW1lbnRBdHRhY2htZW50c0RpcmVjdGl2ZSB9IGZyb20gJy4vdmwtZG9jdW1lbnQtYXR0YWNobWVudHMuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZsRG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUgfSBmcm9tICcuL3ZsLWRvY3VtZW50LXRlbXBsYXRlcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmxRdW90ZURpcmVjdGl2ZSB9IGZyb20gJy4vdmwtcXVvdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZsUmFtcERpcmVjdGl2ZSB9IGZyb20gJy4vdmwtcmFtcC5kaXJlY3RpdmUnO1xuXG5jb25zdCBTSEExID0gVVVJRC5TSEExKCk7XG5jb25zdCBTQ1JJUFRfR0xPQkFMX05BTUUgPSBgJHZlbG9gO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdzZWN0aW9uLXNjcmlwdCcsXG4gIGV4cG9ydEFzOiAnc2NyaXB0QXBpJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2ZRdWVyeURpcmVjdGl2ZSxcbiAgICBMaW5lSXRlbURpcmVjdGl2ZSxcbiAgICBWbFF1b3RlRGlyZWN0aXZlLFxuICAgIFZsRG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUsXG4gICAgVmxSYW1wRGlyZWN0aXZlLFxuICAgIFZsQXBwcm92YWxEaXJlY3RpdmUsXG4gICAgVmxEb2N1bWVudEF0dGFjaG1lbnRzRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWN0aW9uU2NyaXB0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHNjcmlwdEVsZW1lbnQ6IGFueTtcbiAgcHJpdmF0ZSBzY3JpcHRJZCA9ICcnO1xuICBwcml2YXRlIHJlZ2lzdHJ5ITogU2NyaXB0UmVnaXN0cnk7XG4gIHByaXZhdGUgc2Vzc2lvblNjb3BlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQsXG4gICAgQEluamVjdChTZlF1ZXJ5RGlyZWN0aXZlKSBwcml2YXRlIHNmUXVlcnlEaXJlY3RpdmU6IFNmUXVlcnlEaXJlY3RpdmUsXG4gICAgQEluamVjdChMaW5lSXRlbURpcmVjdGl2ZSkgcHJpdmF0ZSBsaW5lSXRlbURpcmVjdGl2ZTogTGluZUl0ZW1EaXJlY3RpdmUsXG4gICAgQEluamVjdChWbFF1b3RlRGlyZWN0aXZlKSBwcml2YXRlIHF1b3RlRGlyZWN0aXZlOiBWbFF1b3RlRGlyZWN0aXZlLFxuICAgIEBJbmplY3QoVmxEb2N1bWVudFRlbXBsYXRlc0RpcmVjdGl2ZSkgcHJpdmF0ZSBkb2N1bWVudFRlbXBsYXRlc0RpcmVjdGl2ZTogVmxEb2N1bWVudFRlbXBsYXRlc0RpcmVjdGl2ZSxcbiAgICBASW5qZWN0KFZsUmFtcERpcmVjdGl2ZSkgcHJpdmF0ZSByYW1wRGlyZWN0aXZlOiBWbFJhbXBEaXJlY3RpdmUsXG4gICAgQEluamVjdChWbEFwcHJvdmFsRGlyZWN0aXZlKSBwcml2YXRlIGFwcHJvdmFsRGlyZWN0aXZlOiBWbEFwcHJvdmFsRGlyZWN0aXZlLFxuICAgIEBJbmplY3QoVmxEb2N1bWVudEF0dGFjaG1lbnRzRGlyZWN0aXZlKSBwcml2YXRlIGRvY3VtZW50QXR0YWNobWVudHNEaXJlY3RpdmU6IFZsRG9jdW1lbnRBdHRhY2htZW50c0RpcmVjdGl2ZSxcbiAgICBwcml2YXRlIGZvcm1TY29wZTogRm9ybVNjb3BlU2VydmljZSxcbiAgICBwcml2YXRlIHNlY3Rpb25TY29wZTogU2VjdGlvblNjb3BlU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogUnVudGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IFNob3BwaW5nQ2FydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGVTZXJ2aWNlOiBDdXJyZW50U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVTZXJ2aWNlOiBRdW90ZVNlcnZpY2UsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NyaXB0RXhpc3RzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmlwdElkID0gdGhpcy5nZW5lcmF0ZVNjcmlwdElkKCk7XG4gICAgdGhpcy5yZWdpc3RyeSA9IHRoaXMuZ2V0U2NyaXB0UmVnaXN0cnkoKTtcbiAgICB0aGlzLnNlc3Npb25TY29wZSA9IHRoaXMuZ2V0U2Vzc2lvblNjb3BlKCk7XG5cbiAgICBpZiAoIXRoaXMucmVnaXN0cnkuZXhpc3RzKHRoaXMuc2NyaXB0SWQpKSB7XG4gICAgICB0aGlzLmFwcGVuZFNjcmlwdEVsZW1lbnRUb0RvbSgpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFNjcmlwdCgpO1xuXG4gICAgdGhpcy5yZWdpc3RyeS5kb1JlZ2lzdGVyKHRoaXMuc2NyaXB0SWQsIHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNoYXJlZFNjcmlwdEdsb2JhbCA9IHRoaXMucmVnaXN0cnk/LmdldEdsb2JhbEZvclNjcmlwdCh0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uLmlkKTtcblxuICAgIGlmIChzaGFyZWRTY3JpcHRHbG9iYWwpIHtcbiAgICAgIHRoaXMubWV0aG9kQXBwbHkoJ2FmdGVyVmlld0luaXQnLCBzaGFyZWRTY3JpcHRHbG9iYWwpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JpcHRJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0cnkudW5SZWdpc3Rlcih0aGlzLnNjcmlwdElkLCB0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uLmlkKTtcblxuICAgIGlmICghdGhpcy5yZWdpc3RyeS5leGlzdHModGhpcy5zY3JpcHRJZCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2NyaXB0KCk7XG4gICAgICB0aGlzLnJlZ2lzdHJ5LnJlbW92ZUdsb2JhbEZvclNjcmlwdCh0aGlzLnNjcmlwdElkKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2NvcGUoKSB7XG4gICAgaWYgKCF0aGlzLnNjcmlwdElkIHx8ICF0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVnaXN0cnkuZ2V0R2xvYmFsRm9yU2NyaXB0KHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpIHx8IHt9LCB0aGlzLnNlc3Npb25TY29wZSk7XG4gIH1cblxuICBwcml2YXRlIHNjcmlwdEV4aXN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc2VjdGlvblNjb3BlPy5zZWN0aW9uPy5zY3JpcHQ/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGVuY29kZVNjcmlwdEJvZHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5zY3JpcHQgPyBhdG9iKHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uc2NyaXB0KSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdfJyArIFNIQTEuaGV4KHRoaXMuZW5jb2RlU2NyaXB0Qm9keSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NyaXB0UmVnaXN0cnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjb3BlLnNjcmlwdFJlZ2lzdHJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXNzaW9uU2NvcGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjb3BlLnNjcmlwdFNlc3Npb25TY29wZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNjcmlwdCgpOiB2b2lkIHtcbiAgICBsZXQgc2hhcmVkU2NyaXB0R2xvYmFsID0gdGhpcy5yZWdpc3RyeS5nZXRHbG9iYWxGb3JTY3JpcHQodGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5pZCk7XG5cbiAgICBpZiAoIUVudGl0eVV0aWwuaXNQcmVzZW50KHNoYXJlZFNjcmlwdEdsb2JhbCkpIHtcbiAgICAgIHNoYXJlZFNjcmlwdEdsb2JhbCA9IHt9O1xuICAgICAgdGhpcy5yZWdpc3RyeS5zZXRHbG9iYWxGb3JTY3JpcHQodGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5pZCwgc2hhcmVkU2NyaXB0R2xvYmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLm1ldGhvZEFwcGx5KCdpbml0Jywgc2hhcmVkU2NyaXB0R2xvYmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlU2NyaXB0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNoYXJlZFNjcmlwdEdsb2JhbCA9IHRoaXMucmVnaXN0cnkuZ2V0R2xvYmFsRm9yU2NyaXB0KHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpO1xuXG4gICAgdGhpcy5tZXRob2RBcHBseSgnZGVzdHJveScsIHNoYXJlZFNjcmlwdEdsb2JhbCk7XG5cbiAgICB0aGlzLnJlbW92ZVNjcmlwdEVsZW1lbnRGcm9tRG9tKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFNjcmlwdEVsZW1lbnRUb0RvbSgpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnNjcmlwdEZyb21UZW1wbGF0ZSh0aGlzLmVuY29kZVNjcmlwdEJvZHkoKSwgdGhpcy5zY3JpcHRJZCwgdGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbik7XG5cbiAgICB0aGlzLnNjcmlwdEVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHRoaXMuc2NyaXB0RWxlbWVudC50eXBlID0gYHRleHQvamF2YXNjcmlwdGA7XG4gICAgdGhpcy5zY3JpcHRFbGVtZW50LnRleHQgPSBzY3JpcHQ7XG5cbiAgICB0aGlzLnNjcmlwdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuc2NyaXB0SWQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCB0aGlzLnNjcmlwdEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTY3JpcHRFbGVtZW50RnJvbURvbSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NyaXB0RWxlbWVudCkge1xuICAgICAgdGhpcy5zY3JpcHRFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zY3JpcHRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JpcHRFbGVtZW50LnJlbW92ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JpcHRGcm9tVGVtcGxhdGUoc2NyaXB0Qm9keTogc3RyaW5nLCBzY3JpcHRJZDogc3RyaW5nLCBzZWN0aW9uOiBTZWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHZhciAke3NjcmlwdElkfSA9IChmdW5jdGlvbiAoJHtTQ1JJUFRfR0xPQkFMX05BTUV9LCBmb3JtLCB7IHNlY3Rpb24sIHRlbXBsYXRlcyB9LCBzZXNzaW9uU2NvcGUsIGZvcm1CdWlsZGVyLCBydW50aW1lQ29udGV4dCwgY2RyLCBhcGlzKSB7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJmb3JtXCJdID0gZm9ybTtcbiAgICAgICAgICAgICR7U0NSSVBUX0dMT0JBTF9OQU1FfVtcInNlY3Rpb25cIl0gPSBzZWN0aW9uO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1widGVtcGxhdGVzXCJdID0gdGVtcGxhdGVzO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1wic2Vzc2lvblNjb3BlXCJdID0gc2Vzc2lvblNjb3BlO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1wiZm9ybUJ1aWxkZXJcIl0gPSBmb3JtQnVpbGRlcjtcbiAgICAgICAgICAgICR7U0NSSVBUX0dMT0JBTF9OQU1FfVtcInJ1bnRpbWVDb250ZXh0XCJdID0gcnVudGltZUNvbnRleHQ7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJjZHJcIl0gPSBjZHI7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJhcGlzXCJdID0gYXBpcztcblxuICAgICAgICAgICAgJHtzY3JpcHRCb2R5fVxuICAgICAgICAgICAgICAgIHJldHVybiAke1NDUklQVF9HTE9CQUxfTkFNRX07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8jIHNvdXJjZVVSTD0ke18ua2ViYWJDYXNlKHNlY3Rpb24ubGFiZWwpfS5qc2A7XG4gIH1cblxuICBwcml2YXRlIG1ldGhvZEFwcGx5KG1ldGhvZE5hbWU6IHN0cmluZywgc2hhcmVkU2NyaXB0R2xvYmFsOiBhbnkpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgc2hhcmVkU2NyaXB0R2xvYmFsLFxuICAgICAgdGhpcy5mb3JtU2NvcGUuZm9ybSxcbiAgICAgIHRoaXMuc2VjdGlvblNjb3BlLFxuICAgICAgdGhpcy5zZXNzaW9uU2NvcGUsXG4gICAgICB0aGlzLmZvcm1CdWlsZGVyLFxuICAgICAgdGhpcy5ydW50aW1lU2VydmljZS5nZXRSdW50aW1lQ29udGV4dCgpLFxuICAgICAgdGhpcy5jZHIsXG4gICAgICB0aGlzLmdldEV4cG9zZWRBcGlzKCksXG4gICAgXTtcblxuICAgIGNvbnN0IGZuSW5pdCA9ICh3aW5kb3cgYXMgYW55KVtgJHt0aGlzLnNjcmlwdElkfWBdKC4uLmFyZ3MpO1xuXG4gICAgZm5Jbml0ICYmIGZuSW5pdFttZXRob2ROYW1lXSAmJiBmbkluaXRbbWV0aG9kTmFtZV0uYXBwbHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwb3NlZEFwaXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdzZi1xdWVyeSc6IHRoaXMuc2ZRdWVyeURpcmVjdGl2ZSxcbiAgICAgICdsaW5lLWl0ZW0nOiB0aGlzLmxpbmVJdGVtRGlyZWN0aXZlLFxuICAgICAgJ3F1b3RlLWRpcmVjdGl2ZSc6IHRoaXMucXVvdGVEaXJlY3RpdmUsXG4gICAgICAndGVtcGxhdGVzLWRpcmVjdGl2ZSc6IHRoaXMuZG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUsXG4gICAgICAnYXR0YWNobWVudHMtZGlyZWN0aXZlJzogdGhpcy5kb2N1bWVudEF0dGFjaG1lbnRzRGlyZWN0aXZlLFxuICAgICAgJ3JhbXAtZGlyZWN0aXZlJzogdGhpcy5yYW1wRGlyZWN0aXZlLFxuICAgICAgJ2FwcHJvdmFsLWRpcmVjdGl2ZSc6IHRoaXMuYXBwcm92YWxEaXJlY3RpdmUsXG4gICAgICBlbnRpdHlVdGlsOiBFbnRpdHlVdGlsLFxuICAgICAgbW9tZW50LFxuICAgICAgbG9kYXNoOiBfLFxuICAgICAgcnhqczogeyAuLi5yeGpzT3BlcmF0b3JzLCAuLi5yeGpzIH0sXG4gICAgICBQYWdlZEVudGl0eSxcbiAgICAgIHBpcGVzOiB7XG4gICAgICAgIGN1cnJlbmN5OiBDdXJyZW5jeVBpcGUsXG4gICAgICB9LFxuICAgICAgc29sdXRpb25VcGRhdGVTdGFydGVkOiB0aGlzLnJ1bnRpbWVTZXJ2aWNlLm9uU29sdXRpb25VcGRhdGVTdGFydGVkRXZlbnQsXG4gICAgICBzb2x1dGlvblVwZGF0ZWQ6IHRoaXMucnVudGltZVNlcnZpY2Uub25Tb2x1dGlvblByb2Nlc3NlZCxcbiAgICAgIGNhcnRTZXJ2aWNlOiB0aGlzLmNhcnRTZXJ2aWNlLFxuICAgICAgY29uZmlndXJhdGlvbkNvbnRleHRTZXJ2aWNlOiB0aGlzLmNvbnRleHRTZXJ2aWNlLFxuICAgICAgcXVvdGVEcmFmdDogdGhpcy5xdW90ZVNlcnZpY2UuZ2V0UXVvdGUoKSxcbiAgICAgIGN1cnJlbnRTdGF0ZVNlcnZpY2U6IHRoaXMuY3VycmVudFN0YXRlU2VydmljZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
241
+ }] }, { type: i1.FormScopeService }, { type: i2.SectionScopeService }, { type: i0.Renderer2 }, { type: i3.FormBuilder }, { type: i4.RuntimeService }, { type: i0.ChangeDetectorRef }, { type: i5.ShoppingCartService }, { type: i6.ContextService }, { type: i7.CurrentStateService }, { type: i6.QuoteDraftService }]; } });
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1zY3JpcHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvcnVudGltZS9leGVjdXRpb24vZGlyZWN0aXZlcy9zZWN0aW9uLXNjcmlwdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFXLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBT2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekIsTUFBTSxrQkFBa0IsR0FBRyxP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aUI7UUFDakIsZ0JBQWdCO1FBQ2hCLDRCQUE0QjtRQUM1QixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLDhCQUE4QjtLQUMvQjs0RkFFVSxzQkFBc0I7a0JBZGxDLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsV0FBVztvQkFDckIsU0FBUyxFQUFFO3dCQUNULGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLDhCQUE4QjtxQkFDL0I7aUJBQ0Y7MERBUXdDLFFBQVE7MEJBQTVDLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyw0QkFBNEI7OzBCQUNuQyxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbCwgUGFnZWRFbnRpdHksIFNlY3Rpb24sIFVVSUQgfSBmcm9tICdAdmVsb2NlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UsIFF1b3RlRHJhZnRTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZS9zZGsvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyByeGpzT3BlcmF0b3JzIGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VycmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1cnJlbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtU2NvcGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1zY29wZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJ1bnRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcnVudGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3Rpb25TY29wZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN0aW9uLXNjb3BlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NyaXB0UmVnaXN0cnkgfSBmcm9tICcuLi8uLi90eXBlcy9zY3JpcHQtcmVnaXN0cnkudHlwZXMnO1xuaW1wb3J0IHsgU2ZRdWVyeURpcmVjdGl2ZSB9IGZyb20gJy4vc2YtcXVlcnkuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpbmVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi92ZWxvLXBvcnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZsQXBwcm92YWxEaXJlY3RpdmUgfSBmcm9tICcuL3ZsLWFwcHJvdmFsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBWbERvY3VtZW50QXR0YWNobWVudHNEaXJlY3RpdmUgfSBmcm9tICcuL3ZsLWRvY3VtZW50LWF0dGFjaG1lbnRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBWbERvY3VtZW50VGVtcGxhdGVzRGlyZWN0aXZlIH0gZnJvbSAnLi92bC1kb2N1bWVudC10ZW1wbGF0ZXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZsUXVvdGVEaXJlY3RpdmUgfSBmcm9tICcuL3ZsLXF1b3RlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBWbFJhbXBEaXJlY3RpdmUgfSBmcm9tICcuL3ZsLXJhbXAuZGlyZWN0aXZlJztcblxuY29uc3QgU0hBMSA9IFVVSUQuU0hBMSgpO1xuY29uc3QgU0NSSVBUX0dMT0JBTF9OQU1FID0gYCR2ZWxvYDtcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnc2VjdGlvbi1zY3JpcHQnLFxuICBleHBvcnRBczogJ3NjcmlwdEFwaScsXG4gIHByb3ZpZGVyczogW1xuICAgIFNmUXVlcnlEaXJlY3RpdmUsXG4gICAgTGluZUl0ZW1EaXJlY3RpdmUsXG4gICAgVmxRdW90ZURpcmVjdGl2ZSxcbiAgICBWbERvY3VtZW50VGVtcGxhdGVzRGlyZWN0aXZlLFxuICAgIFZsUmFtcERpcmVjdGl2ZSxcbiAgICBWbEFwcHJvdmFsRGlyZWN0aXZlLFxuICAgIFZsRG9jdW1lbnRBdHRhY2htZW50c0RpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VjdGlvblNjcmlwdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzY3JpcHRFbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgc2NyaXB0SWQgPSAnJztcbiAgcHJpdmF0ZSByZWdpc3RyeSE6IFNjcmlwdFJlZ2lzdHJ5O1xuICBwcml2YXRlIHNlc3Npb25TY29wZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoU2ZRdWVyeURpcmVjdGl2ZSkgcHJpdmF0ZSBzZlF1ZXJ5RGlyZWN0aXZlOiBTZlF1ZXJ5RGlyZWN0aXZlLFxuICAgIEBJbmplY3QoTGluZUl0ZW1EaXJlY3RpdmUpIHByaXZhdGUgbGluZUl0ZW1EaXJlY3RpdmU6IExpbmVJdGVtRGlyZWN0aXZlLFxuICAgIEBJbmplY3QoVmxRdW90ZURpcmVjdGl2ZSkgcHJpdmF0ZSBxdW90ZURpcmVjdGl2ZTogVmxRdW90ZURpcmVjdGl2ZSxcbiAgICBASW5qZWN0KFZsRG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUpIHByaXZhdGUgZG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmU6IFZsRG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUsXG4gICAgQEluamVjdChWbFJhbXBEaXJlY3RpdmUpIHByaXZhdGUgcmFtcERpcmVjdGl2ZTogVmxSYW1wRGlyZWN0aXZlLFxuICAgIEBJbmplY3QoVmxBcHByb3ZhbERpcmVjdGl2ZSkgcHJpdmF0ZSBhcHByb3ZhbERpcmVjdGl2ZTogVmxBcHByb3ZhbERpcmVjdGl2ZSxcbiAgICBASW5qZWN0KFZsRG9jdW1lbnRBdHRhY2htZW50c0RpcmVjdGl2ZSkgcHJpdmF0ZSBkb2N1bWVudEF0dGFjaG1lbnRzRGlyZWN0aXZlOiBWbERvY3VtZW50QXR0YWNobWVudHNEaXJlY3RpdmUsXG4gICAgcHJpdmF0ZSBmb3JtU2NvcGU6IEZvcm1TY29wZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWN0aW9uU2NvcGU6IFNlY3Rpb25TY29wZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcnVudGltZVNlcnZpY2U6IFJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBTaG9wcGluZ0NhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VycmVudFN0YXRlU2VydmljZTogQ3VycmVudFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlU2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NyaXB0RXhpc3RzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNjcmlwdElkID0gdGhpcy5nZW5lcmF0ZVNjcmlwdElkKCk7XG4gICAgdGhpcy5yZWdpc3RyeSA9IHRoaXMuZ2V0U2NyaXB0UmVnaXN0cnkoKTtcbiAgICB0aGlzLnNlc3Npb25TY29wZSA9IHRoaXMuZ2V0U2Vzc2lvblNjb3BlKCk7XG5cbiAgICBpZiAoIXRoaXMucmVnaXN0cnkuZXhpc3RzKHRoaXMuc2NyaXB0SWQpKSB7XG4gICAgICB0aGlzLmFwcGVuZFNjcmlwdEVsZW1lbnRUb0RvbSgpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFNjcmlwdCgpO1xuXG4gICAgdGhpcy5yZWdpc3RyeS5kb1JlZ2lzdGVyKHRoaXMuc2NyaXB0SWQsIHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNoYXJlZFNjcmlwdEdsb2JhbCA9IHRoaXMucmVnaXN0cnk/LmdldEdsb2JhbEZvclNjcmlwdCh0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uLmlkKTtcblxuICAgIGlmIChzaGFyZWRTY3JpcHRHbG9iYWwpIHtcbiAgICAgIHRoaXMubWV0aG9kQXBwbHkoJ2FmdGVyVmlld0luaXQnLCBzaGFyZWRTY3JpcHRHbG9iYWwpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY3JpcHRJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0cnkudW5SZWdpc3Rlcih0aGlzLnNjcmlwdElkLCB0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uLmlkKTtcblxuICAgIGlmICghdGhpcy5yZWdpc3RyeS5leGlzdHModGhpcy5zY3JpcHRJZCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2NyaXB0KCk7XG4gICAgICB0aGlzLnJlZ2lzdHJ5LnJlbW92ZUdsb2JhbEZvclNjcmlwdCh0aGlzLnNjcmlwdElkKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2NvcGUoKSB7XG4gICAgaWYgKCF0aGlzLnNjcmlwdElkIHx8ICF0aGlzLnNlY3Rpb25TY29wZS5zZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVnaXN0cnkuZ2V0R2xvYmFsRm9yU2NyaXB0KHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpIHx8IHt9LCB0aGlzLnNlc3Npb25TY29wZSk7XG4gIH1cblxuICBwcml2YXRlIHNjcmlwdEV4aXN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc2VjdGlvblNjb3BlPy5zZWN0aW9uPy5zY3JpcHQ/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGVuY29kZVNjcmlwdEJvZHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5zY3JpcHQgPyBhdG9iKHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uc2NyaXB0KSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdfJyArIFNIQTEuaGV4KHRoaXMuZW5jb2RlU2NyaXB0Qm9keSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NyaXB0UmVnaXN0cnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjb3BlLnNjcmlwdFJlZ2lzdHJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXNzaW9uU2NvcGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNjb3BlLnNjcmlwdFNlc3Npb25TY29wZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNjcmlwdCgpOiB2b2lkIHtcbiAgICBsZXQgc2hhcmVkU2NyaXB0R2xvYmFsID0gdGhpcy5yZWdpc3RyeS5nZXRHbG9iYWxGb3JTY3JpcHQodGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5pZCk7XG5cbiAgICBpZiAoIUVudGl0eVV0aWwuaXNQcmVzZW50KHNoYXJlZFNjcmlwdEdsb2JhbCkpIHtcbiAgICAgIHNoYXJlZFNjcmlwdEdsb2JhbCA9IHt9O1xuICAgICAgdGhpcy5yZWdpc3RyeS5zZXRHbG9iYWxGb3JTY3JpcHQodGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbi5pZCwgc2hhcmVkU2NyaXB0R2xvYmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLm1ldGhvZEFwcGx5KCdpbml0Jywgc2hhcmVkU2NyaXB0R2xvYmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlU2NyaXB0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNoYXJlZFNjcmlwdEdsb2JhbCA9IHRoaXMucmVnaXN0cnkuZ2V0R2xvYmFsRm9yU2NyaXB0KHRoaXMuc2VjdGlvblNjb3BlLnNlY3Rpb24uaWQpO1xuXG4gICAgdGhpcy5tZXRob2RBcHBseSgnZGVzdHJveScsIHNoYXJlZFNjcmlwdEdsb2JhbCk7XG5cbiAgICB0aGlzLnJlbW92ZVNjcmlwdEVsZW1lbnRGcm9tRG9tKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFNjcmlwdEVsZW1lbnRUb0RvbSgpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnNjcmlwdEZyb21UZW1wbGF0ZSh0aGlzLmVuY29kZVNjcmlwdEJvZHkoKSwgdGhpcy5zY3JpcHRJZCwgdGhpcy5zZWN0aW9uU2NvcGUuc2VjdGlvbik7XG5cbiAgICB0aGlzLnNjcmlwdEVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHRoaXMuc2NyaXB0RWxlbWVudC50eXBlID0gYHRleHQvamF2YXNjcmlwdGA7XG4gICAgdGhpcy5zY3JpcHRFbGVtZW50LnRleHQgPSBzY3JpcHQ7XG5cbiAgICB0aGlzLnNjcmlwdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuc2NyaXB0SWQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCB0aGlzLnNjcmlwdEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTY3JpcHRFbGVtZW50RnJvbURvbSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NyaXB0RWxlbWVudCkge1xuICAgICAgdGhpcy5zY3JpcHRFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zY3JpcHRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zY3JpcHRFbGVtZW50LnJlbW92ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JpcHRGcm9tVGVtcGxhdGUoc2NyaXB0Qm9keTogc3RyaW5nLCBzY3JpcHRJZDogc3RyaW5nLCBzZWN0aW9uOiBTZWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHZhciAke3NjcmlwdElkfSA9IChmdW5jdGlvbiAoJHtTQ1JJUFRfR0xPQkFMX05BTUV9LCBmb3JtLCB7IHNlY3Rpb24sIHRlbXBsYXRlcyB9LCBzZXNzaW9uU2NvcGUsIGZvcm1CdWlsZGVyLCBydW50aW1lQ29udGV4dCwgY2RyLCBhcGlzKSB7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJmb3JtXCJdID0gZm9ybTtcbiAgICAgICAgICAgICR7U0NSSVBUX0dMT0JBTF9OQU1FfVtcInNlY3Rpb25cIl0gPSBzZWN0aW9uO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1widGVtcGxhdGVzXCJdID0gdGVtcGxhdGVzO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1wic2Vzc2lvblNjb3BlXCJdID0gc2Vzc2lvblNjb3BlO1xuICAgICAgICAgICAgJHtTQ1JJUFRfR0xPQkFMX05BTUV9W1wiZm9ybUJ1aWxkZXJcIl0gPSBmb3JtQnVpbGRlcjtcbiAgICAgICAgICAgICR7U0NSSVBUX0dMT0JBTF9OQU1FfVtcInJ1bnRpbWVDb250ZXh0XCJdID0gcnVudGltZUNvbnRleHQ7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJjZHJcIl0gPSBjZHI7XG4gICAgICAgICAgICAke1NDUklQVF9HTE9CQUxfTkFNRX1bXCJhcGlzXCJdID0gYXBpcztcblxuICAgICAgICAgICAgJHtzY3JpcHRCb2R5fVxuICAgICAgICAgICAgICAgIHJldHVybiAke1NDUklQVF9HTE9CQUxfTkFNRX07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8jIHNvdXJjZVVSTD0ke18ua2ViYWJDYXNlKHNlY3Rpb24ubGFiZWwpfS5qc2A7XG4gIH1cblxuICBwcml2YXRlIG1ldGhvZEFwcGx5KG1ldGhvZE5hbWU6IHN0cmluZywgc2hhcmVkU2NyaXB0R2xvYmFsOiBhbnkpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgc2hhcmVkU2NyaXB0R2xvYmFsLFxuICAgICAgdGhpcy5mb3JtU2NvcGUuZm9ybSxcbiAgICAgIHRoaXMuc2VjdGlvblNjb3BlLFxuICAgICAgdGhpcy5zZXNzaW9uU2NvcGUsXG4gICAgICB0aGlzLmZvcm1CdWlsZGVyLFxuICAgICAgdGhpcy5ydW50aW1lU2VydmljZS5nZXRSdW50aW1lQ29udGV4dCgpLFxuICAgICAgdGhpcy5jZHIsXG4gICAgICB0aGlzLmdldEV4cG9zZWRBcGlzKCksXG4gICAgXTtcblxuICAgIGNvbnN0IGZuSW5pdCA9ICh3aW5kb3cgYXMgYW55KVtgJHt0aGlzLnNjcmlwdElkfWBdKC4uLmFyZ3MpO1xuXG4gICAgZm5Jbml0ICYmIGZuSW5pdFttZXRob2ROYW1lXSAmJiBmbkluaXRbbWV0aG9kTmFtZV0uYXBwbHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwb3NlZEFwaXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdzZi1xdWVyeSc6IHRoaXMuc2ZRdWVyeURpcmVjdGl2ZSxcbiAgICAgICdsaW5lLWl0ZW0nOiB0aGlzLmxpbmVJdGVtRGlyZWN0aXZlLFxuICAgICAgJ3F1b3RlLWRpcmVjdGl2ZSc6IHRoaXMucXVvdGVEaXJlY3RpdmUsXG4gICAgICAndGVtcGxhdGVzLWRpcmVjdGl2ZSc6IHRoaXMuZG9jdW1lbnRUZW1wbGF0ZXNEaXJlY3RpdmUsXG4gICAgICAnYXR0YWNobWVudHMtZGlyZWN0aXZlJzogdGhpcy5kb2N1bWVudEF0dGFjaG1lbnRzRGlyZWN0aXZlLFxuICAgICAgJ3JhbXAtZGlyZWN0aXZlJzogdGhpcy5yYW1wRGlyZWN0aXZlLFxuICAgICAgJ2FwcHJvdmFsLWRpcmVjdGl2ZSc6IHRoaXMuYXBwcm92YWxEaXJlY3RpdmUsXG4gICAgICBlbnRpdHlVdGlsOiBFbnRpdHlVdGlsLFxuICAgICAgbW9tZW50LFxuICAgICAgbG9kYXNoOiBfLFxuICAgICAgcnhqczogeyAuLi5yeGpzT3BlcmF0b3JzLCAuLi5yeGpzIH0sXG4gICAgICBQYWdlZEVudGl0eSxcbiAgICAgIHBpcGVzOiB7XG4gICAgICAgIGN1cnJlbmN5OiBDdXJyZW5jeVBpcGUsXG4gICAgICB9LFxuICAgICAgc29sdXRpb25VcGRhdGVTdGFydGVkOiB0aGlzLnJ1bnRpbWVTZXJ2aWNlLm9uU29sdXRpb25VcGRhdGVTdGFydGVkRXZlbnQsXG4gICAgICBzb2x1dGlvblVwZGF0ZWQ6IHRoaXMucnVudGltZVNlcnZpY2Uub25Tb2x1dGlvblByb2Nlc3NlZCxcbiAgICAgIGNhcnRTZXJ2aWNlOiB0aGlzLmNhcnRTZXJ2aWNlLFxuICAgICAgY29uZmlndXJhdGlvbkNvbnRleHRTZXJ2aWNlOiB0aGlzLmNvbnRleHRTZXJ2aWNlLFxuICAgICAgcXVvdGVEcmFmdDogdGhpcy5xdW90ZVNlcnZpY2UucXVvdGVTbmFwc2hvdCxcbiAgICAgIGN1cnJlbnRTdGF0ZVNlcnZpY2U6IHRoaXMuY3VycmVudFN0YXRlU2VydmljZSxcbiAgICB9O1xuICB9XG59XG4iXX0=