@esotericsoftware/spine-core 4.2.117 → 4.3.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 (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +27 -21
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +132 -0
  16. package/dist/BonePose.js +456 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +16 -5
  20. package/dist/ConstraintData.js +15 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +23 -28
  28. package/dist/IkConstraint.js +122 -124
  29. package/dist/IkConstraintData.d.ts +14 -19
  30. package/dist/IkConstraintData.js +22 -23
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -23
  34. package/dist/PathConstraint.js +162 -139
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +114 -94
  43. package/dist/PhysicsConstraintData.d.ts +28 -13
  44. package/dist/PhysicsConstraintData.js +35 -13
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +1 -1
  58. package/dist/SkeletonBinary.js +655 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +895 -640
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +14 -3
  98. package/dist/Utils.js +80 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7747 -6116
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7747 -6116
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
package/dist/Bone.js CHANGED
@@ -26,373 +26,33 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { Inherit } from "./BoneData.js";
30
- import { MathUtils } from "./Utils.js";
31
- /** Stores a bone's current pose.
32
- *
33
- * A bone has a local transform which is used to compute its world transform. A bone also has an applied transform, which is a
34
- * local transform that can be applied to compute the world transform. The local transform and applied transform may differ if a
35
- * constraint or application code modifies the world transform after it was computed from the local transform. */
36
- export class Bone {
37
- /** The bone's setup pose data. */
38
- data;
39
- /** The skeleton this bone belongs to. */
40
- skeleton;
29
+ import { BonePose } from "./BonePose.js";
30
+ import { PosedActive } from "./PosedActive.js";
31
+ /** A node in a skeleton's hierarchy with a transform that affects its children and their attachments. A bone has a number of
32
+ * poses:
33
+ * - {@link data}: The setup pose.
34
+ * - {@link pose}: The unconstrained local pose. Set by animations and application code.
35
+ * - {@link appliedPose}: The local pose to use for rendering. Possibly modified by constraints.
36
+ * - World transform: the local pose combined with the parent world transform. Computed on a pose by
37
+ * {@link BonePose.updateWorldTransform} and {@link Skeleton.updateWorldTransform}.
38
+ */
39
+ export class Bone extends PosedActive {
41
40
  /** The parent bone, or null if this is the root bone. */
42
41
  parent = null;
43
42
  /** The immediate children of this bone. */
44
- children = new Array();
45
- /** The local x translation. */
46
- x = 0;
47
- /** The local y translation. */
48
- y = 0;
49
- /** The local rotation in degrees, counter clockwise. */
50
- rotation = 0;
51
- /** The local scaleX. */
52
- scaleX = 0;
53
- /** The local scaleY. */
54
- scaleY = 0;
55
- /** The local shearX. */
56
- shearX = 0;
57
- /** The local shearY. */
58
- shearY = 0;
59
- /** The applied local x translation. */
60
- ax = 0;
61
- /** The applied local y translation. */
62
- ay = 0;
63
- /** The applied local rotation in degrees, counter clockwise. */
64
- arotation = 0;
65
- /** The applied local scaleX. */
66
- ascaleX = 0;
67
- /** The applied local scaleY. */
68
- ascaleY = 0;
69
- /** The applied local shearX. */
70
- ashearX = 0;
71
- /** The applied local shearY. */
72
- ashearY = 0;
73
- /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */
74
- a = 0;
75
- /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */
76
- b = 0;
77
- /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */
78
- c = 0;
79
- /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */
80
- d = 0;
81
- /** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */
82
- worldY = 0;
83
- /** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */
84
- worldX = 0;
85
- inherit = Inherit.Normal;
43
+ children = [];
86
44
  sorted = false;
87
- active = false;
88
- /** @param parent May be null. */
89
- constructor(data, skeleton, parent) {
90
- if (!data)
91
- throw new Error("data cannot be null.");
92
- if (!skeleton)
93
- throw new Error("skeleton cannot be null.");
94
- this.data = data;
95
- this.skeleton = skeleton;
45
+ constructor(data, parent) {
46
+ super(data, new BonePose(), new BonePose());
96
47
  this.parent = parent;
97
- this.setToSetupPose();
98
- }
99
- /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the
100
- * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */
101
- isActive() {
102
- return this.active;
103
- }
104
- /** Computes the world transform using the parent bone and this bone's local applied transform. */
105
- update(physics) {
106
- this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);
107
- }
108
- /** Computes the world transform using the parent bone and this bone's local transform.
109
- *
110
- * See {@link #updateWorldTransformWith()}. */
111
- updateWorldTransform() {
112
- this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);
113
- }
114
- /** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the
115
- * specified local transform. Child bones are not updated.
116
- *
117
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
118
- * Runtimes Guide. */
119
- updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY) {
120
- this.ax = x;
121
- this.ay = y;
122
- this.arotation = rotation;
123
- this.ascaleX = scaleX;
124
- this.ascaleY = scaleY;
125
- this.ashearX = shearX;
126
- this.ashearY = shearY;
127
- let parent = this.parent;
128
- if (!parent) { // Root bone.
129
- let skeleton = this.skeleton;
130
- const sx = skeleton.scaleX, sy = skeleton.scaleY;
131
- const rx = (rotation + shearX) * MathUtils.degRad;
132
- const ry = (rotation + 90 + shearY) * MathUtils.degRad;
133
- this.a = Math.cos(rx) * scaleX * sx;
134
- this.b = Math.cos(ry) * scaleY * sx;
135
- this.c = Math.sin(rx) * scaleX * sy;
136
- this.d = Math.sin(ry) * scaleY * sy;
137
- this.worldX = x * sx + skeleton.x;
138
- this.worldY = y * sy + skeleton.y;
139
- return;
140
- }
141
- let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
142
- this.worldX = pa * x + pb * y + parent.worldX;
143
- this.worldY = pc * x + pd * y + parent.worldY;
144
- switch (this.inherit) {
145
- case Inherit.Normal: {
146
- const rx = (rotation + shearX) * MathUtils.degRad;
147
- const ry = (rotation + 90 + shearY) * MathUtils.degRad;
148
- const la = Math.cos(rx) * scaleX;
149
- const lb = Math.cos(ry) * scaleY;
150
- const lc = Math.sin(rx) * scaleX;
151
- const ld = Math.sin(ry) * scaleY;
152
- this.a = pa * la + pb * lc;
153
- this.b = pa * lb + pb * ld;
154
- this.c = pc * la + pd * lc;
155
- this.d = pc * lb + pd * ld;
156
- return;
157
- }
158
- case Inherit.OnlyTranslation: {
159
- const rx = (rotation + shearX) * MathUtils.degRad;
160
- const ry = (rotation + 90 + shearY) * MathUtils.degRad;
161
- this.a = Math.cos(rx) * scaleX;
162
- this.b = Math.cos(ry) * scaleY;
163
- this.c = Math.sin(rx) * scaleX;
164
- this.d = Math.sin(ry) * scaleY;
165
- break;
166
- }
167
- case Inherit.NoRotationOrReflection: {
168
- let sx = 1 / this.skeleton.scaleX, sy = 1 / this.skeleton.scaleY;
169
- pa *= sx;
170
- pc *= sy;
171
- let s = pa * pa + pc * pc;
172
- let prx = 0;
173
- if (s > 0.0001) {
174
- s = Math.abs(pa * pd * sy - pb * sx * pc) / s;
175
- pb = pc * s;
176
- pd = pa * s;
177
- prx = Math.atan2(pc, pa) * MathUtils.radDeg;
178
- }
179
- else {
180
- pa = 0;
181
- pc = 0;
182
- prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;
183
- }
184
- const rx = (rotation + shearX - prx) * MathUtils.degRad;
185
- const ry = (rotation + shearY - prx + 90) * MathUtils.degRad;
186
- const la = Math.cos(rx) * scaleX;
187
- const lb = Math.cos(ry) * scaleY;
188
- const lc = Math.sin(rx) * scaleX;
189
- const ld = Math.sin(ry) * scaleY;
190
- this.a = pa * la - pb * lc;
191
- this.b = pa * lb - pb * ld;
192
- this.c = pc * la + pd * lc;
193
- this.d = pc * lb + pd * ld;
194
- break;
195
- }
196
- case Inherit.NoScale:
197
- case Inherit.NoScaleOrReflection: {
198
- rotation *= MathUtils.degRad;
199
- const cos = Math.cos(rotation), sin = Math.sin(rotation);
200
- let za = (pa * cos + pb * sin) / this.skeleton.scaleX;
201
- let zc = (pc * cos + pd * sin) / this.skeleton.scaleY;
202
- let s = Math.sqrt(za * za + zc * zc);
203
- if (s > 0.00001)
204
- s = 1 / s;
205
- za *= s;
206
- zc *= s;
207
- s = Math.sqrt(za * za + zc * zc);
208
- if (this.inherit == Inherit.NoScale
209
- && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))
210
- s = -s;
211
- rotation = Math.PI / 2 + Math.atan2(zc, za);
212
- const zb = Math.cos(rotation) * s;
213
- const zd = Math.sin(rotation) * s;
214
- shearX *= MathUtils.degRad;
215
- shearY = (90 + shearY) * MathUtils.degRad;
216
- const la = Math.cos(shearX) * scaleX;
217
- const lb = Math.cos(shearY) * scaleY;
218
- const lc = Math.sin(shearX) * scaleX;
219
- const ld = Math.sin(shearY) * scaleY;
220
- this.a = za * la + zb * lc;
221
- this.b = za * lb + zb * ld;
222
- this.c = zc * la + zd * lc;
223
- this.d = zc * lb + zd * ld;
224
- break;
225
- }
226
- }
227
- this.a *= this.skeleton.scaleX;
228
- this.b *= this.skeleton.scaleX;
229
- this.c *= this.skeleton.scaleY;
230
- this.d *= this.skeleton.scaleY;
231
- }
232
- /** Sets this bone's local transform to the setup pose. */
233
- setToSetupPose() {
234
- let data = this.data;
235
- this.x = data.x;
236
- this.y = data.y;
237
- this.rotation = data.rotation;
238
- this.scaleX = data.scaleX;
239
- this.scaleY = data.scaleY;
240
- this.shearX = data.shearX;
241
- this.shearY = data.shearY;
242
- this.inherit = data.inherit;
243
- }
244
- /** Computes the applied transform values from the world transform.
245
- *
246
- * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so
247
- * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other
248
- * constraints).
249
- *
250
- * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after
251
- * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */
252
- updateAppliedTransform() {
253
- let parent = this.parent;
254
- if (!parent) {
255
- this.ax = this.worldX - this.skeleton.x;
256
- this.ay = this.worldY - this.skeleton.y;
257
- this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;
258
- this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);
259
- this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);
260
- this.ashearX = 0;
261
- this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg;
262
- return;
263
- }
264
- let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
265
- let pid = 1 / (pa * pd - pb * pc);
266
- let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
267
- let dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
268
- this.ax = (dx * ia - dy * ib);
269
- this.ay = (dy * id - dx * ic);
270
- let ra, rb, rc, rd;
271
- if (this.inherit == Inherit.OnlyTranslation) {
272
- ra = this.a;
273
- rb = this.b;
274
- rc = this.c;
275
- rd = this.d;
276
- }
277
- else {
278
- switch (this.inherit) {
279
- case Inherit.NoRotationOrReflection: {
280
- let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
281
- pb = -pc * this.skeleton.scaleX * s / this.skeleton.scaleY;
282
- pd = pa * this.skeleton.scaleY * s / this.skeleton.scaleX;
283
- pid = 1 / (pa * pd - pb * pc);
284
- ia = pd * pid;
285
- ib = pb * pid;
286
- break;
287
- }
288
- case Inherit.NoScale:
289
- case Inherit.NoScaleOrReflection:
290
- let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);
291
- pa = (pa * cos + pb * sin) / this.skeleton.scaleX;
292
- pc = (pc * cos + pd * sin) / this.skeleton.scaleY;
293
- let s = Math.sqrt(pa * pa + pc * pc);
294
- if (s > 0.00001)
295
- s = 1 / s;
296
- pa *= s;
297
- pc *= s;
298
- s = Math.sqrt(pa * pa + pc * pc);
299
- if (this.inherit == Inherit.NoScale && pid < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))
300
- s = -s;
301
- let r = MathUtils.PI / 2 + Math.atan2(pc, pa);
302
- pb = Math.cos(r) * s;
303
- pd = Math.sin(r) * s;
304
- pid = 1 / (pa * pd - pb * pc);
305
- ia = pd * pid;
306
- ib = pb * pid;
307
- ic = pc * pid;
308
- id = pa * pid;
309
- }
310
- ra = ia * this.a - ib * this.c;
311
- rb = ia * this.b - ib * this.d;
312
- rc = id * this.c - ic * this.a;
313
- rd = id * this.d - ic * this.b;
314
- }
315
- this.ashearX = 0;
316
- this.ascaleX = Math.sqrt(ra * ra + rc * rc);
317
- if (this.ascaleX > 0.0001) {
318
- let det = ra * rd - rb * rc;
319
- this.ascaleY = det / this.ascaleX;
320
- this.ashearY = -Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;
321
- this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;
322
- }
323
- else {
324
- this.ascaleX = 0;
325
- this.ascaleY = Math.sqrt(rb * rb + rd * rd);
326
- this.ashearY = 0;
327
- this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;
328
- }
329
- }
330
- /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */
331
- getWorldRotationX() {
332
- return Math.atan2(this.c, this.a) * MathUtils.radDeg;
333
- }
334
- /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */
335
- getWorldRotationY() {
336
- return Math.atan2(this.d, this.b) * MathUtils.radDeg;
337
- }
338
- /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */
339
- getWorldScaleX() {
340
- return Math.sqrt(this.a * this.a + this.c * this.c);
341
- }
342
- /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */
343
- getWorldScaleY() {
344
- return Math.sqrt(this.b * this.b + this.d * this.d);
345
- }
346
- /** Transforms a point from world coordinates to the bone's local coordinates. */
347
- worldToLocal(world) {
348
- let invDet = 1 / (this.a * this.d - this.b * this.c);
349
- let x = world.x - this.worldX, y = world.y - this.worldY;
350
- world.x = x * this.d * invDet - y * this.b * invDet;
351
- world.y = y * this.a * invDet - x * this.c * invDet;
352
- return world;
353
- }
354
- /** Transforms a point from the bone's local coordinates to world coordinates. */
355
- localToWorld(local) {
356
- let x = local.x, y = local.y;
357
- local.x = x * this.a + y * this.b + this.worldX;
358
- local.y = x * this.c + y * this.d + this.worldY;
359
- return local;
360
- }
361
- /** Transforms a point from world coordinates to the parent bone's local coordinates. */
362
- worldToParent(world) {
363
- if (world == null)
364
- throw new Error("world cannot be null.");
365
- return this.parent == null ? world : this.parent.worldToLocal(world);
366
- }
367
- /** Transforms a point from the parent bone's coordinates to world coordinates. */
368
- parentToWorld(world) {
369
- if (world == null)
370
- throw new Error("world cannot be null.");
371
- return this.parent == null ? world : this.parent.localToWorld(world);
372
- }
373
- /** Transforms a world rotation to a local rotation. */
374
- worldToLocalRotation(worldRotation) {
375
- let sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation);
376
- return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX;
377
- }
378
- /** Transforms a local rotation to a world rotation. */
379
- localToWorldRotation(localRotation) {
380
- localRotation -= this.rotation - this.shearX;
381
- let sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation);
382
- return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;
48
+ this.appliedPose.bone = this;
49
+ this.constrainedPose.bone = this;
383
50
  }
384
- /** Rotates the world transform the specified amount.
385
- * <p>
386
- * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and
387
- * {@link #update(Physics)} will need to be called on any child bones, recursively. */
388
- rotateWorld(degrees) {
389
- degrees *= MathUtils.degRad;
390
- const sin = Math.sin(degrees), cos = Math.cos(degrees);
391
- const ra = this.a, rb = this.b;
392
- this.a = cos * ra - sin * this.c;
393
- this.b = cos * rb - sin * this.d;
394
- this.c = sin * ra + cos * this.c;
395
- this.d = sin * rb + cos * this.d;
51
+ /** Copy constructor. Does not copy the {@link children} bones. */
52
+ copy(parent) {
53
+ const copy = new Bone(this.data, parent);
54
+ copy.pose.set(this.pose);
55
+ return copy;
396
56
  }
397
57
  }
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQVksT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxTQUFTLEVBQVcsTUFBTSxZQUFZLENBQUM7QUFFaEQ7Ozs7aUhBSWlIO0FBQ2pILE1BQU0sT0FBTyxJQUFJO0lBQ2hCLGtDQUFrQztJQUNsQyxJQUFJLENBQVc7SUFFZix5Q0FBeUM7SUFDekMsUUFBUSxDQUFXO0lBRW5CLHlEQUF5RDtJQUN6RCxNQUFNLEdBQWdCLElBQUksQ0FBQztJQUUzQiwyQ0FBMkM7SUFDM0MsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFRLENBQUM7SUFFN0IsK0JBQStCO0lBQy9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLHdEQUF3RDtJQUN4RCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWIsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1Q0FBdUM7SUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVQLHVDQUF1QztJQUN2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVAsZ0VBQWdFO0lBQ2hFLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFZCxnQ0FBZ0M7SUFDaEMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVaLGdDQUFnQztJQUNoQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRVosZ0NBQWdDO0lBQ2hDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFF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RyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN2RCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1IsQ0FBQztRQUVELElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTlDLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLEtBQUssT0FBTyxDQUFDLE1B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QUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlGLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFH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RyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7MEZBR3NGO0lBQ3RGLFdBQVcsQ0FBRSxPQUFlO1FBQzNCLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBCb25lRGF0YSwgSW5oZXJpdCB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBQaHlzaWNzLCBTa2VsZXRvbiB9IGZyb20gXCIuL1NrZWxldG9uLmpzXCI7XG5pbXBvcnQgeyBVcGRhdGFibGUgfSBmcm9tIFwiLi9VcGRhdGFibGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgVmVjdG9yMiB9IGZyb20gXCIuL1V0aWxzLmpzXCI7XG5cbi8qKiBTdG9yZXMgYSBib25lJ3MgY3VycmVudCBwb3NlLlxuICpcbiAqIEEgYm9uZSBoYXMgYSBsb2NhbCB0cmFuc2Zvcm0gd2hpY2ggaXMgdXNlZCB0byBjb21wdXRlIGl0cyB3b3JsZCB0cmFuc2Zvcm0uIEEgYm9uZSBhbHNvIGhhcyBhbiBhcHBsaWVkIHRyYW5zZm9ybSwgd2hpY2ggaXMgYVxuICogbG9jYWwgdHJhbnNmb3JtIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gY29tcHV0ZSB0aGUgd29ybGQgdHJhbnNmb3JtLiBUaGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBhcHBsaWVkIHRyYW5zZm9ybSBtYXkgZGlmZmVyIGlmIGFcbiAqIGNvbnN0cmFpbnQgb3IgYXBwbGljYXRpb24gY29kZSBtb2RpZmllcyB0aGUgd29ybGQgdHJhbnNmb3JtIGFmdGVyIGl0IHdhcyBjb21wdXRlZCBmcm9tIHRoZSBsb2NhbCB0cmFuc2Zvcm0uICovXG5leHBvcnQgY2xhc3MgQm9uZSBpbXBsZW1lbnRzIFVwZGF0YWJsZSB7XG5cdC8qKiBUaGUgYm9uZSdzIHNldHVwIHBvc2UgZGF0YS4gKi9cblx0ZGF0YTogQm9uZURhdGE7XG5cblx0LyoqIFRoZSBza2VsZXRvbiB0aGlzIGJvbmUgYmVsb25ncyB0by4gKi9cblx0c2tlbGV0b246IFNrZWxldG9uO1xuXG5cdC8qKiBUaGUgcGFyZW50IGJvbmUsIG9yIG51bGwgaWYgdGhpcyBpcyB0aGUgcm9vdCBib25lLiAqL1xuXHRwYXJlbnQ6IEJvbmUgfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGlzIGJvbmUuICovXG5cdGNoaWxkcmVuID0gbmV3IEFycmF5PEJvbmU+KCk7XG5cblx0LyoqIFRoZSBsb2NhbCB4IHRyYW5zbGF0aW9uLiAqL1xuXHR4ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHkgdHJhbnNsYXRpb24uICovXG5cdHkgPSAwO1xuXG5cdC8qKiBUaGUgbG9jYWwgcm90YXRpb24gaW4gZGVncmVlcywgY291bnRlciBjbG9ja3dpc2UuICovXG5cdHJvdGF0aW9uID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHNjYWxlWC4gKi9cblx0c2NhbGVYID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHNjYWxlWS4gKi9cblx0c2NhbGVZID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHNoZWFyWC4gKi9cblx0c2hlYXJYID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHNoZWFyWS4gKi9cblx0c2hlYXJZID0gMDtcblxuXHQvKiogVGhlIGFwcGxpZWQgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0YXggPSAwO1xuXG5cdC8qKiBUaGUgYXBwbGllZCBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHRheSA9IDA7XG5cblx0LyoqIFRoZSBhcHBsaWVkIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRhcm90YXRpb24gPSAwO1xuXG5cdC8qKiBUaGUgYXBwbGllZCBsb2NhbCBzY2FsZVguICovXG5cdGFzY2FsZVggPSAwO1xuXG5cdC8qKiBUaGUgYXBwbGllZCBsb2NhbCBzY2FsZVkuICovXG5cdGFzY2FsZVkgPSAwO1xuXG5cdC8qKiBUaGUgYXBwbGllZCBsb2NhbCBzaGVhclguICovXG5cdGFzaGVhclggPSAwO1xuXG5cdC8qKiBUaGUgYXBwbGllZCBsb2NhbCBzaGVhclkuICovXG5cdGFzaGVhclkgPSAwO1xuXG5cdC8qKiBQYXJ0IG9mIHRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IGZvciB0aGUgWCBheGlzLiBJZiBjaGFuZ2VkLCB7QGxpbmsgI3VwZGF0ZUFwcGxpZWRUcmFuc2Zvcm0oKX0gc2hvdWxkIGJlIGNhbGxlZC4gKi9cblx0YSA9IDA7XG5cblx0LyoqIFBhcnQgb2YgdGhlIHdvcmxkIHRyYW5zZm9ybSBtYXRyaXggZm9yIHRoZSBZIGF4aXMuIElmIGNoYW5nZWQsIHtAbGluayAjdXBkYXRlQXBwbGllZFRyYW5zZm9ybSgpfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHRiID0gMDtcblxuXHQvKiogUGFydCBvZiB0aGUgd29ybGQgdHJhbnNmb3JtIG1hdHJpeCBmb3IgdGhlIFggYXhpcy4gSWYgY2hhbmdlZCwge0BsaW5rICN1cGRhdGVBcHBsaWVkVHJhbnNmb3JtKCl9IHNob3VsZCBiZSBjYWxsZWQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBQYXJ0IG9mIHRoZSB3b3JsZCB0cmFuc2Zvcm0gbWF0cml4IGZvciB0aGUgWSBheGlzLiBJZiBjaGFuZ2VkLCB7QGxpbmsgI3VwZGF0ZUFwcGxpZWRUcmFuc2Zvcm0oKX0gc2hvdWxkIGJlIGNhbGxlZC4gKi9cblx0ZCA9IDA7XG5cblx0LyoqIFRoZSB3b3JsZCBYIHBvc2l0aW9uLiBJZiBjaGFuZ2VkLCB7QGxpbmsgI3VwZGF0ZUFwcGxpZWRUcmFuc2Zvcm0oKX0gc2hvdWxkIGJlIGNhbGxlZC4gKi9cblx0d29ybGRZID0gMDtcblxuXHQvKiogVGhlIHdvcmxkIFkgcG9zaXRpb24uIElmIGNoYW5nZWQsIHtAbGluayAjdXBkYXRlQXBwbGllZFRyYW5zZm9ybSgpfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdGluaGVyaXQ6IEluaGVyaXQgPSBJbmhlcml0Lk5vcm1hbDtcblxuXHRzb3J0ZWQgPSBmYWxzZTtcblx0YWN0aXZlID0gZmFsc2U7XG5cblx0LyoqIEBwYXJhbSBwYXJlbnQgTWF5IGJlIG51bGwuICovXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBCb25lRGF0YSwgc2tlbGV0b246IFNrZWxldG9uLCBwYXJlbnQ6IEJvbmUgfCBudWxsKSB7XG5cdFx0aWYgKCFkYXRhKSB0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRpZiAoIXNrZWxldG9uKSB0aHJvdyBuZXcgRXJyb3IoXCJza2VsZXRvbiBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcblx0XHR0aGlzLnNrZWxldG9uID0gc2tlbGV0b247XG5cdFx0dGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG5cdFx0dGhpcy5zZXRUb1NldHVwUG9zZSgpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgYm9uZSBoYXMgbm90IGJlZW4gY29tcHV0ZWQgYmVjYXVzZSB7QGxpbmsgQm9uZURhdGEjc2tpblJlcXVpcmVkfSBpcyB0cnVlIGFuZCB0aGVcblx0ICAqIHtAbGluayBTa2VsZXRvbiNza2luIGFjdGl2ZSBza2lufSBkb2VzIG5vdCB7QGxpbmsgU2tpbiNib25lcyBjb250YWlufSB0aGlzIGJvbmUuICovXG5cdGlzQWN0aXZlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmU7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUgYW5kIHRoaXMgYm9uZSdzIGxvY2FsIGFwcGxpZWQgdHJhbnNmb3JtLiAqL1xuXHR1cGRhdGUgKHBoeXNpY3M6IFBoeXNpY3MpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkVHJhbnNmb3JtV2l0aCh0aGlzLmF4LCB0aGlzLmF5LCB0aGlzLmFyb3RhdGlvbiwgdGhpcy5hc2NhbGVYLCB0aGlzLmFzY2FsZVksIHRoaXMuYXNoZWFyWCwgdGhpcy5hc2hlYXJZKTtcblx0fVxuXG5cdC8qKiBDb21wdXRlcyB0aGUgd29ybGQgdHJhbnNmb3JtIHVzaW5nIHRoZSBwYXJlbnQgYm9uZSBhbmQgdGhpcyBib25lJ3MgbG9jYWwgdHJhbnNmb3JtLlxuXHQgKlxuXHQgKiBTZWUge0BsaW5rICN1cGRhdGVXb3JsZFRyYW5zZm9ybVdpdGgoKX0uICovXG5cdHVwZGF0ZVdvcmxkVHJhbnNmb3JtICgpIHtcblx0XHR0aGlzLnVwZGF0ZVdvcmxkVHJhbnNmb3JtV2l0aCh0aGlzLngsIHRoaXMueSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5zY2FsZVgsIHRoaXMuc2NhbGVZLCB0aGlzLnNoZWFyWCwgdGhpcy5zaGVhclkpO1xuXHR9XG5cblx0LyoqIENvbXB1dGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdXNpbmcgdGhlIHBhcmVudCBib25lIGFuZCB0aGUgc3BlY2lmaWVkIGxvY2FsIHRyYW5zZm9ybS4gVGhlIGFwcGxpZWQgdHJhbnNmb3JtIGlzIHNldCB0byB0aGVcblx0ICogc3BlY2lmaWVkIGxvY2FsIHRyYW5zZm9ybS4gQ2hpbGQgYm9uZXMgYXJlIG5vdCB1cGRhdGVkLlxuXHQgKlxuXHQgKiBTZWUgW1dvcmxkIHRyYW5zZm9ybXNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zKSBpbiB0aGUgU3BpbmVcblx0ICogUnVudGltZXMgR3VpZGUuICovXG5cdHVwZGF0ZVdvcmxkVHJhbnNmb3JtV2l0aCAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJvdGF0aW9uOiBudW1iZXIsIHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlciwgc2hlYXJYOiBudW1iZXIsIHNoZWFyWTogbnVtYmVyKSB7XG5cdFx0dGhpcy5heCA9IHg7XG5cdFx0dGhpcy5heSA9IHk7XG5cdFx0dGhpcy5hcm90YXRpb24gPSByb3RhdGlvbjtcblx0XHR0aGlzLmFzY2FsZVggPSBzY2FsZVg7XG5cdFx0dGhpcy5hc2NhbGVZID0gc2NhbGVZO1xuXHRcdHRoaXMuYXNoZWFyWCA9IHNoZWFyWDtcblx0XHR0aGlzLmFzaGVhclkgPSBzaGVhclk7XG5cblx0XHRsZXQgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0aWYgKCFwYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0bGV0IHNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcblx0XHRcdGNvbnN0IHN4ID0gc2tlbGV0b24uc2NhbGVYLCBzeSA9IHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRjb25zdCByeSA9IChyb3RhdGlvbiArIDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHR0aGlzLmEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVggKiBzeDtcblx0XHRcdHRoaXMuYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWSAqIHN4O1xuXHRcdFx0dGhpcy5jID0gTWF0aC5zaW4ocngpICogc2NhbGVYICogc3k7XG5cdFx0XHR0aGlzLmQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVkgKiBzeTtcblx0XHRcdHRoaXMud29ybGRYID0geCAqIHN4ICsgc2tlbGV0b24ueDtcblx0XHRcdHRoaXMud29ybGRZID0geSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcGEgPSBwYXJlbnQuYSwgcGIgPSBwYXJlbnQuYiwgcGMgPSBwYXJlbnQuYywgcGQgPSBwYXJlbnQuZDtcblx0XHR0aGlzLndvcmxkWCA9IHBhICogeCArIHBiICogeSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHggKyBwZCAqIHkgKyBwYXJlbnQud29ybGRZO1xuXG5cdFx0c3dpdGNoICh0aGlzLmluaGVyaXQpIHtcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob3JtYWw6IHtcblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyA5MCArIHNoZWFyWSkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gcGEgKiBsYSArIHBiICogbGM7XG5cdFx0XHRcdHRoaXMuYiA9IHBhICogbGIgKyBwYiAqIGxkO1xuXHRcdFx0XHR0aGlzLmMgPSBwYyAqIGxhICsgcGQgKiBsYztcblx0XHRcdFx0dGhpcy5kID0gcGMgKiBsYiArIHBkICogbGQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Pbmx5VHJhbnNsYXRpb246IHtcblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyA5MCArIHNoZWFyWSkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHR0aGlzLmEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdHRoaXMuYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5jID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHR0aGlzLmQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vUm90YXRpb25PclJlZmxlY3Rpb246IHtcblx0XHRcdFx0bGV0IHN4ID0gMSAvIHRoaXMuc2tlbGV0b24uc2NhbGVYLCBzeSA9IDEgLyB0aGlzLnNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0cGEgKj0gc3g7XG5cdFx0XHRcdHBjICo9IHN5O1xuXHRcdFx0XHRsZXQgcyA9IHBhICogcGEgKyBwYyAqIHBjO1xuXHRcdFx0XHRsZXQgcHJ4ID0gMDtcblx0XHRcdFx0aWYgKHMgPiAwLjAwMDEpIHtcblx0XHRcdFx0XHRzID0gTWF0aC5hYnMocGEgKiBwZCAqIHN5IC0gcGIgKiBzeCAqIHBjKSAvIHM7XG5cdFx0XHRcdFx0cGIgPSBwYyAqIHM7XG5cdFx0XHRcdFx0cGQgPSBwYSAqIHM7XG5cdFx0XHRcdFx0cHJ4ID0gTWF0aC5hdGFuMihwYywgcGEpICogTWF0aFV0aWxzLnJhZERlZztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYSA9IDA7XG5cdFx0XHRcdFx0cGMgPSAwO1xuXHRcdFx0XHRcdHByeCA9IDkwIC0gTWF0aC5hdGFuMihwZCwgcGIpICogTWF0aFV0aWxzLnJhZERlZztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByeCA9IChyb3RhdGlvbiArIHNoZWFyWCAtIHByeCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCByeSA9IChyb3RhdGlvbiArIHNoZWFyWSAtIHByeCArIDkwKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSBwYSAqIGxhIC0gcGIgKiBsYztcblx0XHRcdFx0dGhpcy5iID0gcGEgKiBsYiAtIHBiICogbGQ7XG5cdFx0XHRcdHRoaXMuYyA9IHBjICogbGEgKyBwZCAqIGxjO1xuXHRcdFx0XHR0aGlzLmQgPSBwYyAqIGxiICsgcGQgKiBsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdHJvdGF0aW9uICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKHJvdGF0aW9uKSwgc2luID0gTWF0aC5zaW4ocm90YXRpb24pO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyB0aGlzLnNrZWxldG9uLnNjYWxlWDtcblx0XHRcdFx0bGV0IHpjID0gKHBjICogY29zICsgcGQgKiBzaW4pIC8gdGhpcy5za2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdGxldCBzID0gTWF0aC5zcXJ0KHphICogemEgKyB6YyAqIHpjKTtcblx0XHRcdFx0aWYgKHMgPiAwLjAwMDAxKSBzID0gMSAvIHM7XG5cdFx0XHRcdHphICo9IHM7XG5cdFx0XHRcdHpjICo9IHM7XG5cdFx0XHRcdHMgPSBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHRpZiAodGhpcy5pbmhlcml0ID09IEluaGVyaXQuTm9TY2FsZVxuXHRcdFx0XHRcdCYmIChwYSAqIHBkIC0gcGIgKiBwYyA8IDApICE9ICh0aGlzLnNrZWxldG9uLnNjYWxlWCA8IDAgIT0gdGhpcy5za2VsZXRvbi5zY2FsZVkgPCAwKSkgcyA9IC1zO1xuXHRcdFx0XHRyb3RhdGlvbiA9IE1hdGguUEkgLyAyICsgTWF0aC5hdGFuMih6YywgemEpO1xuXHRcdFx0XHRjb25zdCB6YiA9IE1hdGguY29zKHJvdGF0aW9uKSAqIHM7XG5cdFx0XHRcdGNvbnN0IHpkID0gTWF0aC5zaW4ocm90YXRpb24pICogcztcblx0XHRcdFx0c2hlYXJYICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdHNoZWFyWSA9ICg5MCArIHNoZWFyWSkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHNoZWFyWCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3Moc2hlYXJZKSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihzaGVhclgpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHNoZWFyWSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHphICogbGEgKyB6YiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSB6YSAqIGxiICsgemIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gemMgKiBsYSArIHpkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHpjICogbGIgKyB6ZCAqIGxkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5hICo9IHRoaXMuc2tlbGV0b24uc2NhbGVYO1xuXHRcdHRoaXMuYiAqPSB0aGlzLnNrZWxldG9uLnNjYWxlWDtcblx0XHR0aGlzLmMgKj0gdGhpcy5za2VsZXRvbi5zY2FsZVk7XG5cdFx0dGhpcy5kICo9IHRoaXMuc2tlbGV0b24uc2NhbGVZO1xuXHR9XG5cblx0LyoqIFNldHMgdGhpcyBib25lJ3MgbG9jYWwgdHJhbnNmb3JtIHRvIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHRzZXRUb1NldHVwUG9zZSAoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmRhdGE7XG5cdFx0dGhpcy54ID0gZGF0YS54O1xuXHRcdHRoaXMueSA9IGRhdGEueTtcblx0XHR0aGlzLnJvdGF0aW9uID0gZGF0YS5yb3RhdGlvbjtcblx0XHR0aGlzLnNjYWxlWCA9IGRhdGEuc2NhbGVYO1xuXHRcdHRoaXMuc2NhbGVZID0gZGF0YS5zY2FsZVk7XG5cdFx0dGhpcy5zaGVhclggPSBkYXRhLnNoZWFyWDtcblx0XHR0aGlzLnNoZWFyWSA9IGRhdGEuc2hlYXJZO1xuXHRcdHRoaXMuaW5oZXJpdCA9IGRhdGEuaW5oZXJpdDtcblx0fVxuXG5cdC8qKiBDb21wdXRlcyB0aGUgYXBwbGllZCB0cmFuc2Zvcm0gdmFsdWVzIGZyb20gdGhlIHdvcmxkIHRyYW5zZm9ybS5cblx0ICpcblx0ICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBtb2RpZmllZCAoYnkgYSBjb25zdHJhaW50LCB7QGxpbmsgI3JvdGF0ZVdvcmxkKGZsb2F0KX0sIGV0YykgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHNvXG5cdCAqIHRoZSBhcHBsaWVkIHRyYW5zZm9ybSBtYXRjaGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0uIFRoZSBhcHBsaWVkIHRyYW5zZm9ybSBtYXkgYmUgbmVlZGVkIGJ5IG90aGVyIGNvZGUgKGVnIHRvIGFwcGx5IG90aGVyXG5cdCAqIGNvbnN0cmFpbnRzKS5cblx0ICpcblx0ICogU29tZSBpbmZvcm1hdGlvbiBpcyBhbWJpZ3VvdXMgaW4gdGhlIHdvcmxkIHRyYW5zZm9ybSwgc3VjaCBhcyAtMSwtMSBzY2FsZSB2ZXJzdXMgMTgwIHJvdGF0aW9uLiBUaGUgYXBwbGllZCB0cmFuc2Zvcm0gYWZ0ZXJcblx0ICogY2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBsb2NhbCB0cmFuc2Zvcm0gdXNlZCB0byBjb21wdXRlIHRoZSB3b3JsZCB0cmFuc2Zvcm0sIGJ1dCBtYXkgbm90IGJlIGlkZW50aWNhbC4gKi9cblx0dXBkYXRlQXBwbGllZFRyYW5zZm9ybSAoKSB7XG5cdFx0bGV0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGlmICghcGFyZW50KSB7XG5cdFx0XHR0aGlzLmF4ID0gdGhpcy53b3JsZFggLSB0aGlzLnNrZWxldG9uLng7XG5cdFx0XHR0aGlzLmF5ID0gdGhpcy53b3JsZFkgLSB0aGlzLnNrZWxldG9uLnk7XG5cdFx0XHR0aGlzLmFyb3RhdGlvbiA9IE1hdGguYXRhbjIodGhpcy5jLCB0aGlzLmEpICogTWF0aFV0aWxzLnJhZERlZztcblx0XHRcdHRoaXMuYXNjYWxlWCA9IE1hdGguc3FydCh0aGlzLmEgKiB0aGlzLmEgKyB0aGlzLmMgKiB0aGlzLmMpO1xuXHRcdFx0dGhpcy5hc2NhbGVZID0gTWF0aC5zcXJ0KHRoaXMuYiAqIHRoaXMuYiArIHRoaXMuZCAqIHRoaXMuZCk7XG5cdFx0XHR0aGlzLmFzaGVhclggPSAwO1xuXHRcdFx0dGhpcy5hc2hlYXJZID0gTWF0aC5hdGFuMih0aGlzLmEgKiB0aGlzLmIgKyB0aGlzLmMgKiB0aGlzLmQsIHRoaXMuYSAqIHRoaXMuZCAtIHRoaXMuYiAqIHRoaXMuYykgKiBNYXRoVXRpbHMucmFkRGVnO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgcGEgPSBwYXJlbnQuYSwgcGIgPSBwYXJlbnQuYiwgcGMgPSBwYXJlbnQuYywgcGQgPSBwYXJlbnQuZDtcblx0XHRsZXQgcGlkID0gMSAvIChwYSAqIHBkIC0gcGIgKiBwYyk7XG5cdFx0bGV0IGlhID0gcGQgKiBwaWQsIGliID0gcGIgKiBwaWQsIGljID0gcGMgKiBwaWQsIGlkID0gcGEgKiBwaWQ7XG5cdFx0bGV0IGR4ID0gdGhpcy53b3JsZFggLSBwYXJlbnQud29ybGRYLCBkeSA9IHRoaXMud29ybGRZIC0gcGFyZW50LndvcmxkWTtcblx0XHR0aGlzLmF4ID0gKGR4ICogaWEgLSBkeSAqIGliKTtcblx0XHR0aGlzLmF5ID0gKGR5ICogaWQgLSBkeCAqIGljKTtcblxuXHRcdGxldCByYSwgcmIsIHJjLCByZDtcblx0XHRpZiAodGhpcy5pbmhlcml0ID09IEluaGVyaXQuT25seVRyYW5zbGF0aW9uKSB7XG5cdFx0XHRyYSA9IHRoaXMuYTtcblx0XHRcdHJiID0gdGhpcy5iO1xuXHRcdFx0cmMgPSB0aGlzLmM7XG5cdFx0XHRyZCA9IHRoaXMuZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoICh0aGlzLmluaGVyaXQpIHtcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vUm90YXRpb25PclJlZmxlY3Rpb246IHtcblx0XHRcdFx0XHRsZXQgcyA9IE1hdGguYWJzKHBhICogcGQgLSBwYiAqIHBjKSAvIChwYSAqIHBhICsgcGMgKiBwYyk7XG5cdFx0XHRcdFx0cGIgPSAtcGMgKiB0aGlzLnNrZWxldG9uLnNjYWxlWCAqIHMgLyB0aGlzLnNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0XHRwZCA9IHBhICogdGhpcy5za2VsZXRvbi5zY2FsZVkgKiBzIC8gdGhpcy5za2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdFx0cGlkID0gMSAvIChwYSAqIHBkIC0gcGIgKiBwYyk7XG5cdFx0XHRcdFx0aWEgPSBwZCAqIHBpZDtcblx0XHRcdFx0XHRpYiA9IHBiICogcGlkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlOlxuXHRcdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZU9yUmVmbGVjdGlvbjpcblx0XHRcdFx0XHRsZXQgY29zID0gTWF0aFV0aWxzLmNvc0RlZyh0aGlzLnJvdGF0aW9uKSwgc2luID0gTWF0aFV0aWxzLnNpbkRlZyh0aGlzLnJvdGF0aW9uKTtcblx0XHRcdFx0XHRwYSA9IChwYSAqIGNvcyArIHBiICogc2luKSAvIHRoaXMuc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRcdHBjID0gKHBjICogY29zICsgcGQgKiBzaW4pIC8gdGhpcy5za2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQocGEgKiBwYSArIHBjICogcGMpO1xuXHRcdFx0XHRcdGlmIChzID4gMC4wMDAwMSkgcyA9IDEgLyBzO1xuXHRcdFx0XHRcdHBhICo9IHM7XG5cdFx0XHRcdFx0cGMgKj0gcztcblx0XHRcdFx0XHRzID0gTWF0aC5zcXJ0KHBhICogcGEgKyBwYyAqIHBjKTtcblx0XHRcdFx0XHRpZiAodGhpcy5pbmhlcml0ID09IEluaGVyaXQuTm9TY2FsZSAmJiBwaWQgPCAwICE9ICh0aGlzLnNrZWxldG9uLnNjYWxlWCA8IDAgIT0gdGhpcy5za2VsZXRvbi5zY2FsZVkgPCAwKSkgcyA9IC1zO1xuXHRcdFx0XHRcdGxldCByID0gTWF0aFV0aWxzLlBJIC8gMiArIE1hdGguYXRhbjIocGMsIHBhKTtcblx0XHRcdFx0XHRwYiA9IE1hdGguY29zKHIpICogcztcblx0XHRcdFx0XHRwZCA9IE1hdGguc2luKHIpICogcztcblx0XHRcdFx0XHRwaWQgPSAxIC8gKHBhICogcGQgLSBwYiAqIHBjKTtcblx0XHRcdFx0XHRpYSA9IHBkICogcGlkO1xuXHRcdFx0XHRcdGliID0gcGIgKiBwaWQ7XG5cdFx0XHRcdFx0aWMgPSBwYyAqIHBpZDtcblx0XHRcdFx0XHRpZCA9IHBhICogcGlkO1xuXHRcdFx0fVxuXHRcdFx0cmEgPSBpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jO1xuXHRcdFx0cmIgPSBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kO1xuXHRcdFx0cmMgPSBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hO1xuXHRcdFx0cmQgPSBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iO1xuXHRcdH1cblxuXHRcdHRoaXMuYXNoZWFyWCA9IDA7XG5cdFx0dGhpcy5hc2NhbGVYID0gTWF0aC5zcXJ0KHJhICogcmEgKyByYyAqIHJjKTtcblx0XHRpZiAodGhpcy5hc2NhbGVYID4gMC4wMDAxKSB7XG5cdFx0XHRsZXQgZGV0ID0gcmEgKiByZCAtIHJiICogcmM7XG5cdFx0XHR0aGlzLmFzY2FsZVkgPSBkZXQgLyB0aGlzLmFzY2FsZVg7XG5cdFx0XHR0aGlzLmFzaGVhclkgPSAtTWF0aC5hdGFuMihyYSAqIHJiICsgcmMgKiByZCwgZGV0KSAqIE1hdGhVdGlscy5yYWREZWc7XG5cdFx0XHR0aGlzLmFyb3RhdGlvbiA9IE1hdGguYXRhbjIocmMsIHJhKSAqIE1hdGhVdGlscy5yYWREZWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYXNjYWxlWCA9IDA7XG5cdFx0XHR0aGlzLmFzY2FsZVkgPSBNYXRoLnNxcnQocmIgKiByYiArIHJkICogcmQpO1xuXHRcdFx0dGhpcy5hc2hlYXJZID0gMDtcblx0XHRcdHRoaXMuYXJvdGF0aW9uID0gOTAgLSBNYXRoLmF0YW4yKHJkLCByYikgKiBNYXRoVXRpbHMucmFkRGVnO1xuXHRcdH1cblx0fVxuXG5cblx0LyoqIFRoZSB3b3JsZCByb3RhdGlvbiBmb3IgdGhlIFggYXhpcywgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgI2F9IGFuZCB7QGxpbmsgI2N9LiAqL1xuXHRnZXRXb3JsZFJvdGF0aW9uWCAoKSB7XG5cdFx0cmV0dXJuIE1hdGguYXRhbjIodGhpcy5jLCB0aGlzLmEpICogTWF0aFV0aWxzLnJhZERlZztcblx0fVxuXG5cdC8qKiBUaGUgd29ybGQgcm90YXRpb24gZm9yIHRoZSBZIGF4aXMsIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rICNifSBhbmQge0BsaW5rICNkfS4gKi9cblx0Z2V0V29ybGRSb3RhdGlvblkgKCkge1xuXHRcdHJldHVybiBNYXRoLmF0YW4yKHRoaXMuZCwgdGhpcy5iKSAqIE1hdGhVdGlscy5yYWREZWc7XG5cdH1cblxuXHQvKiogVGhlIG1hZ25pdHVkZSAoYWx3YXlzIHBvc2l0aXZlKSBvZiB0aGUgd29ybGQgc2NhbGUgWCwgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgI2F9IGFuZCB7QGxpbmsgI2N9LiAqL1xuXHRnZXRXb3JsZFNjYWxlWCAoKSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmEgKiB0aGlzLmEgKyB0aGlzLmMgKiB0aGlzLmMpO1xuXHR9XG5cblx0LyoqIFRoZSBtYWduaXR1ZGUgKGFsd2F5cyBwb3NpdGl2ZSkgb2YgdGhlIHdvcmxkIHNjYWxlIFksIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rICNifSBhbmQge0BsaW5rICNkfS4gKi9cblx0Z2V0V29ybGRTY2FsZVkgKCkge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy5iICogdGhpcy5iICsgdGhpcy5kICogdGhpcy5kKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB3b3JsZCBjb29yZGluYXRlcyB0byB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGVzLiAqL1xuXHR3b3JsZFRvTG9jYWwgKHdvcmxkOiBWZWN0b3IyKSB7XG5cdFx0bGV0IGludkRldCA9IDEgLyAodGhpcy5hICogdGhpcy5kIC0gdGhpcy5iICogdGhpcy5jKTtcblx0XHRsZXQgeCA9IHdvcmxkLnggLSB0aGlzLndvcmxkWCwgeSA9IHdvcmxkLnkgLSB0aGlzLndvcmxkWTtcblx0XHR3b3JsZC54ID0geCAqIHRoaXMuZCAqIGludkRldCAtIHkgKiB0aGlzLmIgKiBpbnZEZXQ7XG5cdFx0d29ybGQueSA9IHkgKiB0aGlzLmEgKiBpbnZEZXQgLSB4ICogdGhpcy5jICogaW52RGV0O1xuXHRcdHJldHVybiB3b3JsZDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRsb2NhbFRvV29ybGQgKGxvY2FsOiBWZWN0b3IyKSB7XG5cdFx0bGV0IHggPSBsb2NhbC54LCB5ID0gbG9jYWwueTtcblx0XHRsb2NhbC54ID0geCAqIHRoaXMuYSArIHkgKiB0aGlzLmIgKyB0aGlzLndvcmxkWDtcblx0XHRsb2NhbC55ID0geCAqIHRoaXMuYyArIHkgKiB0aGlzLmQgKyB0aGlzLndvcmxkWTtcblx0XHRyZXR1cm4gbG9jYWw7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIHBhcmVudCBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZXMuICovXG5cdHdvcmxkVG9QYXJlbnQgKHdvcmxkOiBWZWN0b3IyKSB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5wYXJlbnQud29ybGRUb0xvY2FsKHdvcmxkKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB0aGUgcGFyZW50IGJvbmUncyBjb29yZGluYXRlcyB0byB3b3JsZCBjb29yZGluYXRlcy4gKi9cblx0cGFyZW50VG9Xb3JsZCAod29ybGQ6IFZlY3RvcjIpIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHJldHVybiB0aGlzLnBhcmVudCA9PSBudWxsID8gd29ybGQgOiB0aGlzLnBhcmVudC5sb2NhbFRvV29ybGQod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSB3b3JsZCByb3RhdGlvbiB0byBhIGxvY2FsIHJvdGF0aW9uLiAqL1xuXHR3b3JsZFRvTG9jYWxSb3RhdGlvbiAod29ybGRSb3RhdGlvbjogbnVtYmVyKSB7XG5cdFx0bGV0IHNpbiA9IE1hdGhVdGlscy5zaW5EZWcod29ybGRSb3RhdGlvbiksIGNvcyA9IE1hdGhVdGlscy5jb3NEZWcod29ybGRSb3RhdGlvbik7XG5cdFx0cmV0dXJuIE1hdGguYXRhbjIodGhpcy5hICogc2luIC0gdGhpcy5jICogY29zLCB0aGlzLmQgKiBjb3MgLSB0aGlzLmIgKiBzaW4pICogTWF0aFV0aWxzLnJhZERlZyArIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgbG9jYWwgcm90YXRpb24gdG8gYSB3b3JsZCByb3RhdGlvbi4gKi9cblx0bG9jYWxUb1dvcmxkUm90YXRpb24gKGxvY2FsUm90YXRpb246IG51bWJlcikge1xuXHRcdGxvY2FsUm90YXRpb24gLT0gdGhpcy5yb3RhdGlvbiAtIHRoaXMuc2hlYXJYO1xuXHRcdGxldCBzaW4gPSBNYXRoVXRpbHMuc2luRGVnKGxvY2FsUm90YXRpb24pLCBjb3MgPSBNYXRoVXRpbHMuY29zRGVnKGxvY2FsUm90YXRpb24pO1xuXHRcdHJldHVybiBNYXRoLmF0YW4yKGNvcyAqIHRoaXMuYyArIHNpbiAqIHRoaXMuZCwgY29zICogdGhpcy5hICsgc2luICogdGhpcy5iKSAqIE1hdGhVdGlscy5yYWREZWc7XG5cdH1cblxuXHQvKiogUm90YXRlcyB0aGUgd29ybGQgdHJhbnNmb3JtIHRoZSBzcGVjaWZpZWQgYW1vdW50LlxuXHQgKiA8cD5cblx0ICogQWZ0ZXIgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgd29ybGQgdHJhbnNmb3JtLCB7QGxpbmsgI3VwZGF0ZUFwcGxpZWRUcmFuc2Zvcm0oKX0gc2hvdWxkIGJlIGNhbGxlZCBhbmRcblx0ICoge0BsaW5rICN1cGRhdGUoUGh5c2ljcyl9IHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgb24gYW55IGNoaWxkIGJvbmVzLCByZWN1cnNpdmVseS4gKi9cblx0cm90YXRlV29ybGQgKGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGRlZ3JlZXMgKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbihkZWdyZWVzKSwgY29zID0gTWF0aC5jb3MoZGVncmVlcyk7XG5cdFx0Y29uc3QgcmEgPSB0aGlzLmEsIHJiID0gdGhpcy5iO1xuXHRcdHRoaXMuYSA9IGNvcyAqIHJhIC0gc2luICogdGhpcy5jO1xuXHRcdHRoaXMuYiA9IGNvcyAqIHJiIC0gc2luICogdGhpcy5kO1xuXHRcdHRoaXMuYyA9IHNpbiAqIHJhICsgY29zICogdGhpcy5jO1xuXHRcdHRoaXMuZCA9IHNpbiAqIHJiICsgY29zICogdGhpcy5kO1xuXHR9XG59XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUcvQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLElBQUssU0FBUSxXQUErQjtJQUN4RCx5REFBeUQ7SUFDekQsTUFBTSxHQUFnQixJQUFJLENBQUM7SUFFM0IsMkNBQTJDO0lBQzNDLFFBQVEsR0FBRyxFQUFZLENBQUM7SUFFeEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmLFlBQWEsSUFBYyxFQUFFLE1BQW1CO1FBQy9DLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLElBQUksQ0FBRSxNQUFtQjtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBCb25lRGF0YSB9IGZyb20gXCIuL0JvbmVEYXRhLmpzXCI7XG5pbXBvcnQgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgeyBQb3NlZEFjdGl2ZSB9IGZyb20gXCIuL1Bvc2VkQWN0aXZlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uIH0gZnJvbSBcIi4vU2tlbGV0b24uanNcIjtcblxuLyoqIEEgbm9kZSBpbiBhIHNrZWxldG9uJ3MgaGllcmFyY2h5IHdpdGggYSB0cmFuc2Zvcm0gdGhhdCBhZmZlY3RzIGl0cyBjaGlsZHJlbiBhbmQgdGhlaXIgYXR0YWNobWVudHMuIEEgYm9uZSBoYXMgYSBudW1iZXIgb2ZcbiAqIHBvc2VzOlxuICogLSB7QGxpbmsgZGF0YX06IFRoZSBzZXR1cCBwb3NlLlxuICogLSB7QGxpbmsgcG9zZX06IFRoZSB1bmNvbnN0cmFpbmVkIGxvY2FsIHBvc2UuIFNldCBieSBhbmltYXRpb25zIGFuZCBhcHBsaWNhdGlvbiBjb2RlLlxuICogLSB7QGxpbmsgYXBwbGllZFBvc2V9OiBUaGUgbG9jYWwgcG9zZSB0byB1c2UgZm9yIHJlbmRlcmluZy4gUG9zc2libHkgbW9kaWZpZWQgYnkgY29uc3RyYWludHMuXG4gKiAtIFdvcmxkIHRyYW5zZm9ybTogdGhlIGxvY2FsIHBvc2UgY29tYmluZWQgd2l0aCB0aGUgcGFyZW50IHdvcmxkIHRyYW5zZm9ybS4gQ29tcHV0ZWQgb24gYSBwb3NlIGJ5XG4gKiB7QGxpbmsgQm9uZVBvc2UudXBkYXRlV29ybGRUcmFuc2Zvcm19IGFuZCB7QGxpbmsgU2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm19LlxuICovXG5leHBvcnQgY2xhc3MgQm9uZSBleHRlbmRzIFBvc2VkQWN0aXZlPEJvbmVEYXRhLCBCb25lUG9zZT4ge1xuXHQvKiogVGhlIHBhcmVudCBib25lLCBvciBudWxsIGlmIHRoaXMgaXMgdGhlIHJvb3QgYm9uZS4gKi9cblx0cGFyZW50OiBCb25lIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhpcyBib25lLiAqL1xuXHRjaGlsZHJlbiA9IFtdIGFzIEJvbmVbXTtcblxuXHRzb3J0ZWQgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoZGF0YTogQm9uZURhdGEsIHBhcmVudDogQm9uZSB8IG51bGwpIHtcblx0XHRzdXBlcihkYXRhLCBuZXcgQm9uZVBvc2UoKSwgbmV3IEJvbmVQb3NlKCkpO1xuXHRcdHRoaXMucGFyZW50ID0gcGFyZW50O1xuXHRcdHRoaXMuYXBwbGllZFBvc2UuYm9uZSA9IHRoaXM7XG5cdFx0dGhpcy5jb25zdHJhaW5lZFBvc2UuYm9uZSA9IHRoaXM7XG5cdH1cblxuXHQvKiogQ29weSBjb25zdHJ1Y3Rvci4gRG9lcyBub3QgY29weSB0aGUge0BsaW5rIGNoaWxkcmVufSBib25lcy4gKi9cblx0Y29weSAocGFyZW50OiBCb25lIHwgbnVsbCk6IEJvbmUge1xuXHRcdGNvbnN0IGNvcHkgPSBuZXcgQm9uZSh0aGlzLmRhdGEsIHBhcmVudCk7XG5cdFx0Y29weS5wb3NlLnNldCh0aGlzLnBvc2UpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG5cbn1cbiJdfQ==
@@ -26,45 +26,30 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
+ import { BonePose } from "./BonePose.js";
30
+ import { PosedData } from "./PosedData.js";
29
31
  import { Color } from "./Utils.js";
30
- /** Stores the setup pose for a {@link Bone}. */
31
- export declare class BoneData {
32
- /** The index of the bone in {@link Skeleton#getBones()}. */
32
+ /** The setup pose for a bone. */
33
+ export declare class BoneData extends PosedData<BonePose> {
34
+ /** The index of the bone in {@link Skeleton.bones}. */
33
35
  index: number;
34
- /** The name of the bone, which is unique across all bones in the skeleton. */
35
- name: string;
36
- /** @returns May be null. */
36
+ /** The parent bone, or null if this bone is the root. */
37
37
  parent: BoneData | null;
38
38
  /** The bone's length. */
39
39
  length: number;
40
- /** The local x translation. */
41
- x: number;
42
- /** The local y translation. */
43
- y: number;
44
- /** The local rotation in degrees, counter clockwise. */
45
- rotation: number;
46
- /** The local scaleX. */
47
- scaleX: number;
48
- /** The local scaleY. */
49
- scaleY: number;
50
- /** The local shearX. */
51
- shearX: number;
52
- /** The local shearX. */
53
- shearY: number;
54
- /** The transform mode for how parent world transforms affect this bone. */
55
- inherit: Inherit;
56
- /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this
57
- * bone.
58
- * @see Skin#bones */
59
- skinRequired: boolean;
60
40
  /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually
61
41
  * rendered at runtime. */
62
- color: Color;
63
- /** The bone icon as it was in Spine, or null if nonessential data was not exported. */
42
+ readonly color: Color;
43
+ /** The bone icon name as it was in Spine, or null if nonessential data was not exported. */
64
44
  icon?: string;
45
+ /** The bone icon's display size scale, or 1 if nonessential data was not exported. */
46
+ iconSize: number;
47
+ /** The bone icon's display rotation in degrees, or 0 if nonessential data was not exported. */
48
+ iconRotation: number;
65
49
  /** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */
66
50
  visible: boolean;
67
51
  constructor(index: number, name: string, parent: BoneData | null);
52
+ copy(parent: BoneData | null): BoneData;
68
53
  }
69
54
  /** Determines how a bone inherits world transforms from parent bones. */
70
55
  export declare enum Inherit {