angular-three-soba 2.13.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +247 -247
  2. package/abstractions/lib/edges.d.ts +276 -276
  3. package/abstractions/lib/grid.d.ts +45 -45
  4. package/abstractions/lib/line.d.ts +1 -1
  5. package/abstractions/lib/prism-geometry.d.ts +4 -4
  6. package/abstractions/lib/rounded-box.d.ts +1 -1
  7. package/abstractions/lib/text-3d.d.ts +51 -51
  8. package/abstractions/lib/text.d.ts +1 -1
  9. package/cameras/lib/cube-camera.d.ts +1 -1
  10. package/cameras/lib/orthographic-camera.d.ts +1 -1
  11. package/cameras/lib/perspective-camera.d.ts +1 -1
  12. package/controls/index.d.ts +0 -9
  13. package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  14. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  15. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  16. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-controls.mjs +16 -30
  18. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  20. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  22. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  24. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  26. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  28. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  30. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  31. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  33. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  34. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  35. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  36. package/materials/lib/mesh-portal-material.d.ts +1 -1
  37. package/materials/lib/mesh-refraction-material.d.ts +1 -1
  38. package/misc/lib/computed-attribute.d.ts +3 -3
  39. package/misc/lib/decal.d.ts +1 -1
  40. package/misc/lib/html/html.d.ts +2 -2
  41. package/package.json +8 -34
  42. package/performances/lib/instances/instances.d.ts +7 -7
  43. package/performances/lib/points/points.d.ts +16 -16
  44. package/performances/lib/segments/segments.d.ts +1 -1
  45. package/staging/lib/accumulative-shadows.d.ts +1 -1
  46. package/staging/lib/caustics.d.ts +1 -1
  47. package/staging/lib/center.d.ts +2 -2
  48. package/staging/lib/contact-shadows.d.ts +1 -1
  49. package/staging/lib/lightformer.d.ts +1 -1
  50. package/staging/lib/mask.d.ts +1 -1
  51. package/staging/lib/sky.d.ts +1 -1
  52. package/staging/lib/spot-light.d.ts +1 -1
  53. package/staging/lib/stage.d.ts +5 -5
  54. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  55. package/esm2022/abstractions/index.mjs +0 -14
  56. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  57. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  58. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  59. package/esm2022/abstractions/lib/edges.mjs +0 -66
  60. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  61. package/esm2022/abstractions/lib/grid.mjs +0 -103
  62. package/esm2022/abstractions/lib/helper.mjs +0 -74
  63. package/esm2022/abstractions/lib/line.mjs +0 -123
  64. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  65. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  66. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  67. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  68. package/esm2022/abstractions/lib/text.mjs +0 -86
  69. package/esm2022/angular-three-soba.mjs +0 -5
  70. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  71. package/esm2022/cameras/index.mjs +0 -5
  72. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  73. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  74. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  75. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  76. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  77. package/esm2022/controls/index.mjs +0 -9
  78. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  79. package/esm2022/controls/lib/orbit-controls.mjs +0 -120
  80. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  81. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  82. package/esm2022/gizmos/index.mjs +0 -6
  83. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  84. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  85. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  86. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  87. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  88. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  89. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  90. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  91. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  92. package/esm2022/index.mjs +0 -2
  93. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  94. package/esm2022/loaders/index.mjs +0 -7
  95. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  96. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  97. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  98. package/esm2022/loaders/lib/loader.mjs +0 -103
  99. package/esm2022/loaders/lib/progress.mjs +0 -51
  100. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  101. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  102. package/esm2022/materials/index.mjs +0 -9
  103. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  104. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  105. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  106. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  107. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  108. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  109. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  110. package/esm2022/materials/lib/point-material.mjs +0 -34
  111. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  112. package/esm2022/misc/index.mjs +0 -15
  113. package/esm2022/misc/lib/animations.mjs +0 -71
  114. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  115. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  116. package/esm2022/misc/lib/constants.mjs +0 -5
  117. package/esm2022/misc/lib/decal.mjs +0 -142
  118. package/esm2022/misc/lib/deprecated.mjs +0 -15
  119. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  120. package/esm2022/misc/lib/fbo.mjs +0 -86
  121. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  122. package/esm2022/misc/lib/html/html.mjs +0 -129
  123. package/esm2022/misc/lib/html/utils.mjs +0 -74
  124. package/esm2022/misc/lib/intersect.mjs +0 -49
  125. package/esm2022/misc/lib/preload.mjs +0 -58
  126. package/esm2022/misc/lib/sampler.mjs +0 -122
  127. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  128. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  129. package/esm2022/performances/index.mjs +0 -7
  130. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  131. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  132. package/esm2022/performances/lib/detailed.mjs +0 -53
  133. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  134. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  135. package/esm2022/performances/lib/points/points.mjs +0 -272
  136. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  137. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  138. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  139. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  140. package/esm2022/shaders/index.mjs +0 -4
  141. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  142. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  143. package/esm2022/shaders/lib/point-material.mjs +0 -24
  144. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  145. package/esm2022/staging/index.mjs +0 -21
  146. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  147. package/esm2022/staging/lib/backdrop.mjs +0 -69
  148. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  149. package/esm2022/staging/lib/bounds.mjs +0 -282
  150. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  151. package/esm2022/staging/lib/caustics.mjs +0 -184
  152. package/esm2022/staging/lib/center.mjs +0 -114
  153. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  154. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  155. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  156. package/esm2022/staging/lib/float.mjs +0 -70
  157. package/esm2022/staging/lib/lightformer.mjs +0 -103
  158. package/esm2022/staging/lib/mask.mjs +0 -74
  159. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  160. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  161. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  162. package/esm2022/staging/lib/render-texture.mjs +0 -202
  163. package/esm2022/staging/lib/sky.mjs +0 -86
  164. package/esm2022/staging/lib/spot-light.mjs +0 -445
  165. package/esm2022/staging/lib/stage.mjs +0 -232
  166. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  167. package/esm2022/stats/index.mjs +0 -2
  168. package/esm2022/stats/lib/stats.mjs +0 -57
  169. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  170. package/esm2022/vanilla-exports/index.mjs +0 -3
@@ -1,349 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, effect, input, output, viewChild, } from '@angular/core';
2
- import { extend, getLocalState, injectBeforeRender, injectStore, omit, pick } from 'angular-three';
3
- import { calculateScaleFactor } from 'angular-three-soba/misc';
4
- import { mergeInputs } from 'ngxtension/inject-inputs';
5
- import { Box3, Group, Matrix4, Vector3 } from 'three';
6
- import { NgtsAxisArrow } from './axis-arrow';
7
- import { NgtsAxisRotator } from './axis-rotator';
8
- import { NgtsPlaneSlider } from './plane-slider';
9
- import { NgtsScalingSphere } from './scaling-sphere';
10
- import * as i0 from "@angular/core";
11
- const mL0 = new Matrix4();
12
- const mW0 = new Matrix4();
13
- const mP = new Matrix4();
14
- const mPInv = new Matrix4();
15
- const mW = new Matrix4();
16
- const mL = new Matrix4();
17
- const mL0Inv = new Matrix4();
18
- const mdL = new Matrix4();
19
- const mG = new Matrix4();
20
- const bb = new Box3();
21
- const bbObj = new Box3();
22
- const vCenter = new Vector3();
23
- const vSize = new Vector3();
24
- const vAnchorOffset = new Vector3();
25
- const vPosition = new Vector3();
26
- const vScale = new Vector3();
27
- const xDir = new Vector3(1, 0, 0);
28
- const yDir = new Vector3(0, 1, 0);
29
- const zDir = new Vector3(0, 0, 1);
30
- const defaultOptions = {
31
- enabled: true,
32
- autoTransform: true,
33
- disableAxes: false,
34
- disableSliders: false,
35
- disableRotations: false,
36
- disableScaling: false,
37
- activeAxes: [true, true, true],
38
- offset: [0, 0, 0],
39
- rotation: [0, 0, 0],
40
- scale: 1,
41
- lineWidth: 4,
42
- fixed: false,
43
- depthTest: true,
44
- axisColors: ['#ff2060', '#20df80', '#2080ff'],
45
- hoveredColor: '#ffff40',
46
- annotations: false,
47
- opacity: 1,
48
- visible: true,
49
- };
50
- // TODO: PivotControls is not working properly with control flow
51
- export class NgtsPivotControls {
52
- constructor() {
53
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
54
- this.parameters = omit(this.options, [
55
- 'enabled',
56
- 'matrix',
57
- 'autoTransform',
58
- 'anchor',
59
- 'disableAxes',
60
- 'disableSliders',
61
- 'disableRotations',
62
- 'disableScaling',
63
- 'activeAxes',
64
- 'offset',
65
- 'rotation',
66
- 'scale',
67
- 'lineWidth',
68
- 'fixed',
69
- 'translationLimits',
70
- 'rotationLimits',
71
- 'scaleLimits',
72
- 'depthTest',
73
- 'axisColors',
74
- 'hoveredColor',
75
- 'annotations',
76
- 'annotationsClass',
77
- 'opacity',
78
- 'visible',
79
- 'userData',
80
- ]);
81
- this.dragStarted = output();
82
- this.dragEnded = output();
83
- this.dragged = output();
84
- this.matrix = pick(this.options, 'matrix');
85
- this.annotations = pick(this.options, 'annotations');
86
- this.annotationsClass = pick(this.options, 'annotationsClass');
87
- this.translationLimits = pick(this.options, 'translationLimits');
88
- this.rotationLimits = pick(this.options, 'rotationLimits');
89
- this.scaleLimits = pick(this.options, 'scaleLimits');
90
- this.autoTransform = pick(this.options, 'autoTransform');
91
- this.fixed = pick(this.options, 'fixed');
92
- this.hoveredColor = pick(this.options, 'hoveredColor');
93
- this.axisColors = pick(this.options, 'axisColors');
94
- this.lineWidth = pick(this.options, 'lineWidth');
95
- this.scale = pick(this.options, 'scale');
96
- this.userData = pick(this.options, 'userData');
97
- this.opacity = pick(this.options, 'opacity');
98
- this.depthTest = pick(this.options, 'depthTest');
99
- this.offset = pick(this.options, 'offset');
100
- this.rotation = pick(this.options, 'rotation');
101
- this.visible = pick(this.options, 'visible');
102
- this.enabled = pick(this.options, 'enabled');
103
- this.disableAxes = pick(this.options, 'disableAxes');
104
- this.disableSliders = pick(this.options, 'disableSliders');
105
- this.disableRotations = pick(this.options, 'disableRotations');
106
- this.disableScaling = pick(this.options, 'disableScaling');
107
- this.activeAxes = pick(this.options, 'activeAxes');
108
- this.xDir = xDir;
109
- this.yDir = yDir;
110
- this.zDir = zDir;
111
- this.parentRef = viewChild.required('parent');
112
- this.groupRef = viewChild.required('group');
113
- this.gizmoRef = viewChild.required('gizmo');
114
- this.childrenRef = viewChild.required('children');
115
- this.store = injectStore();
116
- this.invalidate = this.store.select('invalidate');
117
- this.translation = [0, 0, 0];
118
- this.anchor = pick(this.options, 'anchor');
119
- this.cameraScale = new Vector3(1, 1, 1);
120
- this.gizmoScale = new Vector3(1, 1, 1);
121
- extend({ Group });
122
- effect(() => {
123
- const anchor = this.anchor();
124
- if (!anchor)
125
- return;
126
- const childrenContainer = this.childrenRef().nativeElement;
127
- const localState = getLocalState(childrenContainer);
128
- if (!localState)
129
- return;
130
- const [gizmo, offset, invalidate] = [
131
- this.gizmoRef().nativeElement,
132
- this.offset(),
133
- this.invalidate(),
134
- this.options(),
135
- [localState.objects(), localState.nonObjects()],
136
- ];
137
- childrenContainer.updateWorldMatrix(true, true);
138
- mPInv.copy(childrenContainer.matrixWorld).invert();
139
- bb.makeEmpty();
140
- childrenContainer.traverse((obj) => {
141
- if (!obj.geometry)
142
- return;
143
- if (!obj.geometry.boundingBox)
144
- obj.geometry.computeBoundingBox();
145
- mL.copy(obj.matrixWorld).premultiply(mPInv);
146
- const boundingBox = obj.geometry.boundingBox;
147
- if (boundingBox) {
148
- bbObj.copy(boundingBox);
149
- bbObj.applyMatrix4(mL);
150
- bb.union(bbObj);
151
- }
152
- });
153
- vCenter.copy(bb.max).add(bb.min).multiplyScalar(0.5);
154
- vSize.copy(bb.max).sub(bb.min).multiplyScalar(0.5);
155
- vAnchorOffset
156
- .copy(vSize)
157
- .multiply(new Vector3(...anchor))
158
- .add(vCenter);
159
- vPosition.set(...offset).add(vAnchorOffset);
160
- gizmo.position.copy(vPosition);
161
- invalidate();
162
- });
163
- const vec = new Vector3();
164
- injectBeforeRender(({ camera, size, invalidate }) => {
165
- const [{ fixed, scale, matrix }, gizmo, group] = [
166
- this.options(),
167
- this.gizmoRef().nativeElement,
168
- this.groupRef().nativeElement,
169
- ];
170
- if (fixed) {
171
- const sf = calculateScaleFactor(gizmo.getWorldPosition(vec), scale, camera, size);
172
- this.cameraScale.setScalar(sf);
173
- }
174
- if (matrix && matrix instanceof Matrix4) {
175
- group.matrix = matrix;
176
- }
177
- // Update gizmo scale in accordance with matrix changes
178
- // Without this, there might be noticeable turbulence if scaling happens fast enough
179
- gizmo.updateWorldMatrix(true, true);
180
- mG.makeRotationFromEuler(gizmo.rotation).setPosition(gizmo.position).premultiply(group.matrixWorld);
181
- this.gizmoScale.setFromMatrixScale(mG);
182
- vScale.copy(this.cameraScale).divide(this.gizmoScale);
183
- if (Math.abs(gizmo.scale.x - vScale.x) > 1e-4 ||
184
- Math.abs(gizmo.scale.y - vScale.y) > 1e-4 ||
185
- Math.abs(gizmo.scale.z - vScale.z) > 1e-4) {
186
- gizmo.scale.copy(vScale);
187
- invalidate();
188
- }
189
- });
190
- }
191
- onDragStart(parameters) {
192
- const group = this.groupRef().nativeElement;
193
- mL0.copy(group.matrix);
194
- mW0.copy(group.matrixWorld);
195
- this.dragStarted.emit(parameters);
196
- this.store.snapshot.invalidate();
197
- }
198
- onDrag(mdW) {
199
- const [parent, group, autoTransform] = [
200
- this.parentRef().nativeElement,
201
- this.groupRef().nativeElement,
202
- this.autoTransform(),
203
- ];
204
- mP.copy(parent.matrixWorld);
205
- mPInv.copy(mP).invert();
206
- // After applying the delta
207
- mW.copy(mW0).premultiply(mdW);
208
- mL.copy(mW).premultiply(mPInv);
209
- mL0Inv.copy(mL0).invert();
210
- mdL.copy(mL).multiply(mL0Inv);
211
- if (autoTransform) {
212
- group.matrix.copy(mL);
213
- }
214
- this.dragged.emit({ l: mL, deltaL: mdL, w: mW, deltaW: mdW });
215
- this.store.snapshot.invalidate();
216
- }
217
- onDragEnd() {
218
- this.dragEnded.emit();
219
- this.store.snapshot.invalidate();
220
- }
221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPivotControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsPivotControls, isStandalone: true, selector: "ngts-pivot-controls", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragStarted: "dragStarted", dragEnded: "dragEnded", dragged: "dragged" }, viewQueries: [{ propertyName: "parentRef", first: true, predicate: ["parent"], descendants: true, isSignal: true }, { propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "gizmoRef", first: true, predicate: ["gizmo"], descendants: true, isSignal: true }, { propertyName: "childrenRef", first: true, predicate: ["children"], descendants: true, isSignal: true }], ngImport: i0, template: `
223
- <ngt-group #parent>
224
- <ngt-group #group [matrix]="matrix()" [matrixAutoUpdate]="false" [parameters]="parameters()">
225
- <ngt-group #gizmo [visible]="visible()" [position]="offset()" [rotation]="rotation()">
226
- @if (enabled()) {
227
- @let _disableAxes = disableAxes();
228
- @let _disableSliders = disableSliders();
229
- @let _disableRotations = disableRotations();
230
- @let _disableScaling = disableScaling();
231
- @let _activeAxes = activeAxes();
232
-
233
- @if (!_disableAxes && _activeAxes[0]) {
234
- <ngts-axis-arrow [axis]="0" [direction]="xDir" />
235
- }
236
- @if (!_disableAxes && _activeAxes[1]) {
237
- <ngts-axis-arrow [axis]="1" [direction]="yDir" />
238
- }
239
- @if (!_disableAxes && _activeAxes[2]) {
240
- <ngts-axis-arrow [axis]="2" [direction]="zDir" />
241
- }
242
-
243
- @if (!_disableSliders && _activeAxes[0] && _activeAxes[1]) {
244
- <ngts-plane-slider [axis]="2" [dir1]="xDir" [dir2]="yDir" />
245
- }
246
- @if (!_disableSliders && _activeAxes[0] && _activeAxes[2]) {
247
- <ngts-plane-slider [axis]="1" [dir1]="zDir" [dir2]="xDir" />
248
- }
249
- @if (!_disableSliders && _activeAxes[2] && _activeAxes[1]) {
250
- <ngts-plane-slider [axis]="0" [dir1]="yDir" [dir2]="zDir" />
251
- }
252
-
253
- @if (!_disableRotations && _activeAxes[0] && _activeAxes[1]) {
254
- <ngts-axis-rotator [axis]="2" [dir1]="xDir" [dir2]="yDir" />
255
- }
256
- @if (!_disableRotations && _activeAxes[0] && _activeAxes[2]) {
257
- <ngts-axis-rotator [axis]="1" [dir1]="zDir" [dir2]="xDir" />
258
- }
259
- @if (!_disableRotations && _activeAxes[2] && _activeAxes[1]) {
260
- <ngts-axis-rotator [axis]="0" [dir1]="yDir" [dir2]="zDir" />
261
- }
262
-
263
- @if (!_disableScaling && _activeAxes[0]) {
264
- <ngts-scaling-sphere [axis]="0" [direction]="xDir" />
265
- }
266
- @if (!_disableScaling && _activeAxes[1]) {
267
- <ngts-scaling-sphere [axis]="1" [direction]="yDir" />
268
- }
269
- @if (!_disableScaling && _activeAxes[2]) {
270
- <ngts-scaling-sphere [axis]="2" [direction]="zDir" />
271
- }
272
- }
273
- </ngt-group>
274
- <ngt-group #children>
275
- <ng-content />
276
- </ngt-group>
277
- </ngt-group>
278
- </ngt-group>
279
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsAxisArrow, selector: "ngts-axis-arrow", inputs: ["direction", "axis"] }, { kind: "component", type: NgtsPlaneSlider, selector: "ngts-plane-slider", inputs: ["dir1", "dir2", "axis"] }, { kind: "component", type: NgtsAxisRotator, selector: "ngts-axis-rotator", inputs: ["dir1", "dir2", "axis"] }, { kind: "component", type: NgtsScalingSphere, selector: "ngts-scaling-sphere", inputs: ["direction", "axis"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
280
- }
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPivotControls, decorators: [{
282
- type: Component,
283
- args: [{
284
- selector: 'ngts-pivot-controls',
285
- standalone: true,
286
- template: `
287
- <ngt-group #parent>
288
- <ngt-group #group [matrix]="matrix()" [matrixAutoUpdate]="false" [parameters]="parameters()">
289
- <ngt-group #gizmo [visible]="visible()" [position]="offset()" [rotation]="rotation()">
290
- @if (enabled()) {
291
- @let _disableAxes = disableAxes();
292
- @let _disableSliders = disableSliders();
293
- @let _disableRotations = disableRotations();
294
- @let _disableScaling = disableScaling();
295
- @let _activeAxes = activeAxes();
296
-
297
- @if (!_disableAxes && _activeAxes[0]) {
298
- <ngts-axis-arrow [axis]="0" [direction]="xDir" />
299
- }
300
- @if (!_disableAxes && _activeAxes[1]) {
301
- <ngts-axis-arrow [axis]="1" [direction]="yDir" />
302
- }
303
- @if (!_disableAxes && _activeAxes[2]) {
304
- <ngts-axis-arrow [axis]="2" [direction]="zDir" />
305
- }
306
-
307
- @if (!_disableSliders && _activeAxes[0] && _activeAxes[1]) {
308
- <ngts-plane-slider [axis]="2" [dir1]="xDir" [dir2]="yDir" />
309
- }
310
- @if (!_disableSliders && _activeAxes[0] && _activeAxes[2]) {
311
- <ngts-plane-slider [axis]="1" [dir1]="zDir" [dir2]="xDir" />
312
- }
313
- @if (!_disableSliders && _activeAxes[2] && _activeAxes[1]) {
314
- <ngts-plane-slider [axis]="0" [dir1]="yDir" [dir2]="zDir" />
315
- }
316
-
317
- @if (!_disableRotations && _activeAxes[0] && _activeAxes[1]) {
318
- <ngts-axis-rotator [axis]="2" [dir1]="xDir" [dir2]="yDir" />
319
- }
320
- @if (!_disableRotations && _activeAxes[0] && _activeAxes[2]) {
321
- <ngts-axis-rotator [axis]="1" [dir1]="zDir" [dir2]="xDir" />
322
- }
323
- @if (!_disableRotations && _activeAxes[2] && _activeAxes[1]) {
324
- <ngts-axis-rotator [axis]="0" [dir1]="yDir" [dir2]="zDir" />
325
- }
326
-
327
- @if (!_disableScaling && _activeAxes[0]) {
328
- <ngts-scaling-sphere [axis]="0" [direction]="xDir" />
329
- }
330
- @if (!_disableScaling && _activeAxes[1]) {
331
- <ngts-scaling-sphere [axis]="1" [direction]="yDir" />
332
- }
333
- @if (!_disableScaling && _activeAxes[2]) {
334
- <ngts-scaling-sphere [axis]="2" [direction]="zDir" />
335
- }
336
- }
337
- </ngt-group>
338
- <ngt-group #children>
339
- <ng-content />
340
- </ngt-group>
341
- </ngt-group>
342
- </ngt-group>
343
- `,
344
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
345
- changeDetection: ChangeDetectionStrategy.OnPush,
346
- imports: [NgtsAxisArrow, NgtsPlaneSlider, NgtsAxisRotator, NgtsScalingSphere],
347
- }]
348
- }], ctorParameters: () => [] });
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtY29udHJvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvZ2l6bW9zL3NyYy9saWIvcGl2b3QtY29udHJvbHMvcGl2b3QtY29udHJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLE1BQU0sRUFFTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQWdCLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQWdCckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzFCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8s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QkFBaUI7bUdBQWpCLGlCQUFpQixxdEJBL0RuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURULDREQUdTLGFBQWEsMkZBQUUsZUFBZSxnR0FBRSxlQUFlLGdHQUFFLGlCQUFpQjs7NEZBR2hFLGlCQUFpQjtrQkFsRTdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7aUJBQzdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0b3V0cHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlLCBOZ3RBbnlSZWNvcmQsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNhbGN1bGF0ZVNjYWxlRmFjdG9yIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQm94MywgR3JvdXAsIE1hdHJpeDQsIE1lc2gsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RzQXhpc0Fycm93IH0gZnJvbSAnLi9heGlzLWFycm93JztcbmltcG9ydCB7IE5ndHNBeGlzUm90YXRvciB9IGZyb20gJy4vYXhpcy1yb3RhdG9yJztcbmltcG9ydCB7IE5ndHNQbGFuZVNsaWRlciB9IGZyb20gJy4vcGxhbmUtc2xpZGVyJztcbmltcG9ydCB7IE5ndHNTY2FsaW5nU3BoZXJlIH0gZnJvbSAnLi9zY2FsaW5nLXNwaGVyZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25EcmFnU3RhcnRQYXJhbWV0ZXJzIHtcblx0Y29tcG9uZW50OiAnQXJyb3cnIHwgJ1NsaWRlcicgfCAnUm90YXRvcicgfCAnU3BoZXJlJztcblx0YXhpczogMCB8IDEgfCAyO1xuXHRvcmlnaW46IFZlY3RvcjM7XG5cdGRpcmVjdGlvbnM6IFZlY3RvcjNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbkRyYWdQYXJhbWV0ZXJzIHtcblx0bDogTWF0cml4NDtcblx0ZGVsdGFMOiBNYXRyaXg0O1xuXHR3OiBNYXRyaXg0O1xuXHRkZWx0YVc6IE1hdHJpeDQ7XG59XG5cbmNvbnN0IG1MMCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCBtVzAgPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgbVAgPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgbVBJbnYgPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgbVcgPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgbUwgPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgbUwwSW52ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IG1kTCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCBtRyA9IG5ldyBNYXRyaXg0KCk7XG5cbmNvbnN0IGJiID0gbmV3IEJveDMoKTtcbmNvbnN0IGJiT2JqID0gbmV3IEJveDMoKTtcbmNvbnN0IHZDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdlNpemUgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdkFuY2hvck9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCB2UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdlNjYWxlID0gbmV3IFZlY3RvcjMoKTtcblxuY29uc3QgeERpciA9IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xuY29uc3QgeURpciA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuY29uc3QgekRpciA9IG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNQaXZvdENvbnRyb2xzT3B0aW9ucyB7XG5cdC8qKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBjb250cm9sLCB0cnVlICovXG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdC8qKiBTY2FsZSBvZiB0aGUgZ2l6bW8sIDEgKi9cblx0c2NhbGU6IG51bWJlcjtcblx0LyoqIFdpZHRoIG9mIHRoZSBnaXptbyBsaW5lcywgdGhpcyBpcyBhIFRIUkVFLkxpbmUyIHByb3AsIDIuNSAqL1xuXHRsaW5lV2lkdGg6IG51bWJlcjtcblx0LyoqIElmIGZpeGVkIGlzIHRydWUgaXMgcmVtYWlucyBjb25zdGFudCBpbiBzaXplLCBzY2FsZSBpcyBub3cgaW4gcGl4ZWxzLCBmYWxzZSAqL1xuXHRmaXhlZDogYm9vbGVhbjtcblx0LyoqIFBpdm90IGRvZXMgbm90IGFjdCBhcyBhIGdyb3VwLCBpdCB3b24ndCBzaGlmdCBjb250ZW50cyBidXQgY2FuIG9mZnNldCBpbiBwb3NpdGlvbiAqL1xuXHRvZmZzZXQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblx0LyoqIFN0YXJ0aW5nIHJvdGF0aW9uICovXG5cdHJvdGF0aW9uOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cblx0LyoqIFN0YXJ0aW5nIG1hdHJpeCAqL1xuXHRtYXRyaXg/OiBNYXRyaXg0O1xuXHQvKiogQkJBbmNob3IsIGVhY2ggYXhpcyBjYW4gYmUgYmV0d2VlbiAtMS8wLysxICovXG5cdGFuY2hvcj86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblx0LyoqIElmIGF1dG9UcmFuc2Zvcm0gaXMgdHJ1ZSwgYXV0b21hdGljYWxseSBhcHBseSB0aGUgbG9jYWwgdHJhbnNmb3JtIG9uIGRyYWcsIHRydWUgKi9cblx0YXV0b1RyYW5zZm9ybTogYm9vbGVhbjtcblx0LyoqIEFsbG93cyB5b3UgdG8gc3dpdGNoIGluZGl2aWR1YWwgYXhlcyBvZmYgKi9cblx0YWN0aXZlQXhlczogW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dO1xuXG5cdC8qKiBBbGxvd3MgeW91IHRvIHN3aXRjaCBpbmRpdmlkdWFsIHRyYW5zZm9ybWF0aW9ucyBvZmYgKi9cblx0ZGlzYWJsZUF4ZXM6IGJvb2xlYW47XG5cdGRpc2FibGVTbGlkZXJzOiBib29sZWFuO1xuXHRkaXNhYmxlUm90YXRpb25zOiBib29sZWFuO1xuXHRkaXNhYmxlU2NhbGluZzogYm9vbGVhbjtcblxuXHQvKiogTGltaXRzICovXG5cdHRyYW5zbGF0aW9uTGltaXRzPzogW1tudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQsIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWRdO1xuXHRyb3RhdGlvbkxpbWl0cz86IFtbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkXTtcblx0c2NhbGVMaW1pdHM/OiBbW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZF07XG5cblx0LyoqIFJHQiBjb2xvcnMgKi9cblx0YXhpc0NvbG9yczogW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdO1xuXHQvKiogQ29sb3Igb2YgdGhlIGhvdmVyZWQgaXRlbSAqL1xuXHRob3ZlcmVkQ29sb3I6IHN0cmluZyB8IG51bWJlcjtcblx0LyoqIEhUTUwgdmFsdWUgYW5ub3RhdGlvbnMsIGRlZmF1bHQ6IGZhbHNlICovXG5cdGFubm90YXRpb25zOiBib29sZWFuO1xuXHQvKiogQ1NTIENsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBIVE1MIGFubm90YXRpb25zICovXG5cdGFubm90YXRpb25zQ2xhc3M/OiBzdHJpbmc7XG5cdC8qKiBTZXQgdGhpcyB0byBmYWxzZSBpZiB5b3Ugd2FudCB0aGUgZ2l6bW8gdG8gYmUgdmlzaWJsZSB0aHJvdWdoIGZhY2VzICovXG5cdGRlcHRoVGVzdDogYm9vbGVhbjtcblx0b3BhY2l0eT86IG51bWJlcjtcblx0dmlzaWJsZTogYm9vbGVhbjtcblx0dXNlckRhdGE/OiBOZ3RBbnlSZWNvcmQ7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzUGl2b3RDb250cm9sc09wdGlvbnMgPSB7XG5cdGVuYWJsZWQ6IHRydWUsXG5cdGF1dG9UcmFuc2Zvcm06IHRydWUsXG5cdGRpc2FibGVBeGVzOiBmYWxzZSxcblx0ZGlzYWJsZVNsaWRlcnM6IGZhbHNlLFxuXHRkaXNhYmxlUm90YXRpb25zOiBmYWxzZSxcblx0ZGlzYWJsZVNjYWxpbmc6IGZhbHNlLFxuXHRhY3RpdmVBeGVzOiBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG5cdG9mZnNldDogWzAsIDAsIDBdLFxuXHRyb3RhdGlvbjogWzAsIDAsIDBdLFxuXHRzY2FsZTogMSxcblx0bGluZVdpZHRoOiA0LFxuXHRmaXhlZDogZmFsc2UsXG5cdGRlcHRoVGVzdDogdHJ1ZSxcblx0YXhpc0NvbG9yczogWycjZmYyMDYwJywgJyMyMGRmODAnLCAnIzIwODBmZiddLFxuXHRob3ZlcmVkQ29sb3I6ICcjZmZmZjQwJyxcblx0YW5ub3RhdGlvbnM6IGZhbHNlLFxuXHRvcGFjaXR5OiAxLFxuXHR2aXNpYmxlOiB0cnVlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1waXZvdC1jb250cm9scycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCAjcGFyZW50PlxuXHRcdFx0PG5ndC1ncm91cCAjZ3JvdXAgW21hdHJpeF09XCJtYXRyaXgoKVwiIFttYXRyaXhBdXRvVXBkYXRlXT1cImZhbHNlXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHRcdDxuZ3QtZ3JvdXAgI2dpem1vIFt2aXNpYmxlXT1cInZpc2libGUoKVwiIFtwb3NpdGlvbl09XCJvZmZzZXQoKVwiIFtyb3RhdGlvbl09XCJyb3RhdGlvbigpXCI+XG5cdFx0XHRcdFx0QGlmIChlbmFibGVkKCkpIHtcblx0XHRcdFx0XHRcdEBsZXQgX2Rpc2FibGVBeGVzID0gZGlzYWJsZUF4ZXMoKTtcblx0XHRcdFx0XHRcdEBsZXQgX2Rpc2FibGVTbGlkZXJzID0gZGlzYWJsZVNsaWRlcnMoKTtcblx0XHRcdFx0XHRcdEBsZXQgX2Rpc2FibGVSb3RhdGlvbnMgPSBkaXNhYmxlUm90YXRpb25zKCk7XG5cdFx0XHRcdFx0XHRAbGV0IF9kaXNhYmxlU2NhbGluZyA9IGRpc2FibGVTY2FsaW5nKCk7XG5cdFx0XHRcdFx0XHRAbGV0IF9hY3RpdmVBeGVzID0gYWN0aXZlQXhlcygpO1xuXG5cdFx0XHRcdFx0XHRAaWYgKCFfZGlzYWJsZUF4ZXMgJiYgX2FjdGl2ZUF4ZXNbMF0pIHtcblx0XHRcdFx0XHRcdFx0PG5ndHMtYXhpcy1hcnJvdyBbYXhpc109XCIwXCIgW2RpcmVjdGlvbl09XCJ4RGlyXCIgLz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAoIV9kaXNhYmxlQXhlcyAmJiBfYWN0aXZlQXhlc1sxXSkge1xuXHRcdFx0XHRcdFx0XHQ8bmd0cy1heGlzLWFycm93IFtheGlzXT1cIjFcIiBbZGlyZWN0aW9uXT1cInlEaXJcIiAvPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0QGlmICghX2Rpc2FibGVBeGVzICYmIF9hY3RpdmVBeGVzWzJdKSB7XG5cdFx0XHRcdFx0XHRcdDxuZ3RzLWF4aXMtYXJyb3cgW2F4aXNdPVwiMlwiIFtkaXJlY3Rpb25dPVwiekRpclwiIC8+XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdEBpZiAoIV9kaXNhYmxlU2xpZGVycyAmJiBfYWN0aXZlQXhlc1swXSAmJiBfYWN0aXZlQXhlc1sxXSkge1xuXHRcdFx0XHRcdFx0XHQ8bmd0cy1wbGFuZS1zbGlkZXIgW2F4aXNdPVwiMlwiIFtkaXIxXT1cInhEaXJcIiBbZGlyMl09XCJ5RGlyXCIgLz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAoIV9kaXNhYmxlU2xpZGVycyAmJiBfYWN0aXZlQXhlc1swXSAmJiBfYWN0aXZlQXhlc1syXSkge1xuXHRcdFx0XHRcdFx0XHQ8bmd0cy1wbGFuZS1zbGlkZXIgW2F4aXNdPVwiMVwiIFtkaXIxXT1cInpEaXJcIiBbZGlyMl09XCJ4RGlyXCIgLz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAoIV9kaXNhYmxlU2xpZGVycyAmJiBfYWN0aXZlQXhlc1syXSAmJiBfYWN0aXZlQXhlc1sxXSkge1xuXHRcdFx0XHRcdFx0XHQ8bmd0cy1wbGFuZS1zbGlkZXIgW2F4aXNdPVwiMFwiIFtkaXIxXT1cInlEaXJcIiBbZGlyMl09XCJ6RGlyXCIgLz5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0QGlmICghX2Rpc2FibGVSb3RhdGlvbnMgJiYgX2FjdGl2ZUF4ZXNbMF0gJiYgX2FjdGl2ZUF4ZXNbMV0pIHtcblx0XHRcdFx0XHRcdFx0PG5ndHMtYXhpcy1yb3RhdG9yIFtheGlzXT1cIjJcIiBbZGlyMV09XCJ4RGlyXCIgW2RpcjJdPVwieURpclwiIC8+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRAaWYgKCFfZGlzYWJsZVJvdGF0aW9ucyAmJiBfYWN0aXZlQXhlc1swXSAmJiBfYWN0aXZlQXhlc1syXSkge1xuXHRcdFx0XHRcdFx0XHQ8bmd0cy1heGlzLXJvdGF0b3IgW2F4aXNdPVwiMVwiIFtkaXIxXT1cInpEaXJcIiBbZGlyMl09XCJ4RGlyXCIgLz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAoIV9kaXNhYmxlUm90YXRpb25zICYmIF9hY3RpdmVBeGVzWzJdICYmIF9hY3RpdmVBeGVzWzFdKSB7XG5cdFx0XHRcdFx0XHRcdDxuZ3RzLWF4aXMtcm90YXRvciBbYXhpc109XCIwXCIgW2RpcjFdPVwieURpclwiIFtkaXIyXT1cInpEaXJcIiAvPlxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRAaWYgKCFfZGlzYWJsZVNjYWxpbmcgJiYgX2FjdGl2ZUF4ZXNbMF0pIHtcblx0XHRcdFx0XHRcdFx0PG5ndHMtc2NhbGluZy1zcGhlcmUgW2F4aXNdPVwiMFwiIFtkaXJlY3Rpb25dPVwieERpclwiIC8+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRAaWYgKCFfZGlzYWJsZVNjYWxpbmcgJiYgX2FjdGl2ZUF4ZXNbMV0pIHtcblx0XHRcdFx0XHRcdFx0PG5ndHMtc2NhbGluZy1zcGhlcmUgW2F4aXNdPVwiMVwiIFtkaXJlY3Rpb25dPVwieURpclwiIC8+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRAaWYgKCFfZGlzYWJsZVNjYWxpbmcgJiYgX2FjdGl2ZUF4ZXNbMl0pIHtcblx0XHRcdFx0XHRcdFx0PG5ndHMtc2NhbGluZy1zcGhlcmUgW2F4aXNdPVwiMlwiIFtkaXJlY3Rpb25dPVwiekRpclwiIC8+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L25ndC1ncm91cD5cblx0XHRcdFx0PG5ndC1ncm91cCAjY2hpbGRyZW4+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0XHQ8L25ndC1ncm91cD5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNBeGlzQXJyb3csIE5ndHNQbGFuZVNsaWRlciwgTmd0c0F4aXNSb3RhdG9yLCBOZ3RzU2NhbGluZ1NwaGVyZV0sXG59KVxuLy8gVE9ETzogUGl2b3RDb250cm9scyBpcyBub3Qgd29ya2luZyBwcm9wZXJseSB3aXRoIGNvbnRyb2wgZmxvd1xuZXhwb3J0IGNsYXNzIE5ndHNQaXZvdENvbnRyb2xzIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnZW5hYmxlZCcsXG5cdFx0J21hdHJpeCcsXG5cdFx0J2F1dG9UcmFuc2Zvcm0nLFxuXHRcdCdhbmNob3InLFxuXHRcdCdkaXNhYmxlQXhlcycsXG5cdFx0J2Rpc2FibGVTbGlkZXJzJyxcblx0XHQnZGlzYWJsZVJvdGF0aW9ucycsXG5cdFx0J2Rpc2FibGVTY2FsaW5nJyxcblx0XHQnYWN0aXZlQXhlcycsXG5cdFx0J29mZnNldCcsXG5cdFx0J3JvdGF0aW9uJyxcblx0XHQnc2NhbGUnLFxuXHRcdCdsaW5lV2lkdGgnLFxuXHRcdCdmaXhlZCcsXG5cdFx0J3RyYW5zbGF0aW9uTGltaXRzJyxcblx0XHQncm90YXRpb25MaW1pdHMnLFxuXHRcdCdzY2FsZUxpbWl0cycsXG5cdFx0J2RlcHRoVGVzdCcsXG5cdFx0J2F4aXNDb2xvcnMnLFxuXHRcdCdob3ZlcmVkQ29sb3InLFxuXHRcdCdhbm5vdGF0aW9ucycsXG5cdFx0J2Fubm90YXRpb25zQ2xhc3MnLFxuXHRcdCdvcGFjaXR5Jyxcblx0XHQndmlzaWJsZScsXG5cdFx0J3VzZXJEYXRhJyxcblx0XSk7XG5cblx0ZHJhZ1N0YXJ0ZWQgPSBvdXRwdXQ8T25EcmFnU3RhcnRQYXJhbWV0ZXJzPigpO1xuXHRkcmFnRW5kZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblx0ZHJhZ2dlZCA9IG91dHB1dDxPbkRyYWdQYXJhbWV0ZXJzPigpO1xuXG5cdG1hdHJpeCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWF0cml4Jyk7XG5cdGFubm90YXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdhbm5vdGF0aW9ucycpO1xuXHRhbm5vdGF0aW9uc0NsYXNzID0gcGljayh0aGlzLm9wdGlvbnMsICdhbm5vdGF0aW9uc0NsYXNzJyk7XG5cdHRyYW5zbGF0aW9uTGltaXRzID0gcGljayh0aGlzLm9wdGlvbnMsICd0cmFuc2xhdGlvbkxpbWl0cycpO1xuXHRyb3RhdGlvbkxpbWl0cyA9IHBpY2sodGhpcy5vcHRpb25zLCAncm90YXRpb25MaW1pdHMnKTtcblx0c2NhbGVMaW1pdHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlTGltaXRzJyk7XG5cdGF1dG9UcmFuc2Zvcm0gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2F1dG9UcmFuc2Zvcm0nKTtcblx0Zml4ZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZpeGVkJyk7XG5cdGhvdmVyZWRDb2xvciA9IHBpY2sodGhpcy5vcHRpb25zLCAnaG92ZXJlZENvbG9yJyk7XG5cdGF4aXNDb2xvcnMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2F4aXNDb2xvcnMnKTtcblx0bGluZVdpZHRoID0gcGljayh0aGlzLm9wdGlvbnMsICdsaW5lV2lkdGgnKTtcblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdHVzZXJEYXRhID0gcGljayh0aGlzLm9wdGlvbnMsICd1c2VyRGF0YScpO1xuXHRvcGFjaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdvcGFjaXR5Jyk7XG5cdGRlcHRoVGVzdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGVwdGhUZXN0Jyk7XG5cdG9mZnNldCA9IHBpY2sodGhpcy5vcHRpb25zLCAnb2Zmc2V0Jyk7XG5cdHJvdGF0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdyb3RhdGlvbicpO1xuXHR2aXNpYmxlID0gcGljayh0aGlzLm9wdGlvbnMsICd2aXNpYmxlJyk7XG5cdGVuYWJsZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2VuYWJsZWQnKTtcblx0ZGlzYWJsZUF4ZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Rpc2FibGVBeGVzJyk7XG5cdGRpc2FibGVTbGlkZXJzID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXNhYmxlU2xpZGVycycpO1xuXHRkaXNhYmxlUm90YXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXNhYmxlUm90YXRpb25zJyk7XG5cdGRpc2FibGVTY2FsaW5nID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXNhYmxlU2NhbGluZycpO1xuXHRhY3RpdmVBeGVzID0gcGljayh0aGlzLm9wdGlvbnMsICdhY3RpdmVBeGVzJyk7XG5cblx0eERpciA9IHhEaXI7XG5cdHlEaXIgPSB5RGlyO1xuXHR6RGlyID0gekRpcjtcblxuXHRwYXJlbnRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdwYXJlbnQnKTtcblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRnaXptb1JlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dpem1vJyk7XG5cdGNoaWxkcmVuUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8R3JvdXA+PignY2hpbGRyZW4nKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHR0cmFuc2xhdGlvbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzAsIDAsIDBdO1xuXG5cdHByaXZhdGUgYW5jaG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdhbmNob3InKTtcblx0cHJpdmF0ZSBjYW1lcmFTY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuXHRwcml2YXRlIGdpem1vU2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91cCB9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcigpO1xuXHRcdFx0aWYgKCFhbmNob3IpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgY2hpbGRyZW5Db250YWluZXIgPSB0aGlzLmNoaWxkcmVuUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGNoaWxkcmVuQ29udGFpbmVyKTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBbZ2l6bW8sIG9mZnNldCwgaW52YWxpZGF0ZV0gPSBbXG5cdFx0XHRcdHRoaXMuZ2l6bW9SZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRcdFx0dGhpcy5vcHRpb25zKCksXG5cdFx0XHRcdFtsb2NhbFN0YXRlLm9iamVjdHMoKSwgbG9jYWxTdGF0ZS5ub25PYmplY3RzKCldLFxuXHRcdFx0XTtcblx0XHRcdGNoaWxkcmVuQ29udGFpbmVyLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIHRydWUpO1xuXG5cdFx0XHRtUEludi5jb3B5KGNoaWxkcmVuQ29udGFpbmVyLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblx0XHRcdGJiLm1ha2VFbXB0eSgpO1xuXG5cdFx0XHRjaGlsZHJlbkNvbnRhaW5lci50cmF2ZXJzZSgob2JqKSA9PiB7XG5cdFx0XHRcdGlmICghKG9iaiBhcyBNZXNoKS5nZW9tZXRyeSkgcmV0dXJuO1xuXHRcdFx0XHRpZiAoIShvYmogYXMgTWVzaCkuZ2VvbWV0cnkuYm91bmRpbmdCb3gpIChvYmogYXMgTWVzaCkuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG5cdFx0XHRcdG1MLmNvcHkob2JqLm1hdHJpeFdvcmxkKS5wcmVtdWx0aXBseShtUEludik7XG5cdFx0XHRcdGNvbnN0IGJvdW5kaW5nQm94ID0gKG9iaiBhcyBNZXNoKS5nZW9tZXRyeS5ib3VuZGluZ0JveDtcblx0XHRcdFx0aWYgKGJvdW5kaW5nQm94KSB7XG5cdFx0XHRcdFx0YmJPYmouY29weShib3VuZGluZ0JveCk7XG5cdFx0XHRcdFx0YmJPYmouYXBwbHlNYXRyaXg0KG1MKTtcblx0XHRcdFx0XHRiYi51bmlvbihiYk9iaik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR2Q2VudGVyLmNvcHkoYmIubWF4KS5hZGQoYmIubWluKS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXHRcdFx0dlNpemUuY29weShiYi5tYXgpLnN1YihiYi5taW4pLm11bHRpcGx5U2NhbGFyKDAuNSk7XG5cdFx0XHR2QW5jaG9yT2Zmc2V0XG5cdFx0XHRcdC5jb3B5KHZTaXplKVxuXHRcdFx0XHQubXVsdGlwbHkobmV3IFZlY3RvcjMoLi4uYW5jaG9yKSlcblx0XHRcdFx0LmFkZCh2Q2VudGVyKTtcblx0XHRcdHZQb3NpdGlvbi5zZXQoLi4ub2Zmc2V0KS5hZGQodkFuY2hvck9mZnNldCk7XG5cdFx0XHRnaXptby5wb3NpdGlvbi5jb3B5KHZQb3NpdGlvbik7XG5cdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBjYW1lcmEsIHNpemUsIGludmFsaWRhdGUgfSkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgZml4ZWQsIHNjYWxlLCBtYXRyaXggfSwgZ2l6bW8sIGdyb3VwXSA9IFtcblx0XHRcdFx0dGhpcy5vcHRpb25zKCksXG5cdFx0XHRcdHRoaXMuZ2l6bW9SZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmdyb3VwUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdF07XG5cblx0XHRcdGlmIChmaXhlZCkge1xuXHRcdFx0XHRjb25zdCBzZiA9IGNhbGN1bGF0ZVNjYWxlRmFjdG9yKGdpem1vLmdldFdvcmxkUG9zaXRpb24odmVjKSwgc2NhbGUsIGNhbWVyYSwgc2l6ZSk7XG5cdFx0XHRcdHRoaXMuY2FtZXJhU2NhbGUuc2V0U2NhbGFyKHNmKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1hdHJpeCAmJiBtYXRyaXggaW5zdGFuY2VvZiBNYXRyaXg0KSB7XG5cdFx0XHRcdGdyb3VwLm1hdHJpeCA9IG1hdHJpeDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXBkYXRlIGdpem1vIHNjYWxlIGluIGFjY29yZGFuY2Ugd2l0aCBtYXRyaXggY2hhbmdlc1xuXHRcdFx0Ly8gV2l0aG91dCB0aGlzLCB0aGVyZSBtaWdodCBiZSBub3RpY2VhYmxlIHR1cmJ1bGVuY2UgaWYgc2NhbGluZyBoYXBwZW5zIGZhc3QgZW5vdWdoXG5cdFx0XHRnaXptby51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCB0cnVlKTtcblxuXHRcdFx0bUcubWFrZVJvdGF0aW9uRnJvbUV1bGVyKGdpem1vLnJvdGF0aW9uKS5zZXRQb3NpdGlvbihnaXptby5wb3NpdGlvbikucHJlbXVsdGlwbHkoZ3JvdXAubWF0cml4V29ybGQpO1xuXHRcdFx0dGhpcy5naXptb1NjYWxlLnNldEZyb21NYXRyaXhTY2FsZShtRyk7XG5cblx0XHRcdHZTY2FsZS5jb3B5KHRoaXMuY2FtZXJhU2NhbGUpLmRpdmlkZSh0aGlzLmdpem1vU2NhbGUpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKGdpem1vLnNjYWxlLnggLSB2U2NhbGUueCkgPiAxZS00IHx8XG5cdFx0XHRcdE1hdGguYWJzKGdpem1vLnNjYWxlLnkgLSB2U2NhbGUueSkgPiAxZS00IHx8XG5cdFx0XHRcdE1hdGguYWJzKGdpem1vLnNjYWxlLnogLSB2U2NhbGUueikgPiAxZS00XG5cdFx0XHQpIHtcblx0XHRcdFx0Z2l6bW8uc2NhbGUuY29weSh2U2NhbGUpO1xuXHRcdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvbkRyYWdTdGFydChwYXJhbWV0ZXJzOiBPbkRyYWdTdGFydFBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdG1MMC5jb3B5KGdyb3VwLm1hdHJpeCk7XG5cdFx0bVcwLmNvcHkoZ3JvdXAubWF0cml4V29ybGQpO1xuXHRcdHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChwYXJhbWV0ZXJzKTtcblx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LmludmFsaWRhdGUoKTtcblx0fVxuXG5cdG9uRHJhZyhtZFc6IE1hdHJpeDQpIHtcblx0XHRjb25zdCBbcGFyZW50LCBncm91cCwgYXV0b1RyYW5zZm9ybV0gPSBbXG5cdFx0XHR0aGlzLnBhcmVudFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHR0aGlzLmdyb3VwUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMuYXV0b1RyYW5zZm9ybSgpLFxuXHRcdF07XG5cblx0XHRtUC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0bVBJbnYuY29weShtUCkuaW52ZXJ0KCk7XG5cdFx0Ly8gQWZ0ZXIgYXBwbHlpbmcgdGhlIGRlbHRhXG5cdFx0bVcuY29weShtVzApLnByZW11bHRpcGx5KG1kVyk7XG5cdFx0bUwuY29weShtVykucHJlbXVsdGlwbHkobVBJbnYpO1xuXHRcdG1MMEludi5jb3B5KG1MMCkuaW52ZXJ0KCk7XG5cdFx0bWRMLmNvcHkobUwpLm11bHRpcGx5KG1MMEludik7XG5cblx0XHRpZiAoYXV0b1RyYW5zZm9ybSkge1xuXHRcdFx0Z3JvdXAubWF0cml4LmNvcHkobUwpO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ2dlZC5lbWl0KHsgbDogbUwsIGRlbHRhTDogbWRMLCB3OiBtVywgZGVsdGFXOiBtZFcgfSk7XG5cdFx0dGhpcy5zdG9yZS5zbmFwc2hvdC5pbnZhbGlkYXRlKCk7XG5cdH1cblxuXHRvbkRyYWdFbmQoKSB7XG5cdFx0dGhpcy5kcmFnRW5kZWQuZW1pdCgpO1xuXHRcdHRoaXMuc3RvcmUuc25hcHNob3QuaW52YWxpZGF0ZSgpO1xuXHR9XG59XG4iXX0=