{
  "version": 3,
  "sources": ["../../src/Utils.ts", "../../src/Texture.ts", "../../src/TextureAtlas.ts", "../../src/attachments/Attachment.ts", "../../src/attachments/MeshAttachment.ts", "../../src/attachments/RegionAttachment.ts", "../../src/attachments/Sequence.ts", "../../src/Animation.ts", "../../src/AnimationState.ts", "../../src/AnimationStateData.ts", "../../src/AssetManagerBase.ts", "../../src/attachments/BoundingBoxAttachment.ts", "../../src/attachments/ClippingAttachment.ts", "../../src/attachments/PathAttachment.ts", "../../src/attachments/PointAttachment.ts", "../../src/AtlasAttachmentLoader.ts", "../../src/PosedData.ts", "../../src/BoneData.ts", "../../src/BonePose.ts", "../../src/Posed.ts", "../../src/PosedActive.ts", "../../src/Bone.ts", "../../src/Constraint.ts", "../../src/DrawOrder.ts", "../../src/ConstraintData.ts", "../../src/Event.ts", "../../src/EventData.ts", "../../src/IkConstraintPose.ts", "../../src/IkConstraint.ts", "../../src/IkConstraintData.ts", "../../src/PathConstraintPose.ts", "../../src/PathConstraintData.ts", "../../src/PathConstraint.ts", "../../src/Physics.ts", "../../src/PhysicsConstraintPose.ts", "../../src/SlotPose.ts", "../../src/Slot.ts", "../../src/Skeleton.ts", "../../src/PhysicsConstraint.ts", "../../src/PhysicsConstraintData.ts", "../../src/polyfills.ts", "../../src/SliderPose.ts", "../../src/Slider.ts", "../../src/SliderData.ts", "../../src/SkeletonData.ts", "../../src/Skin.ts", "../../src/SlotData.ts", "../../src/TransformConstraintPose.ts", "../../src/TransformConstraint.ts", "../../src/TransformConstraintData.ts", "../../src/SkeletonBinary.ts", "../../src/SkeletonBounds.ts", "../../src/Triangulator.ts", "../../src/SkeletonClipping.ts", "../../src/SkeletonJson.ts", "../../src/SkeletonRendererCore.ts"],
  "sourcesContent": ["/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\n/** biome-ignore-all lint/complexity/noStaticOnlyClass: too much things to update */\n\nimport type { Skeleton } from \"./Skeleton.js\";\n\nexport interface StringMap<T> {\n\t[key: string]: T;\n}\n\nexport class IntSet {\n\tarray = [] as (number | undefined)[];\n\n\tadd (value: number): boolean {\n\t\tconst contains = this.contains(value);\n\t\tthis.array[value | 0] = value | 0;\n\t\treturn !contains;\n\t}\n\n\tcontains (value: number) {\n\t\treturn this.array[value | 0] !== undefined;\n\t}\n\n\tremove (value: number) {\n\t\tthis.array[value | 0] = undefined;\n\t}\n\n\tclear () {\n\t\tthis.array.length = 0;\n\t}\n}\n\nexport class StringSet {\n\tentries: StringMap<boolean> = {};\n\tsize = 0;\n\n\tadd (value: string): boolean {\n\t\tconst contains = this.entries[value];\n\t\tthis.entries[value] = true;\n\t\tif (!contains) {\n\t\t\tthis.size++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\taddAll (values: string[]): boolean {\n\t\tconst oldSize = this.size;\n\t\tfor (let i = 0, n = values.length; i < n; i++)\n\t\t\tthis.add(values[i]);\n\t\treturn oldSize !== this.size;\n\t}\n\n\tcontains (value: string) {\n\t\treturn this.entries[value];\n\t}\n\n\tclear () {\n\t\tthis.entries = {};\n\t\tthis.size = 0;\n\t}\n}\n\nexport type NumberArrayLike = Array<number> | Float32Array;\nexport type IntArrayLike = Array<number> | Int16Array;\n\nexport interface Disposable {\n\tdispose (): void;\n}\n\nexport interface Restorable {\n\trestore (): void;\n}\n\nexport class Color {\n\tpublic static WHITE = new Color(1, 1, 1, 1);\n\tpublic static RED = new Color(1, 0, 0, 1);\n\tpublic static GREEN = new Color(0, 1, 0, 1);\n\tpublic static BLUE = new Color(0, 0, 1, 1);\n\tpublic static MAGENTA = new Color(1, 0, 1, 1);\n\n\tconstructor (public r: number = 0, public g: number = 0, public b: number = 0, public a: number = 0) {\n\t}\n\n\tset (r: number, g: number, b: number, a: number) {\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\t\tthis.a = a;\n\t\treturn this.clamp();\n\t}\n\n\tsetFromColor (c: Color) {\n\t\tthis.r = c.r;\n\t\tthis.g = c.g;\n\t\tthis.b = c.b;\n\t\tthis.a = c.a;\n\t\treturn this;\n\t}\n\n\tsetFromString (hex: string) {\n\t\thex = hex.charAt(0) === '#' ? hex.substr(1) : hex;\n\t\tthis.r = parseInt(hex.substr(0, 2), 16) / 255;\n\t\tthis.g = parseInt(hex.substr(2, 2), 16) / 255;\n\t\tthis.b = parseInt(hex.substr(4, 2), 16) / 255;\n\t\tthis.a = hex.length !== 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n\t\treturn this;\n\t}\n\n\tadd (r: number, g: number, b: number, a: number) {\n\t\tthis.r += r;\n\t\tthis.g += g;\n\t\tthis.b += b;\n\t\tthis.a += a;\n\t\treturn this.clamp();\n\t}\n\n\tclamp () {\n\t\tif (this.r < 0) this.r = 0;\n\t\telse if (this.r > 1) this.r = 1;\n\n\t\tif (this.g < 0) this.g = 0;\n\t\telse if (this.g > 1) this.g = 1;\n\n\t\tif (this.b < 0) this.b = 0;\n\t\telse if (this.b > 1) this.b = 1;\n\n\t\tif (this.a < 0) this.a = 0;\n\t\telse if (this.a > 1) this.a = 1;\n\t\treturn this;\n\t}\n\n\tstatic rgba8888ToColor (color: Color, value: number) {\n\t\tcolor.r = ((value & 0xff000000) >>> 24) / 255;\n\t\tcolor.g = ((value & 0x00ff0000) >>> 16) / 255;\n\t\tcolor.b = ((value & 0x0000ff00) >>> 8) / 255;\n\t\tcolor.a = ((value & 0x000000ff)) / 255;\n\t}\n\n\tstatic rgb888ToColor (color: Color, value: number) {\n\t\tcolor.r = ((value & 0x00ff0000) >>> 16) / 255;\n\t\tcolor.g = ((value & 0x0000ff00) >>> 8) / 255;\n\t\tcolor.b = ((value & 0x000000ff)) / 255;\n\t}\n\n\ttoRgb888 () {\n\t\tconst hex = (x: number) => (`0${(x * 255).toString(16)}`).slice(-2);\n\t\treturn Number(`0x${hex(this.r)}${hex(this.g)}${hex(this.b)}`);\n\t}\n\n\tstatic fromString (hex: string, color = new Color()): Color {\n\t\treturn color.setFromString(hex);\n\t}\n}\n\nexport class MathUtils {\n\tstatic epsilon = 0.00001;\n\tstatic epsilon2 = MathUtils.epsilon * MathUtils.epsilon;\n\t// biome-ignore lint/suspicious/noApproximativeNumericConstant: reference runtime\n\tstatic PI = 3.1415927;\n\tstatic PI2 = MathUtils.PI * 2;\n\tstatic invPI2 = 1 / MathUtils.PI2;\n\tstatic radiansToDegrees = 180 / MathUtils.PI;\n\tstatic radDeg = MathUtils.radiansToDegrees;\n\tstatic degreesToRadians = MathUtils.PI / 180;\n\tstatic degRad = MathUtils.degreesToRadians;\n\n\tstatic clamp (value: number, min: number, max: number) {\n\t\tif (value < min) return min;\n\t\tif (value > max) return max;\n\t\treturn value;\n\t}\n\n\tstatic cosDeg (degrees: number) {\n\t\treturn Math.cos(degrees * MathUtils.degRad);\n\t}\n\n\tstatic sinDeg (degrees: number) {\n\t\treturn Math.sin(degrees * MathUtils.degRad);\n\t}\n\n\tstatic atan2Deg (y: number, x: number) {\n\t\treturn Math.atan2(y, x) * MathUtils.radDeg;\n\t}\n\n\tstatic signum (value: number): number {\n\t\treturn value > 0 ? 1 : value < 0 ? -1 : 0;\n\t}\n\n\tstatic toInt (x: number) {\n\t\treturn x > 0 ? Math.floor(x) : Math.ceil(x);\n\t}\n\n\tstatic cbrt (x: number) {\n\t\tconst y = Math.pow(Math.abs(x), 1 / 3);\n\t\treturn x < 0 ? -y : y;\n\t}\n\n\tstatic randomTriangular (min: number, max: number): number {\n\t\treturn MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n\t}\n\n\tstatic randomTriangularWith (min: number, max: number, mode: number): number {\n\t\tconst u = Math.random();\n\t\tconst d = max - min;\n\t\tif (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min));\n\t\treturn max - Math.sqrt((1 - u) * d * (max - mode));\n\t}\n\n\tstatic isPowerOfTwo (value: number) {\n\t\treturn value && (value & (value - 1)) === 0;\n\t}\n}\n\nexport abstract class Interpolation {\n\tstatic readonly linear: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a;\n\t\t}\n\t}();\n\n\t/** Aka \"smoothstep\". */\n\tstatic readonly smooth: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a * a * (3 - 2 * a);\n\t\t}\n\t}();\n\n\t/** Slow, then fast. */\n\tstatic readonly slowFast: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a * a;\n\t\t}\n\t}();\n\n\t/** Fast, then slow. */\n\tstatic readonly fastSlow: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn (a - 1) * (a - 1) * -1 + 1;\n\t\t}\n\t}();\n\n\tstatic readonly circle: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\tif (a <= 0.5) {\n\t\t\t\ta *= 2;\n\t\t\t\treturn (1 - Math.sqrt(1 - a * a)) / 2;\n\t\t\t}\n\t\t\ta--;\n\t\t\ta *= 2;\n\t\t\treturn (Math.sqrt(1 - a * a) + 1) / 2;\n\t\t}\n\t}();\n\n\tprotected abstract applyInternal (a: number): number;\n\n\tapply (a: number): number;\n\tapply (start: number, end: number, a: number): number;\n\tapply (start: number, end?: number, a?: number): number {\n\t\tif (end === undefined || a === undefined) return this.applyInternal(start);\n\t\treturn start + (end - start) * this.applyInternal(a);\n\t}\n}\n\nexport class Pow extends Interpolation {\n\tprotected power = 2;\n\n\tconstructor (power: number) {\n\t\tsuper();\n\t\tthis.power = power;\n\t}\n\n\tapplyInternal (a: number): number {\n\t\tif (a <= 0.5) return Math.pow(a * 2, this.power) / 2;\n\t\treturn Math.pow((a - 1) * 2, this.power) / (this.power % 2 === 0 ? -2 : 2) + 1;\n\t}\n}\n\nexport class PowOut extends Pow {\n\tconstructor (power: number) {\n\t\tsuper(power);\n\t}\n\n\tapplyInternal (a: number): number {\n\t\treturn Math.pow(a - 1, this.power) * (this.power % 2 === 0 ? -1 : 1) + 1;\n\t}\n}\n\nexport class Utils {\n\tstatic SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n\n\tstatic arrayCopy<T> (source: ArrayLike<T>, sourceStart: number, dest: ArrayLike<T>, destStart: number, numElements: number) {\n\t\tfor (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n\t\t\tdest[j] = source[i];\n\t\t}\n\t}\n\n\tstatic arrayFill<T> (array: ArrayLike<T>, fromIndex: number, toIndex: number, value: T) {\n\t\tfor (let i = fromIndex; i < toIndex; i++)\n\t\t\tarray[i] = value;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\n\tstatic setArraySize<T> (array: Array<T>, size: number, value: any = 0): Array<T> {\n\t\tconst oldSize = array.length;\n\t\tif (oldSize === size) return array;\n\t\tarray.length = size;\n\t\tif (oldSize < size) {\n\t\t\tfor (let i = oldSize; i < size; i++) array[i] = value;\n\t\t}\n\t\treturn array;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\n\tstatic ensureArrayCapacity<T> (array: Array<T>, size: number, value: any = 0): Array<T> {\n\t\tif (array.length >= size) return array;\n\t\treturn Utils.setArraySize(array, size, value);\n\t}\n\n\tstatic newArray<T> (size: number, defaultValue: T): Array<T> {\n\t\tconst array: T[] = [];\n\t\tfor (let i = 0; i < size; i++) array[i] = defaultValue;\n\t\treturn array;\n\t}\n\n\tstatic newFloatArray (size: number): NumberArrayLike {\n\t\tif (Utils.SUPPORTS_TYPED_ARRAYS)\n\t\t\treturn new Float32Array(size)\n\t\telse {\n\t\t\tconst array: number[] = [];\n\t\t\tfor (let i = 0; i < array.length; i++) array[i] = 0;\n\t\t\treturn array;\n\t\t}\n\t}\n\n\tstatic newShortArray (size: number): IntArrayLike {\n\t\tif (Utils.SUPPORTS_TYPED_ARRAYS)\n\t\t\treturn new Int16Array(size)\n\t\telse {\n\t\t\tconst array: number[] = [];\n\t\t\tfor (let i = 0; i < array.length; i++) array[i] = 0;\n\t\t\treturn array;\n\t\t}\n\t}\n\n\tstatic toFloatArray (array: Array<number>): number[] | Float32Array {\n\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n\t}\n\n\tstatic toSinglePrecision (value: number) {\n\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n\t}\n\n\t// This function is used to fix WebKit 602 specific issue described at https://esotericsoftware.com/forum/d/10109-ios-10-disappearing-graphics\n\tstatic webkit602BugfixHelper (alpha: number) {\n\t}\n\n\tstatic contains<T> (array: Array<T>, element: T, identity = true) {\n\t\tfor (let i = 0; i < array.length; i++)\n\t\t\tif (array[i] === element) return true;\n\t\treturn false;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\n\tstatic enumValue (type: any, name: string) {\n\t\treturn type[name[0].toUpperCase() + name.slice(1)];\n\t}\n}\n\nexport class DebugUtils {\n\tstatic logBones (skeleton: Skeleton) {\n\t\tfor (let i = 0; i < skeleton.bones.length; i++) {\n\t\t\tconst bone = skeleton.bones[i].appliedPose;\n\t\t\tconsole.log(`${bone.bone.data.name}, ${bone.a}, ${bone.b}, ${bone.c}, ${bone.d}, ${bone.worldX}, ${bone.worldY}`);\n\t\t}\n\t}\n}\n\nexport class Pool<T> {\n\tprivate items = [] as T[];\n\tprivate instantiator: () => T;\n\n\tconstructor (instantiator: () => T) {\n\t\tthis.instantiator = instantiator;\n\t}\n\n\tobtain () {\n\t\t// biome-ignore lint/style/noNonNullAssertion: length check\n\t\treturn this.items.length > 0 ? this.items.pop()! : this.instantiator();\n\t}\n\n\tfree (item: T) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: T can be anything\n\t\t(item as any).reset?.();\n\t\tthis.items.push(item);\n\t}\n\n\tfreeAll (items: ArrayLike<T>) {\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t\tthis.free(items[i]);\n\t}\n\n\tclear () {\n\t\tthis.items.length = 0;\n\t}\n}\n\nexport class Vector2 {\n\tconstructor (public x = 0, public y = 0) {\n\t}\n\n\tset (x: number, y: number): Vector2 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tlength () {\n\t\tconst x = this.x;\n\t\tconst y = this.y;\n\t\treturn Math.sqrt(x * x + y * y);\n\t}\n\n\tnormalize () {\n\t\tconst len = this.length();\n\t\tif (len !== 0) {\n\t\t\tthis.x /= len;\n\t\t\tthis.y /= len;\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport class TimeKeeper {\n\tmaxDelta = 0.064;\n\tframesPerSecond = 0;\n\tdelta = 0;\n\ttotalTime = 0;\n\n\tprivate lastTime = Date.now() / 1000;\n\tprivate frameCount = 0;\n\tprivate frameTime = 0;\n\n\tupdate () {\n\t\tconst now = Date.now() / 1000;\n\t\tthis.delta = now - this.lastTime;\n\t\tthis.frameTime += this.delta;\n\t\tthis.totalTime += this.delta;\n\t\tif (this.delta > this.maxDelta) this.delta = this.maxDelta;\n\t\tthis.lastTime = now;\n\n\t\tthis.frameCount++;\n\t\tif (this.frameTime > 1) {\n\t\t\tthis.framesPerSecond = this.frameCount / this.frameTime;\n\t\t\tthis.frameTime = 0;\n\t\t\tthis.frameCount = 0;\n\t\t}\n\t}\n}\n\nexport interface ArrayLike<T> {\n\tlength: number;\n\t[n: number]: T;\n}\n\nexport class WindowedMean {\n\tvalues: Array<number>;\n\taddedValues = 0;\n\tlastValue = 0;\n\tmean = 0;\n\tdirty = true;\n\n\tconstructor (windowSize: number = 32) {\n\t\tthis.values = new Array<number>(windowSize);\n\t}\n\n\thasEnoughData () {\n\t\treturn this.addedValues >= this.values.length;\n\t}\n\n\taddValue (value: number) {\n\t\tif (this.addedValues < this.values.length) this.addedValues++;\n\t\tthis.values[this.lastValue++] = value;\n\t\tif (this.lastValue > this.values.length - 1) this.lastValue = 0;\n\t\tthis.dirty = true;\n\t}\n\n\tgetMean () {\n\t\tif (this.hasEnoughData()) {\n\t\t\tif (this.dirty) {\n\t\t\t\tlet mean = 0;\n\t\t\t\tfor (let i = 0; i < this.values.length; i++)\n\t\t\t\t\tmean += this.values[i];\n\t\t\t\tthis.mean = mean / this.values.length;\n\t\t\t\tthis.dirty = false;\n\t\t\t}\n\t\t\treturn this.mean;\n\t\t}\n\t\treturn 0;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\n/** biome-ignore-all lint/suspicious/noExplicitAny: textures can be various type */\n\nexport abstract class Texture {\n\tprotected _image: HTMLImageElement | ImageBitmap | any;\n\n\tconstructor (image: HTMLImageElement | ImageBitmap | any) {\n\t\tthis._image = image;\n\t}\n\n\tgetImage (): HTMLImageElement | ImageBitmap | any {\n\t\treturn this._image;\n\t}\n\n\tabstract setFilters (minFilter: TextureFilter, magFilter: TextureFilter): void;\n\tabstract setWraps (uWrap: TextureWrap, vWrap: TextureWrap): void;\n\tabstract dispose (): void;\n}\n\nexport enum TextureFilter {\n\tNearest = 9728, // WebGLRenderingContext.NEAREST\n\tLinear = 9729, // WebGLRenderingContext.LINEAR\n\tMipMap = 9987, // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n\tMipMapNearestNearest = 9984, // WebGLRenderingContext.NEAREST_MIPMAP_NEAREST\n\tMipMapLinearNearest = 9985, // WebGLRenderingContext.LINEAR_MIPMAP_NEAREST\n\tMipMapNearestLinear = 9986, // WebGLRenderingContext.NEAREST_MIPMAP_LINEAR\n\tMipMapLinearLinear = 9987 // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n}\n\nexport enum TextureWrap {\n\tMirroredRepeat = 33648, // WebGLRenderingContext.MIRRORED_REPEAT\n\tClampToEdge = 33071, // WebGLRenderingContext.CLAMP_TO_EDGE\n\tRepeat = 10497 // WebGLRenderingContext.REPEAT\n}\n\nexport class TextureRegion {\n\ttexture: any;\n\tu = 0; v = 0;\n\tu2 = 0; v2 = 0;\n\twidth = 0; height = 0;\n\tdegrees = 0;\n\toffsetX = 0; offsetY = 0;\n\toriginalWidth = 0; originalHeight = 0;\n}\n\nexport class FakeTexture extends Texture {\n\tsetFilters (minFilter: TextureFilter, magFilter: TextureFilter) { }\n\tsetWraps (uWrap: TextureWrap, vWrap: TextureWrap) { }\n\tdispose () { }\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { AssetManagerBase } from \"./AssetManagerBase.js\";\nimport { type Texture, TextureFilter, TextureRegion, TextureWrap } from \"./Texture.js\";\nimport { type Disposable, type StringMap, Utils } from \"./Utils.js\";\n\nexport class TextureAtlas implements Disposable {\n\tpages = [] as TextureAtlasPage[];\n\tregions = [] as TextureAtlasRegion[];\n\n\tconstructor (atlasText: string) {\n\t\tconst reader = new TextureAtlasReader(atlasText);\n\t\tconst entry = new Array<string>(4);\n\n\t\tconst pageFields: StringMap<(page: TextureAtlasPage) => void> = {};\n\t\tpageFields.size = (page: TextureAtlasPage) => {\n\t\t\tpage.width = parseInt(entry[1]);\n\t\t\tpage.height = parseInt(entry[2]);\n\t\t};\n\t\tpageFields.format = () => {\n\t\t\t// page.format = Format[tuple[0]]; we don't need format in WebGL\n\t\t};\n\t\tpageFields.filter = (page: TextureAtlasPage) => {\n\t\t\tpage.minFilter = Utils.enumValue(TextureFilter, entry[1]);\n\t\t\tpage.magFilter = Utils.enumValue(TextureFilter, entry[2]);\n\t\t};\n\t\tpageFields.repeat = (page: TextureAtlasPage) => {\n\t\t\tif (entry[1].indexOf('x') !== -1) page.uWrap = TextureWrap.Repeat;\n\t\t\tif (entry[1].indexOf('y') !== -1) page.vWrap = TextureWrap.Repeat;\n\t\t};\n\t\tpageFields.pma = (page: TextureAtlasPage) => {\n\t\t\tpage.pma = entry[1] === \"true\";\n\t\t};\n\n\t\tvar regionFields: StringMap<(region: TextureAtlasRegion) => void> = {};\n\t\tregionFields.xy = (region: TextureAtlasRegion) => { // Deprecated, use bounds.\n\t\t\tregion.x = parseInt(entry[1]);\n\t\t\tregion.y = parseInt(entry[2]);\n\t\t};\n\t\tregionFields.size = (region: TextureAtlasRegion) => { // Deprecated, use bounds.\n\t\t\tregion.width = parseInt(entry[1]);\n\t\t\tregion.height = parseInt(entry[2]);\n\t\t};\n\t\tregionFields.bounds = (region: TextureAtlasRegion) => {\n\t\t\tregion.x = parseInt(entry[1]);\n\t\t\tregion.y = parseInt(entry[2]);\n\t\t\tregion.width = parseInt(entry[3]);\n\t\t\tregion.height = parseInt(entry[4]);\n\t\t};\n\t\tregionFields.offset = (region: TextureAtlasRegion) => { // Deprecated, use offsets.\n\t\t\tregion.offsetX = parseInt(entry[1]);\n\t\t\tregion.offsetY = parseInt(entry[2]);\n\t\t};\n\t\tregionFields.orig = (region: TextureAtlasRegion) => { // Deprecated, use offsets.\n\t\t\tregion.originalWidth = parseInt(entry[1]);\n\t\t\tregion.originalHeight = parseInt(entry[2]);\n\t\t};\n\t\tregionFields.offsets = (region: TextureAtlasRegion) => {\n\t\t\tregion.offsetX = parseInt(entry[1]);\n\t\t\tregion.offsetY = parseInt(entry[2]);\n\t\t\tregion.originalWidth = parseInt(entry[3]);\n\t\t\tregion.originalHeight = parseInt(entry[4]);\n\t\t};\n\t\tregionFields.rotate = (region: TextureAtlasRegion) => {\n\t\t\tconst value = entry[1];\n\t\t\tif (value === \"true\")\n\t\t\t\tregion.degrees = 90;\n\t\t\telse if (value !== \"false\")\n\t\t\t\tregion.degrees = parseInt(value);\n\t\t};\n\t\tregionFields.index = (region: TextureAtlasRegion) => {\n\t\t\tregion.index = parseInt(entry[1]);\n\t\t};\n\n\t\tlet line = reader.readLine();\n\t\t// Ignore empty lines before first entry.\n\t\twhile (line && line.trim().length === 0)\n\t\t\tline = reader.readLine();\n\t\t// Header entries.\n\t\twhile (true) {\n\t\t\tif (!line || line.trim().length === 0) break;\n\t\t\tif (reader.readEntry(entry, line) === 0) break; // Silently ignore all header fields.\n\t\t\tline = reader.readLine();\n\t\t}\n\n\t\t// Page and region entries.\n\t\tlet page: TextureAtlasPage | null = null;\n\t\tlet names: string[] | null = null;\n\t\tlet values: number[][] | null = null;\n\t\twhile (true) {\n\t\t\tif (line === null) break;\n\t\t\tif (line.trim().length === 0) {\n\t\t\t\tpage = null;\n\t\t\t\tline = reader.readLine();\n\t\t\t} else if (!page) {\n\t\t\t\tpage = new TextureAtlasPage(line.trim());\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (reader.readEntry(entry, line = reader.readLine()) === 0) break;\n\t\t\t\t\tconst field = pageFields[entry[0]];\n\t\t\t\t\tif (field) field(page);\n\t\t\t\t}\n\t\t\t\tthis.pages.push(page);\n\t\t\t} else {\n\t\t\t\tconst region = new TextureAtlasRegion(page, line);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tconst count = reader.readEntry(entry, line = reader.readLine());\n\t\t\t\t\tif (count === 0) break;\n\t\t\t\t\tconst field = regionFields[entry[0]];\n\t\t\t\t\tif (field)\n\t\t\t\t\t\tfield(region);\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!names) names = [];\n\t\t\t\t\t\tif (!values) values = [];\n\t\t\t\t\t\tnames.push(entry[0]);\n\t\t\t\t\t\tconst entryValues: number[] = [];\n\t\t\t\t\t\tfor (let i = 0; i < count; i++)\n\t\t\t\t\t\t\tentryValues.push(parseInt(entry[i + 1]));\n\t\t\t\t\t\tvalues.push(entryValues);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (region.originalWidth === 0 && region.originalHeight === 0) {\n\t\t\t\t\tregion.originalWidth = region.width;\n\t\t\t\t\tregion.originalHeight = region.height;\n\t\t\t\t}\n\t\t\t\tif (names && names.length > 0 && values && values.length > 0) {\n\t\t\t\t\tregion.names = names;\n\t\t\t\t\tregion.values = values;\n\t\t\t\t\tnames = null;\n\t\t\t\t\tvalues = null;\n\t\t\t\t}\n\t\t\t\tregion.u = region.x / page.width;\n\t\t\t\tregion.v = region.y / page.height;\n\t\t\t\tif (region.degrees === 90) {\n\t\t\t\t\tregion.u2 = (region.x + region.height) / page.width;\n\t\t\t\t\tregion.v2 = (region.y + region.width) / page.height;\n\t\t\t\t} else {\n\t\t\t\t\tregion.u2 = (region.x + region.width) / page.width;\n\t\t\t\t\tregion.v2 = (region.y + region.height) / page.height;\n\t\t\t\t}\n\t\t\t\tthis.regions.push(region);\n\t\t\t}\n\t\t}\n\t}\n\n\tfindRegion (name: string): TextureAtlasRegion | null {\n\t\tfor (let i = 0; i < this.regions.length; i++) {\n\t\t\tif (this.regions[i].name === name) {\n\t\t\t\treturn this.regions[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetTextures (assetManager: AssetManagerBase, pathPrefix: string = \"\") {\n\t\tfor (const page of this.pages)\n\t\t\tpage.setTexture(assetManager.get(pathPrefix + page.name) as Texture);\n\t}\n\n\tdispose () {\n\t\tfor (let i = 0; i < this.pages.length; i++) {\n\t\t\tthis.pages[i].texture?.dispose();\n\t\t}\n\t}\n}\n\nclass TextureAtlasReader {\n\tlines: Array<string>;\n\tindex: number = 0;\n\n\tconstructor (text: string) {\n\t\tthis.lines = text.split(/\\r\\n|\\r|\\n/);\n\t}\n\n\treadLine (): string | null {\n\t\tif (this.index >= this.lines.length)\n\t\t\treturn null;\n\t\treturn this.lines[this.index++];\n\t}\n\n\treadEntry (entry: string[], line: string | null): number {\n\t\tif (!line) return 0;\n\t\tline = line.trim();\n\t\tif (line.length === 0) return 0;\n\n\t\tconst colon = line.indexOf(':');\n\t\tif (colon === -1) return 0;\n\t\tentry[0] = line.substr(0, colon).trim();\n\t\tfor (let i = 1, lastMatch = colon + 1; ; i++) {\n\t\t\tconst comma = line.indexOf(',', lastMatch);\n\t\t\tif (comma === -1) {\n\t\t\t\tentry[i] = line.substr(lastMatch).trim();\n\t\t\t\treturn i;\n\t\t\t}\n\t\t\tentry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n\t\t\tlastMatch = comma + 1;\n\t\t\tif (i === 4) return 4;\n\t\t}\n\t}\n}\n\nexport class TextureAtlasPage {\n\tname: string;\n\tminFilter: TextureFilter = TextureFilter.Nearest;\n\tmagFilter: TextureFilter = TextureFilter.Nearest;\n\tuWrap: TextureWrap = TextureWrap.ClampToEdge;\n\tvWrap: TextureWrap = TextureWrap.ClampToEdge;\n\ttexture: Texture | null = null;\n\twidth: number = 0;\n\theight: number = 0;\n\tpma: boolean = false;\n\tregions = [] as TextureAtlasRegion[];\n\n\tconstructor (name: string) {\n\t\tthis.name = name;\n\t}\n\n\tsetTexture (texture: Texture) {\n\t\tthis.texture = texture;\n\t\ttexture.setFilters(this.minFilter, this.magFilter);\n\t\ttexture.setWraps(this.uWrap, this.vWrap);\n\t\tfor (const region of this.regions)\n\t\t\tregion.texture = texture;\n\t}\n}\n\nexport class TextureAtlasRegion extends TextureRegion {\n\tpage: TextureAtlasPage;\n\tname: string;\n\tx: number = 0;\n\ty: number = 0;\n\toffsetX: number = 0;\n\toffsetY: number = 0;\n\toriginalWidth: number = 0;\n\toriginalHeight: number = 0;\n\tindex: number = 0;\n\tdegrees: number = 0;\n\tnames: string[] | null = null;\n\tvalues: number[][] | null = null;\n\n\tconstructor (page: TextureAtlasPage, name: string) {\n\t\tsuper();\n\t\tthis.page = page;\n\t\tthis.name = name;\n\t\tpage.regions.push(this);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Skeleton } from \"../Skeleton.js\";\nimport type { Slot } from \"../Slot.js\";\nimport type { SlotPose } from \"../SlotPose.js\";\nimport { type NumberArrayLike, Utils } from \"../Utils.js\";\n\n/** The base class for all attachments. Multiple {@link Skeleton} instances, slots, or skins can use the same attachments. */\nexport abstract class Attachment {\n\tprivate static readonly empty: number[] = [];\n\n\tname: string;\n\n\t/** Timelines for the timeline attachment are also applied to this attachment.\n\t * @return May be null if no attachment-specific timelines should be applied. */\n\ttimelineAttachment?: Attachment;\n\n\t/** Slots that can have attachments whose {@link timelineAttachment} is this attachment. */\n\ttimelineSlots: number[] = Attachment.empty;\n\n\tconstructor (name: string) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.timelineAttachment = this;\n\t}\n\n\tabstract copy (): Attachment;\n\n\t/** Returns true if the {@code slotIndex} or any {@link timelineSlots} have an attachment whose {@link timelineAttachment} is\n\t * this attachment.\n\t * @param slots The {@link Skeleton.slots}.\n\t * @param slotIndex The timeline's primary slot index. */\n\tpublic isTimelineActive (slots: Slot[], slotIndex: number, appliedPose: boolean): boolean {\n\t\tlet slot = slots[slotIndex];\n\t\tif (slot.bone.isActive()) {\n\t\t\tconst other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();\n\t\t\tif (other != null && other.timelineAttachment === this) return true;\n\t\t}\n\t\tfor (let i = 0, n = this.timelineSlots.length; i < n; i++) {\n\t\t\tslot = slots[this.timelineSlots[i]];\n\t\t\tif (!slot.bone.isActive()) continue;\n\t\t\tconst other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();\n\t\t\tif (other != null && other.timelineAttachment === this) return true;\n\t\t}\n\t\treturn false;\n\t}\n}\n\n/** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by\n * {@link SlotPose.deform}. */\nexport abstract class VertexAttachment extends Attachment {\n\tprivate static nextID = 0;\n\n\t/** The unique ID for this attachment. */\n\tid = VertexAttachment.nextID++;\n\n\t/** The bones that affect the {@link vertices}. The entries are, for each vertex, the number of bones affecting the vertex\n\t * followed by that many bone indices, which is {@link Skeleton.getBones} index. Null if this attachment has no weights. */\n\tbones: Array<number> | null = null;\n\n\t/** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`\n\t * entries for each vertex. For a weighted attachment, the values are `x,y,weight` triplets for each bone affecting\n\t * each vertex. */\n\tvertices: NumberArrayLike = [];\n\n\t/** The maximum number of world vertex values that can be output by\n\t * {@link computeWorldVertices} using the `count` parameter. */\n\tworldVerticesLength = 0;\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\t/** Transforms the attachment's local {@link vertices} to world coordinates. If {@link SlotPose.getDeform} is not empty, it\n\t * is used to deform the vertices.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide.\n\t * @param start The index of the first {@link vertices} value to transform. Each vertex has 2 values, x and y.\n\t * @param count The number of world vertex values to output. Must be <= {@link worldVerticesLength} - `start`.\n\t * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *\n\t *           `stride` / 2.\n\t * @param offset The `worldVertices` index to begin writing values.\n\t * @param stride The number of `worldVertices` entries between the value pairs written. */\n\tcomputeWorldVertices (skeleton: Skeleton, slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number,\n\t\tstride: number) {\n\n\t\tcount = offset + (count >> 1) * stride;\n\t\tconst deformArray = slot.appliedPose.deform;\n\t\tlet vertices = this.vertices;\n\t\tconst bones = this.bones;\n\t\tif (!bones) {\n\t\t\tif (deformArray.length > 0) vertices = deformArray;\n\t\t\tconst bone = slot.bone.appliedPose;\n\t\t\tconst x = bone.worldX;\n\t\t\tconst y = bone.worldY;\n\t\t\tconst a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\tfor (let v = start, w = offset; w < count; v += 2, w += stride) {\n\t\t\t\tconst vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\tworldVertices[w] = vx * a + vy * b + x;\n\t\t\t\tworldVertices[w + 1] = vx * c + vy * d + y;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet v = 0, skip = 0;\n\t\tfor (let i = 0; i < start; i += 2) {\n\t\t\tconst n = bones[v];\n\t\t\tv += n + 1;\n\t\t\tskip += n;\n\t\t}\n\t\tconst skeletonBones = skeleton.bones;\n\t\tif (deformArray.length === 0) {\n\t\t\tfor (let w = offset, b = skip * 3; w < count; w += stride) {\n\t\t\t\tlet wx = 0, wy = 0;\n\t\t\t\tlet n = bones[v++];\n\t\t\t\tn += v;\n\t\t\t\tfor (; v < n; v++, b += 3) {\n\t\t\t\t\tconst bone = skeletonBones[bones[v]].appliedPose;\n\t\t\t\t\tconst vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t}\n\t\t\t\tworldVertices[w] = wx;\n\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t}\n\t\t} else {\n\t\t\tconst deform = deformArray;\n\t\t\tfor (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n\t\t\t\tlet wx = 0, wy = 0;\n\t\t\t\tlet n = bones[v++];\n\t\t\t\tn += v;\n\t\t\t\tfor (; v < n; v++, b += 3, f += 2) {\n\t\t\t\t\tconst bone = skeletonBones[bones[v]].appliedPose;\n\t\t\t\t\tconst vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t}\n\t\t\t\tworldVertices[w] = wx;\n\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Does not copy id (generated) or name (set on construction). **/\n\tcopyTo (attachment: VertexAttachment) {\n\t\tif (this.bones) {\n\t\t\tattachment.bones = [];\n\t\t\tUtils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n\t\t} else\n\t\t\tattachment.bones = null;\n\n\t\tif (this.vertices) {\n\t\t\tattachment.vertices = Utils.newFloatArray(this.vertices.length);\n\t\t\tUtils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n\t\t}\n\n\t\tattachment.worldVerticesLength = this.worldVerticesLength;\n\t\tattachment.timelineAttachment = this.timelineAttachment;\n\t\tattachment.timelineSlots = this.timelineSlots;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { TextureRegion } from \"../Texture.js\";\nimport { TextureAtlasRegion } from \"../TextureAtlas.js\";\nimport { Color, type NumberArrayLike, Utils } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport type { Sequence } from \"./Sequence.js\";\n\n/** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not\n * supported. Each vertex has UVs (texture coordinates) and triangles that are used to map an image on to the mesh.\n *\n * See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */\nexport class MeshAttachment extends VertexAttachment implements HasSequence {\n\treadonly sequence: Sequence;\n\n\t/** The UV pair for each vertex, normalized within the texture region. */\n\tregionUVs: NumberArrayLike = [];\n\n\t/** Triplets of vertex indices which describe the mesh's triangulation. */\n\ttriangles: Array<number> = [];\n\n\t/** The number of entries at the beginning of {@link vertices} that make up the mesh hull. */\n\thullLength: number = 0;\n\n\t/** The name of the texture region for this attachment. */\n\tpath?: string;\n\n\t/** The color to tint the mesh. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\tprivate sourceMesh: MeshAttachment | null = null;\n\n\t/** Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh\n\t * triangles do not never cross edges. Triangulation is not performed at runtime. */\n\tedges: Array<number> = [];\n\n\t/** The width of the mesh's image. Available only when nonessential data was exported. */\n\twidth: number = 0;\n\n\t/** The height of the mesh's image. Available only when nonessential data was exported. */\n\theight: number = 0;\n\n\ttempColor = new Color(0, 0, 0, 0);\n\n\tconstructor (name: string, sequence: Sequence) {\n\t\tsuper(name);\n\t\tthis.sequence = sequence;\n\t}\n\n\tcopy (): MeshAttachment {\n\t\tif (this.sourceMesh) return this.newLinkedMesh();\n\n\t\tconst copy = new MeshAttachment(this.name, this.sequence.copy());\n\t\tcopy.path = this.path;\n\t\tcopy.color.setFromColor(this.color);\n\n\t\tthis.copyTo(copy);\n\t\tcopy.regionUVs = [];\n\t\tUtils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n\t\tcopy.triangles = [];\n\t\tUtils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n\t\tcopy.hullLength = this.hullLength;\n\n\t\t// Nonessential.\n\t\tif (this.edges) {\n\t\t\tcopy.edges = [];\n\t\t\tUtils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n\t\t}\n\t\tcopy.width = this.width;\n\t\tcopy.height = this.height;\n\n\t\treturn copy;\n\t}\n\n\tupdateSequence () {\n\t\tthis.sequence.update(this);\n\t}\n\n\t/** The source mesh if this is a linked mesh, else null. A linked mesh shares the {@link bones}, {@link vertices},\n\t * {@link regionUVs}, {@link triangles}, {@link hullLength}, {@link edges}, {@link width}, and {@link height} with the\n\t * source mesh, but may have a different {@link name} or {@link path}, and therefore a different texture region. */\n\tgetSourceMesh () {\n\t\treturn this.sourceMesh;\n\t}\n\n\tsetSourceMesh (sourceMesh: MeshAttachment | null) {\n\t\tthis.sourceMesh = sourceMesh;\n\t\tif (sourceMesh) {\n\t\t\tthis.bones = sourceMesh.bones;\n\t\t\tthis.vertices = sourceMesh.vertices;\n\t\t\tthis.worldVerticesLength = sourceMesh.worldVerticesLength;\n\t\t\tthis.regionUVs = sourceMesh.regionUVs;\n\t\t\tthis.triangles = sourceMesh.triangles;\n\t\t\tthis.hullLength = sourceMesh.hullLength;\n\t\t\tthis.worldVerticesLength = sourceMesh.worldVerticesLength\n\t\t\tthis.edges = sourceMesh.edges;\n\t\t\tthis.width = sourceMesh.width;\n\t\t\tthis.height = sourceMesh.height;\n\t\t}\n\t}\n\n\t/** Returns a new mesh with the {@link sourceMesh} set to this mesh's source mesh, if any, else to this mesh. **/\n\tnewLinkedMesh (): MeshAttachment {\n\t\tconst copy = new MeshAttachment(this.name, this.sequence.copy());\n\t\tcopy.timelineAttachment = this.timelineAttachment;\n\t\tcopy.path = this.path;\n\t\tcopy.color.setFromColor(this.color);\n\t\tcopy.setSourceMesh(this.sourceMesh ? this.sourceMesh : this);\n\t\tcopy.updateSequence();\n\t\treturn copy;\n\t}\n\n\t/** Computes {@link Sequence.getUVs | UVs} for a mesh attachment.\n\t * @param uvs Output array for the computed UVs, same length as regionUVs. */\n\tstatic computeUVs (region: TextureRegion | null, regionUVs: NumberArrayLike, uvs: NumberArrayLike): void {\n\t\tif (!region) throw new Error(\"Region not set.\");\n\t\tconst n = uvs.length;\n\t\tlet u = region.u, v = region.v, width = 0, height = 0;\n\t\tif (region instanceof TextureAtlasRegion) {\n\t\t\tconst page = region.page;\n\t\t\tconst textureWidth = page.width, textureHeight = page.height;\n\t\t\tswitch (region.degrees) {\n\t\t\t\tcase 90:\n\t\t\t\t\tu -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n\t\t\t\t\tv -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n\t\t\t\t\twidth = region.originalHeight / textureWidth;\n\t\t\t\t\theight = region.originalWidth / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + regionUVs[i + 1] * width;\n\t\t\t\t\t\tuvs[i + 1] = v + (1 - regionUVs[i]) * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase 180:\n\t\t\t\t\tu -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n\t\t\t\t\tv -= region.offsetY / textureHeight;\n\t\t\t\t\twidth = region.originalWidth / textureWidth;\n\t\t\t\t\theight = region.originalHeight / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + (1 - regionUVs[i]) * width;\n\t\t\t\t\t\tuvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase 270:\n\t\t\t\t\tu -= region.offsetY / textureWidth;\n\t\t\t\t\tv -= region.offsetX / textureHeight;\n\t\t\t\t\twidth = region.originalHeight / textureWidth;\n\t\t\t\t\theight = region.originalWidth / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + (1 - regionUVs[i + 1]) * width;\n\t\t\t\t\t\tuvs[i + 1] = v + regionUVs[i] * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tdefault:\n\t\t\t\t\tu -= region.offsetX / textureWidth;\n\t\t\t\t\tv -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n\t\t\t\t\twidth = region.originalWidth / textureWidth;\n\t\t\t\t\theight = region.originalHeight / textureHeight;\n\t\t\t}\n\t\t} else if (!region) {\n\t\t\tu = v = 0;\n\t\t\twidth = height = 1;\n\t\t} else {\n\t\t\twidth = region.u2 - u;\n\t\t\theight = region.v2 - v;\n\t\t}\n\n\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\tuvs[i] = u + regionUVs[i] * width;\n\t\t\tuvs[i + 1] = v + regionUVs[i + 1] * height;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { SlotPose } from \"../SlotPose.js\";\nimport type { Slot } from \"../Slot.js\";\nimport type { TextureRegion } from \"../Texture.js\";\nimport { Color, MathUtils, type NumberArrayLike } from \"../Utils.js\";\nimport { Attachment } from \"./Attachment.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport type { Sequence } from \"./Sequence.js\";\n\n/** An attachment that displays a textured quadrilateral.\n *\n * See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */\nexport class RegionAttachment extends Attachment implements HasSequence {\n\treadonly sequence: Sequence;\n\n\t/** The local x translation. */\n\tx = 0;\n\n\t/** The local y translation. */\n\ty = 0;\n\n\t/** The local scaleX. */\n\tscaleX = 1;\n\n\t/** The local scaleY. */\n\tscaleY = 1;\n\n\t/** The local rotation in degrees, counter clockwise. */\n\trotation = 0;\n\n\t/** The width of the region attachment in Spine. */\n\twidth = 0;\n\n\t/** The height of the region attachment in Spine. */\n\theight = 0;\n\n\t/** The name of the texture region for this attachment. */\n\tpath?: string;\n\n\t/** The color to tint the region attachment. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\ttempColor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string, sequence: Sequence) {\n\t\tsuper(name);\n\t\tthis.sequence = sequence;\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new RegionAttachment(this.name, this.sequence.copy());\n\t\tcopy.path = this.path;\n\t\tcopy.x = this.x;\n\t\tcopy.y = this.y;\n\t\tcopy.scaleX = this.scaleX;\n\t\tcopy.scaleY = this.scaleY;\n\t\tcopy.rotation = this.rotation;\n\t\tcopy.width = this.width;\n\t\tcopy.height = this.height;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n\n\t/** Transforms the attachment's four vertices to world coordinates.\n\t *\n\t * See <a href=\"http://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide.\n\t * @param worldVertices The output world vertices. Must have a length >= `offset` + 8.\n\t * @param offset The `worldVertices` index to begin writing values.\n\t * @param stride The number of `worldVertices` entries between the value pairs written. */\n\tcomputeWorldVertices (slot: Slot, vertexOffsets: NumberArrayLike, worldVertices: NumberArrayLike, offset: number, stride: number) {\n\n\t\tconst bone = slot.bone.appliedPose;\n\t\tconst x = bone.worldX, y = bone.worldY;\n\t\tconst a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\n\t\tlet offsetX = vertexOffsets[0];\n\t\tlet offsetY = vertexOffsets[1];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // br\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffsets[2];\n\t\toffsetY = vertexOffsets[3];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // bl\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffsets[4];\n\t\toffsetY = vertexOffsets[5];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // ul\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffsets[6];\n\t\toffsetY = vertexOffsets[7];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // ur\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t}\n\n\tgetOffsets (pose: SlotPose): number[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: offsets are always defined after updateSequence\n\t\treturn this.sequence.offsets![this.sequence.resolveIndex(pose)];\n\t}\n\n\tupdateSequence () {\n\t\tthis.sequence.update(this);\n\t}\n\n\t/** Computes {@link Sequence.getUVs | UVs} and {@link Sequence.getOffsets | offsets} for a region attachment.\n\t * @param uvs Output array for the computed UVs, length of 8.\n\t * @param offset Output array for the computed vertex offsets, length of 8. */\n\tstatic computeUVs (region: TextureRegion | null, x: number, y: number, scaleX: number, scaleY: number, rotation: number, width: number,\n\t\theight: number, offset: number[], uvs: NumberArrayLike): void {\n\n\t\tif (!region) throw new Error(\"Region not set.\");\n\t\tconst regionScaleX = width / region.originalWidth * scaleX;\n\t\tconst regionScaleY = height / region.originalHeight * scaleY;\n\t\tconst localX = -width / 2 * scaleX + region.offsetX * regionScaleX;\n\t\tconst localY = -height / 2 * scaleY + region.offsetY * regionScaleY;\n\t\tconst localX2 = localX + region.width * regionScaleX;\n\t\tconst localY2 = localY + region.height * regionScaleY;\n\t\tconst radians = rotation * MathUtils.degRad;\n\t\tconst cos = Math.cos(radians);\n\t\tconst sin = Math.sin(radians);\n\t\tconst localXCos = localX * cos + x;\n\t\tconst localXSin = localX * sin;\n\t\tconst localYCos = localY * cos + y;\n\t\tconst localYSin = localY * sin;\n\t\tconst localX2Cos = localX2 * cos + x;\n\t\tconst localX2Sin = localX2 * sin;\n\t\tconst localY2Cos = localY2 * cos + y;\n\t\tconst localY2Sin = localY2 * sin;\n\t\toffset[0] = localXCos - localYSin;\n\t\toffset[1] = localYCos + localXSin;\n\t\toffset[2] = localXCos - localY2Sin;\n\t\toffset[3] = localY2Cos + localXSin;\n\t\toffset[4] = localX2Cos - localY2Sin;\n\t\toffset[5] = localY2Cos + localX2Sin;\n\t\toffset[6] = localX2Cos - localYSin;\n\t\toffset[7] = localYCos + localX2Sin;\n\n\t\tif (region == null) {\n\t\t\tuvs[0] = 0;\n\t\t\tuvs[1] = 0;\n\t\t\tuvs[2] = 0;\n\t\t\tuvs[3] = 1;\n\t\t\tuvs[4] = 1;\n\t\t\tuvs[5] = 1;\n\t\t\tuvs[6] = 1;\n\t\t\tuvs[7] = 0;\n\t\t} else {\n\t\t\tuvs[1] = region.v2;\n\t\t\tuvs[2] = region.u;\n\t\t\tuvs[5] = region.v;\n\t\t\tuvs[6] = region.u2;\n\t\t\tif (region.degrees === 90) {\n\t\t\t\tuvs[0] = region.u2;\n\t\t\t\tuvs[3] = region.v2;\n\t\t\t\tuvs[4] = region.u;\n\t\t\t\tuvs[7] = region.v;\n\t\t\t} else {\n\t\t\t\tuvs[0] = region.u;\n\t\t\t\tuvs[3] = region.v;\n\t\t\t\tuvs[4] = region.u2;\n\t\t\t\tuvs[7] = region.v2;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic X1 = 0;\n\tstatic Y1 = 1;\n\tstatic C1R = 2;\n\tstatic C1G = 3;\n\tstatic C1B = 4;\n\tstatic C1A = 5;\n\tstatic U1 = 6;\n\tstatic V1 = 7;\n\n\tstatic X2 = 8;\n\tstatic Y2 = 9;\n\tstatic C2R = 10;\n\tstatic C2G = 11;\n\tstatic C2B = 12;\n\tstatic C2A = 13;\n\tstatic U2 = 14;\n\tstatic V2 = 15;\n\n\tstatic X3 = 16;\n\tstatic Y3 = 17;\n\tstatic C3R = 18;\n\tstatic C3G = 19;\n\tstatic C3B = 20;\n\tstatic C3A = 21;\n\tstatic U3 = 22;\n\tstatic V3 = 23;\n\n\tstatic X4 = 24;\n\tstatic Y4 = 25;\n\tstatic C4R = 26;\n\tstatic C4G = 27;\n\tstatic C4B = 28;\n\tstatic C4A = 29;\n\tstatic U4 = 30;\n\tstatic V4 = 31;\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { SlotPose } from \"../SlotPose.js\";\nimport type { TextureRegion } from \"../Texture.js\";\nimport { type NumberArrayLike, Utils } from \"../Utils.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport { MeshAttachment } from \"./MeshAttachment.js\";\nimport { RegionAttachment } from \"./RegionAttachment.js\";\n\n/** Holds texture regions, UVs, and vertex offsets for rendering a region or mesh attachment. {@link regions Regions} must be\n * populated and {@link update} called before use. */\nexport class Sequence {\n\tprivate static _nextID = 0;\n\n\tid = Sequence.nextID();\n\n\t/** The list of texture regions this sequence will display. */\n\tregions: Array<TextureRegion | null>;\n\n\treadonly pathSuffix: boolean;\n\tuvs?: NumberArrayLike[];\n\n\t/** Returns vertex offsets from the center of a {@link RegionAttachment}. Invalid to call for a {@link MeshAttachment}. */\n\toffsets?: number[][];\n\n\t/** The starting number for the numeric {@link getPath | path} suffix. */\n\tstart = 0;\n\n\t/** The minimum number of digits in the numeric {@link getPath | path} suffix, for zero padding. 0 for no zero\n\t * padding. */\n\tdigits = 0;\n\n\t/** The index of the region to show for the setup pose. */\n\tsetupIndex = 0;\n\n\t/** @param count The number of texture regions this sequence will display.\n\t * @param pathSuffix If true, the {@link getPath | path} has a numeric suffix. If false, all regions will use the\n\t * same path, so `count` should be 1. */\n\tconstructor (count: number, pathSuffix: boolean) {\n\t\tthis.regions = new Array<TextureRegion>(count);\n\t\tthis.pathSuffix = pathSuffix;\n\t}\n\n\tcopy (): Sequence {\n\t\tconst regionCount = this.regions.length;\n\t\tconst copy = new Sequence(regionCount, this.pathSuffix);\n\t\tUtils.arrayCopy(this.regions, 0, copy.regions, 0, regionCount);\n\t\tcopy.start = this.start;\n\t\tcopy.digits = this.digits;\n\t\tcopy.setupIndex = this.setupIndex;\n\n\t\tif (this.uvs != null) {\n\t\t\tconst length = this.uvs[0].length;\n\t\t\tcopy.uvs = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tcopy.uvs[i] = Utils.newFloatArray(length);\n\t\t\t\tUtils.arrayCopy(this.uvs[i], 0, copy.uvs[i], 0, length);\n\t\t\t}\n\t\t}\n\t\tif (this.offsets != null) {\n\t\t\tcopy.offsets = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tcopy.offsets[i] = [];\n\t\t\t\tUtils.arrayCopy(this.offsets[i], 0, copy.offsets[i], 0, 8);\n\t\t\t}\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\t/** Computes UVs and offsets for the specified attachment. Must be called if the regions or attachment properties are\n\t  * changed. */\n\tpublic update (attachment: HasSequence) {\n\t\tconst regionCount = this.regions.length;\n\t\tif (attachment instanceof RegionAttachment) {\n\t\t\tthis.uvs = [];\n\t\t\tthis.offsets = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tthis.uvs[i] = Utils.newFloatArray(8);\n\t\t\t\tthis.offsets[i] = [];\n\t\t\t\tRegionAttachment.computeUVs(this.regions[i], attachment.x, attachment.y, attachment.scaleX, attachment.scaleY, attachment.rotation,\n\t\t\t\t\tattachment.width, attachment.height, this.offsets[i], this.uvs[i]);\n\t\t\t}\n\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\tconst regionUVs = attachment.regionUVs;\n\t\t\tthis.uvs = [];\n\t\t\tthis.offsets = undefined;\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tthis.uvs[i] = Utils.newFloatArray(regionUVs.length);\n\t\t\t\tMeshAttachment.computeUVs(this.regions[i], regionUVs, this.uvs[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the {@link regions} index for the {@link SlotPose.getSequenceIndex}. */\n\tresolveIndex (pose: SlotPose): number {\n\t\tlet index = pose.sequenceIndex;\n\t\tif (index === -1) index = this.setupIndex;\n\t\tif (index >= this.regions.length) index = this.regions.length - 1;\n\t\treturn index;\n\t}\n\n\t/** Returns the UVs for the specified index. {@link regions Regions} must be populated and {@link update} called\n\t  * before calling this method. */\n\tgetUVs (index: number): Float32Array {\n\t\t// biome-ignore lint/style/noNonNullAssertion: uvs are always defined after updateSequence\n\t\treturn this.uvs![index] as Float32Array;\n\t}\n\n\t/** Returns true if the {@link getPath | path} has a numeric suffix. */\n\thasPathSuffix (): boolean {\n\t\treturn this.pathSuffix;\n\t}\n\n\t/** Returns the specified base path with an optional numeric suffix for the specified index. */\n\tgetPath (basePath: string, index: number): string {\n\t\tif (!this.pathSuffix) return basePath;\n\t\tlet result = basePath;\n\t\tconst frame = (this.start + index).toString();\n\t\tfor (let i = this.digits - frame.length; i > 0; i--)\n\t\t\tresult += \"0\";\n\t\tresult += frame;\n\t\treturn result;\n\t}\n\n\tprivate static nextID (): number {\n\t\treturn Sequence._nextID++;\n\t}\n}\n\n/** Controls how {@link Sequence.regions} are displayed over time. */\nexport enum SequenceMode {\n\thold = 0,\n\tonce = 1,\n\tloop = 2,\n\tpingpong = 3,\n\tonceReverse = 4,\n\tloopReverse = 5,\n\tpingpongReverse = 6\n}\n\nexport const SequenceModeValues = [\n\tSequenceMode.hold,\n\tSequenceMode.once,\n\tSequenceMode.loop,\n\tSequenceMode.pingpong,\n\tSequenceMode.onceReverse,\n\tSequenceMode.loopReverse,\n\tSequenceMode.pingpongReverse\n];\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { HasSequence } from \"./attachments/HasSequence.js\";\nimport { SequenceMode, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport type { Bone } from \"./Bone.js\";\nimport type { Inherit } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport type { Event } from \"./Event.js\";\nimport type { IkConstraint } from \"./IkConstraint.js\";\nimport type { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { PathConstraint } from \"./PathConstraint.js\";\nimport type { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport type { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport type { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Posed } from \"./Posed.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { Slider } from \"./Slider.js\";\nimport type { SliderPose } from \"./SliderPose.js\";\nimport type { Slot } from \"./Slot.js\";\nimport type { SlotPose } from \"./SlotPose.js\";\nimport type { TransformConstraint } from \"./TransformConstraint.js\";\nimport type { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { Color, type NumberArrayLike, StringSet, Utils } from \"./Utils.js\";\n\n/** Stores a list of timelines to animate a skeleton's pose over time.\n *\n * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine Runtimes\n * Guide. */\nexport class Animation {\n\t/** The animation's name, unique across all animations in the skeleton.\n\t *\n\t * See {@link SkeletonData.findAnimation}. */\n\treadonly name: string;\n\n\t/** The duration of the animation in seconds, which is usually the highest time of all frames in the timelines. The duration is\n\t * used to know when the animation has completed and, for animations that repeat, when it should loop back to the start. */\n\ttimelines: Array<Timeline> = [];\n\n\treadonly timelineIds: StringSet;\n\n\t/** {@link Skeleton.getBones} indices that this animation's timelines modify.\n\t *\n\t * See {@link BoneTimeline.bones}. */\n\treadonly bones: Array<number>;\n\n\t// Nonessential.\n\t/** The color of the animation as it was in Spine, or a default color if nonessential data was not exported. */\n\treadonly color = new Color(1, 1, 1, 1);\n\n\t/** The duration of the animation in seconds, which is usually the highest time of all frames in the timeline. The duration is\n\t * used to know when it has completed and when it should loop back to the start. */\n\tduration: number;\n\n\tconstructor (name: string, timelines: Array<Timeline>, duration: number) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.duration = duration;\n\t\tthis.timelineIds = new StringSet();\n\t\tthis.bones = [] as number[];\n\t\tthis.setTimelines(timelines);\n\t}\n\n\tsetTimelines (timelines: Array<Timeline>) {\n\t\tif (!timelines) throw new Error(\"timelines cannot be null.\");\n\t\tthis.timelines = timelines;\n\n\t\tconst n = timelines.length;\n\t\tthis.timelineIds.clear();\n\t\tthis.bones.length = 0;\n\t\tconst boneSet = new Set();\n\t\tconst items = timelines;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst timeline = items[i];\n\t\t\tthis.timelineIds.addAll(timeline.propertyIds);\n\t\t\tif (isBoneTimeline(timeline) && boneSet.add(timeline.boneIndex))\n\t\t\t\tthis.bones.push(timeline.boneIndex);\n\t\t}\n\t}\n\n\t/** Returns true if this animation contains a timeline with any of the specified property IDs.\n\t *\n\t * See {@link Timeline.propertyIds}. */\n\thasTimeline (ids: string[]): boolean {\n\t\tfor (let i = 0; i < ids.length; i++)\n\t\t\tif (this.timelineIds.contains(ids[i])) return true;\n\t\treturn false;\n\t}\n\n\t/** Applies the animation's timelines to the specified skeleton.\n\t *\n\t * See {@link Timeline.apply} and\n\t * <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine Runtimes\n\t * Guide.\n\t * @param skeleton The skeleton the animation is applied to. This provides access to the bones, slots, and other skeleton\n\t *           components the timelines may change.\n\t * @param lastTime The last time in seconds this animation was applied. Some timelines trigger only at discrete times, in which\n\t *           case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive). Pass -1\n\t *           the first time an animation is applied to ensure frame 0 is triggered.\n\t * @param time The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and\n\t *           interpolate between the frame values.\n\t * @param loop True if `time` beyond the {@link duration} repeats the animation, else the last frame is used.\n\t * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire\n\t *           events.\n\t * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and\n\t *           intermediate values interpolate between them. Adjusting `alpha` over time can mix an animation in or\n\t *           out.\n\t * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before the\n\t *           first frame (current values are not used). If false, `alpha` transitions between current and timeline\n\t *           values, no change is made before the first frame.\n\t * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on\n\t *           `fromSetup`).\n\t * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions.\n\t * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tif (loop && this.duration !== 0) {\n\t\t\ttime %= this.duration;\n\t\t\tif (lastTime > 0) lastTime %= this.duration;\n\t\t}\n\n\t\tconst timelines = this.timelines;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\ttimelines[i].apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose);\n\t}\n}\n\n\nexport enum Property {\n\trotate,\n\tx,\n\ty,\n\tscaleX,\n\tscaleY,\n\tshearX,\n\tshearY,\n\tinherit,\n\trgb,\n\talpha,\n\trgb2,\n\tattachment,\n\tdeform,\n\tevent,\n\tdrawOrder,\n\tikConstraint,\n\ttransformConstraint,\n\tpathConstraintPosition,\n\tpathConstraintSpacing,\n\tpathConstraintMix,\n\tphysicsConstraintInertia,\n\tphysicsConstraintStrength,\n\tphysicsConstraintDamping,\n\tphysicsConstraintMass,\n\tphysicsConstraintWind,\n\tphysicsConstraintGravity,\n\tphysicsConstraintMix,\n\tphysicsConstraintReset,\n\tsequence,\n\tsliderTime,\n\tsliderMix,\n}\n\n/** The base class for all timelines.\n *\n * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine\n * Runtimes Guide. */\nexport abstract class Timeline {\n\treadonly propertyIds: string[];\n\treadonly frames: NumberArrayLike;\n\n\t/** True if this timeline supports additive blending. */\n\tadditive = false;\n\n\t/** True if this timeline sets values instantaneously and does not support interpolation between frames. */\n\tinstant = false;\n\n\tconstructor (frameCount: number, ...propertyIds: string[]) {\n\t\tthis.propertyIds = propertyIds;\n\t\tthis.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n\t}\n\n\tgetPropertyIds () {\n\t\treturn this.propertyIds;\n\t}\n\n\t/** The number of values stored per frame. */\n\tgetFrameEntries (): number {\n\t\treturn 1;\n\t}\n\n\t/** The number of frames in this timeline. */\n\tgetFrameCount () {\n\t\treturn this.frames.length / this.getFrameEntries();\n\t}\n\n\t/** The duration of the timeline in seconds, which is usually the highest time of all frames in the timeline. */\n\tgetDuration (): number {\n\t\treturn this.frames[this.frames.length - this.getFrameEntries()];\n\t}\n\n\t/** Applies this timeline to the skeleton.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine\n\t * Runtimes Guide.\n\t * @param skeleton The skeleton the timeline is applied to. This provides access to the bones, slots, and other skeleton\n\t *           components the timelines may change.\n\t * @param lastTime The last time in seconds this timeline was applied. Some timelines trigger only at discrete times, in\n\t *           which case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive).\n\t *           Pass -1 the first time a timeline is applied to ensure frame 0 is triggered.\n\t * @param time The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and\n\t *           interpolate between the frame values.\n\t * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines\n\t *           fire events.\n\t * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and\n\t *           intermediate values interpolate between them. Adjusting `alpha` over time can mix a timeline in or\n\t *           out.\n\t * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before\n\t *           the first frame (current values are not used). If false, `alpha` transitions between current and\n\t *           timeline values, no change is made before the first frame.\n\t * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on\n\t *           `fromSetup`).\n\t * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant\n\t *           transitions.\n\t * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */\n\tabstract apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean): void;\n\n\t/** Linear search using the specified stride (default 1).\n\t * @param time Must be >= the first value in `frames`.\n\t * @return The index of the first value <= `time`. */\n\tstatic search (frames: NumberArrayLike, time: number, step = 1) {\n\t\tconst n = frames.length;\n\t\tfor (let i = step; i < n; i += step)\n\t\t\tif (frames[i] > time) return i - step;\n\t\treturn n - step;\n\t}\n}\n\n/** An interface for timelines that change a slot's properties. */\nexport interface SlotTimeline {\n\t/** The index of the slot in {@link Skeleton.slots} that will be changed when this timeline is applied. */\n\tslotIndex: number;\n}\n\nexport function isSlotTimeline (obj: Timeline & Partial<SlotTimeline>): obj is Timeline & SlotTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.slotIndex === 'number';\n}\n\n/** The base class for timelines that interpolate between frame values using stepped, linear, or a Bezier curve. */\nexport abstract class CurveTimeline extends Timeline {\n\tprotected curves: NumberArrayLike; // type, x, y, ...\n\n\tconstructor (frameCount: number, bezierCount: number, ...propertyIds: string[]) {\n\t\tsuper(frameCount, ...propertyIds);\n\t\tthis.curves = Utils.newFloatArray(frameCount + bezierCount * 18/*BEZIER_SIZE*/);\n\t\tthis.curves[frameCount - 1] = 1/*STEPPED*/;\n\t}\n\n\t/** Sets the specified key frame to linear interpolation. */\n\tsetLinear (frame: number) {\n\t\tthis.curves[frame] = 0/*LINEAR*/;\n\t}\n\n\t/** Sets the specified key frame to stepped interpolation. */\n\tsetStepped (frame: number) {\n\t\tthis.curves[frame] = 1/*STEPPED*/;\n\t}\n\n\t/** Shrinks the storage for Bezier curves, for use when `bezierCount` (specified in the constructor) was larger\n\t * than the actual number of Bezier curves. */\n\tshrink (bezierCount: number) {\n\t\tconst size = this.getFrameCount() + bezierCount * 18/*BEZIER_SIZE*/;\n\t\tif (this.curves.length > size) {\n\t\t\tconst newCurves = Utils.newFloatArray(size);\n\t\t\tUtils.arrayCopy(this.curves, 0, newCurves, 0, size);\n\t\t\tthis.curves = newCurves;\n\t\t}\n\t}\n\n\t/** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n\t * one curve per frame.\n\t * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and `bezierCount - 1` (specified\n\t *           in the constructor), inclusive.\n\t * @param frame Between 0 and `frameCount - 1`, inclusive.\n\t * @param value The index of the value for this frame that this curve is used for.\n\t * @param time1 The time for the first key.\n\t * @param value1 The value for the first key.\n\t * @param cx1 The time for the first Bezier handle.\n\t * @param cy1 The value for the first Bezier handle.\n\t * @param cx2 The time of the second Bezier handle.\n\t * @param cy2 The value for the second Bezier handle.\n\t * @param time2 The time for the second key.\n\t * @param value2 The value for the second key. */\n\tsetBezier (bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number,\n\t\tcy2: number, time2: number, value2: number) {\n\t\tconst curves = this.curves;\n\t\tlet i = this.getFrameCount() + bezier * 18/*BEZIER_SIZE*/;\n\t\tif (value === 0) curves[frame] = 2/*BEZIER*/ + i;\n\t\tconst tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n\t\tconst dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;\n\t\tlet ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n\t\tlet dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n\t\tlet x = time1 + dx, y = value1 + dy;\n\t\tfor (let n = i + 18/*BEZIER_SIZE*/; i < n; i += 2) {\n\t\t\tcurves[i] = x;\n\t\t\tcurves[i + 1] = y;\n\t\t\tdx += ddx;\n\t\t\tdy += ddy;\n\t\t\tddx += dddx;\n\t\t\tddy += dddy;\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t}\n\t}\n\n\t/** Returns the Bezier interpolated value for the specified time.\n\t * @param frameIndex The index into {@link frames} for the values of the frame before `time`.\n\t * @param valueOffset The offset from `frameIndex` to the value this curve is used for.\n\t * @param i The index of the Bezier segments. See {@link getCurveType}. */\n\tgetBezierValue (time: number, frameIndex: number, valueOffset: number, i: number) {\n\t\tconst curves = this.curves;\n\t\tif (curves[i] > time) {\n\t\t\tconst x = this.frames[frameIndex], y = this.frames[frameIndex + valueOffset];\n\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t}\n\t\tconst n = i + 18/*BEZIER_SIZE*/;\n\t\tfor (i += 2; i < n; i += 2) {\n\t\t\tif (curves[i] >= time) {\n\t\t\t\tconst x = curves[i - 2], y = curves[i - 1];\n\t\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t\t}\n\t\t}\n\t\tframeIndex += this.getFrameEntries();\n\t\tconst x = curves[n - 2], y = curves[n - 1];\n\t\treturn y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);\n\t}\n}\n\n/** The base class for a {@link CurveTimeline} that sets one property with a curve. */\nexport abstract class CurveTimeline1 extends CurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, propertyId: string) {\n\t\tsuper(frameCount, bezierCount, propertyId);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 2/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and value for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, value: number) {\n\t\tframe <<= 1;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*VALUE*/] = value;\n\t}\n\n\t/** Returns the interpolated value for the specified time. */\n\tgetCurveValue (time: number) {\n\t\tconst frames = this.frames;\n\t\tlet i = frames.length - 2;\n\t\tfor (let ii = 2; ii <= i; ii += 2) {\n\t\t\tif (frames[ii] > time) {\n\t\t\t\ti = ii - 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst curveType = this.curves[i >> 1];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i], value = frames[i + 1/*VALUE*/];\n\t\t\t\treturn value + (time - before) / (frames[i + 2/*ENTRIES*/] - before) * (frames[i + 2/*ENTRIES*/ + 1/*VALUE*/] - value);\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\treturn frames[i + 1/*VALUE*/];\n\t\t}\n\t\treturn this.getBezierValue(time, i, 1/*VALUE*/, curveType - 2/*BEZIER*/);\n\t}\n\n\t/** Returns the interpolated value for properties relative to the setup value. The timeline value is added to the setup\n\t * value, rather than replacing it.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetRelativeValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time);\n\t\treturn fromSetup ? setup + value * alpha : current + (add ? value : value + setup - current) * alpha;\n\t}\n\n\t/** Returns the interpolated value for properties set as absolute values. The timeline value replaces the setup value,\n\t * rather than being relative to it.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number): number;\n\n\t/** Returns the interpolated value for properties set as absolute values, using the specified timeline value rather than\n\t * calling {@link getCurveValue}.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property.\n\t * @param value The timeline value to apply. */\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value: number): number;\n\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value?: number) {\n\t\tif (value === undefined)\n\t\t\treturn this.getAbsoluteValue1(time, alpha, fromSetup, add, current, setup);\n\t\telse\n\t\t\treturn this.getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value);\n\t}\n\n\tprivate getAbsoluteValue1 (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time);\n\t\treturn fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;\n\t}\n\n\tprivate getAbsoluteValue2 (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\treturn fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;\n\t}\n\n\t/** Returns the interpolated value for scale properties. The timeline and setup values are multiplied and sign adjusted.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetScaleValue (time: number, alpha: number, fromSetup: boolean, add: boolean, out: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time) * setup;\n\t\tif (alpha === 1 && !add) return value;\n\t\tlet base = fromSetup ? setup : current;\n\t\tif (add) return base + (value - setup) * alpha;\n\t\tif (out) return base + (Math.abs(value) * Math.sign(base) - base) * alpha;\n\t\tbase = Math.abs(base) * Math.sign(value);\n\t\treturn base + (value - base) * alpha;\n\t}\n}\n\n/** An interface for timelines that change a bone's properties. */\nexport interface BoneTimeline {\n\t/** The index of the bone in {@link Skeleton.bones} that is changed by this timeline. */\n\tboneIndex: number;\n}\n\nexport function isBoneTimeline (obj: Timeline & Partial<BoneTimeline>): obj is Timeline & BoneTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.boneIndex === 'number';\n}\n\n/** The base class for timelines that change 1 bone property with a curve. */\nexport abstract class BoneTimeline1 extends CurveTimeline1 implements BoneTimeline {\n\treadonly boneIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number, property: Property) {\n\t\tsuper(frameCount, bezierCount, `${property}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.additive = true;\n\t}\n\n\tpublic apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (bone.active)\n\t\t\tthis.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);\n\t}\n\n\tprotected abstract apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean): void;\n}\n\n/** The base class for timelines that change two bone properties with a curve. */\nexport abstract class BoneTimeline2 extends CurveTimeline implements BoneTimeline {\n\treadonly boneIndex;\n\n\t/** @param bezierCount The maximum number of Bezier curves. See {@link shrink}.\n\t * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number, property1: Property, property2: Property) {\n\t\tsuper(frameCount, bezierCount, `${property1}|${boneIndex}`, `${property2}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.additive = true;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 3/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and values for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, value1: number, value2: number) {\n\t\tframe *= 3/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*VALUE1*/] = value1;\n\t\tthis.frames[frame + 2/*VALUE2*/] = value2;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean): void {\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (bone.active)\n\t\t\tthis.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);\n\t}\n\n\tprotected abstract apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean,): void;\n}\n\n/** Changes {@link BonePose.rotation}. */\nexport class RotateTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.rotate);\n\t}\n\n\tapply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.rotation = this.getRelativeValue(time, alpha, fromSetup, add, pose.rotation, setup.rotation);\n\t}\n}\n\n/** Changes {@link BonePose.x} and {@link BonePose.y}. */\nexport class TranslateTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.x, Property.y);\n\t}\n\n\tapply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.x = setup.x;\n\t\t\t\tpose.y = setup.y;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (fromSetup) {\n\t\t\tpose.x = setup.x + x * alpha;\n\t\t\tpose.y = setup.y + y * alpha;\n\t\t} else if (add) {\n\t\t\tpose.x += x * alpha;\n\t\t\tpose.y += y * alpha;\n\t\t} else {\n\t\t\tpose.x += (setup.x + x - pose.x) * alpha;\n\t\t\tpose.y += (setup.y + y - pose.y) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes {@link BonePose.x}. */\nexport class TranslateXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.x);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.x = this.getRelativeValue(time, alpha, fromSetup, add, pose.x, setup.x);\n\t}\n}\n\n/** Changes {@link BonePose.y}. */\nexport class TranslateYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.y);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.y = this.getRelativeValue(time, alpha, fromSetup, add, pose.y, setup.y);\n\t}\n}\n\n/** Changes {@link BonePose.scaleX} and {@link BonePose.scaleY}. */\nexport class ScaleTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleX, Property.scaleY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.scaleX = setup.scaleX;\n\t\t\t\tpose.scaleY = setup.scaleY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x: number, y: number;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\t\tx *= setup.scaleX;\n\t\ty *= setup.scaleY;\n\n\t\tif (alpha === 1 && !add) {\n\t\t\tpose.scaleX = x;\n\t\t\tpose.scaleY = y;\n\t\t} else {\n\t\t\tlet bx = 0, by = 0;\n\t\t\tif (fromSetup) {\n\t\t\t\tbx = setup.scaleX;\n\t\t\t\tby = setup.scaleY;\n\t\t\t} else {\n\t\t\t\tbx = pose.scaleX;\n\t\t\t\tby = pose.scaleY;\n\t\t\t}\n\t\t\tif (add) {\n\t\t\t\tpose.scaleX = bx + (x - setup.scaleX) * alpha;\n\t\t\t\tpose.scaleY = by + (y - setup.scaleY) * alpha;\n\t\t\t} else if (out) {\n\t\t\t\tpose.scaleX = bx + (Math.abs(x) * Math.sign(bx) - bx) * alpha;\n\t\t\t\tpose.scaleY = by + (Math.abs(y) * Math.sign(by) - by) * alpha;\n\t\t\t} else {\n\t\t\t\tbx = Math.abs(bx) * Math.sign(x);\n\t\t\t\tby = Math.abs(by) * Math.sign(y);\n\t\t\t\tpose.scaleX = bx + (x - bx) * alpha;\n\t\t\t\tpose.scaleY = by + (y - by) * alpha;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a {@link BonePose.scaleX}. */\nexport class ScaleXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleX);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.scaleX = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleX, setup.scaleX);\n\t}\n}\n\n/** Changes a {@link BonePose.scaleY}. */\nexport class ScaleYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.scaleY = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleY, setup.scaleY);\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearX, Property.shearY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean, out: boolean,) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.shearX = setup.shearX;\n\t\t\t\tpose.shearY = setup.shearY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (fromSetup) {\n\t\t\tpose.shearX = setup.shearX + x * alpha;\n\t\t\tpose.shearY = setup.shearY + y * alpha;\n\t\t} else if (add) {\n\t\t\tpose.shearX += x * alpha;\n\t\t\tpose.shearY += y * alpha;\n\t\t} else {\n\t\t\tpose.shearX += (setup.shearX + x - pose.shearX) * alpha;\n\t\t\tpose.shearY += (setup.shearY + y - pose.shearY) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearX);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.shearX = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearX, setup.shearX);\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.shearY = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearY, setup.shearY);\n\t}\n}\n\n/** Changes {@link BonePose.inherit}. */\nexport class InheritTimeline extends Timeline implements BoneTimeline {\n\treadonly boneIndex: number;\n\n\tconstructor (frameCount: number, boneIndex: number) {\n\t\tsuper(frameCount, `${Property.inherit}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.instant = true;\n\t}\n\n\tpublic getFrameEntries () {\n\t\treturn 2/*ENTRIES*/;\n\t}\n\n\t/** Sets the inherit transform mode for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tpublic setFrame (frame: number, time: number, inherit: Inherit) {\n\t\tframe *= 2/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*INHERIT*/] = inherit;\n\t}\n\n\tpublic apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\t\tconst pose = appliedPose ? bone.appliedPose : bone.pose;\n\n\t\tif (out) {\n\t\t\tif (fromSetup) pose.inherit = bone.data.setupPose.inherit;\n\t\t} else {\n\t\t\tconst frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tif (fromSetup) pose.inherit = bone.data.setupPose.inherit;\n\t\t\t} else\n\t\t\t\tpose.inherit = this.frames[Timeline.search(frames, time, 2/*ENTRIES*/) + 1/*INHERIT*/];\n\t\t}\n\t}\n}\n/** The base class for timelines that change any number of slot properties with a curve. */\nexport abstract class SlotCurveTimeline extends CurveTimeline implements SlotTimeline {\n\treadonly slotIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number, ...propertyIds: string[]) {\n\t\tsuper(frameCount, bezierCount, ...propertyIds);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (slot.bone.active) this.apply1(slot, appliedPose ? slot.appliedPose : slot.pose, time, alpha, fromSetup, add);\n\t}\n\n\tprotected abstract apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean): void;\n}\n\n/** Changes {@link SlotPose.color}. */\nexport class RGBATimeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.alpha}|${slotIndex}`);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 5/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, a: number) {\n\t\tframe *= 5/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*A*/] = a;\n\t}\n\n\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\tconst color = pose.color;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) color.setFromColor(slot.data.setupPose.color);\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0;\n\t\tconst i = Timeline.search(frames, time, 5/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 5/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 5/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 5/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 5/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 5/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\ta += (frames[i + 5/*ENTRIES*/ + 4/*A*/] - a) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\ta = this.getBezierValue(time, i, 4/*A*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t}\n\t\tif (alpha === 1)\n\t\t\tcolor.set(r, g, b, a);\n\t\telse {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\tcolor.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha,\n\t\t\t\t\tsetup.a + (a - setup.a) * alpha);\n\t\t\t} else\n\t\t\t\tcolor.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n\t\t}\n\t}\n}\n\n/** Changes RGB for a slot's {@link SlotPose.color}. */\nexport class RGBTimeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, `${Property.rgb}|${slotIndex}`);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 4/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number) {\n\t\tframe <<= 2;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t}\n\n\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\tconst color = pose.color;\n\t\tlet r = 0, g = 0, b = 0;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\tcolor.r = setup.r;\n\t\t\t\tcolor.g = setup.g;\n\t\t\t\tcolor.b = setup.b;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 4/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 4/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 4/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 4/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t}\n\t\tif (alpha !== 1) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\tr = setup.r + (r - setup.r) * alpha;\n\t\t\t\tg = setup.g + (g - setup.g) * alpha;\n\t\t\t\tb = setup.b + (b - setup.b) * alpha;\n\t\t\t} else {\n\t\t\t\tr = color.r + (r - color.r) * alpha;\n\t\t\t\tg = color.g + (g - color.g) * alpha;\n\t\t\t\tb = color.b + (b - color.b) * alpha;\n\t\t\t}\n\t\t}\n\t\tcolor.r = r < 0 ? 0 : (r > 1 ? 1 : r);\n\t\tcolor.g = g < 0 ? 0 : (g > 1 ? 1 : g);\n\t\tcolor.b = b < 0 ? 0 : (b > 1 ? 1 : b);\n\t}\n}\n\n/** Changes alpha for a slot's {@link SlotPose.color}. */\nexport class AlphaTimeline extends CurveTimeline1 implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.alpha}|${slotIndex}`);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tconst color = (appliedPose ? slot.appliedPose : slot.pose).color;\n\t\tlet a = 0;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) color.a = slot.data.setupPose.color.a;\n\t\t\treturn;\n\t\t}\n\n\t\ta = this.getCurveValue(time);\n\t\tif (alpha !== 1) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\ta = setup.a + (a - setup.a) * alpha;\n\t\t\t} else\n\t\t\t\ta = color.a + (a - color.a) * alpha;\n\t\t}\n\t\tcolor.a = a < 0 ? 0 : (a > 1 ? 1 : a);\n\t}\n}\n\n/** Changes {@link SlotPose.color} and {@link SlotPose.darkColor} for two color tinting. */\nexport class RGBA2Timeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.alpha}|${slotIndex}`, //\n\t\t\t`${Property.rgb2}|${slotIndex}`);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 8/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, light, and dark colors for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number) {\n\t\tframe <<= 3;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*A*/] = a;\n\t\tthis.frames[frame + 5/*R2*/] = r2;\n\t\tthis.frames[frame + 6/*G2*/] = g2;\n\t\tthis.frames[frame + 7/*B2*/] = b2;\n\t}\n\n\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst light = pose.color, dark = pose.darkColor!;\n\t\tlet r2 = 0, g2 = 0, b2 = 0\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose;\n\t\t\t\tlight.setFromColor(setup.color);\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tconst setupDark = setup.darkColor!;\n\t\t\t\tdark.r = setupDark.r;\n\t\t\t\tdark.g = setupDark.g;\n\t\t\t\tdark.b = setupDark.b;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0;\n\t\tconst i = Timeline.search(frames, time, 8/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 3];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tr2 = frames[i + 5/*R2*/];\n\t\t\t\tg2 = frames[i + 6/*G2*/];\n\t\t\t\tb2 = frames[i + 7/*B2*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 8/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 8/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 8/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 8/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\ta += (frames[i + 8/*ENTRIES*/ + 4/*A*/] - a) * t;\n\t\t\t\tr2 += (frames[i + 8/*ENTRIES*/ + 5/*R2*/] - r2) * t;\n\t\t\t\tg2 += (frames[i + 8/*ENTRIES*/ + 6/*G2*/] - g2) * t;\n\t\t\t\tb2 += (frames[i + 8/*ENTRIES*/ + 7/*B2*/] - b2) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tr2 = frames[i + 5/*R2*/];\n\t\t\t\tg2 = frames[i + 6/*G2*/];\n\t\t\t\tb2 = frames[i + 7/*B2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\ta = this.getBezierValue(time, i, 4/*A*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tr2 = this.getBezierValue(time, i, 5/*R2*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tg2 = this.getBezierValue(time, i, 6/*G2*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t\t\tb2 = this.getBezierValue(time, i, 7/*B2*/, curveType + 18/*BEZIER_SIZE*/ * 6 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (alpha === 1)\n\t\t\tlight.set(r, g, b, a);\n\t\telse if (fromSetup) {\n\t\t\tconst setupPose = slot.data.setupPose;\n\t\t\tlet setup = setupPose.color;\n\t\t\tlight.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha,\n\t\t\t\tsetup.a + (a - setup.a) * alpha);\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\tsetup = setupPose.darkColor!;\n\t\t\tr2 = setup.r + (r2 - setup.r) * alpha;\n\t\t\tg2 = setup.g + (g2 - setup.g) * alpha;\n\t\t\tb2 = setup.b + (b2 - setup.b) * alpha;\n\t\t} else {\n\t\t\tlight.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n\t\t\tr2 = dark.r + (r2 - dark.r) * alpha;\n\t\t\tg2 = dark.g + (g2 - dark.g) * alpha;\n\t\t\tb2 = dark.b + (b2 - dark.b) * alpha;\n\t\t}\n\t\tdark.r = r2 < 0 ? 0 : (r2 > 1 ? 1 : r2);\n\t\tdark.g = g2 < 0 ? 0 : (g2 > 1 ? 1 : g2);\n\t\tdark.b = b2 < 0 ? 0 : (b2 > 1 ? 1 : b2);\n\t}\n}\n\n/** Changes {@link SlotPose.color} and {@link SlotPose.darkColor} for two color tinting. */\nexport class RGB2Timeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.rgb2}|${slotIndex}`);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 7/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, light, and dark colors for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, r2: number, g2: number, b2: number) {\n\t\tframe *= 7/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*R2*/] = r2;\n\t\tthis.frames[frame + 5/*G2*/] = g2;\n\t\tthis.frames[frame + 6/*B2*/] = b2;\n\t}\n\n\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst light = pose.color, dark = pose.darkColor!;\n\t\tlet r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose;\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tconst setupLight = setup.color, setupDark = setup.darkColor!;\n\t\t\t\tlight.r = setupLight.r;\n\t\t\t\tlight.g = setupLight.g;\n\t\t\t\tlight.b = setupLight.b;\n\t\t\t\tdark.r = setupDark.r;\n\t\t\t\tdark.g = setupDark.g;\n\t\t\t\tdark.b = setupDark.b;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tr2 = frames[i + 4/*R2*/];\n\t\t\t\tg2 = frames[i + 5/*G2*/];\n\t\t\t\tb2 = frames[i + 6/*B2*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 7/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 7/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 7/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 7/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\tr2 += (frames[i + 7/*ENTRIES*/ + 4/*R2*/] - r2) * t;\n\t\t\t\tg2 += (frames[i + 7/*ENTRIES*/ + 5/*G2*/] - g2) * t;\n\t\t\t\tb2 += (frames[i + 7/*ENTRIES*/ + 6/*B2*/] - b2) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tr2 = frames[i + 4/*R2*/];\n\t\t\t\tg2 = frames[i + 5/*G2*/];\n\t\t\t\tb2 = frames[i + 6/*B2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\tr2 = this.getBezierValue(time, i, 4/*R2*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tg2 = this.getBezierValue(time, i, 5/*G2*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tb2 = this.getBezierValue(time, i, 6/*B2*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (alpha !== 1) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setupPose = slot.data.setupPose;\n\t\t\t\tlet setup = setupPose.color;\n\t\t\t\tr = setup.r + (r - setup.r) * alpha;\n\t\t\t\tg = setup.g + (g - setup.g) * alpha;\n\t\t\t\tb = setup.b + (b - setup.b) * alpha;\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tsetup = setupPose.darkColor!;\n\t\t\t\tr2 = setup.r + (r2 - setup.r) * alpha;\n\t\t\t\tg2 = setup.g + (g2 - setup.g) * alpha;\n\t\t\t\tb2 = setup.b + (b2 - setup.b) * alpha;\n\t\t\t} else {\n\t\t\t\tr = light.r + (r - light.r) * alpha;\n\t\t\t\tg = light.g + (g - light.g) * alpha;\n\t\t\t\tb = light.b + (b - light.b) * alpha;\n\t\t\t\tr2 = dark.r + (r2 - dark.r) * alpha;\n\t\t\t\tg2 = dark.g + (g2 - dark.g) * alpha;\n\t\t\t\tb2 = dark.b + (b2 - dark.b) * alpha;\n\t\t\t}\n\t\t}\n\t\tlight.r = r < 0 ? 0 : (r > 1 ? 1 : r);\n\t\tlight.g = g < 0 ? 0 : (g > 1 ? 1 : g);\n\t\tlight.b = b < 0 ? 0 : (b > 1 ? 1 : b);\n\t\tdark.r = r2 < 0 ? 0 : (r2 > 1 ? 1 : r2);\n\t\tdark.g = g2 < 0 ? 0 : (g2 > 1 ? 1 : g2);\n\t\tdark.b = b2 < 0 ? 0 : (b2 > 1 ? 1 : b2);\n\t}\n}\n\n/** Changes {@link SlotPose.ttachment}. */\nexport class AttachmentTimeline extends Timeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\t/** The attachment name for each key frame. May contain null values to clear the attachment. */\n\tattachmentNames: Array<string | null>;\n\n\tconstructor (frameCount: number, slotIndex: number) {\n\t\tsuper(frameCount, `${Property.attachment}|${slotIndex}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachmentNames = new Array<string>(frameCount);\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the attachment name for the specified key frame. */\n\tsetFrame (frame: number, time: number, attachmentName: string | null) {\n\t\tthis.frames[frame] = time;\n\t\tthis.attachmentNames[frame] = attachmentName;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) this.setAttachment(skeleton, pose, slot.data.attachmentName);\n\t\t} else\n\t\t\tthis.setAttachment(skeleton, pose, this.attachmentNames[Timeline.search(this.frames, time)]);\n\t}\n\n\tsetAttachment (skeleton: Skeleton, pose: SlotPose, attachmentName: string | null) {\n\t\tpose.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n\t}\n}\n\n/** Changes {@link SlotPose.deform} to deform a {@link VertexAttachment}. */\nexport class DeformTimeline extends CurveTimeline implements SlotTimeline {\n\treadonly slotIndex: number;\n\n\t/** The attachment that will be deformed.\n\t *\n\t * See {@link VertexAttachment.getTimelineAttachment}. */\n\treadonly attachment: VertexAttachment;\n\n\t/** The vertices for each key frame. */\n\tvertices: Array<NumberArrayLike>;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number, attachment: VertexAttachment) {\n\t\tsuper(frameCount, bezierCount, `${Property.deform}|${slotIndex}|${attachment.id}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t\tthis.vertices = new Array<NumberArrayLike>(frameCount);\n\t\tthis.additive = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time and vertices for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\n\t * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n\tsetFrame (frame: number, time: number, vertices: NumberArrayLike) {\n\t\tthis.frames[frame] = time;\n\t\tthis.vertices[frame] = vertices;\n\t}\n\n\t/** @param value1 Ignored (0 is used for a deform timeline).\n\t * @param value2 Ignored (1 is used for a deform timeline). */\n\tsetBezier (bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number,\n\t\tcy2: number, time2: number, value2: number) {\n\t\tconst curves = this.curves;\n\t\tlet i = this.getFrameCount() + bezier * 18/*BEZIER_SIZE*/;\n\t\tif (value === 0) curves[frame] = 2/*BEZIER*/ + i;\n\t\tconst tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;\n\t\tconst dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n\t\tlet ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n\t\tlet dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n\t\tlet x = time1 + dx, y = dy;\n\t\tfor (let n = i + 18/*BEZIER_SIZE*/; i < n; i += 2) {\n\t\t\tcurves[i] = x;\n\t\t\tcurves[i + 1] = y;\n\t\t\tdx += ddx;\n\t\t\tdy += ddy;\n\t\t\tddx += dddx;\n\t\t\tddy += dddy;\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t}\n\t}\n\n\tgetCurvePercent (time: number, frame: number) {\n\t\tconst curves = this.curves;\n\t\tlet i = curves[frame];\n\t\tswitch (i) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst x = this.frames[frame];\n\t\t\t\treturn (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\treturn 0;\n\t\t}\n\t\ti -= 2/*BEZIER*/;\n\t\tif (curves[i] > time) {\n\t\t\tconst x = this.frames[frame];\n\t\t\treturn curves[i + 1] * (time - x) / (curves[i] - x);\n\t\t}\n\t\tconst n = i + 18/*BEZIER_SIZE*/;\n\t\tfor (i += 2; i < n; i += 2) {\n\t\t\tif (curves[i] >= time) {\n\t\t\t\tconst x = curves[i - 2], y = curves[i - 1];\n\t\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t\t}\n\t\t}\n\t\tconst x = curves[n - 2], y = curves[n - 1];\n\t\treturn y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Event[] | null, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst slots = skeleton.slots;\n\t\tif (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return;\n\t\tconst timelineSlots = this.attachment.timelineSlots;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tthis.applyBeforeFirst(slots[this.slotIndex], appliedPose, fromSetup);\n\t\t\tfor (const slotIndex of timelineSlots)\n\t\t\t\tthis.applyBeforeFirst(slots[slotIndex], appliedPose, fromSetup);\n\t\t\treturn;\n\t\t}\n\n\t\tlet v1: NumberArrayLike, v2: NumberArrayLike | null;\n\t\tlet percent: number;\n\t\tif (time >= frames[frames.length - 1]) {\n\t\t\tpercent = 0;\n\t\t\tv1 = this.vertices[frames.length - 1];\n\t\t\tv2 = null;\n\t\t} else {\n\t\t\tconst frame = Timeline.search(frames, time);\n\t\t\tpercent = this.getCurvePercent(time, frame);\n\t\t\tv1 = this.vertices[frame];\n\t\t\tv2 = this.vertices[frame + 1];\n\t\t}\n\n\t\tconst vertexCount = this.vertices[0].length;\n\t\tthis.applyToSlot(slots[this.slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);\n\t\tfor (const slotIndex of timelineSlots)\n\t\t\tthis.applyToSlot(slots[slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);\n\t}\n\n\tprivate applyToSlot (slot: Slot, appliedPose: boolean, v1: NumberArrayLike, v2: NumberArrayLike | null, percent: number, vertexCount: number,\n\t\talpha: number, fromSetup: boolean, add: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\n\t\tconst vertexAttachment = pose.attachment as VertexAttachment;\n\t\tconst deform = pose.deform;\n\t\tif (deform.length === 0) fromSetup = true;\n\t\tdeform.length = vertexCount;\n\n\t\tif (v2 === null) { // Time is after last frame.\n\t\t\tif (alpha === 1) {\n\t\t\t\tif (add && !fromSetup) {\n\t\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += v1[i] - setupVertices[i];\n\t\t\t\t\t} else { // Weighted deform offsets, no alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += v1[i];\n\t\t\t\t\t}\n\t\t\t\t} else // Vertex positions or deform offsets, no alpha.\n\t\t\t\t\tUtils.arrayCopy(v1, 0, deform, 0, vertexCount);\n\t\t\t} else if (fromSetup) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst setup = setupVertices[i];\n\t\t\t\t\t\tdeform[i] = setup + (v1[i] - setup) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] = v1[i] * alpha;\n\t\t\t\t}\n\t\t\t} else if (add) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] += (v1[i] - setupVertices[i]) * alpha;\n\t\t\t\t} else { // Weighted deform offsets, alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] += v1[i] * alpha;\n\t\t\t\t}\n\t\t\t} else { // Vertex positions or deform offsets, with alpha.\n\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\tdeform[i] += (v1[i] - deform[i]) * alpha;\n\t\t\t}\n\t\t} else { // Between frames.\n\t\t\tif (alpha === 1) {\n\t\t\t\tif (add && !fromSetup) {\n\t\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\t\tdeform[i] += prev + (v2[i] - prev) * percent - setupVertices[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { // Weighted deform offsets, no alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\t\tdeform[i] += prev + (v2[i] - prev) * percent;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (percent === 0)\n\t\t\t\t\tUtils.arrayCopy(v1, 0, deform, 0, vertexCount)\n\t\t\t\telse { // Vertex positions or deform offsets, no alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] = prev + (v2[i] - prev) * percent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (fromSetup) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i], setup = setupVertices[i];\n\t\t\t\t\t\tdeform[i] = setup + (prev + (v2[i] - prev) * percent - setup) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] = (prev + (v2[i] - prev) * percent) * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (add) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent - setupVertices[i]) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent) * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent - deform[i]) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate applyBeforeFirst (slot: Slot, appliedPose: boolean, fromSetup: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment == null || pose.attachment.timelineAttachment !== this.attachment) return;\n\t\tif (pose.deform.length === 0) fromSetup = true;\n\t\tif (fromSetup) pose.deform.length = 0;\n\t}\n}\n\n/** Changes {@link Slot.getSequenceIndex} for an attachment's {@link Sequence}. */\nexport class SequenceTimeline extends Timeline implements SlotTimeline {\n\tstatic ENTRIES = 3;\n\tstatic MODE = 1;\n\tstatic DELAY = 2;\n\n\treadonly slotIndex: number;\n\treadonly attachment: Attachment;\n\n\tconstructor (frameCount: number, slotIndex: number, attachment: Attachment) {\n\t\tsuper(frameCount, `${Property.sequence}|${slotIndex}|${(attachment as unknown as HasSequence).sequence.id}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn SequenceTimeline.ENTRIES;\n\t}\n\n\tgetSlotIndex () {\n\t\treturn this.slotIndex;\n\t}\n\n\t/** The attachment for which the {@link SlotPose.sequenceIndex} will be set.\n\t *\n\t * See {@link VertexAttachment.timelineAttachment}. */\n\tgetAttachment () {\n\t\treturn this.attachment;\n\t}\n\n\t/** Sets the time, mode, index, and frame time for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time Seconds between frames. */\n\tsetFrame (frame: number, time: number, mode: SequenceMode, index: number, delay: number) {\n\t\tconst frames = this.frames;\n\t\tframe *= SequenceTimeline.ENTRIES;\n\t\tframes[frame] = time;\n\t\tframes[frame + SequenceTimeline.MODE] = mode | (index << 4);\n\t\tframes[frame + SequenceTimeline.DELAY] = delay;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst slots = skeleton.slots;\n\t\tif (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return;\n\t\tconst timelineSlots = this.attachment.timelineSlots;\n\n\t\tconst frames = this.frames;\n\t\tif (out || time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tthis.setupPose(slots[this.slotIndex], appliedPose);\n\t\t\t\tfor (const slotIndex of timelineSlots)\n\t\t\t\t\tthis.setupPose(slots[slotIndex], appliedPose)\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);\n\t\tconst before = frames[i];\n\t\tconst modeAndIndex = frames[i + SequenceTimeline.MODE];\n\t\tconst delay = frames[i + SequenceTimeline.DELAY];\n\n\t\tthis.applyToSlot(slots[this.slotIndex], appliedPose, time, before, modeAndIndex, delay);\n\t\tfor (const slotIndex of timelineSlots)\n\t\t\tthis.applyToSlot(slots[slotIndex], appliedPose, time, before, modeAndIndex, delay);\n\t}\n\n\tprivate setupPose (slot: Slot, appliedPose: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\t\tpose.sequenceIndex = -1;\n\t}\n\n\tprivate applyToSlot (slot: Slot, appliedPose: boolean, time: number, before: number, modeAndIndex: number, delay: number) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\n\t\tlet index = modeAndIndex >> 4, count = (pose.attachment as unknown as HasSequence).sequence.regions.length;\n\t\tconst mode = SequenceModeValues[modeAndIndex & 0xf];\n\t\tif (mode !== SequenceMode.hold) {\n\t\t\tindex += (((time - before) / delay + 0.00001) | 0);\n\t\t\tswitch (mode) {\n\t\t\t\tcase SequenceMode.once: index = Math.min(count - 1, index); break;\n\t\t\t\tcase SequenceMode.loop: index %= count; break;\n\t\t\t\tcase SequenceMode.pingpong: {\n\t\t\t\t\tconst n = (count << 1) - 2;\n\t\t\t\t\tindex = n === 0 ? 0 : index % n;\n\t\t\t\t\tif (index >= count) index = n - index;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase SequenceMode.onceReverse: index = Math.max(count - 1 - index, 0); break;\n\t\t\t\tcase SequenceMode.loopReverse: index = count - 1 - (index % count); break;\n\t\t\t\tcase SequenceMode.pingpongReverse: {\n\t\t\t\t\tconst n = (count << 1) - 2;\n\t\t\t\t\tindex = n === 0 ? 0 : (index + count - 1) % n;\n\t\t\t\t\tif (index >= count) index = n - index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpose.sequenceIndex = index;\n\t}\n}\n\n/** Fires an {@link Event} when specific animation times are reached. */\nexport class EventTimeline extends Timeline {\n\tstatic propertyIds = [`${Property.event}`];\n\n\t/** The event for each key frame. */\n\tevents: Array<Event>;\n\n\tconstructor (frameCount: number) {\n\t\tsuper(frameCount, ...EventTimeline.propertyIds);\n\t\tthis.events = new Array<Event>(frameCount);\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the event for the specified key frame. */\n\tsetFrame (frame: number, event: Event) {\n\t\tthis.frames[frame] = event.time;\n\t\tthis.events[frame] = event;\n\t}\n\n\t/** Fires events for frames > `lastTime` and <= `time`. */\n\tapply (skeleton: Skeleton | null, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tif (!firedEvents) return;\n\n\t\tconst frames = this.frames;\n\t\tconst frameCount = this.frames.length;\n\n\t\tif (lastTime > time) { // Apply after lastTime for looped animations.\n\t\t\tthis.apply(null, lastTime, Number.MAX_VALUE, firedEvents, 0, false, false, false, false);\n\t\t\tlastTime = -1;\n\t\t} else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.\n\t\t\treturn;\n\t\tif (time < frames[0]) return;\n\n\t\tlet i = 0;\n\t\tif (lastTime < frames[0])\n\t\t\ti = 0;\n\t\telse {\n\t\t\ti = Timeline.search(frames, lastTime) + 1;\n\t\t\tconst frameTime = frames[i];\n\t\t\twhile (i > 0) { // Fire multiple events with the same frame.\n\t\t\t\tif (frames[i - 1] !== frameTime) break;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\tfor (; i < frameCount && time >= frames[i]; i++)\n\t\t\tfiredEvents.push(this.events[i]);\n\t}\n}\n\n/** Changes the {@link Skeleton.getDrawOrder}. */\nexport class DrawOrderTimeline extends Timeline {\n\tstatic readonly propertyID = `${Property.drawOrder}`;\n\tstatic propertyIds = [DrawOrderTimeline.propertyID];\n\n\t/** The draw order for each key frame. See {@link setFrame}. */\n\tprivate readonly drawOrders: Array<Array<number> | null>;\n\n\tconstructor (frameCount: number) {\n\t\tsuper(frameCount, ...DrawOrderTimeline.propertyIds);\n\t\tthis.drawOrders = new Array<Array<number> | null>(frameCount);\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the draw order for the specified key frame.\n\t * @param drawOrder Ordered {@link Skeleton.slots} indices, or null to use setup pose\n\t *           draw order. */\n\tsetFrame (frame: number, time: number, drawOrder: Array<number> | null) {\n\t\tthis.frames[frame] = time;\n\t\tthis.drawOrders[frame] = drawOrder;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);\n\t\tconst setup = skeleton.slots;\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) Utils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length);\n\t\t\treturn;\n\t\t}\n\n\t\tconst order = this.drawOrders[Timeline.search(this.frames, time)];\n\t\tif (!order)\n\t\t\tUtils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length);\n\t\telse {\n\t\t\tfor (let i = 0, n = order.length; i < n; i++)\n\t\t\t\tpose[i] = setup[order[i]];\n\t\t}\n\t}\n}\n\n/** Changes a subset of the {@link Skeleton.getDrawOrder | draw order}. */\nexport class DrawOrderFolderTimeline extends Timeline {\n\tprivate readonly slots: number[];\n\tprivate readonly inFolder: boolean[];\n\tprivate readonly drawOrders: Array<Array<number> | null>;\n\n\t/** @param slots {@link Skeleton.slots} indices controlled by this timeline, in setup order.\n\t * @param slotCount The maximum number of slots in the skeleton. */\n\tconstructor (frameCount: number, slots: number[], slotCount: number) {\n\t\tsuper(frameCount, ...DrawOrderFolderTimeline.propertyIds(slots));\n\t\tthis.slots = slots;\n\t\tthis.drawOrders = new Array(frameCount);\n\t\tthis.inFolder = new Array(slotCount);\n\t\tfor (const i of slots)\n\t\t\tthis.inFolder[i] = true;\n\t\tthis.instant = true;\n\t}\n\n\tprivate static propertyIds (slots: number[]): string[] {\n\t\tconst n = slots.length;\n\t\tconst ids = new Array(n);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tids[i] = `d${slots[i]}`;\n\t\treturn ids;\n\t}\n\n\tgetFrameCount (): number {\n\t\treturn this.frames.length;\n\t}\n\n\t/** The {@link Skeleton.getSlots} indices that this timeline affects, in setup order. */\n\tgetSlots (): number[] {\n\t\treturn this.slots;\n\t}\n\n\t/** The draw order for each frame. See {@link setFrame}. */\n\tgetDrawOrders (): Array<Array<number> | null> {\n\t\treturn this.drawOrders;\n\t}\n\n\t/** Sets the time and draw order for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\n\t * @param drawOrder Ordered {@link getSlots} indices, or null to use setup pose order. */\n\tsetFrame (frame: number, time: number, drawOrder: Array<number> | null): void {\n\t\tthis.frames[frame] = time;\n\t\tthis.drawOrders[frame] = drawOrder;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean): void {\n\t\tconst pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);\n\t\tconst setup = skeleton.slots;\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) this.setup(pose, setup);\n\t\t} else {\n\t\t\tconst order = this.drawOrders[Timeline.search(this.frames, time)];\n\t\t\tif (!order)\n\t\t\t\tthis.setup(pose, setup);\n\t\t\telse {\n\t\t\t\tconst inFolder = this.inFolder;\n\t\t\t\tconst slots = this.slots;\n\t\t\t\tfor (let i = 0, found = 0, done = slots.length; ; i++) {\n\t\t\t\t\tif (inFolder[pose[i].data.index]) {\n\t\t\t\t\t\tpose[i] = setup[slots[order[found]]];\n\t\t\t\t\t\tif (++found === done) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setup (pose: Slot[], setup: Slot[]): void {\n\t\tconst { inFolder, slots } = this;\n\t\tfor (let i = 0, found = 0, done = slots.length; ; i++) {\n\t\t\tif (inFolder[pose[i].data.index]) {\n\t\t\t\tpose[i] = setup[slots[found]];\n\t\t\t\tif (++found === done) break;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface ConstraintTimeline {\n\t/** The index of the constraint in {@link Skeleton.constraints} that will be changed when this timeline is applied, or -1 if\n\t * a specific constraint will not be changed. */\n\treadonly constraintIndex: number;\n}\n\nexport function isConstraintTimeline (obj: Timeline & Partial<ConstraintTimeline>): obj is Timeline & ConstraintTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.constraintIndex === 'number';\n}\n\n/** Changes {@link IkConstraintPose.mix)}, {@link IkConstraintPose.softness},\n * {@link IkConstraintPose.bendDirection}, {@link IkConstraintPose.stretch}, and\n * {@link IkConstraintPose.compress}. */\nexport class IkConstraintTimeline extends CurveTimeline implements ConstraintTimeline {\n\treadonly constraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.ikConstraint}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 6/*ENTRIES*/;\n\t}\n\n\t/** Sets the time, mix, softness, bend direction, compress, and stretch for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\n\t * @param bendDirection 1 or -1. */\n\tsetFrame (frame: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean) {\n\t\tframe *= 6/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*MIX*/] = mix;\n\t\tthis.frames[frame + 2/*SOFTNESS*/] = softness;\n\t\tthis.frames[frame + 3/*BEND_DIRECTION*/] = bendDirection;\n\t\tthis.frames[frame + 4/*COMPRESS*/] = compress ? 1 : 0;\n\t\tthis.frames[frame + 5/*STRETCH*/] = stretch ? 1 : 0;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as IkConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mix = setup.mix;\n\t\t\t\tpose.softness = setup.softness;\n\t\t\t\tpose.bendDirection = setup.bendDirection;\n\t\t\t\tpose.compress = setup.compress;\n\t\t\t\tpose.stretch = setup.stretch;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet mix = 0, softness = 0;\n\t\tconst i = Timeline.search(frames, time, 6/*ENTRIES*/)\n\t\tconst curveType = this.curves[i / 6/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\tmix = frames[i + 1/*MIX*/];\n\t\t\t\tsoftness = frames[i + 2/*SOFTNESS*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 6/*ENTRIES*/] - before);\n\t\t\t\tmix += (frames[i + 6/*ENTRIES*/ + 1/*MIX*/] - mix) * t;\n\t\t\t\tsoftness += (frames[i + 6/*ENTRIES*/ + 2/*SOFTNESS*/] - softness) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tmix = frames[i + 1/*MIX*/];\n\t\t\t\tsoftness = frames[i + 2/*SOFTNESS*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmix = this.getBezierValue(time, i, 1/*MIX*/, curveType - 2/*BEZIER*/);\n\t\t\t\tsoftness = this.getBezierValue(time, i, 2/*SOFTNESS*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tpose.mix = base.mix + (mix - base.mix) * alpha;\n\t\tpose.softness = base.softness + (softness - base.softness) * alpha;\n\t\tif (out) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.bendDirection = base.bendDirection;\n\t\t\t\tpose.compress = base.compress;\n\t\t\t\tpose.stretch = base.stretch;\n\t\t\t}\n\t\t} else {\n\t\t\tpose.bendDirection = frames[i + 3/*BEND_DIRECTION*/];\n\t\t\tpose.compress = frames[i + 4/*COMPRESS*/] !== 0;\n\t\t\tpose.stretch = frames[i + 5/*STRETCH*/] !== 0;\n\t\t}\n\t}\n}\n\n/** Changes {@link TransformConstraintPose.mixRotate}, {@link TransformConstraintPose.mixX},\n * {@link TransformConstraintPose.mixY}, {@link TransformConstraintPose.mixScaleX},\n * {@link TransformConstraintPose.mixScaleY}, and {@link TransformConstraintPose.mixShearY}. */\nexport class TransformConstraintTimeline extends CurveTimeline implements ConstraintTimeline {\n\t/** The index of the transform constraint slot in {@link Skeleton.transformConstraints} that will be changed. */\n\tconstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.transformConstraint}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t\tthis.additive = true;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 7/*ENTRIES*/;\n\t}\n\n\t/** Sets the time, rotate mix, translate mix, scale mix, and shear mix for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number, mixScaleX: number, mixScaleY: number,\n\t\tmixShearY: number) {\n\t\tconst frames = this.frames;\n\t\tframe *= 7/*ENTRIES*/;\n\t\tframes[frame] = time;\n\t\tframes[frame + 1/*ROTATE*/] = mixRotate;\n\t\tframes[frame + 2/*X*/] = mixX;\n\t\tframes[frame + 3/*Y*/] = mixY;\n\t\tframes[frame + 4/*SCALEX*/] = mixScaleX;\n\t\tframes[frame + 5/*SCALEY*/] = mixScaleY;\n\t\tframes[frame + 6/*SHEARY*/] = mixShearY;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as TransformConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mixRotate = setup.mixRotate;\n\t\t\t\tpose.mixX = setup.mixX;\n\t\t\t\tpose.mixY = setup.mixY;\n\t\t\t\tpose.mixScaleX = setup.mixScaleX;\n\t\t\t\tpose.mixScaleY = setup.mixScaleY;\n\t\t\t\tpose.mixShearY = setup.mixShearY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate: number, x: number, y: number, scaleX: number, scaleY: number, shearY: number;\n\t\tconst i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tscaleX = frames[i + 4/*SCALEX*/];\n\t\t\t\tscaleY = frames[i + 5/*SCALEY*/];\n\t\t\t\tshearY = frames[i + 6/*SHEARY*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 7/*ENTRIES*/] - before);\n\t\t\t\trotate += (frames[i + 7/*ENTRIES*/ + 1/*ROTATE*/] - rotate) * t;\n\t\t\t\tx += (frames[i + 7/*ENTRIES*/ + 2/*X*/] - x) * t;\n\t\t\t\ty += (frames[i + 7/*ENTRIES*/ + 3/*Y*/] - y) * t;\n\t\t\t\tscaleX += (frames[i + 7/*ENTRIES*/ + 4/*SCALEX*/] - scaleX) * t;\n\t\t\t\tscaleY += (frames[i + 7/*ENTRIES*/ + 5/*SCALEY*/] - scaleY) * t;\n\t\t\t\tshearY += (frames[i + 7/*ENTRIES*/ + 6/*SHEARY*/] - shearY) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tscaleX = frames[i + 4/*SCALEX*/];\n\t\t\t\tscaleY = frames[i + 5/*SCALEY*/];\n\t\t\t\tshearY = frames[i + 6/*SHEARY*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\trotate = this.getBezierValue(time, i, 1/*ROTATE*/, curveType - 2/*BEZIER*/);\n\t\t\t\tx = this.getBezierValue(time, i, 2/*X*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 3/*Y*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\tscaleX = this.getBezierValue(time, i, 4/*SCALEX*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tscaleY = this.getBezierValue(time, i, 5/*SCALEY*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tshearY = this.getBezierValue(time, i, 6/*SHEARY*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t}\n\n\t\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tif (add) {\n\t\t\tpose.mixRotate = base.mixRotate + rotate * alpha;\n\t\t\tpose.mixX = base.mixX + x * alpha;\n\t\t\tpose.mixY = base.mixY + y * alpha;\n\t\t\tpose.mixScaleX = base.mixScaleX + scaleX * alpha;\n\t\t\tpose.mixScaleY = base.mixScaleY + scaleY * alpha;\n\t\t\tpose.mixShearY = base.mixShearY + shearY * alpha;\n\t\t} else {\n\t\t\tpose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha;\n\t\t\tpose.mixX = base.mixX + (x - base.mixX) * alpha;\n\t\t\tpose.mixY = base.mixY + (y - base.mixY) * alpha;\n\t\t\tpose.mixScaleX = base.mixScaleX + (scaleX - base.mixScaleX) * alpha;\n\t\t\tpose.mixScaleY = base.mixScaleY + (scaleY - base.mixScaleY) * alpha;\n\t\t\tpose.mixShearY = base.mixShearY + (shearY - base.mixShearY) * alpha;\n\t\t}\n\t}\n}\n\n/** The base class for timelines that change 1 constraint property with a curve. */\nexport abstract class ConstraintTimeline1 extends CurveTimeline1 implements ConstraintTimeline {\n\treadonly constraintIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number, property: Property) {\n\t\tsuper(frameCount, bezierCount, `${property}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n}\n\n/** Changes {@link PathConstraintPose.position}. */\nexport class PathConstraintPositionTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.pathConstraintPosition);\n\t\tthis.additive = true;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.position = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.position, constraint.data.setupPose.position);\n\t\t}\n\t}\n}\n\n/** Changes {@link PathConstraintPose.spacing}. */\nexport class PathConstraintSpacingTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.pathConstraintSpacing);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.spacing = this.getAbsoluteValue(time, alpha, fromSetup, false, pose.spacing,\n\t\t\t\tconstraint.data.setupPose.spacing);\n\t\t}\n\t}\n}\n\n/** Changes {@link PathConstraint.mixRotate}, {@link PathConstraint.mixX}, and\n * {@link PathConstraint.mixY}. */\nexport class PathConstraintMixTimeline extends CurveTimeline implements ConstraintTimeline {\n\treadonly constraintIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.pathConstraintMix}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 4/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and color for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number) {\n\t\tconst frames = this.frames;\n\t\tframe <<= 2;\n\t\tframes[frame] = time;\n\t\tframes[frame + 1/*ROTATE*/] = mixRotate;\n\t\tframes[frame + 2/*X*/] = mixX;\n\t\tframes[frame + 3/*Y*/] = mixY;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mixRotate = setup.mixRotate;\n\t\t\t\tpose.mixX = setup.mixX;\n\t\t\t\tpose.mixY = setup.mixY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate: number, x: number, y: number;\n\t\tconst i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst before = frames[i];\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tconst t = (time - before) / (frames[i + 4/*ENTRIES*/] - before);\n\t\t\t\trotate += (frames[i + 4/*ENTRIES*/ + 1/*ROTATE*/] - rotate) * t;\n\t\t\t\tx += (frames[i + 4/*ENTRIES*/ + 2/*X*/] - x) * t;\n\t\t\t\ty += (frames[i + 4/*ENTRIES*/ + 3/*Y*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\trotate = this.getBezierValue(time, i, 1/*ROTATE*/, curveType - 2/*BEZIER*/);\n\t\t\t\tx = this.getBezierValue(time, i, 2/*X*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 3/*Y*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t}\n\n\t\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tif (add) {\n\t\t\tpose.mixRotate = base.mixRotate + rotate * alpha;\n\t\t\tpose.mixX = base.mixX + x * alpha;\n\t\t\tpose.mixY = base.mixY + y * alpha;\n\t\t} else {\n\t\t\tpose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha;\n\t\t\tpose.mixX = base.mixX + (x - base.mixX) * alpha;\n\t\t\tpose.mixY = base.mixY + (y - base.mixY) * alpha;\n\t\t}\n\t}\n}\n\n/** The base class for most {@link PhysicsConstraint} timelines. */\nexport abstract class PhysicsConstraintTimeline extends ConstraintTimeline1 {\n\t/** @param constraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number, property: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, property);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tif (add && !this.additive) add = false;\n\t\tif (this.constraintIndex === -1) {\n\t\t\tconst value = time >= this.frames[0] ? this.getCurveValue(time) : 0;\n\t\t\tconst constraints = skeleton.physics;\n\t\t\tfor (const constraint of constraints) {\n\t\t\t\tif (constraint.active && this.global(constraint.data)) {\n\t\t\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\t\t\tthis.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose), value));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PhysicsConstraint;\n\t\t\tif (constraint.active) {\n\t\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\t\tthis.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose)));\n\t\t\t}\n\t\t}\n\t}\n\n\tabstract get (pose: PhysicsConstraintPose): number;\n\n\tabstract set (pose: PhysicsConstraintPose, value: number): void;\n\n\tabstract global (constraint: PhysicsConstraintData): boolean;\n}\n\n/** Changes {@link PhysicsConstraintPose.inertia}. */\nexport class PhysicsConstraintInertiaTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintInertia);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.inertia;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.inertia = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.inertiaGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.strength}. */\nexport class PhysicsConstraintStrengthTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintStrength);\n\t}\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.strength;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.strength = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.strengthGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.damping}. */\nexport class PhysicsConstraintDampingTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintDamping);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.damping;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.damping = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.dampingGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.massInverse}. The timeline values are not inverted. */\nexport class PhysicsConstraintMassTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintMass);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn 1 / pose.massInverse;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.massInverse = 1 / value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.massGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.wind}. */\nexport class PhysicsConstraintWindTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintWind);\n\t\tthis.additive = true;\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.wind;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.wind = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.windGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.gravity}. */\nexport class PhysicsConstraintGravityTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintGravity);\n\t\tthis.additive = true;\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.gravity;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.gravity = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.gravityGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.mix}. */\nexport class PhysicsConstraintMixTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintMix);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.mix;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.mix = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.mixGlobal;\n\t}\n}\n\n/** Resets a physics constraint when specific animation times are reached. */\nexport class PhysicsConstraintResetTimeline extends Timeline implements ConstraintTimeline {\n\tprivate static propertyIds: string[] = [Property.physicsConstraintReset.toString()];\n\n\t/** The index of the physics constraint in {@link Skeleton.contraints} that will be reset when this timeline is\n\t* applied, or -1 if all physics constraints in the skeleton will be reset. */\n\treadonly constraintIndex: number;\n\n\t/** @param constraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, ...PhysicsConstraintResetTimeline.propertyIds);\n\t\tthis.constraintIndex = constraintIndex;\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive. */\n\tsetFrame (frame: number, time: number) {\n\t\tthis.frames[frame] = time;\n\t}\n\n\t/** Resets the physics constraint when frames > `lastTime` and <= `time`. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tlet constraint: PhysicsConstraint | undefined;\n\t\tif (this.constraintIndex !== -1) {\n\t\t\tconstraint = skeleton.constraints[this.constraintIndex] as PhysicsConstraint;\n\t\t\tif (!constraint.active) return;\n\t\t}\n\n\t\tconst frames = this.frames;\n\n\t\tif (lastTime > time) { // Apply after lastTime for looped animations.\n\t\t\tthis.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, false, false, false, false);\n\t\t\tlastTime = -1;\n\t\t} else if (lastTime >= frames[frames.length - 1]) // Last time is after last frame.\n\t\t\treturn;\n\t\tif (time < frames[0]) return;\n\n\t\tif (lastTime < frames[0] || time >= frames[Timeline.search(frames, lastTime) + 1]) {\n\t\t\tif (constraint != null)\n\t\t\t\tconstraint.reset(skeleton);\n\t\t\telse {\n\t\t\t\tfor (const constraint of skeleton.physics) {\n\t\t\t\t\tif (constraint.active) constraint.reset(skeleton);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes {@link SliderPose.time}. */\nexport class SliderTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.sliderTime);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as Slider;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.time = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.time, constraint.data.setupPose.time);\n\t\t}\n\t}\n}\n\n/** Changes {@link SliderPose.mix}. */\nexport class SliderMixTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.sliderMix);\n\t\tthis.additive = true;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as Slider;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.mix = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.mix, constraint.data.setupPose.mix);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\n/** biome-ignore-all lint/style/noNonNullAssertion: reference runtime expects some nullable to not be null */\n\nimport { Animation, AttachmentTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, RotateTimeline, Timeline } from \"./Animation.js\";\nimport type { AnimationStateData } from \"./AnimationStateData.js\";\nimport type { Event } from \"./Event.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { Interpolation, MathUtils, Pool, StringSet, Utils } from \"./Utils.js\";\n\n\n/** Applies animations over time, queues animations for later playback, mixes (crossfading) between animations, and applies\n * multiple animations on top of each other (layering).\n *\n * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations#AnimationState-API) in the Spine Runtimes Guide. */\nexport class AnimationState {\n\tstatic readonly emptyAnimation = new Animation(\"<empty>\", [], 0);\n\n\t/** The AnimationStateData to look up mix durations. */\n\tdata: AnimationStateData;\n\n\t/** The list of tracks that have had animations. May contain null entries for tracks that currently have no animation. */\n\treadonly tracks = [] as (TrackEntry | null)[];\n\n\t/** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower\n\t * or faster. Defaults to 1.\n\t *\n\t * See {@link TrackEntry.timeScale} to affect a single animation. */\n\ttimeScale = 1;\n\tunkeyedState = 0;\n\n\treadonly events = [] as Event[];\n\treadonly listeners = [] as AnimationStateListener[];\n\tqueue = new EventQueue(this);\n\tpropertyIds = new StringSet();\n\tanimationsChanged = false;\n\n\ttrackEntryPool = new Pool<TrackEntry>(() => new TrackEntry());\n\n\tconstructor (data: AnimationStateData) {\n\t\tthis.data = data;\n\t}\n\n\t/** Increments each track entry {@link TrackEntry.trackTime}, setting queued animations as current if needed. */\n\tupdate (delta: number) {\n\t\tdelta *= this.timeScale;\n\t\tconst tracks = this.tracks;\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tconst current = tracks[i];\n\t\t\tif (!current) continue;\n\n\t\t\tcurrent.animationLast = current.nextAnimationLast;\n\t\t\tcurrent.trackLast = current.nextTrackLast;\n\n\t\t\tlet currentDelta = delta * current.timeScale;\n\n\t\t\tif (current.delay > 0) {\n\t\t\t\tcurrent.delay -= currentDelta;\n\t\t\t\tif (current.delay > 0) continue;\n\t\t\t\tcurrentDelta = -current.delay;\n\t\t\t\tcurrent.delay = 0;\n\t\t\t}\n\n\t\t\tlet next = current.next;\n\t\t\tif (next) {\n\t\t\t\t// When the next entry's delay is passed, change to the next entry, preserving leftover time.\n\t\t\t\tconst nextTime = current.trackLast - next.delay;\n\t\t\t\tif (nextTime >= 0) {\n\t\t\t\t\tnext.delay = 0;\n\t\t\t\t\tnext.trackTime += current.timeScale === 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n\t\t\t\t\tcurrent.trackTime += currentDelta;\n\t\t\t\t\tthis.setTrack(i, next, true);\n\t\t\t\t\twhile (next.mixingFrom) {\n\t\t\t\t\t\tnext.mixTime += delta;\n\t\t\t\t\t\tnext = next.mixingFrom;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (current.trackLast >= current.trackEnd && !current.mixingFrom) {\n\t\t\t\ttracks[i] = null;\n\t\t\t\tthis.queue.end(current);\n\t\t\t\tthis.clearNext(current);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (current.mixingFrom && this.updateMixingFrom(current, delta)) {\n\t\t\t\t// End mixing from entries once all have completed.\n\t\t\t\tlet from: TrackEntry | null = current.mixingFrom;\n\t\t\t\tcurrent.mixingFrom = null;\n\t\t\t\tif (from) from.mixingTo = null;\n\t\t\t\twhile (from) {\n\t\t\t\t\tthis.queue.end(from);\n\t\t\t\t\tfrom = from.mixingFrom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent.trackTime += currentDelta;\n\t\t}\n\n\t\tthis.queue.drain();\n\t}\n\n\t/** Returns true when all mixing from entries are complete. */\n\tupdateMixingFrom (to: TrackEntry, delta: number): boolean {\n\t\tconst from = to.mixingFrom;\n\t\tif (!from) return true;\n\n\t\tconst finished = this.updateMixingFrom(from, delta);\n\n\t\tfrom.animationLast = from.nextAnimationLast;\n\t\tfrom.trackLast = from.nextTrackLast;\n\n\t\t// The from entry was applied at least once and the mix is complete.\n\t\tif (to.nextTrackLast !== -1 && to.mixTime >= to.mixDuration) {\n\t\t\t// Mixing is complete for all entries before the from entry or the mix is instantaneous.\n\t\t\tif (from.totalAlpha === 0 || to.mixDuration === 0) {\n\t\t\t\tto.mixingFrom = from.mixingFrom;\n\t\t\t\tif (from.mixingFrom != null) from.mixingFrom.mixingTo = to;\n\t\t\t\tif (from.totalAlpha === 0) {\n\t\t\t\t\tfor (let next = to; next.mixingTo != null; next = next.mixingTo)\n\t\t\t\t\t\tnext.keepHold = true;\n\t\t\t\t}\n\t\t\t\tthis.queue.end(from);\n\t\t\t}\n\t\t\treturn finished;\n\t\t}\n\n\t\tfrom.trackTime += delta * from.timeScale;\n\t\tto.mixTime += delta;\n\t\treturn false;\n\t}\n\n\t/** Poses the skeleton using the track entry animations. The animation state is not changed, so can be applied to multiple\n\t * skeletons to pose them identically.\n\t * @returns True if any animations were applied. */\n\tapply (skeleton: Skeleton): boolean {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tif (this.animationsChanged) this._animationsChanged();\n\n\t\tconst events = this.events;\n\t\tconst tracks = this.tracks;\n\t\tlet applied = false;\n\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tconst current = tracks[i];\n\t\t\tif (!current || current.delay > 0) continue;\n\t\t\tapplied = true;\n\n\t\t\t// Apply mixing from entries first.\n\t\t\tlet alpha = current.alpha;\n\t\t\tif (current.mixingFrom)\n\t\t\t\talpha *= this.applyMixingFrom(current, skeleton);\n\t\t\telse if (current.trackTime >= current.trackEnd && !current.next)\n\t\t\t\talpha = 0;\n\n\t\t\t// Apply current entry.\n\t\t\tlet animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;\n\t\t\tlet applyEvents: Event[] | null = events;\n\t\t\tif (current.reverse) {\n\t\t\t\tapplyTime = current.animation!.duration - applyTime;\n\t\t\t\tapplyEvents = null;\n\t\t\t}\n\t\t\tconst timelines = current.animation!.timelines;\n\t\t\tconst timelineCount = timelines.length;\n\t\t\tif ((i === 0 && alpha === 1)) {\n\t\t\t\tfor (let ii = 0; ii < timelineCount; ii++) {\n\t\t\t\t\t// Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets\n\t\t\t\t\t// to sometimes stop rendering when using color correction, as their RGBA values become NaN.\n\t\t\t\t\t// (https://github.com/pixijs/pixi-spine/issues/302)\n\t\t\t\t\tUtils.webkit602BugfixHelper(alpha);\n\t\t\t\t\tconst timeline = timelines[ii];\n\t\t\t\t\tif (timeline instanceof AttachmentTimeline)\n\t\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, true, true);\n\t\t\t\t\telse\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, true, false, false, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst timelineMode = current.timelineMode;\n\t\t\t\tconst retainAttachments = alpha >= current.alphaAttachmentThreshold;\n\t\t\t\tconst add = current.additive, shortestRotation = add || current.shortestRotation;\n\t\t\t\tconst firstFrame = !shortestRotation && current.timelinesRotation.length !== timelineCount << 1;\n\t\t\t\tif (firstFrame) current.timelinesRotation.length = timelineCount << 1;\n\n\t\t\t\tfor (let ii = 0; ii < timelineCount; ii++) {\n\t\t\t\t\tconst timeline = timelines[ii];\n\t\t\t\t\tconst fromSetup = (timelineMode[ii] & FIRST) !== 0;\n\t\t\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline) {\n\t\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, current.timelinesRotation, ii << 1, firstFrame);\n\t\t\t\t\t} else if (timeline instanceof AttachmentTimeline) {\n\t\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, fromSetup, retainAttachments);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This fixes the WebKit 602 specific issue described at https://esotericsoftware.com/forum/d/10109-ios-10-disappearing-graphics\n\t\t\t\t\t\tUtils.webkit602BugfixHelper(alpha);\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, fromSetup, add, false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current.reverse) this.eventsReverse(current, animationLast, animationTime);\n\t\t\tthis.queueEvents(current, animationTime);\n\t\t\tevents.length = 0;\n\t\t\tcurrent.nextAnimationLast = animationTime;\n\t\t\tcurrent.nextTrackLast = current.trackTime;\n\t\t}\n\n\t\t// Set slot attachments to the setup pose if they were set temporarily to apply deform timelines.\n\t\tconst setupState = this.unkeyedState + SETUP;\n\t\tconst slots = skeleton.slots;\n\t\tfor (let i = 0, n = skeleton.slots.length; i < n; i++) {\n\t\t\tconst slot = slots[i];\n\t\t\tif (slot.attachmentState === setupState) {\n\t\t\t\tconst attachmentName = slot.data.attachmentName;\n\t\t\t\tslot.pose.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n\t\t\t}\n\t\t}\n\t\tthis.unkeyedState += 2; // Reset.\n\n\t\tthis.queue.drain();\n\t\treturn applied;\n\t}\n\n\tapplyMixingFrom (to: TrackEntry, skeleton: Skeleton) {\n\t\tconst from = to.mixingFrom!;\n\t\tconst fromMix = from.mixingFrom !== null ? this.applyMixingFrom(from, skeleton) : 1;\n\t\tconst mix = to.mix();\n\n\t\tconst a = from.alpha * fromMix, keep = 1 - mix * to.alpha;\n\t\tconst alphaMix = a * (1 - mix), alphaHold = keep > 0 ? alphaMix / keep : a;\n\n\t\tconst timelines = from.animation!.timelines;\n\t\tconst timelineCount = timelines.length;\n\t\tconst timelineMode = from.timelineMode;\n\t\tconst timelineHoldMix = from.timelineHoldMix;\n\n\t\tconst retainAttachments = mix < from.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold;\n\t\tconst add = from.additive, shortestRotation = add || from.shortestRotation;\n\t\tconst firstFrame = !shortestRotation && from.timelinesRotation.length !== timelineCount << 1;\n\t\tif (firstFrame) from.timelinesRotation.length = timelineCount << 1;\n\t\tconst timelinesRotation = from.timelinesRotation;\n\n\t\tlet animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;\n\t\tlet events = null;\n\t\tif (from.reverse)\n\t\t\tapplyTime = from.animation!.duration - applyTime;\n\t\telse if (mix < from.eventThreshold) //\n\t\t\tevents = this.events;\n\n\t\tfrom.totalAlpha = 0;\n\n\t\tfor (let i = 0; i < timelineCount; i++) {\n\t\t\tconst timeline = timelines[i];\n\t\t\tconst mode = timelineMode[i];\n\t\t\tconst fromSetup = (mode & FIRST) !== 0;\n\t\t\tlet alpha = 0;\n\t\t\tif ((mode & HOLD) !== 0) {\n\t\t\t\tconst holdMix = timelineHoldMix[i];\n\t\t\t\talpha = holdMix == null ? alphaHold : alphaHold * (1 - holdMix.mix());\n\t\t\t} else {\n\t\t\t\tif (!drawOrder && timeline instanceof DrawOrderTimeline && !fromSetup) continue;\n\t\t\t\talpha = alphaMix;\n\t\t\t}\n\t\t\tfrom.totalAlpha += alpha;\n\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline) {\n\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, timelinesRotation, i << 1, firstFrame);\n\t\t\t} else if (timeline instanceof AttachmentTimeline)\n\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, fromSetup,\n\t\t\t\t\tretainAttachments && alpha >= from.alphaAttachmentThreshold);\n\t\t\telse {\n\t\t\t\tconst out = !drawOrder || !(timeline instanceof DrawOrderTimeline) || !fromSetup;\n\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, events, alpha, fromSetup, add, out, false);\n\t\t\t}\n\t\t}\n\n\t\tif (from.reverse && mix < from.eventThreshold) this.eventsReverse(from, animationLast, animationTime);\n\t\tif (to.mixDuration > 0) this.queueEvents(from, animationTime);\n\t\tthis.events.length = 0;\n\n\t\tfrom.nextAnimationLast = animationTime;\n\t\tfrom.nextTrackLast = from.trackTime;\n\t\treturn mix;\n\t}\n\n\t/** Applies the attachment timeline and sets {@link Slot.attachmentState}.\n\t * @param retain True if the attachment remains after apply, false if temporary for deform timelines. */\n\tapplyAttachmentTimeline (timeline: AttachmentTimeline, skeleton: Skeleton, time: number, fromSetup: boolean, retain: boolean) {\n\t\tconst slot = skeleton.slots[timeline.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tif (!retain && slot.attachmentState === this.unkeyedState + RETAIN) return;\n\n\t\tlet setup = time < timeline.frames[0];\n\t\tlet name = null;\n\t\tif (!setup) {\n\t\t\tname = timeline.attachmentNames[Timeline.search(timeline.frames, time)];\n\t\t\tsetup = !retain && name == null;\n\t\t}\n\t\tif (setup) {\n\t\t\tif (!fromSetup) return;\n\t\t\tname = slot.data.attachmentName;\n\t\t}\n\t\tslot.pose.setAttachment(name == null ? null : skeleton.getAttachment(slot.data.index, name));\n\t\tif (retain)\n\t\t\tslot.attachmentState = this.unkeyedState + RETAIN;\n\t\telse if (!setup) //\n\t\t\tslot.attachmentState = this.unkeyedState + SETUP;\n\t}\n\n\t/** Applies the rotate timeline, mixing with the current pose while keeping the same rotation direction chosen as the shortest\n\t * the first time the mixing was applied. */\n\tapplyRotateTimeline (timeline: RotateTimeline, skeleton: Skeleton, time: number, alpha: number, fromSetup: boolean,\n\t\ttimelinesRotation: Array<number>, i: number, firstFrame: boolean) {\n\n\t\tif (firstFrame) timelinesRotation[i] = 0;\n\n\t\tif (alpha === 1) {\n\t\t\ttimeline.apply(skeleton, 0, time, null, 1, fromSetup, false, false, false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst bone = skeleton.bones[timeline.boneIndex];\n\t\tif (!bone.active) return;\n\t\tconst pose = bone.pose, setup = bone.data.setupPose;\n\t\tconst frames = timeline.frames;\n\t\tif (time < frames[0]) { // Time is before first frame.\n\t\t\tif (fromSetup) pose.rotation = setup.rotation;\n\t\t\treturn;\n\t\t}\n\t\tconst r1 = fromSetup ? setup.rotation : pose.rotation;\n\t\tconst r2 = setup.rotation + timeline.getCurveValue(time);\n\n\t\t// Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.\n\t\tlet total = 0, diff = r2 - r1;\n\t\tdiff -= Math.ceil(diff / 360 - 0.5) * 360;\n\t\tif (diff === 0) {\n\t\t\ttotal = timelinesRotation[i];\n\t\t} else {\n\t\t\tlet lastTotal = 0, lastDiff = 0;\n\t\t\tif (firstFrame) {\n\t\t\t\tlastTotal = 0;\n\t\t\t\tlastDiff = diff;\n\t\t\t} else {\n\t\t\t\tlastTotal = timelinesRotation[i];\n\t\t\t\tlastDiff = timelinesRotation[i + 1];\n\t\t\t}\n\t\t\tconst loops = lastTotal - lastTotal % 360;\n\t\t\ttotal = diff + loops;\n\t\t\tlet current = diff >= 0, dir = lastTotal >= 0;\n\t\t\tif (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) !== MathUtils.signum(diff)) {\n\t\t\t\tif (Math.abs(lastTotal - loops) > 180) {\n\t\t\t\t\ttotal += 360 * MathUtils.signum(lastTotal);\n\t\t\t\t\tdir = current;\n\t\t\t\t} else if (loops !== 0)\n\t\t\t\t\ttotal -= 360 * MathUtils.signum(lastTotal);\n\t\t\t\telse\n\t\t\t\t\tdir = current;\n\t\t\t}\n\t\t\tif (dir !== current) total += 360 * MathUtils.signum(lastTotal);\n\t\t\ttimelinesRotation[i] = total;\n\t\t}\n\t\ttimelinesRotation[i + 1] = diff;\n\t\tpose.rotation = r1 + total * alpha;\n\t}\n\n\tqueueEvents (entry: TrackEntry, animationTime: number) {\n\t\tconst animationStart = entry.animationStart, animationEnd = entry.animationEnd, duration = animationEnd - animationStart;\n\t\tconst reverse = entry.reverse;\n\t\tlet split = entry.trackLast % duration;\n\t\tif (reverse) split = duration - split;\n\n\t\t// Queue events before complete.\n\t\tconst events = this.events;\n\t\tlet i = 0, n = events.length;\n\t\tfor (; i < n; i++) {\n\t\t\tconst event = events[i];\n\t\t\tif ((event.time < split) !== reverse) break; // java: if (event.time < split ^ reverse) break;\n\t\t\tif (event.time >= animationStart && event.time <= animationEnd) this.queue.event(entry, event);\n\t\t}\n\n\t\t// Queue complete if completed a loop iteration or the animation.\n\t\tlet complete = false;\n\t\tif (entry.loop) {\n\t\t\tif (duration === 0)\n\t\t\t\tcomplete = true;\n\t\t\telse {\n\t\t\t\tconst cycles = Math.floor(entry.trackTime / duration);\n\t\t\t\tcomplete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration);\n\t\t\t}\n\t\t} else\n\t\t\tcomplete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n\t\tif (complete) this.queue.complete(entry);\n\n\t\t// Queue events after complete.\n\t\tfor (; i < n; i++) {\n\t\t\tconst event = events[i];\n\t\t\tif (event.time >= animationStart && event.time <= animationEnd) this.queue.event(entry, event);\n\t\t}\n\t}\n\n\tprivate eventsReverse (entry: TrackEntry, animationLast: number, animationTime: number) {\n\t\tconst duration = entry.animation!.duration, from = duration - animationLast, to = duration - animationTime;\n\t\tconst timelines = entry.animation!.timelines;\n\t\tfor (let i = 0, n = entry.animation!.timelines.length; i < n; i++) {\n\t\t\tconst eventTimeline = timelines[i];\n\t\t\tif (!(eventTimeline instanceof EventTimeline)) continue;\n\t\t\tconst timelineEvents = eventTimeline.events;\n\t\t\tconst frames = eventTimeline.frames;\n\t\t\tconst frameCount = frames.length;\n\t\t\tif (from >= to) { // from -> to\n\t\t\t\tfor (let ii = 0; ii < frameCount; ii++) {\n\t\t\t\t\tif (frames[ii] < to) continue;\n\t\t\t\t\tif (frames[ii] >= from) break;\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let ii = 0; ii < frameCount; ii++) { // from -> 0\n\t\t\t\t\tif (frames[ii] >= from) break;\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t\t}\n\t\t\t\tlet ii = 0; // end -> to\n\t\t\t\tfor (; ii < frameCount; ii++)\n\t\t\t\t\tif (frames[ii] >= to) break;\n\t\t\t\tfor (; ii < frameCount; ii++)\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Removes all animations from all tracks, leaving skeletons in their current pose.\n\t *\n\t * Usually you want to use {@link setEmptyAnimations} to mix the skeletons back to the setup pose, rather than leaving\n\t * them in their current pose. */\n\tclearTracks () {\n\t\tconst oldDrainDisabled = this.queue.drainDisabled;\n\t\tthis.queue.drainDisabled = true;\n\t\tfor (let i = 0, n = this.tracks.length; i < n; i++)\n\t\t\tthis.clearTrack(i);\n\t\tthis.tracks.length = 0;\n\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\tthis.queue.drain();\n\t}\n\n\t/** Removes all animations from the track, leaving skeletons in their current pose.\n\t *\n\t * Usually you want to use {@link setEmptyAnimation} to mix the skeletons back to the setup pose, rather than\n\t * leaving them in their current pose. */\n\tclearTrack (trackIndex: number) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (trackIndex >= this.tracks.length) return;\n\t\tconst current = this.tracks[trackIndex];\n\t\tif (!current) return;\n\n\t\tthis.queue.end(current);\n\n\t\tthis.clearNext(current);\n\n\t\tlet entry = current;\n\t\twhile (true) {\n\t\t\tconst from = entry.mixingFrom;\n\t\t\tif (!from) break;\n\t\t\tthis.queue.end(from);\n\t\t\tentry.mixingFrom = null;\n\t\t\tentry.mixingTo = null;\n\t\t\tentry = from;\n\t\t}\n\n\t\tthis.tracks[current.trackIndex] = null;\n\n\t\tthis.queue.drain();\n\t}\n\n\tsetTrack (index: number, current: TrackEntry, interrupt: boolean) {\n\t\tconst from = this.expandToIndex(index);\n\t\tthis.tracks[index] = current;\n\t\tcurrent.previous = null;\n\n\t\tif (from) {\n\t\t\tfrom.next = null;\n\t\t\tif (interrupt) this.queue.interrupt(from);\n\t\t\tcurrent.mixingFrom = from;\n\t\t\tfrom.mixingTo = current;\n\t\t\tcurrent.mixTime = 0;\n\n\t\t\tfrom.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in.\n\t\t}\n\n\t\tthis.queue.start(current);\n\t}\n\n\t/** Sets an animation by name.\n\t *\n\t * See {@link setAnimation}. */\n\tsetAnimation (trackIndex: number, animationName: string, loop?: boolean): TrackEntry;\n\n\t/** Sets the current animation for a track, discarding any queued animations.\n\t *\n\t * If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed\n\t * from).\n\t * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n\t *           duration. In either case {@link TrackEntry.trackEnd} determines when the track is cleared.\n\t * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener.dispose} event occurs. */\n\tsetAnimation (trackIndex: number, animation: Animation, loop?: boolean): TrackEntry;\n\n\tsetAnimation (trackIndex: number, animationNameOrAnimation: string | Animation, loop = false): TrackEntry {\n\t\tif (typeof animationNameOrAnimation === \"string\")\n\t\t\treturn this.setAnimation1(trackIndex, animationNameOrAnimation, loop);\n\t\treturn this.setAnimation2(trackIndex, animationNameOrAnimation, loop);\n\t}\n\n\tprivate setAnimation1 (trackIndex: number, animationName: string, loop: boolean = false) {\n\t\tconst animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(`Animation not found: ${animationName}`);\n\t\treturn this.setAnimation2(trackIndex, animation, loop);\n\t}\n\n\t/** Sets the current animation for a track, discarding any queued animations.\n\t *\n\t * If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed\n\t * from).\n\t * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n\t *           duration. In either case {@link TrackEntry.getTrackEnd} determines when the track is cleared.\n\t * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener.dispose} event occurs. */\n\tprivate setAnimation2 (trackIndex: number, animation: Animation, loop: boolean = false) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (!animation) throw new Error(\"animation cannot be null.\");\n\t\tlet interrupt = true;\n\t\tlet current = this.expandToIndex(trackIndex);\n\t\tif (current) {\n\t\t\tif (current.nextTrackLast === -1 && current.animation === animation) {\n\t\t\t\t// Don't mix from an entry that was never applied.\n\t\t\t\tthis.tracks[trackIndex] = current.mixingFrom;\n\t\t\t\tthis.queue.interrupt(current);\n\t\t\t\tthis.queue.end(current);\n\t\t\t\tthis.clearNext(current);\n\t\t\t\tcurrent = current.mixingFrom;\n\t\t\t\tinterrupt = false;\n\t\t\t} else\n\t\t\t\tthis.clearNext(current);\n\t\t}\n\t\tconst entry = this.trackEntry(trackIndex, animation, loop, current);\n\t\tthis.setTrack(trackIndex, entry, interrupt);\n\t\tthis.queue.drain();\n\t\treturn entry;\n\t}\n\n\t/** Queues an animation by name.\n\t *\n\t * See {@link addAnimation}. */\n\taddAnimation (trackIndex: number, animationName: string, loop?: boolean, delay?: number): TrackEntry;\n\n\t/** Adds an animation to be played after the current or last queued animation for a track. If the track has no entries, this is\n\t * equivalent to calling {@link setAnimation}.\n\t * @param delay If > 0, sets {@link TrackEntry.delay}. If <= 0, the delay set is the duration of the previous track entry\n\t *           minus any mix duration (from {@link data}) plus the specified `delay` (ie the mix ends at (when\n\t *           `delay` = 0) or before (when `delay` < 0) the previous track entry duration). If the\n\t *           previous entry is looping, its next loop completion is used instead of its duration.\n\t * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener.dispose} event occurs. */\n\taddAnimation (trackIndex: number, animation: Animation, loop?: boolean, delay?: number): TrackEntry;\n\n\taddAnimation (trackIndex: number, animationNameOrAnimation: string | Animation, loop = false, delay: number = 0): TrackEntry {\n\t\tif (typeof animationNameOrAnimation === \"string\")\n\t\t\treturn this.addAnimation1(trackIndex, animationNameOrAnimation, loop, delay);\n\t\treturn this.addAnimation2(trackIndex, animationNameOrAnimation, loop, delay);\n\t}\n\n\tprivate addAnimation1 (trackIndex: number, animationName: string, loop: boolean = false, delay: number = 0) {\n\t\tconst animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(`Animation not found: ${animationName}`);\n\t\treturn this.addAnimation2(trackIndex, animation, loop, delay);\n\t}\n\n\tprivate addAnimation2 (trackIndex: number, animation: Animation, loop: boolean = false, delay: number = 0) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (!animation) throw new Error(\"animation cannot be null.\");\n\n\t\tlet last = this.expandToIndex(trackIndex);\n\t\tif (last) {\n\t\t\twhile (last.next)\n\t\t\t\tlast = last.next;\n\t\t}\n\n\t\tconst entry = this.trackEntry(trackIndex, animation, loop, last);\n\n\t\tif (!last) {\n\t\t\tthis.setTrack(trackIndex, entry, true);\n\t\t\tthis.queue.drain();\n\t\t\tif (delay < 0) delay = 0;\n\t\t} else {\n\t\t\tlast.next = entry;\n\t\t\tentry.previous = last;\n\t\t\tif (delay <= 0) delay = Math.max(delay + last.getTrackComplete() - entry.mixDuration, 0);\n\t\t}\n\n\t\tentry.delay = delay;\n\t\treturn entry;\n\t}\n\n\t/** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's\n\t * {@link TrackEntry.mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.\n\t *\n\t * Mixing out is done by setting an empty animation with a mix duration using either {@link setEmptyAnimation},\n\t * {@link setEmptyAnimations}, or {@link addEmptyAnimation}. Mixing to an empty animation causes\n\t * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation\n\t * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of\n\t * 0 still needs to be applied one more time to mix out, so the properties it was animating are reverted.\n\t *\n\t * Mixing in is done by first setting an empty animation, then adding an animation using\n\t * {@link addAnimation} with the desired delay (an empty animation has a duration of 0) and on\n\t * the returned track entry, set the {@link TrackEntry.setMixDuration}. Mixing from an empty animation causes the new\n\t * animation to be applied more and more over the mix duration. Properties keyed in the new animation transition from the value\n\t * from lower tracks or from the setup pose value if no lower tracks key the property to the value keyed in the new animation.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine\n\t * Runtimes Guide. */\n\tsetEmptyAnimation (trackIndex: number, mixDuration: number = 0) {\n\t\tconst entry = this.setAnimation(trackIndex, AnimationState.emptyAnimation, false);\n\t\tentry.mixDuration = mixDuration;\n\t\tentry.trackEnd = mixDuration;\n\t\treturn entry;\n\t}\n\n\t/** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's\n\t * {@link TrackEntry.mixDuration}. If the track has no entries, it is equivalent to calling\n\t * {@link setEmptyAnimation}.\n\t *\n\t * See {@link setEmptyAnimation} and\n\t * <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine Runtimes\n\t * Guide.\n\t * @param delay If > 0, sets {@link TrackEntry.delay}. If <= 0, the delay set is the duration of the previous track entry minus\n\t *           any mix duration plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before\n\t *           (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop\n\t *           completion is used instead of its duration.\n\t * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener.dispose} event occurs. */\n\taddEmptyAnimation (trackIndex: number, mixDuration: number = 0, delay: number = 0) {\n\t\tconst entry = this.addAnimation(trackIndex, AnimationState.emptyAnimation, false, delay);\n\t\tif (delay <= 0) entry.delay = Math.max(entry.delay + entry.mixDuration - mixDuration, 0);\n\t\tentry.mixDuration = mixDuration;\n\t\tentry.trackEnd = mixDuration;\n\t\treturn entry;\n\t}\n\n\t/** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix duration.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine\n\t * Runtimes Guide. */\n\tsetEmptyAnimations (mixDuration: number = 0) {\n\t\tconst oldDrainDisabled = this.queue.drainDisabled;\n\t\tthis.queue.drainDisabled = true;\n\t\tfor (let i = 0, n = this.tracks.length; i < n; i++) {\n\t\t\tconst current = this.tracks[i];\n\t\t\tif (current) this.setEmptyAnimation(current.trackIndex, mixDuration);\n\t\t}\n\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\tthis.queue.drain();\n\t}\n\n\texpandToIndex (index: number) {\n\t\tif (index < this.tracks.length) return this.tracks[index];\n\t\tUtils.ensureArrayCapacity(this.tracks, index + 1, null);\n\t\tthis.tracks.length = index + 1;\n\t\treturn null;\n\t}\n\n\t/** @param last May be null. */\n\ttrackEntry (trackIndex: number, animation: Animation, loop: boolean, last: TrackEntry | null) {\n\t\tconst entry = this.trackEntryPool.obtain();\n\t\tentry.reset();\n\t\tentry.trackIndex = trackIndex;\n\t\tentry.animation = animation;\n\t\tentry.loop = loop;\n\n\t\tentry.additive = false;\n\t\tentry.reverse = false;\n\t\tentry.shortestRotation = false;\n\n\t\tentry.eventThreshold = 0;\n\t\tentry.alphaAttachmentThreshold = 0;\n\t\tentry.mixAttachmentThreshold = 0;\n\t\tentry.mixDrawOrderThreshold = 0;\n\n\t\tentry.animationStart = 0;\n\t\tentry.animationEnd = animation.duration;\n\t\tentry.animationLast = -1;\n\t\tentry.nextAnimationLast = -1;\n\n\t\tentry.delay = 0;\n\t\tentry.trackTime = 0;\n\t\tentry.trackLast = -1;\n\t\tentry.nextTrackLast = -1;\n\t\tentry.trackEnd = Number.MAX_VALUE;\n\t\tentry.timeScale = 1;\n\n\t\tentry.alpha = 1;\n\t\tentry.mixTime = 0;\n\t\tentry.mixDuration = !last ? 0 : this.data.getMix(last.animation!, animation);\n\t\tentry.totalAlpha = 0;\n\t\tentry.keepHold = false;\n\t\treturn entry;\n\t}\n\n\t/** Removes {@link TrackEntry.next} and all entries after it for the specified entry. */\n\tclearNext (entry: TrackEntry) {\n\t\tlet next = entry.next;\n\t\twhile (next) {\n\t\t\tthis.queue.dispose(next);\n\t\t\tnext = next.next;\n\t\t}\n\t\tentry.next = null;\n\t}\n\n\t_animationsChanged () {\n\t\tthis.animationsChanged = false;\n\n\t\tconst tracks = this.tracks;\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tlet entry = tracks[i];\n\t\t\tif (!entry) continue;\n\t\t\twhile (entry.mixingFrom)\n\t\t\t\tentry = entry.mixingFrom;\n\t\t\tdo {\n\t\t\t\tthis.computeHold(entry);\n\t\t\t\tentry = entry.mixingTo;\n\t\t\t} while (entry);\n\t\t}\n\t\tthis.propertyIds.clear();\n\t}\n\n\tcomputeHold (entry: TrackEntry) {\n\t\tconst timelines = entry.animation!.timelines;\n\t\tconst timelinesCount = entry.animation!.timelines.length;\n\t\tconst timelineMode = entry.timelineMode;\n\t\ttimelineMode.length = timelinesCount;\n\t\tconst timelineHoldMix = entry.timelineHoldMix;\n\t\ttimelineHoldMix.length = 0;\n\t\tconst propertyIds = this.propertyIds;\n\t\tconst add = entry.additive, keepHold = entry.keepHold;\n\t\tconst to = entry.mixingTo;\n\n\t\touter:\n\t\tfor (let i = 0; i < timelinesCount; i++) {\n\t\t\tconst timeline = timelines[i];\n\t\t\tconst ids = timeline.propertyIds;\n\t\t\tconst first = propertyIds.addAll(ids)\n\t\t\t\t&& !(timeline instanceof DrawOrderFolderTimeline && propertyIds.contains(DrawOrderTimeline.propertyID));\n\n\t\t\tif (add && timeline.additive) {\n\t\t\t\ttimelineMode[i] = first ? FIRST : SUBSEQUENT;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (let from = entry.mixingFrom; from != null; from = from.mixingFrom) {\n\t\t\t\tif (from.animation!.hasTimeline(ids)) {\n\t\t\t\t\t// An earlier entry on this track keys this property, isolating it from lower tracks.\n\t\t\t\t\ttimelineMode[i] = SUBSEQUENT;\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hold if the next entry will overwrite this property.\n\t\t\tlet mode: number;\n\t\t\tif (to === null || timeline.instant || (to.additive && timeline.additive) || !to.animation?.hasTimeline(ids))\n\t\t\t\tmode = first ? FIRST : SUBSEQUENT;\n\t\t\telse {\n\t\t\t\tmode = first ? HOLD_FIRST : HOLD;\n\t\t\t\t// Find next entry that doesn't overwrite this property. Its mix fades out the hold, instead of it ending abruptly.\n\t\t\t\tfor (let next = to.mixingTo; next != null; next = next.mixingTo) {\n\t\t\t\t\tif ((next.additive && timeline.additive) || !next.animation?.hasTimeline(ids)) {\n\t\t\t\t\t\tif (next.mixDuration > 0) timelineHoldMix[i] = next;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (keepHold) mode = (mode & ~HOLD) | (timelineMode[i] & HOLD);\n\t\t\ttimelineMode[i] = mode;\n\t\t}\n\t}\n\n\t/** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */\n\tgetTrack (trackIndex: number) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (trackIndex >= this.tracks.length) return null;\n\t\treturn this.tracks[trackIndex];\n\t}\n\n\n\t/** Adds a listener to receive events for all track entries. */\n\taddListener (listener: AnimationStateListener) {\n\t\tif (!listener) throw new Error(\"listener cannot be null.\");\n\t\tthis.listeners.push(listener);\n\t}\n\n\t/** Removes the listener added with {@link addListener}. */\n\tremoveListener (listener: AnimationStateListener) {\n\t\tconst index = this.listeners.indexOf(listener);\n\t\tif (index >= 0) this.listeners.splice(index, 1);\n\t}\n\n\t/** Removes all listeners added with {@link addListener}. */\n\tclearListeners () {\n\t\tthis.listeners.length = 0;\n\t}\n\n\t/** Discards all listener notifications that have not yet been delivered. This can be useful to call from an\n\t * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery\n\t * are not wanted because new animations are being set. */\n\tclearListenerNotifications () {\n\t\tthis.queue.clear();\n\t}\n}\n\n/** Stores settings and other state for the playback of an animation on an {@link AnimationState} track.\n *\n * References to a track entry must not be kept after the {@link AnimationStateListener.dispose} event occurs. */\nexport class TrackEntry {\n\t/** The animation to apply for this track entry. */\n\tanimation: Animation | null = null;\n\n\tprevious: TrackEntry | null = null;\n\n\t/** The animation queued to start after this animation, or null. `next` makes up a linked list. */\n\tnext: TrackEntry | null = null;\n\n\t/** The track entry for the previous animation when mixing to this animation, or null if no mixing is currently occurring.\n\t * When mixing from multiple animations, `mixingFrom` makes up a doubly linked list. */\n\tmixingFrom: TrackEntry | null = null;\n\n\t/** The track entry for the next animation when mixing from this animation, or null if no mixing is currently occurring.\n\t * When mixing to multiple animations, `mixingTo` makes up a doubly linked list. */\n\tmixingTo: TrackEntry | null = null;\n\n\t/** The listener for events generated by this track entry, or null.\n\t *\n\t * A track entry returned from {@link AnimationState.setAnimation} is already the current animation\n\t * for the track, so the callback for listener {@link AnimationStateListener.start} will not be called. */\n\tlistener: AnimationStateListener | null = null;\n\n\t/** The index of the track where this track entry is either current or queued.\n\t *\n\t * See {@link AnimationState.getTrack}. */\n\ttrackIndex = 0;\n\n\t/** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n\t * duration. */\n\tloop = false;\n\n\t/** When true, timelines in this animation that support additive have their values added to the setup or current pose values\n\t * instead of replacing them. Additive can be set for a new track entry only before {@link AnimationState.apply}\n\t * is next called. */\n\tadditive = false;\n\n\t/** If true, the animation will be applied in reverse. */\n\treverse = false;\n\n\t/** If true, mixing rotation between tracks always uses the shortest rotation direction. If the rotation is animated, the\n\t * shortest rotation direction may change during the mix.\n\t *\n\t * If false, the shortest rotation direction is remembered when the mix starts and the same direction is used for the rest\n\t * of the mix. Defaults to false.\n\t *\n\t * See {@link resetRotationDirections}. */\n\tshortestRotation = false;\n\n\tkeepHold = false;\n\n\t/** When the interpolated mix percentage is less than the `eventThreshold` , event timelines are applied while\n\t * this animation is being mixed out. Defaults to 0, so event timelines are not applied while this animation is being mixed\n\t * out. */\n\teventThreshold = 0;\n\n\t/** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are\n\t * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this\n\t * animation is being mixed out. */\n\tmixAttachmentThreshold = 0;\n\n\t/** When the computed alpha is greater than `alphaAttachmentThreshold`, attachment timelines are applied. The\n\t * computed alpha includes {@link alpha} and the interpolated mix percentage. Defaults to 0, so attachment timelines are\n\t * always applied. */\n\talphaAttachmentThreshold = 0;\n\n\t/** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are\n\t * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this\n\t * animation is being mixed out. */\n\tmixDrawOrderThreshold = 0;\n\n\t/** The time in seconds for the first frame of this animation, both initially and after looping. Defaults to 0.\n\t *\n\t * When setting `animationStart` time, {@link animationLast} can be set to the same value to avoid firing events\n\t * from the start of the animation. */\n\tanimationStart = 0;\n\n\t/** The time in seconds for the last frame of this animation. Past this time, non-looping animations hold the pose at this\n\t * time while looping animations will loop back to {@link animationStart}. Defaults to the {@link Animation.duration}. */\n\tanimationEnd = 0;\n\n\n\t/** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. For example, when\n\t * this animation is applied, event timelines will fire all events between the `animationLast` time (exclusive)\n\t * and `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this\n\t * animation is applied. */\n\tanimationLast = 0;\n\n\tnextAnimationLast = 0;\n\n\t/** Seconds to postpone playing the animation. Must be >= 0. When this track entry is the current track entry,\n\t * `delay` postpones incrementing the {@link trackTime}. When this track entry is queued, `delay` is\n\t * the time from the start of the previous animation to when this track entry will become the current track entry (ie when\n\t * the previous track entry {@link trackTime} >= this track entry's `delay`).\n\t *\n\t * {@link timeScale} affects the delay.\n\t *\n\t * When passing `delay` <= 0 to {@link AnimationState.addAnimation} this\n\t * `delay` is set using a mix duration from {@link AnimationStateData}. To change the {@link mixDuration}\n\t * afterward, use {@link setMixDuration} so this `delay` is adjusted. */\n\tdelay = 0;\n\n\t/** The time in seconds this track entry has been the current track entry, starting at 0 and increasing forever. Compare to\n\t * {@link getAnimationTime}, which is always between {@link animationStart} and {@link animationEnd}.\n\t *\n\t * The track time can be set to start the animation at a time other than 0, without affecting looping. When doing so,\n\t * {@link animationLast} can be set to the same value to avoid firing events from the start of the animation.\n\t *\n\t * To set the time an animation starts and loops, use {@link animationStart} and {@link animationEnd}. */\n\ttrackTime = 0;\n\n\ttrackLast = 0; nextTrackLast = 0;\n\n\t/** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float\n\t * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time\n\t * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the\n\t * properties keyed by the animation are set to the setup pose and the track is cleared.\n\t *\n\t * Usually you want to use {@link AnimationState.addEmptyAnimation} rather than have the animation\n\t * abruptly cease being applied, leaving the current pose. */\n\ttrackEnd = 0;\n\n\t/** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or\n\t * faster. Defaults to 1.\n\t *\n\t * Values < 0 are not supported. To play an animation in reverse, use {@link reverse}.\n\t *\n\t * {@link mixTime} is not affected by track entry time scale, so {@link mixDuration} may need to be adjusted to match the\n\t * animation speed.\n\t *\n\t * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the\n\t * {@link delay} is set using the mix duration from {@link AnimationState.data}, assuming time scale to be 1. If the time\n\t * scale is not 1, the delay may need to be adjusted.\n\t *\n\t * See {@link AnimationState.timeScale} to affect all animations. */\n\ttimeScale = 0;\n\n\t/** Values < 1 mix this animation with the skeleton's current pose (either the setup pose or the pose from lower tracks).\n\t * Defaults to 1, which overwrites the skeleton's current pose with this animation.\n\t *\n\t * Alpha should be 1 on track 0.\n\t *\n\t * See {@link getAlphaAttachmentThreshold}. */\n\talpha = 0;\n\n\t/** Seconds elapsed from 0 to the {@link mixDuration} when mixing from the previous animation to this animation. May\n\t * be slightly more than `mixDuration` when the mix is complete. */\n\tmixTime = 0;\n\n\t/** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by\n\t * {@link AnimationStateData.getMix} based on the animation before this animation (if any).\n\t *\n\t * A mix duration of 0 still needs to be applied one more time to mix out, so the the properties it was animating are\n\t * reverted. A mix duration of 0 can be set at any time to end the mix on the next\n\t * {@link AnimationState.update | update}.\n\t *\n\t * The `mixDuration` can be set manually rather than use the value from\n\t * {@link AnimationStateData.getMix}. In that case, the `mixDuration` can be set for a new\n\t * track entry only before {@link AnimationState.update} is next called.\n\t *\n\t * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the\n\t * {@link getDelay} is set using the mix duration from {@link AnimationState.data}. If `mixDuration` is set\n\t * afterward, the delay needs to be adjusted:\n\t *\n\t * <pre>\n\t * entry.mixDuration = 0.25;<br>\n\t * entry.delay = entry.previous.getTrackComplete() - entry.mixDuration + 0;\n\t * </pre>\n\t *\n\t * Alternatively, use {@link setMixDuration} to set both the mix duration and recompute the delay:<br>\n\t *\n\t * <pre>\n\t  entry.setMixDuration(0.25f, 0); // mixDuration, delay\n\t * </pre>\n\t */\n\tmixDuration = 0;\n\n\ttotalAlpha = 0;\n\n\tmixInterpolation: Interpolation = Interpolation.linear;\n\n\t/** Sets both {@link getMixDuration} and {@link getDelay}.\n\t * @param delay If > 0, sets {@link getDelay}. If <= 0, the delay set is the duration of the previous track entry minus\n\t *           the specified mix duration plus the specified `delay` (ie the mix ends at (when `delay` =\n\t *           0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is\n\t *           looping, its next loop completion is used instead of its duration. */\n\tsetMixDuration (mixDuration: number, delay?: number) {\n\t\tthis.mixDuration = mixDuration;\n\t\tif (delay !== undefined) {\n\t\t\tif (delay <= 0) delay = this.previous == null ? 0 : Math.max(delay + this.previous.getTrackComplete() - mixDuration, 0);\n\t\t\tthis.delay = delay;\n\t\t}\n\t}\n\n\t/** The interpolation to apply to the mix percentage ({@link mixTime} / {@link mixDuration}) when mixing from the previous\n\t * animation to this animation. Defaults to linear. */\n\tsetMixInterpolation (mixInterpolation: Interpolation) {\n\t\tif (!mixInterpolation) throw new Error(\"mixInterpolation cannot be null.\");\n\t\tthis.mixInterpolation = mixInterpolation;\n\t}\n\n\tmix (): number {\n\t\tif (this.mixDuration === 0) return 1;\n\t\tlet mix = this.mixTime / this.mixDuration;\n\t\tif (mix >= 1) return 1;\n\t\tif (this.mixInterpolation === Interpolation.linear) return mix;\n\t\tmix = this.mixInterpolation.apply(mix);\n\t\tif (mix < 0) return 0;\n\t\tif (mix > 1) return 1;\n\t\treturn mix;\n\t}\n\n\t/** For each timeline:\n\t * - Bit 0, FIRST: 0 = mix from current pose, 1 = mix from setup pose. Timeline is first to set the property.\n\t * - Bit 1, HOLD: 0 = mix out using alphaMix, 1 = apply full alpha to prevent dipping. Timeline is first on its track to\n\t * set the property and the next entry (mixingTo) also sets it. When held, timelineHoldMix's mix controls how the hold fades\n\t * out (for 3+ entry chains where the chain eventually stops setting the property). */\n\ttimelineMode = [] as number[];\n\ttimelineHoldMix = [] as TrackEntry[];\n\ttimelinesRotation = [] as number[];\n\n\treset () {\n\t\tthis.next = null;\n\t\tthis.previous = null;\n\t\tthis.mixingFrom = null;\n\t\tthis.mixingTo = null;\n\t\tthis.mixInterpolation = Interpolation.linear;\n\t\tthis.animation = null;\n\t\tthis.listener = null;\n\t\tthis.timelineMode.length = 0;\n\t\tthis.timelineHoldMix.length = 0;\n\t\tthis.timelinesRotation.length = 0;\n\t}\n\n\t/** Uses {@link trackTime} to compute the `animationTime`, which is always between {@link animationStart} and\n\t * {@link animationEnd}. When `trackTime` is 0, `animationTime` is equal to the\n\t * `animationStart` time. */\n\tgetAnimationTime () {\n\t\tif (!this.loop) return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n\t\tconst duration = this.animationEnd - this.animationStart;\n\t\tif (duration === 0) return this.animationStart;\n\t\treturn (this.trackTime % duration) + this.animationStart;\n\t}\n\n\tsetAnimationLast (animationLast: number) {\n\t\tthis.animationLast = animationLast;\n\t\tthis.nextAnimationLast = animationLast;\n\t}\n\n\t/** Returns true if at least one loop has been completed.\n\t *\n\t * See {@link AnimationStateListener.complete}. */\n\tisComplete () {\n\t\treturn this.trackTime >= this.animationEnd - this.animationStart;\n\t}\n\n\t/** When {@link shortestRotation} is false, this clears the directions for mixing this entry's rotation. This can be useful\n\t * to avoid bones rotating the long way around when using {@link getAlpha} and starting animations on other tracks.\n\t *\n\t * Mixing involves finding a rotation between two others. There are two possible solutions: the short or the long way\n\t * around. When the two rotations change over time, which direction is the short or long way can also change. If the short\n\t * way was always chosen, bones flip to the other side when that direction became the long way. TrackEntry chooses the short\n\t * way the first time it is applied and remembers that direction. Resetting that direction makes it choose a new short way\n\t * on the next apply. */\n\tresetRotationDirections () {\n\t\tthis.timelinesRotation.length = 0;\n\t}\n\n\t/** If this track entry is non-looping, this is the track time in seconds when {@link animationEnd} is reached, or the\n\t * current {@link trackTime} if it has already been reached.\n\t *\n\t * If this track entry is looping, this is the track time when this animation will reach its next {@link animationEnd} (the\n\t * next loop completion). */\n\tgetTrackComplete () {\n\t\tconst duration = this.animationEnd - this.animationStart;\n\t\tif (duration !== 0) {\n\t\t\tif (this.loop) return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop.\n\t\t\tif (this.trackTime < duration) return duration; // Before duration.\n\t\t}\n\t\treturn this.trackTime; // Next update.\n\t}\n\n\t/** Returns true if this track entry has been applied at least once.\n\t *\n\t * See {@link AnimationState.apply}. */\n\twasApplied () {\n\t\treturn this.nextTrackLast !== -1;\n\t}\n\n\t/** Returns true if there is a {@link next} track entry and it will become the current track entry during the next\n\t * {@link AnimationState.update}. */\n\tisNextReady () {\n\t\treturn this.next != null && this.nextTrackLast - this.next.delay >= 0;\n\t}\n}\n\nexport class EventQueue {\n\tobjects: Array<EventType | TrackEntry | Event> = [];\n\tdrainDisabled = false;\n\tanimState: AnimationState;\n\n\tconstructor (animState: AnimationState) {\n\t\tthis.animState = animState;\n\t}\n\n\tstart (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.start);\n\t\tthis.objects.push(entry);\n\t\tthis.animState.animationsChanged = true;\n\t}\n\n\tinterrupt (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.interrupt);\n\t\tthis.objects.push(entry);\n\t}\n\n\tend (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.end);\n\t\tthis.objects.push(entry);\n\t\tthis.animState.animationsChanged = true;\n\t}\n\n\tdispose (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.dispose);\n\t\tthis.objects.push(entry);\n\t}\n\n\tcomplete (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.complete);\n\t\tthis.objects.push(entry);\n\t}\n\n\tevent (entry: TrackEntry, event: Event) {\n\t\tthis.objects.push(EventType.event);\n\t\tthis.objects.push(entry);\n\t\tthis.objects.push(event);\n\t}\n\n\tdrain () {\n\t\tif (this.drainDisabled) return; // Not reentrant.\n\t\tthis.drainDisabled = true;\n\n\t\tfor (let i = 0; i < this.objects.length; i += 2) {\n\t\t\tconst objects = this.objects;\n\t\t\tconst type = objects[i] as EventType;\n\t\t\tconst entry = objects[i + 1] as TrackEntry;\n\t\t\tconst listeners = this.animState.listeners.slice();\n\t\t\tswitch (type) {\n\t\t\t\tcase EventType.start:\n\t\t\t\t\tif (entry.listener?.start) entry.listener.start(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.start) listener.start(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.interrupt:\n\t\t\t\t\tif (entry.listener?.interrupt) entry.listener.interrupt(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.interrupt) listener.interrupt(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime does fall through\n\t\t\t\tcase EventType.end:\n\t\t\t\t\tif (entry.listener?.end) entry.listener.end(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.end) listener.end(entry);\n\t\t\t\t\t}\n\t\t\t\t// Fall through.\n\t\t\t\tcase EventType.dispose:\n\t\t\t\t\tif (entry.listener?.dispose) entry.listener.dispose(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.dispose) listener.dispose(entry);\n\t\t\t\t\t}\n\t\t\t\t\tthis.animState.trackEntryPool.free(entry);\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.complete:\n\t\t\t\t\tif (entry.listener?.complete) entry.listener.complete(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.complete) listener.complete(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.event: {\n\t\t\t\t\tconst event = objects[i++ + 2] as Event;\n\t\t\t\t\tif (entry.listener?.event) entry.listener.event(entry, event);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst listener = listeners[ii];\n\t\t\t\t\t\tif (listener.event) listener.event(entry, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.clear();\n\n\t\tthis.drainDisabled = false;\n\t}\n\n\tclear () {\n\t\tthis.objects.length = 0;\n\t}\n}\n\nexport enum EventType {\n\tstart, interrupt, end, dispose, complete, event\n}\n\n/** The interface to implement for receiving TrackEntry events. It is always safe to call AnimationState methods when receiving\n * events.\n *\n * TrackEntry events are collected during {@link AnimationState.update} and {@link AnimationState.apply} and\n * fired only after those methods are finished.\n *\n * See {@link TrackEntry.listener} and\n * {@link AnimationState.addListener}. */\nexport interface AnimationStateListener {\n\t/** Invoked when this entry has been set as the current entry. {@link end} will occur when this entry will no\n\t * longer be applied.\n\t *\n\t * When this event is triggered by calling {@link AnimationState.setAnimation}, take care not to\n\t * call {@link AnimationState.update} until after the TrackEntry has been configured. */\n\tstart?: (entry: TrackEntry) => void;\n\n\t/** Invoked when another entry has replaced this entry as the current entry. This entry may continue being applied for\n\t * mixing. */\n\tinterrupt?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry will never be applied again. This only occurs if this entry has previously been set as the\n\t * current entry ({@link start} was invoked). */\n\tend?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry will be disposed. This may occur without the entry ever being set as the current entry.\n\t * References to the entry should not be kept after dispose is called, as it may be destroyed or reused. */\n\tdispose?: (entry: TrackEntry) => void;\n\n\t/** Invoked every time this entry's animation completes a loop. This may occur during mixing (after\n\t * {@link interrupt}).\n\t *\n\t * If this entry's {@link TrackEntry.mixingTo} is not null, this entry is mixing out (it is not the current entry).\n\t *\n\t * Because this event is triggered at the end of {@link AnimationState.apply}, any animations set in response to\n\t * the event won't be applied until the next time the AnimationState is applied. */\n\tcomplete?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry's animation triggers an event. */\n\tevent?: (entry: TrackEntry, event: Event) => void;\n}\n\nexport abstract class AnimationStateAdapter implements AnimationStateListener {\n\tstart (entry: TrackEntry) {\n\t}\n\n\tinterrupt (entry: TrackEntry) {\n\t}\n\n\tend (entry: TrackEntry) {\n\t}\n\n\tdispose (entry: TrackEntry) {\n\t}\n\n\tcomplete (entry: TrackEntry) {\n\t}\n\n\tevent (entry: TrackEntry, event: Event) {\n\t}\n}\n\nexport const SUBSEQUENT = 0;\nexport const FIRST = 1;\nexport const HOLD = 2;\nexport const HOLD_FIRST = 3;\n\nexport const SETUP = 1;\nexport const RETAIN = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Animation } from \"./Animation.js\";\nimport type { AnimationState, TrackEntry } from \"./AnimationState.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { StringMap } from \"./Utils.js\";\n\n\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed on the same track. */\nexport class AnimationStateData {\n\t/** The SkeletonData to look up animations when they are specified by name. */\n\tskeletonData: SkeletonData;\n\n\tanimationToMixTime: StringMap<number> = {};\n\n\t/** The mix duration to use when no mix duration has been defined between two animations. */\n\tdefaultMix = 0;\n\n\tconstructor (skeletonData: SkeletonData) {\n\t\tif (!skeletonData) throw new Error(\"skeletonData cannot be null.\");\n\t\tthis.skeletonData = skeletonData;\n\t}\n\n\t/** Sets a mix duration by animation name.\n\t *\n\t * See {@link setMix}. */\n\tsetMix (fromName: string, to: string, duration: number): void;\n\n\t/** Sets the mix duration when changing from the specified animation to the other.\n\t *\n\t * See {@link TrackEntry.mixDuration}. */\n\tsetMix (from: Animation, to: Animation, duration: number): void;\n\n\tsetMix (from: string | Animation, to: string | Animation, duration: number) {\n\t\tif (typeof from === \"string\")\n\t\t\treturn this.setMix1(from, to as string, duration);\n\t\treturn this.setMix2(from, to as Animation, duration);\n\t}\n\n\tprivate setMix1 (fromName: string, toName: string, duration: number) {\n\t\tconst from = this.skeletonData.findAnimation(fromName);\n\t\tif (!from) throw new Error(`Animation not found: ${fromName}`);\n\t\tconst to = this.skeletonData.findAnimation(toName);\n\t\tif (!to) throw new Error(`Animation not found: ${toName}`);\n\t\tthis.setMix2(from, to, duration);\n\t}\n\n\tprivate setMix2 (from: Animation, to: Animation, duration: number) {\n\t\tif (!from) throw new Error(\"from cannot be null.\");\n\t\tif (!to) throw new Error(\"to cannot be null.\");\n\t\tconst key = `${from.name}.${to.name}`;\n\t\tthis.animationToMixTime[key] = duration;\n\t}\n\n\t/** Returns the mix duration to use when changing from the specified animation to the other on the same track, or the\n\t * {@link defaultMix} if no mix duration has been set. */\n\tgetMix (from: Animation, to: Animation) {\n\t\tconst key = `${from.name}.${to.name}`;\n\t\tconst value = this.animationToMixTime[key];\n\t\treturn value === undefined ? this.defaultMix : value;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Texture } from \"./Texture.js\";\nimport { TextureAtlas } from \"./TextureAtlas.js\";\nimport type { Disposable, StringMap } from \"./Utils.js\";\n\ntype AssetData = (Uint8Array | string | Texture | TextureAtlas | object) & Partial<Disposable>;\ntype AssetCallback<T extends AssetData> = (path: string, data: T) => void;\ntype ErrorCallback = (path: string, message: string) => void;\n\nexport type TextureLoader = (image: HTMLImageElement | ImageBitmap, pma?: boolean) => Texture;\n\nexport class AssetManagerBase implements Disposable {\n\tprivate errors: StringMap<string> = {};\n\tprivate toLoad = 0;\n\tprivate loaded = 0;\n\tprivate texturePmaInfo: Record<string, boolean> = {};\n\n\tconstructor (\n\t\tprivate textureLoader: TextureLoader,\n\t\tprivate pathPrefix: string = \"\",\n\t\tprivate downloader = new Downloader(),\n\t\tprivate cache = new AssetCache()) {\n\t}\n\n\tprivate start (path: string): string {\n\t\tthis.toLoad++;\n\t\treturn this.pathPrefix + path;\n\t}\n\n\tprivate success<T extends AssetData> (callback: AssetCallback<T>, path: string, asset: T) {\n\t\tthis.toLoad--;\n\t\tthis.loaded++;\n\t\tthis.cache.assets[path] = asset;\n\t\tthis.cache.assetsRefCount[path] = (this.cache.assetsRefCount[path] || 0) + 1;\n\t\tif (callback) callback(path, asset);\n\t}\n\n\tprivate error (callback: (path: string, message: string) => void, path: string, message: string) {\n\t\tthis.toLoad--;\n\t\tthis.loaded++;\n\t\tthis.errors[path] = message;\n\t\tif (callback) callback(path, message);\n\t}\n\n\tloadAll () {\n\t\tconst promise = new Promise((resolve: (assetManager: AssetManagerBase) => void, reject: (errors: StringMap<string>) => void) => {\n\t\t\tconst check = () => {\n\t\t\t\tif (this.isLoadingComplete()) {\n\t\t\t\t\tif (this.hasErrors()) reject(this.errors);\n\t\t\t\t\telse resolve(this);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trequestAnimationFrame(check);\n\t\t\t}\n\t\t\trequestAnimationFrame(check);\n\t\t});\n\t\treturn promise;\n\t}\n\n\tsetRawDataURI (path: string, data: string) {\n\t\tthis.downloader.rawDataUris[this.pathPrefix + path] = data;\n\t}\n\n\tloadBinary (path: string,\n\t\tsuccess: (path: string, binary: Uint8Array) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<Uint8Array>((resolve, reject) => {\n\t\t\tthis.downloader.downloadBinary(path, (data: Uint8Array): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load binary ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tloadText (path: string,\n\t\tsuccess: (path: string, text: string) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tthis.downloader.downloadText(path, (data: string): void => {\n\t\t\tthis.success(success, path, data);\n\t\t}, (status: number, responseText: string): void => {\n\t\t\tthis.error(error, path, `Couldn't load text ${path}: status ${status}, ${responseText}`);\n\t\t});\n\t}\n\n\tloadJson (path: string,\n\t\tsuccess: (path: string, object: object) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<object>((resolve, reject) => {\n\t\t\tthis.downloader.downloadJson(path, (data: object): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load JSON ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\n\treuseAssets<T extends AssetData> (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<T> = () => { },\n\t\terror: ErrorCallback = () => { }\n\t) {\n\t\tconst loadedStatus = this.cache.getAsset(path);\n\t\tconst alreadyExistsOrLoading = loadedStatus !== undefined;\n\t\tif (alreadyExistsOrLoading) {\n\t\t\tthis.cache.assetsLoaded[path] = loadedStatus\n\t\t\t\t.then(data => {\n\t\t\t\t\t// necessary when user preloads an image into the cache.\n\t\t\t\t\t// texture loader is not avaiable in the cache, so we transform in GLTexture at first use\n\t\t\t\t\tdata = (data instanceof Image || data instanceof ImageBitmap) ? this.textureLoader(data) as T : data;\n\t\t\t\t\tthis.success(success, path, data as T);\n\t\t\t\t\treturn data;\n\t\t\t\t})\n\t\t\t\t.catch(errorMsg => {\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treturn undefined;\n\t\t\t\t});\n\t\t}\n\t\treturn alreadyExistsOrLoading;\n\t}\n\n\tloadTexture (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<Texture> = () => { },\n\t\terror: ErrorCallback = () => { }\n\t) {\n\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tconst pma = this.texturePmaInfo[path];\n\t\tthis.cache.assetsLoaded[path] = new Promise<Texture>((resolve, reject) => {\n\t\t\tconst isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n\t\t\tconst isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n\t\t\tif (isWebWorker) {\n\t\t\t\tfetch(path, { mode: <RequestMode>\"cors\" }).then((response) => {\n\t\t\t\t\tif (response.ok) return response.blob();\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, `Couldn't load image: ${path}`);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}).then((blob) => {\n\t\t\t\t\treturn blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n\t\t\t\t}).then((bitmap) => {\n\t\t\t\t\tif (bitmap) {\n\t\t\t\t\t\tconst texture = this.createTexture(path, pma, bitmap);\n\t\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\t\tresolve(texture);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst image = new Image();\n\t\t\t\timage.crossOrigin = \"anonymous\";\n\t\t\t\timage.onload = () => {\n\t\t\t\t\tconst texture = this.createTexture(path, pma, image);\n\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\tresolve(texture);\n\t\t\t\t};\n\t\t\t\timage.onerror = () => {\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t};\n\t\t\t\tif (this.downloader.rawDataUris[path]) path = this.downloader.rawDataUris[path];\n\t\t\t\timage.src = path;\n\t\t\t}\n\t\t});\n\t}\n\n\tloadTextureAtlas (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<TextureAtlas> = () => { },\n\t\terror: ErrorCallback = () => { },\n\t\tfileAlias?: Record<string, string>\n\t) {\n\t\tconst index = path.lastIndexOf(\"/\");\n\t\tconst parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(atlasText, parent, path, fileAlias);\n\t\t\t\t\tlet toLoad = atlas.pages.length, abort = false;\n\n\t\t\t\t\tif (toLoad === 0) {\n\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const page of atlas.pages) {\n\t\t\t\t\t\tthis.loadTexture(\n\t\t\t\t\t\t\tthis.texturePath(parent, page.name, fileAlias),\n\t\t\t\t\t\t\t(imagePath: string, texture: Texture) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tpage.setTexture(texture);\n\t\t\t\t\t\t\t\t\tif (--toLoad === 0) {\n\t\t\t\t\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(imagePath: string, message: string) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tconst errorMsg = `Couldn't load texture ${path} page image: ${imagePath}`;\n\t\t\t\t\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\t\t\t\t\treject(errorMsg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tabort = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (e: unknown) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as Error).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tloadTextureAtlasButNoTextures (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<TextureAtlas> = () => { },\n\t\terror: ErrorCallback = () => { },\n\t) {\n\t\tconst index = path.lastIndexOf(\"/\");\n\t\tconst parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(atlasText, parent, path);\n\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\tresolve(atlas);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as Error).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tasync loadBinaryAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadBinary(path,\n\t\t\t\t(_, binary) => resolve(binary),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadJsonAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadJson(path,\n\t\t\t\t(_, object) => resolve(object),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAsync (path: string) {\n\t\treturn new Promise<Texture>((resolve, reject) => {\n\t\t\tthis.loadTexture(path,\n\t\t\t\t(_, texture) => resolve(texture),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadTextureAtlas(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasButNoTexturesAsync (path: string) {\n\t\treturn new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.loadTextureAtlasButNoTextures(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tsetCache (cache: AssetCache) {\n\t\tthis.cache = cache;\n\t}\n\n\tget (path: string) {\n\t\treturn this.cache.assets[this.pathPrefix + path];\n\t}\n\n\trequire (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset) return asset;\n\t\tconst error = this.errors[path];\n\t\tthrow Error(`Asset not found: ${path}${error ? `\\n${error}` : \"\"}`);\n\t}\n\n\tremove (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset.dispose) asset.dispose();\n\t\tdelete this.cache.assets[path];\n\t\tdelete this.cache.assetsRefCount[path];\n\t\tdelete this.cache.assetsLoaded[path];\n\t\treturn asset;\n\t}\n\n\tremoveAll () {\n\t\tfor (const path in this.cache.assets) {\n\t\t\tconst asset = this.cache.assets[path];\n\t\t\tif (asset.dispose) asset.dispose();\n\t\t}\n\t\tthis.cache.assets = {};\n\t\tthis.cache.assetsLoaded = {};\n\t\tthis.cache.assetsRefCount = {};\n\t}\n\n\tisLoadingComplete (): boolean {\n\t\treturn this.toLoad === 0;\n\t}\n\n\tgetToLoad (): number {\n\t\treturn this.toLoad;\n\t}\n\n\tgetLoaded (): number {\n\t\treturn this.loaded;\n\t}\n\n\tdispose () {\n\t\tthis.removeAll();\n\t}\n\n\t// dispose asset only if it's not used by others\n\tdisposeAsset (path: string) {\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset instanceof TextureAtlas) {\n\t\t\tasset.dispose();\n\t\t\treturn;\n\t\t}\n\t\tthis.disposeAssetInternal(path);\n\t}\n\n\thasErrors () {\n\t\treturn Object.keys(this.errors).length > 0;\n\t}\n\n\tgetErrors () {\n\t\treturn this.errors;\n\t}\n\n\tprivate disposeAssetInternal (path: string) {\n\t\tif (this.cache.assetsRefCount[path] > 0 && --this.cache.assetsRefCount[path] === 0) {\n\t\t\treturn this.remove(path);\n\t\t}\n\t}\n\n\tprivate createTextureAtlas (atlasText: string, parentPath: string, path: string, fileAlias?: Record<string, string>): TextureAtlas {\n\t\tconst atlas = new TextureAtlas(atlasText);\n\t\tatlas.dispose = () => {\n\t\t\tif (this.cache.assetsRefCount[path] <= 0) return;\n\t\t\tthis.disposeAssetInternal(path);\n\t\t\tfor (const page of atlas.pages) {\n\t\t\t\tpage.texture?.dispose();\n\t\t\t}\n\t\t}\n\t\tfor (const page of atlas.pages) {\n\t\t\tconst texturePath = this.texturePath(parentPath, page.name, fileAlias);\n\t\t\tthis.texturePmaInfo[this.pathPrefix + texturePath] = page.pma;\n\t\t}\n\t\treturn atlas;\n\t}\n\n\tprivate createTexture (path: string, pma: boolean, image: HTMLImageElement | ImageBitmap): Texture {\n\t\tconst texture = this.textureLoader(image, pma);\n\t\tconst textureDispose = texture.dispose.bind(texture);\n\t\ttexture.dispose = () => {\n\t\t\tif (this.disposeAssetInternal(path)) textureDispose();\n\t\t}\n\t\treturn texture;\n\t}\n\n\tprivate texturePath (parentPath: string, pageName: string, fileAlias?: Record<string, string>) {\n\t\tif (!fileAlias) return parentPath + pageName;\n\t\treturn fileAlias[pageName];\n\t}\n}\n\nexport class AssetCache {\n\tpublic assets: StringMap<AssetData> = {};\n\tpublic assetsRefCount: StringMap<number> = {};\n\tpublic assetsLoaded: StringMap<Promise<AssetData | undefined>> = {};\n\n\tstatic AVAILABLE_CACHES = new Map<string, AssetCache>();\n\tstatic getCache (id: string) {\n\t\tconst cache = AssetCache.AVAILABLE_CACHES.get(id);\n\t\tif (cache) return cache;\n\n\t\tconst newCache = new AssetCache();\n\t\tAssetCache.AVAILABLE_CACHES.set(id, newCache);\n\t\treturn newCache;\n\t}\n\n\tasync addAsset<T extends AssetData> (path: string, asset: T): Promise<T> {\n\t\tthis.assetsLoaded[path] = Promise.resolve(asset);\n\t\tthis.assets[path] = asset;\n\t\treturn asset;\n\t}\n\n\tgetAsset<T extends AssetData> (path: string): Promise<T> | undefined {\n\t\treturn this.assetsLoaded[path] as Promise<T> | undefined;\n\t}\n}\n\ntype DownloaderSuccessCallback<T extends AssetData = AssetData> = (data: T) => void;\ntype DownloaderErrorCallback = (status: number, responseText: string) => void;\n\nexport class Downloader {\n\tprivate callbacks: StringMap<Array<DownloaderSuccessCallback | DownloaderErrorCallback>> = {};\n\trawDataUris: StringMap<string> = {};\n\n\tdataUriToString (dataUri: string) {\n\t\tif (!dataUri.startsWith(\"data:\")) {\n\t\t\tthrow new Error(\"Not a data URI.\");\n\t\t}\n\n\t\tlet base64Idx = dataUri.indexOf(\"base64,\");\n\t\tif (base64Idx !== -1) {\n\t\t\tbase64Idx += \"base64,\".length;\n\t\t\treturn atob(dataUri.substr(base64Idx));\n\t\t} else {\n\t\t\treturn dataUri.substr(dataUri.indexOf(\",\") + 1);\n\t\t}\n\t}\n\n\tbase64ToUint8Array (base64: string): Uint8Array {\n\t\tvar binary_string = window.atob(base64);\n\t\tvar len = binary_string.length;\n\t\tvar bytes = new Uint8Array(len);\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tbytes[i] = binary_string.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\tdataUriToUint8Array (dataUri: string): Uint8Array {\n\t\tif (!dataUri.startsWith(\"data:\")) {\n\t\t\tthrow new Error(\"Not a data URI.\");\n\t\t}\n\n\t\tlet base64Idx = dataUri.indexOf(\"base64,\");\n\t\tif (base64Idx === -1) throw new Error(\"Not a binary data URI.\");\n\t\tbase64Idx += \"base64,\".length;\n\t\treturn this.base64ToUint8Array(dataUri.substr(base64Idx));\n\t}\n\n\tdownloadText (url: string, success: DownloaderSuccessCallback<string>, error: DownloaderErrorCallback) {\n\t\tif (this.start(url, success, error)) return;\n\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToString(rawDataUri));\n\t\t\t} catch (e) {\n\t\t\t\tthis.finish(url, 400, JSON.stringify(e));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst request = new XMLHttpRequest();\n\t\trequest.overrideMimeType(\"text/html\");\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : url, true);\n\t\tconst done = () => {\n\t\t\tthis.finish(url, request.status, request.responseText);\n\t\t};\n\t\trequest.onload = done;\n\t\trequest.onerror = done;\n\t\trequest.send();\n\t}\n\n\tdownloadJson (url: string, success: DownloaderSuccessCallback<object>, error: DownloaderErrorCallback) {\n\t\tthis.downloadText(url, (data: string): void => {\n\t\t\tsuccess(JSON.parse(data));\n\t\t}, error);\n\t}\n\n\tdownloadBinary (url: string, success: (data: Uint8Array) => void, error: DownloaderErrorCallback) {\n\t\tif (this.start(url, success, error)) return;\n\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToUint8Array(rawDataUri));\n\t\t\t} catch (e) {\n\t\t\t\tthis.finish(url, 400, JSON.stringify(e));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst request = new XMLHttpRequest();\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : url, true);\n\t\trequest.responseType = \"arraybuffer\";\n\t\tconst onerror = () => {\n\t\t\tthis.finish(url, request.status, request.response);\n\t\t};\n\t\trequest.onload = () => {\n\t\t\tif (request.status === 200 || request.status === 0)\n\t\t\t\tthis.finish(url, 200, new Uint8Array(request.response as ArrayBuffer));\n\t\t\telse\n\t\t\t\tonerror();\n\t\t};\n\t\trequest.onerror = onerror;\n\t\trequest.send();\n\t}\n\n\tprivate start<T extends AssetData> (url: string, success: DownloaderSuccessCallback<T>, error: DownloaderErrorCallback) {\n\t\tlet callbacks = this.callbacks[url];\n\t\ttry {\n\t\t\tif (callbacks) return true;\n\t\t\tthis.callbacks[url] = callbacks = [];\n\t\t} finally {\n\t\t\tcallbacks.push(success as DownloaderSuccessCallback<AssetData>, error);\n\t\t}\n\t}\n\n\tprivate finish (url: string, status: number, data: AssetData) {\n\t\tconst callbacks = this.callbacks[url];\n\t\tdelete this.callbacks[url];\n\t\tif (status === 200 || status === 0) {\n\t\t\tfor (let i = 0, n = callbacks.length; i < n; i += 2)\n\t\t\t\t(callbacks[i] as DownloaderSuccessCallback)(data);\n\t\t} else {\n\t\t\tfor (let i = 1, n = callbacks.length; i < n; i += 2)\n\t\t\t\t(callbacks[i] as DownloaderErrorCallback)(status, data as string);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { SkeletonBounds } from \"../SkeletonBounds.js\";\nimport { Color } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\n\n/** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle\n * effects, and more.\n *\n * See {@link SkeletonBounds} and [Bounding Boxes](http://esotericsoftware.com/spine-bounding-boxes) in the Spine User\n * Guide. */\nexport class BoundingBoxAttachment extends VertexAttachment {\n\tcolor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new BoundingBoxAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { SlotData } from \"../SlotData.js\";\nimport { Color } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\n\n/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */\nexport class ClippingAttachment extends VertexAttachment {\n\t/** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of\n\t * the skeleton's rendering. */\n\tendSlot: SlotData | null = null;\n\n\t/** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the\n\t * convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping\n\t * always uses convex. */\n\tconvex = false;\n\n\t/** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is\n\t  * visible and clipping is convex. */\n\tinverse = false;\n\n\t// Nonessential.\n\t/** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons\n\t * are not usually rendered at runtime. */\n\tcolor = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new ClippingAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.endSlot = this.endSlot;\n\t\tcopy.convex = this.convex;\n\t\tcopy.inverse = this.inverse;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { PathConstraint } from \"../PathConstraint.js\";\nimport { Color, Utils } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\n\n/** An attachment whose vertices make up a composite Bezier curve.\n *\n * See {@link PathConstraint} and [Paths](http://esotericsoftware.com/spine-paths) in the Spine User Guide. */\nexport class PathAttachment extends VertexAttachment {\n\n\t/** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */\n\tlengths: Array<number> = [];\n\n\t/** If true, the start and end knots are connected. */\n\tclosed = false;\n\n\t/** If true, additional calculations are performed to make computing positions along the path more accurate so movement along\n\t * the path has a constant speed. */\n\tconstantSpeed = false;\n\n\t/** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually\n\t * rendered at runtime. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new PathAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.lengths = [];\n\t\tUtils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n\t\tcopy.closed = this.closed;\n\t\tcopy.constantSpeed = this.constantSpeed;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BonePose } from \"../BonePose.js\";\nimport { Color, MathUtils, type Vector2 } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\n\n/** An attachment which is a single point and a rotation. This can be used to spawn projectiles, particles, etc. A bone can be\n * used in similar ways, but a PointAttachment is slightly less expensive to compute and can be hidden, shown, and placed in a\n * skin.\n *\n * See [Point Attachments](https://esotericsoftware.com/spine-points) in the Spine User Guide. */\nexport class PointAttachment extends VertexAttachment {\n\n\t/** The local x position. */\n\tx: number = 0;\n\n\t/** The local y position. */\n\ty: number = 0;\n\n\t/** The local rotation in degrees, counter clockwise. */\n\trotation: number = 0;\n\n\t/** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments\n\t * are not usually rendered at runtime. */\n\tcolor = new Color(0.38, 0.94, 0, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\t/** Computes the world position from the local position. */\n\tcomputeWorldPosition (bone: BonePose, point: Vector2) {\n\t\tpoint.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n\t\tpoint.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n\t\treturn point;\n\t}\n\n\t/** Computes the world rotation from the local rotation. */\n\tcomputeWorldRotation (bone: BonePose) {\n\t\tconst r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst x = cos * bone.a + sin * bone.b;\n\t\tconst y = cos * bone.c + sin * bone.d;\n\t\treturn MathUtils.atan2Deg(y, x);\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new PointAttachment(this.name);\n\t\tcopy.x = this.x;\n\t\tcopy.y = this.y;\n\t\tcopy.rotation = this.rotation;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport { PointAttachment } from \"./attachments/PointAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport type { Sequence } from \"./attachments/Sequence.js\"\nimport type { Skin } from \"./Skin.js\";\nimport type { TextureAtlas } from \"./TextureAtlas.js\";\n\n/** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}.\n *\n * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the\n * Spine Runtimes Guide. */\nexport class AtlasAttachmentLoader implements AttachmentLoader {\n\tatlas: TextureAtlas;\n\tallowMissingRegions: boolean;\n\n\tconstructor (atlas: TextureAtlas, allowMissingRegions = false) {\n\t\tthis.atlas = atlas;\n\t\tthis.allowMissingRegions = allowMissingRegions;\n\t}\n\n\t/** Sets each {@link Sequence.regions} by calling {@link findRegion} for each texture region using\n\t * {@link Sequence.getPath}. */\n\tprotected findRegions (name: string, basePath: string, sequence: Sequence) {\n\t\tconst regions = sequence.regions;\n\t\tfor (let i = 0, n = regions.length; i < n; i++)\n\t\t\tregions[i] = this.findRegion(name, sequence.getPath(basePath, i));\n\t}\n\n\t/** Looks for the region with the specified path. If not found and {@link allowMissingRegions} is false, an error is\n\t * raised. */\n\tprotected findRegion (name: string, path: string) {\n\t\tconst region = this.atlas.findRegion(path);\n\t\tif (!region && !this.allowMissingRegions)\n\t\t\tthrow new Error(`Region not found in atlas: ${path} (attachment: ${name})`);\n\t\treturn region;\n\t}\n\n\tnewRegionAttachment (skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): RegionAttachment {\n\t\tthis.findRegions(name, path, sequence);\n\t\treturn new RegionAttachment(name, sequence);\n\t}\n\n\tnewMeshAttachment (skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): MeshAttachment {\n\t\tthis.findRegions(name, path, sequence);\n\t\treturn new MeshAttachment(name, sequence);\n\t}\n\n\tnewBoundingBoxAttachment (skin: Skin, placeholder: string, name: string): BoundingBoxAttachment {\n\t\treturn new BoundingBoxAttachment(name);\n\t}\n\n\tnewPathAttachment (skin: Skin, placeholder: string, name: string): PathAttachment {\n\t\treturn new PathAttachment(name);\n\t}\n\n\tnewPointAttachment (skin: Skin, placeholder: string, name: string): PointAttachment {\n\t\treturn new PointAttachment(name);\n\t}\n\n\tnewClippingAttachment (skin: Skin, placeholder: string, name: string): ClippingAttachment {\n\t\treturn new ClippingAttachment(name);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\n\n/** The base class for storing setup data for a posed object. May be shared with multiple instances. */\nexport abstract class PosedData<P extends Pose<P>> {\n\treadonly name: string;\n\n\treadonly setupPose: P;\n\n\t/** When true, {@link Skeleton.updateWorldTransform} only updates this constraint if the {@link Skeleton.skin}\n\t * contains this constraint.\n\t *\n\t * See {@link Skin.constraints}. */\n\tskinRequired = false;\n\n\tconstructor (name: string, setupPose: P) {\n\t\tif (name == null) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.setupPose = setupPose;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { BonePose } from \"./BonePose.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { Color } from \"./Utils.js\";\n\n/** The setup pose for a bone. */\nexport class BoneData extends PosedData<BonePose> {\n\t/** The index of the bone in {@link Skeleton.bones}. */\n\tindex: number = 0;\n\n\t/** The parent bone, or null if this bone is the root. */\n\tparent: BoneData | null = null;\n\n\t/** The bone's length. */\n\tlength: number = 0;\n\n\t// Nonessential.\n\t/** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually\n\t * rendered at runtime. */\n\treadonly color = new Color();\n\n\t/** The bone icon name as it was in Spine, or null if nonessential data was not exported. */\n\ticon?: string;\n\n\t/** The bone icon's display size scale, or 1 if nonessential data was not exported. */\n\ticonSize = 1;\n\n\t/** The bone icon's display rotation in degrees, or 0 if nonessential data was not exported. */\n\ticonRotation = 0;\n\n\t/** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = false;\n\n\tconstructor (index: number, name: string, parent: BoneData | null) {\n\t\tsuper(name, new BonePose());\n\t\tif (index < 0) throw new Error(\"index must be >= 0.\");\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.index = index;\n\t\tthis.parent = parent;\n\t}\n\n\tcopy (parent: BoneData | null): BoneData {\n\t\tconst copy = new BoneData(this.index, this.name, parent);\n\t\tcopy.length = this.length;\n\t\tcopy.setupPose.set(this.setupPose);\n\t\treturn copy;\n\t}\n}\n\n/** Determines how a bone inherits world transforms from parent bones. */\nexport enum Inherit { Normal, OnlyTranslation, NoRotationOrReflection, NoScale, NoScaleOrReflection }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Bone } from \"./Bone.js\";\nimport { Inherit } from \"./BoneData.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Pose } from \"./Pose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Update } from \"./Update.js\";\nimport { MathUtils, type Vector2 } from \"./Utils.js\";\n\n/** The applied local pose and world transform for a bone. This is the {@link Bone.getPose} with constraints applied and the\n * world transform computed by {@link Skeleton.updateWorldTransform} and {@link updateWorldTransform}.\n *\n * If the world transform is changed, call {@link updateLocalTransform} before using the local transform. The local\n * transform may be needed by other code (eg to apply another constraint).\n *\n * After changing the world transform, call {@link updateWorldTransform} on every descendant bone. It may be more\n * convenient to modify the local transform instead, then call {@link Skeleton.updateWorldTransform} to update the world\n * transforms for all bones and apply constraints. */\nexport class BonePose implements Pose<BonePose>, Update {\n\tbone!: Bone;\n\n\t/** The local x translation. */\n\tx = 0;\n\n\t/** The local y translation. */\n\ty = 0;\n\n\t/** The local rotation in degrees, counter clockwise. */\n\trotation = 0;\n\n\t/** The local scaleX. */\n\tscaleX = 0;\n\n\t/** The local scaleY. */\n\tscaleY = 0;\n\n\t/** The local shearX. */\n\tshearX = 0;\n\n\t/** The local shearY. */\n\tshearY = 0;\n\n\tinherit = Inherit.Normal;\n\n\t/** The world transform `[a b][c d]` x-axis x component. */\n\ta = 0;\n\n\t/** The world transform `[a b][c d]` y-axis x component. */\n\tb = 0;\n\n\t/** The world transform `[a b][c d]` x-axis y component. */\n\tc = 0;\n\n\t/** The world transform `[a b][c d]` y-axis y component. */\n\td = 0;\n\n\t/** The world X position. If changed, {@link updateLocalTransform} should be called. */\n\tworldY = 0;\n\n\t/** The world Y position. If changed, {@link updateLocalTransform} should be called. */\n\tworldX = 0;\n\n\tworld = 0;\n\tlocal = 0;\n\n\tset (pose: BonePose): void {\n\t\tif (pose == null) throw new Error(\"pose cannot be null.\");\n\t\tthis.x = pose.x;\n\t\tthis.y = pose.y;\n\t\tthis.rotation = pose.rotation;\n\t\tthis.scaleX = pose.scaleX;\n\t\tthis.scaleY = pose.scaleY;\n\t\tthis.shearX = pose.shearX;\n\t\tthis.shearY = pose.shearY;\n\t\tthis.inherit = pose.inherit;\n\t}\n\n\tsetPosition (x: number, y: number): void {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tsetScale (scaleX: number, scaleY: number): void;\n\tsetScale (scale: number): void;\n\tsetScale (scaleOrX: number, scaleY?: number): void {\n\t\tthis.scaleX = scaleOrX;\n\t\tthis.scaleY = scaleY === undefined ? scaleOrX : scaleY;\n\t}\n\n\t/** Determines how parent world transforms affect this bone. */\n\tpublic getInherit (): Inherit {\n\t\treturn this.inherit;\n\t}\n\n\tpublic setInherit (inherit: Inherit): void {\n\t\tif (inherit == null) throw new Error(\"inherit cannot be null.\");\n\t\tthis.inherit = inherit;\n\t}\n\n\t/** Called by {@link Skeleton.updateCache} to compute the world transform, if needed. */\n\tpublic update (skeleton: Skeleton, physics: Physics): void {\n\t\tif (this.world !== skeleton._update) this.updateWorldTransform(skeleton);\n\t}\n\n\t/** Computes the world transform using the parent bone's world transform and this applied local pose. Child bones are not\n\t * updated.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransform (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update)\n\t\t\tthis.updateLocalTransform(skeleton);\n\t\telse\n\t\t\tthis.world = skeleton._update;\n\n\t\tconst rotation = this.rotation;\n\t\tconst scaleX = this.scaleX;\n\t\tconst scaleY = this.scaleY;\n\t\tconst shearX = this.shearX;\n\t\tconst shearY = this.shearY;\n\t\tif (!this.bone.parent) { // Root bone.\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\tthis.a = Math.cos(rx) * scaleX * sx;\n\t\t\tthis.b = Math.cos(ry) * scaleY * sx;\n\t\t\tthis.c = Math.sin(rx) * scaleX * sy;\n\t\t\tthis.d = Math.sin(ry) * scaleY * sy;\n\t\t\tthis.worldX = this.x * sx + skeleton.x;\n\t\t\tthis.worldY = this.y * sy + skeleton.y;\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.bone.parent.appliedPose;\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tthis.worldX = pa * this.x + pb * this.y + parent.worldX;\n\t\tthis.worldY = pc * this.x + pd * this.y + parent.worldY;\n\n\t\tswitch (this.inherit) {\n\t\t\tcase Inherit.Normal: {\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(ry) * scaleY;\n\t\t\t\tthis.a = pa * la + pb * lc;\n\t\t\t\tthis.b = pa * lb + pb * ld;\n\t\t\t\tthis.c = pc * la + pd * lc;\n\t\t\t\tthis.d = pc * lb + pd * ld;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase Inherit.OnlyTranslation: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tthis.a = Math.cos(rx) * scaleX * sx;\n\t\t\t\tthis.b = Math.cos(ry) * scaleY * sx;\n\t\t\t\tthis.c = Math.sin(rx) * scaleX * sy;\n\t\t\t\tthis.d = Math.sin(ry) * scaleY * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tpa *= sxi;\n\t\t\t\tpc *= syi;\n\t\t\t\tlet s = pa * pa + pc * pc;\n\t\t\t\tlet r = 0;\n\t\t\t\tif (s > MathUtils.epsilon2) {\n\t\t\t\t\ts = Math.abs(pa * pd * syi - pb * sxi * pc) / s;\n\t\t\t\t\tpb = pc * s;\n\t\t\t\t\tpd = pa * s;\n\t\t\t\t\tr = rotation - MathUtils.atan2Deg(pc, pa);\n\t\t\t\t} else {\n\t\t\t\t\tpa = 0;\n\t\t\t\t\tpc = 0;\n\t\t\t\t\tr = rotation - 90 + MathUtils.atan2Deg(pd, pb);\n\t\t\t\t}\n\t\t\t\tconst rx = (r + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (r + shearY + 90) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(ry) * scaleY;\n\t\t\t\tthis.a = (pa * la - pb * lc) * sx;\n\t\t\t\tthis.b = (pa * lb - pb * ld) * sx;\n\t\t\t\tthis.c = (pc * la + pd * lc) * sy;\n\t\t\t\tthis.d = (pc * lb + pd * ld) * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoScale:\n\t\t\tcase Inherit.NoScaleOrReflection: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tconst r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tlet za = (pa * cos + pb * sin) * sxi;\n\t\t\t\tlet zc = (pc * cos + pd * sin) * syi;\n\t\t\t\tconst s = 1 / Math.sqrt(za * za + zc * zc);\n\t\t\t\tza *= s;\n\t\t\t\tzc *= s;\n\t\t\t\tlet zb = -zc, zd = za;\n\t\t\t\tif (this.inherit === Inherit.NoScale && pa * pd - pb * pc < 0 !== (sx < 0 !== sy < 0)) {\n\t\t\t\t\tzb = -zb;\n\t\t\t\t\tzd = -zd;\n\t\t\t\t}\n\t\t\t\tconst rx = shearX * MathUtils.degRad;\n\t\t\t\tconst ry = (90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(ry) * scaleY;\n\t\t\t\tthis.a = (za * la + zb * lc) * sx;\n\t\t\t\tthis.b = (za * lb + zb * ld) * sx;\n\t\t\t\tthis.c = (zc * la + zd * lc) * sy;\n\t\t\t\tthis.d = (zc * lb + zd * ld) * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Computes the local transform values from the world transform.\n\t *\n\t * If the world transform is modified (by a constraint, {@link rotateWorld}, etc) then this method should be called so\n\t * the local transform matches the world transform. The local transform may be needed by other code (eg to apply another\n\t * constraint).\n\t *\n\t * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after\n\t * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */\n\tpublic updateLocalTransform (skeleton: Skeleton): void {\n\t\tthis.local = 0;\n\t\tthis.world = skeleton._update;\n\n\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\tif (!this.bone.parent) {\n\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\tthis.x = (this.worldX - skeleton.x) * sxi;\n\t\t\tthis.y = (this.worldY - skeleton.y) * syi;\n\t\t\tthis.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.bone.parent.appliedPose;\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tconst pad = pa * pd - pb * pc, pid = 1 / (pa * pd - pb * pc);\n\t\tconst ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;\n\t\tconst dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n\t\tthis.x = dx * ia - dy * ib;\n\t\tthis.y = dy * id - dx * ic;\n\n\t\tswitch (this.inherit) {\n\t\t\tcase Inherit.Normal: this.set5(ia * this.a - ib * this.c, ia * this.b - ib * this.d, id * this.c - ic * this.a, id * this.d - ic * this.b, 0); break;\n\t\t\tcase Inherit.OnlyTranslation: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tthis.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tpa *= sxi;\n\t\t\t\tpc *= syi;\n\t\t\t\tconst wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;\n\t\t\t\tconst s = 1 / (pa * pa + pc * pc), det = 1 / Math.abs(pad * sxi * syi);\n\t\t\t\tthis.set5((pa * wa + pc * wc) * s, (pa * wb + pc * wd) * s, (pa * wc - pc * wa) * det, (pa * wd - pc * wb) * det,\n\t\t\t\t\tMathUtils.atan2Deg(pc, pa));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoScale:\n\t\t\tcase Inherit.NoScaleOrReflection: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tconst wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;\n\t\t\t\tlet tx = pd * this.a - pb * this.c, ty = pa * this.c - pc * this.a;\n\t\t\t\tif (pad < 0) {\n\t\t\t\t\ttx = -tx;\n\t\t\t\t\tty = -ty;\n\t\t\t\t}\n\t\t\t\tlet r = MathUtils.atan2Deg(ty, tx);\n\t\t\t\tthis.rotation = r;\n\t\t\t\tr *= MathUtils.degRad;\n\t\t\t\tconst cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tlet za = (pa * cos + pb * sin) * sxi;\n\t\t\t\tlet zc = (pc * cos + pd * sin) * syi;\n\t\t\t\tconst s = 1 / Math.sqrt(za * za + zc * zc);\n\t\t\t\tza *= s;\n\t\t\t\tzc *= s;\n\t\t\t\tconst si = this.inherit === Inherit.NoScale && pad < 0 !== (sx < 0 !== sy < 0) ? -1 : 1;\n\t\t\t\tthis.set4(za * wa + zc * wc, za * wb + zc * wd, (za * wc - zc * wa) * si, (za * wd - zc * wb) * si);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate set4 (ra: number, rb: number, rc: number, rd: number): void {\n\t\tconst x = ra * ra + rc * rc, y = rb * rb + rd * rd;\n\t\tif (x > MathUtils.epsilon2) {\n\t\t\tthis.shearX = MathUtils.atan2Deg(rc, ra);\n\t\t\tthis.scaleX = Math.sqrt(x);\n\t\t} else {\n\t\t\tthis.shearX = 0;\n\t\t\tthis.scaleX = 0;\n\t\t}\n\t\tthis.scaleY = Math.sqrt(y);\n\t\tif (y > MathUtils.epsilon2) {\n\t\t\tthis.shearY = MathUtils.atan2Deg(rd, rb);\n\t\t\tif (ra * rd - rb * rc < 0) {\n\t\t\t\tthis.scaleY = -this.scaleY;\n\t\t\t\tthis.shearY += 90;\n\t\t\t} else\n\t\t\t\tthis.shearY -= 90;\n\t\t\tif (this.shearY > 180)\n\t\t\t\tthis.shearY -= 360;\n\t\t\telse if (this.shearY <= -180) //\n\t\t\t\tthis.shearY += 360;\n\t\t} else\n\t\t\tthis.shearY = 0;\n\t}\n\n\tprivate set5 (ra: number, rb: number, rc: number, rd: number, ro: number): void {\n\t\tthis.shearX = 0;\n\t\tconst x = ra * ra + rc * rc, y = rb * rb + rd * rd;\n\t\tif (x > MathUtils.epsilon2) {\n\t\t\tconst r = MathUtils.atan2Deg(rc, ra);\n\t\t\tthis.rotation = r + ro;\n\t\t\tthis.scaleX = Math.sqrt(x);\n\t\t\tthis.scaleY = Math.sqrt(y);\n\t\t\tif (y > MathUtils.epsilon2) {\n\t\t\t\tthis.shearY = MathUtils.atan2Deg(rd, rb);\n\t\t\t\tif (ra * rd - rb * rc < 0) {\n\t\t\t\t\tthis.scaleY = -this.scaleY;\n\t\t\t\t\tthis.shearY += 90 - r;\n\t\t\t\t} else\n\t\t\t\t\tthis.shearY -= 90 + r;\n\t\t\t\tif (this.shearY > 180)\n\t\t\t\t\tthis.shearY -= 360;\n\t\t\t\telse if (this.shearY <= -180) //\n\t\t\t\t\tthis.shearY += 360;\n\t\t\t} else\n\t\t\t\tthis.shearY = 0;\n\t\t} else {\n\t\t\tthis.scaleX = 0;\n\t\t\tthis.scaleY = Math.sqrt(y);\n\t\t\tthis.shearY = 0;\n\t\t\tthis.rotation = y > MathUtils.epsilon2 ? MathUtils.atan2Deg(rd, rb) - 90 + ro : ro;\n\t\t}\n\t}\n\n\t/** If the world transform has been modified by constraints and the local transform no longer matches,\n\t * {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before\n\t * using the applied local transform. */\n\tpublic validateLocalTransform (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update) this.updateLocalTransform(skeleton);\n\t}\n\n\tmodifyLocal (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update) this.updateLocalTransform(skeleton);\n\t\tthis.world = 0;\n\t\tthis.resetWorld(skeleton._update);\n\t}\n\n\tmodifyWorld (update: number): void {\n\t\tthis.local = update;\n\t\tthis.world = update;\n\t\tthis.resetWorld(update);\n\t}\n\n\tprivate resetWorld (update: number): void {\n\t\tconst children = this.bone.children;\n\t\tfor (let i = 0, n = children.length; i < n; i++) {\n\t\t\tconst child = children[i].appliedPose;\n\t\t\tif (child.world === update) {\n\t\t\t\tchild.world = 0;\n\t\t\t\tchild.local = 0;\n\t\t\t\tchild.resetWorld(update);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** The world rotation for the X axis, calculated using {@link a} and {@link c}. This is the direction the bone is\n\t * pointing. */\n\tpublic getWorldRotationX (): number {\n\t\treturn MathUtils.atan2Deg(this.c, this.a);\n\t}\n\n\t/** The world rotation for the Y axis, calculated using {@link b} and {@link d}. */\n\tpublic getWorldRotationY (): number {\n\t\treturn MathUtils.atan2Deg(this.d, this.b);\n\t}\n\n\t/** The magnitude (always positive) of the world scale X, calculated using {@link a} and {@link c}. */\n\tpublic getWorldScaleX (): number {\n\t\treturn Math.sqrt(this.a * this.a + this.c * this.c);\n\t}\n\n\t/** The magnitude (always positive) of the world scale Y, calculated using {@link b} and {@link d}. */\n\tpublic getWorldScaleY (): number {\n\t\treturn Math.sqrt(this.b * this.b + this.d * this.d);\n\t}\n\n\t// public Matrix3 getWorldTransform (Matrix3 worldTransform) {\n\t// \tif (worldTransform == null) throw new IllegalArgumentException(\"worldTransform cannot be null.\");\n\t// \tfloat[] val = worldTransform.val;\n\t// \tval[M00] = a;\n\t// \tval[M01] = b;\n\t// \tval[M10] = c;\n\t// \tval[M11] = d;\n\t// \tval[M02] = worldX;\n\t// \tval[M12] = worldY;\n\t// \tval[M20] = 0;\n\t// \tval[M21] = 0;\n\t// \tval[M22] = 1;\n\t// \treturn worldTransform;\n\t// }\n\n\t/** Transforms a point from world coordinates to the bone's local coordinates. */\n\tpublic worldToLocal (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\tconst det = this.a * this.d - this.b * this.c;\n\t\tconst x = world.x - this.worldX, y = world.y - this.worldY;\n\t\tworld.x = (x * this.d - y * this.b) / det;\n\t\tworld.y = (y * this.a - x * this.c) / det;\n\t\treturn world;\n\t}\n\n\t/** Transforms a point from the bone's local coordinates to world coordinates. */\n\tpublic localToWorld (local: Vector2): Vector2 {\n\t\tif (local == null) throw new Error(\"local cannot be null.\");\n\t\tconst x = local.x, y = local.y;\n\t\tlocal.x = x * this.a + y * this.b + this.worldX;\n\t\tlocal.y = x * this.c + y * this.d + this.worldY;\n\t\treturn local;\n\t}\n\n\t/** Transforms a point from world coordinates to the parent bone's local coordinates. */\n\tpublic worldToParent (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.bone.parent == null ? world : this.bone.parent.appliedPose.worldToLocal(world);\n\t}\n\n\t/** Transforms a point from the parent bone's coordinates to world coordinates. */\n\tpublic parentToWorld (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.bone.parent == null ? world : this.bone.parent.appliedPose.localToWorld(world);\n\t}\n\n\t/** Transforms a world rotation to a local rotation. */\n\tpublic worldToLocalRotation (worldRotation: number): number {\n\t\tworldRotation *= MathUtils.degRad;\n\t\tconst sin = Math.sin(worldRotation), cos = Math.cos(worldRotation);\n\t\treturn MathUtils.atan2Deg(this.a * sin - this.c * cos, this.d * cos - this.b * sin) + this.rotation - this.shearX;\n\t}\n\n\t/** Transforms a local rotation to a world rotation. */\n\tlocalToWorldRotation (localRotation: number): number {\n\t\tlocalRotation = (localRotation - this.rotation - this.shearX) * MathUtils.degRad;\n\t\tconst sin = Math.sin(localRotation), cos = Math.cos(localRotation);\n\t\treturn MathUtils.atan2Deg(cos * this.c + sin * this.d, cos * this.a + sin * this.b);\n\t}\n\n\t/** Rotates the world transform the specified amount. */\n\trotateWorld (degrees: number) {\n\t\tdegrees *= MathUtils.degRad;\n\t\tconst sin = Math.sin(degrees), cos = Math.cos(degrees);\n\t\tconst ra = this.a, rb = this.b;\n\t\tthis.a = cos * ra - sin * this.c;\n\t\tthis.b = cos * rb - sin * this.d;\n\t\tthis.c = sin * ra + cos * this.c;\n\t\tthis.d = sin * rb + cos * this.d;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\";\nimport type { PosedData } from \"./PosedData.js\";\n\n/** The base class for an object with a number of poses:\n * - {@link data}: The setup pose.\n * - {@link pose}: The unconstrained pose. Set by animations and application code.\n * - {@link appliedPose}: The pose to use for rendering. Possibly modified by constraints.\n */\nexport abstract class Posed<\n\tD extends PosedData<P>,\n\tP extends Pose<P>> {\n\n\t/** The constraint's setup pose data. */\n\treadonly data: D;\n\treadonly pose: P;\n\treadonly constrainedPose: P;\n\tappliedPose: P;\n\n\tconstructor (data: D, pose: P, constrainedPose: P) {\n\t\tif (data == null) throw new Error(\"data cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.pose = pose;\n\t\tthis.constrainedPose = constrainedPose;\n\t\tthis.appliedPose = pose;\n\t}\n\n\t/** Sets the unconstrained pose to the setup pose. */\n\tpublic setupPose (): void {\n\t\tthis.pose.set(this.data.setupPose);\n\t}\n\n\t/** The setup pose data. May be shared with multiple instances. */\n\tpublic getData (): D {\n\t\treturn this.data;\n\t}\n\n\t/** The unconstrained pose for this object, set by animations and application code. */\n\tpublic getPose (): P {\n\t\treturn this.pose;\n\t}\n\n\t/** The pose to use for rendering. If no constraints modify this pose, this is the same as {@link pose}. Otherwise it is a\n\t * copy of {@link pose} modified by constraints. */\n\tpublic getAppliedPose (): P {\n\t\treturn this.appliedPose;\n\t}\n\n\t/** Sets the applied pose to the unconstrained pose, for when no constraints will modify the pose. */\n\tunconstrained () {\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */\n\tconstrained () {\n\t\tthis.appliedPose = this.constrainedPose;\n\t}\n\n\t/** Sets the constrained pose to the unconstrained pose, as a starting point for constraints to be applied. */\n\tresetConstrained () { // Port: resetConstrained - reference runtime:  reset()\n\t\tthis.constrainedPose.set(this.pose);\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\";\nimport { Posed } from \"./Posed.js\";\nimport type { PosedData } from \"./PosedData.js\";\n\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\n\n/** A posed object that may be active or inactive. */\nexport abstract class PosedActive<\n\tD extends PosedData<P>,\n\tP extends Pose<P>>\n\textends Posed<D, P> {\n\n\tactive = false;\n\n\tprotected constructor (data: D, pose: P, constrained: P) {\n\t\tsuper(data, pose, constrained);\n\t\tthis.setupPose();\n\t}\n\n\t/** Returns false when this constraint won't be updated by\n\t * {@link Skeleton.updateWorldTransform} because a skin is required and the\n\t * {@link Skeleton.skin active skin} does not contain this item. See {@link Skin.bones}, {@link Skin.constraints},\n\t * {@link PosedData.skinRequired}, and {@link Skeleton.updateCache}. */\n\tpublic isActive (): boolean {\n\t\treturn this.active;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport { BonePose } from \"./BonePose.js\";\nimport { PosedActive } from \"./PosedActive.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** A node in a skeleton's hierarchy with a transform that affects its children and their attachments. A bone has a number of\n * poses:\n * - {@link data}: The setup pose.\n * - {@link pose}: The unconstrained local pose. Set by animations and application code.\n * - {@link appliedPose}: The local pose to use for rendering. Possibly modified by constraints.\n * - World transform: the local pose combined with the parent world transform. Computed on a pose by\n * {@link BonePose.updateWorldTransform} and {@link Skeleton.updateWorldTransform}.\n */\nexport class Bone extends PosedActive<BoneData, BonePose> {\n\t/** The parent bone, or null if this is the root bone. */\n\tparent: Bone | null = null;\n\n\t/** The immediate children of this bone. */\n\tchildren = [] as Bone[];\n\n\tsorted = false;\n\n\tconstructor (data: BoneData, parent: Bone | null) {\n\t\tsuper(data, new BonePose(), new BonePose());\n\t\tthis.parent = parent;\n\t\tthis.appliedPose.bone = this;\n\t\tthis.constrainedPose.bone = this;\n\t}\n\n\t/** Copy constructor. Does not copy the {@link children} bones. */\n\tcopy (parent: Bone | null): Bone {\n\t\tconst copy = new Bone(this.data, parent);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { ConstraintData } from \"./ConstraintData.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { PosedActive } from \"./PosedActive.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Update } from \"./Update.js\";\n\nexport abstract class Constraint<\n\tT extends Constraint<T, D, P>,\n\tD extends ConstraintData<T, P>,\n\tP extends Pose<P>>\n\textends PosedActive<D, P> implements Update {\n\n\tconstructor (data: D, pose: P, constrained: P) {\n\t\tsuper(data, pose, constrained);\n\t}\n\n\tabstract copy (skeleton: Skeleton): T;\n\n\tabstract sort (skeleton: Skeleton): void;\n\n\tabstract update (skeleton: Skeleton, physics: Physics): void;\n\n\tisSourceActive (): boolean {\n\t\treturn true;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Slot } from \"./Slot.js\";\nimport { Utils } from \"./Utils.js\";\n\n/** Stores the skeleton's draw order, which is the order that each slot's attachment is rendered. */\nexport class DrawOrder {\n\treadonly _setupPose: Slot[];\n\n\t/** The unconstrained draw order, set by animations and application code. */\n\treadonly pose: Slot[];\n\treadonly constrainedPose: Slot[];\n\n\t/** The constrained draw order for rendering. If no constraints modify the draw order, this is the same as {@link pose}.\n\t * Otherwise it is a copy of {@link pose} modified by constraints. */\n\tappliedPose: Slot[];\n\n\tconstructor (setupPose: Slot[]) {\n\t\tthis._setupPose = setupPose;\n\t\tthis.pose = [...setupPose];\n\t\tthis.constrainedPose = [];\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the unconstrained draw order to the setup pose order. */\n\tsetupPose () {\n\t\tthis.pose.length = this._setupPose.length;\n\t\tUtils.arrayCopy(this._setupPose, 0, this.pose, 0, this._setupPose.length);\n\t}\n\n\t/** Sets the applied pose to the unconstrained pose, for when no constraints will modify the draw order. */\n\tunconstrained () {\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */\n\tconstrained () {\n\t\tthis.appliedPose = this.constrainedPose;\n\t}\n\n\t/** Copies the unconstrained pose to the constrained pose, as a starting point for constraints to be applied. */\n\tresetConstrained () {\n\t\tthis.constrainedPose.length = this.pose.length;\n\t\tUtils.arrayCopy(this.pose, 0, this.constrainedPose, 0, this.pose.length);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BonePose } from \"./BonePose.js\";\nimport type { Constraint } from \"./Constraint.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** The base class for all constraint datas. */\nexport abstract class ConstraintData<\n\tT extends Constraint<T, ConstraintData<T, P>, P>,\n\tP extends Pose<P>>\n\textends PosedData<P> {\n\n\tconstructor (name: string, setup: P) {\n\t\tsuper(name, setup);\n\t}\n\n\tabstract create (skeleton: Skeleton): T;\n}\n\n/** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */\nexport enum ScaleYMode {\n\t/** scaleY is not changed. */\n\tNone,\n\t/** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */\n\tUniform,\n\t/** scaleY is divided by the scaleX factor, preserving the bone's area. */\n\tVolume\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\n\nimport type { EventTimeline, Timeline } from \"./Animation.js\";\nimport type { AnimationStateListener } from \"./AnimationState.js\";\nimport type { EventData } from \"./EventData.js\";\n\n/** Fired by {@link EventTimeline} when specific animation times are reached.\n *\n * See Timeline {@link Timeline.apply},\n * AnimationStateListener {@link AnimationStateListener.event}, and\n * [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nexport class Event {\n\n\t/** The animation time this event was keyed, or -1 for the setup pose. */\n\ttime: number = 0;\n\n\treadonly data: EventData;\n\n\t/** The integer payload for this event. */\n\tintValue: number = 0;\n\n\t/** The float payload for this event. */\n\tfloatValue: number = 0;\n\n\tstringValue: string | null = null;\n\n\t/** If an audio path is set, the volume for the audio. */\n\tvolume: number = 0;\n\n\t/** If an audio path is set, the left/right balance for the audio. */\n\tbalance: number = 0;\n\n\tconstructor (time: number, data: EventData) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tthis.time = time;\n\t\tthis.data = data;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { Event } from \"./Event.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\n\n/** Stores the setup pose values for an {@link Event}.\n *\n * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nexport class EventData {\n\t/** The name of the event, unique across all events in the skeleton.\n\t *\n\t * See {@link SkeletonData.findEvent}. */\n\tname: string;\n\n\t_audioPath: string | null = null;\n\t/** Path to an audio file relative to the audio folder as defined in Spine. */\n\tget audioPath (): string {\n\t\t// biome-ignore lint/style/noNonNullAssertion: can't be null after initialization\n\t\treturn this._audioPath!;\n\t}\n\n\tset audioPath (audioPath: string | null) {\n\t\tif (audioPath == null) throw new Error(\"audioPath cannot be null.\");\n\t\tthis._audioPath = audioPath;\n\t}\n\n\t/** The setup values that are shared by all events with this data. */\n\treadonly setupPose = new Event(-1, this);\n\n\tconstructor (name: string) {\n\t\tthis.name = name;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\";\n\n/** Stores a pose for an IK constraint. */\nexport class IkConstraintPose implements Pose<IkConstraintPose> {\n\t/** For two bone IK, controls the bend direction of the IK bones, either 1 or -1. */\n\tbendDirection = 0;\n\n\t/** For one bone IK, when true and the target is too close, the bone is scaled to reach it. */\n\tcompress = false;\n\n\t/** When true and the target is out of range, the parent bone is scaled to reach it.\n\t *\n\t * For two bone IK: 1) the child bone's local Y translation is set to 0, 2) stretch is not applied if {@link softness} is > 0,\n\t * and 3) if the parent bone has local nonuniform scale, stretch is not applied. */\n\tstretch = false;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained rotation.\n\t *\n\t * For two bone IK: if the parent bone has local nonuniform scale, the child bone's local Y translation is set to 0. */\n\tmix = 0;\n\n\t/** For two bone IK, the target bone's distance from the maximum reach of the bones where rotation begins to slow. The bones\n\t * will not straighten completely until the target is this far out of range. */\n\tsoftness = 0;\n\n\tpublic set (pose: IkConstraintPose) {\n\t\tthis.mix = pose.mix;\n\t\tthis.softness = pose.softness;\n\t\tthis.bendDirection = pose.bendDirection;\n\t\tthis.compress = pose.compress;\n\t\tthis.stretch = pose.stretch;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Bone } from \"./Bone.js\";\nimport { Inherit } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport type { IkConstraintData } from \"./IkConstraintData.js\";\nimport { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n/** Adjusts the local rotation of 1 or 2 constrained bones so the world position of the tip of the last bone is as close to the\n * target bone as possible.\n *\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nexport class IkConstraint extends Constraint<IkConstraint, IkConstraintData, IkConstraintPose> {\n\t/** The 1 or 2 bones that will be modified by this IK constraint. */\n\treadonly bones: Array<BonePose>;\n\n\t/** The bone that is the IK target. */\n\ttarget: Bone;\n\n\tconstructor (data: IkConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new IkConstraintPose(), new IkConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tthis.target = skeleton.bones[data.target.index];\n\t}\n\n\tcopy (skeleton: Skeleton): IkConstraint {\n\t\tvar copy = new IkConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mix === 0) return;\n\t\tconst target = this.target.appliedPose;\n\t\tconst bones = this.bones;\n\t\tswitch (bones.length) {\n\t\t\tcase 1:\n\t\t\t\tIkConstraint.apply(skeleton, bones[0], target.worldX, target.worldY, p.compress, p.stretch, this.data.scaleYMode, p.mix);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tIkConstraint.apply(skeleton, bones[0], bones[1], target.worldX, target.worldY, p.bendDirection, p.stretch, this.data.scaleYMode,\n\t\t\t\t\tp.softness, p.mix);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tskeleton.sortBone(this.target);\n\t\tconst parent = this.bones[0].bone;\n\t\tskeleton.sortBone(parent);\n\t\tskeleton._updateCache.push(this);\n\t\tparent.sorted = false;\n\t\tskeleton.sortReset(parent.children);\n\t\tskeleton.constrained(parent);\n\t\tif (this.bones.length > 1) skeleton.constrained(this.bones[1].bone);\n\t}\n\n\tisSourceActive () {\n\t\treturn this.target.active;\n\t}\n\n\t/** Applies 1 bone IK. The target is specified in the world coordinate system. */\n\tpublic static apply (skeleton: Skeleton, bone: BonePose, targetX: number, targetY: number, compress: boolean, stretch: boolean, scaleYMode: ScaleYMode, mix: number): void;\n\n\t/** Applies 2 bone IK. The target is specified in the world coordinate system.\n\t * @param child A direct descendant of the parent bone. */\n\tpublic static apply (skeleton: Skeleton, parent: BonePose, child: BonePose, targetX: number, targetY: number, bendDir: number, stretch: boolean, scaleYMode: ScaleYMode, softness: number, mix: number): void;\n\n\tpublic static apply (skeleton: Skeleton, boneOrParent: BonePose, targetXorChild: number | BonePose, targetYOrTargetX: number, compressOrTargetY: boolean | number,\n\t\tstretchOrBendDir: boolean | number, scaleYModeOrStretch: ScaleYMode | boolean, mixOrScaleYMode: number | boolean, softness?: number, mix?: number) {\n\n\t\tif (typeof targetXorChild === \"number\")\n\t\t\tIkConstraint.apply1(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY as boolean, stretchOrBendDir as boolean, scaleYModeOrStretch as ScaleYMode, mixOrScaleYMode as number);\n\t\telse\n\t\t\tIkConstraint.apply2(skeleton, boneOrParent, targetXorChild as BonePose, targetYOrTargetX, compressOrTargetY as number, stretchOrBendDir as number,\n\t\t\t\tscaleYModeOrStretch as boolean, mixOrScaleYMode as ScaleYMode, softness as number, mix as number);\n\t}\n\n\tprivate static apply1 (skeleton: Skeleton, bone: BonePose, targetX: number, targetY: number, compress: boolean, stretch: boolean, scaleYMode: ScaleYMode, mix: number) {\n\t\tbone.modifyLocal(skeleton);\n\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst p = bone.bone.parent!.appliedPose;\n\n\t\tlet pa = p.a, pb = p.b, pc = p.c, pd = p.d;\n\t\tlet rotationIK = -bone.shearX - bone.rotation, tx = 0, ty = 0;\n\n\t\tswitch (bone.inherit) {\n\t\t\tcase Inherit.OnlyTranslation:\n\t\t\t\ttx = (targetX - bone.worldX) * MathUtils.signum(skeleton.scaleX);\n\t\t\t\tty = (targetY - bone.worldY) * MathUtils.signum(skeleton.scaleY);\n\t\t\t\tbreak;\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst s = Math.abs(pa * pd - pb * pc) / Math.max(MathUtils.epsilon, pa * pa + pc * pc);\n\t\t\t\tconst sa = pa / skeleton.scaleX;\n\t\t\t\tconst sc = pc / skeleton.scaleY;\n\t\t\t\tpb = -sc * s * skeleton.scaleX;\n\t\t\t\tpd = sa * s * skeleton.scaleY;\n\t\t\t\trotationIK += MathUtils.atan2Deg(sc, sa);\n\t\t\t}\n\t\t\t// Fall through\n\t\t\tdefault: {\n\t\t\t\tconst x = targetX - p.worldX, y = targetY - p.worldY;\n\t\t\t\tconst d = pa * pd - pb * pc;\n\t\t\t\tif (Math.abs(d) <= MathUtils.epsilon) {\n\t\t\t\t\ttx = 0;\n\t\t\t\t\tty = 0;\n\t\t\t\t} else {\n\t\t\t\t\ttx = (x * pd - y * pb) / d - bone.x;\n\t\t\t\t\tty = (y * pa - x * pc) / d - bone.y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trotationIK += MathUtils.atan2Deg(ty, tx);\n\t\tif (bone.scaleX < 0) rotationIK += 180;\n\t\tif (rotationIK > 180)\n\t\t\trotationIK -= 360;\n\t\telse if (rotationIK <= -180)\n\t\t\trotationIK += 360;\n\t\tbone.rotation += rotationIK * mix;\n\t\tif (compress || stretch) {\n\t\t\tswitch (bone.inherit) {\n\t\t\t\tcase Inherit.NoScale:\n\t\t\t\tcase Inherit.NoScaleOrReflection:\n\t\t\t\t\ttx = targetX - bone.worldX;\n\t\t\t\t\tty = targetY - bone.worldY;\n\t\t\t}\n\t\t\tconst b = bone.bone.data.length * bone.scaleX;\n\t\t\tif (b > MathUtils.epsilon) {\n\t\t\t\tconst dd = tx * tx + ty * ty;\n\t\t\t\tif ((compress && dd < b * b) || (stretch && dd > b * b)) {\n\t\t\t\t\tconst s = (Math.sqrt(dd) / b - 1) * mix + 1;\n\t\t\t\t\tbone.scaleX *= s;\n\t\t\t\t\tswitch (scaleYMode) {\n\t\t\t\t\t\tcase ScaleYMode.Uniform: bone.scaleY *= s; break;\n\t\t\t\t\t\tcase ScaleYMode.Volume: bone.scaleY /= s < 0.7 ? 0.25 + 0.642857 * s : s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Applies 2 bone IK. The target is specified in the world coordinate system.\n\t * @param child A direct descendant of the parent bone. */\n\tprivate static apply2 (skeleton: Skeleton, parent: BonePose, child: BonePose, targetX: number, targetY: number, bendDir: number, stretch: boolean, scaleYMode: ScaleYMode, softness: number, mix: number) {\n\t\tif (parent.inherit !== Inherit.Normal || child.inherit !== Inherit.Normal) return;\n\t\tparent.modifyLocal(skeleton);\n\t\tchild.modifyLocal(skeleton);\n\t\tlet px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX;\n\t\tlet os1 = 0, os2 = 0, s2 = 0;\n\t\tif (psx < 0) {\n\t\t\tpsx = -psx;\n\t\t\tos1 = 180;\n\t\t\ts2 = -1;\n\t\t} else {\n\t\t\tos1 = 0;\n\t\t\ts2 = 1;\n\t\t}\n\t\tif (psy < 0) {\n\t\t\tpsy = -psy;\n\t\t\ts2 = -s2;\n\t\t}\n\t\tif (csx < 0) {\n\t\t\tcsx = -csx;\n\t\t\tos2 = 180;\n\t\t} else\n\t\t\tos2 = 0;\n\t\tlet cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n\t\tconst u = Math.abs(psx - psy) <= MathUtils.epsilon;\n\t\tif (!u || stretch) {\n\t\t\tchild.y = 0;\n\t\t\tcwx = a * child.x + parent.worldX;\n\t\t\tcwy = c * child.x + parent.worldY;\n\t\t} else {\n\t\t\tcwx = a * child.x + b * child.y + parent.worldX;\n\t\t\tcwy = c * child.x + d * child.y + parent.worldY;\n\t\t}\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst pp = parent.bone.parent!.appliedPose;\n\t\ta = pp.a;\n\t\tb = pp.b;\n\t\tc = pp.c;\n\t\td = pp.d;\n\t\tlet id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY;\n\t\tid = Math.abs(id) <= MathUtils.epsilon ? 0 : 1 / id;\n\t\tconst dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n\t\tlet l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.bone.data.length * csx, a1: number, a2: number;\n\t\tif (l1 < MathUtils.epsilon) {\n\t\t\tIkConstraint.apply(skeleton, parent, targetX, targetY, false, stretch, ScaleYMode.None, mix);\n\t\t\tchild.rotation = 0;\n\t\t\treturn;\n\t\t}\n\t\tx = targetX - pp.worldX;\n\t\ty = targetY - pp.worldY;\n\t\tlet tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n\t\tlet dd = tx * tx + ty * ty;\n\t\tif (softness !== 0) {\n\t\t\tsoftness *= psx * (csx + 1) * 0.5;\n\t\t\tconst td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n\t\t\tif (sd > 0) {\n\t\t\t\tlet p = Math.min(1, sd / (softness * 2)) - 1;\n\t\t\t\tp = (sd - softness * (1 - p * p)) / td;\n\t\t\t\ttx -= p * tx;\n\t\t\t\tty -= p * ty;\n\t\t\t\tdd = tx * tx + ty * ty;\n\t\t\t}\n\t\t}\n\t\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\n\t\touter:\n\t\tif (u) {\n\t\t\tl2 *= psx;\n\t\t\tlet cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n\t\t\tif (cos < -1) {\n\t\t\t\tcos = -1;\n\t\t\t\ta2 = Math.PI * bendDir;\n\t\t\t} else if (cos > 1) {\n\t\t\t\tcos = 1;\n\t\t\t\ta2 = 0;\n\t\t\t\tif (stretch) {\n\t\t\t\t\ta = (Math.sqrt(dd) / (l1 + l2) - 1) * mix + 1;\n\t\t\t\t\tparent.scaleX *= a;\n\t\t\t\t\tswitch (scaleYMode) {\n\t\t\t\t\t\tcase ScaleYMode.Uniform: parent.scaleY *= a; break;\n\t\t\t\t\t\tcase ScaleYMode.Volume: parent.scaleY /= a < 0.7 ? 0.25 + 0.642857 * a : a;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else\n\t\t\t\ta2 = Math.acos(cos) * bendDir;\n\t\t\ta = l1 + l2 * cos;\n\t\t\tb = l2 * Math.sin(a2);\n\t\t\ta1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n\t\t} else {\n\t\t\ta = psx * l2;\n\t\t\tb = psy * l2;\n\t\t\tconst aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n\t\t\tc = bb * l1 * l1 + aa * dd - aa * bb;\n\t\t\tconst c1 = -2 * bb * l1, c2 = bb - aa;\n\t\t\td = c1 * c1 - 4 * c2 * c;\n\t\t\tif (d >= 0) {\n\t\t\t\tlet q = Math.sqrt(d);\n\t\t\t\tif (c1 < 0) q = -q;\n\t\t\t\tq = -(c1 + q) * 0.5;\n\t\t\t\tlet r0 = q / c2, r1 = c / q;\n\t\t\t\tconst r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n\t\t\t\tr0 = dd - r * r;\n\t\t\t\tif (r0 >= 0) {\n\t\t\t\t\ty = Math.sqrt(r0) * bendDir;\n\t\t\t\t\ta1 = ta - Math.atan2(y, r);\n\t\t\t\t\ta2 = Math.atan2(y / psy, (r - l1) / psx);\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n\t\t\tlet maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n\t\t\tc = -a * l1 / (aa - bb);\n\t\t\tif (c >= -1 && c <= 1) {\n\t\t\t\tc = Math.acos(c);\n\t\t\t\tx = a * Math.cos(c) + l1;\n\t\t\t\ty = b * Math.sin(c);\n\t\t\t\td = x * x + y * y;\n\t\t\t\tif (d < minDist) {\n\t\t\t\t\tminAngle = c;\n\t\t\t\t\tminDist = d;\n\t\t\t\t\tminX = x;\n\t\t\t\t\tminY = y;\n\t\t\t\t}\n\t\t\t\tif (d > maxDist) {\n\t\t\t\t\tmaxAngle = c;\n\t\t\t\t\tmaxDist = d;\n\t\t\t\t\tmaxX = x;\n\t\t\t\t\tmaxY = y;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dd <= (minDist + maxDist) * 0.5) {\n\t\t\t\ta1 = ta - Math.atan2(minY * bendDir, minX);\n\t\t\t\ta2 = minAngle * bendDir;\n\t\t\t} else {\n\t\t\t\ta1 = ta - Math.atan2(maxY * bendDir, maxX);\n\t\t\t\ta2 = maxAngle * bendDir;\n\t\t\t}\n\t\t}\n\t\tconst os = Math.atan2(child.y, child.x) * s2;\n\t\ta1 = (a1 - os) * MathUtils.radDeg + os1 - parent.rotation;\n\t\tif (a1 > 180)\n\t\t\ta1 -= 360;\n\t\telse if (a1 <= -180) //\n\t\t\ta1 += 360;\n\t\tparent.rotation += a1 * mix;\n\t\ta2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - child.rotation;\n\t\tif (a2 > 180)\n\t\t\ta2 -= 360;\n\t\telse if (a2 <= -180) //\n\t\t\ta2 += 360;\n\t\tchild.rotation += a2 * mix;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData, ScaleYMode } from \"./ConstraintData.js\";\nimport { IkConstraint } from \"./IkConstraint.js\";\nimport { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** Stores the setup pose for an {@link IkConstraint}.\n *\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nexport class IkConstraintData extends ConstraintData<IkConstraint, IkConstraintPose> {\n\t/** The bones that are constrained by this IK constraint. */\n\tbones = [] as BoneData[];\n\n\tprivate _target: BoneData | null = null;\n\t/** The bone that is the IK target. */\n\tpublic set target (boneData: BoneData) { this._target = boneData; }\n\tpublic get target () {\n\t\tif (!this._target) throw new Error(\"target cannot be null.\")\n\t\treturn this._target;\n\t}\n\n\t/** Determines how the {@link BonePose.scaleY} changes when {@link IkConstraintPose.compress} or\n\t  * {@link IkConstraintPose.stretch} set {@link BonePose.scaleX}. */\n\t_scaleYMode = ScaleYMode.None;\n\tpublic set scaleYMode (scaleYMode: ScaleYMode) { this._scaleYMode = scaleYMode; }\n\tpublic get scaleYMode () {\n\t\tif (this._scaleYMode == null) throw new Error(\"scaleYMode cannot be null.\")\n\t\treturn this._scaleYMode;\n\t}\n\n\tconstructor (name: string) {\n\t\tsuper(name, new IkConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new IkConstraint(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\"\n\n/** Stores a pose for a path constraint. */\nexport class PathConstraintPose implements Pose<PathConstraintPose> {\n\t/** The position along the path. */\n\tposition: number = 0;\n\n\t/** The spacing between bones. */\n\tspacing: number = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained rotation. */\n\tmixRotate = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained translation X. */\n\tmixX = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained translation Y. */\n\tmixY = 0;\n\n\tpublic set (pose: PathConstraintPose) {\n\t\tthis.position = pose.position;\n\t\tthis.spacing = pose.spacing;\n\t\tthis.mixRotate = pose.mixRotate;\n\t\tthis.mixX = pose.mixX;\n\t\tthis.mixY = pose.mixY;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport { PathConstraint } from \"./PathConstraint.js\";\nimport { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SlotData } from \"./SlotData.js\";\n\n\n/** Stores the setup pose for a {@link PathConstraint}.\n *\n * See [path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */\nexport class PathConstraintData extends ConstraintData<PathConstraint, PathConstraintPose> {\n\t/** The bones that will be modified by this path constraint. */\n\tbones = [] as BoneData[];\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\tpublic set slot (slotData: SlotData) { this._slot = slotData; }\n\tpublic get slot () {\n\t\tif (!this._slot) throw new Error(\"SlotData not set.\")\n\t\telse return this._slot;\n\t}\n\tprivate _slot: SlotData | null = null;\n\n\t/** The mode for positioning the first bone on the path. */\n\tpositionMode: PositionMode = PositionMode.Fixed;\n\n\t/** The mode for positioning the bones after the first bone on the path. */\n\tspacingMode: SpacingMode = SpacingMode.Fixed;\n\n\t/** The mode for adjusting the rotation of the bones. */\n\trotateMode: RotateMode = RotateMode.Chain;\n\n\t/** An offset added to the constrained bone rotation. */\n\toffsetRotation: number = 0;\n\n\tconstructor (name: string) {\n\t\tsuper(name, new PathConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new PathConstraint(this, skeleton);\n\t}\n}\n\n/** Controls how the first bone is positioned along the path.\n *\n * See [position](http://esotericsoftware.com/spine-path-constraints#Position) in the Spine User Guide. */\nexport enum PositionMode { Fixed, Percent }\n\n/** Controls how bones after the first bone are positioned along the path.\n *\n * See [spacing](http://esotericsoftware.com/spine-path-constraints#Spacing) in the Spine User Guide. */\nexport enum SpacingMode { Length, Fixed, Percent, Proportional }\n\n/** Controls how bones are rotated, translated, and scaled to match the path.\n *\n * See [rotate mix](http://esotericsoftware.com/spine-path-constraints#Rotate-Mix) in the Spine User Guide. */\nexport enum RotateMode { Tangent, Chain, ChainScale }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport type { Bone } from \"./Bone.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { type PathConstraintData, PositionMode, RotateMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { MathUtils, Utils } from \"./Utils.js\";\n\n\n/** Adjusts the rotation, translation, and scale of the constrained bones so they follow a {@link PathAttachment}.\n *\n * See [Path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */\nexport class PathConstraint extends Constraint<PathConstraint, PathConstraintData, PathConstraintPose> {\n\tstatic NONE = -1; static BEFORE = -2; static AFTER = -3;\n\n\t/** The path constraint's setup pose data. */\n\tdata: PathConstraintData;\n\n\t/** The bones that will be modified by this path constraint. */\n\tbones: Array<BonePose>;\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\tslot: Slot;\n\n\tspaces = [] as number[]; positions = [] as number[];\n\tworld = [] as number[]; curves = [] as number[]; lengths = [] as number[];\n\tsegments = [] as number[];\n\n\tconstructor (data: PathConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new PathConstraintPose(), new PathConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of this.data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tthis.slot = skeleton.slots[data.slot.index];\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new PathConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst attachment = this.slot.appliedPose.attachment;\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\n\t\tconst p = this.appliedPose;\n\t\tconst mixRotate = p.mixRotate, mixX = p.mixX, mixY = p.mixY;\n\t\tif (mixRotate === 0 && mixX === 0 && mixY === 0) return;\n\n\t\tconst data = this.data;\n\t\tconst tangents = data.rotateMode === RotateMode.Tangent, scale = data.rotateMode === RotateMode.ChainScale;\n\n\t\tconst bones = this.bones;\n\t\tconst boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n\t\tconst spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array<number> = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : [];\n\t\tconst spacing = p.spacing;\n\n\t\tswitch (data.spacingMode) {\n\t\t\tcase SpacingMode.Percent:\n\t\t\t\tif (scale) {\n\t\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n; i++) {\n\t\t\t\t\t\tconst bone = bones[i];\n\t\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\t\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tlengths[i] = Math.sqrt(x * x + y * y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tUtils.arrayFill(spaces, 1, spacesCount, spacing);\n\t\t\t\tbreak;\n\t\t\tcase SpacingMode.Proportional: {\n\t\t\t\tlet sum = 0;\n\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tconst bone = bones[i];\n\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\tif (setupLength < MathUtils.epsilon) {\n\t\t\t\t\t\tif (scale) lengths[i] = 0;\n\t\t\t\t\t\tspaces[++i] = spacing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tconst length = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\tif (scale) lengths[i] = length;\n\t\t\t\t\t\tspaces[++i] = length;\n\t\t\t\t\t\tsum += length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sum > 0) {\n\t\t\t\t\tsum = spacesCount / sum * spacing;\n\t\t\t\t\tfor (let i = 1; i < spacesCount; i++)\n\t\t\t\t\t\tspaces[i] *= sum;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst lengthSpacing = data.spacingMode === SpacingMode.Length;\n\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tconst bone = bones[i];\n\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\tif (setupLength < MathUtils.epsilon) {\n\t\t\t\t\t\tif (scale) lengths[i] = 0;\n\t\t\t\t\t\tspaces[++i] = spacing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tconst length = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\tif (scale) lengths[i] = length;\n\t\t\t\t\t\tspaces[++i] = (lengthSpacing ? Math.max(0, setupLength + spacing) : spacing) * length / setupLength;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst positions = this.computeWorldPositions(skeleton, attachment, spacesCount, tangents);\n\t\tlet boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n\t\tlet tip = false;\n\t\tif (offsetRotation === 0)\n\t\t\ttip = data.rotateMode === RotateMode.Chain;\n\t\telse {\n\t\t\ttip = false;\n\t\t\tconst bone = this.slot.bone.appliedPose;\n\t\t\toffsetRotation *= bone.a * bone.d - bone.b * bone.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n\t\t}\n\t\tfor (let i = 0, ip = 3, u = skeleton._update; i < boneCount; i++, ip += 3) {\n\t\t\tconst bone = bones[i];\n\t\t\tbone.worldX += (boneX - bone.worldX) * mixX;\n\t\t\tbone.worldY += (boneY - bone.worldY) * mixY;\n\t\t\tconst x = positions[ip], y = positions[ip + 1], dx = x - boneX, dy = y - boneY;\n\t\t\tif (scale) {\n\t\t\t\tconst length = lengths[i];\n\t\t\t\tif (length !== 0) {\n\t\t\t\t\tconst s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1;\n\t\t\t\t\tbone.a *= s;\n\t\t\t\t\tbone.c *= s;\n\t\t\t\t}\n\t\t\t}\n\t\t\tboneX = x;\n\t\t\tboneY = y;\n\t\t\tif (mixRotate > 0) {\n\t\t\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n\t\t\t\tif (tangents)\n\t\t\t\t\tr = positions[ip - 1];\n\t\t\t\telse if (spaces[i + 1] === 0)\n\t\t\t\t\tr = positions[ip + 2];\n\t\t\t\telse\n\t\t\t\t\tr = Math.atan2(dy, dx);\n\t\t\t\tr -= Math.atan2(c, a);\n\t\t\t\tif (tip) {\n\t\t\t\t\tcos = Math.cos(r);\n\t\t\t\t\tsin = Math.sin(r);\n\t\t\t\t\tconst length = bone.bone.data.length;\n\t\t\t\t\tboneX += (length * (cos * a - sin * c) - dx) * mixRotate;\n\t\t\t\t\tboneY += (length * (sin * a + cos * c) - dy) * mixRotate;\n\t\t\t\t} else {\n\t\t\t\t\tr += offsetRotation;\n\t\t\t\t}\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tr *= mixRotate;\n\t\t\t\tcos = Math.cos(r);\n\t\t\t\tsin = Math.sin(r);\n\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t}\n\t\t\tbone.modifyWorld(u);\n\t\t}\n\t}\n\n\tcomputeWorldPositions (skeleton: Skeleton, path: PathAttachment, spacesCount: number, tangents: boolean) {\n\t\tconst slot = this.slot;\n\t\tlet position = this.appliedPose.position;\n\t\tlet spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world: Array<number> = this.world;\n\t\tconst closed = path.closed;\n\t\tlet verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n\n\t\tif (!path.constantSpeed) {\n\t\t\tconst lengths = path.lengths;\n\t\t\tcurveCount -= closed ? 1 : 2;\n\t\t\tconst pathLength = lengths[curveCount];\n\t\t\tif (this.data.positionMode === PositionMode.Percent) position *= pathLength;\n\n\t\t\tlet multiplier: number;\n\t\t\tswitch (this.data.spacingMode) {\n\t\t\t\tcase SpacingMode.Percent: multiplier = pathLength; break;\n\t\t\t\tcase SpacingMode.Proportional: multiplier = pathLength / spacesCount; break;\n\t\t\t\tdefault: multiplier = 1;\n\t\t\t}\n\n\t\t\tworld = Utils.setArraySize(this.world, 8);\n\t\t\tfor (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n\t\t\t\tconst space = spaces[i] * multiplier;\n\t\t\t\tposition += space;\n\t\t\t\tlet p = position;\n\n\t\t\t\tif (closed) {\n\t\t\t\t\tp %= pathLength;\n\t\t\t\t\tif (p < 0) p += pathLength;\n\t\t\t\t\tcurve = 0;\n\t\t\t\t} else if (p < 0) {\n\t\t\t\t\tif (prevCurve !== PathConstraint.BEFORE) {\n\t\t\t\t\t\tprevCurve = PathConstraint.BEFORE;\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, 2, 4, world, 0, 2);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (p > pathLength) {\n\t\t\t\t\tif (prevCurve !== PathConstraint.AFTER) {\n\t\t\t\t\t\tprevCurve = PathConstraint.AFTER;\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, verticesLength - 6, 4, world, 0, 2);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addAfterPosition(p - pathLength, world, 0, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Determine curve containing position.\n\t\t\t\tfor (; ; curve++) {\n\t\t\t\t\tconst length = lengths[curve];\n\t\t\t\t\tif (p > length) continue;\n\t\t\t\t\tif (curve === 0)\n\t\t\t\t\t\tp /= length;\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst prev = lengths[curve - 1];\n\t\t\t\t\t\tp = (p - prev) / (length - prev);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t\tif (closed && curve === curveCount) {\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, verticesLength - 4, 4, world, 0, 2);\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, 0, 4, world, 4, 2);\n\t\t\t\t\t} else\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, curve * 6 + 2, 8, world, 0, 2);\n\t\t\t\t}\n\t\t\t\tthis.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o,\n\t\t\t\t\ttangents || (i > 0 && space === 0));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\t// World vertices.\n\t\tif (closed) {\n\t\t\tverticesLength += 2;\n\t\t\tworld = Utils.setArraySize(this.world, verticesLength);\n\t\t\tpath.computeWorldVertices(skeleton, slot, 2, verticesLength - 4, world, 0, 2);\n\t\t\tpath.computeWorldVertices(skeleton, slot, 0, 2, world, verticesLength - 4, 2);\n\t\t\tworld[verticesLength - 2] = world[0];\n\t\t\tworld[verticesLength - 1] = world[1];\n\t\t} else {\n\t\t\tcurveCount--;\n\t\t\tverticesLength -= 4;\n\t\t\tworld = Utils.setArraySize(this.world, verticesLength);\n\t\t\tpath.computeWorldVertices(skeleton, slot, 2, verticesLength, world, 0, 2);\n\t\t}\n\n\t\t// Curve lengths.\n\t\tconst curves = Utils.setArraySize(this.curves, curveCount);\n\t\tlet pathLength = 0;\n\t\tlet x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n\t\tlet tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n\t\tfor (let i = 0, w = 2; i < curveCount; i++, w += 6) {\n\t\t\tcx1 = world[w];\n\t\t\tcy1 = world[w + 1];\n\t\t\tcx2 = world[w + 2];\n\t\t\tcy2 = world[w + 3];\n\t\t\tx2 = world[w + 4];\n\t\t\ty2 = world[w + 5];\n\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\tdfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n\t\t\tdfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx;\n\t\t\tdfy += ddfy;\n\t\t\tddfx += dddfx;\n\t\t\tddfy += dddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx;\n\t\t\tdfy += ddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx + dddfx;\n\t\t\tdfy += ddfy + dddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tcurves[i] = pathLength;\n\t\t\tx1 = x2;\n\t\t\ty1 = y2;\n\t\t}\n\n\t\tif (this.data.positionMode === PositionMode.Percent) position *= pathLength;\n\n\t\tlet multiplier: number;\n\t\tswitch (this.data.spacingMode) {\n\t\t\tcase SpacingMode.Percent: multiplier = pathLength; break;\n\t\t\tcase SpacingMode.Proportional: multiplier = pathLength / spacesCount; break;\n\t\t\tdefault: multiplier = 1;\n\t\t}\n\n\t\tconst segments = this.segments;\n\t\tlet curveLength = 0;\n\t\tfor (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n\t\t\tconst space = spaces[i] * multiplier;\n\t\t\tposition += space;\n\t\t\tlet p = position;\n\n\t\t\tif (closed) {\n\t\t\t\tp %= pathLength;\n\t\t\t\tif (p < 0) p += pathLength;\n\t\t\t\tcurve = 0;\n\t\t\t\tsegment = 0;\n\t\t\t} else if (p < 0) {\n\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\tcontinue;\n\t\t\t} else if (p > pathLength) {\n\t\t\t\tthis.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Determine curve containing position.\n\t\t\tfor (; ; curve++) {\n\t\t\t\tconst length = curves[curve];\n\t\t\t\tif (p > length) continue;\n\t\t\t\tif (curve === 0)\n\t\t\t\t\tp /= length;\n\t\t\t\telse {\n\t\t\t\t\tconst prev = curves[curve - 1];\n\t\t\t\t\tp = (p - prev) / (length - prev);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Curve segment lengths.\n\t\t\tif (curve !== prevCurve) {\n\t\t\t\tprevCurve = curve;\n\t\t\t\tlet ii = curve * 6;\n\t\t\t\tx1 = world[ii];\n\t\t\t\ty1 = world[ii + 1];\n\t\t\t\tcx1 = world[ii + 2];\n\t\t\t\tcy1 = world[ii + 3];\n\t\t\t\tcx2 = world[ii + 4];\n\t\t\t\tcy2 = world[ii + 5];\n\t\t\t\tx2 = world[ii + 6];\n\t\t\t\ty2 = world[ii + 7];\n\t\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n\t\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n\t\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n\t\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n\t\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\t\tdfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n\t\t\t\tdfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n\t\t\t\tcurveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[0] = curveLength;\n\t\t\t\tfor (ii = 1; ii < 8; ii++) {\n\t\t\t\t\tdfx += ddfx;\n\t\t\t\t\tdfy += ddfy;\n\t\t\t\t\tddfx += dddfx;\n\t\t\t\t\tddfy += dddfy;\n\t\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\tsegments[ii] = curveLength;\n\t\t\t\t}\n\t\t\t\tdfx += ddfx;\n\t\t\t\tdfy += ddfy;\n\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[8] = curveLength;\n\t\t\t\tdfx += ddfx + dddfx;\n\t\t\t\tdfy += ddfy + dddfy;\n\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[9] = curveLength;\n\t\t\t\tsegment = 0;\n\t\t\t}\n\n\t\t\t// Weight by segment length.\n\t\t\tp *= curveLength;\n\t\t\tfor (; ; segment++) {\n\t\t\t\tconst length = segments[segment];\n\t\t\t\tif (p > length) continue;\n\t\t\t\tif (segment === 0)\n\t\t\t\t\tp /= length;\n\t\t\t\telse {\n\t\t\t\t\tconst prev = segments[segment - 1];\n\t\t\t\t\tp = segment + (p - prev) / (length - prev);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space === 0));\n\t\t}\n\t\treturn out;\n\t}\n\n\taddBeforePosition (p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n\t\tconst x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n\t\tout[o] = x1 + p * Math.cos(r);\n\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\tout[o + 2] = r;\n\t}\n\n\taddAfterPosition (p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n\t\tconst x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n\t\tout[o] = x1 + p * Math.cos(r);\n\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\tout[o + 2] = r;\n\t}\n\n\taddCurvePosition (p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number,\n\t\tout: Array<number>, o: number, tangents: boolean) {\n\t\tif (p === 0 || Number.isNaN(p)) {\n\t\t\tout[o] = x1;\n\t\t\tout[o + 1] = y1;\n\t\t\tout[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n\t\t\treturn;\n\t\t}\n\t\tconst tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n\t\tconst ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n\t\tconst x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n\t\tout[o] = x;\n\t\tout[o + 1] = y;\n\t\tif (tangents) {\n\t\t\tif (p < 0.001)\n\t\t\t\tout[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n\t\t\telse\n\t\t\t\tout[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n\t\t}\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tconst slotIndex = this.slot.data.index;\n\t\tconst slotBone = this.slot.bone;\n\t\tif (skeleton.skin != null) this.sortPathSlot(skeleton, skeleton.skin, slotIndex, slotBone);\n\t\tif (skeleton.data.defaultSkin != null && skeleton.data.defaultSkin !== skeleton.skin)\n\t\t\tthis.sortPathSlot(skeleton, skeleton.data.defaultSkin, slotIndex, slotBone);\n\t\tthis.sortPath(skeleton, this.slot.pose.attachment, slotBone);\n\t\tconst bones = this.bones;\n\t\tconst boneCount = this.bones.length;\n\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\tconst bone = bones[i].bone;\n\t\t\tskeleton.sortBone(bone);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\t\tskeleton._updateCache.push(this);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tskeleton.sortReset(bones[i].bone.children);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tbones[i].bone.sorted = true;\n\t}\n\n\tprivate sortPathSlot (skeleton: Skeleton, skin: Skin, slotIndex: number, slotBone: Bone) {\n\t\tconst entries = skin.getAttachments();\n\t\tfor (let i = 0, n = entries.length; i < n; i++) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.slotIndex === slotIndex) this.sortPath(skeleton, entry.attachment, slotBone);\n\t\t}\n\t}\n\n\tprivate sortPath (skeleton: Skeleton, attachment: Attachment | null, slotBone: Bone) {\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\t\tconst pathBones = attachment.bones;\n\t\tif (pathBones == null)\n\t\t\tskeleton.sortBone(slotBone);\n\t\telse {\n\t\t\tconst bones = skeleton.bones;\n\t\t\tfor (let i = 0, n = pathBones.length; i < n;) {\n\t\t\t\tlet nn = pathBones[i++];\n\t\t\t\tnn += i;\n\t\t\t\twhile (i < nn)\n\t\t\t\t\tskeleton.sortBone(bones[pathBones[i++]]);\n\t\t\t}\n\t\t}\n\t}\n\n\tisSourceActive () {\n\t\treturn this.slot.bone.active;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { PhysicsConstraint } from \"./PhysicsConstraint.js\";\n/** Determines how physics and other non-deterministic updates are applied. */\nexport enum Physics {\n\t/** Physics are not updated or applied. */\n\tnone,\n\n\t/** Physics are {@link PhysicsConstraint.reset | reset}. */\n\treset,\n\n\t/** Physics are updated and the pose from physics is applied. */\n\tupdate,\n\n\t/** Physics are not updated but the pose from physics is applied. */\n\tpose\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\"\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** Stores a pose for a physics constraint. */\nexport class PhysicsConstraintPose implements Pose<PhysicsConstraintPose> {\n\n\t/** Controls how much bone movement is converted into physics movement. */\n\tinertia = 0;\n\n\t/** The amount of force used to return properties to the unconstrained value. */\n\tstrength = 0;\n\n\t/** Reduces the speed of physics movements, with more of a reduction at higher speeds. */\n\tdamping = 0;\n\n\t/** Determines susceptibility to acceleration. */\n\tmassInverse = 0;\n\n\t/** Applies a constant force along the {@link Skeleton.windX}, {@link Skeleton.windY} vector. */\n\twind = 0;\n\n\t/** Applies a constant force along the {@link Skeleton.gravityX}, {@link Skeleton.gravityY} vector. */\n\tgravity = 0;\n\n\t/** A percentage (0+) that controls the mix between the constrained and unconstrained poses. */\n\tmix = 0;\n\n\tpublic set (pose: PhysicsConstraintPose) {\n\t\tthis.inertia = pose.inertia;\n\t\tthis.strength = pose.strength;\n\t\tthis.damping = pose.damping;\n\t\tthis.massInverse = pose.massInverse;\n\t\tthis.wind = pose.wind;\n\t\tthis.gravity = pose.gravity;\n\t\tthis.mix = pose.mix;\n\t}\n\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { DeformTimeline } from \"./Animation.js\";\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { Sequence } from \"./attachments/Sequence.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { Color } from \"./Utils.js\";\n\n/** Stores a slot's pose. */\nexport class SlotPose implements Pose<SlotPose> {\n\t/** The color used to tint the slot's attachment. If {@link darkColor} is set, this is used as the light color for two color\n\t * tinting. */\n\treadonly color = new Color(1, 1, 1, 1);\n\n\t/** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark\n\t * color's alpha is not used. */\n\tdarkColor: Color | null = null;\n\n\t/** The current attachment for the slot, or null if the slot has no attachment. */\n\tattachment: Attachment | null = null; // Not used in setup pose.\n\n\t/** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the\n\t * {@link Sequence.getSetupIndex}. */\n\tsequenceIndex = 0;\n\n\t/** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a\n\t * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.\n\t *\n\t * See {@link VertexAttachment.computeWorldVertices} and\n\t * {@link DeformTimeline}. */\n\treadonly deform = [] as number[];\n\n\tSlotPose () {\n\t}\n\n\tpublic set (pose: SlotPose): void {\n\t\tif (pose == null) throw new Error(\"pose cannot be null.\");\n\t\tthis.color.setFromColor(pose.color);\n\t\tif (this.darkColor != null && pose.darkColor != null) this.darkColor.setFromColor(pose.darkColor);\n\t\tthis.attachment = pose.attachment;\n\t\tthis.sequenceIndex = pose.sequenceIndex;\n\t\tthis.deform.length = 0;\n\t\tthis.deform.push(...pose.deform);\n\t}\n\n\t/** The current attachment for the slot, or null if the slot has no attachment. */\n\tgetAttachment (): Attachment | null {\n\t\treturn this.attachment;\n\t}\n\n\t/** Sets the slot's attachment and, if the attachment changed, resets {@link sequenceIndex} and clears the {@link deform}.\n\t * The deform is not cleared if the old attachment has the same {@link VertexAttachment.getTimelineAttachment} as the\n\t * specified attachment. */\n\tsetAttachment (attachment: Attachment | null): void {\n\t\tif (this.attachment === attachment) return;\n\t\tif (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)\n\t\t\t|| attachment.timelineAttachment !== this.attachment.timelineAttachment) {\n\t\t\tthis.deform.length = 0;\n\t\t}\n\t\tthis.attachment = attachment;\n\t\tthis.sequenceIndex = -1;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Bone } from \"./Bone.js\";\nimport { Posed } from \"./Posed.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SlotData } from \"./SlotData.js\";\nimport { SlotPose } from \"./SlotPose.js\";\nimport { Color } from \"./Utils.js\";\n\n/** Organizes attachments for {@link Skeleton.drawOrder} purposes and provide a place to store state for an attachment.\n *\n * State cannot be stored in an attachment itself because attachments are stateless and may be shared across multiple\n * skeletons. */\nexport class Slot extends Posed<SlotData, SlotPose> {\n\treadonly skeleton: Skeleton;\n\n\t/** The bone this slot belongs to. */\n\treadonly bone: Bone;\n\n\tattachmentState: number = 0;\n\n\tconstructor (data: SlotData, skeleton: Skeleton) {\n\t\tsuper(data, new SlotPose(), new SlotPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.skeleton = skeleton;\n\t\tthis.bone = skeleton.bones[data.boneData.index];\n\t\tif (data.setupPose.darkColor != null) {\n\t\t\tthis.pose.darkColor = new Color();\n\t\t\tthis.constrainedPose.darkColor = new Color();\n\t\t}\n\t\tthis.setupPose();\n\t}\n\n\t/** Copy constructor. */\n\tpublic copy (slot: Slot, bone: Bone, skeleton: Skeleton) {\n\t\tconst copy = new Slot(slot.data, this.skeleton);\n\t\tif (this.data.setupPose.darkColor != null) {\n\t\t\tcopy.pose.darkColor = new Color();\n\t\t\tcopy.constrainedPose.darkColor = new Color();\n\t\t}\n\t\tcopy.pose.set(slot.pose);\n\t\treturn copy;\n\t}\n\n\tsetupPose () {\n\t\tthis.pose.color.setFromColor(this.data.setupPose.color);\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tif (this.pose.darkColor) this.pose.darkColor.setFromColor(this.data.setupPose.darkColor!);\n\t\tthis.pose.sequenceIndex = this.data.setupPose.sequenceIndex;\n\t\tif (!this.data.attachmentName)\n\t\t\tthis.pose.setAttachment(null);\n\t\telse {\n\t\t\tthis.pose.attachment = null;\n\t\t\tthis.pose.setAttachment(this.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { AnimationState } from \"./AnimationState.js\";\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport { Bone } from \"./Bone.js\";\nimport type { Constraint } from \"./Constraint.js\";\nimport { DrawOrder } from \"./DrawOrder.js\";\nimport type { Physics } from \"./Physics.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport type { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Posed } from \"./Posed.js\";\nimport type { SkeletonClipping } from \"./SkeletonClipping.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { Skin } from \"./Skin.js\";\nimport { Slot } from \"./Slot.js\";\nimport { Color, type NumberArrayLike, Utils, Vector2 } from \"./Utils.js\";\n\n/** Stores bones and slots to be posed by animations and application code. Multiple skeleton instances can share the same\n * {@link SkeletonData}, including animations, attachments, and skins.\n *\n * After posing, call {@link updateWorldTransform} to apply constraints and compute world transforms for rendering.\n *\n * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */\nexport class Skeleton {\n\tprivate static quadTriangles = [0, 1, 2, 2, 3, 0];\n\tstatic yDown = false;\n\tstatic get yDir (): number {\n\t\treturn Skeleton.yDown ? -1 : 1;\n\t}\n\n\t/** The skeleton's setup pose data. */\n\treadonly data: SkeletonData;\n\n\t/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n\treadonly bones: Array<Bone>;\n\n\t/** The skeleton's slots. To add a slot, also add it to {@link DrawOrder.pose}. */\n\treadonly slots: Array<Slot>;\n\n\t/** The skeleton's draw order. Use {@link DrawOrder.appliedPose} for rendering and {@link DrawOrder.pose} for changing the draw\n\t * order. */\n\treadonly drawOrder: DrawOrder;\n\n\t/** The skeleton's constraints. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly constraints: Array<Constraint<any, any, any>>;\n\n\t/** The skeleton's physics constraints. */\n\treadonly physics: Array<PhysicsConstraint>;\n\n\t/** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link updateCache}. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly _updateCache = [] as any[];\n\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly resetCache: Array<Posed<any, any>> = [];\n\n\t/** The skeleton's current skin. May be null. */\n\tskin: Skin | null = null;\n\n\t/** The color to tint all the skeleton's attachments. */\n\treadonly color: Color;\n\n\t/** Scales the entire skeleton on the X axis.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tscaleX = 1;\n\n\tprivate _scaleY = 1;\n\n\t/** Scales the entire skeleton on the Y axis.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tpublic get scaleY () {\n\t\treturn this._scaleY * Skeleton.yDir;\n\t}\n\n\tpublic set scaleY (scaleY: number) {\n\t\tthis._scaleY = scaleY;\n\t}\n\n\t/** Sets the skeleton X position, which is added to the root bone worldX position.\n\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\tx = 0;\n\n\t/** Sets the skeleton Y position, which is added to the root bone worldY position.\n\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\ty = 0;\n\n\t/** Returns the skeleton's time, is used for time-based manipulations, such as {@link PhysicsConstraint}.\n\t *\n\t * See {@link _update}. */\n\ttime = 0;\n\n\t/** The x component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */\n\twindX = 1;\n\n\t/** The y component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */\n\twindY = 0;\n\n\t/** The x component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */\n\tgravityX = 0;\n\n\t/** The y component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */\n\tgravityY = 1;\n\n\t_update = 0;\n\n\tconstructor (data: SkeletonData) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tthis.data = data;\n\n\t\tthis.bones = [] as Bone[];\n\t\tfor (let i = 0; i < data.bones.length; i++) {\n\t\t\tconst boneData = data.bones[i];\n\t\t\tlet bone: Bone;\n\t\t\tif (!boneData.parent)\n\t\t\t\tbone = new Bone(boneData, null);\n\t\t\telse {\n\t\t\t\tconst parent = this.bones[boneData.parent.index];\n\t\t\t\tbone = new Bone(boneData, parent);\n\t\t\t\tparent.children.push(bone);\n\t\t\t}\n\t\t\tthis.bones.push(bone);\n\t\t}\n\n\t\tthis.slots = [] as Slot[];\n\t\tfor (const slotData of this.data.slots)\n\t\t\tthis.slots.push(new Slot(slotData, this));\n\t\tthis.drawOrder = new DrawOrder(this.slots);\n\n\t\tthis.physics = [] as PhysicsConstraint[];\n\t\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\t\tthis.constraints = [] as Constraint<any, any, any>[];\n\t\tfor (const constraintData of this.data.constraints) {\n\t\t\tconst constraint = constraintData.create(this);\n\t\t\tif (constraint instanceof PhysicsConstraint) this.physics.push(constraint);\n\t\t\tthis.constraints.push(constraint);\n\t\t}\n\n\t\tthis.color = new Color(1, 1, 1, 1);\n\n\t\tthis.updateCache();\n\t}\n\n\t/** Caches information about bones and constraints. Must be called if the {@link skin} is modified or if bones, constraints,\n\t * or weighted path attachments are added or removed. */\n\tupdateCache () {\n\t\tthis._updateCache.length = 0;\n\t\tthis.resetCache.length = 0;\n\n\t\tthis.drawOrder.unconstrained();\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tslots[i].unconstrained();\n\n\t\tconst bones = this.bones;\n\t\tconst boneCount = bones.length;\n\t\tfor (let i = 0, n = boneCount; i < n; i++) {\n\t\t\tconst bone = bones[i];\n\t\t\tbone.sorted = bone.data.skinRequired;\n\t\t\tbone.active = !bone.sorted;\n\t\t\tbone.unconstrained();\n\t\t}\n\t\tif (this.skin) {\n\t\t\tconst skinBones = this.skin.bones;\n\t\t\tfor (let i = 0, n = this.skin.bones.length; i < n; i++) {\n\t\t\t\tlet bone: Bone | null = this.bones[skinBones[i].index];\n\t\t\t\tdo {\n\t\t\t\t\tbone.sorted = false;\n\t\t\t\t\tbone.active = true;\n\t\t\t\t\tbone = bone.parent;\n\t\t\t\t} while (bone);\n\t\t\t}\n\t\t}\n\n\t\tconst constraints = this.constraints;\n\t\tlet n = this.constraints.length;\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tconstraints[i].unconstrained();\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tconstraint.active = constraint.isSourceActive()\n\t\t\t\t// biome-ignore lint/complexity/useOptionalChain: changing to this might return undefined\n\t\t\t\t&& (!constraint.data.skinRequired || (this.skin != null && this.skin.constraints.includes(constraint.data)));\n\t\t\tif (constraint.active) constraint.sort(this);\n\t\t}\n\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tthis.sortBone(bones[i]);\n\n\t\tn = this._updateCache.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst updateable = this._updateCache[i];\n\t\t\tif (updateable instanceof Bone) this._updateCache[i] = updateable.appliedPose;\n\t\t}\n\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstrained (object: Posed<any, any>) {\n\t\tif (object.pose === object.appliedPose) {\n\t\t\tobject.constrained();\n\t\t\tthis.resetCache.push(object);\n\t\t}\n\t}\n\n\tsortBone (bone: Bone) {\n\t\tif (bone.sorted || !bone.active) return;\n\t\tconst parent = bone.parent;\n\t\tif (parent) this.sortBone(parent);\n\t\tbone.sorted = true;\n\t\tthis._updateCache.push(bone);\n\t}\n\n\tsortReset (bones: Array<Bone>) {\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tconst bone = bones[i];\n\t\t\tif (bone.active) {\n\t\t\t\tif (bone.sorted) this.sortReset(bone.children);\n\t\t\t\tbone.sorted = false;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Updates the world transform for each bone and applies all constraints.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransform (physics: Physics): void {\n\t\tthis._update++;\n\n\t\tif (this.drawOrder.appliedPose === this.drawOrder.constrainedPose) this.drawOrder.resetConstrained();\n\t\tconst resetCache = this.resetCache;\n\t\tfor (let i = 0, n = this.resetCache.length; i < n; i++)\n\t\t\tresetCache[i].resetConstrained();\n\n\t\tconst updateCache = this._updateCache;\n\t\tfor (let i = 0, n = this._updateCache.length; i < n; i++)\n\t\t\tupdateCache[i].update(this, physics);\n\t}\n\n\t/** Sets the bones, constraints, and slots to their setup pose values. */\n\tsetupPose () {\n\t\tthis.setupPoseBones();\n\t\tthis.setupPoseSlots();\n\t}\n\n\t/** Sets the bones and constraints to their setup pose values. */\n\tsetupPoseBones () {\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tbones[i].setupPose();\n\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].setupPose();\n\t}\n\n\t/** Sets the slots and draw order to their setup pose values. */\n\tsetupPoseSlots () {\n\t\tthis.drawOrder.setupPose();\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tslots[i].setupPose();\n\t}\n\n\t/** Returns the root bone, or null if the skeleton has no bones. */\n\tgetRootBone () {\n\t\tif (this.bones.length === 0) return null;\n\t\treturn this.bones[0];\n\t}\n\n\t/** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it\n\t * repeatedly. */\n\tfindBone (boneName: string) {\n\t\tif (!boneName) throw new Error(\"boneName cannot be null.\");\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tif (bones[i].data.name === boneName) return bones[i];\n\t\treturn null;\n\t}\n\n\t/** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n\t * repeatedly. */\n\tfindSlot (slotName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tif (slots[i].data.name === slotName) return slots[i];\n\t\treturn null;\n\t}\n\n\t/** Sets a skin by name.\n\t *\n\t * See {@link setSkin}. */\n\tsetSkin (skinName: string): void;\n\n\t/** Sets the skin used to look up attachments before looking in {@link SkeletonData.defaultSkin}. If the skin is changed,\n\t * {@link updateCache} is called.\n\t *\n\t * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n\t * old skin, each slot's setup mode attachment is attached from the new skin.\n\t *\n\t * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling\n\t * {@link setupPoseSlots}. Also, often {@link AnimationState.apply} is called before the next time the skeleton is\n\t * rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin. */\n\tsetSkin (newSkin: Skin | null): void;\n\n\tsetSkin (newSkin: Skin | null | string): void {\n\t\tif (typeof newSkin === \"string\")\n\t\t\tthis.setSkinByName(newSkin);\n\t\telse\n\t\t\tthis.setSkinBySkin(newSkin);\n\t};\n\n\tprivate setSkinByName (skinName: string) {\n\t\tconst skin = this.data.findSkin(skinName);\n\t\tif (!skin) throw new Error(`Skin not found: ${skinName}`);\n\t\tthis.setSkin(skin);\n\t}\n\n\tprivate setSkinBySkin (newSkin: Skin | null) {\n\t\tif (newSkin === this.skin) return;\n\t\tif (newSkin) {\n\t\t\tif (this.skin)\n\t\t\t\tnewSkin.attachAll(this, this.skin);\n\t\t\telse {\n\t\t\t\tconst slots = this.slots;\n\t\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\tconst slot = slots[i];\n\t\t\t\t\tconst name = slot.data.attachmentName;\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tconst attachment = newSkin.getAttachment(i, name);\n\t\t\t\t\t\tif (attachment) slot.pose.setAttachment(attachment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.skin = newSkin;\n\t\tthis.updateCache();\n\t}\n\n\t/** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot name and attachment\n\t * name.\n\t *\n\t * See {@link getAttachment}. */\n\tgetAttachment (slotName: string, placeholder: string): Attachment | null;\n\n\t/** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot index and\n\t * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skins\">Runtime skins</a> in the Spine Runtimes Guide. */\n\tgetAttachment (slotIndex: number, placeholder: string): Attachment | null;\n\n\tgetAttachment (slotNameOrIndex: string | number, placeholder: string): Attachment | null {\n\t\tif (typeof slotNameOrIndex === 'string')\n\t\t\treturn this.getAttachmentByName(slotNameOrIndex, placeholder);\n\t\treturn this.getAttachmentByIndex(slotNameOrIndex, placeholder);\n\t}\n\n\t/** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot name and attachment\n\t * name.\n\t *\n\t * See {@link getAttachment}.\n\t * @returns May be null. */\n\tprivate getAttachmentByName (slotName: string, placeholder: string): Attachment | null {\n\t\tconst slot = this.data.findSlot(slotName);\n\t\tif (!slot) throw new Error(`Can't find slot with name ${slotName}`);\n\t\treturn this.getAttachment(slot.index, placeholder);\n\t}\n\n\t/** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot index and\n\t * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n\t *\n\t * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.\n\t * @returns May be null. */\n\tprivate getAttachmentByIndex (slotIndex: number, placeholder: string): Attachment | null {\n\t\tif (!placeholder) throw new Error(\"placeholder cannot be null.\");\n\t\tif (this.skin) {\n\t\t\tconst attachment = this.skin.getAttachment(slotIndex, placeholder);\n\t\t\tif (attachment) return attachment;\n\t\t}\n\t\tif (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, placeholder);\n\t\treturn null;\n\t}\n\n\t/** A convenience method to set an attachment by finding the slot with {@link findSlot}, finding the attachment with\n\t * {@link getAttachment}, then setting the slot's {@link Slot.attachment}.\n\t * @param placeholder May be null to clear the slot's attachment. */\n\tsetAttachment (slotName: string, placeholder: string | null) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tconst slot = this.findSlot(slotName);\n\t\tif (!slot) throw new Error(`Slot not found: ${slotName}`);\n\t\tlet attachment: Attachment | null = null;\n\t\tif (placeholder) {\n\t\t\tattachment = this.getAttachment(slot.data.index, placeholder);\n\t\t\tif (!attachment)\n\t\t\t\tthrow new Error(`Attachment not found: ${placeholder}, for slot: ${slotName}`);\n\t\t}\n\t\tslot.pose.setAttachment(attachment);\n\t}\n\n\t/** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of\n\t * this method than to call it multiple times. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tfindConstraint<T extends Constraint<any, any, any>> (constraintName: string, type: new () => T): T | null {\n\t\tif (constraintName == null) throw new Error(\"constraintName cannot be null.\");\n\t\tif (type == null) throw new Error(\"type cannot be null.\");\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof type && constraint.data.name === constraintName) return constraint as T;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose.\n\t * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n\t * @param size An output value, the width and height of the AABB.\n\t * @param temp Working memory to temporarily store attachments' computed world vertices. */\n\tgetBoundsRect (clipper?: SkeletonClipping) {\n\t\tconst offset = new Vector2();\n\t\tconst size = new Vector2();\n\t\tthis.getBounds(offset, size, undefined, clipper);\n\t\treturn { x: offset.x, y: offset.y, width: size.x, height: size.y };\n\t}\n\n\t/** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose. Optionally applies\n\t * clipping.\n\t * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n\t * @param size An output value, the width and height of the AABB.\n\t * @param temp Working memory to temporarily store attachments' computed world vertices.\n\t * @param clipper {@link SkeletonClipping} to use. If `null`, no clipping is applied. */\n\tgetBounds (offset: Vector2, size: Vector2, temp: Array<number> = new Array<number>(2), clipper: SkeletonClipping | null = null) {\n\t\tif (!offset) throw new Error(\"offset cannot be null.\");\n\t\tif (!size) throw new Error(\"size cannot be null.\");\n\t\tconst drawOrder = this.drawOrder.appliedPose;\n\t\tconst slots = drawOrder;\n\t\tlet minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tconst slot = slots[i];\n\t\t\tif (!slot.bone.active) continue;\n\t\t\tlet verticesLength = 0;\n\t\t\tlet vertices: NumberArrayLike | null = null;\n\t\t\tlet triangles: NumberArrayLike | null = null;\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\t\t\tif (attachment) {\n\t\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\t\tverticesLength = 8;\n\t\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tattachment.computeWorldVertices(slot, attachment.getOffsets(slot.appliedPose), vertices, 0, 2);\n\t\t\t\t\ttriangles = Skeleton.quadTriangles;\n\t\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\t\tverticesLength = attachment.worldVerticesLength;\n\t\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tattachment.computeWorldVertices(this, slot, 0, verticesLength, vertices, 0, 2);\n\t\t\t\t\ttriangles = attachment.triangles;\n\t\t\t\t} else if (attachment instanceof ClippingAttachment && clipper) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tclipper.clipStart(this, slot, attachment);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (vertices && triangles) {\n\t\t\t\t\tif (clipper?.isClipping() && clipper.clipTriangles(vertices, triangles, triangles.length)) {\n\t\t\t\t\t\tvertices = clipper.clippedVertices;\n\t\t\t\t\t\tverticesLength = clipper.clippedVertices.length;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n\t\t\t\t\t\tconst x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (clipper) clipper.clipEnd(slot);\n\t\t}\n\t\tif (clipper) clipper.clipEnd();\n\t\toffset.set(minX, minY);\n\t\tsize.set(maxX - minX, maxY - minY);\n\t}\n\n\t/** Scales the entire skeleton on the X and Y axes.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tpublic setScale (scaleX: number, scaleY: number) {\n\t\tthis.scaleX = scaleX;\n\t\tthis.scaleY = scaleY;\n\t}\n\n\t/** Sets the skeleton X and Y position, which is added to the root bone worldX and worldY position.\n\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\tpublic setPosition (x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\t/** Increments the skeleton's {@link time}. */\n\tupdate (delta: number) {\n\t\tthis.time += delta;\n\t}\n\n\t/** Calls {@link PhysicsConstraint.translate} for each physics constraint. */\n\tphysicsTranslate (x: number, y: number) {\n\t\tconst constraints = this.physics;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].translate(x, y);\n\t}\n\n\t/** Calls {@link PhysicsConstraint.rotate} for each physics constraint. */\n\tphysicsRotate (x: number, y: number, degrees: number) {\n\t\tconst constraints = this.physics;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].rotate(x, y, degrees);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Physics } from \"./Physics.js\";\nimport type { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n\n/** Applies physics to a bone.\n *\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraint extends Constraint<PhysicsConstraint, PhysicsConstraintData, PhysicsConstraintPose> {\n\tbone: BonePose;\n\n\t_reset = true;\n\tux = 0;\n\tuy = 0;\n\tcx = 0;\n\tcy = 0;\n\ttx = 0;\n\tty = 0;\n\txOffset = 0;\n\txLag = 0;\n\txVelocity = 0;\n\tyOffset = 0;\n\tyLag = 0;\n\tyVelocity = 0;\n\trotateOffset = 0;\n\trotateLag = 0;\n\trotateVelocity = 0;\n\tscaleOffset = 0\n\tscaleLag = 0\n\tscaleVelocity = 0;\n\tremaining = 0;\n\tlastTime = 0;\n\n\tconstructor (data: PhysicsConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new PhysicsConstraintPose(), new PhysicsConstraintPose());\n\t\tif (skeleton == null) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bone = skeleton.bones[data.bone.index].constrainedPose;\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new PhysicsConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\t/** Resets all physics state that was the result of previous movement. Use this after moving a bone to prevent physics from\n\t * reacting to the movement. */\n\treset (skeleton: Skeleton) {\n\t\tthis.remaining = 0;\n\t\tthis.lastTime = skeleton.time;\n\t\tthis._reset = true;\n\t\tthis.xOffset = 0;\n\t\tthis.xLag = 0;\n\t\tthis.xVelocity = 0;\n\t\tthis.yOffset = 0;\n\t\tthis.yLag = 0;\n\t\tthis.yVelocity = 0;\n\t\tthis.rotateOffset = 0;\n\t\tthis.rotateLag = 0;\n\t\tthis.rotateVelocity = 0;\n\t\tthis.scaleOffset = 0;\n\t\tthis.scaleLag = 0;\n\t\tthis.scaleVelocity = 0;\n\t}\n\n\t/** Translates the physics constraint so the next {@link update} forces are applied as if the bone moved an\n\t * additional amount in world space. */\n\ttranslate (x: number, y: number) {\n\t\tthis.ux -= x;\n\t\tthis.uy -= y;\n\t\tthis.cx -= x;\n\t\tthis.cy -= y;\n\t}\n\n\t/** Rotates the physics constraint so the next {@link update} forces are applied as if the bone rotated\n\t * around the specified point in world space. */\n\trotate (x: number, y: number, degrees: number) {\n\t\tconst r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst dx = this.cx - x, dy = this.cy - y;\n\t\tthis.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);\n\t}\n\n\t/** Applies the constraint to the constrained bones. */\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tconst mix = p.mix;\n\t\tif (mix === 0) return;\n\n\t\tconst x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;\n\t\tconst bone = this.bone;\n\t\tlet l = bone.bone.data.length, t = this.data.step, z = 0;\n\n\t\tswitch (physics) {\n\t\t\tcase Physics.none:\n\t\t\t\treturn;\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: fall through expected\n\t\t\tcase Physics.reset:\n\t\t\t\tthis.reset(skeleton); // Fall through.\n\t\t\tcase Physics.update: {\n\t\t\t\tconst delta = Math.max(skeleton.time - this.lastTime, 0), aa = this.remaining;\n\t\t\t\tthis.remaining += delta;\n\t\t\t\tthis.lastTime = skeleton.time;\n\n\t\t\t\tconst bx = bone.worldX, by = bone.worldY;\n\t\t\t\tif (this._reset) {\n\t\t\t\t\tthis._reset = false;\n\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\tthis.uy = by;\n\t\t\t\t} else {\n\t\t\t\t\tlet a = this.remaining, i = p.inertia, f = skeleton.data.referenceScale, d = -1, m = 0, e = 0, qx = this.data.limit * delta,\n\t\t\t\t\t\tqy = qx * Math.abs(skeleton.scaleY);\n\t\t\t\t\tqx *= Math.abs(skeleton.scaleX);\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\tconst u = (this.ux - bx) * i;\n\t\t\t\t\t\t\tthis.xOffset += u > qx ? qx : u < -qx ? -qx : u;\n\t\t\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\tconst u = (this.uy - by) * i;\n\t\t\t\t\t\t\tthis.yOffset += u > qy ? qy : u < -qy ? -qy : u;\n\t\t\t\t\t\t\tthis.uy = by;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\tconst xs = this.xOffset, ys = this.yOffset;\n\t\t\t\t\t\t\td = p.damping ** (60 * t);\n\t\t\t\t\t\t\tm = t * p.massInverse;\n\t\t\t\t\t\t\te = p.strength;\n\t\t\t\t\t\t\tconst w = f * p.wind, g = f * p.gravity;\n\t\t\t\t\t\t\tconst ax = (w * skeleton.windX + g * skeleton.gravityX) * skeleton.scaleX;\n\t\t\t\t\t\t\tconst ay = (w * skeleton.windY + g * skeleton.gravityY) * skeleton.scaleY;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\t\t\tthis.xVelocity += (ax - this.xOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.xOffset += this.xVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.xVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\t\t\tthis.yVelocity -= (ay + this.yOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.yOffset += this.yVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.yVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t} while (a >= t);\n\t\t\t\t\t\t\tthis.xLag = this.xOffset - xs;\n\t\t\t\t\t\t\tthis.yLag = this.yOffset - ys;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tz = Math.max(0, 1 - a / t);\n\t\t\t\t\t\tif (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;\n\t\t\t\t\t\tif (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (rotateOrShearX || scaleX) {\n\t\t\t\t\t\tlet ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0, dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;\n\t\t\t\t\t\tif (dx > qx)\n\t\t\t\t\t\t\tdx = qx;\n\t\t\t\t\t\telse if (dx < -qx) //\n\t\t\t\t\t\t\tdx = -qx;\n\t\t\t\t\t\tif (dy > qy)\n\t\t\t\t\t\t\tdy = qy;\n\t\t\t\t\t\telse if (dy < -qy) //\n\t\t\t\t\t\t\tdy = -qy;\n\t\t\t\t\t\ta = this.remaining;\n\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\tmr = (this.data.rotate + this.data.shearX) * mix;\n\t\t\t\t\t\t\tz = this.rotateLag * Math.max(0, 1 - aa / t);\n\t\t\t\t\t\t\tlet r = Math.atan2(dy + this.ty, dx + this.tx) - ca - (this.rotateOffset - z) * mr;\n\t\t\t\t\t\t\tthis.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;\n\t\t\t\t\t\t\tr = (this.rotateOffset - z) * mr + ca;\n\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\tr = l * bone.getWorldScaleX();\n\t\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tc = Math.cos(ca);\n\t\t\t\t\t\t\ts = Math.sin(ca);\n\t\t\t\t\t\t\tconst r = l * bone.getWorldScaleX() - this.scaleLag * Math.max(0, 1 - aa / t);\n\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\tif (d === -1) {\n\t\t\t\t\t\t\t\td = p.damping ** (60 * t);\n\t\t\t\t\t\t\t\tm = t * p.massInverse;\n\t\t\t\t\t\t\t\te = p.strength;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ax = p.wind * skeleton.windX + p.gravity * skeleton.gravityX;\n\t\t\t\t\t\t\tconst ay = (p.wind * skeleton.windY + p.gravity * skeleton.gravityY) * Skeleton.yDir;\n\t\t\t\t\t\t\tconst rs = this.rotateOffset, ss = this.scaleOffset, h = l / f;\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity += (ax * c - ay * s - this.scaleOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.scaleOffset += this.scaleVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity -= ((ax * s + ay * c) * h + this.rotateOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.rotateOffset += this.rotateVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity *= d;\n\t\t\t\t\t\t\t\t\tif (a < t) break;\n\t\t\t\t\t\t\t\t\tconst r = this.rotateOffset * mr + ca;\n\t\t\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\t\t} else if (a < t) //\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.rotateLag = this.rotateOffset - rs;\n\t\t\t\t\t\t\tthis.scaleLag = this.scaleOffset - ss;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tz = Math.max(0, 1 - a / t);\n\t\t\t\t\t}\n\t\t\t\t\tthis.remaining = a;\n\t\t\t\t}\n\t\t\t\tthis.cx = bone.worldX;\n\t\t\t\tthis.cy = bone.worldY;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Physics.pose:\n\t\t\t\tz = Math.max(0, 1 - this.remaining / t);\n\t\t\t\tif (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;\n\t\t\t\tif (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;\n\t\t}\n\n\t\tif (rotateOrShearX) {\n\t\t\tlet o = (this.rotateOffset - this.rotateLag * z) * mix, s = 0, c = 0, a = 0;\n\t\t\tif (this.data.shearX > 0) {\n\t\t\t\tlet r = 0;\n\t\t\t\tif (this.data.rotate > 0) {\n\t\t\t\t\tr = o * this.data.rotate;\n\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\ta = bone.b;\n\t\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t\t}\n\t\t\t\tr += o * this.data.shearX;\n\t\t\t\ts = Math.sin(r);\n\t\t\t\tc = Math.cos(r);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t} else {\n\t\t\t\to *= this.data.rotate;\n\t\t\t\ts = Math.sin(o);\n\t\t\t\tc = Math.cos(o);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t\ta = bone.b;\n\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t}\n\t\t}\n\t\tif (scaleX) {\n\t\t\tlet s = 1 + (this.scaleOffset - this.scaleLag * z) * mix * this.data.scaleX;\n\t\t\tbone.a *= s;\n\t\t\tbone.c *= s;\n\t\t\tswitch (this.data.scaleYMode) {\n\t\t\t\tcase ScaleYMode.Uniform:\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScaleYMode.Volume:\n\t\t\t\t\ts = Math.abs(s);\n\t\t\t\t\ts = s >= 0.7 ? 1 / s : 4 - 3.67347 * s;\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t}\n\t\t}\n\t\tif (physics !== Physics.pose) {\n\t\t\tthis.tx = l * bone.a;\n\t\t\tthis.ty = l * bone.c;\n\t\t}\n\t\tbone.modifyWorld(skeleton._update);\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tconst bone = this.bone.bone;\n\t\tskeleton.sortBone(bone);\n\t\tskeleton._updateCache.push(this);\n\t\tskeleton.sortReset(bone.children);\n\t\tskeleton.constrained(bone);\n\t}\n\n\tisSourceActive () {\n\t\treturn this.bone.bone.active;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData, ScaleYMode } from \"./ConstraintData.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n\n/** Stores the setup pose for a {@link PhysicsConstraint}.\n *\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraintData extends ConstraintData<PhysicsConstraint, PhysicsConstraintPose> {\n\t/** The bone constrained by this physics constraint. */\n\tpublic set bone (boneData: BoneData) { this._bone = boneData; }\n\tpublic get bone () {\n\t\tif (!this._bone) throw new Error(\"BoneData not set.\")\n\t\telse return this._bone;\n\t}\n\tprivate _bone: BoneData | null = null;\n\n\t/** Physics influence on x translation, 0-1. */\n\tx = 0;\n\n\t/** Physics influence on y translation, 0-1. */\n\ty = 0;\n\n\t/** Physics influence on rotation, 0-1. */\n\trotate = 0;\n\n\t/** Physics influence on scaleX, 0-1. */\n\tscaleX = 0;\n\n\t/** Physics influence on shearX, 0-1. */\n\tshearX = 0;\n\n\t/** Movement greater than the limit will not have a greater affect on physics. */\n\tlimit = 0;\n\n\t/** The time in milliseconds required to advanced the physics simulation one step. */\n\tstep = 0;\n\n\t/** True when this constraint's inertia is controlled by global slider timelines. */\n\tinertiaGlobal = false;\n\n\t/** True when this constraint's strength is controlled by global slider timelines. */\n\tstrengthGlobal = false;\n\n\t/** True when this constraint's damping is controlled by global slider timelines. */\n\tdampingGlobal = false;\n\n\t/** True when this constraint's mass is controlled by global slider timelines. */\n\tmassGlobal = false;\n\n\t/** True when this constraint's wind is controlled by global slider timelines. */\n\twindGlobal = false;\n\n\t/** True when this constraint's gravity is controlled by global slider timelines. */\n\tgravityGlobal = false;\n\n\t/** True when this constraint's mix is controlled by global slider timelines. */\n\tmixGlobal = false;\n\n\t/** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} sets\n\t * {@link BonePose.scaleX}. */\n\tprivate _scaleYMode = ScaleYMode.None;\n\tget scaleYMode (): ScaleYMode {\n\t\treturn this._scaleYMode;\n\t}\n\tset scaleYMode (scaleYMode: ScaleYMode) {\n\t\tif (scaleYMode == null) throw new Error(\"scaleYMode cannot be null.\");\n\t\tthis._scaleYMode = scaleYMode;\n\t}\n\n\tconstructor (name: string) {\n\t\tsuper(name, new PhysicsConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new PhysicsConstraint(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\n(() => {\n\tif (typeof Math.fround === \"undefined\") {\n\t\tMath.fround = ((array) => (x: number) => {\n\t\t\tarray[0] = x;\n\t\t\treturn array[0];\n\t\t})(new Float32Array(1));\n\t}\n})();\n\nexport { }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\";\nimport type { SliderData } from \"./SliderData.js\";\n\n/** Stores a pose for a slider. */\nexport class SliderPose implements Pose<SliderPose> {\n\n\t/** The time in the {@link SliderData.animation} to apply the animation. */\n\ttime = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained poses. */\n\tmix = 0;\n\n\tset (pose: SliderPose) {\n\t\tthis.time = pose.time;\n\t\tthis.mix = pose.mix;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { DrawOrderFolderTimeline, DrawOrderTimeline, isConstraintTimeline, isSlotTimeline, PhysicsConstraintTimeline } from \"./Animation.js\";\nimport type { Bone } from \"./Bone.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SliderData } from \"./SliderData.js\";\nimport { SliderPose } from \"./SliderPose.js\";\n\n/** Applies an animation based on either the slider's {@link SliderPose.time} or a bone's transform property.\n *\n * See <a href=\"https://esotericsoftware.com/spine-sliders\">Sliders</a> in the Spine User Guide. */\nexport class Slider extends Constraint<Slider, SliderData, SliderPose> {\n\tprivate static readonly offsets = [0, 0, 0, 0, 0, 0];\n\n\t/** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */\n\tbone: Bone | null = null;\n\n\tconstructor (data: SliderData, skeleton: Skeleton) {\n\t\tsuper(data, new SliderPose(), new SliderPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tif (data.bone != null) this.bone = skeleton.bones[data.bone.index];\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new Slider(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tpublic update (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mix === 0) return;\n\n\t\tconst data = this.data, animation = data.animation, bone = this.bone;\n\t\tif (bone !== null) {\n\t\t\tif (!bone.active) return;\n\t\t\tif (data.local) bone.appliedPose.validateLocalTransform(skeleton);\n\t\t\tp.time = data.offset\n\t\t\t\t+ (data.property.value(skeleton, bone.appliedPose, data.local, Slider.offsets) - data.property.offset) * data.scale;\n\t\t\tif (data.loop)\n\t\t\t\tp.time = animation.duration + (p.time % animation.duration);\n\t\t\telse\n\t\t\t\tp.time = Math.max(0, p.time);\n\t\t}\n\n\t\tconst bones = skeleton.bones;\n\t\tconst indices = animation.bones;\n\t\tfor (let i = 0, n = animation.bones.length; i < n; i++)\n\t\t\tbones[indices[i]].appliedPose.modifyLocal(skeleton);\n\n\t\tanimation.apply(skeleton, p.time, p.time, data.loop, null, p.mix, false, data.additive, false, true);\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tconst bone = this.bone;\n\t\tconst data = this.data;\n\t\tif (bone && !data.local) skeleton.sortBone(bone);\n\t\tskeleton._updateCache.push(this);\n\n\t\tconst bones = skeleton.bones;\n\t\tconst indices = data.animation.bones;\n\t\tfor (let i = 0, n = data.animation.bones.length; i < n; i++) {\n\t\t\tconst bone = bones[indices[i]];\n\t\t\tbone.sorted = false;\n\t\t\tskeleton.sortReset(bone.children);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\n\t\tconst timelines = data.animation.timelines;\n\t\tconst slots = skeleton.slots;\n\t\tconst constraints = skeleton.constraints;\n\t\tconst physics = skeleton.physics;\n\t\tconst physicsCount = skeleton.physics.length;\n\t\tfor (let i = 0, n = data.animation.timelines.length; i < n; i++) {\n\t\t\tconst t = timelines[i];\n\t\t\tif (isSlotTimeline(t))\n\t\t\t\tskeleton.constrained(slots[t.slotIndex]);\n\t\t\telse if (t instanceof DrawOrderTimeline || t instanceof DrawOrderFolderTimeline)\n\t\t\t\tskeleton.drawOrder.constrained();\n\t\t\telse if (t instanceof PhysicsConstraintTimeline) {\n\t\t\t\tif (t.constraintIndex === -1) {\n\t\t\t\t\tfor (let ii = 0; ii < physicsCount; ii++)\n\t\t\t\t\t\tskeleton.constrained(physics[ii]);\n\t\t\t\t} else\n\t\t\t\t\tskeleton.constrained(constraints[t.constraintIndex]);\n\t\t\t} else if (isConstraintTimeline(t)) {\n\t\t\t\tconst constraintIndex = t.constraintIndex;\n\t\t\t\tif (constraintIndex !== -1) skeleton.constrained(constraints[constraintIndex]);\n\t\t\t}\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Animation } from \"./Animation.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { Slider } from \"./Slider.js\";\nimport { SliderPose } from \"./SliderPose.js\";\nimport type { FromProperty } from \"./TransformConstraintData.js\";\n\n/** Stores the setup pose for a {@link Slider}.\n *\n * See <a href=\"https://esotericsoftware.com/spine-slider-constraints\">Slider constraints</a> in the Spine User Guide. */\nexport class SliderData extends ConstraintData<Slider, SliderPose> {\n\n\t/** The animation the slider will apply. */\n\tanimation!: Animation;\n\n\t/** When true, the animation is applied by adding it to the current pose rather than overwriting it. */\n\tadditive = false;\n\n\t/** When true, the animation repeats after its duration, otherwise the last frame is used. */\n\tloop = false;\n\n\t/** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */\n\tbone: BoneData | null = null;\n\n\t/** When a bone is set, the specified transform property is used to set the slider's {@link SliderPose.time}. */\n\tproperty!: FromProperty;\n\n\t/** When a bone is set, this is the scale of the {@link property} value in relation to the slider time. */\n\tscale = 0;\n\n\t/** When a bone is set, the offset is added to the property. */\n\toffset = 0;\n\n\t/** When true and a bone is set, the bone's local transform property is read instead of its world transform. */\n\tlocal = false;\n\n\t// Nonessential.\n\t/** When a bone is set, the maximum slider time for the bone property range, or 0 if nonessential data was not exported. */\n\tmax = 0;\n\n\tconstructor (name: string) {\n\t\tsuper(name, new SliderPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new Slider(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Animation } from \"./Animation.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport type { ConstraintData } from \"./ConstraintData.js\";\nimport type { EventData } from \"./EventData.js\";\nimport type { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport type { SlotData } from \"./SlotData.js\";\n\n/** Stores the setup pose and all of the stateless data for a skeleton.\n *\n * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes\n * Guide. */\nexport class SkeletonData {\n\n\t/** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */\n\tname: string | null = null;\n\n\t/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n\tbones = [] as BoneData[]; // Ordered parents first.\n\n\t/** The skeleton's slots in the setup pose draw order. */\n\tslots = [] as SlotData[]; // Setup pose draw order.\n\n\tskins = [] as Skin[];\n\n\t/** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.\n\t *\n\t * See {@link Skeleton.getAttachmentByName}.\n\t * May be null. */\n\tdefaultSkin: Skin | null = null;\n\n\t/** The skeleton's events. */\n\tevents = [] as EventData[];\n\n\t/** The skeleton's animations. */\n\tanimations = [] as Animation[];\n\n\t/** The skeleton's IK constraints. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstraints = [] as ConstraintData<any, any>[];\n\n\t/** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n\tx: number = 0;\n\n\t/** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n\ty: number = 0;\n\n\t/** The width of the skeleton's axis aligned bounding box in the setup pose. */\n\twidth: number = 0;\n\n\t/** The height of the skeleton's axis aligned bounding box in the setup pose. */\n\theight: number = 0;\n\n\t/** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default\n\t * is 100. */\n\treferenceScale = 100;\n\n\t/** The Spine version used to export the skeleton data, or null. */\n\tversion: string | null = null;\n\n\t/** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */\n\thash: string | null = null;\n\n\t// Nonessential\n\t/** The dopesheet FPS in Spine. Available only when nonessential data was exported. */\n\tfps = 30;\n\n\t/** The path to the images folder as defined in Spine. Available only when nonessential data was exported. May be null. */\n\timagesPath: string | null = null;\n\n\t/** The path to the audio folder as defined in Spine. Available only when nonessential data was exported. May be null. */\n\taudioPath: string | null = null;\n\n\t/** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it\n\t * multiple times.\n\t * @returns May be null. */\n\tfindBone (boneName: string) {\n\t\tif (!boneName) throw new Error(\"boneName cannot be null.\");\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tif (bones[i].name === boneName) return bones[i];\n\t\treturn null;\n\t}\n\n\t/** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n\t * multiple times.\n\t * @returns May be null. */\n\tfindSlot (slotName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tif (slots[i].name === slotName) return slots[i];\n\t\treturn null;\n\t}\n\n\t/** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it\n\t * multiple times.\n\t * @returns May be null. */\n\tfindSkin (skinName: string) {\n\t\tif (!skinName) throw new Error(\"skinName cannot be null.\");\n\t\tconst skins = this.skins;\n\t\tfor (let i = 0, n = skins.length; i < n; i++)\n\t\t\tif (skins[i].name === skinName) return skins[i];\n\t\treturn null;\n\t}\n\n\t/** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it\n\t * multiple times.\n\t * @returns May be null. */\n\tfindEvent (eventDataName: string) {\n\t\tif (!eventDataName) throw new Error(\"eventDataName cannot be null.\");\n\t\tconst events = this.events;\n\t\tfor (let i = 0, n = events.length; i < n; i++)\n\t\t\tif (events[i].name === eventDataName) return events[i];\n\t\treturn null;\n\t}\n\n\t/** Collects animations used by {@link SliderData slider constraints}.\n\t *\n\t * Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user\n\t * choose an animation may want to exclude them. */\n\tfindSliderAnimations (animations: Animation[]): Animation[] {\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = this.constraints.length; i < n; i++) {\n\t\t\tconst data = constraints[i];\n\t\t\tif (data instanceof SliderData && data.animation != null) animations.push(data.animation);\n\t\t}\n\t\treturn animations;\n\t}\n\n\t/** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to\n\t * call it multiple times.\n\t * @returns May be null. */\n\tfindAnimation (animationName: string) {\n\t\tif (!animationName) throw new Error(\"animationName cannot be null.\");\n\t\tconst animations = this.animations;\n\t\tfor (let i = 0, n = animations.length; i < n; i++)\n\t\t\tif (animations[i].name === animationName) return animations[i];\n\t\treturn null;\n\t}\n\n\t// --- Constraints.\n\n\t/** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of\n\t  * this method than to call it multiple times. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tfindConstraint<T extends ConstraintData<any, any>> (constraintName: string, type: new (name: string) => T): T | null {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tif (type == null) throw new Error(\"type cannot be null.\");\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = this.constraints.length; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof type && constraint.name === constraintName) return constraint as T;\n\t\t}\n\t\treturn null;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport type { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport { Color, type StringMap } from \"./Utils.js\";\n\n/** Stores an entry in the skin consisting of the slot index, name, and attachment **/\nexport class SkinEntry {\n\n\t/** The {@link Skeleton.slots} index. */\n\tslotIndex: number = 0;\n\n\tplaceholder: string;\n\n\t/** The attachment for this skin entry. */\n\tattachment: Attachment\n\n\tconstructor (slotIndex: number = 0, placeholder: string, attachment: Attachment) {\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.placeholder = placeholder;\n\t\tthis.attachment = attachment;\n\t}\n}\n\n/** Stores attachments by slot index and placeholder name. Multiple {@link Skeleton} instances can use the same skins.\n *\n * See {@link SkeletonData.defaultSkin}, {@link Skeleton.skin}, and\n * [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */\nexport class Skin {\n\t/** The skin's name, unique across all skins in the skeleton.\n\t *\n\t * See {@link SkeletonData.findSkin}. */\n\tname: string;\n\n\tattachments = [] as StringMap<Attachment>[];\n\tbones = [] as BoneData[];\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstraints = [] as ConstraintData<any, any>[];\n\n\t/** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */\n\tcolor = new Color(0.99607843, 0.61960787, 0.30980393, 1); // fe9e4fff\n\n\tconstructor (name: string) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t}\n\n\t/** Adds an attachment to the skin for the specified slot index and name. */\n\tsetAttachment (slotIndex: number, placeholder: string, attachment: Attachment) {\n\t\tif (!attachment) throw new Error(\"attachment cannot be null.\");\n\t\tconst attachments = this.attachments;\n\t\tif (slotIndex >= attachments.length) attachments.length = slotIndex + 1;\n\t\tif (!attachments[slotIndex]) attachments[slotIndex] = {};\n\t\tattachments[slotIndex][placeholder] = attachment;\n\t}\n\n\t/** Adds all attachments, bones, and constraints from the specified skin to this skin. */\n\taddSkin (skin: Skin) {\n\t\tfor (let i = 0; i < skin.bones.length; i++) {\n\t\t\tconst bone = skin.bones[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.bones.length; ii++) {\n\t\t\t\tif (this.bones[ii] === bone) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.bones.push(bone);\n\t\t}\n\n\t\tfor (let i = 0; i < skin.constraints.length; i++) {\n\t\t\tconst constraint = skin.constraints[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.constraints.length; ii++) {\n\t\t\t\tif (this.constraints[ii] === constraint) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.constraints.push(constraint);\n\t\t}\n\n\t\tconst attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tconst attachment = attachments[i];\n\t\t\tthis.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);\n\t\t}\n\t}\n\n\t/** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not\n\t * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */\n\tcopySkin (skin: Skin) {\n\t\tfor (let i = 0; i < skin.bones.length; i++) {\n\t\t\tconst bone = skin.bones[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.bones.length; ii++) {\n\t\t\t\tif (this.bones[ii] === bone) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.bones.push(bone);\n\t\t}\n\n\t\tfor (let i = 0; i < skin.constraints.length; i++) {\n\t\t\tconst constraint = skin.constraints[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.constraints.length; ii++) {\n\t\t\t\tif (this.constraints[ii] === constraint) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.constraints.push(constraint);\n\t\t}\n\n\t\tconst attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tconst attachment = attachments[i];\n\t\t\tif (!attachment.attachment) continue;\n\t\t\tif (attachment.attachment instanceof MeshAttachment) {\n\t\t\t\tattachment.attachment = attachment.attachment.newLinkedMesh();\n\t\t\t\tthis.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);\n\t\t\t} else {\n\t\t\t\tattachment.attachment = attachment.attachment.copy();\n\t\t\t\tthis.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the attachment for the specified slot index and placeholder, or null. */\n\tgetAttachment (slotIndex: number, placeholder: string): Attachment | null {\n\t\tconst dictionary = this.attachments[slotIndex];\n\t\treturn dictionary ? dictionary[placeholder] : null;\n\t}\n\n\t/** Removes the attachment in the skin for the specified slot index and placeholder, if any. */\n\tremoveAttachment (slotIndex: number, placeholder: string) {\n\t\tconst dictionary = this.attachments[slotIndex];\n\t\tif (dictionary) delete dictionary[placeholder];\n\t}\n\n\t/** Returns all attachments in this skin. */\n\tgetAttachments (): Array<SkinEntry> {\n\t\tconst entries: SkinEntry[] = [];\n\t\tfor (let i = 0; i < this.attachments.length; i++) {\n\t\t\tconst slotAttachments = this.attachments[i];\n\t\t\tif (slotAttachments) {\n\t\t\t\tfor (const name in slotAttachments) {\n\t\t\t\t\tconst attachment = slotAttachments[name];\n\t\t\t\t\tif (attachment) entries.push(new SkinEntry(i, name, attachment));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn entries;\n\t}\n\n\t/** Returns all attachments in this skin for the specified slot index. */\n\tgetAttachmentsForSlot (slotIndex: number, attachments: Array<SkinEntry>) {\n\t\tconst slotAttachments = this.attachments[slotIndex];\n\t\tif (slotAttachments) {\n\t\t\tfor (const name in slotAttachments) {\n\t\t\t\tconst attachment = slotAttachments[name];\n\t\t\t\tif (attachment) attachments.push(new SkinEntry(slotIndex, name, attachment));\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Clears all attachments, bones, and constraints. */\n\tclear () {\n\t\tthis.attachments.length = 0;\n\t\tthis.bones.length = 0;\n\t\tthis.constraints.length = 0;\n\t}\n\n\t/** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n\tattachAll (skeleton: Skeleton, oldSkin: Skin) {\n\t\tlet slotIndex = 0;\n\t\tfor (let i = 0; i < skeleton.slots.length; i++) {\n\t\t\tconst slot = skeleton.slots[i];\n\t\t\tconst slotAttachment = slot.pose.getAttachment();\n\t\t\tif (slotAttachment && slotIndex < oldSkin.attachments.length) {\n\t\t\t\tconst dictionary = oldSkin.attachments[slotIndex];\n\t\t\t\tfor (const placeholder in dictionary) {\n\t\t\t\t\tconst skinAttachment: Attachment = dictionary[placeholder];\n\t\t\t\t\tif (slotAttachment === skinAttachment) {\n\t\t\t\t\t\tconst attachment = this.getAttachment(slotIndex, placeholder);\n\t\t\t\t\t\tif (attachment) slot.pose.setAttachment(attachment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tslotIndex++;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { SlotPose } from \"./SlotPose.js\";\n\n/** Stores the setup pose for a {@link Slot}. */\nexport class SlotData extends PosedData<SlotPose> {\n\t/** The index of the slot in {@link Skeleton.slots}. */\n\tindex: number = 0;\n\n\t/** The bone this slot belongs to. */\n\tboneData: BoneData;\n\n\t/** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */\n\tattachmentName: string | null = null;\n\n\t/** The blend mode for drawing the slot's attachment. */\n\tblendMode: BlendMode = BlendMode.Normal;\n\n\t// Nonessential.\n\t/** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = true;\n\n\tconstructor (index: number, name: string, boneData: BoneData) {\n\t\tsuper(name, new SlotPose());\n\t\tif (index < 0) throw new Error(\"index must be >= 0.\");\n\t\tif (!boneData) throw new Error(\"boneData cannot be null.\");\n\t\tthis.index = index;\n\t\tthis.boneData = boneData;\n\t}\n}\n\n/** Determines how images are blended with existing pixels when drawn. */\nexport enum BlendMode { Normal, Additive, Multiply, Screen }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Pose } from \"./Pose.js\"\n\n/** Stores a pose for a transform constraint. */\nexport class TransformConstraintPose implements Pose<TransformConstraintPose> {\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained rotation. */\n\tmixRotate = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation X. */\n\tmixX = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation Y. */\n\tmixY = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale X. */\n\tmixScaleX = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale Y. */\n\tmixScaleY = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained shear Y. */\n\tmixShearY = 0;\n\n\tpublic set (pose: TransformConstraintPose) {\n\t\tthis.mixRotate = pose.mixRotate;\n\t\tthis.mixX = pose.mixX;\n\t\tthis.mixY = pose.mixY;\n\t\tthis.mixScaleX = pose.mixScaleX;\n\t\tthis.mixScaleY = pose.mixScaleY;\n\t\tthis.mixShearY = pose.mixShearY;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { Bone } from \"./Bone.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n\n/** Adjusts the world transform of the constrained bones to match that of the source bone.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */\nexport class TransformConstraint extends Constraint<TransformConstraint, TransformConstraintData, TransformConstraintPose> {\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones: Array<BonePose>;\n\n\t/** The bone whose world transform will be copied to the constrained bones. */\n\tsource: Bone;\n\n\tconstructor (data: TransformConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new TransformConstraintPose(), new TransformConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tconst source = skeleton.bones[data.source.index];\n\t\tif (source == null) throw new Error(\"source cannot be null.\");\n\t\tthis.source = source;\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new TransformConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mixRotate === 0 && p.mixX === 0 && p.mixY === 0 && p.mixScaleX === 0 && p.mixScaleY === 0 && p.mixShearY === 0) return;\n\n\t\tconst data = this.data;\n\t\tconst localSource = data.localSource, localTarget = data.localTarget, additive = data.additive, clamp = data.clamp;\n\t\tconst offsets = data.offsets;\n\t\tconst source = this.source.appliedPose;\n\t\tif (localSource) source.validateLocalTransform(skeleton);\n\t\tconst fromItems = data.properties;\n\t\tconst fn = data.properties.length, update = skeleton._update;\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = this.bones.length; i < n; i++) {\n\t\t\tconst bone = bones[i];\n\t\t\tif (localTarget)\n\t\t\t\tbone.modifyLocal(skeleton);\n\t\t\telse\n\t\t\t\tbone.modifyWorld(update);\n\t\t\tfor (let f = 0; f < fn; f++) {\n\t\t\t\tconst from = fromItems[f];\n\t\t\t\tconst value = from.value(skeleton, source, localSource, offsets) - from.offset;\n\t\t\t\tconst toItems = from.to;\n\t\t\t\tfor (let t = 0, tn = from.to.length; t < tn; t++) {\n\t\t\t\t\tconst to = toItems[t];\n\t\t\t\t\tif (to.mix(p) !== 0) {\n\t\t\t\t\t\tlet clamped = to.offset + value * to.scale;\n\t\t\t\t\t\tif (clamp) {\n\t\t\t\t\t\t\tif (to.offset < to.max)\n\t\t\t\t\t\t\t\tclamped = MathUtils.clamp(clamped, to.offset, to.max);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclamped = MathUtils.clamp(clamped, to.max, to.offset);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tto.apply(skeleton, p, bone, clamped, localTarget, additive);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tif (!this.data.localSource) skeleton.sortBone(this.source);\n\t\tconst bones = this.bones;\n\t\tconst boneCount = this.bones.length;\n\t\tconst worldTarget = !this.data.localTarget;\n\t\tif (worldTarget) {\n\t\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\t\tskeleton.sortBone(bones[i].bone);\n\t\t}\n\t\tskeleton._updateCache.push(this);\n\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\tconst bone = bones[i].bone;\n\t\t\tskeleton.sortReset(bone.children);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tbones[i].bone.sorted = worldTarget;\n\t}\n\n\tisSourceActive () {\n\t\treturn this.source.active;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { TransformConstraint } from \"./TransformConstraint.js\";\nimport { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n/** Stores the setup pose for a {@link TransformConstraint}.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */\nexport class TransformConstraintData extends ConstraintData<TransformConstraint, TransformConstraintPose> {\n\tpublic static readonly ROTATION = 0;\n\tpublic static readonly X = 1;\n\tpublic static readonly Y = 2;\n\tpublic static readonly SCALEX = 3;\n\tpublic static readonly SCALEY = 4;\n\tpublic static readonly SHEARY = 5;\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones = [] as BoneData[];\n\n\t/** The bone whose world transform will be copied to the constrained bones. */\n\tpublic set source (source: BoneData) { this._source = source; }\n\tpublic get source () {\n\t\tif (!this._source) throw new Error(\"BoneData not set.\")\n\t\telse return this._source;\n\t}\n\tprivate _source: BoneData | null = null;\n\n\toffsets = [0, 0, 0, 0, 0, 0];\n\n\t/** An offset added to the constrained bone X translation. */\n\toffsetX = 0;\n\n\t/** An offset added to the constrained bone Y translation. */\n\toffsetY = 0;\n\n\t/** Reads the source bone's local transform instead of its world transform. */\n\tlocalSource = false;\n\n\t/** Sets the constrained bones' local transforms instead of their world transforms. */\n\tlocalTarget = false;\n\n\t/** Adds the source bone transform to the constrained bones instead of setting it absolutely. */\n\tadditive = false;\n\n\t/** Prevents constrained bones from exceeding the ranged defined by {@link ToProperty.offset} and {@link ToProperty.max}. */\n\tclamp = false;\n\n\t/** The mapping of transform properties to other transform properties. */\n\treadonly properties: Array<FromProperty> = [];\n\n\tconstructor (name: string) {\n\t\tsuper(name, new TransformConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new TransformConstraint(this, skeleton);\n\t}\n\n\t/** An offset added to the constrained bone rotation. */\n\tgetOffsetRotation () {\n\t\treturn this.offsets[TransformConstraintData.ROTATION];\n\t}\n\n\tsetOffsetRotation (offsetRotation: number) {\n\t\tthis.offsets[TransformConstraintData.ROTATION] = offsetRotation;\n\t}\n\n\t/** An offset added to the constrained bone X translation. */\n\tgetOffsetX () {\n\t\treturn this.offsets[TransformConstraintData.X];\n\t}\n\n\tsetOffsetX (offsetX: number) {\n\t\tthis.offsets[TransformConstraintData.X] = offsetX;\n\t}\n\n\t/** An offset added to the constrained bone Y translation. */\n\tgetOffsetY () {\n\t\treturn this.offsets[TransformConstraintData.Y];\n\t}\n\n\tsetOffsetY (offsetY: number) {\n\t\tthis.offsets[TransformConstraintData.Y] = offsetY;\n\t}\n\n\t/** An offset added to the constrained bone scaleX. */\n\tgetOffsetScaleX () {\n\t\treturn this.offsets[TransformConstraintData.SCALEX];\n\t}\n\n\tsetOffsetScaleX (offsetScaleX: number) {\n\t\tthis.offsets[TransformConstraintData.SCALEX] = offsetScaleX;\n\t}\n\n\t/** An offset added to the constrained bone scaleY. */\n\tgetOffsetScaleY () {\n\t\treturn this.offsets[TransformConstraintData.SCALEY];\n\t}\n\n\tsetOffsetScaleY (offsetScaleY: number) {\n\t\tthis.offsets[TransformConstraintData.SCALEY] = offsetScaleY;\n\t}\n\n\t/** An offset added to the constrained bone shearY. */\n\tgetOffsetShearY () {\n\t\treturn this.offsets[TransformConstraintData.SHEARY];\n\t}\n\n\tsetOffsetShearY (offsetShearY: number) {\n\t\tthis.offsets[TransformConstraintData.SHEARY] = offsetShearY;\n\t}\n\n}\n\n/** Source property for a {@link TransformConstraint}. */\nexport abstract class FromProperty {\n\t/** The value of this property that corresponds to {@link ToProperty.offset}. */\n\toffset = 0;\n\n\t/** Constrained properties. */\n\treadonly to: Array<ToProperty> = [];\n\n\t/** Reads this property from the specified bone. */\n\tabstract value (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;\n}\n\n/** Constrained property for a {@link TransformConstraint}. */\nexport abstract class ToProperty {\n\t/** The value of this property that corresponds to {@link FromProperty.offset}. */\n\toffset = 0;\n\n\t/** The maximum value of this property when {@link TransformConstraintData.clamp clamped}. */\n\tmax = 0;\n\n\t/** The scale of the {@link FromProperty} value in relation to this property. */\n\tscale = 0;\n\n\t/** Reads the mix for this property from the specified constraint. */\n\tabstract mix (pose: TransformConstraintPose): number;\n\n\t/** Applies the value to this property. */\n\tabstract apply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;\n}\n\nexport class FromRotate extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.rotation + offsets[TransformConstraintData.ROTATION];\n\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\tlet value = Math.atan2(source.c / sy, source.a / sx) * MathUtils.radDeg\n\t\t\t+ ((source.a * source.d - source.b * source.c) * sx * sy > 0 ? offsets[TransformConstraintData.ROTATION] : -offsets[TransformConstraintData.ROTATION]);\n\t\tif (value < 0) value += 360;\n\t\treturn value;\n\t}\n}\n\nexport class ToRotate extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixRotate;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.rotation += (additive ? value : value - bone.rotation) * pose.mixRotate;\n\t\telse {\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, ix = 1 / sx, iy = 1 / sy;\n\t\t\tconst a = bone.a * ix, b = bone.b * ix, c = bone.c * iy, d = bone.d * iy;\n\t\t\tvalue *= MathUtils.degRad;\n\t\t\tif (!additive) value -= Math.atan2(c, a);\n\t\t\tif (value > MathUtils.PI)\n\t\t\t\tvalue -= MathUtils.PI2;\n\t\t\telse if (value < -MathUtils.PI) //\n\t\t\t\tvalue += MathUtils.PI2;\n\t\t\tvalue *= pose.mixRotate;\n\t\t\tconst cos = Math.cos(value), sin = Math.sin(value);\n\t\t\tbone.a = (cos * a - sin * c) * sx;\n\t\t\tbone.b = (cos * b - sin * d) * sx;\n\t\t\tbone.c = (sin * a + cos * c) * sy;\n\t\t\tbone.d = (sin * b + cos * d) * sy;\n\t\t}\n\t}\n}\n\nexport class FromX extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\treturn local\n\t\t\t? source.x + offsets[TransformConstraintData.X]\n\t\t\t: (offsets[TransformConstraintData.X] * source.a + offsets[TransformConstraintData.Y] * source.b + source.worldX) / skeleton.scaleX;\n\t}\n}\n\nexport class ToX extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixX;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.x += (additive ? value : value - bone.x) * pose.mixX;\n\t\telse {\n\t\t\tif (!additive) value -= bone.worldX / skeleton.scaleX;\n\t\t\tbone.worldX += value * pose.mixX * skeleton.scaleX;\n\t\t}\n\t}\n}\n\nexport class FromY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\treturn local\n\t\t\t? source.y + offsets[TransformConstraintData.Y]\n\t\t\t: (offsets[TransformConstraintData.X] * source.c + offsets[TransformConstraintData.Y] * source.d + source.worldY) / skeleton.scaleY;\n\t}\n}\n\nexport class ToY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.y += (additive ? value : value - bone.y) * pose.mixY;\n\t\telse {\n\t\t\tif (!additive) value -= bone.worldY / skeleton.scaleY;\n\t\t\tbone.worldY += value * pose.mixY * skeleton.scaleY;\n\t\t}\n\t}\n}\n\nexport class FromScaleX extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.scaleX + offsets[TransformConstraintData.SCALEX];\n\t\tconst a = source.a / skeleton.scaleX, c = source.c / skeleton.scaleY;\n\t\treturn Math.sqrt(a * a + c * c) + offsets[TransformConstraintData.SCALEX];\n\t}\n}\n\nexport class ToScaleX extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixScaleX;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (additive)\n\t\t\t\tbone.scaleX *= 1 + (value - 1) * pose.mixScaleX;\n\t\t\telse if (bone.scaleX !== 0) //\n\t\t\t\tbone.scaleX += (value - bone.scaleX) * pose.mixScaleX;\n\t\t} else if (additive) {\n\t\t\tconst s = 1 + (value - 1) * pose.mixScaleX;\n\t\t\tbone.a *= s;\n\t\t\tbone.c *= s;\n\t\t} else {\n\t\t\tlet a = bone.a / skeleton.scaleX, c = bone.c / skeleton.scaleY, s = Math.sqrt(a * a + c * c);\n\t\t\tif (s !== 0) {\n\t\t\t\ts = 1 + (value - s) * pose.mixScaleX / s;\n\t\t\t\tbone.a *= s;\n\t\t\t\tbone.c *= s;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class FromScaleY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.scaleY + offsets[TransformConstraintData.SCALEY];\n\t\tconst b = source.b / skeleton.scaleX, d = source.d / skeleton.scaleY;\n\t\treturn Math.sqrt(b * b + d * d) + offsets[TransformConstraintData.SCALEY];\n\t}\n}\n\nexport class ToScaleY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixScaleY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (additive)\n\t\t\t\tbone.scaleY *= 1 + (value - 1) * pose.mixScaleY;\n\t\t\telse if (bone.scaleY !== 0) //\n\t\t\t\tbone.scaleY += (value - bone.scaleY) * pose.mixScaleY;\n\t\t} else if (additive) {\n\t\t\tconst s = 1 + (value - 1) * pose.mixScaleY;\n\t\t\tbone.b *= s;\n\t\t\tbone.d *= s;\n\t\t} else {\n\t\t\tlet b = bone.b / skeleton.scaleX, d = bone.d / skeleton.scaleY, s = Math.sqrt(b * b + d * d);\n\t\t\tif (s !== 0) {\n\t\t\t\ts = 1 + (value - s) * pose.mixScaleY / s;\n\t\t\t\tbone.b *= s;\n\t\t\t\tbone.d *= s;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class FromShearY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.shearY + offsets[TransformConstraintData.SHEARY];\n\t\tconst ix = 1 / skeleton.scaleX, iy = 1 / skeleton.scaleY;\n\t\treturn (Math.atan2(source.d * iy, source.b * ix) - Math.atan2(source.c * iy, source.a * ix)) * MathUtils.radDeg - 90 + offsets[TransformConstraintData.SHEARY];\n\t}\n}\n\nexport class ToShearY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixShearY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (!additive) value -= bone.shearY;\n\t\t\tbone.shearY += value * pose.mixShearY;\n\t\t} else {\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, b = bone.b / sx, d = bone.d / sy, by = Math.atan2(d, b);\n\t\t\tvalue = (value + 90) * MathUtils.degRad;\n\t\t\tif (additive)\n\t\t\t\tvalue -= MathUtils.PI / 2;\n\t\t\telse {\n\t\t\t\tvalue -= by - Math.atan2(bone.c / sy, bone.a / sx);\n\t\t\t\tif (value > MathUtils.PI)\n\t\t\t\t\tvalue -= MathUtils.PI2;\n\t\t\t\telse if (value < -MathUtils.PI)\n\t\t\t\t\tvalue += MathUtils.PI2;\n\t\t\t}\n\t\t\tvalue = by + value * pose.mixShearY;\n\t\t\tconst s = Math.sqrt(b * b + d * d);\n\t\t\tbone.b = Math.cos(value) * s * sx;\n\t\t\tbone.d = Math.sin(value) * s * sy;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { AlphaTimeline, Animation, AttachmentTimeline, type BoneTimeline2, type CurveTimeline, CurveTimeline1, DeformTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, InheritTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintMixTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintWindTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, SliderMixTimeline, SliderTimeline, type Timeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline } from \"./Animation.js\";\nimport type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport type { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Sequence, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport { BoneData } from \"./BoneData.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Event } from \"./Event.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport { SlotData } from \"./SlotData.js\";\nimport { type FromProperty, FromRotate, FromScaleX, FromScaleY, FromShearY, FromX, FromY, type ToProperty, ToRotate, ToScaleX, ToScaleY, ToShearY, ToX, ToY, TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Color, type NumberArrayLike, Utils } from \"./Utils.js\";\n\n/** Loads skeleton data in the Spine binary format.\n *\n * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and\n * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine\n * Runtimes Guide. */\nexport class SkeletonBinary {\n\t/** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n\t * runtime than were used in Spine.\n\t *\n\t * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n\tscale = 1;\n\n\tattachmentLoader: AttachmentLoader;\n\tprivate linkedMeshes = [] as LinkedMesh[];\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\treadSkeletonData (binary: Uint8Array | ArrayBuffer): SkeletonData {\n\t\tconst scale = this.scale;\n\n\t\tconst skeletonData = new SkeletonData();\n\t\tskeletonData.name = \"\"; // BOZO\n\n\t\tconst input = new BinaryInput(binary);\n\n\t\tconst lowHash = input.readInt32();\n\t\tconst highHash = input.readInt32();\n\t\tskeletonData.hash = highHash === 0 && lowHash === 0 ? null : highHash.toString(16) + lowHash.toString(16);\n\t\tskeletonData.version = input.readString();\n\t\tskeletonData.x = input.readFloat();\n\t\tskeletonData.y = input.readFloat();\n\t\tskeletonData.width = input.readFloat();\n\t\tskeletonData.height = input.readFloat();\n\t\tskeletonData.referenceScale = input.readFloat() * scale;\n\n\t\tconst nonessential = input.readBoolean();\n\t\tif (nonessential) {\n\t\t\tskeletonData.fps = input.readFloat();\n\t\t\tskeletonData.imagesPath = input.readString();\n\t\t\tskeletonData.audioPath = input.readString();\n\t\t}\n\n\t\tlet n = 0;\n\t\t// Strings.\n\t\tn = input.readInt(true)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst str = input.readString();\n\t\t\tif (!str) throw new Error(\"String in string table must not be null.\");\n\t\t\tinput.strings.push(str);\n\t\t}\n\n\t\t// Bones.\n\t\tconst bones = skeletonData.bones;\n\t\tn = input.readInt(true)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst name = input.readString();\n\t\t\tif (!name) throw new Error(\"Bone name must not be null.\");\n\t\t\tconst parent = i === 0 ? null : bones[input.readInt(true)];\n\t\t\tconst data = new BoneData(i, name, parent);\n\t\t\tconst setup = data.setupPose;\n\t\t\tsetup.rotation = input.readFloat();\n\t\t\tsetup.x = input.readFloat() * scale;\n\t\t\tsetup.y = input.readFloat() * scale;\n\t\t\tsetup.scaleX = input.readFloat();\n\t\t\tsetup.scaleY = input.readFloat();\n\t\t\tsetup.shearX = input.readFloat();\n\t\t\tsetup.shearY = input.readFloat();\n\t\t\tsetup.inherit = input.readByte();\n\t\t\tdata.length = input.readFloat() * scale;\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tif (nonessential) {\n\t\t\t\tColor.rgba8888ToColor(data.color, input.readInt32());\n\t\t\t\tdata.icon = input.readString() ?? undefined;\n\t\t\t\tdata.iconSize = input.readFloat();\n\t\t\t\tdata.iconRotation = input.readFloat();\n\t\t\t\tdata.visible = input.readBoolean();\n\t\t\t}\n\t\t\tbones.push(data);\n\t\t}\n\n\t\t// Slots.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst slotName = input.readString();\n\t\t\tif (!slotName) throw new Error(\"Slot name must not be null.\");\n\t\t\tconst boneData = bones[input.readInt(true)];\n\t\t\tconst data = new SlotData(i, slotName, boneData);\n\t\t\tColor.rgba8888ToColor(data.setupPose.color, input.readInt32());\n\n\t\t\tconst darkColor = input.readInt32();\n\t\t\tif (darkColor !== -1) Color.rgb888ToColor(data.setupPose.darkColor = new Color(), darkColor);\n\n\t\t\tdata.attachmentName = input.readStringRef();\n\t\t\tdata.blendMode = input.readInt(true);\n\t\t\tif (nonessential) data.visible = input.readBoolean();\n\t\t\tskeletonData.slots.push(data);\n\t\t}\n\n\t\t// Constraints.\n\t\tconst constraints = skeletonData.constraints;\n\t\tconst constraintCount = input.readInt(true);\n\t\tfor (let i = 0; i < constraintCount; i++) {\n\t\t\tconst name = input.readString();\n\t\t\tif (!name) throw new Error(\"Constraint data name must not be null.\");\n\t\t\tlet nn: number;\n\t\t\tswitch (input.readByte()) {\n\t\t\t\tcase CONSTRAINT_IK: {\n\t\t\t\t\tconst data = new IkConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.target = bones[input.readInt(true)];\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tif ((flags & 2) !== 0) data.scaleYMode = input.readUnsignedByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.bendDirection = (flags & 4) !== 0 ? -1 : 1;\n\t\t\t\t\tsetup.compress = (flags & 8) !== 0;\n\t\t\t\t\tsetup.stretch = (flags & 16) !== 0;\n\t\t\t\t\tif ((flags & 32) !== 0) setup.mix = (flags & 64) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tif ((flags & 128) !== 0) setup.softness = input.readFloat() * scale;\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_TRANSFORM: {\n\t\t\t\t\tconst data = new TransformConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.source = bones[input.readInt(true)];\n\t\t\t\t\tlet flags = input.readUnsignedByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.localSource = (flags & 2) !== 0;\n\t\t\t\t\tdata.localTarget = (flags & 4) !== 0;\n\t\t\t\t\tdata.additive = (flags & 8) !== 0;\n\t\t\t\t\tdata.clamp = (flags & 16) !== 0;\n\n\t\t\t\t\tnn = flags >> 5;\n\t\t\t\t\tfor (let ii = 0, tn: number; ii < nn; ii++) {\n\t\t\t\t\t\tlet fromScale = 1;\n\t\t\t\t\t\tlet from: FromProperty | null;\n\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\tcase 0: from = new FromRotate(); break;\n\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\tfromScale = scale;\n\t\t\t\t\t\t\t\tfrom = new FromX();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\tfromScale = scale;\n\t\t\t\t\t\t\t\tfrom = new FromY();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 3: from = new FromScaleX(); break;\n\t\t\t\t\t\t\tcase 4: from = new FromScaleY(); break;\n\t\t\t\t\t\t\tcase 5: from = new FromShearY(); break;\n\t\t\t\t\t\t\tdefault: from = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!from) continue;\n\t\t\t\t\t\tfrom.offset = input.readFloat() * fromScale;\n\t\t\t\t\t\ttn = input.readByte();\n\t\t\t\t\t\tfor (let t = 0; t < tn; t++) {\n\t\t\t\t\t\t\tlet toScale = 1;\n\t\t\t\t\t\t\tlet to: ToProperty | null;\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase 0: to = new ToRotate(); break;\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\tto = new ToX();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\tto = new ToY();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase 3: to = new ToScaleX(); break;\n\t\t\t\t\t\t\t\tcase 4: to = new ToScaleY(); break;\n\t\t\t\t\t\t\t\tcase 5: to = new ToShearY(); break;\n\t\t\t\t\t\t\t\tdefault: to = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!to) continue;\n\t\t\t\t\t\t\tto.offset = input.readFloat() * toScale;\n\t\t\t\t\t\t\tto.max = input.readFloat() * toScale;\n\t\t\t\t\t\t\tto.scale = input.readFloat() * toScale / fromScale;\n\t\t\t\t\t\t\tfrom.to[t] = to;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.properties[ii] = from;\n\t\t\t\t\t}\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tif ((flags & 1) !== 0) data.offsets[TransformConstraintData.ROTATION] = input.readFloat();\n\t\t\t\t\tif ((flags & 2) !== 0) data.offsets[TransformConstraintData.X] = input.readFloat() * scale;\n\t\t\t\t\tif ((flags & 4) !== 0) data.offsets[TransformConstraintData.Y] = input.readFloat() * scale;\n\t\t\t\t\tif ((flags & 8) !== 0) data.offsets[TransformConstraintData.SCALEX] = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) data.offsets[TransformConstraintData.SCALEY] = input.readFloat();\n\t\t\t\t\tif ((flags & 32) !== 0) data.offsets[TransformConstraintData.SHEARY] = input.readFloat();\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tif ((flags & 1) !== 0) setup.mixRotate = input.readFloat();\n\t\t\t\t\tif ((flags & 2) !== 0) setup.mixX = input.readFloat();\n\t\t\t\t\tif ((flags & 4) !== 0) setup.mixY = input.readFloat();\n\t\t\t\t\tif ((flags & 8) !== 0) setup.mixScaleX = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) setup.mixScaleY = input.readFloat();\n\t\t\t\t\tif ((flags & 32) !== 0) setup.mixShearY = input.readFloat();\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_PATH: {\n\t\t\t\t\tconst data = new PathConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.slot = skeletonData.slots[input.readInt(true)];\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.positionMode = (flags >> 1) & 0b1;\n\t\t\t\t\tdata.spacingMode = (flags >> 2) & 0b11;\n\t\t\t\t\tdata.rotateMode = (flags >> 4) & 0b11;\n\t\t\t\t\tif ((flags & 128) !== 0) data.offsetRotation = input.readFloat();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.position = input.readFloat();\n\t\t\t\t\tif (data.positionMode === PositionMode.Fixed) setup.position *= scale;\n\t\t\t\t\tsetup.spacing = input.readFloat();\n\t\t\t\t\tif (data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed) setup.spacing *= scale;\n\t\t\t\t\tsetup.mixRotate = input.readFloat();\n\t\t\t\t\tsetup.mixX = input.readFloat();\n\t\t\t\t\tsetup.mixY = input.readFloat();\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_PHYSICS: {\n\t\t\t\t\tconst data = new PhysicsConstraintData(name);\n\t\t\t\t\tdata.bone = bones[input.readInt(true)];\n\t\t\t\t\tlet flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tif ((flags & 2) !== 0) data.x = input.readFloat();\n\t\t\t\t\tif ((flags & 4) !== 0) data.y = input.readFloat();\n\t\t\t\t\tif ((flags & 8) !== 0) data.rotate = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) {\n\t\t\t\t\t\tlet scaleX = input.readFloat();\n\t\t\t\t\t\tif (scaleX < -2) {\n\t\t\t\t\t\t\tdata.scaleYMode = ScaleYMode.Volume;\n\t\t\t\t\t\t\tscaleX = -2 - scaleX;\n\t\t\t\t\t\t} else if (scaleX < 0) {\n\t\t\t\t\t\t\tdata.scaleYMode = ScaleYMode.Uniform;\n\t\t\t\t\t\t\tscaleX = -1 - scaleX;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.scaleX = scaleX;\n\t\t\t\t\t}\n\t\t\t\t\tif ((flags & 32) !== 0) data.shearX = input.readFloat();\n\t\t\t\t\tdata.limit = ((flags & 64) !== 0 ? input.readFloat() : 5000) * scale;\n\t\t\t\t\tdata.step = 1 / input.readUnsignedByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.inertia = input.readFloat();\n\t\t\t\t\tsetup.strength = input.readFloat();\n\t\t\t\t\tsetup.damping = input.readFloat();\n\t\t\t\t\tsetup.massInverse = (flags & 128) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tsetup.wind = input.readFloat();\n\t\t\t\t\tsetup.gravity = input.readFloat();\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tif ((flags & 1) !== 0) data.inertiaGlobal = true;\n\t\t\t\t\tif ((flags & 2) !== 0) data.strengthGlobal = true;\n\t\t\t\t\tif ((flags & 4) !== 0) data.dampingGlobal = true;\n\t\t\t\t\tif ((flags & 8) !== 0) data.massGlobal = true;\n\t\t\t\t\tif ((flags & 16) !== 0) data.windGlobal = true;\n\t\t\t\t\tif ((flags & 32) !== 0) data.gravityGlobal = true;\n\t\t\t\t\tif ((flags & 64) !== 0) data.mixGlobal = true;\n\t\t\t\t\tsetup.mix = (flags & 128) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_SLIDER: {\n\t\t\t\t\tconst data = new SliderData(name);\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.loop = (flags & 2) !== 0;\n\t\t\t\t\tdata.additive = (flags & 4) !== 0;\n\t\t\t\t\tif ((flags & 8) !== 0) {\n\t\t\t\t\t\tconst value = input.readFloat();\n\t\t\t\t\t\tif (nonessential && (flags & 64) !== 0)\n\t\t\t\t\t\t\tdata.max = value;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdata.setupPose.time = value;\n\t\t\t\t\t}\n\t\t\t\t\tif ((flags & 16) !== 0) data.setupPose.mix = (flags & 32) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tif ((flags & 64) !== 0) {\n\t\t\t\t\t\tdata.local = (flags & 128) !== 0;\n\t\t\t\t\t\tdata.bone = bones[input.readInt(true)];\n\t\t\t\t\t\tconst offset = input.readFloat();\n\t\t\t\t\t\tlet propertyScale = 1;\n\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\tcase 0: data.property = new FromRotate(); break;\n\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\tpropertyScale = scale;\n\t\t\t\t\t\t\t\tdata.property = new FromX();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\tpropertyScale = scale;\n\t\t\t\t\t\t\t\tdata.property = new FromY();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 3: data.property = new FromScaleX(); break;\n\t\t\t\t\t\t\tcase 4: data.property = new FromScaleY(); break;\n\t\t\t\t\t\t\tcase 5: data.property = new FromShearY(); break;\n\t\t\t\t\t\t\tdefault: continue;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdata.property.offset = offset * propertyScale;\n\t\t\t\t\t\tdata.offset = input.readFloat();\n\t\t\t\t\t\tdata.scale = input.readFloat() / propertyScale;\n\t\t\t\t\t}\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Default skin.\n\t\tconst defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n\t\tif (defaultSkin) {\n\t\t\tskeletonData.defaultSkin = defaultSkin;\n\t\t\tskeletonData.skins.push(defaultSkin);\n\t\t}\n\n\t\t// Skins.\n\t\t{\n\t\t\tlet i = skeletonData.skins.length;\n\t\t\tUtils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tconst skin = this.readSkin(input, skeletonData, false, nonessential);\n\t\t\t\tif (!skin) throw new Error(\"readSkin() should not have returned null.\");\n\t\t\t\tskeletonData.skins[i] = skin;\n\t\t\t}\n\t\t}\n\n\t\t// Linked meshes.\n\t\tn = this.linkedMeshes.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst linkedMesh = this.linkedMeshes[i];\n\t\t\tconst skin = skeletonData.skins[linkedMesh.skinIndex];\n\t\t\tif (!linkedMesh.source) throw new Error(\"Linked mesh parent must not be null\");\n\t\t\tconst source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source);\n\t\t\tif (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setSourceMesh(source as MeshAttachment);\n\t\t\tlinkedMesh.mesh.updateSequence();\n\t\t}\n\t\tthis.linkedMeshes.length = 0;\n\n\t\t// Events.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst eventName = input.readString();\n\t\t\tif (!eventName) throw new Error(\"Event data name must not be null\");\n\t\t\tconst data = new EventData(eventName);\n\t\t\tconst setup = data.setupPose;\n\t\t\tsetup.intValue = input.readInt(false);\n\t\t\tsetup.floatValue = input.readFloat();\n\t\t\tsetup.stringValue = input.readString();\n\t\t\tdata._audioPath = input.readString();\n\t\t\tif (data.audioPath) {\n\t\t\t\tsetup.volume = input.readFloat();\n\t\t\t\tsetup.balance = input.readFloat();\n\t\t\t}\n\t\t\tskeletonData.events.push(data);\n\t\t}\n\n\t\t// Animations.\n\t\tconst animations = skeletonData.animations;\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst animationName = input.readString();\n\t\t\tif (!animationName) throw new Error(\"Animation name must not be null.\");\n\t\t\tanimations.push(this.readAnimation(input, animationName, skeletonData, nonessential));\n\t\t}\n\n\t\tfor (let i = 0; i < constraintCount; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof SliderData) constraint.animation = animations[input.readInt(true)];\n\t\t}\n\n\t\treturn skeletonData;\n\t}\n\n\tprivate readSkin (input: BinaryInput, skeletonData: SkeletonData, defaultSkin: boolean, nonessential: boolean): Skin | null {\n\t\tlet skin = null;\n\t\tlet slotCount = 0;\n\n\t\tif (defaultSkin) {\n\t\t\tslotCount = input.readInt(true)\n\t\t\tif (slotCount === 0) return null;\n\t\t\tskin = new Skin(\"default\");\n\t\t} else {\n\t\t\tconst skinName = input.readString();\n\t\t\tif (!skinName) throw new Error(\"Skin name must not be null.\");\n\t\t\tskin = new Skin(skinName);\n\n\t\t\tif (nonessential) Color.rgba8888ToColor(skin.color, input.readInt32());\n\n\t\t\tlet n = input.readInt(true);\n\t\t\tlet from: object[] = skeletonData.bones, to: object[] = skin.bones;\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tto[i] = from[input.readInt(true)];\n\n\t\t\tn = input.readInt(true);\n\t\t\tfrom = skeletonData.constraints;\n\t\t\tto = skin.constraints;\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tto[i] = from[input.readInt(true)];\n\n\t\t\tslotCount = input.readInt(true);\n\t\t}\n\n\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\tconst slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst placeholder = input.readStringRef();\n\t\t\t\tif (!placeholder)\n\t\t\t\t\tthrow new Error(\"Attachment name must not be null\");\n\t\t\t\tconst attachment = this.readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential);\n\t\t\t\tif (attachment) skin.setAttachment(slotIndex, placeholder, attachment);\n\t\t\t}\n\t\t}\n\t\treturn skin;\n\t}\n\n\tprivate readAttachment (input: BinaryInput, skeletonData: SkeletonData, skin: Skin, slotIndex: number, placeholder: string, nonessential: boolean): Attachment | null {\n\t\tconst scale = this.scale;\n\n\t\tconst flags = input.readByte();\n\t\tconst name = (flags & 8) !== 0 ? input.readStringRef() : placeholder;\n\t\tif (!name) throw new Error(\"Attachment name must not be null\");\n\t\tswitch ((flags & 0b111) as AttachmentType) { // BUG?\n\t\t\tcase AttachmentType.Region: {\n\t\t\t\tlet path = (flags & 16) !== 0 ? input.readStringRef() : null;\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst rotation = (flags & 128) !== 0 ? input.readFloat() : 0;\n\t\t\t\tconst x = input.readFloat();\n\t\t\t\tconst y = input.readFloat();\n\t\t\t\tconst scaleX = input.readFloat();\n\t\t\t\tconst scaleY = input.readFloat();\n\t\t\t\tconst width = input.readFloat();\n\t\t\t\tconst height = input.readFloat();\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tconst region = this.attachmentLoader.newRegionAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!region) return null;\n\t\t\t\tregion.path = path;\n\t\t\t\tregion.x = x * scale;\n\t\t\t\tregion.y = y * scale;\n\t\t\t\tregion.scaleX = scaleX;\n\t\t\t\tregion.scaleY = scaleY;\n\t\t\t\tregion.rotation = rotation;\n\t\t\t\tregion.width = width * scale;\n\t\t\t\tregion.height = height * scale;\n\t\t\t\tColor.rgba8888ToColor(region.color, color);\n\t\t\t\tregion.updateSequence();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase AttachmentType.BoundingBox: {\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 16) !== 0);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tbox.worldVerticesLength = vertices.length;\n\t\t\t\tbox.vertices = vertices.vertices;\n\t\t\t\tbox.bones = vertices.bones;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(box.color, color);\n\t\t\t\treturn box;\n\t\t\t}\n\t\t\tcase AttachmentType.Mesh: {\n\t\t\t\tlet path = (flags & 16) !== 0 ? input.readStringRef() : name;\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst hullLength = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 128) !== 0);\n\t\t\t\tconst uvs = this.readFloatArray(input, vertices.length, 1);\n\t\t\t\tconst triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3);\n\n\t\t\t\tconst slotCount = input.readInt(true);\n\t\t\t\tlet timelineSlots = null;\n\t\t\t\tif (slotCount > 0) {\n\t\t\t\t\ttimelineSlots = [];\n\t\t\t\t\tfor (let i = 0; i < slotCount; i++)\n\t\t\t\t\t\ttimelineSlots[i] = input.readInt(true);\n\t\t\t\t}\n\n\t\t\t\tlet edges: number[] = [];\n\t\t\t\tlet width = 0, height = 0;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tedges = this.readShortArray(input, input.readInt(true));\n\t\t\t\t\twidth = input.readFloat();\n\t\t\t\t\theight = input.readFloat();\n\t\t\t\t}\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\t\t\t\tColor.rgba8888ToColor(mesh.color, color);\n\t\t\t\tmesh.hullLength = hullLength << 1;\n\t\t\t\tmesh.bones = vertices.bones;\n\t\t\t\tmesh.vertices = vertices.vertices;\n\t\t\t\tmesh.worldVerticesLength = vertices.length;\n\t\t\t\tmesh.regionUVs = uvs;\n\t\t\t\tmesh.triangles = triangles;\n\t\t\t\tif (timelineSlots) mesh.timelineSlots = timelineSlots;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tmesh.edges = edges;\n\t\t\t\t\tmesh.width = width * scale;\n\t\t\t\t\tmesh.height = height * scale;\n\t\t\t\t}\n\t\t\t\tmesh.updateSequence();\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.LinkedMesh: {\n\t\t\t\tconst path = (flags & 16) !== 0 ? input.readStringRef() : name;\n\t\t\t\tif (path == null) throw new Error(\"Path of linked mesh must not be null\");\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst inheritTimelines = (flags & 128) !== 0;\n\t\t\t\tconst sourceIndex = input.readInt(true);\n\t\t\t\tconst skinIndex = input.readInt(true);\n\t\t\t\tconst source = input.readStringRef();\n\t\t\t\tlet width = 0, height = 0;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\twidth = input.readFloat();\n\t\t\t\t\theight = input.readFloat();\n\t\t\t\t}\n\n\t\t\t\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\t\t\t\tColor.rgba8888ToColor(mesh.color, color);\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tmesh.width = width * scale;\n\t\t\t\t\tmesh.height = height * scale;\n\t\t\t\t}\n\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex, sourceIndex, source, inheritTimelines));\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.Path: {\n\t\t\t\tconst closed = (flags & 16) !== 0;\n\t\t\t\tconst constantSpeed = (flags & 32) !== 0;\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 64) !== 0);\n\n\t\t\t\tconst lengths = this.readFloatArray(input, vertices.length / 6, scale);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst path = this.attachmentLoader.newPathAttachment(skin, placeholder, name);\n\t\t\t\tif (!path) return null;\n\t\t\t\tpath.closed = closed;\n\t\t\t\tpath.constantSpeed = constantSpeed;\n\t\t\t\tpath.worldVerticesLength = vertices.length;\n\t\t\t\tpath.vertices = vertices.vertices;\n\t\t\t\tpath.bones = vertices.bones;\n\t\t\t\tpath.lengths = lengths;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(path.color, color);\n\t\t\t\treturn path;\n\t\t\t}\n\t\t\tcase AttachmentType.Point: {\n\t\t\t\tconst rotation = input.readFloat();\n\t\t\t\tconst x = input.readFloat();\n\t\t\t\tconst y = input.readFloat();\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst point = this.attachmentLoader.newPointAttachment(skin, placeholder, name);\n\t\t\t\tif (!point) return null;\n\t\t\t\tpoint.x = x * scale;\n\t\t\t\tpoint.y = y * scale;\n\t\t\t\tpoint.rotation = rotation;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(point.color, color);\n\t\t\t\treturn point;\n\t\t\t}\n\t\t\tcase AttachmentType.Clipping: {\n\t\t\t\tconst endSlotIndex = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 16) !== 0);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name);\n\t\t\t\tif (!clip) return null;\n\t\t\t\tclip.endSlot = skeletonData.slots[endSlotIndex];\n\t\t\t\tclip.convex = (flags & 32) !== 0;\n\t\t\t\tclip.inverse = (flags & 64) !== 0;\n\t\t\t\tclip.worldVerticesLength = vertices.length;\n\t\t\t\tclip.vertices = vertices.vertices;\n\t\t\t\tclip.bones = vertices.bones;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(clip.color, color);\n\t\t\t\treturn clip;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate readSequence (input: BinaryInput, hasPathSuffix: boolean) {\n\t\tif (!hasPathSuffix) return new Sequence(1, false);\n\t\tconst sequence = new Sequence(input.readInt(true), true);\n\t\tsequence.start = input.readInt(true);\n\t\tsequence.digits = input.readInt(true);\n\t\tsequence.setupIndex = input.readInt(true);\n\t\treturn sequence;\n\t}\n\n\tprivate readVertices (input: BinaryInput, weighted: boolean): Vertices {\n\t\tconst scale = this.scale;\n\t\tconst vertexCount = input.readInt(true);\n\t\tconst length = vertexCount << 1;\n\n\t\tif (!weighted)\n\t\t\treturn new Vertices(null, this.readFloatArray(input, length, scale), length);\n\n\t\tconst n = input.readInt(true);\n\t\tconst bones: number[] = [];\n\t\tconst weights: number[] = [];\n\t\tfor (let b = 0, w = 0; b < n;) {\n\t\t\tconst boneCount = input.readInt(true);\n\t\t\tbones[b++] = boneCount;\n\t\t\tfor (let ii = 0; ii < boneCount; ii++, w += 3) {\n\t\t\t\tbones[b++] = input.readInt(true);\n\t\t\t\tweights[w] = input.readFloat() * scale;\n\t\t\t\tweights[w + 1] = input.readFloat() * scale;\n\t\t\t\tweights[w + 2] = input.readFloat();\n\t\t\t}\n\t\t}\n\t\treturn new Vertices(bones, Utils.toFloatArray(weights), length);\n\t}\n\n\tprivate readFloatArray (input: BinaryInput, n: number, scale: number): number[] {\n\t\tconst array: number[] = [];\n\t\tif (scale === 1) {\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tarray[i] = input.readFloat();\n\t\t} else {\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tarray[i] = input.readFloat() * scale;\n\t\t}\n\t\treturn array;\n\t}\n\n\tprivate readShortArray (input: BinaryInput, n: number): number[] {\n\t\tconst array: number[] = [];\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tarray[i] = input.readInt(true);\n\t\treturn array;\n\t}\n\n\tprivate readAnimation (input: BinaryInput, name: string, skeletonData: SkeletonData, nonessential: boolean): Animation {\n\t\tinput.readInt(true); // Number of timelines.\n\t\tconst timelines: Timeline[] = [];\n\t\tconst scale = this.scale;\n\n\t\t// Slot timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst timelineType = input.readByte();\n\t\t\t\tconst frameCount = input.readInt(true);\n\t\t\t\tconst frameLast = frameCount - 1;\n\t\t\t\tswitch (timelineType) {\n\t\t\t\t\tcase SLOT_ATTACHMENT: {\n\t\t\t\t\t\tconst timeline = new AttachmentTimeline(frameCount, slotIndex);\n\t\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++)\n\t\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat(), input.readStringRef());\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGBA: {\n\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet a = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, a);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\n\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst b2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst a2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = r2;\n\t\t\t\t\t\t\tg = g2;\n\t\t\t\t\t\t\tb = b2;\n\t\t\t\t\t\t\ta = a2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGB: {\n\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\n\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = r2;\n\t\t\t\t\t\t\tg = g2;\n\t\t\t\t\t\t\tb = b2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGBA2: {\n\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet a = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst na = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = nr;\n\t\t\t\t\t\t\tg = ng;\n\t\t\t\t\t\t\tb = nb;\n\t\t\t\t\t\t\ta = na;\n\t\t\t\t\t\t\tr2 = nr2;\n\t\t\t\t\t\t\tg2 = ng2;\n\t\t\t\t\t\t\tb2 = nb2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGB2: {\n\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = nr;\n\t\t\t\t\t\t\tg = ng;\n\t\t\t\t\t\t\tb = nb;\n\t\t\t\t\t\t\tr2 = nr2;\n\t\t\t\t\t\t\tg2 = ng2;\n\t\t\t\t\t\t\tb2 = nb2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_ALPHA: {\n\t\t\t\t\t\tconst timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n\t\t\t\t\t\tlet time = input.readFloat(), a = input.readUnsignedByte() / 255;\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, a);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst a2 = input.readUnsignedByte() / 255;\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\ta = a2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Bone timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst boneIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true);\n\t\t\t\tif (type === BONE_INHERIT) {\n\t\t\t\t\tconst timeline = new InheritTimeline(frameCount, boneIndex);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat(), input.readByte());\n\t\t\t\t\t}\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase BONE_ROTATE: readTimeline(input, timelines, new RotateTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_TRANSLATE: readTimeline(input, timelines, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_TRANSLATEX: readTimeline(input, timelines, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_TRANSLATEY: readTimeline(input, timelines, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_SCALE: readTimeline(input, timelines, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SCALEX: readTimeline(input, timelines, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SCALEY: readTimeline(input, timelines, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEAR: readTimeline(input, timelines, new ShearTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEARX: readTimeline(input, timelines, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEARY: readTimeline(input, timelines, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IK constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tconst timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n\t\t\tlet flags = input.readByte();\n\t\t\tlet time = input.readFloat(), mix = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;\n\t\t\tlet softness = (flags & 4) !== 0 ? input.readFloat() * scale : 0;\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mix, softness, (flags & 8) !== 0 ? 1 : -1, (flags & 16) !== 0, (flags & 32) !== 0);\n\t\t\t\tif (frame === frameLast) break;\n\t\t\t\tflags = input.readByte();\n\t\t\t\tconst time2 = input.readFloat(), mix2 = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;\n\t\t\t\tconst softness2 = (flags & 4) !== 0 ? input.readFloat() * scale : 0;\n\t\t\t\tif ((flags & 64) !== 0) {\n\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t} else if ((flags & 128) !== 0) {\n\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n\t\t\t\t}\n\t\t\t\ttime = time2;\n\t\t\t\tmix = mix2;\n\t\t\t\tsoftness = softness2;\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Transform constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tconst timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n\t\t\tlet time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(),\n\t\t\t\tmixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n\t\t\t\tif (frame === frameLast) break;\n\t\t\t\tconst time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(),\n\t\t\t\t\tmixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();\n\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n\t\t\t\t}\n\t\t\t\ttime = time2;\n\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\tmixX = mixX2;\n\t\t\t\tmixY = mixY2;\n\t\t\t\tmixScaleX = mixScaleX2;\n\t\t\t\tmixScaleY = mixScaleY2;\n\t\t\t\tmixShearY = mixShearY2;\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Path constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true);\n\t\t\tconst data = skeletonData.constraints[index] as PathConstraintData;\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase PATH_POSITION:\n\t\t\t\t\t\treadTimeline(input, timelines, new PathConstraintPositionTimeline(frameCount, bezierCount, index),\n\t\t\t\t\t\t\tdata.positionMode === PositionMode.Fixed ? scale : 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PATH_SPACING:\n\t\t\t\t\t\treadTimeline(input, timelines, new PathConstraintSpacingTimeline(frameCount, bezierCount, index),\n\t\t\t\t\t\t\tdata.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed ? scale : 1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PATH_MIX: {\n\t\t\t\t\t\tconst timeline = new PathConstraintMixTimeline(frameCount, bezierCount, index);\n\t\t\t\t\t\tlet time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY);\n\t\t\t\t\t\t\tif (frame === frameLast) break;\n\t\t\t\t\t\t\tconst time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(),\n\t\t\t\t\t\t\t\tmixY2 = input.readFloat();\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Physics timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true) - 1;\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true);\n\t\t\t\tif (type === PHYSICS_RESET) {\n\t\t\t\t\tconst timeline = new PhysicsConstraintResetTimeline(frameCount, index);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++)\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat());\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase PHYSICS_INERTIA: readTimeline(input, timelines, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_STRENGTH: readTimeline(input, timelines, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_DAMPING: readTimeline(input, timelines, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_MASS: readTimeline(input, timelines, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_WIND: readTimeline(input, timelines, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_GRAVITY: readTimeline(input, timelines, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_MIX: readTimeline(input, timelines, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tdefault: throw new Error(\"Unknown physics timeline type.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Slider timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase SLIDER_TIME: readTimeline(input, timelines, new SliderTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase SLIDER_MIX: readTimeline(input, timelines, new SliderMixTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tdefault: throw new Error(`Uknown slider type: ${type}`);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\t// Attachment timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst skin = skeletonData.skins[input.readInt(true)];\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst slotIndex = input.readInt(true);\n\t\t\t\tfor (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n\t\t\t\t\tconst attachmentName = input.readStringRef();\n\t\t\t\t\tif (!attachmentName) throw new Error(\"attachmentName must not be null.\");\n\t\t\t\t\tconst attachment = skin.getAttachment(slotIndex, attachmentName);\n\t\t\t\t\tconst timelineType = input.readByte();\n\t\t\t\t\tconst frameCount = input.readInt(true);\n\t\t\t\t\tconst frameLast = frameCount - 1;\n\n\t\t\t\t\tswitch (timelineType) {\n\t\t\t\t\t\tcase ATTACHMENT_DEFORM: {\n\t\t\t\t\t\t\tconst vertexAttachment = attachment as VertexAttachment;\n\t\t\t\t\t\t\tconst weighted = vertexAttachment.bones;\n\t\t\t\t\t\t\tconst vertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tconst deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\n\t\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\t\tconst timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);\n\n\t\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\tlet deform: NumberArrayLike;\n\t\t\t\t\t\t\t\tlet end = input.readInt(true);\n\t\t\t\t\t\t\t\tif (end === 0)\n\t\t\t\t\t\t\t\t\tdeform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdeform = Utils.newFloatArray(deformLength);\n\t\t\t\t\t\t\t\t\tconst start = input.readInt(true);\n\t\t\t\t\t\t\t\t\tend += start;\n\t\t\t\t\t\t\t\t\tif (scale === 1) {\n\t\t\t\t\t\t\t\t\t\tfor (let v = start; v < end; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] = input.readFloat();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfor (let v = start; v < end; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] = input.readFloat() * scale;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!weighted) {\n\t\t\t\t\t\t\t\t\t\tfor (let v = 0, vn = deform.length; v < vn; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] += vertices[v];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, deform);\n\t\t\t\t\t\t\t\tif (frame === frameLast) break;\n\t\t\t\t\t\t\t\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase ATTACHMENT_SEQUENCE: {\n\t\t\t\t\t\t\tconst timeline = new SequenceTimeline(frameCount, slotIndex, attachment as Attachment);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\t\t\tconst time = input.readFloat();\n\t\t\t\t\t\t\t\tconst modeAndIndex = input.readInt32();\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4,\n\t\t\t\t\t\t\t\t\tinput.readFloat());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw order timeline.\n\t\tconst slotCount = skeletonData.slots.length;\n\t\tconst drawOrderCount = input.readInt(true);\n\t\tif (drawOrderCount > 0) {\n\t\t\tconst timeline = new DrawOrderTimeline(drawOrderCount);\n\t\t\tfor (let i = 0; i < drawOrderCount; i++)\n\t\t\t\ttimeline.setFrame(i, input.readFloat(), readDrawOrder(input, slotCount));\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Draw order folder timelines.\n\t\tconst folderCount = input.readInt(true);\n\t\tfor (let i = 0; i < folderCount; i++) {\n\t\t\tconst folderSlotCount = input.readInt(true);\n\t\t\tconst folderSlots = new Array<number>(folderSlotCount);\n\t\t\tfor (let ii = 0; ii < folderSlotCount; ii++)\n\t\t\t\tfolderSlots[ii] = input.readInt(true);\n\t\t\tconst keyCount = input.readInt(true);\n\t\t\tconst timeline = new DrawOrderFolderTimeline(keyCount, folderSlots, slotCount);\n\t\t\tfor (let ii = 0; ii < keyCount; ii++)\n\t\t\t\ttimeline.setFrame(ii, input.readFloat(), readDrawOrder(input, folderSlotCount));\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Event timeline.\n\t\tconst eventCount = input.readInt(true);\n\t\tif (eventCount > 0) {\n\t\t\tconst timeline = new EventTimeline(eventCount);\n\t\t\tfor (let i = 0; i < eventCount; i++) {\n\t\t\t\tconst time = input.readFloat();\n\t\t\t\tconst eventData = skeletonData.events[input.readInt(true)];\n\t\t\t\tconst event = new Event(time, eventData);\n\t\t\t\tevent.intValue = input.readInt(false);\n\t\t\t\tevent.floatValue = input.readFloat();\n\t\t\t\tevent.stringValue = input.readString();\n\t\t\t\tif (event.stringValue == null) event.stringValue = eventData.setupPose.stringValue;\n\t\t\t\tif (event.data.audioPath) {\n\t\t\t\t\tevent.volume = input.readFloat();\n\t\t\t\t\tevent.balance = input.readFloat();\n\t\t\t\t}\n\t\t\t\ttimeline.setFrame(i, event);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\tlet duration = 0;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\tduration = Math.max(duration, timelines[i].getDuration());\n\t\tconst animation = new Animation(name, timelines, duration);\n\t\tif (nonessential) Color.rgba8888ToColor(animation.color, input.readInt32());\n\t\treturn animation;\n\t}\n}\n\nexport class BinaryInput {\n\tconstructor (data: Uint8Array | ArrayBuffer, public strings = [] as string[], private index: number = 0, private buffer: DataView = new DataView(data instanceof ArrayBuffer ? data : data.buffer)) {\n\t}\n\n\treadByte (): number {\n\t\treturn this.buffer.getInt8(this.index++);\n\t}\n\n\treadUnsignedByte (): number {\n\t\treturn this.buffer.getUint8(this.index++);\n\t}\n\n\treadShort (): number {\n\t\tconst value = this.buffer.getInt16(this.index);\n\t\tthis.index += 2;\n\t\treturn value;\n\t}\n\n\treadInt32 (): number {\n\t\tconst value = this.buffer.getInt32(this.index)\n\t\tthis.index += 4;\n\t\treturn value;\n\t}\n\n\treadInt (optimizePositive: boolean) {\n\t\tlet b = this.readByte();\n\t\tlet result = b & 0x7F;\n\t\tif ((b & 0x80) !== 0) {\n\t\t\tb = this.readByte();\n\t\t\tresult |= (b & 0x7F) << 7;\n\t\t\tif ((b & 0x80) !== 0) {\n\t\t\t\tb = this.readByte();\n\t\t\t\tresult |= (b & 0x7F) << 14;\n\t\t\t\tif ((b & 0x80) !== 0) {\n\t\t\t\t\tb = this.readByte();\n\t\t\t\t\tresult |= (b & 0x7F) << 21;\n\t\t\t\t\tif ((b & 0x80) !== 0) {\n\t\t\t\t\t\tb = this.readByte();\n\t\t\t\t\t\tresult |= (b & 0x7F) << 28;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n\t}\n\n\treadStringRef (): string | null {\n\t\tconst index = this.readInt(true);\n\t\treturn index === 0 ? null : this.strings[index - 1];\n\t}\n\n\treadString (): string | null {\n\t\tlet byteCount = this.readInt(true);\n\t\tswitch (byteCount) {\n\t\t\tcase 0:\n\t\t\t\treturn null;\n\t\t\tcase 1:\n\t\t\t\treturn \"\";\n\t\t}\n\t\tbyteCount--;\n\t\tlet chars = \"\";\n\t\tfor (let i = 0; i < byteCount;) {\n\t\t\tconst b = this.readUnsignedByte();\n\t\t\tswitch (b >> 4) {\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\t\tchars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n\t\t\t\t\ti += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\t\tchars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n\t\t\t\t\ti += 3;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tchars += String.fromCharCode(b);\n\t\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t}\n\n\treadFloat (): number {\n\t\tconst value = this.buffer.getFloat32(this.index);\n\t\tthis.index += 4;\n\t\treturn value;\n\t}\n\n\treadBoolean (): boolean {\n\t\treturn this.readByte() !== 0;\n\t}\n}\n\nclass LinkedMesh {\n\tsource: string | null;\n\tskinIndex: number; slotIndex: number; sourceIndex: number\n\tmesh: MeshAttachment;\n\tinheritTimelines: boolean;\n\n\tconstructor (mesh: MeshAttachment, skinIndex: number, slotIndex: number, sourceIndex: number, source: string | null,\n\t\tinheritTimelines: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skinIndex = skinIndex;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.sourceIndex = sourceIndex;\n\t\tthis.source = source;\n\t\tthis.inheritTimelines = inheritTimelines;\n\t}\n}\n\nclass Vertices {\n\tconstructor (public bones: Array<number> | null = null, public vertices: Array<number> | Float32Array, public length: number = 0) { }\n}\n\nenum AttachmentType { Region, BoundingBox, Mesh, LinkedMesh, Path, Point, Clipping }\n\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1, scale: number): void;\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: BoneTimeline2, scale: number): void;\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1 | BoneTimeline2, scale: number): void {\n\tif (timeline instanceof CurveTimeline1)\n\t\treadTimeline1(input, timelines, timeline, scale);\n\telse\n\t\treadTimeline2(input, timelines, timeline, scale);\n}\n\nfunction readTimeline1 (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1, scale: number): void {\n\tlet time = input.readFloat(), value = input.readFloat() * scale;\n\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value);\n\t\tif (frame === frameLast) break;\n\t\tconst time2 = input.readFloat(), value2 = input.readFloat() * scale;\n\t\tswitch (input.readByte()) {\n\t\t\tcase CURVE_STEPPED:\n\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\tbreak;\n\t\t\tcase CURVE_BEZIER:\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue = value2;\n\t}\n\ttimelines.push(timeline);\n}\n\nfunction readTimeline2 (input: BinaryInput, timelines: Array<Timeline>, timeline: BoneTimeline2, scale: number): void {\n\tlet time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;\n\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value1, value2);\n\t\tif (frame === frameLast) break;\n\t\tconst time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;\n\t\tswitch (input.readByte()) {\n\t\t\tcase CURVE_STEPPED:\n\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\tbreak;\n\t\t\tcase CURVE_BEZIER:\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue1 = nvalue1;\n\t\tvalue2 = nvalue2;\n\t}\n\ttimelines.push(timeline);\n}\n\nfunction readDrawOrder (input: BinaryInput, slotCount: number): number[] | null {\n\tconst changeCount = input.readInt(true);\n\tif (changeCount === 0) return null;\n\tconst drawOrder = new Array<number>(slotCount).fill(-1);\n\tconst unchanged = new Array<number>(slotCount - changeCount);\n\tlet originalIndex = 0, unchangedIndex = 0;\n\tfor (let i = 0; i < changeCount; i++) {\n\t\tconst slotIndex = input.readInt(true);\n\t\t// Collect unchanged items.\n\t\twhile (originalIndex !== slotIndex)\n\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t// Set changed items.\n\t\tdrawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n\t}\n\t// Collect remaining unchanged items.\n\twhile (originalIndex < slotCount)\n\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t// Fill in unchanged items.\n\tfor (let i = slotCount - 1; i >= 0; i--)\n\t\tif (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex];\n\treturn drawOrder;\n}\n\nfunction setBezier (input: BinaryInput, timeline: CurveTimeline, bezier: number, frame: number, value: number,\n\ttime1: number, time2: number, value1: number, value2: number, scale: number) {\n\ttimeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);\n}\n\nconst BONE_ROTATE = 0;\nconst BONE_TRANSLATE = 1;\nconst BONE_TRANSLATEX = 2;\nconst BONE_TRANSLATEY = 3;\nconst BONE_SCALE = 4;\nconst BONE_SCALEX = 5;\nconst BONE_SCALEY = 6;\nconst BONE_SHEAR = 7;\nconst BONE_SHEARX = 8;\nconst BONE_SHEARY = 9;\nconst BONE_INHERIT = 10;\n\nconst SLOT_ATTACHMENT = 0;\nconst SLOT_RGBA = 1;\nconst SLOT_RGB = 2;\nconst SLOT_RGBA2 = 3;\nconst SLOT_RGB2 = 4;\nconst SLOT_ALPHA = 5;\n\nconst CONSTRAINT_IK = 0;\nconst CONSTRAINT_PATH = 1;\nconst CONSTRAINT_TRANSFORM = 2;\nconst CONSTRAINT_PHYSICS = 3;\nconst CONSTRAINT_SLIDER = 4;\n\nconst ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\n\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\n\nconst PHYSICS_INERTIA = 0;\nconst PHYSICS_STRENGTH = 1;\nconst PHYSICS_DAMPING = 2;\nconst PHYSICS_MASS = 4;\nconst PHYSICS_WIND = 5;\nconst PHYSICS_GRAVITY = 6;\nconst PHYSICS_MIX = 7;\nconst PHYSICS_RESET = 8;\n\nconst SLIDER_TIME = 0;\nconst SLIDER_MIX = 1;\n\n// biome-ignore lint/correctness/noUnusedVariables: intentional\nconst CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { type NumberArrayLike, Pool, Utils } from \"./Utils.js\";\n\n/** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are\n * provided along with convenience methods for doing hit detection. */\nexport class SkeletonBounds {\n\n\t/** The left edge of the axis aligned bounding box. */\n\tminX = 0;\n\n\t/** The bottom edge of the axis aligned bounding box. */\n\tminY = 0;\n\n\t/** The right edge of the axis aligned bounding box. */\n\tmaxX = 0;\n\n\t/** The top edge of the axis aligned bounding box. */\n\tmaxY = 0;\n\n\t/** The visible bounding boxes. */\n\tboundingBoxes = [] as BoundingBoxAttachment[];\n\n\t/** The world vertices for the bounding box polygons. */\n\tpolygons = [] as NumberArrayLike[];\n\n\tprivate polygonPool = new Pool<NumberArrayLike>(() => {\n\t\treturn Utils.newFloatArray(16);\n\t});\n\n\t/** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding\n\t * box's polygon.\n\t * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the\n\t *           SkeletonBounds AABB methods will always return true. */\n\tupdate (skeleton: Skeleton, updateAabb: boolean) {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tconst boundingBoxes = this.boundingBoxes;\n\t\tconst polygons = this.polygons;\n\t\tconst polygonPool = this.polygonPool;\n\t\tconst slots = skeleton.slots;\n\t\tconst slotCount = slots.length;\n\n\t\tboundingBoxes.length = 0;\n\t\tpolygonPool.freeAll(polygons);\n\t\tpolygons.length = 0;\n\n\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\tconst slot = slots[i];\n\t\t\tif (!slot.bone.active) continue;\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\t\t\tif (attachment instanceof BoundingBoxAttachment) {\n\t\t\t\tboundingBoxes.push(attachment);\n\n\t\t\t\tlet polygon = polygonPool.obtain();\n\t\t\t\tif (polygon.length !== attachment.worldVerticesLength) {\n\t\t\t\t\tpolygon = Utils.newFloatArray(attachment.worldVerticesLength);\n\t\t\t\t}\n\t\t\t\tpolygons.push(polygon);\n\t\t\t\tattachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, polygon, 0, 2);\n\t\t\t}\n\t\t}\n\n\t\tif (updateAabb) {\n\t\t\tthis.aabbCompute();\n\t\t} else {\n\t\t\tthis.minX = Number.POSITIVE_INFINITY;\n\t\t\tthis.minY = Number.POSITIVE_INFINITY;\n\t\t\tthis.maxX = Number.NEGATIVE_INFINITY;\n\t\t\tthis.maxY = Number.NEGATIVE_INFINITY;\n\t\t}\n\t}\n\n\taabbCompute () {\n\t\tlet minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\tconst polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++) {\n\t\t\tconst polygon = polygons[i];\n\t\t\tconst vertices = polygon;\n\t\t\tfor (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n\t\t\t\tconst x = vertices[ii];\n\t\t\t\tconst y = vertices[ii + 1];\n\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t}\n\t\t}\n\t\tthis.minX = minX;\n\t\tthis.minY = minY;\n\t\tthis.maxX = maxX;\n\t\tthis.maxY = maxY;\n\t}\n\n\t/** Returns true if the axis aligned bounding box contains the point. */\n\taabbContainsPoint (x: number, y: number) {\n\t\treturn x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n\t}\n\n\t/** Returns true if the axis aligned bounding box intersects the line segment. */\n\taabbIntersectsSegment (x1: number, y1: number, x2: number, y2: number) {\n\t\tconst minX = this.minX;\n\t\tconst minY = this.minY;\n\t\tconst maxX = this.maxX;\n\t\tconst maxY = this.maxY;\n\t\tif ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n\t\t\treturn false;\n\t\tconst m = (y2 - y1) / (x2 - x1);\n\t\tlet y = m * (minX - x1) + y1;\n\t\tif (y > minY && y < maxY) return true;\n\t\ty = m * (maxX - x1) + y1;\n\t\tif (y > minY && y < maxY) return true;\n\t\tlet x = (minY - y1) / m + x1;\n\t\tif (x > minX && x < maxX) return true;\n\t\tx = (maxY - y1) / m + x1;\n\t\tif (x > minX && x < maxX) return true;\n\t\treturn false;\n\t}\n\n\t/** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */\n\taabbIntersectsSkeleton (bounds: SkeletonBounds) {\n\t\treturn this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n\t}\n\n\t/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more\n\t * efficient to only call this method if {@link aabbContainsPoint} returns true. */\n\tcontainsPoint (x: number, y: number): BoundingBoxAttachment | null {\n\t\tconst polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++)\n\t\t\tif (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i];\n\t\treturn null;\n\t}\n\n\t/** Returns true if the polygon contains the point. */\n\tcontainsPointPolygon (polygon: NumberArrayLike, x: number, y: number) {\n\t\tconst vertices = polygon;\n\t\tconst nn = polygon.length;\n\n\t\tlet prevIndex = nn - 2;\n\t\tlet inside = false;\n\t\tfor (let ii = 0; ii < nn; ii += 2) {\n\t\t\tconst vertexY = vertices[ii + 1];\n\t\t\tconst prevY = vertices[prevIndex + 1];\n\t\t\tif ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n\t\t\t\tconst vertexX = vertices[ii];\n\t\t\t\tif (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) inside = !inside;\n\t\t\t}\n\t\t\tprevIndex = ii;\n\t\t}\n\t\treturn inside;\n\t}\n\n\t/** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it\n\t * is usually more efficient to only call this method if {@link aabbIntersectsSegment} returns\n\t * true. */\n\tintersectsSegment (x1: number, y1: number, x2: number, y2: number) {\n\t\tconst polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++)\n\t\t\tif (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i];\n\t\treturn null;\n\t}\n\n\t/** Returns true if the polygon contains any part of the line segment. */\n\tintersectsSegmentPolygon (polygon: NumberArrayLike, x1: number, y1: number, x2: number, y2: number) {\n\t\tconst vertices = polygon;\n\t\tconst nn = polygon.length;\n\n\t\tconst width12 = x1 - x2, height12 = y1 - y2;\n\t\tconst det1 = x1 * y2 - y1 * x2;\n\t\tlet x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n\t\tfor (let ii = 0; ii < nn; ii += 2) {\n\t\t\tconst x4 = vertices[ii], y4 = vertices[ii + 1];\n\t\t\tconst det2 = x3 * y4 - y3 * x4;\n\t\t\tconst width34 = x3 - x4, height34 = y3 - y4;\n\t\t\tconst det3 = width12 * height34 - height12 * width34;\n\t\t\tconst x = (det1 * width34 - width12 * det2) / det3;\n\t\t\tif (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n\t\t\t\tconst y = (det1 * height34 - height12 * det2) / det3;\n\t\t\t\tif (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) return true;\n\t\t\t}\n\t\t\tx3 = x4;\n\t\t\ty3 = y4;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Returns the polygon for the specified bounding box, or null. */\n\tgetPolygon (boundingBox: BoundingBoxAttachment) {\n\t\tif (!boundingBox) throw new Error(\"boundingBox cannot be null.\");\n\t\tconst index = this.boundingBoxes.indexOf(boundingBox);\n\t\treturn index === -1 ? null : this.polygons[index];\n\t}\n\n\t/** The width of the axis aligned bounding box. */\n\tgetWidth () {\n\t\treturn this.maxX - this.minX;\n\t}\n\n\t/** The height of the axis aligned bounding box. */\n\tgetHeight () {\n\t\treturn this.maxY - this.minY;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { type NumberArrayLike, Pool } from \"./Utils.js\";\n\nexport class Triangulator {\n\tprivate convexPolygons = [] as Array<number>[];\n\tprivate convexPolygonsIndices = [] as Array<number>[];\n\n\tprivate indicesArray = [] as number[];\n\tprivate isConcaveArray = [] as boolean[];\n\tprivate triangles = [] as number[];\n\n\tprivate polygonPool = new Pool<Array<number>>(() => {\n\t\treturn [] as number[];\n\t});\n\n\tprivate polygonIndicesPool = new Pool<Array<number>>(() => {\n\t\treturn [] as number[];\n\t});\n\n\tpublic triangulate (verticesArray: NumberArrayLike): Array<number> {\n\t\tconst vertices = verticesArray;\n\t\tlet vertexCount = verticesArray.length >> 1;\n\n\t\tconst indices = this.indicesArray;\n\t\tindices.length = 0;\n\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\tindices[i] = i;\n\n\t\tconst isConcave = this.isConcaveArray;\n\t\tisConcave.length = 0;\n\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\tisConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n\n\t\tconst triangles = this.triangles;\n\t\ttriangles.length = 0;\n\n\t\twhile (vertexCount > 3) {\n\t\t\t// Find ear tip.\n\t\t\tlet previous = vertexCount - 1, i = 0, next = 1;\n\t\t\twhile (true) {\n\t\t\t\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\n\t\t\t\touter:\n\t\t\t\tif (!isConcave[i]) {\n\t\t\t\t\tconst p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n\t\t\t\t\tconst p1x = vertices[p1], p1y = vertices[p1 + 1];\n\t\t\t\t\tconst p2x = vertices[p2], p2y = vertices[p2 + 1];\n\t\t\t\t\tconst p3x = vertices[p3], p3y = vertices[p3 + 1];\n\t\t\t\t\tfor (let ii = next + 1 < vertexCount ? next + 1 : 0; ii !== previous;) {\n\t\t\t\t\t\tif (isConcave[ii]) {\n\t\t\t\t\t\t\tconst v = indices[ii] << 1;\n\t\t\t\t\t\t\tconst vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\t\t\t\tif (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) //\n\t\t\t\t\t\t\t\t&& Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) //\n\t\t\t\t\t\t\t\t&& Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (++ii === vertexCount) ii = 0;\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (next === 0) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (!isConcave[i]) break;\n\t\t\t\t\t\ti--;\n\t\t\t\t\t} while (i > 0);\n\t\t\t\t\tprevious = i > 0 ? i - 1 : vertexCount - 1;\n\t\t\t\t\tnext = i + 1 < vertexCount ? i + 1 : 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tprevious = i;\n\t\t\t\ti = next;\n\t\t\t\tif (++next === vertexCount) next = 0;\n\t\t\t}\n\n\t\t\t// Cut ear tip.\n\t\t\ttriangles.push(indices[previous], indices[i], indices[next]);\n\t\t\tindices.splice(i, 1);\n\t\t\tisConcave.splice(i, 1);\n\t\t\tvertexCount--;\n\n\t\t\tconst previousIndex = i > 0 ? i - 1 : vertexCount - 1;\n\t\t\tconst nextIndex = i < vertexCount ? i : 0;\n\t\t\tisConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n\t\t\tisConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n\t\t}\n\t\tif (vertexCount === 3) triangles.push(indices[2], indices[0], indices[1]);\n\t\treturn triangles;\n\t}\n\n\tdecompose (verticesArray: Array<number>, triangles: Array<number>): Array<Array<number>> {\n\t\tconst vertices = verticesArray;\n\t\tconst convexPolygons = this.convexPolygons;\n\t\tthis.polygonPool.freeAll(convexPolygons);\n\t\tconvexPolygons.length = 0;\n\n\t\tconst convexPolygonsIndices = this.convexPolygonsIndices;\n\t\tthis.polygonIndicesPool.freeAll(convexPolygonsIndices);\n\t\tconvexPolygonsIndices.length = 0;\n\n\t\tlet polygonIndices = this.polygonIndicesPool.obtain();\n\t\tpolygonIndices.length = 0;\n\n\t\tlet polygon = this.polygonPool.obtain();\n\t\tpolygon.length = 0;\n\n\t\t// Merge subsequent triangles if they form a triangle fan.\n\t\tlet fanBaseIndex = -1, lastWinding = 0;\n\t\tfor (let i = 0, n = triangles.length; i < n; i += 3) {\n\t\t\tconst t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n\t\t\tconst x1 = vertices[t1], y1 = vertices[t1 + 1];\n\t\t\tconst x2 = vertices[t2], y2 = vertices[t2 + 1];\n\t\t\tconst x3 = vertices[t3], y3 = vertices[t3 + 1];\n\n\t\t\t// If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan).\n\t\t\tif (fanBaseIndex === t1) {\n\t\t\t\tconst o = polygon.length - 4;\n\t\t\t\tif (Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3) === lastWinding\n\t\t\t\t\t&& Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]) === lastWinding) {\n\t\t\t\t\tpolygon.push(x3, y3);\n\t\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Otherwise make this triangle the new base.\n\t\t\tif (polygon.length > 0) {\n\t\t\t\tconvexPolygons.push(polygon);\n\t\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t\t\tpolygon = this.polygonPool.obtain();\n\t\t\t\tpolygonIndices = this.polygonIndicesPool.obtain();\n\t\t\t}\n\t\t\tpolygon.length = 0;\n\t\t\tpolygon.push(x1, y1, x2, y2);\n\t\t\tpolygon.push(x3, y3);\n\t\t\tpolygonIndices.length = 0;\n\t\t\tpolygonIndices.push(t1, t2, t3);\n\t\t\tlastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n\t\t\tfanBaseIndex = t1;\n\t\t}\n\n\t\tif (polygon.length > 0) {\n\t\t\tconvexPolygons.push(polygon);\n\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t}\n\n\t\t// Merge remaining triangles with the found triangle fans.\n\t\tfor (let i = 0, n = convexPolygons.length; i < n; i++) {\n\t\t\tpolygonIndices = convexPolygonsIndices[i];\n\t\t\tif (polygonIndices.length === 0) continue;\n\t\t\tconst firstIndex = polygonIndices[0];\n\t\t\tlet lastIndex = polygonIndices[polygonIndices.length - 1];\n\n\t\t\tpolygon = convexPolygons[i];\n\t\t\tconst o = polygon.length - 4;\n\t\t\tlet prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n\t\t\tlet prevX = polygon[o + 2], prevY = polygon[o + 3];\n\t\t\tconst firstX = polygon[0], firstY = polygon[1];\n\t\t\tconst secondX = polygon[2], secondY = polygon[3];\n\t\t\tconst winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n\n\t\t\tfor (let ii = 0; ii < n; ii++) {\n\t\t\t\tif (ii === i) continue;\n\t\t\t\tconst otherIndices = convexPolygonsIndices[ii];\n\t\t\t\tif (otherIndices.length !== 3) continue;\n\t\t\t\tconst otherFirstIndex = otherIndices[0];\n\t\t\t\tconst otherSecondIndex = otherIndices[1];\n\t\t\t\tconst otherLastIndex = otherIndices[2];\n\n\t\t\t\tconst otherPoly = convexPolygons[ii];\n\t\t\t\tconst x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n\n\t\t\t\tif (otherFirstIndex !== firstIndex || otherSecondIndex !== lastIndex) continue;\n\t\t\t\tif (Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3) === winding\n\t\t\t\t\t&& Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY) === winding) {\n\t\t\t\t\totherPoly.length = 0;\n\t\t\t\t\totherIndices.length = 0;\n\t\t\t\t\tpolygon.push(x3, y3);\n\t\t\t\t\tpolygonIndices.push(otherLastIndex);\n\t\t\t\t\tlastIndex = otherLastIndex;\n\t\t\t\t\tprevPrevX = prevX;\n\t\t\t\t\tprevPrevY = prevY;\n\t\t\t\t\tprevX = x3;\n\t\t\t\t\tprevY = y3;\n\t\t\t\t\tii = -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove empty polygons from the merge step above.\n\t\tfor (let i = convexPolygons.length - 1; i >= 0; i--) {\n\t\t\tpolygon = convexPolygons[i];\n\t\t\tif (polygon.length === 0) {\n\t\t\t\tconvexPolygons.splice(i, 1);\n\t\t\t\tthis.polygonPool.free(polygon);\n\t\t\t\tpolygonIndices = convexPolygonsIndices[i]\n\t\t\t\tconvexPolygonsIndices.splice(i, 1)\n\t\t\t\tthis.polygonIndicesPool.free(polygonIndices);\n\t\t\t} else\n\t\t\t\tpolygon.push(polygon[0], polygon[1]);\n\t\t}\n\n\t\treturn convexPolygons;\n\t}\n\n\tprivate static isConcave (index: number, vertexCount: number, vertices: NumberArrayLike, indices: NumberArrayLike): boolean {\n\t\tconst previous = indices[index > 0 ? index - 1 : vertexCount - 1] << 1;\n\t\tconst current = indices[index] << 1;\n\t\tconst next = indices[index + 1 < vertexCount ? index + 1 : 0] << 1;\n\t\treturn !Triangulator.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next],\n\t\t\tvertices[next + 1]);\n\t}\n\n\tprivate static positiveArea (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): boolean {\n\t\treturn p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n\t}\n\n\tprivate static winding (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): number {\n\t\treturn p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0 ? 1 : -1;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport type { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { Triangulator } from \"./Triangulator.js\";\nimport { type Color, type NumberArrayLike, Utils } from \"./Utils.js\";\n\nexport class SkeletonClipping {\n\tprivate triangulator: Triangulator | null = null;\n\tprivate clippingPolygon = [] as number[];\n\tprivate clippingPolygons: number[][] = [];\n\tprivate clipOutput = [] as number[];\n\tclippedVertices = [] as number[];\n\n\t/** An empty array unless {@link clipTrianglesUnpacked} was used. **/\n\tclippedUVs = [] as number[];\n\n\tclippedTriangles = [] as number[];\n\tinverseVertices = [] as number[];\n\n\t_clippedVerticesTyped: Float32Array = new Float32Array(1024);\n\t_clippedUVsTyped: Float32Array = new Float32Array(1024);\n\t_clippedTrianglesTyped: Uint16Array = new Uint16Array(1024);\n\tclippedVerticesTyped: Float32Array = new Float32Array(0);\n\tclippedUVsTyped: Float32Array = new Float32Array(0);\n\tclippedTrianglesTyped: Uint16Array = new Uint16Array(0);\n\tclippedVerticesLength = 0;\n\tclippedUVsLength = 0;\n\tclippedTrianglesLength = 0;\n\n\tprivate scratch = [] as number[];\n\tprivate inverse = false;\n\n\tprivate clipAttachment: ClippingAttachment | null = null;\n\n\tclipStart (skeleton: Skeleton, slot: Slot, clip: ClippingAttachment): void {\n\t\tif (this.clipAttachment) return;\n\t\tconst n = clip.worldVerticesLength;\n\t\tthis.clipAttachment = clip;\n\t\tthis.inverse = clip.inverse;\n\n\t\tconst vertices = Utils.setArraySize(this.clippingPolygon, n);\n\t\tclip.computeWorldVertices(skeleton, slot, 0, n, vertices, 0, 2);\n\t\tconst clippingPolygon = this.clippingPolygon;\n\t\tconst convex = this.makeClockwise(clippingPolygon);\n\n\t\tif (convex || this.inverse || clip.convex) {\n\t\t\tif (!convex) this.makeConvex(clippingPolygon);\n\t\t\tthis.clippingPolygon.push(clippingPolygon[0], clippingPolygon[1]);\n\t\t\tthis.clippingPolygons.push(clippingPolygon);\n\t\t} else {\n\t\t\tif (this.triangulator === null) this.triangulator = new Triangulator();\n\t\t\tthis.clippingPolygons.push(...this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)));\n\t\t}\n\t}\n\n\tclipEnd (slot?: Slot) {\n\t\tif (!this.clipAttachment) return;\n\t\tif (slot && this.clipAttachment.endSlot !== slot.data) return;\n\t\tthis.clipAttachment = null;\n\t\tthis.clippingPolygons.length = 0;\n\t}\n\n\tisClipping (): boolean {\n\t\treturn this.clipAttachment != null;\n\t}\n\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): boolean;\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number,\n\t\tuvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean, stride: number): boolean;\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number,\n\t\tuvs?: NumberArrayLike, light?: Color, dark?: Color, twoColor?: boolean, stride?: number): boolean {\n\n\t\treturn (uvs && light && dark && typeof twoColor === 'boolean' && typeof stride === 'number')\n\t\t\t? this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor, stride)\n\t\t\t: this.clipTrianglesNoRender(vertices, triangles, trianglesLength);\n\t}\n\n\tprivate clipTrianglesNoRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): boolean {\n\t\tconst clippedVertices = this.clippedVertices;\n\t\tclippedVertices.length = 0;\n\t\tconst clippedTriangles = this.clippedTriangles;\n\t\tclippedTriangles.length = 0;\n\t\tlet index = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet t = triangles[i] << 1;\n\t\t\t\tconst x1 = vertices[t], y1 = vertices[t + 1];\n\t\t\t\tt = triangles[i + 1] << 1;\n\t\t\t\tconst x2 = vertices[t], y2 = vertices[t + 1];\n\t\t\t\tt = triangles[i + 2] << 1;\n\t\t\t\tconst x3 = vertices[t], y3 = vertices[t + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0, nn = this.inverseVertices.length; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tlet vertexCount = polygonSize >> 1, s = clippedVertices.length;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + polygonSize);\n\t\t\t\t\tUtils.arrayCopy(iv, offset, cv, s, polygonSize);\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2));\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = polygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i] << 1;\n\t\t\tconst x1 = vertices[t], y1 = vertices[t + 1];\n\t\t\tt = triangles[i + 1] << 1;\n\t\t\tconst x2 = vertices[t], y2 = vertices[t + 1];\n\t\t\tt = triangles[i + 2] << 1;\n\t\t\tconst x3 = vertices[t], y3 = vertices[t + 1];\n\t\t\tfor (let p = 0; p < polygonsCount; p++) {\n\t\t\t\tlet s = clippedVertices.length;\n\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) {\n\t\t\t\t\tclipOutputItems = this.clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + clipOutputLength);\n\t\t\t\t\tUtils.arrayCopy(clipOutputItems, 0, cv, s, clipOutputLength);\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\tfor (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount;\n\t\t\t\t} else {\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + 3 * 2);\n\t\t\t\t\tcv[s] = x1;\n\t\t\t\t\tcv[s + 1] = y1;\n\t\t\t\t\tcv[s + 2] = x2;\n\t\t\t\t\tcv[s + 3] = y2;\n\t\t\t\t\tcv[s + 4] = x3;\n\t\t\t\t\tcv[s + 5] = y3;\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clipOutputItems != null;\n\t}\n\n\tprivate clipTrianglesRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color,\n\t\ttwoColor: boolean, stride: number): boolean {\n\t\tconst clippedVertices = this.clippedVertices;\n\t\tclippedVertices.length = 0;\n\t\tconst clippedTriangles = this.clippedTriangles;\n\t\tclippedTriangles.length = 0;\n\t\tlet index = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet t0 = triangles[i], t1 = triangles[i + 1], t2 = triangles[i + 2];\n\t\t\t\tconst x1 = vertices[t0 * stride], y1 = vertices[t0 * stride + 1];\n\t\t\t\tconst x2 = vertices[t1 * stride], y2 = vertices[t1 * stride + 1];\n\t\t\t\tconst x3 = vertices[t2 * stride], y3 = vertices[t2 * stride + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\t\t\t\tconst nn = this.inverseVertices.length;\n\t\t\t\tif (nn === 0) continue;\n\n\t\t\t\tconst u1 = uvs[t0 <<= 1], v1 = uvs[t0 + 1];\n\t\t\t\tconst u2 = uvs[t1 <<= 1], v2 = uvs[t1 + 1];\n\t\t\t\tconst u3 = uvs[t2 <<= 1], v3 = uvs[t2 + 1];\n\t\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tconst vertexCount = polygonSize >> 1;\n\n\t\t\t\t\tlet s = clippedVertices.length;\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + vertexCount * stride);\n\t\t\t\t\tfor (let ii = 0; ii < polygonSize; ii += 2, s += stride) {\n\t\t\t\t\t\tconst x = iv[offset + ii], y = iv[offset + ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcv[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcv[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\t\tcv[s + 11] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2));\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = this.clippingPolygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i];\n\t\t\tconst x1 = vertices[t * stride], y1 = vertices[t * stride + 1];\n\t\t\tconst u1 = uvs[t << 1], v1 = uvs[(t << 1) + 1];\n\t\t\tt = triangles[i + 1];\n\t\t\tconst x2 = vertices[t * stride], y2 = vertices[t * stride + 1];\n\t\t\tconst u2 = uvs[t << 1], v2 = uvs[(t << 1) + 1];\n\t\t\tt = triangles[i + 2];\n\t\t\tconst x3 = vertices[t * stride], y3 = vertices[t * stride + 1];\n\t\t\tconst u3 = uvs[t << 1], v3 = uvs[(t << 1) + 1];\n\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\tfor (let p = 0; p < polygonsCount; p++) {\n\t\t\t\tlet s = clippedVertices.length;\n\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) {\n\t\t\t\t\tclipOutputItems = this.clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + clipOutputCount * stride);\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += stride) {\n\t\t\t\t\t\tconst x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcv[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcv[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\t\tcv[s + 11] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\tfor (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount + 1;\n\t\t\t\t} else {\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + 3 * stride);\n\t\t\t\t\tcv[s] = x1;\n\t\t\t\t\tcv[s + 1] = y1;\n\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\tif (!twoColor) {\n\t\t\t\t\t\tcv[s + 6] = u1;\n\t\t\t\t\t\tcv[s + 7] = v1;\n\n\t\t\t\t\t\tcv[s + 8] = x2;\n\t\t\t\t\t\tcv[s + 9] = y2;\n\t\t\t\t\t\tcv[s + 10] = light.r;\n\t\t\t\t\t\tcv[s + 11] = light.g;\n\t\t\t\t\t\tcv[s + 12] = light.b;\n\t\t\t\t\t\tcv[s + 13] = light.a;\n\t\t\t\t\t\tcv[s + 14] = u2;\n\t\t\t\t\t\tcv[s + 15] = v2;\n\n\t\t\t\t\t\tcv[s + 16] = x3;\n\t\t\t\t\t\tcv[s + 17] = y3;\n\t\t\t\t\t\tcv[s + 18] = light.r;\n\t\t\t\t\t\tcv[s + 19] = light.g;\n\t\t\t\t\t\tcv[s + 20] = light.b;\n\t\t\t\t\t\tcv[s + 21] = light.a;\n\t\t\t\t\t\tcv[s + 22] = u3;\n\t\t\t\t\t\tcv[s + 23] = v3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcv[s + 6] = u1;\n\t\t\t\t\t\tcv[s + 7] = v1;\n\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\tcv[s + 11] = dark.a;\n\n\t\t\t\t\t\tcv[s + 12] = x2;\n\t\t\t\t\t\tcv[s + 13] = y2;\n\t\t\t\t\t\tcv[s + 14] = light.r;\n\t\t\t\t\t\tcv[s + 15] = light.g;\n\t\t\t\t\t\tcv[s + 16] = light.b;\n\t\t\t\t\t\tcv[s + 17] = light.a;\n\t\t\t\t\t\tcv[s + 18] = u2;\n\t\t\t\t\t\tcv[s + 19] = v2;\n\t\t\t\t\t\tcv[s + 20] = dark.r;\n\t\t\t\t\t\tcv[s + 21] = dark.g;\n\t\t\t\t\t\tcv[s + 22] = dark.b;\n\t\t\t\t\t\tcv[s + 23] = dark.a;\n\n\t\t\t\t\t\tcv[s + 24] = x3;\n\t\t\t\t\t\tcv[s + 25] = y3;\n\t\t\t\t\t\tcv[s + 26] = light.r;\n\t\t\t\t\t\tcv[s + 27] = light.g;\n\t\t\t\t\t\tcv[s + 28] = light.b;\n\t\t\t\t\t\tcv[s + 29] = light.a;\n\t\t\t\t\t\tcv[s + 30] = u3;\n\t\t\t\t\t\tcv[s + 31] = v3;\n\t\t\t\t\t\tcv[s + 32] = dark.r;\n\t\t\t\t\t\tcv[s + 33] = dark.g;\n\t\t\t\t\t\tcv[s + 34] = dark.b;\n\t\t\t\t\t\tcv[s + 35] = dark.a;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clipOutputItems != null;\n\t}\n\n\tpublic clipTrianglesUnpacked (vertices: NumberArrayLike, vertexStart: number, triangles: NumberArrayLike | Uint16Array, trianglesLength: number, uvs: NumberArrayLike, stride = 2): boolean {\n\t\tlet clippedVertices = this._clippedVerticesTyped;\n\t\tlet clippedUVs = this._clippedUVsTyped;\n\t\tlet clippedTriangles = this._clippedTrianglesTyped;\n\t\tlet index = 0;\n\t\tthis.clippedVerticesLength = 0;\n\t\tthis.clippedUVsLength = 0;\n\t\tthis.clippedTrianglesLength = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet v = triangles[i] * stride;\n\t\t\t\tconst x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1];\n\t\t\t\tlet uv = triangles[i] << 1;\n\t\t\t\tconst u1 = uvs[uv], v1 = uvs[uv + 1];\n\t\t\t\tv = triangles[i + 1] * stride;\n\t\t\t\tconst x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1];\n\t\t\t\tuv = triangles[i + 1] << 1;\n\t\t\t\tconst u2 = uvs[uv], v2 = uvs[uv + 1];\n\t\t\t\tv = triangles[i + 2] * stride;\n\t\t\t\tconst x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1];\n\t\t\t\tuv = triangles[i + 2] << 1;\n\t\t\t\tconst u3 = uvs[uv], v3 = uvs[uv + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\t\t\t\tconst nn = this.inverseVertices.length;\n\t\t\t\tif (nn === 0) continue;\n\n\t\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tconst vertexCount = polygonSize >> 1;\n\n\t\t\t\t\tlet s = this.clippedVerticesLength;\n\t\t\t\t\tconst newLength = s + vertexCount * stride;\n\t\t\t\t\tconst newUVLength = this.clippedUVsLength + vertexCount * 2;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tif (clippedUVs.length < newUVLength) {\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array(newUVLength * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\t\t\t\t\tthis.clippedUVsLength = newUVLength;\n\n\t\t\t\t\tconst cv = this._clippedVerticesTyped;\n\t\t\t\t\tconst cu = this._clippedUVsTyped;\n\t\t\t\t\tlet uvIndex = newUVLength - vertexCount * 2;\n\t\t\t\t\tfor (let ii = 0; ii < polygonSize; ii += 2, s += stride, uvIndex += 2) {\n\t\t\t\t\t\tconst x = iv[offset + ii], y = iv[offset + ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcu[uvIndex] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcu[uvIndex + 1] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tconst newLengthTriangles = s + 3 * (vertexCount - 2);\n\t\t\t\t\tif (clippedTriangles.length < newLengthTriangles) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedTrianglesLength = newLengthTriangles;\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.clippedVerticesTyped = this._clippedVerticesTyped.subarray(0, this.clippedVerticesLength);\n\t\t\tthis.clippedUVsTyped = this._clippedUVsTyped.subarray(0, this.clippedUVsLength);\n\t\t\tthis.clippedTrianglesTyped = this._clippedTrianglesTyped.subarray(0, this.clippedTrianglesLength);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = this.clippingPolygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i];\n\t\t\tlet v = t * stride;\n\t\t\tconst x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1];\n\t\t\tlet uv = t << 1;\n\t\t\tconst u1 = uvs[uv], v1 = uvs[uv + 1];\n\t\t\tt = triangles[i + 1];\n\t\t\tv = t * stride;\n\t\t\tconst x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1];\n\t\t\tuv = t << 1;\n\t\t\tconst u2 = uvs[uv], v2 = uvs[uv + 1];\n\t\t\tt = triangles[i + 2];\n\t\t\tv = t * stride;\n\t\t\tconst x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1];\n\t\t\tuv = t << 1;\n\t\t\tconst u3 = uvs[uv], v3 = uvs[uv + 1];\n\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\n\t\t\tfor (let p = 0; p < polygonsCount; p++) {\n\t\t\t\tlet s = this.clippedVerticesLength;\n\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) {\n\t\t\t\t\tclipOutputItems = clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst newLength = s + clipOutputCount * stride;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array((this.clippedUVsLength + clipOutputCount * 2) * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tconst cv = clippedVertices;\n\t\t\t\t\tconst cu = clippedUVs;\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\n\t\t\t\t\tlet uvIndex = this.clippedUVsLength;\n\t\t\t\t\tthis.clippedUVsLength = uvIndex + clipOutputCount * 2;\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += stride, uvIndex += 2) {\n\t\t\t\t\t\tconst x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcu[uvIndex] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcu[uvIndex + 1] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tconst newLengthTriangles = s + 3 * (clipOutputCount - 2)\n\t\t\t\t\tif (clippedTriangles.length < newLengthTriangles) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedTrianglesLength = newLengthTriangles;\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\tfor (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount + 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet newLength = s + 3 * stride;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tclippedVertices[s] = x1;\n\t\t\t\t\tclippedVertices[s + 1] = y1;\n\t\t\t\t\tclippedVertices[s + stride] = x2;\n\t\t\t\t\tclippedVertices[s + stride + 1] = y2;\n\t\t\t\t\tclippedVertices[s + stride * 2] = x3;\n\t\t\t\t\tclippedVertices[s + stride * 2 + 1] = y3;\n\n\t\t\t\t\tconst uvLength = this.clippedUVsLength + 3 * 2;\n\t\t\t\t\tif (clippedUVs.length < uvLength) {\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array(uvLength * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tconst uvIndex = this.clippedUVsLength;\n\t\t\t\t\tclippedUVs[uvIndex] = u1;\n\t\t\t\t\tclippedUVs[uvIndex + 1] = v1;\n\t\t\t\t\tclippedUVs[uvIndex + 2] = u2;\n\t\t\t\t\tclippedUVs[uvIndex + 3] = v2;\n\t\t\t\t\tclippedUVs[uvIndex + 4] = u3;\n\t\t\t\t\tclippedUVs[uvIndex + 5] = v3;\n\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\t\t\t\t\tthis.clippedUVsLength = uvLength;\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tnewLength = s + 3;\n\t\t\t\t\tif (clippedTriangles.length < newLength) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\n\t\t\t\t\tthis.clippedTrianglesLength = newLength;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.clippedVerticesTyped = this._clippedVerticesTyped.subarray(0, this.clippedVerticesLength)\n\t\tthis.clippedUVsTyped = this._clippedUVsTyped.subarray(0, this.clippedUVsLength)\n\t\tthis.clippedTrianglesTyped = this._clippedTrianglesTyped.subarray(0, this.clippedTrianglesLength)\n\t\treturn clipOutputItems !== null;\n\t}\n\n\tprivate clip (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, polygon: number[]) {\n\t\tconst originalOutput = this.clipOutput;\n\t\tlet clipped = false;\n\n\t\t// Avoid copy at the end.\n\t\tlet input: number[], output: number[];\n\t\tif (polygon.length % 4 >= 2) {\n\t\t\tinput = this.clipOutput;\n\t\t\toutput = this.scratch;\n\t\t} else {\n\t\t\tinput = this.scratch;\n\t\t\toutput = this.clipOutput;\n\t\t}\n\n\t\tconst v = polygon;\n\t\tinput.length = 8;\n\t\tconst iv = input;\n\t\tiv[0] = x1;\n\t\tiv[1] = y1;\n\t\tiv[2] = x2;\n\t\tiv[3] = y2;\n\t\tiv[4] = x3;\n\t\tiv[5] = y3;\n\t\tiv[6] = x1;\n\t\tiv[7] = y1;\n\t\toutput.length = 0;\n\n\t\tconst last = polygon.length - 4;\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tconst edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3];\n\t\t\tconst outputStart = output.length;\n\t\t\tconst iv = input;\n\t\t\tfor (let ii = 0, nn = input.length - 2; ii < nn;) {\n\t\t\t\tx1 = iv[ii];\n\t\t\t\ty1 = iv[ii + 1];\n\t\t\t\tii += 2;\n\t\t\t\tx2 = iv[ii];\n\t\t\t\ty2 = iv[ii + 1];\n\t\t\t\tconst s2 = ey * (edgeX - x2) > ex * (edgeY - y2);\n\t\t\t\tconst s1 = ey * (edgeX - x1) - ex * (edgeY - y1);\n\t\t\t\tif (s1 > 0) {\n\t\t\t\t\tif (s2) // v1 in, v2 in\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\telse { // v1 in, v2 out\n\t\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\t\toutput.push(x1 + ix * t, y1 + iy * t);\n\t\t\t\t\t\t\tclipped = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\t}\n\t\t\t\t} else if (s2) { // v1 out, v2 in\n\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\toutput.push(x1 + ix * t, y1 + iy * t, x2, y2);\n\t\t\t\t\t\tclipped = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t} else // v1 out, v2 out\n\t\t\t\t\tclipped = true;\n\t\t\t}\n\n\t\t\tif (outputStart === output.length) { // All outside.\n\t\t\t\toriginalOutput.length = 0;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\toutput.push(output[0], output[1]);\n\n\t\t\tif (i === last) break;\n\t\t\tconst temp = output;\n\t\t\toutput = input;\n\t\t\toutput.length = 0;\n\t\t\tinput = temp;\n\t\t}\n\n\t\tif (originalOutput !== output) {\n\t\t\toriginalOutput.length = 0;\n\t\t\tfor (let i = 0, n = output.length - 2; i < n; i++)\n\t\t\t\toriginalOutput[i] = output[i];\n\t\t} else\n\t\t\toriginalOutput.length = originalOutput.length - 2;\n\n\t\treturn clipped;\n\t}\n\n\tprivate clipInverse (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, polygon: number[]): void {\n\t\tthis.inverseVertices.length = 0;\n\t\tconst vLast = polygon.length - 4;\n\n\t\tlet input: number[], output: number[]; // Avoid copy at the end.\n\t\tif (polygon.length % 4 >= 2) {\n\t\t\tinput = this.clipOutput;\n\t\t\toutput = this.scratch;\n\t\t} else {\n\t\t\tinput = this.scratch;\n\t\t\toutput = this.clipOutput;\n\t\t}\n\n\t\tinput.length = 8;\n\t\tlet v = polygon, iv = input;\n\t\tiv[0] = x1;\n\t\tiv[1] = y1;\n\t\tiv[2] = x2;\n\t\tiv[3] = y2;\n\t\tiv[4] = x3;\n\t\tiv[5] = y3;\n\t\tiv[6] = x1;\n\t\tiv[7] = y1;\n\t\toutput.length = 0;\n\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tconst edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3];\n\t\t\tconst outputStart = output.length, fragmentStart = this.inverseVertices.length;\n\t\t\tthis.inverseVertices.push(0);\n\t\t\tiv = input;\n\t\t\tfor (let ii = 0, nn = input.length - 2; ii < nn;) {\n\t\t\t\tx1 = iv[ii];\n\t\t\t\ty1 = iv[ii + 1];\n\t\t\t\tii += 2;\n\t\t\t\tx2 = iv[ii];\n\t\t\t\ty2 = iv[ii + 1];\n\t\t\t\tconst s2 = ey * (edgeX - x2) > ex * (edgeY - y2);\n\t\t\t\tconst s1 = ey * (edgeX - x1) - ex * (edgeY - y1);\n\t\t\t\tif (s1 > 0) {\n\t\t\t\t\tif (s2) // v1 in, v2 in\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\telse {\n\t\t\t\t\t\t// v1 in, v2 out\n\t\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\t\tconst cx = x1 + ix * t, cy = y1 + iy * t;\n\t\t\t\t\t\t\toutput.push(cx, cy);\n\t\t\t\t\t\t\tthis.inverseVertices.push(cx, cy, x2, y2);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\t}\n\t\t\t\t} else if (s2) { // v1 out, v2 in\n\t\t\t\t\tconst dx = x2 - x1, dy = y2 - y1, t = s1 / (dx * ey - dy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\tconst cx = x1 + dx * t, cy = y1 + dy * t;\n\t\t\t\t\t\tthis.inverseVertices.push(cx, cy);\n\t\t\t\t\t\toutput.push(cx, cy, x2, y2);\n\t\t\t\t\t} else\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t} else // v1 out, v2 out\n\t\t\t\t\tthis.inverseVertices.push(x2, y2);\n\t\t\t}\n\n\t\t\tconst fragmentSize = this.inverseVertices.length - fragmentStart - 1;\n\t\t\tif (fragmentSize >= 6)\n\t\t\t\tthis.inverseVertices[fragmentStart] = fragmentSize;\n\t\t\telse\n\t\t\t\tthis.inverseVertices.length = fragmentStart; // Degenerate.\n\n\t\t\tif (outputStart === output.length) break; // All outside.\n\n\t\t\toutput.push(output[0], output[1]);\n\n\t\t\tif (i === vLast) break;\n\t\t\tconst temp = output;\n\t\t\toutput = input;\n\t\t\toutput.length = 0;\n\t\t\tinput = temp;\n\t\t}\n\t}\n\n\tprivate makeClockwise (polygon: number[]): boolean {\n\t\tconst v = polygon;\n\t\tconst n = polygon.length;\n\t\tlet noCW = true, noCCW = true;\n\t\tlet area = 0, prevX = v[n - 2], prevY = v[n - 1], currX = v[0], currY = v[1];\n\t\tfor (let i = 2; i < n; i += 2) {\n\t\t\tconst nextX = v[i], nextY = v[i + 1];\n\t\t\tarea += currX * nextY - nextX * currY;\n\t\t\tconst cross = (currX - prevX) * (nextY - currY) - (currY - prevY) * (nextX - currX);\n\t\t\tnoCCW = noCCW && cross <= 0;\n\t\t\tnoCW = noCW && cross >= 0;\n\t\t\tprevX = currX;\n\t\t\tprevY = currY;\n\t\t\tcurrX = nextX;\n\t\t\tcurrY = nextY;\n\t\t}\n\t\tarea += currX * v[1] - v[0] * currY;\n\t\tconst cross = (currX - prevX) * (v[1] - currY) - (currY - prevY) * (v[0] - currX);\n\t\tnoCCW = noCCW && cross <= 0;\n\t\tnoCW = noCW && cross >= 0;\n\t\tif (area >= 0) {\n\t\t\tfor (let i = 0, lastX = n - 2, half = n >> 1; i < half; i += 2) {\n\t\t\t\tconst x = v[i], y = v[i + 1];\n\t\t\t\tconst other = lastX - i;\n\t\t\t\tv[i] = v[other];\n\t\t\t\tv[i + 1] = v[other + 1];\n\t\t\t\tv[other] = x;\n\t\t\t\tv[other + 1] = y;\n\t\t\t}\n\t\t\treturn noCW;\n\t\t}\n\t\treturn noCCW;\n\t}\n\n\tprivate makeConvex (polygon: number[]): void {\n\t\tconst n = polygon.length;\n\t\tconst v = polygon;\n\t\tthis.clipOutput.length = n;\n\t\tconst sorted = this.clipOutput;\n\t\tsorted[0] = v[0];\n\t\tsorted[1] = v[1];\n\t\tfor (let i = 2; i < n; i += 2) {\n\t\t\tconst x = v[i], y = v[i + 1];\n\t\t\tlet p = i - 2;\n\t\t\tfor (; p >= 0 && (sorted[p] > x || (sorted[p] === x && sorted[p + 1] > y)); p -= 2) {\n\t\t\t\tsorted[p + 2] = sorted[p];\n\t\t\t\tsorted[p + 3] = sorted[p + 1];\n\t\t\t}\n\t\t\tsorted[p + 2] = x;\n\t\t\tsorted[p + 3] = y;\n\t\t}\n\t\tv[0] = sorted[0];\n\t\tv[1] = sorted[1];\n\t\tv[2] = sorted[2];\n\t\tv[3] = sorted[3];\n\t\tlet s = 4;\n\t\tfor (let i = 4; i < n; i += 2, s += 2) {\n\t\t\tconst x = sorted[i], y = sorted[i + 1];\n\t\t\twhile ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) {\n\t\t\t\ts -= 2;\n\t\t\t\tif (s === 2) break;\n\t\t\t}\n\t\t\tv[s] = x;\n\t\t\tv[s + 1] = y;\n\t\t}\n\t\tv[s] = sorted[n - 4];\n\t\tv[s + 1] = sorted[n - 3];\n\t\tconst t = s;\n\t\ts += 2;\n\t\tfor (let i = n - 6; i >= 0; i -= 2, s += 2) {\n\t\t\tconst x = sorted[i], y = sorted[i + 1];\n\t\t\twhile ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) {\n\t\t\t\ts -= 2;\n\t\t\t\tif (s === t) break;\n\t\t\t}\n\t\t\tv[s] = x;\n\t\t\tv[s + 1] = y;\n\t\t}\n\t\tpolygon.length = s - 2;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { AlphaTimeline, Animation, AttachmentTimeline, type BoneTimeline2, type CurveTimeline, type CurveTimeline1, DeformTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, InheritTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintMixTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintWindTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, SliderMixTimeline, SliderTimeline, type Timeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline } from \"./Animation.js\";\nimport type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport type { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Sequence, SequenceMode } from \"./attachments/Sequence.js\";\nimport { BoneData, Inherit } from \"./BoneData.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Event } from \"./Event.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, RotateMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport { BlendMode, SlotData } from \"./SlotData.js\";\nimport { type FromProperty, FromRotate, FromScaleX, FromScaleY, FromShearY, FromX, FromY, type ToProperty, ToRotate, ToScaleX, ToScaleY, ToShearY, ToX, ToY, TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Color, type NumberArrayLike, Utils } from \"./Utils.js\";\n\n/** Loads skeleton data in the Spine JSON format.\n *\n * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and\n * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine\n * Runtimes Guide. */\nexport class SkeletonJson {\n\tattachmentLoader: AttachmentLoader;\n\n\t/** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n\t * runtime than were used in Spine.\n\t *\n\t * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n\tscale = 1;\n\tprivate readonly linkedMeshes = [] as LinkedMesh[];\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadSkeletonData (json: string | any): SkeletonData {\n\t\tconst scale = this.scale;\n\t\tconst skeletonData = new SkeletonData();\n\t\tconst root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n\n\t\t// Skeleton\n\t\tconst skeletonMap = root.skeleton;\n\t\tif (skeletonMap) {\n\t\t\tskeletonData.hash = skeletonMap.hash;\n\t\t\tskeletonData.version = skeletonMap.spine;\n\t\t\tskeletonData.x = skeletonMap.x;\n\t\t\tskeletonData.y = skeletonMap.y;\n\t\t\tskeletonData.width = skeletonMap.width;\n\t\t\tskeletonData.height = skeletonMap.height;\n\t\t\tskeletonData.referenceScale = getValue(skeletonMap, \"referenceScale\", 100) * scale;\n\t\t\tskeletonData.fps = skeletonMap.fps;\n\t\t\tskeletonData.imagesPath = skeletonMap.images ?? null;\n\t\t\tskeletonData.audioPath = skeletonMap.audio ?? null;\n\t\t}\n\n\t\t// Bones\n\t\tif (root.bones) {\n\t\t\tfor (let i = 0; i < root.bones.length; i++) {\n\t\t\t\tconst boneMap = root.bones[i];\n\n\t\t\t\tlet parent: BoneData | null = null;\n\t\t\t\tconst parentName: string = getValue(boneMap, \"parent\", null);\n\t\t\t\tif (parentName) parent = skeletonData.findBone(parentName);\n\t\t\t\tconst data = new BoneData(skeletonData.bones.length, boneMap.name, parent);\n\t\t\t\tdata.length = getValue(boneMap, \"length\", 0) * scale;\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tsetup.x = getValue(boneMap, \"x\", 0) * scale;\n\t\t\t\tsetup.y = getValue(boneMap, \"y\", 0) * scale;\n\t\t\t\tsetup.rotation = getValue(boneMap, \"rotation\", 0);\n\t\t\t\tsetup.scaleX = getValue(boneMap, \"scaleX\", 1);\n\t\t\t\tsetup.scaleY = getValue(boneMap, \"scaleY\", 1);\n\t\t\t\tsetup.shearX = getValue(boneMap, \"shearX\", 0);\n\t\t\t\tsetup.shearY = getValue(boneMap, \"shearY\", 0);\n\t\t\t\tsetup.inherit = Utils.enumValue(Inherit, getValue(boneMap, \"inherit\", \"Normal\"));\n\t\t\t\tdata.skinRequired = getValue(boneMap, \"skin\", false);\n\n\t\t\t\tconst color = getValue(boneMap, \"color\", null);\n\t\t\t\tif (color) data.color.setFromString(color);\n\t\t\t\tdata.icon = getValue(boneMap, \"icon\", undefined);\n\t\t\t\tdata.iconSize = getValue(boneMap, \"iconSize\", 1);\n\t\t\t\tdata.iconRotation = getValue(boneMap, \"iconRotation\", 0);\n\n\t\t\t\tskeletonData.bones.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Slots.\n\t\tif (root.slots) {\n\t\t\tfor (let i = 0; i < root.slots.length; i++) {\n\t\t\t\tconst slotMap = root.slots[i];\n\t\t\t\tconst slotName = slotMap.name;\n\n\t\t\t\tconst boneData = skeletonData.findBone(slotMap.bone);\n\t\t\t\tif (!boneData) throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotName}`);\n\t\t\t\tconst data = new SlotData(skeletonData.slots.length, slotName, boneData);\n\n\t\t\t\tconst color: string = getValue(slotMap, \"color\", null);\n\t\t\t\tif (color) data.setupPose.color.setFromString(color);\n\n\t\t\t\tconst dark: string = getValue(slotMap, \"dark\", null);\n\t\t\t\tif (dark) data.setupPose.darkColor = Color.fromString(dark);\n\n\t\t\t\tdata.attachmentName = getValue(slotMap, \"attachment\", null);\n\t\t\t\tdata.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, \"blend\", \"normal\"));\n\t\t\t\tdata.visible = getValue(slotMap, \"visible\", true);\n\t\t\t\tskeletonData.slots.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Constraints.\n\t\tif (root.constraints) {\n\t\t\tfor (const constraintMap of root.constraints) {\n\t\t\t\tconst name = constraintMap.name;\n\t\t\t\tconst skinRequired = getValue(constraintMap, \"skin\", false);\n\t\t\t\tswitch (getValue(constraintMap, \"type\", false)) {\n\t\t\t\t\tcase \"ik\": {\n\t\t\t\t\t\tconst data = new IkConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(constraintMap.bones[ii]);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst targetName = constraintMap.target;\n\t\t\t\t\t\tconst target = skeletonData.findBone(targetName);\n\t\t\t\t\t\tif (!target) throw new Error(`Couldn't find target bone ${targetName} for IK constraint ${name}.`);\n\t\t\t\t\t\tdata.target = target;\n\n\t\t\t\t\t\tconst scaleY = getValue(constraintMap, \"scaleY\", null);\n\t\t\t\t\t\tif (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY);\n\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\t\t\tsetup.softness = getValue(constraintMap, \"softness\", 0) * scale;\n\t\t\t\t\t\tsetup.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n\t\t\t\t\t\tsetup.compress = getValue(constraintMap, \"compress\", false);\n\t\t\t\t\t\tsetup.stretch = getValue(constraintMap, \"stretch\", false);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"transform\": {\n\t\t\t\t\t\tconst data = new TransformConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst boneName = constraintMap.bones[ii];\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst sourceName: string = constraintMap.source;\n\t\t\t\t\t\tconst source = skeletonData.findBone(sourceName);\n\t\t\t\t\t\tif (!source) throw new Error(`Couldn't find source bone ${sourceName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\t\t\tdata.source = source;\n\n\t\t\t\t\t\tdata.localSource = getValue(constraintMap, \"localSource\", false);\n\t\t\t\t\t\tdata.localTarget = getValue(constraintMap, \"localTarget\", false);\n\t\t\t\t\t\tdata.additive = getValue(constraintMap, \"additive\", false);\n\t\t\t\t\t\tdata.clamp = getValue(constraintMap, \"clamp\", false);\n\n\t\t\t\t\t\tlet rotate = false, x = false, y = false, scaleX = false, scaleY = false, shearY = false;\n\t\t\t\t\t\tconst fromEntries = Object.entries(getValue(constraintMap, \"properties\", {})) as [string, object][];\n\t\t\t\t\t\tfor (const [name, fromEntry] of fromEntries) {\n\t\t\t\t\t\t\tconst from = this.fromProperty(name);\n\t\t\t\t\t\t\tconst fromScale = this.propertyScale(name, scale);\n\t\t\t\t\t\t\tfrom.offset = getValue(fromEntry, \"offset\", 0) * fromScale;\n\t\t\t\t\t\t\tconst toEntries = Object.entries(getValue(fromEntry, \"to\", {})) as [string, object][];\n\t\t\t\t\t\t\tfor (const [name, toEntry] of toEntries) {\n\t\t\t\t\t\t\t\tlet toScale = 1;\n\t\t\t\t\t\t\t\tlet to: ToProperty;\n\t\t\t\t\t\t\t\tswitch (name) {\n\t\t\t\t\t\t\t\t\tcase \"rotate\": {\n\t\t\t\t\t\t\t\t\t\trotate = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToRotate();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase \"x\": {\n\t\t\t\t\t\t\t\t\t\tx = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToX();\n\t\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase \"y\": {\n\t\t\t\t\t\t\t\t\t\ty = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToY();\n\t\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase \"scaleX\": {\n\t\t\t\t\t\t\t\t\t\tscaleX = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToScaleX();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase \"scaleY\": {\n\t\t\t\t\t\t\t\t\t\tscaleY = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToScaleY();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase \"shearY\": {\n\t\t\t\t\t\t\t\t\t\tshearY = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToShearY();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: throw new Error(`Invalid transform constraint to property: ${name}`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tto.offset = getValue(toEntry, \"offset\", 0) * toScale;\n\t\t\t\t\t\t\t\tto.max = getValue(toEntry, \"max\", 1) * toScale;\n\t\t\t\t\t\t\t\tto.scale = getValue(toEntry, \"scale\", 1) * toScale / fromScale;\n\t\t\t\t\t\t\t\tfrom.to.push(to);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (from.to.length > 0) data.properties.push(from);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.ROTATION] = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.X] = getValue(constraintMap, \"x\", 0) * scale;\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.Y] = getValue(constraintMap, \"y\", 0) * scale;\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SCALEX] = getValue(constraintMap, \"scaleX\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SCALEY] = getValue(constraintMap, \"scaleY\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SHEARY] = getValue(constraintMap, \"shearY\", 0);\n\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tif (rotate) setup.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\t\t\tif (x) setup.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\t\t\tif (y) setup.mixY = getValue(constraintMap, \"mixY\", setup.mixX);\n\t\t\t\t\t\tif (scaleX) setup.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n\t\t\t\t\t\tif (scaleY) setup.mixScaleY = getValue(constraintMap, \"mixScaleY\", setup.mixScaleX);\n\t\t\t\t\t\tif (shearY) setup.mixShearY = getValue(constraintMap, \"mixShearY\", 1);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"path\": {\n\t\t\t\t\t\tconst data = new PathConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst boneName = constraintMap.bones[ii];\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst slotName: string = constraintMap.slot;\n\t\t\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\t\t\tif (!slot) throw new Error(`Couldn't find slot ${slotName} for path constraint ${constraintMap.name}.`);\n\t\t\t\t\t\tdata.slot = slot;\n\n\t\t\t\t\t\tdata.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n\t\t\t\t\t\tdata.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n\t\t\t\t\t\tdata.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n\t\t\t\t\t\tdata.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.position = getValue(constraintMap, \"position\", 0);\n\t\t\t\t\t\tif (data.positionMode === PositionMode.Fixed) setup.position *= scale;\n\t\t\t\t\t\tsetup.spacing = getValue(constraintMap, \"spacing\", 0);\n\t\t\t\t\t\tif (data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed) setup.spacing *= scale;\n\t\t\t\t\t\tsetup.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\t\t\tsetup.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\t\t\tsetup.mixY = getValue(constraintMap, \"mixY\", setup.mixX);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"physics\": {\n\t\t\t\t\t\tconst data = new PhysicsConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tconst boneName: string = constraintMap.bone;\n\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (bone == null) throw new Error(`Physics bone not found: ${boneName}`);\n\t\t\t\t\t\tdata.bone = bone;\n\n\t\t\t\t\t\tdata.x = getValue(constraintMap, \"x\", 0);\n\t\t\t\t\t\tdata.y = getValue(constraintMap, \"y\", 0);\n\t\t\t\t\t\tdata.rotate = getValue(constraintMap, \"rotate\", 0);\n\t\t\t\t\t\tdata.scaleX = getValue(constraintMap, \"scaleX\", 0);\n\n\t\t\t\t\t\tconst scaleY = getValue(constraintMap, \"scaleY\", null);\n\t\t\t\t\t\tif (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY);\n\n\t\t\t\t\t\tdata.shearX = getValue(constraintMap, \"shearX\", 0);\n\t\t\t\t\t\tdata.limit = getValue(constraintMap, \"limit\", 5000) * scale;\n\t\t\t\t\t\tdata.step = 1 / getValue(constraintMap, \"fps\", 60);\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.inertia = getValue(constraintMap, \"inertia\", 0.5);\n\t\t\t\t\t\tsetup.strength = getValue(constraintMap, \"strength\", 100);\n\t\t\t\t\t\tsetup.damping = getValue(constraintMap, \"damping\", 0.85);\n\t\t\t\t\t\tsetup.massInverse = 1 / getValue(constraintMap, \"mass\", 1);\n\t\t\t\t\t\tsetup.wind = getValue(constraintMap, \"wind\", 0);\n\t\t\t\t\t\tsetup.gravity = getValue(constraintMap, \"gravity\", 0);\n\t\t\t\t\t\tsetup.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\t\t\tdata.inertiaGlobal = getValue(constraintMap, \"inertiaGlobal\", false);\n\t\t\t\t\t\tdata.strengthGlobal = getValue(constraintMap, \"strengthGlobal\", false);\n\t\t\t\t\t\tdata.dampingGlobal = getValue(constraintMap, \"dampingGlobal\", false);\n\t\t\t\t\t\tdata.massGlobal = getValue(constraintMap, \"massGlobal\", false);\n\t\t\t\t\t\tdata.windGlobal = getValue(constraintMap, \"windGlobal\", false);\n\t\t\t\t\t\tdata.gravityGlobal = getValue(constraintMap, \"gravityGlobal\", false);\n\t\t\t\t\t\tdata.mixGlobal = getValue(constraintMap, \"mixGlobal\", false);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"slider\": {\n\t\t\t\t\t\tconst data = new SliderData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tdata.additive = getValue(constraintMap, \"additive\", false);\n\t\t\t\t\t\tdata.loop = getValue(constraintMap, \"loop\", false);\n\t\t\t\t\t\tdata.setupPose.mix = getValue(constraintMap, \"mix\", 1);\n\n\t\t\t\t\t\tconst boneName: string = constraintMap.bone;\n\t\t\t\t\t\tif (boneName) {\n\t\t\t\t\t\t\tdata.bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!data.bone) throw new Error(`Slider bone not found: ${boneName}`);\n\t\t\t\t\t\t\tconst property = constraintMap.property;\n\t\t\t\t\t\t\tdata.property = this.fromProperty(property);\n\t\t\t\t\t\t\tconst propertyScale = this.propertyScale(property, scale);\n\t\t\t\t\t\t\tdata.property.offset = getValue(constraintMap, \"from\", 0) * propertyScale;\n\t\t\t\t\t\t\tdata.offset = getValue(constraintMap, \"to\", 0);\n\t\t\t\t\t\t\tdata.scale = getValue(constraintMap, \"scale\", 1) / propertyScale;\n\t\t\t\t\t\t\tdata.max = getValue(constraintMap, \"max\", 0);\n\t\t\t\t\t\t\tdata.local = getValue(constraintMap, \"local\", false);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tdata.setupPose.time = getValue(constraintMap, \"time\", 0);\n\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Skins.\n\t\tif (root.skins) {\n\t\t\tfor (let i = 0; i < root.skins.length; i++) {\n\t\t\t\tconst skinMap = root.skins[i]\n\t\t\t\tconst skin = new Skin(skinMap.name);\n\n\t\t\t\tif (skinMap.bones) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.bones.length; ii++) {\n\t\t\t\t\t\tconst boneName = skinMap.bones[ii];\n\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.bones.push(bone);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.ik) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.ik.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.ik[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, IkConstraintData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.transform) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.transform.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.transform[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, TransformConstraintData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.path) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.path.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.path[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PathConstraintData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.physics) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.physics.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.physics[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find physics constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.slider) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.slider.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.slider[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, SliderData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find slider constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const slotName in skinMap.attachments) {\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\t\tif (!slot) throw new Error(`Couldn't find skin slot ${slotName} for skin ${skinMap.name}.`);\n\t\t\t\t\tconst slotMap = skinMap.attachments[slotName];\n\t\t\t\t\tfor (const entryName in slotMap) {\n\t\t\t\t\t\tconst attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n\t\t\t\t\t\tif (attachment) skin.setAttachment(slot.index, entryName, attachment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tskeletonData.skins.push(skin);\n\t\t\t\tif (skin.name === \"default\") skeletonData.defaultSkin = skin;\n\t\t\t}\n\t\t}\n\n\t\t// Linked meshes.\n\t\tfor (let i = 0, n = this.linkedMeshes.length; i < n; i++) {\n\t\t\tconst linkedMesh = this.linkedMeshes[i];\n\t\t\tconst skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n\t\t\tif (!skin) throw new Error(`Skin not found: ${linkedMesh.skin}`);\n\t\t\tconst source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source);\n\t\t\tif (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setSourceMesh(source as MeshAttachment);\n\t\t\tlinkedMesh.mesh.updateSequence();\n\t\t\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\n\t\t\touter:\n\t\t\tif (linkedMesh.inheritTimelines && linkedMesh.slotIndex !== linkedMesh.sourceIndex) {\n\t\t\t\tconst slots = source.timelineSlots;\n\t\t\t\tfor (const existing of slots)\n\t\t\t\t\tif (existing === linkedMesh.slotIndex) break outer;\n\t\t\t\tconst newSlots = [...slots];\n\t\t\t\tnewSlots[slots.length] = linkedMesh.slotIndex;\n\t\t\t\tsource.timelineSlots = newSlots;\n\t\t\t}\n\t\t}\n\t\tthis.linkedMeshes.length = 0;\n\n\t\t// Events.\n\t\tif (root.events) {\n\t\t\tfor (const eventName in root.events) {\n\t\t\t\tconst eventMap = root.events[eventName];\n\t\t\t\tconst data = new EventData(eventName);\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tsetup.intValue = getValue(eventMap, \"int\", 0);\n\t\t\t\tsetup.floatValue = getValue(eventMap, \"float\", 0);\n\t\t\t\tsetup.stringValue = getValue(eventMap, \"string\", \"\");\n\t\t\t\tdata._audioPath = getValue(eventMap, \"audio\", null);\n\t\t\t\tif (data.audioPath) {\n\t\t\t\t\tsetup.volume = getValue(eventMap, \"volume\", setup.volume);\n\t\t\t\t\tsetup.balance = getValue(eventMap, \"balance\", setup.balance);\n\t\t\t\t}\n\t\t\t\tskeletonData.events.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Animations.\n\t\tif (root.animations) {\n\t\t\tfor (const animationName in root.animations) {\n\t\t\t\tconst animationMap = root.animations[animationName];\n\t\t\t\tthis.readAnimation(animationMap, animationName, skeletonData);\n\t\t\t}\n\t\t}\n\n\t\t// Slider animations.\n\t\tif (root.constraints) {\n\t\t\tfor (const animationName in root.constraints) {\n\t\t\t\tconst animationMap = root.constraints[animationName];\n\t\t\t\tif (animationMap.type === \"slider\") {\n\t\t\t\t\tconst data = skeletonData.findConstraint(animationMap.name, SliderData)\n\t\t\t\t\tconst animationName = animationMap.animation;\n\t\t\t\t\tconst animation = skeletonData.findAnimation(animationName);\n\t\t\t\t\tif (!animation) throw new Error(`Slider animation not found: ${animationName}`);\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\t\tdata!.animation = animation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn skeletonData;\n\t}\n\n\tprivate fromProperty (type: string): FromProperty {\n\t\tlet from: FromProperty;\n\t\tswitch (type) {\n\t\t\tcase \"rotate\": from = new FromRotate(); break;\n\t\t\tcase \"x\": from = new FromX(); break;\n\t\t\tcase \"y\": from = new FromY(); break;\n\t\t\tcase \"scaleX\": from = new FromScaleX(); break;\n\t\t\tcase \"scaleY\": from = new FromScaleY(); break;\n\t\t\tcase \"shearY\": from = new FromShearY(); break;\n\t\t\tdefault: throw new Error(`Invalid transform constraint from property: ${type}`);\n\t\t}\n\t\treturn from;\n\t}\n\n\tprivate propertyScale (type: string, scale: number) {\n\t\tswitch (type) {\n\t\t\tcase \"x\":\n\t\t\tcase \"y\": return scale;\n\t\t\tdefault: return 1;\n\t\t}\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadAttachment (map: any, skin: Skin, slotIndex: number, placeholder: string, skeletonData: SkeletonData): Attachment | null {\n\t\tconst scale = this.scale;\n\t\tconst name = getValue(map, \"name\", placeholder);\n\n\t\tswitch (getValue(map, \"type\", \"region\")) {\n\t\t\tcase \"region\": {\n\t\t\t\tconst path = getValue(map, \"path\", name);\n\t\t\t\tconst sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tconst region = this.attachmentLoader.newRegionAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!region) return null;\n\t\t\t\tregion.path = path;\n\t\t\t\tregion.x = getValue(map, \"x\", 0) * scale;\n\t\t\t\tregion.y = getValue(map, \"y\", 0) * scale;\n\t\t\t\tregion.scaleX = getValue(map, \"scaleX\", 1);\n\t\t\t\tregion.scaleY = getValue(map, \"scaleY\", 1);\n\t\t\t\tregion.rotation = getValue(map, \"rotation\", 0);\n\t\t\t\tregion.width = map.width * scale;\n\t\t\t\tregion.height = map.height * scale;\n\n\t\t\t\tconst color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) region.color.setFromString(color);\n\n\t\t\t\tregion.updateSequence();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase \"boundingbox\": {\n\t\t\t\tconst box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tthis.readVertices(map, box, map.vertexCount << 1);\n\t\t\t\tconst color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) box.color.setFromString(color);\n\t\t\t\treturn box;\n\t\t\t}\n\t\t\tcase \"mesh\":\n\t\t\tcase \"linkedmesh\": {\n\t\t\t\tconst path = getValue(map, \"path\", name);\n\t\t\t\tconst sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\n\t\t\t\tconst color = getValue(map, \"color\", null);\n\t\t\t\tif (color) mesh.color.setFromString(color);\n\n\t\t\t\tmesh.width = getValue(map, \"width\", 0) * scale;\n\t\t\t\tmesh.height = getValue(map, \"height\", 0) * scale;\n\n\t\t\t\tconst source: string = getValue(map, \"source\", null);\n\t\t\t\tif (source) {\n\t\t\t\t\tlet sourceIndex = slotIndex;\n\t\t\t\t\tconst slot = getValue(map, \"slot\", null);\n\t\t\t\t\tif (slot) {\n\t\t\t\t\t\tconst sourceSlot = skeletonData.findSlot(slot);\n\t\t\t\t\t\tif (!sourceSlot) throw new Error(`Source mesh slot not found: ${slot}`);\n\t\t\t\t\t\tsourceIndex = sourceSlot.index;\n\t\t\t\t\t}\n\t\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, \"skin\", null), slotIndex, sourceIndex, source,\n\t\t\t\t\t\tgetValue(map, \"timelines\", true)));\n\t\t\t\t\treturn mesh;\n\t\t\t\t}\n\n\t\t\t\tconst uvs: Array<number> = map.uvs;\n\t\t\t\tthis.readVertices(map, mesh, uvs.length);\n\t\t\t\tmesh.triangles = map.triangles;\n\t\t\t\tmesh.regionUVs = uvs;\n\n\t\t\t\tmesh.edges = getValue(map, \"edges\", null);\n\t\t\t\tmesh.hullLength = getValue(map, \"hull\", 0) * 2;\n\t\t\t\tmesh.updateSequence();\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase \"path\": {\n\t\t\t\tconst path = this.attachmentLoader.newPathAttachment(skin, placeholder, name);\n\t\t\t\tif (!path) return null;\n\t\t\t\tpath.closed = getValue(map, \"closed\", false);\n\t\t\t\tpath.constantSpeed = getValue(map, \"constantSpeed\", true);\n\n\t\t\t\tconst vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, path, vertexCount << 1);\n\n\t\t\t\tconst lengths: Array<number> = Utils.newArray(vertexCount / 3, 0);\n\t\t\t\tfor (let i = 0; i < map.lengths.length; i++)\n\t\t\t\t\tlengths[i] = map.lengths[i] * scale;\n\t\t\t\tpath.lengths = lengths;\n\n\t\t\t\tconst color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) path.color.setFromString(color);\n\t\t\t\treturn path;\n\t\t\t}\n\t\t\tcase \"point\": {\n\t\t\t\tconst point = this.attachmentLoader.newPointAttachment(skin, placeholder, name);\n\t\t\t\tif (!point) return null;\n\t\t\t\tpoint.x = getValue(map, \"x\", 0) * scale;\n\t\t\t\tpoint.y = getValue(map, \"y\", 0) * scale;\n\t\t\t\tpoint.rotation = getValue(map, \"rotation\", 0);\n\n\t\t\t\tconst color = getValue(map, \"color\", null);\n\t\t\t\tif (color) point.color.setFromString(color);\n\t\t\t\treturn point;\n\t\t\t}\n\t\t\tcase \"clipping\": {\n\t\t\t\tconst clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name);\n\t\t\t\tif (!clip) return null;\n\n\t\t\t\tconst end = getValue(map, \"end\", null);\n\t\t\t\tif (end) clip.endSlot = skeletonData.findSlot(end);\n\n\t\t\t\tclip.convex = getValue(map, \"convex\", false);\n\t\t\t\tclip.inverse = getValue(map, \"inverse\", false);\n\n\t\t\t\tconst vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, clip, vertexCount << 1);\n\n\t\t\t\tconst color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) clip.color.setFromString(color);\n\t\t\t\treturn clip;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treadSequence (map: object) {\n\t\tif (map == null) return new Sequence(1, false);\n\t\tconst sequence = new Sequence(getValue(map, \"count\", 0), true);\n\t\tsequence.start = getValue(map, \"start\", 1);\n\t\tsequence.digits = getValue(map, \"digits\", 0);\n\t\tsequence.setupIndex = getValue(map, \"setup\", 0);\n\t\treturn sequence;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadVertices (map: any, attachment: VertexAttachment, verticesLength: number) {\n\t\tconst scale = this.scale;\n\t\tattachment.worldVerticesLength = verticesLength;\n\t\tconst vertices: Array<number> = map.vertices;\n\t\tif (verticesLength === vertices.length) {\n\t\t\tconst scaledVertices = Utils.toFloatArray(vertices);\n\t\t\tif (scale !== 1) {\n\t\t\t\tfor (let i = 0, n = vertices.length; i < n; i++)\n\t\t\t\t\tscaledVertices[i] *= scale;\n\t\t\t}\n\t\t\tattachment.vertices = scaledVertices;\n\t\t\treturn;\n\t\t}\n\t\tconst weights: number[] = [];\n\t\tconst bones: number[] = [];\n\t\tfor (let i = 0, n = vertices.length; i < n;) {\n\t\t\tconst boneCount = vertices[i++];\n\t\t\tbones.push(boneCount);\n\t\t\tfor (let nn = i + boneCount * 4; i < nn; i += 4) {\n\t\t\t\tbones.push(vertices[i]);\n\t\t\t\tweights.push(vertices[i + 1] * scale);\n\t\t\t\tweights.push(vertices[i + 2] * scale);\n\t\t\t\tweights.push(vertices[i + 3]);\n\t\t\t}\n\t\t}\n\t\tattachment.bones = bones;\n\t\tattachment.vertices = Utils.toFloatArray(weights);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any untile we define a schema\n\treadAnimation (map: any, name: string, skeletonData: SkeletonData) {\n\t\tconst scale = this.scale;\n\t\tconst timelines: Timeline[] = [];\n\n\t\t// Slot timelines.\n\t\tif (map.slots) {\n\t\t\tfor (const slotName in map.slots) {\n\t\t\t\tconst slotMap = map.slots[slotName];\n\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\tif (!slot) throw new Error(`Slot not found: ${slotName}`);\n\t\t\t\tconst slotIndex = slot.index;\n\t\t\t\tfor (const timelineName in slotMap) {\n\t\t\t\t\tconst timelineMap = slotMap[timelineName];\n\t\t\t\t\tif (!timelineMap) continue;\n\t\t\t\t\tconst frames = timelineMap.length;\n\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"attachment\": {\n\t\t\t\t\t\t\tconst timeline = new AttachmentTimeline(frames, slotIndex);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < frames; frame++) {\n\t\t\t\t\t\t\t\tconst keyMap = timelineMap[frame];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(keyMap, \"time\", 0), getValue(keyMap, \"name\", null));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"rgba\": {\n\t\t\t\t\t\t\tconst timeline = new RGBATimeline(frames, frames << 2, slotIndex);\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color.a);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"rgb\": {\n\t\t\t\t\t\t\tconst timeline = new RGBTimeline(frames, frames * 3, slotIndex);\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"alpha\": {\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"rgba2\": {\n\t\t\t\t\t\t\tconst timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);\n\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\t\tconst newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"rgb2\": {\n\t\t\t\t\t\t\tconst timeline = new RGB2Timeline(frames, frames * 6, slotIndex);\n\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\t\tconst newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Invalid timeline type for a slot: ${timelineMap.name} (${slotMap.name})`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Bone timelines.\n\t\tif (map.bones) {\n\t\t\tfor (const boneName in map.bones) {\n\t\t\t\tconst boneMap = map.bones[boneName];\n\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\tif (!bone) throw new Error(`Bone not found: ${boneName}`);\n\t\t\t\tconst boneIndex = bone.index;\n\t\t\t\tfor (const timelineName in boneMap) {\n\t\t\t\t\tconst timelineMap = boneMap[timelineName];\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tif (frames === 0) continue;\n\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"rotate\": readTimeline1(timelines, timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"translate\": readTimeline2(timelines, timelineMap, new TranslateTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 0, scale); break;\n\t\t\t\t\t\tcase \"translatex\": readTimeline1(timelines, timelineMap, new TranslateXTimeline(frames, frames, boneIndex), 0, scale); break;\n\t\t\t\t\t\tcase \"translatey\": readTimeline1(timelines, timelineMap, new TranslateYTimeline(frames, frames, boneIndex), 0, scale); break;\n\t\t\t\t\t\tcase \"scale\": readTimeline2(timelines, timelineMap, new ScaleTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 1, 1); break;\n\t\t\t\t\t\tcase \"scalex\": readTimeline1(timelines, timelineMap, new ScaleXTimeline(frames, frames, boneIndex), 1, 1); break;\n\t\t\t\t\t\tcase \"scaley\": readTimeline1(timelines, timelineMap, new ScaleYTimeline(frames, frames, boneIndex), 1, 1); break;\n\t\t\t\t\t\tcase \"shear\": readTimeline2(timelines, timelineMap, new ShearTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 0, 1); break;\n\t\t\t\t\t\tcase \"shearx\": readTimeline1(timelines, timelineMap, new ShearXTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"sheary\": readTimeline1(timelines, timelineMap, new ShearYTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"inherit\": {\n\t\t\t\t\t\t\tconst timeline = new InheritTimeline(frames, bone.index);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < timelineMap.length; frame++) {\n\t\t\t\t\t\t\t\tconst aFrame = timelineMap[frame];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(aFrame, \"time\", 0), Utils.enumValue(Inherit, getValue(aFrame, \"inherit\", \"Normal\")));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Invalid timeline type for a bone: ${timelineMap.name} (${boneMap.name})`);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IK constraint timelines.\n\t\tif (map.ik) {\n\t\t\tfor (const constraintName in map.ik) {\n\t\t\t\tconst constraintMap = map.ik[constraintName];\n\t\t\t\tlet keyMap = constraintMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, IkConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`IK Constraint not found: ${constraintName}`);\n\t\t\t\tconst timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1,\n\t\t\t\t\tskeletonData.constraints.indexOf(constraint));\n\n\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\tlet mix = getValue(keyMap, \"mix\", 1);\n\t\t\t\tlet softness = getValue(keyMap, \"softness\", 0) * scale;\n\n\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\ttimeline.setFrame(frame, time, mix, softness, getValue(keyMap, \"bendPositive\", true) ? 1 : -1, getValue(keyMap, \"compress\", false), getValue(keyMap, \"stretch\", false));\n\t\t\t\t\tconst nextMap = constraintMap[frame + 1];\n\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tconst mix2 = getValue(nextMap, \"mix\", 1);\n\t\t\t\t\tconst softness2 = getValue(nextMap, \"softness\", 0) * scale;\n\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\tif (curve) {\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);\n\t\t\t\t\t}\n\n\t\t\t\t\ttime = time2;\n\t\t\t\t\tmix = mix2;\n\t\t\t\t\tsoftness = softness2;\n\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Transform constraint timelines.\n\t\tif (map.transform) {\n\t\t\tfor (const constraintName in map.transform) {\n\t\t\t\tconst timelineMap = map.transform[constraintName];\n\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, TransformConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`Transform constraint not found: ${constraintName}`);\n\t\t\t\tconst timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6,\n\t\t\t\t\tskeletonData.constraints.indexOf(constraint));\n\n\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\tlet mixRotate = getValue(keyMap, \"mixRotate\", 1);\n\t\t\t\tlet mixX = getValue(keyMap, \"mixX\", 1), mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\tlet mixScaleX = getValue(keyMap, \"mixScaleX\", 1), mixScaleY = getValue(keyMap, \"mixScaleY\", 1);\n\t\t\t\tlet mixShearY = getValue(keyMap, \"mixShearY\", 1);\n\n\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tconst mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\tconst mixX2 = getValue(nextMap, \"mixX\", 1), mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\tconst mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1), mixScaleY2 = getValue(nextMap, \"mixScaleY\", 1);\n\t\t\t\t\tconst mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\tif (curve) {\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\ttime = time2;\n\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\tmixScaleX = mixScaleX2;\n\t\t\t\t\tmixScaleY = mixScaleY2;\n\t\t\t\t\tmixShearY = mixShearY2;\n\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Path constraint timelines.\n\t\tif (map.path) {\n\t\t\tfor (const constraintName in map.path) {\n\t\t\t\tconst constraintMap = map.path[constraintName];\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PathConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`Path constraint not found: ${constraintName}`);\n\t\t\t\tconst index = skeletonData.constraints.indexOf(constraint);\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst timelineMap = constraintMap[timelineName];\n\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"position\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintPositionTimeline(frames, frames, index);\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, 0, constraint.positionMode === PositionMode.Fixed ? scale : 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"spacing\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintSpacingTimeline(frames, frames, index);\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, 0, constraint.spacingMode === SpacingMode.Length || constraint.spacingMode === SpacingMode.Fixed ? scale : 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"mix\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintMixTimeline(frames, frames * 3, index);\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet mixRotate = getValue(keyMap, \"mixRotate\", 1);\n\t\t\t\t\t\t\tlet mixX = getValue(keyMap, \"mixX\", 1);\n\t\t\t\t\t\t\tlet mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\t\t\t\tconst mixX2 = getValue(nextMap, \"mixX\", 1);\n\t\t\t\t\t\t\t\tconst mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Physics constraint timelines.\n\t\tif (map.physics) {\n\t\t\tfor (const constraintName in map.physics) {\n\t\t\t\tconst constraintMap = map.physics[constraintName];\n\t\t\t\tlet index = -1;\n\t\t\t\tif (constraintName.length > 0) {\n\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData);\n\t\t\t\t\tif (!constraint) throw new Error(`Physics constraint not found: ${constraintName}`);\n\t\t\t\t\tindex = skeletonData.constraints.indexOf(constraint);\n\t\t\t\t}\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst timelineMap = constraintMap[timelineName];\n\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tlet timeline: CurveTimeline1;\n\t\t\t\t\tlet defaultValue = 0;\n\t\t\t\t\tif (timelineName === \"reset\") {\n\t\t\t\t\t\tconst resetTimeline = new PhysicsConstraintResetTimeline(frames, index);\n\t\t\t\t\t\tfor (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++)\n\t\t\t\t\t\t\tresetTimeline.setFrame(frame, getValue(keyMap, \"time\", 0));\n\t\t\t\t\t\ttimelines.push(resetTimeline);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"inertia\": timeline = new PhysicsConstraintInertiaTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"strength\": timeline = new PhysicsConstraintStrengthTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"damping\": timeline = new PhysicsConstraintDampingTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"mass\": timeline = new PhysicsConstraintMassTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"wind\": timeline = new PhysicsConstraintWindTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"gravity\": timeline = new PhysicsConstraintGravityTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"mix\": {\n\t\t\t\t\t\t\tdefaultValue = 1;\n\t\t\t\t\t\t\ttimeline = new PhysicsConstraintMixTimeline(frames, frames, index);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: continue;\n\t\t\t\t\t}\n\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, defaultValue, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Slider timelines.\n\t\tif (map.slider) {\n\t\t\tfor (const constraintName in map.slider) {\n\t\t\t\tconst constraintMap = map.slider[constraintName];\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, SliderData);\n\t\t\t\tif (!constraint) throw new Error(`Slider not found: ${constraintName}`);\n\t\t\t\tconst index = skeletonData.constraints.indexOf(constraint);\n\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst timelineMap = constraintMap[timelineName];\n\t\t\t\t\tconst keyMap = timelineMap[0];\n\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"time\": readTimeline1(timelines, timelineMap, new SliderTimeline(frames, frames, index), 1, 1); break;\n\t\t\t\t\t\tcase \"mix\": readTimeline1(timelines, timelineMap, new SliderMixTimeline(frames, frames, index), 1, 1); break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attachment timelines.\n\t\tif (map.attachments) {\n\t\t\tfor (const attachmentsName in map.attachments) {\n\t\t\t\tconst attachmentsMap = map.attachments[attachmentsName];\n\t\t\t\tconst skin = skeletonData.findSkin(attachmentsName);\n\t\t\t\tif (!skin) throw new Error(`Skin not found: ${attachmentsName}`);\n\t\t\t\tfor (const slotMapName in attachmentsMap) {\n\t\t\t\t\tconst slotMap = attachmentsMap[slotMapName];\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotMapName);\n\t\t\t\t\tif (!slot) throw new Error(`Attachment slot not found: ${slotMapName}`);\n\t\t\t\t\tconst slotIndex = slot.index;\n\t\t\t\t\tfor (const attachmentMapName in slotMap) {\n\t\t\t\t\t\tconst attachmentMap = slotMap[attachmentMapName];\n\t\t\t\t\t\tconst attachment = <VertexAttachment>skin.getAttachment(slotIndex, attachmentMapName);\n\t\t\t\t\t\tif (!attachment) throw new Error(`Timeline attachment not found: ${attachmentMapName}`);\n\n\t\t\t\t\t\tfor (const timelineMapName in attachmentMap) {\n\t\t\t\t\t\t\tconst timelineMap = attachmentMap[timelineMapName];\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\t\t\tif (timelineMapName === \"deform\") {\n\t\t\t\t\t\t\t\tconst weighted = attachment.bones;\n\t\t\t\t\t\t\t\tconst vertices = attachment.vertices;\n\t\t\t\t\t\t\t\tconst deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\t\t\t\t\t\t\t\tconst timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);\n\t\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\t\tlet deform: NumberArrayLike;\n\t\t\t\t\t\t\t\t\tconst verticesValue: Array<number> = getValue(keyMap, \"vertices\", null);\n\t\t\t\t\t\t\t\t\tif (!verticesValue)\n\t\t\t\t\t\t\t\t\t\tdeform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdeform = Utils.newFloatArray(deformLength);\n\t\t\t\t\t\t\t\t\t\tconst start = <number>getValue(keyMap, \"offset\", 0);\n\t\t\t\t\t\t\t\t\t\tUtils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n\t\t\t\t\t\t\t\t\t\tif (scale !== 1) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = start, n = i + verticesValue.length; i < n; i++)\n\t\t\t\t\t\t\t\t\t\t\t\tdeform[i] *= scale;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (!weighted) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < deformLength; i++)\n\t\t\t\t\t\t\t\t\t\t\t\tdeform[i] += vertices[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, deform);\n\t\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\t\tif (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);\n\t\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\t} else if (timelineMapName === \"sequence\") {\n\t\t\t\t\t\t\t\tconst timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment as Attachment);\n\t\t\t\t\t\t\t\tlet lastDelay = 0;\n\t\t\t\t\t\t\t\tfor (let frame = 0; frame < timelineMap.length; frame++) {\n\t\t\t\t\t\t\t\t\tconst delay = getValue(keyMap, \"delay\", lastDelay);\n\t\t\t\t\t\t\t\t\tconst time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tconst mode = SequenceMode[getValue(keyMap, \"mode\", \"hold\")] as unknown as number;\n\t\t\t\t\t\t\t\t\tconst index = getValue(keyMap, \"index\", 0);\n\t\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mode, index, delay);\n\t\t\t\t\t\t\t\t\tlastDelay = delay;\n\t\t\t\t\t\t\t\t\tkeyMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw order timeline.\n\t\tif (map.drawOrder) {\n\t\t\tconst timeline = new DrawOrderTimeline(map.drawOrder.length);\n\t\t\tconst slotCount = skeletonData.slots.length;\n\t\t\tlet frame = 0\n\t\t\tfor (const drawOrderMap of (map.drawOrder as DrawOrderKeysType[])) {\n\t\t\t\ttimeline.setFrame(frame++, getValue(drawOrderMap, \"time\", 0), readDrawOrder(skeletonData, drawOrderMap, slotCount, null));\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Draw order folder timelines.\n\t\tif (map.drawOrderFolder) {\n\t\t\tfor (const timelineMap of map.drawOrderFolder) {\n\t\t\t\tconst slotEntries = getValue(timelineMap, \"slots\", []) as string[];\n\t\t\t\tconst folderSlots = new Array<number>(slotEntries.length);\n\t\t\t\tlet ii = 0;\n\t\t\t\tfor (const slotEntry of slotEntries) {\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotEntry);\n\t\t\t\t\tif (!slot) throw new Error(`Draw order folder slot not found: ${slotEntry}`);\n\t\t\t\t\tfolderSlots[ii++] = slot.index;\n\t\t\t\t}\n\n\t\t\t\tconst drawOrderFolderEntries = getValue(timelineMap, \"keys\", []) as DrawOrderKeysType[];\n\t\t\t\tconst timeline = new DrawOrderFolderTimeline(drawOrderFolderEntries.length, folderSlots, skeletonData.slots.length);\n\t\t\t\tlet frame = 0;\n\t\t\t\tfor (const drawOrderFolderMap of drawOrderFolderEntries) {\n\t\t\t\t\ttimeline.setFrame(frame++, getValue(drawOrderFolderMap, \"time\", 0), readDrawOrder(skeletonData, drawOrderFolderMap, folderSlots.length, folderSlots));\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Event timeline.\n\t\tif (map.events) {\n\t\t\tconst timeline = new EventTimeline(map.events.length);\n\t\t\tlet frame = 0;\n\t\t\tfor (let i = 0; i < map.events.length; i++, frame++) {\n\t\t\t\tconst eventMap = map.events[i];\n\t\t\t\tconst data = skeletonData.findEvent(eventMap.name);\n\t\t\t\tif (!data) throw new Error(`Event not found: ${eventMap.name}`);\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tconst event = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), data);\n\t\t\t\tevent.intValue = getValue(eventMap, \"int\", setup.intValue);\n\t\t\t\tevent.floatValue = getValue(eventMap, \"float\", setup.floatValue);\n\t\t\t\tevent.stringValue = getValue(eventMap, \"string\", setup.stringValue);\n\t\t\t\tif (event.data.audioPath) {\n\t\t\t\t\tevent.volume = getValue(eventMap, \"volume\", setup.volume);\n\t\t\t\t\tevent.balance = getValue(eventMap, \"balance\", setup.volume);\n\t\t\t\t}\n\t\t\t\ttimeline.setFrame(frame, event);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\tlet duration = 0;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\tduration = Math.max(duration, timelines[i].getDuration());\n\n\t\tconst animation = new Animation(name, timelines, duration);\n\t\tconst color = getValue(map, \"color\", null);\n\t\tif (color !== null) animation.color.setFromString(color);\n\n\t\tskeletonData.animations.push(animation);\n\t}\n}\n\nclass LinkedMesh {\n\tsource: string; skin: string;\n\tslotIndex: number; sourceIndex: number;\n\tmesh: MeshAttachment;\n\tinheritTimelines: boolean;\n\n\tconstructor (mesh: MeshAttachment, skin: string, slotIndex: number, sourceIndex: number, source: string,\n\t\tinheritTimelines: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skin = skin;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.sourceIndex = sourceIndex;\n\t\tthis.source = source;\n\t\tthis.inheritTimelines = inheritTimelines;\n\t}\n}\n\ntype CurveType = [number, number, number, number] | \"stepped\";\ntype Timeline1KeysType = { value: number, time?: number, curve?: CurveType };\ntype Timeline2KeysType = Timeline1KeysType & { x?: number, y?: number };\n\nfunction readTimeline1 (timelines: Array<Timeline>, keys: Timeline1KeysType[], timeline: CurveTimeline1, defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = keyMap.time ?? 0;\n\tlet value = (keyMap.value ?? defaultValue) * scale;\n\tlet bezier = 0;\n\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value);\n\t\tconst nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\ttimelines.push(timeline);\n\t\t\treturn;\n\t\t}\n\t\tconst time2 = nextMap.time ?? 0;\n\t\tconst value2 = (nextMap.value ?? defaultValue) * scale;\n\t\tif (keyMap.curve) bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);\n\t\ttime = time2;\n\t\tvalue = value2;\n\t\tkeyMap = nextMap;\n\t}\n}\n\nfunction readTimeline2 (timelines: Array<Timeline>, keys: Timeline2KeysType[], timeline: BoneTimeline2, name1: \"x\", name2: \"y\", defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = keyMap.time ?? 0;\n\tlet value1 = (keyMap[name1] ?? defaultValue) * scale;\n\tlet value2 = (keyMap[name2] ?? defaultValue) * scale;\n\tlet bezier = 0;\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value1, value2);\n\t\tconst nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\ttimelines.push(timeline);\n\t\t\treturn;\n\t\t}\n\t\tconst time2 = nextMap.time ?? 0;\n\t\tconst nvalue1 = (nextMap[name1] ?? defaultValue) * scale;\n\t\tconst nvalue2 = (nextMap[name2] ?? defaultValue) * scale;\n\t\tconst curve = keyMap.curve;\n\t\tif (curve) {\n\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);\n\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue1 = nvalue1;\n\t\tvalue2 = nvalue2;\n\t\tkeyMap = nextMap;\n\t}\n}\n\ntype DrawOrderKeysType = { offsets?: { slot: string, offset: number }[] };\n\n/** @param folderSlots Slot names are resolved to positions within this array. If null, slot indices are used as positions. */\nfunction readDrawOrder (skeletonData: SkeletonData, keys: DrawOrderKeysType, slotCount: number, folderSlots: number[] | null): number[] | null {\n\tconst changes = keys.offsets;\n\tif (!changes) return null; // Setup draw order.\n\tconst drawOrder = new Array<number>(slotCount).fill(-1);\n\tconst unchanged = new Array<number>(slotCount - changes.length);\n\tlet originalIndex = 0, unchangedIndex = 0;\n\tfor (const offsetMap of changes) {\n\t\tconst slot = skeletonData.findSlot(offsetMap.slot);\n\t\tif (slot == null) throw new Error(`Draw order slot not found: ${offsetMap.slot}`);\n\t\tlet index = 0;\n\t\tif (!folderSlots)\n\t\t\tindex = slot.index;\n\t\telse {\n\t\t\tindex = -1;\n\t\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\t\tif (folderSlots[i] === slot.index) {\n\t\t\t\t\tindex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (index === -1) throw new Error(`Slot not in folder: ${offsetMap.slot}`);\n\t\t}\n\t\t// Collect unchanged items.\n\t\twhile (originalIndex !== index)\n\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t// Set changed items.\n\t\tdrawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n\t}\n\t// Collect remaining unchanged items.\n\twhile (originalIndex < slotCount)\n\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t// Fill in unchanged items.\n\tfor (let i = slotCount - 1; i >= 0; i--)\n\t\tif (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex];\n\treturn drawOrder;\n}\n\nfunction readCurve (curve: [number, number, number, number] | \"stepped\", timeline: CurveTimeline, bezier: number, frame: number, value: number, time1: number, time2: number,\n\tvalue1: number, value2: number, scale: number) {\n\tif (curve === \"stepped\") {\n\t\ttimeline.setStepped(frame);\n\t\treturn bezier;\n\t}\n\tconst i = value << 2;\n\tconst cx1 = curve[i];\n\tconst cy1 = curve[i + 1] * scale;\n\tconst cx2 = curve[i + 2];\n\tconst cy2 = curve[i + 3] * scale;\n\ttimeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);\n\treturn bezier + 1;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\nfunction getValue (map: any, property: string, defaultValue: any) {\n\treturn map[property] !== undefined ? map[property] : defaultValue;\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n\nimport { ClippingAttachment, MeshAttachment, RegionAttachment } from \"./attachments/index.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { SkeletonClipping } from \"./SkeletonClipping.js\";\nimport { BlendMode } from \"./SlotData.js\";\nimport type { Color, NumberArrayLike } from \"./Utils.js\";\n\nexport class SkeletonRendererCore {\n\tprivate commandPool = new CommandPool();\n\tprivate worldVertices = new Float32Array(12 * 1024);\n\tprivate quadIndices = new Uint16Array([0, 1, 2, 2, 3, 0]);\n\tprivate clipping = new SkeletonClipping();\n\tprivate renderCommands: RenderCommand[] = [];\n\n\trender (skeleton: Skeleton, pma = false, inColor?: [number, number, number, number], stride = 2): RenderCommand | undefined {\n\t\tthis.commandPool.reset();\n\t\tthis.renderCommands.length = 0;\n\n\t\tconst clipper = this.clipping;\n\n\t\tconst drawOrder = skeleton.drawOrder.appliedPose;\n\t\tfor (let i = 0; i < skeleton.slots.length; i++) {\n\t\t\tconst slot = drawOrder[i];\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\n\t\t\tif (!attachment) {\n\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst pose = slot.appliedPose;\n\t\t\tconst slotColor = pose.color;\n\t\t\tconst alpha = slotColor.a;\n\t\t\tif ((alpha === 0 || !slot.bone.active) && !(attachment instanceof ClippingAttachment)) {\n\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet vertices: NumberArrayLike;\n\t\t\tlet verticesCount: number;\n\t\t\tlet uvs: NumberArrayLike;\n\t\t\tlet indices: number[] | Uint16Array;\n\t\t\tlet indicesCount: number;\n\t\t\tlet attachmentColor: Color;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: texture depends on the runtime\n\t\t\tlet texture: any;\n\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tattachmentColor = attachment.color;\n\n\t\t\t\tif (attachmentColor.a === 0) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\t\t\t\tattachment.computeWorldVertices(slot, attachment.getOffsets(pose), this.worldVertices, 0, stride);\n\n\t\t\t\tvertices = this.worldVertices;\n\t\t\t\tverticesCount = 4;\n\t\t\t\tuvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tindices = this.quadIndices;\n\t\t\t\tindicesCount = 6;\n\t\t\t\ttexture = sequence.regions[sequenceIndex]?.texture;\n\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tattachmentColor = attachment.color;\n\n\t\t\t\tif (attachmentColor.a === 0) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this.worldVertices.length < attachment.worldVerticesLength)\n\t\t\t\t\tthis.worldVertices = new Float32Array(attachment.worldVerticesLength);\n\n\t\t\t\tattachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, this.worldVertices, 0, stride);\n\t\t\t\tvertices = this.worldVertices;\n\t\t\t\tverticesCount = attachment.worldVerticesLength >> 1;\n\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\n\t\t\t\tuvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tindices = attachment.triangles;\n\t\t\t\tindicesCount = indices.length;\n\t\t\t\ttexture = sequence.regions[sequenceIndex]?.texture;\n\n\t\t\t} else if (attachment instanceof ClippingAttachment) {\n\t\t\t\tclipper.clipStart(skeleton, slot, attachment);\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst skelColor = skeleton.color;\n\t\t\tlet color: number, darkColor: number;\n\t\t\tif (pma) {\n\t\t\t\tlet a: number;\n\t\t\t\tif (inColor) {\n\t\t\t\t\ta = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(a * inColor[0] * skelColor.r * slotColor.r * attachmentColor.r);\n\t\t\t\t\tconst g = Math.floor(a * inColor[1] * skelColor.g * slotColor.g * attachmentColor.g);\n\t\t\t\t\tconst b = Math.floor(a * inColor[2] * skelColor.b * slotColor.b * attachmentColor.b);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t} else {\n\t\t\t\t\ta = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(a * skelColor.r * slotColor.r * attachmentColor.r);\n\t\t\t\t\tconst g = Math.floor(a * skelColor.g * slotColor.g * attachmentColor.g);\n\t\t\t\t\tconst b = Math.floor(a * skelColor.b * slotColor.b * attachmentColor.b);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t}\n\n\t\t\t\tdarkColor = 0xff000000;\n\t\t\t\tif (pose.darkColor) {\n\t\t\t\t\tconst { r, g, b } = pose.darkColor;\n\t\t\t\t\tdarkColor = 0xff000000 |\n\t\t\t\t\t\t(Math.floor(r * a) << 16) |\n\t\t\t\t\t\t(Math.floor(g * a) << 8) |\n\t\t\t\t\t\tMath.floor(b * a);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (inColor) {\n\t\t\t\t\tconst a = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(inColor[0] * skelColor.r * slotColor.r * attachmentColor.r * 255);\n\t\t\t\t\tconst g = Math.floor(inColor[1] * skelColor.g * slotColor.g * attachmentColor.g * 255);\n\t\t\t\t\tconst b = Math.floor(inColor[2] * skelColor.b * slotColor.b * attachmentColor.b * 255);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t} else {\n\t\t\t\t\tconst a = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(skelColor.r * slotColor.r * attachmentColor.r * 255);\n\t\t\t\t\tconst g = Math.floor(skelColor.g * slotColor.g * attachmentColor.g * 255);\n\t\t\t\t\tconst b = Math.floor(skelColor.b * slotColor.b * attachmentColor.b * 255);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t}\n\n\t\t\t\tdarkColor = 0;\n\t\t\t\tif (pose.darkColor) {\n\t\t\t\t\tconst { r, g, b } = pose.darkColor;\n\t\t\t\t\tdarkColor = (Math.floor(r * 255) << 16) | (Math.floor(g * 255) << 8) | Math.floor(b * 255);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (clipper.isClipping()) {\n\t\t\t\tclipper.clipTrianglesUnpacked(vertices, 0, indices, indicesCount, uvs, stride);\n\t\t\t\tvertices = clipper.clippedVerticesTyped;\n\t\t\t\tverticesCount = clipper.clippedVerticesLength / stride;\n\t\t\t\tuvs = clipper.clippedUVsTyped;\n\t\t\t\tindices = clipper.clippedTrianglesTyped;\n\t\t\t\tindicesCount = clipper.clippedTrianglesLength;\n\t\t\t}\n\n\t\t\tconst cmd = this.commandPool.getCommand(verticesCount, indicesCount, stride);\n\t\t\tcmd.blendMode = slot.data.blendMode;\n\t\t\tcmd.texture = texture;\n\n\t\t\tcmd.positions.set(vertices.subarray(0, verticesCount * stride));\n\t\t\tcmd.uvs.set(uvs.subarray(0, verticesCount << 1));\n\n\t\t\tfor (let j = 0; j < verticesCount; j++) {\n\t\t\t\tcmd.colors[j] = color;\n\t\t\t\tcmd.darkColors[j] = darkColor;\n\t\t\t}\n\n\t\t\tif (indices instanceof Uint16Array) {\n\t\t\t\tcmd.indices.set(indices.subarray(0, indicesCount));\n\t\t\t} else {\n\t\t\t\tcmd.indices.set(indices.slice(0, indicesCount));\n\t\t\t}\n\n\t\t\tthis.renderCommands.push(cmd);\n\t\t\tclipper.clipEnd(slot);\n\t\t}\n\n\t\tclipper.clipEnd();\n\t\treturn this.batchCommands(stride);\n\t}\n\n\tprivate batchSubCommands (commands: RenderCommand[], first: number, last: number,\n\t\tnumVertices: number, numIndices: number, stride: number): RenderCommand {\n\n\t\tconst firstCmd = commands[first];\n\t\tconst batched = this.commandPool.getCommand(numVertices, numIndices, stride);\n\n\t\tbatched.blendMode = firstCmd.blendMode;\n\t\tbatched.texture = firstCmd.texture;\n\n\t\tlet positionsOffset = 0;\n\t\tlet uvsOffset = 0;\n\t\tlet colorsOffset = 0;\n\t\tlet indicesOffset = 0;\n\t\tlet vertexOffset = 0;\n\n\t\tfor (let i = first; i <= last; i++) {\n\t\t\tconst cmd = commands[i];\n\n\t\t\tbatched.positions.set(cmd.positions, positionsOffset);\n\t\t\tpositionsOffset += cmd.numVertices * stride;\n\n\t\t\tbatched.uvs.set(cmd.uvs, uvsOffset);\n\t\t\tuvsOffset += cmd.numVertices << 1;\n\n\t\t\tbatched.colors.set(cmd.colors, colorsOffset);\n\t\t\tbatched.darkColors.set(cmd.darkColors, colorsOffset);\n\t\t\tcolorsOffset += cmd.numVertices;\n\n\t\t\t// cannot fast copy - indices need vertex offset adjustment\n\t\t\tfor (let j = 0; j < cmd.numIndices; j++)\n\t\t\t\tbatched.indices[indicesOffset + j] = cmd.indices[j] + vertexOffset;\n\n\t\t\tindicesOffset += cmd.numIndices;\n\t\t\tvertexOffset += cmd.numVertices;\n\t\t}\n\n\t\treturn batched;\n\t}\n\n\tprivate batchCommands (stride: number): RenderCommand | undefined {\n\t\tif (this.renderCommands.length === 0) return undefined;\n\n\t\tlet root: RenderCommand | undefined;\n\t\tlet last: RenderCommand | undefined;\n\n\t\tlet first = this.renderCommands[0];\n\t\tlet startIndex = 0;\n\t\tlet i = 1;\n\t\tlet numVertices = first.numVertices;\n\t\tlet numIndices = first.numIndices;\n\n\t\twhile (i <= this.renderCommands.length) {\n\t\t\tconst cmd = i < this.renderCommands.length ? this.renderCommands[i] : null;\n\n\t\t\tif (cmd && cmd.numVertices === 0 && cmd.numIndices === 0) {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst canBatch = cmd !== null &&\n\t\t\t\tcmd.texture === first.texture &&\n\t\t\t\tcmd.blendMode === first.blendMode &&\n\t\t\t\tcmd.colors[0] === first.colors[0] &&\n\t\t\t\tcmd.darkColors[0] === first.darkColors[0] &&\n\t\t\t\tnumIndices + cmd.numIndices < 0xffff;\n\t\t\tif (canBatch) {\n\t\t\t\tnumVertices += cmd.numVertices;\n\t\t\t\tnumIndices += cmd.numIndices;\n\t\t\t} else {\n\t\t\t\tconst batched = this.batchSubCommands(this.renderCommands, startIndex, i - 1,\n\t\t\t\t\tnumVertices, numIndices, stride);\n\n\t\t\t\tif (!last) {\n\t\t\t\t\troot = last = batched;\n\t\t\t\t} else {\n\t\t\t\t\tlast.next = batched;\n\t\t\t\t\tlast = batched;\n\t\t\t\t}\n\n\t\t\t\tif (i === this.renderCommands.length) break;\n\n\t\t\t\tfirst = this.renderCommands[i];\n\t\t\t\tstartIndex = i;\n\t\t\t\tnumVertices = first.numVertices;\n\t\t\t\tnumIndices = first.numIndices;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\treturn root;\n\t}\n}\n\n// values with under score is the original sized array, bigger than necessary\n// values without under score is a view of the orignal array, sized as needed\ninterface RenderCommand {\n\tpositions: Float32Array;\n\tuvs: Float32Array;\n\tcolors: Uint32Array;\n\tdarkColors: Uint32Array;\n\tindices: Uint16Array;\n\t_positions: Float32Array;\n\t_uvs: Float32Array;\n\t_colors: Uint32Array;\n\t_darkColors: Uint32Array;\n\t_indices: Uint16Array;\n\tnumVertices: number;\n\tnumIndices: number;\n\tblendMode: BlendMode;\n\t// biome-ignore lint/suspicious/noExplicitAny: texture depends on the runtime\n\ttexture: any;\n\tnext?: RenderCommand;\n}\n\nclass CommandPool {\n\tprivate pool: RenderCommand[] = [];\n\tprivate inUse: RenderCommand[] = [];\n\n\tgetCommand (numVertices: number, numIndices: number, stride: number): RenderCommand {\n\t\tlet cmd: RenderCommand | undefined;\n\t\tfor (const c of this.pool) {\n\t\t\tif (c._positions.length >= numVertices * stride && c._indices.length >= numIndices) {\n\t\t\t\tcmd = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!cmd) {\n\t\t\tconst _positions = new Float32Array(numVertices * stride);\n\t\t\tconst _uvs = new Float32Array(numVertices << 1);\n\t\t\tconst _colors = new Uint32Array(numVertices);\n\t\t\tconst _darkColors = new Uint32Array(numVertices);\n\t\t\tconst _indices = new Uint16Array(numIndices);\n\t\t\tcmd = {\n\t\t\t\tpositions: _positions,\n\t\t\t\tuvs: _uvs,\n\t\t\t\tcolors: _colors,\n\t\t\t\tdarkColors: _darkColors,\n\t\t\t\tindices: _indices,\n\t\t\t\t_positions,\n\t\t\t\t_uvs,\n\t\t\t\t_colors,\n\t\t\t\t_darkColors,\n\t\t\t\t_indices,\n\t\t\t\tnumVertices,\n\t\t\t\tnumIndices,\n\t\t\t\tblendMode: BlendMode.Normal,\n\t\t\t\ttexture: null\n\t\t\t};\n\t\t} else {\n\t\t\tthis.pool.splice(this.pool.indexOf(cmd), 1);\n\t\t\tcmd.next = undefined;\n\t\t\tcmd.numVertices = numVertices;\n\t\t\tcmd.numIndices = numIndices;\n\n\t\t\tcmd.positions = cmd._positions.subarray(0, numVertices * stride);\n\t\t\tcmd.uvs = cmd._uvs.subarray(0, numVertices << 1);\n\t\t\tcmd.colors = cmd._colors.subarray(0, numVertices);\n\t\t\tcmd.darkColors = cmd._darkColors.subarray(0, numVertices);\n\t\t\tcmd.indices = cmd._indices.subarray(0, numIndices);\n\t\t}\n\n\t\tthis.inUse.push(cmd);\n\t\treturn cmd;\n\t}\n\n\treset (): void {\n\t\tthis.pool.push(...this.inUse);\n\t\tthis.inUse.length = 0;\n\t}\n}"],
  "mappings": "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",
  "names": ["TextureFilter", "TextureWrap", "page", "v", "SequenceMode", "Property", "x", "y", "constraint", "ii", "EventType", "Inherit", "ScaleYMode", "PositionMode", "SpacingMode", "RotateMode", "pathLength", "multiplier", "Physics", "n", "bone", "BlendMode", "iv", "cross", "name", "animationName", "LinkedMesh", "color", "readTimeline1", "color2", "readTimeline2", "readDrawOrder"]
}
