angular-three-soba 2.1.0 → 2.2.1

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 (151) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +139 -139
  2. package/abstractions/lib/edges.d.ts +164 -164
  3. package/abstractions/lib/grid.d.ts +39 -39
  4. package/abstractions/lib/line.d.ts +8 -7
  5. package/abstractions/lib/prism-geometry.d.ts +4 -4
  6. package/abstractions/lib/rounded-box.d.ts +3 -3
  7. package/abstractions/lib/text-3d.d.ts +46 -46
  8. package/abstractions/lib/text.d.ts +1 -2
  9. package/cameras/lib/cube-camera.d.ts +1 -1
  10. package/cameras/lib/orthographic-camera.d.ts +7 -8
  11. package/cameras/lib/perspective-camera.d.ts +2 -3
  12. package/controls/index.d.ts +9 -1
  13. package/controls/lib/camera-controls.d.ts +1 -1
  14. package/controls/lib/orbit-controls.d.ts +1 -1
  15. package/esm2022/abstractions/lib/billboard.mjs +3 -3
  16. package/esm2022/abstractions/lib/catmull-rom-line.mjs +3 -3
  17. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +3 -3
  18. package/esm2022/abstractions/lib/edges.mjs +30 -34
  19. package/esm2022/abstractions/lib/gradient-texture.mjs +3 -3
  20. package/esm2022/abstractions/lib/grid.mjs +3 -3
  21. package/esm2022/abstractions/lib/helper.mjs +18 -20
  22. package/esm2022/abstractions/lib/line.mjs +25 -28
  23. package/esm2022/abstractions/lib/prism-geometry.mjs +3 -3
  24. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +3 -3
  25. package/esm2022/abstractions/lib/rounded-box.mjs +11 -17
  26. package/esm2022/abstractions/lib/text-3d.mjs +14 -17
  27. package/esm2022/abstractions/lib/text.mjs +11 -16
  28. package/esm2022/cameras/lib/camera-content.mjs +3 -3
  29. package/esm2022/cameras/lib/cube-camera.mjs +18 -27
  30. package/esm2022/cameras/lib/orthographic-camera.mjs +20 -20
  31. package/esm2022/cameras/lib/perspective-camera.mjs +21 -21
  32. package/esm2022/controls/index.mjs +6 -2
  33. package/esm2022/controls/lib/camera-controls.mjs +3 -3
  34. package/esm2022/controls/lib/orbit-controls.mjs +3 -3
  35. package/esm2022/controls/lib/scroll-controls.mjs +124 -130
  36. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  37. package/esm2022/gizmos/index.mjs +6 -0
  38. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +187 -0
  39. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +304 -0
  40. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +332 -0
  41. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +265 -0
  42. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +264 -0
  43. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +337 -0
  44. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +266 -0
  45. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +232 -0
  46. package/esm2022/gizmos/lib/transform-controls.mjs +177 -0
  47. package/esm2022/loaders/lib/loader.mjs +3 -3
  48. package/esm2022/materials/lib/custom-shader-material.mjs +8 -12
  49. package/esm2022/materials/lib/mesh-distort-material.mjs +3 -3
  50. package/esm2022/materials/lib/mesh-reflector-material.mjs +11 -15
  51. package/esm2022/materials/lib/mesh-refraction-material.mjs +26 -30
  52. package/esm2022/materials/lib/mesh-transmission-material.mjs +3 -3
  53. package/esm2022/materials/lib/mesh-wobble-material.mjs +3 -3
  54. package/esm2022/materials/lib/point-material.mjs +3 -3
  55. package/esm2022/misc/lib/bake-shadows.mjs +8 -10
  56. package/esm2022/misc/lib/computed-attribute.mjs +15 -19
  57. package/esm2022/misc/lib/decal.mjs +56 -53
  58. package/esm2022/misc/lib/fbo.mjs +10 -10
  59. package/esm2022/misc/lib/html/html-content.mjs +62 -67
  60. package/esm2022/misc/lib/html/html.mjs +3 -3
  61. package/esm2022/misc/lib/intersect.mjs +6 -9
  62. package/esm2022/misc/lib/sampler.mjs +48 -42
  63. package/esm2022/performances/lib/adaptive-dpr.mjs +29 -35
  64. package/esm2022/performances/lib/adaptive-events.mjs +12 -16
  65. package/esm2022/performances/lib/detailed.mjs +14 -18
  66. package/esm2022/performances/lib/instances/instances.mjs +16 -22
  67. package/esm2022/performances/lib/points/points.mjs +19 -25
  68. package/esm2022/performances/lib/segments/segments.mjs +11 -14
  69. package/esm2022/shaders/lib/mesh-refraction-material.mjs +1 -1
  70. package/esm2022/staging/index.mjs +3 -2
  71. package/esm2022/staging/lib/accumulative-shadows.mjs +19 -21
  72. package/esm2022/staging/lib/backdrop.mjs +19 -23
  73. package/esm2022/staging/lib/bb-anchor.mjs +3 -3
  74. package/esm2022/staging/lib/bounds.mjs +39 -43
  75. package/esm2022/staging/lib/camera-shake.mjs +14 -18
  76. package/esm2022/staging/lib/caustics.mjs +24 -28
  77. package/esm2022/staging/lib/center.mjs +28 -32
  78. package/esm2022/staging/lib/contact-shadows.mjs +3 -3
  79. package/esm2022/staging/lib/environment/environment.mjs +338 -0
  80. package/esm2022/staging/lib/environment/inject-environment.mjs +184 -0
  81. package/esm2022/staging/lib/float.mjs +3 -3
  82. package/esm2022/staging/lib/lightformer.mjs +18 -22
  83. package/esm2022/staging/lib/mask.mjs +8 -12
  84. package/esm2022/staging/lib/matcap-texture.mjs +9 -11
  85. package/esm2022/staging/lib/normal-texture.mjs +9 -11
  86. package/esm2022/staging/lib/randomized-lights.mjs +9 -13
  87. package/esm2022/staging/lib/render-texture.mjs +19 -20
  88. package/esm2022/staging/lib/sky.mjs +3 -3
  89. package/esm2022/staging/lib/spot-light.mjs +32 -40
  90. package/esm2022/staging/lib/stage.mjs +13 -17
  91. package/esm2022/stats/lib/stats.mjs +21 -27
  92. package/fesm2022/angular-three-soba-abstractions.mjs +119 -138
  93. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2022/angular-three-soba-cameras.mjs +57 -64
  95. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2022/angular-three-soba-controls.mjs +141 -1470
  97. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  98. package/fesm2022/angular-three-soba-gizmos.mjs +2318 -0
  99. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  100. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  101. package/fesm2022/angular-three-soba-materials.mjs +52 -62
  102. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  103. package/fesm2022/angular-three-soba-misc.mjs +194 -195
  104. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  105. package/fesm2022/angular-three-soba-performances.mjs +90 -114
  106. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  107. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  108. package/fesm2022/angular-three-soba-staging.mjs +427 -430
  109. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  110. package/fesm2022/angular-three-soba-stats.mjs +20 -26
  111. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  112. package/gizmos/README.md +3 -0
  113. package/gizmos/index.d.ts +5 -0
  114. package/gizmos/lib/gizmo-helper/gizmo-helper.d.ts +45 -0
  115. package/gizmos/lib/gizmo-helper/gizmo-viewcube.d.ts +74 -0
  116. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +64 -0
  117. package/{controls → gizmos}/lib/pivot-controls/pivot-controls.d.ts +1 -1
  118. package/gizmos/lib/transform-controls.d.ts +50 -0
  119. package/materials/lib/mesh-transmission-material.d.ts +1 -1
  120. package/misc/lib/computed-attribute.d.ts +2 -2
  121. package/misc/lib/decal.d.ts +4 -4
  122. package/misc/lib/html/html-content.d.ts +6 -6
  123. package/misc/lib/html/html.d.ts +1 -1
  124. package/misc/lib/sampler.d.ts +1 -3
  125. package/package.json +14 -8
  126. package/performances/lib/instances/instances.d.ts +3 -3
  127. package/shaders/lib/mesh-refraction-material.d.ts +2 -5
  128. package/staging/index.d.ts +2 -1
  129. package/staging/lib/camera-shake.d.ts +0 -1
  130. package/staging/lib/caustics.d.ts +1 -1
  131. package/staging/lib/center.d.ts +2 -2
  132. package/staging/lib/contact-shadows.d.ts +1 -1
  133. package/staging/lib/{environment.d.ts → environment/environment.d.ts} +20 -49
  134. package/staging/lib/environment/inject-environment.d.ts +33 -0
  135. package/staging/lib/lightformer.d.ts +1 -1
  136. package/staging/lib/mask.d.ts +1 -1
  137. package/staging/lib/matcap-texture.d.ts +0 -1
  138. package/staging/lib/normal-texture.d.ts +0 -1
  139. package/staging/lib/render-texture.d.ts +1 -1
  140. package/staging/lib/sky.d.ts +1 -1
  141. package/staging/lib/stage.d.ts +3 -2
  142. package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +0 -263
  143. package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +0 -264
  144. package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +0 -340
  145. package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +0 -266
  146. package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +0 -232
  147. package/esm2022/staging/lib/environment.mjs +0 -481
  148. /package/{controls → gizmos}/lib/pivot-controls/axis-arrow.d.ts +0 -0
  149. /package/{controls → gizmos}/lib/pivot-controls/axis-rotator.d.ts +0 -0
  150. /package/{controls → gizmos}/lib/pivot-controls/plane-slider.d.ts +0 -0
  151. /package/{controls → gizmos}/lib/pivot-controls/scaling-sphere.d.ts +0 -0
@@ -1,8 +1,7 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, input, } from '@angular/core';
3
- import { NgtArgs, NgtPortal, NgtPortalContent, extend, getLocalState, injectBeforeRender, injectStore, omit, pick, prepare, } from 'angular-three';
2
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, effect, input, } from '@angular/core';
3
+ import { NgtArgs, NgtPortal, NgtPortalContent, extend, getLocalState, injectStore, omit, pick, prepare, } from 'angular-three';
4
4
  import { injectFBO } from 'angular-three-soba/misc';
5
- import { injectAutoEffect } from 'ngxtension/auto-effect';
6
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
7
6
  import { Group, Object3D, Scene } from 'three';
8
7
  import * as i0 from "@angular/core";
@@ -14,16 +13,14 @@ export class NgtsRenderTextureContainer {
14
13
  this.frames = input.required();
15
14
  this.injector = input.required();
16
15
  this.store = injectStore();
17
- injectAutoEffect()(() => {
18
- // track
19
- this.store.state();
20
- const renderPriority = this.renderPriority();
16
+ effect((onCleanup) => {
17
+ const [renderPriority, { internal }] = [this.renderPriority(), this.store.state()];
21
18
  let count = 0;
22
19
  let oldAutoClear;
23
20
  let oldXrEnabled;
24
21
  let oldRenderTarget;
25
22
  let oldIsPresenting;
26
- const sub = injectBeforeRender(({ gl, scene, camera }) => {
23
+ const cleanup = internal.subscribe(({ gl, scene, camera }) => {
27
24
  const [fbo, frames] = [this.fbo(), this.frames()];
28
25
  // NOTE: render the frames ^ 2
29
26
  // due to some race condition, we want to render double the frames here.
@@ -43,14 +40,16 @@ export class NgtsRenderTextureContainer {
43
40
  gl.xr.isPresenting = oldIsPresenting;
44
41
  count++;
45
42
  }
46
- }, { priority: renderPriority, injector: this.injector() });
47
- return () => sub();
43
+ }, renderPriority, this.store);
44
+ onCleanup(() => {
45
+ cleanup();
46
+ });
48
47
  });
49
48
  }
50
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTextureContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
51
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgtsRenderTextureContainer, isStandalone: true, selector: "[ngtsRenderTextureContainer]", inputs: { fbo: { classPropertyName: "fbo", publicName: "fbo", isSignal: true, isRequired: true, transformFunction: null }, renderPriority: { classPropertyName: "renderPriority", publicName: "renderPriority", isSignal: true, isRequired: true, transformFunction: null }, frames: { classPropertyName: "frames", publicName: "frames", isSignal: true, isRequired: true, transformFunction: null }, injector: { classPropertyName: "injector", publicName: "injector", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.4", type: NgtsRenderTextureContainer, isStandalone: true, selector: "[ngtsRenderTextureContainer]", inputs: { fbo: { classPropertyName: "fbo", publicName: "fbo", isSignal: true, isRequired: true, transformFunction: null }, renderPriority: { classPropertyName: "renderPriority", publicName: "renderPriority", isSignal: true, isRequired: true, transformFunction: null }, frames: { classPropertyName: "frames", publicName: "frames", isSignal: true, isRequired: true, transformFunction: null }, injector: { classPropertyName: "injector", publicName: "injector", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
52
51
  }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTextureContainer, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContainer, decorators: [{
54
53
  type: Directive,
55
54
  args: [{ standalone: true, selector: '[ngtsRenderTextureContainer]' }]
56
55
  }], ctorParameters: () => [] });
@@ -67,10 +66,10 @@ export class NgtsRenderTextureContent {
67
66
  static ngTemplateContextGuard(_, ctx) {
68
67
  return true;
69
68
  }
70
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTextureContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
71
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: NgtsRenderTextureContent, isStandalone: true, selector: "ng-template[renderTextureContent]", ngImport: i0 }); }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
70
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.4", type: NgtsRenderTextureContent, isStandalone: true, selector: "ng-template[renderTextureContent]", ngImport: i0 }); }
72
71
  }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTextureContent, decorators: [{
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTextureContent, decorators: [{
74
73
  type: Directive,
75
74
  args: [{ selector: 'ng-template[renderTextureContent]', standalone: true }]
76
75
  }] });
@@ -148,8 +147,8 @@ export class NgtsRenderTexture {
148
147
  onPointerOver() {
149
148
  /* noop */
150
149
  }
151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsRenderTexture, isStandalone: true, selector: "ngts-render-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsRenderTextureContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsRenderTexture, isStandalone: true, selector: "ngts-render-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsRenderTextureContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
153
152
  <ngt-portal [container]="virtualScene()" [state]="{ events: { compute: compute(), priority: eventPriority() } }">
154
153
  <ng-template portalContent let-injector="injector" let-container="container">
155
154
  <ng-container
@@ -170,7 +169,7 @@ export class NgtsRenderTexture {
170
169
  <ngt-primitive *args="[fbo().texture]" [attach]="attach()" [parameters]="parameters()" />
171
170
  `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"] }, { kind: "directive", type: NgtsRenderTextureContainer, selector: "[ngtsRenderTextureContainer]", inputs: ["fbo", "renderPriority", "frames", "injector"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[portalContent]" }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
172
171
  }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsRenderTexture, decorators: [{
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsRenderTexture, decorators: [{
174
173
  type: Component,
175
174
  args: [{
176
175
  selector: 'ngts-render-texture',
@@ -200,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
200
199
  changeDetection: ChangeDetectionStrategy.OnPush,
201
200
  }]
202
201
  }] });
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JlbmRlci10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixZQUFZLEVBQ1osS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixPQUFPLEVBR1AsU0FBUyxFQUNULGdCQUFnQixFQUVoQixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sT0FBTyxDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBMEJsQixNQUFNLE9BQU8sMEJBQTBCO0lBUXRDO1FBUEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDMUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTlCLFVBQUssR0FBRyxX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QUFDO1FBQzVGLENBQUMsQ0FBQztLQUtGO0lBSEEsYUFBYTtRQUNaLFVBQVU7SUFDWCxDQUFDOzhHQTFFVyxpQkFBaUI7a0dBQWpCLGlCQUFpQix5WEFnQkcsd0JBQXdCLDJCQUFVLFdBQVcsNkNBeENuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCw0REFDUyxTQUFTLDJIQTlGUCwwQkFBMEIsa0lBOEZXLGdCQUFnQix1RUFBRSxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSWhGLGlCQUFpQjtrQkEzQjdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDO29CQUM3RixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0aW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Tmd0QXJncyxcblx0Tmd0QXR0YWNoYWJsZSxcblx0Tmd0Q29tcHV0ZUZ1bmN0aW9uLFxuXHROZ3RQb3J0YWwsXG5cdE5ndFBvcnRhbENvbnRlbnQsXG5cdE5ndFRleHR1cmUsXG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0b21pdCxcblx0cGljayxcblx0cHJlcGFyZSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RGQk8gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBHcm91cCwgT2JqZWN0M0QsIFNjZW5lLCBXZWJHTFJlbmRlclRhcmdldCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1JlbmRlclRleHR1cmVPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxPbWl0PE5ndFRleHR1cmUsICdhdHRhY2gnPj4ge1xuXHQvKiogT3B0aW9uYWwgd2lkdGggb2YgdGhlIHRleHR1cmUsIGRlZmF1bHRzIHRvIHZpZXdwb3J0IGJvdW5kcyAqL1xuXHR3aWR0aD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgdGV4dHVyZSwgZGVmYXVsdHMgdG8gdmlld3BvcnQgYm91bmRzICovXG5cdGhlaWdodD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGZibyBzYW1wbGVzICovXG5cdHNhbXBsZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIHN0ZW5jaWwgYnVmZmVyLCBkZWZhdWx0cyB0byBmYWxzZSAqL1xuXHRzdGVuY2lsQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZGVwdGggYnVmZmVyLCBkZWZhdWx0cyB0byB0cnVlICovXG5cdGRlcHRoQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZ2VuZXJhdGUgbWlwbWFwcywgZGVmYXVsdHMgdG8gZmFsc2UgKi9cblx0Z2VuZXJhdGVNaXBtYXBzOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgcmVuZGVyIHByaW9yaXR5LCBkZWZhdWx0cyB0byAwICovXG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBldmVudCBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRldmVudFByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBmcmFtZSBjb3VudCwgZGVmYXVsdHMgdG8gSW5maW5pdHkuIElmIHlvdSBzZXQgaXQgdG8gMSwgaXQgd291bGQgb25seSByZW5kZXIgYSBzaW5nbGUgZnJhbWUsIGV0YyAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGV2ZW50IGNvbXB1dGUsIGRlZmF1bHRzIHRvIHVuZGVmaW5lZCAqL1xuXHRjb21wdXRlPzogKGV2ZW50OiBhbnksIHN0YXRlOiBhbnksIHByZXZpb3VzOiBhbnkpID0+IGZhbHNlIHwgdW5kZWZpbmVkO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0c1JlbmRlclRleHR1cmVDb250YWluZXJdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyIHtcblx0ZmJvID0gaW5wdXQucmVxdWlyZWQ8V2ViR0xSZW5kZXJUYXJnZXQ+KCk7XG5cdHJlbmRlclByaW9yaXR5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHRmcmFtZXMgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cdGluamVjdG9yID0gaW5wdXQucmVxdWlyZWQ8SW5qZWN0b3I+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW5qZWN0QXV0b0VmZmVjdCgpKCgpID0+IHtcblx0XHRcdC8vIHRyYWNrXG5cdFx0XHR0aGlzLnN0b3JlLnN0YXRlKCk7XG5cdFx0XHRjb25zdCByZW5kZXJQcmlvcml0eSA9IHRoaXMucmVuZGVyUHJpb3JpdHkoKTtcblxuXHRcdFx0bGV0IGNvdW50ID0gMDtcblx0XHRcdGxldCBvbGRBdXRvQ2xlYXI6IGJvb2xlYW47XG5cdFx0XHRsZXQgb2xkWHJFbmFibGVkOiBib29sZWFuO1xuXHRcdFx0bGV0IG9sZFJlbmRlclRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXQgfCBudWxsO1xuXHRcdFx0bGV0IG9sZElzUHJlc2VudGluZzogYm9vbGVhbjtcblx0XHRcdGNvbnN0IHN1YiA9IGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IFtmYm8sIGZyYW1lc10gPSBbdGhpcy5mYm8oKSwgdGhpcy5mcmFtZXMoKV07XG5cdFx0XHRcdFx0Ly8gTk9URTogcmVuZGVyICB0aGUgZnJhbWVzIF4gMlxuXHRcdFx0XHRcdC8vICBkdWUgdG8gc29tZSByYWNlIGNvbmRpdGlvbiwgd2Ugd2FudCB0byByZW5kZXIgZG91YmxlIHRoZSBmcmFtZXMgaGVyZS5cblx0XHRcdFx0XHRpZiAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBjb3VudCA8IGZyYW1lcyAqIGZyYW1lcykge1xuXHRcdFx0XHRcdFx0b2xkQXV0b0NsZWFyID0gZ2wuYXV0b0NsZWFyO1xuXHRcdFx0XHRcdFx0b2xkWHJFbmFibGVkID0gZ2wueHIuZW5hYmxlZDtcblx0XHRcdFx0XHRcdG9sZFJlbmRlclRhcmdldCA9IGdsLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdFx0XHRcdFx0b2xkSXNQcmVzZW50aW5nID0gZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0Z2wuYXV0b0NsZWFyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGdsLnhyLmlzUHJlc2VudGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KGZibyk7XG5cdFx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQob2xkUmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IG9sZEF1dG9DbGVhcjtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBvbGRYckVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRnbC54ci5pc1ByZXNlbnRpbmcgPSBvbGRJc1ByZXNlbnRpbmc7XG5cdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBwcmlvcml0eTogcmVuZGVyUHJpb3JpdHksIGluamVjdG9yOiB0aGlzLmluamVjdG9yKCkgfSxcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiAoKSA9PiBzdWIoKTtcblx0XHR9KTtcblx0fVxufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1JlbmRlclRleHR1cmVPcHRpb25zID0ge1xuXHRzYW1wbGVzOiA4LFxuXHRyZW5kZXJQcmlvcml0eTogMCxcblx0ZXZlbnRQcmlvcml0eTogMCxcblx0ZnJhbWVzOiBJbmZpbml0eSxcblx0c3RlbmNpbEJ1ZmZlcjogZmFsc2UsXG5cdGRlcHRoQnVmZmVyOiB0cnVlLFxuXHRnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLFxufTtcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcmVuZGVyVGV4dHVyZUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuXHRcdF86IE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCxcblx0XHRjdHg6IHVua25vd24sXG5cdCk6IGN0eCBpcyB7IGNvbnRhaW5lcjogT2JqZWN0M0Q7IGluamVjdG9yOiBJbmplY3RvciB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5sZXQgaW5jcmVtZW50SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXJlbmRlci10ZXh0dXJlJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvcnRhbCBbY29udGFpbmVyXT1cInZpcnR1YWxTY2VuZSgpXCIgW3N0YXRlXT1cInsgZXZlbnRzOiB7IGNvbXB1dGU6IGNvbXB1dGUoKSwgcHJpb3JpdHk6IGV2ZW50UHJpb3JpdHkoKSB9IH1cIj5cblx0XHRcdDxuZy10ZW1wbGF0ZSBwb3J0YWxDb250ZW50IGxldC1pbmplY3Rvcj1cImluamVjdG9yXCIgbGV0LWNvbnRhaW5lcj1cImNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0bmd0c1JlbmRlclRleHR1cmVDb250YWluZXJcblx0XHRcdFx0XHRbZmJvXT1cImZibygpXCJcblx0XHRcdFx0XHRbcmVuZGVyUHJpb3JpdHldPVwicmVuZGVyUHJpb3JpdHkoKVwiXG5cdFx0XHRcdFx0W2ZyYW1lc109XCJmcmFtZXMoKVwiXG5cdFx0XHRcdFx0W2luamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50KClcIlxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbnRhaW5lciwgaW5qZWN0b3IgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8bmd0LWdyb3VwIChwb2ludGVyb3Zlcik9XCJvblBvaW50ZXJPdmVyKClcIiAvPlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9uZ3QtcG9ydGFsPlxuXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZmJvKCkudGV4dHVyZV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCIgLz5cblx0YCxcblx0aW1wb3J0czogW05ndFBvcnRhbCwgTmd0c1JlbmRlclRleHR1cmVDb250YWluZXIsIE5ndFBvcnRhbENvbnRlbnQsIE5ndEFyZ3MsIE5nVGVtcGxhdGVPdXRsZXRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUmVuZGVyVGV4dHVyZSB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdtYXAnKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnc2FtcGxlcycsXG5cdFx0J3JlbmRlclByaW9yaXR5Jyxcblx0XHQnZXZlbnRQcmlvcml0eScsXG5cdFx0J2ZyYW1lcycsXG5cdFx0J3N0ZW5jaWxCdWZmZXInLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2dlbmVyYXRlTWlwbWFwcycsXG5cdFx0J2NvbXB1dGUnLFxuXHRcdCd3aWR0aCcsXG5cdFx0J2hlaWdodCcsXG5cdF0pO1xuXG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmd0c1JlbmRlclRleHR1cmVDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0cHJpdmF0ZSBmYm9QYXJhbXMgPSBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdHdpZHRoOiAodGhpcy5vcHRpb25zKCkud2lkdGggfHwgdGhpcy5zaXplKCkud2lkdGgpICogdGhpcy52aWV3cG9ydCgpLmRwcixcblx0XHRoZWlnaHQ6ICh0aGlzLm9wdGlvbnMoKS5oZWlnaHQgfHwgdGhpcy5zaXplKCkuaGVpZ2h0KSAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdFx0c2V0dGluZ3M6IHtcblx0XHRcdHNhbXBsZXM6IHRoaXMub3B0aW9ucygpLnNhbXBsZXMsXG5cdFx0XHRkZXB0aEJ1ZmZlcjogdGhpcy5vcHRpb25zKCkuZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyOiB0aGlzLm9wdGlvbnMoKS5zdGVuY2lsQnVmZmVyLFxuXHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiB0aGlzLm9wdGlvbnMoKS5nZW5lcmF0ZU1pcG1hcHMsXG5cdFx0fSxcblx0fSkpO1xuXG5cdHJlbmRlclByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdyZW5kZXJQcmlvcml0eScpO1xuXHRmcmFtZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZyYW1lcycpO1xuXHRmYm8gPSBpbmplY3RGQk8odGhpcy5mYm9QYXJhbXMpO1xuXHR2aXJ0dWFsU2NlbmUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2NlbmUgPSBwcmVwYXJlKG5ldyBTY2VuZSgpKTtcblx0XHRzY2VuZS5uYW1lID0gYG5ndHMtcmVuZGVyLXRleHR1cmUtdmlydHVhbC1zY2VuZS0ke2luY3JlbWVudElkKyt9YDtcblx0XHRyZXR1cm4gc2NlbmU7XG5cdH0pO1xuXHRldmVudFByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdldmVudFByaW9yaXR5Jyk7XG5cdGNvbXB1dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jb21wdXRlIHx8IHRoaXMudXZDb21wdXRlKTtcblxuXHRwcml2YXRlIHV2Q29tcHV0ZTogTmd0Q29tcHV0ZUZ1bmN0aW9uID0gKGV2ZW50LCByb290LCBwcmV2aW91cykgPT4ge1xuXHRcdGNvbnN0IGZibyA9IHRoaXMuZmJvKCk7XG5cdFx0aWYgKCFmYm8pIHJldHVybjtcblx0XHRjb25zdCBzdGF0ZSA9IHJvb3Quc25hcHNob3Q7XG5cdFx0Y29uc3QgcHJldmlvdXNTdGF0ZSA9IHByZXZpb3VzPy5zbmFwc2hvdDtcblxuXHRcdC8vIFNpbmNlIHRoaXMgaXMgb25seSBhIHRleHR1cmUgaXQgZG9lcyBub3QgaGF2ZSBhbiBlYXN5IHdheSB0byBvYnRhaW4gdGhlIHBhcmVudCwgd2hpY2ggd2Vcblx0XHQvLyBuZWVkIHRvIHRyYW5zZm9ybSBldmVudCBjb29yZGluYXRlcyB0byBsb2NhbCBjb29yZGluYXRlcy4gV2UgdXNlIHIzZiBpbnRlcm5hbHMgdG8gZmluZCB0aGVcblx0XHQvLyBuZXh0IE9iamVjdDNELlxuXHRcdGxldCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKGZiby50ZXh0dXJlKT8ucGFyZW50KCk7XG5cdFx0d2hpbGUgKHBhcmVudCAmJiAhKHBhcmVudCBpbnN0YW5jZW9mIE9iamVjdDNEKSkge1xuXHRcdFx0cGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShwYXJlbnQpPy5wYXJlbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXHRcdC8vIEZpcnN0IHdlIGNhbGwgdGhlIHByZXZpb3VzIHN0YXRlLW9uaW9uLWxheWVycyBjb21wdXRlLCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gbmVzdCBwb3J0YWxzXG5cdFx0aWYgKHByZXZpb3VzU3RhdGUgJiYgIXByZXZpb3VzU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSkge1xuXHRcdFx0cHJldmlvdXNTdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBwcmV2aW91cywgcHJldmlvdXMuc25hcHNob3QucHJldmlvdXNSb290KTtcblx0XHR9XG5cdFx0Ly8gV2UgcnVuIGEgcXVpY2sgY2hlY2sgYWdhaW5zdCB0aGUgcGFyZW50LCBpZiBpdCBpc24ndCBoaXQgdGhlcmUncyBubyBuZWVkIHRvIHJheWNhc3QgYXQgYWxsXG5cdFx0Y29uc3QgW2ludGVyc2VjdGlvbl0gPSBwcmV2aW91c1N0YXRlPy5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0KHBhcmVudCkgfHwgW107XG5cdFx0aWYgKCFpbnRlcnNlY3Rpb24pIHJldHVybjtcblx0XHQvLyBXZSB0YWtlIHRoYXQgaGl0cyB1diBjb29yZHMsIHNldCB1cCB0aGlzIGxheWVycyByYXljYXN0ZXIsIGV0IHZvaWzDoCwgd2UgaGF2ZSByYXljYXN0aW5nIG9uIGFyYml0cmFyeSBzdXJmYWNlc1xuXHRcdGNvbnN0IHV2ID0gaW50ZXJzZWN0aW9uLnV2O1xuXHRcdGlmICghdXYpIHJldHVybjtcblx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLnNldCh1di54ICogMiAtIDEsIHV2LnkgKiAyIC0gMSksIHN0YXRlLmNhbWVyYSk7XG5cdH07XG5cblx0b25Qb2ludGVyT3ZlcigpIHtcblx0XHQvKiBub29wICovXG5cdH1cbn1cbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JlbmRlci10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sT0FBTyxFQUdQLFNBQVMsRUFDVCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sT0FBTyxDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBMEJsQixNQUFNLE9BQU8sMEJBQTBCO0lBUXRDO1FBUEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDMUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTlCLFVBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUc3QixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFB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O0lBSEEsYUFBYTtRQUNaLFVBQVU7SUFDWCxDQUFDOzhHQTFFVyxpQkFBaUI7a0dBQWpCLGlCQUFpQix5WEFnQkcsd0JBQXdCLDJCQUFVLFdBQVcsNkNBeENuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCw0REFDUyxTQUFTLDJIQWhHUCwwQkFBMEIsa0lBZ0dXLGdCQUFnQix1RUFBRSxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSWhGLGlCQUFpQjtrQkEzQjdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDO29CQUM3RixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREaXJlY3RpdmUsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0ZWZmZWN0LFxuXHRpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RBdHRhY2hhYmxlLFxuXHROZ3RDb21wdXRlRnVuY3Rpb24sXG5cdE5ndFBvcnRhbCxcblx0Tmd0UG9ydGFsQ29udGVudCxcblx0Tmd0VGV4dHVyZSxcblx0ZXh0ZW5kLFxuXHRnZXRMb2NhbFN0YXRlLFxuXHRpbmplY3RTdG9yZSxcblx0b21pdCxcblx0cGljayxcblx0cHJlcGFyZSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RGQk8gfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBHcm91cCwgT2JqZWN0M0QsIFNjZW5lLCBXZWJHTFJlbmRlclRhcmdldCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1JlbmRlclRleHR1cmVPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxPbWl0PE5ndFRleHR1cmUsICdhdHRhY2gnPj4ge1xuXHQvKiogT3B0aW9uYWwgd2lkdGggb2YgdGhlIHRleHR1cmUsIGRlZmF1bHRzIHRvIHZpZXdwb3J0IGJvdW5kcyAqL1xuXHR3aWR0aD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGhlaWdodCBvZiB0aGUgdGV4dHVyZSwgZGVmYXVsdHMgdG8gdmlld3BvcnQgYm91bmRzICovXG5cdGhlaWdodD86IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGZibyBzYW1wbGVzICovXG5cdHNhbXBsZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIHN0ZW5jaWwgYnVmZmVyLCBkZWZhdWx0cyB0byBmYWxzZSAqL1xuXHRzdGVuY2lsQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZGVwdGggYnVmZmVyLCBkZWZhdWx0cyB0byB0cnVlICovXG5cdGRlcHRoQnVmZmVyOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgZ2VuZXJhdGUgbWlwbWFwcywgZGVmYXVsdHMgdG8gZmFsc2UgKi9cblx0Z2VuZXJhdGVNaXBtYXBzOiBib29sZWFuO1xuXHQvKiogT3B0aW9uYWwgcmVuZGVyIHByaW9yaXR5LCBkZWZhdWx0cyB0byAwICovXG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBldmVudCBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRldmVudFByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBmcmFtZSBjb3VudCwgZGVmYXVsdHMgdG8gSW5maW5pdHkuIElmIHlvdSBzZXQgaXQgdG8gMSwgaXQgd291bGQgb25seSByZW5kZXIgYSBzaW5nbGUgZnJhbWUsIGV0YyAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIGV2ZW50IGNvbXB1dGUsIGRlZmF1bHRzIHRvIHVuZGVmaW5lZCAqL1xuXHRjb21wdXRlPzogKGV2ZW50OiBhbnksIHN0YXRlOiBhbnksIHByZXZpb3VzOiBhbnkpID0+IGZhbHNlIHwgdW5kZWZpbmVkO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0c1JlbmRlclRleHR1cmVDb250YWluZXJdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyIHtcblx0ZmJvID0gaW5wdXQucmVxdWlyZWQ8V2ViR0xSZW5kZXJUYXJnZXQ+KCk7XG5cdHJlbmRlclByaW9yaXR5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHRmcmFtZXMgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cdGluamVjdG9yID0gaW5wdXQucmVxdWlyZWQ8SW5qZWN0b3I+KCk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtyZW5kZXJQcmlvcml0eSwgeyBpbnRlcm5hbCB9XSA9IFt0aGlzLnJlbmRlclByaW9yaXR5KCksIHRoaXMuc3RvcmUuc3RhdGUoKV07XG5cblx0XHRcdGxldCBjb3VudCA9IDA7XG5cdFx0XHRsZXQgb2xkQXV0b0NsZWFyOiBib29sZWFuO1xuXHRcdFx0bGV0IG9sZFhyRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdGxldCBvbGRSZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0IHwgbnVsbDtcblx0XHRcdGxldCBvbGRJc1ByZXNlbnRpbmc6IGJvb2xlYW47XG5cblx0XHRcdGNvbnN0IGNsZWFudXAgPSBpbnRlcm5hbC5zdWJzY3JpYmUoXG5cdFx0XHRcdCh7IGdsLCBzY2VuZSwgY2FtZXJhIH0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBbZmJvLCBmcmFtZXNdID0gW3RoaXMuZmJvKCksIHRoaXMuZnJhbWVzKCldO1xuXHRcdFx0XHRcdC8vIE5PVEU6IHJlbmRlciAgdGhlIGZyYW1lcyBeIDJcblx0XHRcdFx0XHQvLyAgZHVlIHRvIHNvbWUgcmFjZSBjb25kaXRpb24sIHdlIHdhbnQgdG8gcmVuZGVyIGRvdWJsZSB0aGUgZnJhbWVzIGhlcmUuXG5cdFx0XHRcdFx0aWYgKGZyYW1lcyA9PT0gSW5maW5pdHkgfHwgY291bnQgPCBmcmFtZXMgKiBmcmFtZXMpIHtcblx0XHRcdFx0XHRcdG9sZEF1dG9DbGVhciA9IGdsLmF1dG9DbGVhcjtcblx0XHRcdFx0XHRcdG9sZFhyRW5hYmxlZCA9IGdsLnhyLmVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRvbGRSZW5kZXJUYXJnZXQgPSBnbC5nZXRSZW5kZXJUYXJnZXQoKTtcblx0XHRcdFx0XHRcdG9sZElzUHJlc2VudGluZyA9IGdsLnhyLmlzUHJlc2VudGluZztcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IHRydWU7XG5cdFx0XHRcdFx0XHRnbC54ci5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRnbC54ci5pc1ByZXNlbnRpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8pO1xuXHRcdFx0XHRcdFx0Z2wucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG9sZFJlbmRlclRhcmdldCk7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBvbGRBdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRnbC54ci5lbmFibGVkID0gb2xkWHJFbmFibGVkO1xuXHRcdFx0XHRcdFx0Z2wueHIuaXNQcmVzZW50aW5nID0gb2xkSXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlbmRlclByaW9yaXR5LFxuXHRcdFx0XHR0aGlzLnN0b3JlLFxuXHRcdFx0KTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0Y2xlYW51cCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNSZW5kZXJUZXh0dXJlT3B0aW9ucyA9IHtcblx0c2FtcGxlczogOCxcblx0cmVuZGVyUHJpb3JpdHk6IDAsXG5cdGV2ZW50UHJpb3JpdHk6IDAsXG5cdGZyYW1lczogSW5maW5pdHksXG5cdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRkZXB0aEJ1ZmZlcjogdHJ1ZSxcblx0Z2VuZXJhdGVNaXBtYXBzOiBmYWxzZSxcbn07XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3JlbmRlclRleHR1cmVDb250ZW50XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQge1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChcblx0XHRfOiBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQsXG5cdFx0Y3R4OiB1bmtub3duLFxuXHQpOiBjdHggaXMgeyBjb250YWluZXI6IE9iamVjdDNEOyBpbmplY3RvcjogSW5qZWN0b3IgfSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxubGV0IGluY3JlbWVudElkID0gMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1yZW5kZXItdGV4dHVyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb3J0YWwgW2NvbnRhaW5lcl09XCJ2aXJ0dWFsU2NlbmUoKVwiIFtzdGF0ZV09XCJ7IGV2ZW50czogeyBjb21wdXRlOiBjb21wdXRlKCksIHByaW9yaXR5OiBldmVudFByaW9yaXR5KCkgfSB9XCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgcG9ydGFsQ29udGVudCBsZXQtaW5qZWN0b3I9XCJpbmplY3RvclwiIGxldC1jb250YWluZXI9XCJjb250YWluZXJcIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHRcdG5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyXG5cdFx0XHRcdFx0W2Zib109XCJmYm8oKVwiXG5cdFx0XHRcdFx0W3JlbmRlclByaW9yaXR5XT1cInJlbmRlclByaW9yaXR5KClcIlxuXHRcdFx0XHRcdFtmcmFtZXNdPVwiZnJhbWVzKClcIlxuXHRcdFx0XHRcdFtpbmplY3Rvcl09XCJpbmplY3RvclwiXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudCgpXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb250YWluZXIsIGluamVjdG9yIH1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG5ndC1ncm91cCAocG9pbnRlcm92ZXIpPVwib25Qb2ludGVyT3ZlcigpXCIgLz5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvbmd0LXBvcnRhbD5cblxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2ZibygpLnRleHR1cmVdXCIgW2F0dGFjaF09XCJhdHRhY2goKVwiIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RQb3J0YWwsIE5ndHNSZW5kZXJUZXh0dXJlQ29udGFpbmVyLCBOZ3RQb3J0YWxDb250ZW50LCBOZ3RBcmdzLCBOZ1RlbXBsYXRlT3V0bGV0XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1JlbmRlclRleHR1cmUge1xuXHRhdHRhY2ggPSBpbnB1dDxOZ3RBdHRhY2hhYmxlPignbWFwJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J3NhbXBsZXMnLFxuXHRcdCdyZW5kZXJQcmlvcml0eScsXG5cdFx0J2V2ZW50UHJpb3JpdHknLFxuXHRcdCdmcmFtZXMnLFxuXHRcdCdzdGVuY2lsQnVmZmVyJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdnZW5lcmF0ZU1pcG1hcHMnLFxuXHRcdCdjb21wdXRlJyxcblx0XHQnd2lkdGgnLFxuXHRcdCdoZWlnaHQnLFxuXHRdKTtcblxuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0cHJpdmF0ZSB2aWV3cG9ydCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXG5cdHByaXZhdGUgZmJvUGFyYW1zID0gY29tcHV0ZWQoKCkgPT4gKHtcblx0XHR3aWR0aDogKHRoaXMub3B0aW9ucygpLndpZHRoIHx8IHRoaXMuc2l6ZSgpLndpZHRoKSAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdFx0aGVpZ2h0OiAodGhpcy5vcHRpb25zKCkuaGVpZ2h0IHx8IHRoaXMuc2l6ZSgpLmhlaWdodCkgKiB0aGlzLnZpZXdwb3J0KCkuZHByLFxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRzYW1wbGVzOiB0aGlzLm9wdGlvbnMoKS5zYW1wbGVzLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IHRoaXMub3B0aW9ucygpLmRlcHRoQnVmZmVyLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcjogdGhpcy5vcHRpb25zKCkuc3RlbmNpbEJ1ZmZlcixcblx0XHRcdGdlbmVyYXRlTWlwbWFwczogdGhpcy5vcHRpb25zKCkuZ2VuZXJhdGVNaXBtYXBzLFxuXHRcdH0sXG5cdH0pKTtcblxuXHRyZW5kZXJQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVuZGVyUHJpb3JpdHknKTtcblx0ZnJhbWVzID0gcGljayh0aGlzLm9wdGlvbnMsICdmcmFtZXMnKTtcblx0ZmJvID0gaW5qZWN0RkJPKHRoaXMuZmJvUGFyYW1zKTtcblx0dmlydHVhbFNjZW5lID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHNjZW5lID0gcHJlcGFyZShuZXcgU2NlbmUoKSk7XG5cdFx0c2NlbmUubmFtZSA9IGBuZ3RzLXJlbmRlci10ZXh0dXJlLXZpcnR1YWwtc2NlbmUtJHtpbmNyZW1lbnRJZCsrfWA7XG5cdFx0cmV0dXJuIHNjZW5lO1xuXHR9KTtcblx0ZXZlbnRQcmlvcml0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXZlbnRQcmlvcml0eScpO1xuXHRjb21wdXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCkuY29tcHV0ZSB8fCB0aGlzLnV2Q29tcHV0ZSk7XG5cblx0cHJpdmF0ZSB1dkNvbXB1dGU6IE5ndENvbXB1dGVGdW5jdGlvbiA9IChldmVudCwgcm9vdCwgcHJldmlvdXMpID0+IHtcblx0XHRjb25zdCBmYm8gPSB0aGlzLmZibygpO1xuXHRcdGlmICghZmJvKSByZXR1cm47XG5cdFx0Y29uc3Qgc3RhdGUgPSByb290LnNuYXBzaG90O1xuXHRcdGNvbnN0IHByZXZpb3VzU3RhdGUgPSBwcmV2aW91cz8uc25hcHNob3Q7XG5cblx0XHQvLyBTaW5jZSB0aGlzIGlzIG9ubHkgYSB0ZXh0dXJlIGl0IGRvZXMgbm90IGhhdmUgYW4gZWFzeSB3YXkgdG8gb2J0YWluIHRoZSBwYXJlbnQsIHdoaWNoIHdlXG5cdFx0Ly8gbmVlZCB0byB0cmFuc2Zvcm0gZXZlbnQgY29vcmRpbmF0ZXMgdG8gbG9jYWwgY29vcmRpbmF0ZXMuIFdlIHVzZSByM2YgaW50ZXJuYWxzIHRvIGZpbmQgdGhlXG5cdFx0Ly8gbmV4dCBPYmplY3QzRC5cblx0XHRsZXQgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShmYm8udGV4dHVyZSk/LnBhcmVudCgpO1xuXHRcdHdoaWxlIChwYXJlbnQgJiYgIShwYXJlbnQgaW5zdGFuY2VvZiBPYmplY3QzRCkpIHtcblx0XHRcdHBhcmVudCA9IGdldExvY2FsU3RhdGUocGFyZW50KT8ucGFyZW50KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblx0XHQvLyBGaXJzdCB3ZSBjYWxsIHRoZSBwcmV2aW91cyBzdGF0ZS1vbmlvbi1sYXllcnMgY29tcHV0ZSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIG5lc3QgcG9ydGFsc1xuXHRcdGlmIChwcmV2aW91c1N0YXRlICYmICFwcmV2aW91c1N0YXRlLnJheWNhc3Rlci5jYW1lcmEpIHtcblx0XHRcdHByZXZpb3VzU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgcHJldmlvdXMsIHByZXZpb3VzLnNuYXBzaG90LnByZXZpb3VzUm9vdCk7XG5cdFx0fVxuXHRcdC8vIFdlIHJ1biBhIHF1aWNrIGNoZWNrIGFnYWluc3QgdGhlIHBhcmVudCwgaWYgaXQgaXNuJ3QgaGl0IHRoZXJlJ3Mgbm8gbmVlZCB0byByYXljYXN0IGF0IGFsbFxuXHRcdGNvbnN0IFtpbnRlcnNlY3Rpb25dID0gcHJldmlvdXNTdGF0ZT8ucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChwYXJlbnQpIHx8IFtdO1xuXHRcdGlmICghaW50ZXJzZWN0aW9uKSByZXR1cm47XG5cdFx0Ly8gV2UgdGFrZSB0aGF0IGhpdHMgdXYgY29vcmRzLCBzZXQgdXAgdGhpcyBsYXllcnMgcmF5Y2FzdGVyLCBldCB2b2lsw6AsIHdlIGhhdmUgcmF5Y2FzdGluZyBvbiBhcmJpdHJhcnkgc3VyZmFjZXNcblx0XHRjb25zdCB1diA9IGludGVyc2VjdGlvbi51djtcblx0XHRpZiAoIXV2KSByZXR1cm47XG5cdFx0c3RhdGUucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoc3RhdGUucG9pbnRlci5zZXQodXYueCAqIDIgLSAxLCB1di55ICogMiAtIDEpLCBzdGF0ZS5jYW1lcmEpO1xuXHR9O1xuXG5cdG9uUG9pbnRlck92ZXIoKSB7XG5cdFx0Lyogbm9vcCAqL1xuXHR9XG59XG4iXX0=
@@ -51,8 +51,8 @@ export class NgtsSky {
51
51
  });
52
52
  this.sky = new Sky();
53
53
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSky, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtsSky, isStandalone: true, selector: "ngts-sky", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSky, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtsSky, isStandalone: true, selector: "ngts-sky", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
56
56
  <ngt-primitive *args="[sky]" [parameters]="parameters()" [scale]="scale()">
57
57
  <ngt-value attach="material.uniforms.mieCoefficient.value" [rawValue]="mieCoefficient()" />
58
58
  <ngt-value attach="material.uniforms.mieDirectionalG.value" [rawValue]="mieDirectionalG()" />
@@ -63,7 +63,7 @@ export class NgtsSky {
63
63
  </ngt-primitive>
64
64
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSky, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSky, decorators: [{
67
67
  type: Component,
68
68
  args: [{
69
69
  selector: 'ngts-sky',
@@ -1,9 +1,8 @@
1
- import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, Injector, input, viewChild, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, input, viewChild, } from '@angular/core';
2
2
  import { extend, injectBeforeRender, injectStore, NgtArgs, omit, pick } from 'angular-three';
3
3
  import { NgtsHelper } from 'angular-three-soba/abstractions';
4
4
  import { SpotLightMaterial } from 'angular-three-soba/vanilla-exports';
5
5
  import { assertInjector } from 'ngxtension/assert-injector';
6
- import { injectAutoEffect } from 'ngxtension/auto-effect';
7
6
  import { mergeInputs } from 'ngxtension/inject-inputs';
8
7
  import { CylinderGeometry, DoubleSide, Group, Matrix4, Mesh, MeshBasicMaterial, PlaneGeometry, RepeatWrapping, RGBAFormat, ShaderMaterial, SpotLight, SpotLightHelper, Vector3, WebGLRenderTarget, } from 'three';
9
8
  import { FullScreenQuad } from 'three-stdlib';
@@ -56,8 +55,8 @@ export class NgtsVolumetricMesh {
56
55
  }
57
56
  });
58
57
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsVolumetricMesh, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsVolumetricMesh, isStandalone: true, selector: "ngts-volumetric-mesh", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsVolumetricMesh, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsVolumetricMesh, isStandalone: true, selector: "ngts-volumetric-mesh", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
61
60
  <ngt-mesh #mesh [geometry]="geometry()" [raycast]="null">
62
61
  <ngt-primitive *args="[material]" attach="material">
63
62
  <ngt-value attach="uniforms.opacity.value" [rawValue]="opacity()" />
@@ -75,7 +74,7 @@ export class NgtsVolumetricMesh {
75
74
  </ngt-mesh>
76
75
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
76
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsVolumetricMesh, decorators: [{
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsVolumetricMesh, decorators: [{
79
78
  type: Component,
80
79
  args: [{
81
80
  selector: 'ngts-volumetric-mesh',
@@ -188,25 +187,21 @@ export class NgtsSpotLightShadowShader {
188
187
  uTime: { value: 0 },
189
188
  };
190
189
  extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
191
- const autoEffect = injectAutoEffect();
192
- const injector = inject(Injector);
193
- afterNextRender(() => {
194
- injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance, injector);
195
- autoEffect(() => {
196
- this.uniforms.uShadowMap.value = this.map();
197
- });
198
- autoEffect(() => {
199
- const fsQuad = this.fsQuad();
200
- return () => {
201
- fsQuad.material.dispose();
202
- fsQuad.dispose();
203
- };
190
+ injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance);
191
+ effect(() => {
192
+ this.uniforms.uShadowMap.value = this.map();
193
+ });
194
+ effect((onCleanup) => {
195
+ const fsQuad = this.fsQuad();
196
+ onCleanup(() => {
197
+ fsQuad.material.dispose();
198
+ fsQuad.dispose();
204
199
  });
205
- autoEffect(() => {
206
- const renderTarget = this.renderTarget();
207
- return () => {
208
- renderTarget.dispose();
209
- };
200
+ });
201
+ effect((onCleanup) => {
202
+ const renderTarget = this.renderTarget();
203
+ onCleanup(() => {
204
+ renderTarget.dispose();
210
205
  });
211
206
  });
212
207
  injectBeforeRender(({ gl, delta }) => {
@@ -216,8 +211,8 @@ export class NgtsSpotLightShadowShader {
216
211
  gl.setRenderTarget(null);
217
212
  });
218
213
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadowShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
220
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsSpotLightShadowShader, isStandalone: true, selector: "ngts-spot-light-shadow-shader", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsSpotLightShadowShader, isStandalone: true, selector: "ngts-spot-light-shadow-shader", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
221
216
  <ngt-mesh #mesh [scale]="scale()" [castShadow]="true">
222
217
  <ngt-plane-geometry />
223
218
  <ngt-mesh-basic-material
@@ -232,7 +227,7 @@ export class NgtsSpotLightShadowShader {
232
227
  </ngt-mesh>
233
228
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
234
229
  }
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadowShader, decorators: [{
230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowShader, decorators: [{
236
231
  type: Component,
237
232
  args: [{
238
233
  selector: 'ngts-spot-light-shadow-shader',
@@ -275,13 +270,10 @@ export class NgtsSpotLightShadowNoShader {
275
270
  this.height = pick(this.options, 'height');
276
271
  this.distance = pick(this.options, 'distance');
277
272
  extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
278
- const injector = inject(Injector);
279
- afterNextRender(() => {
280
- injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance, injector);
281
- });
273
+ injectSpotLightCommon(this.spotLight.spotLight, this.mesh, this.width, this.height, this.distance);
282
274
  }
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadowNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsSpotLightShadowNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-no-shader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
275
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.4", type: NgtsSpotLightShadowNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-no-shader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
285
277
  <ngt-mesh #mesh [scale]="scale()" [castShadow]="true">
286
278
  <ngt-plane-geometry />
287
279
  <ngt-mesh-basic-material
@@ -296,7 +288,7 @@ export class NgtsSpotLightShadowNoShader {
296
288
  </ngt-mesh>
297
289
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
298
290
  }
299
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadowNoShader, decorators: [{
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadowNoShader, decorators: [{
300
292
  type: Component,
301
293
  args: [{
302
294
  selector: 'ngts-spot-light-shadow-no-shader',
@@ -324,8 +316,8 @@ export class NgtsSpotLightShadow {
324
316
  this.shader = input();
325
317
  this.options = input(defaultSpotLightShadowOptions, { transform: mergeInputs(defaultSpotLightShadowOptions) });
326
318
  }
327
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", inputs: { shader: { classPropertyName: "shader", publicName: "shader", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
329
321
  @if (shader(); as shader) {
330
322
  <ngts-spot-light-shadow-shader [shader]="shader" [options]="options()" />
331
323
  } @else {
@@ -333,7 +325,7 @@ export class NgtsSpotLightShadow {
333
325
  }
334
326
  `, isInline: true, dependencies: [{ kind: "component", type: NgtsSpotLightShadowShader, selector: "ngts-spot-light-shadow-shader", inputs: ["shader", "options"] }, { kind: "component", type: NgtsSpotLightShadowNoShader, selector: "ngts-spot-light-shadow-no-shader", inputs: ["options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
335
327
  }
336
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
337
329
  type: Component,
338
330
  args: [{
339
331
  selector: 'ngts-spot-light-shadow',
@@ -396,8 +388,8 @@ export class NgtsSpotLight {
396
388
  this.volumetric = pick(this.options, 'volumetric');
397
389
  extend({ Group, SpotLight });
398
390
  }
399
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLight, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
400
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsSpotLight, isStandalone: true, selector: "ngts-spot-light", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "spotLight", first: true, predicate: ["spotLight"], descendants: true, isSignal: true }], ngImport: i0, template: `
391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLight, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: NgtsSpotLight, isStandalone: true, selector: "ngts-spot-light", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "spotLight", first: true, predicate: ["spotLight"], descendants: true, isSignal: true }], ngImport: i0, template: `
401
393
  <ngt-group>
402
394
  <ngt-spot-light
403
395
  #spotLight
@@ -419,7 +411,7 @@ export class NgtsSpotLight {
419
411
  </ngt-group>
420
412
  `, isInline: true, dependencies: [{ kind: "component", type: NgtsVolumetricMesh, selector: "ngts-volumetric-mesh", inputs: ["options"] }, { kind: "component", type: NgtsHelper, selector: "ngts-helper", inputs: ["type", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
421
413
  }
422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsSpotLight, decorators: [{
414
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtsSpotLight, decorators: [{
423
415
  type: Component,
424
416
  args: [{
425
417
  selector: 'ngts-spot-light',
@@ -450,4 +442,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
450
442
  imports: [NgtArgs, NgtsVolumetricMesh, NgtsHelper],
451
443
  }]
452
444
  }], ctorParameters: () => [] });
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9saWIvc3BvdC1saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBRU4sZ0JBQWdCLEVBRWhCLFVBQVUsRUFDVixLQUFLLEVBQ0wsT0FBTyxFQUNQLElBQUksRUFDSixpQkFBaUIsRUFFakIsYUFBYSxFQUNiLGNBQWMsRUFDZCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxlQUFlLEVBRWYsT0FBTyxFQUNQLGlCQUFpQixHQUNqQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRTlDLFNBQVMsV0FBVyxDQUFDLEtBQXNCO0lBQzFDLE9BQVEsS0FBbUIsRUFBRSxXQUFXLENBQUM7QUFDMUMsQ0FBQztBQWdCRCxNQUFNLDRCQUE0QixHQUE4QjtJQUMvRCxPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxDQUFDO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxDQUFDO0lBQ2IsS0FBSyxFQUFFLE9BQU87Q0FDZCxDQUFDO0FBMEJGLE1BQU0sT0FBTyxrQkFBa0I7SUF5QzlCO1FBeENBLFlBQU8sR0FBRyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhHLFlBQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFtQixNQUFNLENBQUMsQ0FBQztRQUUvQyxVQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDOUIsU0FBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLFFBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsV0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdCLGNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUMsd0JBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLDJCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUMzRSxDQUFDO1FBRUYsYUFBUSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNuQyxZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsVUFBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEQsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLGdCQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQzFCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsR0FBRyxFQUNILEVBQUUsRUFDRixJQUFJLENBQ0osQ0FBQztZQUNGLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsT0FBTyxRQUFRLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUIsa0JBQWtCLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUUvQixRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUUsSUFBSSxDQUFDLE1BQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXZEVyxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyVUFyQnBCOzs7Ozs7Ozs7Ozs7Ozs7O0VBZ0JULDREQUdTLE9BQU87OzJGQUVMLGtCQUFrQjtrQkF4QjlCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztFQWdCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEI7O0FBMkRELFNBQVMscUJBQXFCLENBQzdCLFNBQTZDLEVBQzdDLElBQW1DLEVBQ25DLEtBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFFBQXNCLEVBQ3RCLFFBQW1CO0lBRW5CLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUxQixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBQ3hCLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztZQUMzRSxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRWxDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFFckMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDakQsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBV0QsTUFBTSw2QkFBNkIsR0FBMEI7SUFDNUQsUUFBUSxFQUFFLEdBQUc7SUFDYixTQUFTLEVBQUUsR0FBRztJQUNkLEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztDQUNYLENBQUM7QUFzQkYsTUFBTSxPQUFPLHlCQUF5QjtJQXVEckM7UUF0RG1CLGVBQVUsR0FBRyxVQUFVLENBQUM7UUFFM0MsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxZQUFPLEdBQUcsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBbUIsTUFBTSxDQUFDLENBQUM7UUFFNUMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxVQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFN0IsVUFBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVwQyxVQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLFFBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUMsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6RCxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLHNCQUFzQjthQUN0QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7WUFDekUsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUssV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsT0FBTyxJQUFJLGNBQWMsQ0FDeEIsSUFBSSxjQUFjLENBQUM7Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLHdCQUF3QixDQUFDOzs7Ozs7O1NBT2xDO2dCQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO2FBQzdCLENBQUMsQ0FDRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSyxhQUFRLEdBQUc7WUFDbEIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQWdDLEVBQUU7WUFDdkQsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUNuQixDQUFDO1FBR0QsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFbkQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTdHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixPQUFPLEdBQUcsRUFBRTtvQkFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMxQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sR0FBRyxFQUFFO29CQUNYLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFrQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO1lBRW5DLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0EzRlcseUJBQXlCO2tHQUF6Qix5QkFBeUIsMmNBakIzQjs7Ozs7Ozs7Ozs7OztFQWFUOzsyRkFJVyx5QkFBeUI7a0JBcEJyQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7RUFhVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DOztBQW1IRCxNQUFNLE9BQU8sMkJBQTJCO0lBd0J2QztRQXZCbUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUUzQyxZQUFPLEdBQUcsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBbUIsTUFBTSxDQUFDLENBQUM7UUFFNUMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxVQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFFN0IsY0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxRQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQy9CLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1QsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztRQUVLLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBR2pELE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQS9CVywyQkFBMkI7a0dBQTNCLDJCQUEyQixvVkFqQjdCOzs7Ozs7Ozs7Ozs7O0VBYVQ7OzJGQUlXLDJCQUEyQjtrQkFwQnZDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztFQWFUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0M7O0FBZ0RELE1BQU0sT0FBTyxtQkFBbUI7SUFiaEM7UUFjQyxXQUFNLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDekIsWUFBTyxHQUFHLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDMUc7OEdBSFksbUJBQW1CO2tHQUFuQixtQkFBbUIsdVZBVnJCOzs7Ozs7RUFNVCw0REE3SlcseUJBQXlCLHlHQWtIekIsMkJBQTJCOzsyRkErQzNCLG1CQUFtQjtrQkFiL0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7RUFNVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsQ0FBQztvQkFDakUsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DOztBQU1ELE1BQU0sY0FBYyxHQUF5QjtJQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxPQUFPO0lBQ2QsUUFBUSxFQUFFLENBQUM7SUFDWCxLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsSUFBSTtJQUNoQixLQUFLLEVBQUUsS0FBSztDQUNaLENBQUM7QUE4QkYsTUFBTSxPQUFPLGFBQWE7SUFzQ3pCO1FBckNtQixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUVyRCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixTQUFTO1lBQ1QsV0FBVztZQUNYLGNBQWM7WUFDZCxhQUFhO1lBQ2IsT0FBTztZQUNQLFVBQVU7WUFDVixPQUFPO1lBQ1AsYUFBYTtZQUNiLFlBQVk7WUFDWixZQUFZO1lBQ1osT0FBTztTQUNQLENBQUMsQ0FBQztRQUNILHNCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3RDLFNBQVM7WUFDVCxXQUFXO1lBQ1gsY0FBYztZQUNkLGFBQWE7WUFDYixPQUFPO1lBQ1AsVUFBVTtZQUNWLE9BQU87WUFDUCxhQUFhO1lBQ2IsWUFBWTtZQUNaLE9BQU87U0FDUCxDQUFDLENBQUM7UUFFSCxjQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBd0IsV0FBVyxDQUFDLENBQUM7UUFFbkUsVUFBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxVQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUc3QyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQXhDVyxhQUFhO2tHQUFiLGFBQWEsNlVBekJmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CVCw0REFuVlcsa0JBQWtCLHNGQXNWUyxVQUFVOzsyRkFFckMsYUFBYTtrQkE1QnpCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRJbmplY3Rvcixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIE5ndEFyZ3MsIE5ndFNwb3RMaWdodCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0c0hlbHBlciB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMnO1xuaW1wb3J0IHsgU3BvdExpZ2h0TWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdmFuaWxsYS1leHBvcnRzJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHtcblx0Q29sb3JSZXByZXNlbnRhdGlvbixcblx0Q3lsaW5kZXJHZW9tZXRyeSxcblx0RGVwdGhUZXh0dXJlLFxuXHREb3VibGVTaWRlLFxuXHRHcm91cCxcblx0TWF0cml4NCxcblx0TWVzaCxcblx0TWVzaEJhc2ljTWF0ZXJpYWwsXG5cdE9iamVjdDNELFxuXHRQbGFuZUdlb21ldHJ5LFxuXHRSZXBlYXRXcmFwcGluZyxcblx0UkdCQUZvcm1hdCxcblx0U2hhZGVyTWF0ZXJpYWwsXG5cdFNwb3RMaWdodCxcblx0U3BvdExpZ2h0SGVscGVyLFxuXHRUZXh0dXJlLFxuXHRWZWN0b3IzLFxuXHRXZWJHTFJlbmRlclRhcmdldCxcbn0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5mdW5jdGlvbiBpc1Nwb3RMaWdodChjaGlsZDogT2JqZWN0M0QgfCBudWxsKTogY2hpbGQgaXMgU3BvdExpZ2h0IHtcblx0cmV0dXJuIChjaGlsZCBhcyBTcG90TGlnaHQpPy5pc1Nwb3RMaWdodDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzU3BvdExpZ2h0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0U3BvdExpZ2h0PiB7XG5cdGRlcHRoQnVmZmVyPzogRGVwdGhUZXh0dXJlO1xuXHRhdHRlbnVhdGlvbj86IG51bWJlcjtcblx0YW5nbGVQb3dlcj86IG51bWJlcjtcblx0cmFkaXVzVG9wPzogbnVtYmVyO1xuXHRyYWRpdXNCb3R0b20/OiBudW1iZXI7XG5cdG9wYWNpdHk/OiBudW1iZXI7XG5cdGNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0dm9sdW1ldHJpYz86IGJvb2xlYW47XG5cdGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0c1ZvbHVtZXRyaWNNZXNoT3B0aW9ucyA9IE9taXQ8Tmd0c1Nwb3RMaWdodE9wdGlvbnMsICd2b2x1bWV0cmljJz47XG5cbmNvbnN0IGRlZmF1bHRWb2x1bWV0cmljTWVzaE9wdGlvbnM6IE5ndHNWb2x1bWV0cmljTWVzaE9wdGlvbnMgPSB7XG5cdG9wYWNpdHk6IDEsXG5cdGRpc3RhbmNlOiA1LFxuXHRhbmdsZTogMC4xNSxcblx0YXR0ZW51YXRpb246IDUsXG5cdGFuZ2xlUG93ZXI6IDUsXG5cdGNvbG9yOiAnd2hpdGUnLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy12b2x1bWV0cmljLW1lc2gnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbZ2VvbWV0cnldPVwiZ2VvbWV0cnkoKVwiIFtyYXljYXN0XT1cIm51bGxcIj5cblx0XHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW21hdGVyaWFsXVwiIGF0dGFjaD1cIm1hdGVyaWFsXCI+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMub3BhY2l0eS52YWx1ZVwiIFtyYXdWYWx1ZV09XCJvcGFjaXR5KClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmxpZ2h0Q29sb3IudmFsdWVcIiBbcmF3VmFsdWVdPVwiY29sb3IoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuYXR0ZW51YXRpb24udmFsdWVcIiBbcmF3VmFsdWVdPVwiYXR0ZW51YXRpb24oKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuYW5nbGVQb3dlci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJhbmdsZVBvd2VyKClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmRlcHRoLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImRlcHRoQnVmZmVyKClcIiAvPlxuXHRcdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cInVuaWZvcm1zLmNhbWVyYU5lYXIudmFsdWVcIiBbcmF3VmFsdWVdPVwiY2FtZXJhKCkubmVhclwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuY2FtZXJhRmFyLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImNhbWVyYSgpLmZhclwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWVcblx0XHRcdFx0XHRhdHRhY2g9XCJ1bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlXCJcblx0XHRcdFx0XHRbcmF3VmFsdWVdPVwiZGVwdGhCdWZmZXIoKSA/IFtzaXplKCkud2lkdGggKiBkcHIoKSwgc2l6ZSgpLmhlaWdodCAqIGRwcigpXSA6IFswLCAwXVwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25ndC1wcmltaXRpdmU+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzVm9sdW1ldHJpY01lc2gge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRWb2x1bWV0cmljTWVzaE9wdGlvbnMpIH0pO1xuXG5cdG1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxNZXNoPj4oJ21lc2gnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0c2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdGRwciA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcsICdkcHInKTtcblx0Y2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXG5cdHByaXZhdGUgcmFkaXVzVG9wID0gcGljayh0aGlzLm9wdGlvbnMsICdyYWRpdXNUb3AnKTtcblx0cHJpdmF0ZSByYWRpdXNCb3R0b20gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JhZGl1c0JvdHRvbScpO1xuXHRwcml2YXRlIGFuZ2xlID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmdsZScpO1xuXHRwcml2YXRlIGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXG5cdHByaXZhdGUgbm9ybWFsaXplZFJhZGl1c1RvcCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnJhZGl1c1RvcCgpID09PSB1bmRlZmluZWQgPyAwLjEgOiB0aGlzLnJhZGl1c1RvcCgpKSk7XG5cdHByaXZhdGUgbm9ybWFsaXplZFJhZGl1c0JvdHRvbSA9IGNvbXB1dGVkKCgpID0+XG5cdFx0dGhpcy5yYWRpdXNCb3R0b20oKSA9PT0gdW5kZWZpbmVkID8gdGhpcy5hbmdsZSgpISAqIDcgOiB0aGlzLnJhZGl1c0JvdHRvbSgpLFxuXHQpO1xuXG5cdG1hdGVyaWFsID0gbmV3IFNwb3RMaWdodE1hdGVyaWFsKCk7XG5cdG9wYWNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ29wYWNpdHknKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGF0dGVudWF0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdhdHRlbnVhdGlvbicpO1xuXHRhbmdsZVBvd2VyID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmdsZVBvd2VyJyk7XG5cdGRlcHRoQnVmZmVyID0gcGljayh0aGlzLm9wdGlvbnMsICdkZXB0aEJ1ZmZlcicpO1xuXG5cdGdlb21ldHJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoXG5cdFx0XHR0aGlzLm5vcm1hbGl6ZWRSYWRpdXNUb3AoKSxcblx0XHRcdHRoaXMubm9ybWFsaXplZFJhZGl1c0JvdHRvbSgpLFxuXHRcdFx0dGhpcy5kaXN0YW5jZSgpLFxuXHRcdFx0MTI4LFxuXHRcdFx0NjQsXG5cdFx0XHR0cnVlLFxuXHRcdCk7XG5cdFx0Z2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKDAsIC10aGlzLmRpc3RhbmNlKCkhIC8gMiwgMCkpO1xuXHRcdGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgTWF0cml4NCgpLm1ha2VSb3RhdGlvblgoLU1hdGguUEkgLyAyKSk7XG5cdFx0cmV0dXJuIGdlb21ldHJ5O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoIH0pO1xuXG5cdFx0Y29uc3QgdmVjID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBtZXNoID0gdGhpcy5tZXNoUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcblxuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbJ3Nwb3RQb3NpdGlvbiddLnZhbHVlLmNvcHkobWVzaC5nZXRXb3JsZFBvc2l0aW9uKHZlYykpO1xuXHRcdFx0aWYgKG1lc2gucGFyZW50KSB7XG5cdFx0XHRcdG1lc2gubG9va0F0KChtZXNoLnBhcmVudCBhcyBhbnkpLnRhcmdldC5nZXRXb3JsZFBvc2l0aW9uKHZlYykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluamVjdFNwb3RMaWdodENvbW1vbihcblx0c3BvdExpZ2h0OiAoKSA9PiBFbGVtZW50UmVmPFNwb3RMaWdodD4gfCBudWxsLFxuXHRtZXNoOiAoKSA9PiBFbGVtZW50UmVmPE1lc2g+IHwgbnVsbCxcblx0d2lkdGg6ICgpID0+IG51bWJlcixcblx0aGVpZ2h0OiAoKSA9PiBudW1iZXIsXG5cdGRpc3RhbmNlOiAoKSA9PiBudW1iZXIsXG5cdGluamVjdG9yPzogSW5qZWN0b3IsXG4pIHtcblx0YXNzZXJ0SW5qZWN0b3IoaW5qZWN0U3BvdExpZ2h0Q29tbW9uLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBvcyA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0Y29uc3QgZGlyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbX3Nwb3RMaWdodCwgX3dpZHRoLCBfaGVpZ2h0XSA9IFtzcG90TGlnaHQoKT8ubmF0aXZlRWxlbWVudCwgd2lkdGgoKSwgaGVpZ2h0KCldO1xuXHRcdFx0aWYgKCFfc3BvdExpZ2h0KSByZXR1cm47XG5cdFx0XHRpZiAoaXNTcG90TGlnaHQoX3Nwb3RMaWdodCkpIHtcblx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubWFwU2l6ZS5zZXQoX3dpZHRoLCBfaGVpZ2h0KTtcblx0XHRcdFx0aWYgKF9zcG90TGlnaHQuc2hhZG93Lm1hcCkge1xuXHRcdFx0XHRcdF9zcG90TGlnaHQuc2hhZG93Lm1hcC5zZXRTaXplKF93aWR0aCwgX2hlaWdodCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOZ3RzU3BvdExpZ2h0U2hhZG93IG11c3QgYmUgYSBjaGlsZCBvZiBhIE5ndHNTcG90TGlnaHQnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbX3Nwb3RMaWdodCwgX21lc2hdID0gW3Nwb3RMaWdodCgpPy5uYXRpdmVFbGVtZW50LCBtZXNoKCk/Lm5hdGl2ZUVsZW1lbnRdO1xuXHRcdFx0aWYgKCFfc3BvdExpZ2h0IHx8ICFfbWVzaCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBBID0gX3Nwb3RMaWdodC5wb3NpdGlvbjtcblx0XHRcdGNvbnN0IEIgPSBfc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbjtcblxuXHRcdFx0ZGlyLmNvcHkoQikuc3ViKEEpO1xuXHRcdFx0Y29uc3QgbGVuID0gZGlyLmxlbmd0aCgpO1xuXHRcdFx0ZGlyLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGxlbiAqIGRpc3RhbmNlKCkpO1xuXHRcdFx0cG9zLmNvcHkoQSkuYWRkKGRpcik7XG5cblx0XHRcdF9tZXNoLnBvc2l0aW9uLmNvcHkocG9zKTtcblx0XHRcdF9tZXNoLmxvb2tBdChfc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbik7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5pbnRlcmZhY2UgTmd0c1NoYWRvd01lc2hPcHRpb25zIHtcblx0ZGlzdGFuY2U6IG51bWJlcjtcblx0YWxwaGFUZXN0OiBudW1iZXI7XG5cdHNjYWxlOiBudW1iZXI7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xuXHRtYXA/OiBUZXh0dXJlO1xufVxuXG5jb25zdCBkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9uczogTmd0c1NoYWRvd01lc2hPcHRpb25zID0ge1xuXHRkaXN0YW5jZTogMC40LFxuXHRhbHBoYVRlc3Q6IDAuNSxcblx0c2NhbGU6IDEsXG5cdHdpZHRoOiA1MTIsXG5cdGhlaWdodDogNTEyLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbc2NhbGVdPVwic2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cImFscGhhVGVzdCgpXCJcblx0XHRcdFx0W2FscGhhTWFwXT1cInRleHR1cmUoKVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dTaGFkZXIge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgRG91YmxlU2lkZSA9IERvdWJsZVNpZGU7XG5cblx0c2hhZGVyID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG5cblx0bWVzaCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0ID0gaW5qZWN0KE5ndHNTcG90TGlnaHQpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0LmRlYnVnO1xuXG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXHRhbHBoYVRlc3QgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FscGhhVGVzdCcpO1xuXG5cdHByaXZhdGUgd2lkdGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ3dpZHRoJyk7XG5cdHByaXZhdGUgaGVpZ2h0ID0gcGljayh0aGlzLm9wdGlvbnMsICdoZWlnaHQnKTtcblx0cHJpdmF0ZSBtYXAgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21hcCcpO1xuXHRwcml2YXRlIGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXG5cdHByaXZhdGUgcmVuZGVyVGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiBuZXcgV2ViR0xSZW5kZXJUYXJnZXQodGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpLCB7XG5cdFx0XHRmb3JtYXQ6IFJHQkFGb3JtYXQsXG5cdFx0XHRzdGVuY2lsQnVmZmVyOiBmYWxzZSxcblx0XHRcdC8vIGRlcHRoVGV4dHVyZTogbnVsbCFcblx0XHR9KTtcblx0fSk7XG5cblx0dGV4dHVyZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCByZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldCgpO1xuXHRcdHJlbmRlclRhcmdldC50ZXh0dXJlLndyYXBUID0gcmVuZGVyVGFyZ2V0LnRleHR1cmUud3JhcFMgPSBSZXBlYXRXcmFwcGluZztcblx0XHRyZXR1cm4gcmVuZGVyVGFyZ2V0LnRleHR1cmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgZnNRdWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiBuZXcgRnVsbFNjcmVlblF1YWQoXG5cdFx0XHRuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0XHR1bmlmb3JtczogdGhpcy51bmlmb3Jtcyxcblx0XHRcdFx0dmVydGV4U2hhZGVyOiAvKiBsYW5ndWFnZT1nbHNsIGdsc2wgKi8gYFxuICAgICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG5cbiAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICB2VXYgPSB1djtcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuXHRcdFx0XHRmcmFnbWVudFNoYWRlcjogdGhpcy5zaGFkZXIoKSxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdHByaXZhdGUgdW5pZm9ybXMgPSB7XG5cdFx0dVNoYWRvd01hcDogeyB2YWx1ZTogdW5kZWZpbmVkIGFzIFRleHR1cmUgfCB1bmRlZmluZWQgfSxcblx0XHR1VGltZTogeyB2YWx1ZTogMCB9LFxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2gsIFBsYW5lR2VvbWV0cnksIE1lc2hCYXNpY01hdGVyaWFsIH0pO1xuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0aW5qZWN0U3BvdExpZ2h0Q29tbW9uKHRoaXMuc3BvdExpZ2h0LnNwb3RMaWdodCwgdGhpcy5tZXNoLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5kaXN0YW5jZSwgaW5qZWN0b3IpO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0dGhpcy51bmlmb3Jtcy51U2hhZG93TWFwLnZhbHVlID0gdGhpcy5tYXAoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgZnNRdWFkID0gdGhpcy5mc1F1YWQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRmc1F1YWQubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0XHRcdGZzUXVhZC5kaXNwb3NlKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0cmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGdsLCBkZWx0YSB9KSA9PiB7XG5cdFx0XHR0aGlzLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhO1xuXG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQodGhpcy5yZW5kZXJUYXJnZXQoKSk7XG5cdFx0XHR0aGlzLmZzUXVhZCgpLnJlbmRlcihnbCk7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fSk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1uby1zaGFkZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbc2NhbGVdPVwic2NhbGUoKVwiIFtjYXN0U2hhZG93XT1cInRydWVcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRbYWxwaGFUZXN0XT1cImFscGhhVGVzdCgpXCJcblx0XHRcdFx0W2FscGhhTWFwXT1cIm1hcCgpXCJcblx0XHRcdFx0W29wYWNpdHldPVwiZGVidWcoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvd05vU2hhZGVyIHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IERvdWJsZVNpZGUgPSBEb3VibGVTaWRlO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zKSB9KTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBzcG90TGlnaHQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodCk7XG5cdGRlYnVnID0gdGhpcy5zcG90TGlnaHQuZGVidWc7XG5cblx0YWxwaGFUZXN0ID0gcGljayh0aGlzLm9wdGlvbnMsICdhbHBoYVRlc3QnKTtcblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdG1hcCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBtYXAgPSB0aGlzLm9wdGlvbnMoKS5tYXA7XG5cdFx0aWYgKG1hcCkge1xuXHRcdFx0bWFwLndyYXBTID0gbWFwLndyYXBUID0gUmVwZWF0V3JhcHBpbmc7XG5cdFx0fVxuXHRcdHJldHVybiBtYXA7XG5cdH0pO1xuXG5cdHByaXZhdGUgd2lkdGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ3dpZHRoJyk7XG5cdHByaXZhdGUgaGVpZ2h0ID0gcGljayh0aGlzLm9wdGlvbnMsICdoZWlnaHQnKTtcblx0cHJpdmF0ZSBkaXN0YW5jZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGlzdGFuY2UnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbCB9KTtcblxuXHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0aW5qZWN0U3BvdExpZ2h0Q29tbW9uKHRoaXMuc3BvdExpZ2h0LnNwb3RMaWdodCwgdGhpcy5tZXNoLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5kaXN0YW5jZSwgaW5qZWN0b3IpO1xuXHRcdH0pO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3cnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoc2hhZGVyKCk7IGFzIHNoYWRlcikge1xuXHRcdFx0PG5ndHMtc3BvdC1saWdodC1zaGFkb3ctc2hhZGVyIFtzaGFkZXJdPVwic2hhZGVyXCIgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgLz5cblx0XHR9IEBlbHNlIHtcblx0XHRcdDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW5vLXNoYWRlciBbb3B0aW9uc109XCJvcHRpb25zKClcIiAvPlxuXHRcdH1cblx0YCxcblx0aW1wb3J0czogW05ndHNTcG90TGlnaHRTaGFkb3dTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dOb1NoYWRlcl0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0U2hhZG93IHtcblx0c2hhZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzU3BvdExpZ2h0T3B0aW9ucyA9IHtcblx0b3BhY2l0eTogMSxcblx0Y29sb3I6ICd3aGl0ZScsXG5cdGRpc3RhbmNlOiA1LFxuXHRhbmdsZTogMC4xNSxcblx0YXR0ZW51YXRpb246IDUsXG5cdGFuZ2xlUG93ZXI6IDUsXG5cdHZvbHVtZXRyaWM6IHRydWUsXG5cdGRlYnVnOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cD5cblx0XHRcdDxuZ3Qtc3BvdC1saWdodFxuXHRcdFx0XHQjc3BvdExpZ2h0XG5cdFx0XHRcdFthbmdsZV09XCJhbmdsZSgpXCJcblx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRbZGlzdGFuY2VdPVwiZGlzdGFuY2UoKVwiXG5cdFx0XHRcdFtjYXN0U2hhZG93XT1cInRydWVcIlxuXHRcdFx0XHRbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIlxuXHRcdFx0PlxuXHRcdFx0XHRAaWYgKHZvbHVtZXRyaWMoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLXZvbHVtZXRyaWMtbWVzaCBbb3B0aW9uc109XCJ2b2x1bWV0cmljT3B0aW9ucygpXCIgLz5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdEBpZiAoZGVidWcoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLWhlbHBlciBbdHlwZV09XCJTcG90TGlnaHRIZWxwZXJcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L25ndC1zcG90LWxpZ2h0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3MsIE5ndHNWb2x1bWV0cmljTWVzaCwgTmd0c0hlbHBlcl0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHQge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgU3BvdExpZ2h0SGVscGVyID0gU3BvdExpZ2h0SGVscGVyO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J29wYWNpdHknLFxuXHRcdCdyYWRpdXNUb3AnLFxuXHRcdCdyYWRpdXNCb3R0b20nLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2NvbG9yJyxcblx0XHQnZGlzdGFuY2UnLFxuXHRcdCdhbmdsZScsXG5cdFx0J2F0dGVudWF0aW9uJyxcblx0XHQnYW5nbGVQb3dlcicsXG5cdFx0J3ZvbHVtZXRyaWMnLFxuXHRcdCdkZWJ1ZycsXG5cdF0pO1xuXHR2b2x1bWV0cmljT3B0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCBbXG5cdFx0J29wYWNpdHknLFxuXHRcdCdyYWRpdXNUb3AnLFxuXHRcdCdyYWRpdXNCb3R0b20nLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2NvbG9yJyxcblx0XHQnZGlzdGFuY2UnLFxuXHRcdCdhbmdsZScsXG5cdFx0J2F0dGVudWF0aW9uJyxcblx0XHQnYW5nbGVQb3dlcicsXG5cdFx0J2RlYnVnJyxcblx0XSk7XG5cblx0c3BvdExpZ2h0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8U3BvdExpZ2h0Pj4oJ3Nwb3RMaWdodCcpO1xuXG5cdGRlYnVnID0gcGljayh0aGlzLm9wdGlvbnMsICdkZWJ1ZycpO1xuXHRhbmdsZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnYW5nbGUnKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXHR2b2x1bWV0cmljID0gcGljayh0aGlzLm9wdGlvbnMsICd2b2x1bWV0cmljJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAsIFNwb3RMaWdodCB9KTtcblx0fVxufVxuIl19
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9saWIvc3BvdC1saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFFTixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQWdCLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUVOLGdCQUFnQixFQUVoQixVQUFVLEVBQ1YsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFJLEVBQ0osaUJBQWlCLEVBRWpCLGFBQWEsRUFDYixjQUFjLEVBQ2QsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsZUFBZSxFQUVmLE9BQU8sRUFDUCxpQkFBaUIsR0FDakIsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUU5QyxTQUFTLFdBQVcsQ0FBQyxLQUFzQjtJQUMxQyxPQUFRLEtBQW1CLEVBQUUsV0FBVyxDQUFDO0FBQzFDLENBQUM7QUFnQkQsTUFBTSw0QkFBNEIsR0FBOEI7SUFDL0QsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLEtBQUssRUFB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QUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQztpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3RTdG9yZSwgTmd0QXJncywgTmd0U3BvdExpZ2h0LCBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RzSGVscGVyIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucyc7XG5pbXBvcnQgeyBTcG90TGlnaHRNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS92YW5pbGxhLWV4cG9ydHMnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQge1xuXHRDb2xvclJlcHJlc2VudGF0aW9uLFxuXHRDeWxpbmRlckdlb21ldHJ5LFxuXHREZXB0aFRleHR1cmUsXG5cdERvdWJsZVNpZGUsXG5cdEdyb3VwLFxuXHRNYXRyaXg0LFxuXHRNZXNoLFxuXHRNZXNoQmFzaWNNYXRlcmlhbCxcblx0T2JqZWN0M0QsXG5cdFBsYW5lR2VvbWV0cnksXG5cdFJlcGVhdFdyYXBwaW5nLFxuXHRSR0JBRm9ybWF0LFxuXHRTaGFkZXJNYXRlcmlhbCxcblx0U3BvdExpZ2h0LFxuXHRTcG90TGlnaHRIZWxwZXIsXG5cdFRleHR1cmUsXG5cdFZlY3RvcjMsXG5cdFdlYkdMUmVuZGVyVGFyZ2V0LFxufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBGdWxsU2NyZWVuUXVhZCB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmZ1bmN0aW9uIGlzU3BvdExpZ2h0KGNoaWxkOiBPYmplY3QzRCB8IG51bGwpOiBjaGlsZCBpcyBTcG90TGlnaHQge1xuXHRyZXR1cm4gKGNoaWxkIGFzIFNwb3RMaWdodCk/LmlzU3BvdExpZ2h0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNTcG90TGlnaHRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RTcG90TGlnaHQ+IHtcblx0ZGVwdGhCdWZmZXI/OiBEZXB0aFRleHR1cmU7XG5cdGF0dGVudWF0aW9uPzogbnVtYmVyO1xuXHRhbmdsZVBvd2VyPzogbnVtYmVyO1xuXHRyYWRpdXNUb3A/OiBudW1iZXI7XG5cdHJhZGl1c0JvdHRvbT86IG51bWJlcjtcblx0b3BhY2l0eT86IG51bWJlcjtcblx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR2b2x1bWV0cmljPzogYm9vbGVhbjtcblx0ZGVidWc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzVm9sdW1ldHJpY01lc2hPcHRpb25zID0gT21pdDxOZ3RzU3BvdExpZ2h0T3B0aW9ucywgJ3ZvbHVtZXRyaWMnPjtcblxuY29uc3QgZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9uczogTmd0c1ZvbHVtZXRyaWNNZXNoT3B0aW9ucyA9IHtcblx0b3BhY2l0eTogMSxcblx0ZGlzdGFuY2U6IDUsXG5cdGFuZ2xlOiAwLjE1LFxuXHRhdHRlbnVhdGlvbjogNSxcblx0YW5nbGVQb3dlcjogNSxcblx0Y29sb3I6ICd3aGl0ZScsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXZvbHVtZXRyaWMtbWVzaCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoICNtZXNoIFtnZW9tZXRyeV09XCJnZW9tZXRyeSgpXCIgW3JheWNhc3RdPVwibnVsbFwiPlxuXHRcdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbWF0ZXJpYWxdXCIgYXR0YWNoPVwibWF0ZXJpYWxcIj5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5vcGFjaXR5LnZhbHVlXCIgW3Jhd1ZhbHVlXT1cIm9wYWNpdHkoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMubGlnaHRDb2xvci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJjb2xvcigpXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5hdHRlbnVhdGlvbi52YWx1ZVwiIFtyYXdWYWx1ZV09XCJhdHRlbnVhdGlvbigpXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5hbmdsZVBvd2VyLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImFuZ2xlUG93ZXIoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuZGVwdGgudmFsdWVcIiBbcmF3VmFsdWVdPVwiZGVwdGhCdWZmZXIoKVwiIC8+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwidW5pZm9ybXMuY2FtZXJhTmVhci52YWx1ZVwiIFtyYXdWYWx1ZV09XCJjYW1lcmEoKS5uZWFyXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5jYW1lcmFGYXIudmFsdWVcIiBbcmF3VmFsdWVdPVwiY2FtZXJhKCkuZmFyXCIgLz5cblx0XHRcdFx0PG5ndC12YWx1ZVxuXHRcdFx0XHRcdGF0dGFjaD1cInVuaWZvcm1zLnJlc29sdXRpb24udmFsdWVcIlxuXHRcdFx0XHRcdFtyYXdWYWx1ZV09XCJkZXB0aEJ1ZmZlcigpID8gW3NpemUoKS53aWR0aCAqIGRwcigpLCBzaXplKCkuaGVpZ2h0ICogZHByKCldIDogWzAsIDBdXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0XHQ8L25ndC1tZXNoPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNWb2x1bWV0cmljTWVzaCB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0Vm9sdW1ldHJpY01lc2hPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdFZvbHVtZXRyaWNNZXNoT3B0aW9ucykgfSk7XG5cblx0bWVzaFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0ZHByID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0JywgJ2RwcicpO1xuXHRjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cblx0cHJpdmF0ZSByYWRpdXNUb3AgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JhZGl1c1RvcCcpO1xuXHRwcml2YXRlIHJhZGl1c0JvdHRvbSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmFkaXVzQm90dG9tJyk7XG5cdHByaXZhdGUgYW5nbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlJyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0cHJpdmF0ZSBub3JtYWxpemVkUmFkaXVzVG9wID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMucmFkaXVzVG9wKCkgPT09IHVuZGVmaW5lZCA/IDAuMSA6IHRoaXMucmFkaXVzVG9wKCkpKTtcblx0cHJpdmF0ZSBub3JtYWxpemVkUmFkaXVzQm90dG9tID0gY29tcHV0ZWQoKCkgPT5cblx0XHR0aGlzLnJhZGl1c0JvdHRvbSgpID09PSB1bmRlZmluZWQgPyB0aGlzLmFuZ2xlKCkhICogNyA6IHRoaXMucmFkaXVzQm90dG9tKCksXG5cdCk7XG5cblx0bWF0ZXJpYWwgPSBuZXcgU3BvdExpZ2h0TWF0ZXJpYWwoKTtcblx0b3BhY2l0eSA9IHBpY2sodGhpcy5vcHRpb25zLCAnb3BhY2l0eScpO1xuXHRjb2xvciA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29sb3InKTtcblx0YXR0ZW51YXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2F0dGVudWF0aW9uJyk7XG5cdGFuZ2xlUG93ZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlUG93ZXInKTtcblx0ZGVwdGhCdWZmZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlcHRoQnVmZmVyJyk7XG5cblx0Z2VvbWV0cnkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSBuZXcgQ3lsaW5kZXJHZW9tZXRyeShcblx0XHRcdHRoaXMubm9ybWFsaXplZFJhZGl1c1RvcCgpLFxuXHRcdFx0dGhpcy5ub3JtYWxpemVkUmFkaXVzQm90dG9tKCksXG5cdFx0XHR0aGlzLmRpc3RhbmNlKCksXG5cdFx0XHQxMjgsXG5cdFx0XHQ2NCxcblx0XHRcdHRydWUsXG5cdFx0KTtcblx0XHRnZW9tZXRyeS5hcHBseU1hdHJpeDQobmV3IE1hdHJpeDQoKS5tYWtlVHJhbnNsYXRpb24oMCwgLXRoaXMuZGlzdGFuY2UoKSEgLyAyLCAwKSk7XG5cdFx0Z2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBNYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblx0XHRyZXR1cm4gZ2VvbWV0cnk7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE1lc2ggfSk7XG5cblx0XHRjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IG1lc2ggPSB0aGlzLm1lc2hSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG5cdFx0XHRtYXRlcmlhbC51bmlmb3Jtc1snc3BvdFBvc2l0aW9uJ10udmFsdWUuY29weShtZXNoLmdldFdvcmxkUG9zaXRpb24odmVjKSk7XG5cdFx0XHRpZiAobWVzaC5wYXJlbnQpIHtcblx0XHRcdFx0bWVzaC5sb29rQXQoKG1lc2gucGFyZW50IGFzIGFueSkudGFyZ2V0LmdldFdvcmxkUG9zaXRpb24odmVjKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5qZWN0U3BvdExpZ2h0Q29tbW9uKFxuXHRzcG90TGlnaHQ6ICgpID0+IEVsZW1lbnRSZWY8U3BvdExpZ2h0PiB8IG51bGwsXG5cdG1lc2g6ICgpID0+IEVsZW1lbnRSZWY8TWVzaD4gfCBudWxsLFxuXHR3aWR0aDogKCkgPT4gbnVtYmVyLFxuXHRoZWlnaHQ6ICgpID0+IG51bWJlcixcblx0ZGlzdGFuY2U6ICgpID0+IG51bWJlcixcblx0aW5qZWN0b3I/OiBJbmplY3Rvcixcbikge1xuXHRhc3NlcnRJbmplY3RvcihpbmplY3RTcG90TGlnaHRDb21tb24sIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcG9zID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBkaXIgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtfc3BvdExpZ2h0LCBfd2lkdGgsIF9oZWlnaHRdID0gW3Nwb3RMaWdodCgpPy5uYXRpdmVFbGVtZW50LCB3aWR0aCgpLCBoZWlnaHQoKV07XG5cdFx0XHRpZiAoIV9zcG90TGlnaHQpIHJldHVybjtcblx0XHRcdGlmIChpc1Nwb3RMaWdodChfc3BvdExpZ2h0KSkge1xuXHRcdFx0XHRfc3BvdExpZ2h0LnNoYWRvdy5tYXBTaXplLnNldChfd2lkdGgsIF9oZWlnaHQpO1xuXHRcdFx0XHRpZiAoX3Nwb3RMaWdodC5zaGFkb3cubWFwKSB7XG5cdFx0XHRcdFx0X3Nwb3RMaWdodC5zaGFkb3cubWFwLnNldFNpemUoX3dpZHRoLCBfaGVpZ2h0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfc3BvdExpZ2h0LnNoYWRvdy5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05ndHNTcG90TGlnaHRTaGFkb3cgbXVzdCBiZSBhIGNoaWxkIG9mIGEgTmd0c1Nwb3RMaWdodCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFtfc3BvdExpZ2h0LCBfbWVzaF0gPSBbc3BvdExpZ2h0KCk/Lm5hdGl2ZUVsZW1lbnQsIG1lc2goKT8ubmF0aXZlRWxlbWVudF07XG5cdFx0XHRpZiAoIV9zcG90TGlnaHQgfHwgIV9tZXNoKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IEEgPSBfc3BvdExpZ2h0LnBvc2l0aW9uO1xuXHRcdFx0Y29uc3QgQiA9IF9zcG90TGlnaHQudGFyZ2V0LnBvc2l0aW9uO1xuXG5cdFx0XHRkaXIuY29weShCKS5zdWIoQSk7XG5cdFx0XHRjb25zdCBsZW4gPSBkaXIubGVuZ3RoKCk7XG5cdFx0XHRkaXIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIobGVuICogZGlzdGFuY2UoKSk7XG5cdFx0XHRwb3MuY29weShBKS5hZGQoZGlyKTtcblxuXHRcdFx0X21lc2gucG9zaXRpb24uY29weShwb3MpO1xuXHRcdFx0X21lc2gubG9va0F0KF9zcG90TGlnaHQudGFyZ2V0LnBvc2l0aW9uKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmludGVyZmFjZSBOZ3RzU2hhZG93TWVzaE9wdGlvbnMge1xuXHRkaXN0YW5jZTogbnVtYmVyO1xuXHRhbHBoYVRlc3Q6IG51bWJlcjtcblx0c2NhbGU6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0aGVpZ2h0OiBudW1iZXI7XG5cdG1hcD86IFRleHR1cmU7XG59XG5cbmNvbnN0IGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zOiBOZ3RzU2hhZG93TWVzaE9wdGlvbnMgPSB7XG5cdGRpc3RhbmNlOiAwLjQsXG5cdGFscGhhVGVzdDogMC41LFxuXHRzY2FsZTogMSxcblx0d2lkdGg6IDUxMixcblx0aGVpZ2h0OiA1MTIsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93LXNoYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1tZXNoICNtZXNoIFtzY2FsZV09XCJzY2FsZSgpXCIgW2Nhc3RTaGFkb3ddPVwidHJ1ZVwiPlxuXHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0PG5ndC1tZXNoLWJhc2ljLW1hdGVyaWFsXG5cdFx0XHRcdFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcblx0XHRcdFx0W3NpZGVdPVwiRG91YmxlU2lkZVwiXG5cdFx0XHRcdFthbHBoYVRlc3RdPVwiYWxwaGFUZXN0KClcIlxuXHRcdFx0XHRbYWxwaGFNYXBdPVwidGV4dHVyZSgpXCJcblx0XHRcdFx0W29wYWNpdHldPVwiZGVidWcoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvd1NoYWRlciB7XG5cdHByb3RlY3RlZCByZWFkb25seSBEb3VibGVTaWRlID0gRG91YmxlU2lkZTtcblxuXHRzaGFkZXIgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zKSB9KTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBzcG90TGlnaHQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodCk7XG5cdGRlYnVnID0gdGhpcy5zcG90TGlnaHQuZGVidWc7XG5cblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdGFscGhhVGVzdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnYWxwaGFUZXN0Jyk7XG5cblx0cHJpdmF0ZSB3aWR0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAnd2lkdGgnKTtcblx0cHJpdmF0ZSBoZWlnaHQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2hlaWdodCcpO1xuXHRwcml2YXRlIG1hcCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWFwJyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0cHJpdmF0ZSByZW5kZXJUYXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBXZWJHTFJlbmRlclRhcmdldCh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCksIHtcblx0XHRcdGZvcm1hdDogUkdCQUZvcm1hdCxcblx0XHRcdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRcdFx0Ly8gZGVwdGhUZXh0dXJlOiBudWxsIVxuXHRcdH0pO1xuXHR9KTtcblxuXHR0ZXh0dXJlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0KCk7XG5cdFx0cmVuZGVyVGFyZ2V0LnRleHR1cmUud3JhcFQgPSByZW5kZXJUYXJnZXQudGV4dHVyZS53cmFwUyA9IFJlcGVhdFdyYXBwaW5nO1xuXHRcdHJldHVybiByZW5kZXJUYXJnZXQudGV4dHVyZTtcblx0fSk7XG5cblx0cHJpdmF0ZSBmc1F1YWQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBGdWxsU2NyZWVuUXVhZChcblx0XHRcdG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHRcdHVuaWZvcm1zOiB0aGlzLnVuaWZvcm1zLFxuXHRcdFx0XHR2ZXJ0ZXhTaGFkZXI6IC8qIGxhbmd1YWdlPWdsc2wgZ2xzbCAqLyBgXG4gICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICAgIHZVdiA9IHV2O1xuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgICB9XG4gICAgICAgIGAsXG5cdFx0XHRcdGZyYWdtZW50U2hhZGVyOiB0aGlzLnNoYWRlcigpLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fSk7XG5cblx0cHJpdmF0ZSB1bmlmb3JtcyA9IHtcblx0XHR1U2hhZG93TWFwOiB7IHZhbHVlOiB1bmRlZmluZWQgYXMgVGV4dHVyZSB8IHVuZGVmaW5lZCB9LFxuXHRcdHVUaW1lOiB7IHZhbHVlOiAwIH0sXG5cdH07XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RTcG90TGlnaHRDb21tb24odGhpcy5zcG90TGlnaHQuc3BvdExpZ2h0LCB0aGlzLm1lc2gsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmRpc3RhbmNlKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnVuaWZvcm1zLnVTaGFkb3dNYXAudmFsdWUgPSB0aGlzLm1hcCgpO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGZzUXVhZCA9IHRoaXMuZnNRdWFkKCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRmc1F1YWQubWF0ZXJpYWwuZGlzcG9zZSgpO1xuXHRcdFx0XHRmc1F1YWQuZGlzcG9zZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdHJlbmRlclRhcmdldC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBnbCwgZGVsdGEgfSkgPT4ge1xuXHRcdFx0dGhpcy51bmlmb3Jtcy51VGltZS52YWx1ZSArPSBkZWx0YTtcblxuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVGFyZ2V0KCkpO1xuXHRcdFx0dGhpcy5mc1F1YWQoKS5yZW5kZXIoZ2wpO1xuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdH0pO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3ctbm8tc2hhZGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW3NjYWxlXT1cInNjYWxlKClcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG5cdFx0XHQ8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG5cdFx0XHQ8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcblx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdFx0W2FscGhhVGVzdF09XCJhbHBoYVRlc3QoKVwiXG5cdFx0XHRcdFthbHBoYU1hcF09XCJtYXAoKVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dOb1NoYWRlciB7XG5cdHByb3RlY3RlZCByZWFkb25seSBEb3VibGVTaWRlID0gRG91YmxlU2lkZTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0U3BvdExpZ2h0U2hhZG93T3B0aW9ucykgfSk7XG5cblx0bWVzaCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdHByaXZhdGUgc3BvdExpZ2h0ID0gaW5qZWN0KE5ndHNTcG90TGlnaHQpO1xuXHRkZWJ1ZyA9IHRoaXMuc3BvdExpZ2h0LmRlYnVnO1xuXG5cdGFscGhhVGVzdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnYWxwaGFUZXN0Jyk7XG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXHRtYXAgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgbWFwID0gdGhpcy5vcHRpb25zKCkubWFwO1xuXHRcdGlmIChtYXApIHtcblx0XHRcdG1hcC53cmFwUyA9IG1hcC53cmFwVCA9IFJlcGVhdFdyYXBwaW5nO1xuXHRcdH1cblx0XHRyZXR1cm4gbWFwO1xuXHR9KTtcblxuXHRwcml2YXRlIHdpZHRoID0gcGljayh0aGlzLm9wdGlvbnMsICd3aWR0aCcpO1xuXHRwcml2YXRlIGhlaWdodCA9IHBpY2sodGhpcy5vcHRpb25zLCAnaGVpZ2h0Jyk7XG5cdHByaXZhdGUgZGlzdGFuY2UgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc3RhbmNlJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgTWVzaCwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RTcG90TGlnaHRDb21tb24odGhpcy5zcG90TGlnaHQuc3BvdExpZ2h0LCB0aGlzLm1lc2gsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLmRpc3RhbmNlKTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKHNoYWRlcigpOyBhcyBzaGFkZXIpIHtcblx0XHRcdDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LXNoYWRlciBbc2hhZGVyXT1cInNoYWRlclwiIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiIC8+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bmd0cy1zcG90LWxpZ2h0LXNoYWRvdy1uby1zaGFkZXIgW29wdGlvbnNdPVwib3B0aW9ucygpXCIgLz5cblx0XHR9XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzU3BvdExpZ2h0U2hhZG93U2hhZGVyLCBOZ3RzU3BvdExpZ2h0U2hhZG93Tm9TaGFkZXJdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvdyB7XG5cdHNoYWRlciA9IGlucHV0PHN0cmluZz4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRTcG90TGlnaHRTaGFkb3dPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdFNwb3RMaWdodFNoYWRvd09wdGlvbnMpIH0pO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1Nwb3RMaWdodE9wdGlvbnMgPSB7XG5cdG9wYWNpdHk6IDEsXG5cdGNvbG9yOiAnd2hpdGUnLFxuXHRkaXN0YW5jZTogNSxcblx0YW5nbGU6IDAuMTUsXG5cdGF0dGVudWF0aW9uOiA1LFxuXHRhbmdsZVBvd2VyOiA1LFxuXHR2b2x1bWV0cmljOiB0cnVlLFxuXHRkZWJ1ZzogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXA+XG5cdFx0XHQ8bmd0LXNwb3QtbGlnaHRcblx0XHRcdFx0I3Nwb3RMaWdodFxuXHRcdFx0XHRbYW5nbGVdPVwiYW5nbGUoKVwiXG5cdFx0XHRcdFtjb2xvcl09XCJjb2xvcigpXCJcblx0XHRcdFx0W2Rpc3RhbmNlXT1cImRpc3RhbmNlKClcIlxuXHRcdFx0XHRbY2FzdFNoYWRvd109XCJ0cnVlXCJcblx0XHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHRcdD5cblx0XHRcdFx0QGlmICh2b2x1bWV0cmljKCkpIHtcblx0XHRcdFx0XHQ8bmd0cy12b2x1bWV0cmljLW1lc2ggW29wdGlvbnNdPVwidm9sdW1ldHJpY09wdGlvbnMoKVwiIC8+XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRAaWYgKGRlYnVnKCkpIHtcblx0XHRcdFx0XHQ8bmd0cy1oZWxwZXIgW3R5cGVdPVwiU3BvdExpZ2h0SGVscGVyXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0PC9uZ3Qtc3BvdC1saWdodD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzLCBOZ3RzVm9sdW1ldHJpY01lc2gsIE5ndHNIZWxwZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3BvdExpZ2h0IHtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IFNwb3RMaWdodEhlbHBlciA9IFNwb3RMaWdodEhlbHBlcjtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdvcGFjaXR5Jyxcblx0XHQncmFkaXVzVG9wJyxcblx0XHQncmFkaXVzQm90dG9tJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdjb2xvcicsXG5cdFx0J2Rpc3RhbmNlJyxcblx0XHQnYW5nbGUnLFxuXHRcdCdhdHRlbnVhdGlvbicsXG5cdFx0J2FuZ2xlUG93ZXInLFxuXHRcdCd2b2x1bWV0cmljJyxcblx0XHQnZGVidWcnLFxuXHRdKTtcblx0dm9sdW1ldHJpY09wdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgW1xuXHRcdCdvcGFjaXR5Jyxcblx0XHQncmFkaXVzVG9wJyxcblx0XHQncmFkaXVzQm90dG9tJyxcblx0XHQnZGVwdGhCdWZmZXInLFxuXHRcdCdjb2xvcicsXG5cdFx0J2Rpc3RhbmNlJyxcblx0XHQnYW5nbGUnLFxuXHRcdCdhdHRlbnVhdGlvbicsXG5cdFx0J2FuZ2xlUG93ZXInLFxuXHRcdCdkZWJ1ZycsXG5cdF0pO1xuXG5cdHNwb3RMaWdodCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFNwb3RMaWdodD4+KCdzcG90TGlnaHQnKTtcblxuXHRkZWJ1ZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGVidWcnKTtcblx0YW5nbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FuZ2xlJyk7XG5cdGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRkaXN0YW5jZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGlzdGFuY2UnKTtcblx0dm9sdW1ldHJpYyA9IHBpY2sodGhpcy5vcHRpb25zLCAndm9sdW1ldHJpYycpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwLCBTcG90TGlnaHQgfSk7XG5cdH1cbn1cbiJdfQ==