{"version":3,"file":"SkeletonBinary.mjs","sources":["../../src/core/SkeletonBinary.ts"],"sourcesContent":["import type { Attachment, AttachmentLoader, MeshAttachment, VertexAttachment } from './attachments';\nimport {\n    AlphaTimeline,\n    Animation,\n    AttachmentTimeline,\n    CurveTimeline,\n    CurveTimeline1,\n    CurveTimeline2,\n    DeformTimeline,\n    DrawOrderTimeline,\n    EventTimeline,\n    IkConstraintTimeline,\n    PathConstraintMixTimeline,\n    PathConstraintPositionTimeline,\n    PathConstraintSpacingTimeline,\n    RGB2Timeline,\n    RGBA2Timeline,\n    RGBATimeline,\n    RGBTimeline,\n    RotateTimeline,\n    ScaleTimeline,\n    ScaleXTimeline,\n    ScaleYTimeline,\n    SequenceTimeline,\n    ShearTimeline,\n    ShearXTimeline,\n    ShearYTimeline,\n    Timeline,\n    TransformConstraintTimeline,\n    TranslateTimeline,\n    TranslateXTimeline,\n    TranslateYTimeline,\n} from './Animation';\nimport { Event } from './Event';\nimport { SkeletonData } from './SkeletonData';\nimport { SlotData } from './SlotData';\nimport { BoneData } from './BoneData';\nimport { IkConstraintData } from './IkConstraintData';\nimport { TransformConstraintData } from './TransformConstraintData';\nimport { PathConstraintData, SpacingMode } from './PathConstraintData';\nimport { Skin } from './Skin';\nimport { EventData } from './EventData';\nimport { AttachmentType, BinaryInput, Color, IHasTextureRegion, PositionMode, Utils } from '@pixi-spine/base';\nimport { BLEND_MODES } from '@pixi/core';\nimport { Sequence, SequenceModeValues } from './attachments';\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.\n * @public\n * */\nexport class SkeletonBinary {\n    ver40 = false;\n    static BlendModeValues = [BLEND_MODES.NORMAL, BLEND_MODES.ADD, BLEND_MODES.MULTIPLY, BLEND_MODES.SCREEN];\n    /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n     * runtime than were used in Spine.\n     *\n     * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n    scale = 1;\n\n    attachmentLoader: AttachmentLoader;\n    private linkedMeshes = new Array<LinkedMesh>();\n\n    constructor(attachmentLoader: AttachmentLoader) {\n        this.attachmentLoader = attachmentLoader;\n    }\n\n    readSkeletonData(binary: Uint8Array): SkeletonData {\n        const scale = this.scale;\n\n        const skeletonData = new SkeletonData();\n\n        skeletonData.name = ''; // BOZO\n\n        const input = new BinaryInput(binary);\n\n        const lowHash = input.readInt32();\n        const highHash = input.readInt32();\n\n        skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);\n        skeletonData.version = input.readString();\n        const verShort = skeletonData.version.substr(0, 3);\n\n        if (verShort !== '4.0' && verShort !== '4.1') {\n            const error = `Spine 4.1 loader cant load version ${skeletonData.version}. Please configure your pixi-spine bundle`;\n\n            console.error(error);\n        }\n        this.ver40 = verShort === '4.0';\n        skeletonData.x = input.readFloat();\n        skeletonData.y = input.readFloat();\n        skeletonData.width = input.readFloat();\n        skeletonData.height = input.readFloat();\n\n        const nonessential = input.readBoolean();\n\n        if (nonessential) {\n            skeletonData.fps = input.readFloat();\n\n            skeletonData.imagesPath = input.readString();\n            skeletonData.audioPath = input.readString();\n        }\n\n        let n = 0;\n        // Strings.\n\n        n = input.readInt(true);\n        for (let i = 0; i < n; i++) {\n            const str = input.readString();\n\n            if (!str) throw new Error('String in string table must not be null.');\n            input.strings.push(str);\n        }\n\n        // Bones.\n        n = input.readInt(true);\n        for (let i = 0; i < n; i++) {\n            const name = input.readString();\n\n            if (!name) throw new Error('Bone name must not be null.');\n            const parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n            const data = new BoneData(i, name, parent);\n\n            data.rotation = input.readFloat();\n            data.x = input.readFloat() * scale;\n            data.y = input.readFloat() * scale;\n            data.scaleX = input.readFloat();\n            data.scaleY = input.readFloat();\n            data.shearX = input.readFloat();\n            data.shearY = input.readFloat();\n            data.length = input.readFloat() * scale;\n            data.transformMode = input.readInt(true);\n            data.skinRequired = input.readBoolean();\n            if (nonessential) Color.rgba8888ToColor(data.color, input.readInt32());\n            skeletonData.bones.push(data);\n        }\n\n        // Slots.\n        n = input.readInt(true);\n        for (let i = 0; i < n; i++) {\n            const slotName = input.readString();\n\n            if (!slotName) throw new Error('Slot name must not be null.');\n            const boneData = skeletonData.bones[input.readInt(true)];\n            const data = new SlotData(i, slotName, boneData);\n\n            Color.rgba8888ToColor(data.color, input.readInt32());\n\n            const darkColor = input.readInt32();\n\n            if (darkColor != -1) Color.rgb888ToColor((data.darkColor = new Color()), darkColor);\n\n            data.attachmentName = input.readStringRef();\n            data.blendMode = input.readInt(true);\n            skeletonData.slots.push(data);\n        }\n\n        // IK constraints.\n        n = input.readInt(true);\n        for (let i = 0, nn; i < n; i++) {\n            const name = input.readString();\n\n            if (!name) throw new Error('IK constraint data name must not be null.');\n            const data = new IkConstraintData(name);\n\n            data.order = input.readInt(true);\n            data.skinRequired = input.readBoolean();\n            nn = input.readInt(true);\n            for (let ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);\n            data.target = skeletonData.bones[input.readInt(true)];\n            data.mix = input.readFloat();\n            data.softness = input.readFloat() * scale;\n            data.bendDirection = input.readByte();\n            data.compress = input.readBoolean();\n            data.stretch = input.readBoolean();\n            data.uniform = input.readBoolean();\n            skeletonData.ikConstraints.push(data);\n        }\n\n        // Transform constraints.\n        n = input.readInt(true);\n        for (let i = 0, nn; i < n; i++) {\n            const name = input.readString();\n\n            if (!name) throw new Error('Transform constraint data name must not be null.');\n            const data = new TransformConstraintData(name);\n\n            data.order = input.readInt(true);\n            data.skinRequired = input.readBoolean();\n            nn = input.readInt(true);\n            for (let ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);\n            data.target = skeletonData.bones[input.readInt(true)];\n            data.local = input.readBoolean();\n            data.relative = input.readBoolean();\n            data.offsetRotation = input.readFloat();\n            data.offsetX = input.readFloat() * scale;\n            data.offsetY = input.readFloat() * scale;\n            data.offsetScaleX = input.readFloat();\n            data.offsetScaleY = input.readFloat();\n            data.offsetShearY = input.readFloat();\n            data.mixRotate = input.readFloat();\n            data.mixX = input.readFloat();\n            data.mixY = input.readFloat();\n            data.mixScaleX = input.readFloat();\n            data.mixScaleY = input.readFloat();\n            data.mixShearY = input.readFloat();\n            skeletonData.transformConstraints.push(data);\n        }\n\n        // Path constraints.\n        n = input.readInt(true);\n        for (let i = 0, nn; i < n; i++) {\n            const name = input.readString();\n\n            if (!name) throw new Error('Path constraint data name must not be null.');\n            const data = new PathConstraintData(name);\n\n            data.order = input.readInt(true);\n            data.skinRequired = input.readBoolean();\n            nn = input.readInt(true);\n            for (let ii = 0; ii < nn; ii++) data.bones.push(skeletonData.bones[input.readInt(true)]);\n            data.target = skeletonData.slots[input.readInt(true)];\n            data.positionMode = input.readInt(true);\n            data.spacingMode = input.readInt(true);\n            data.rotateMode = input.readInt(true);\n            data.offsetRotation = input.readFloat();\n            data.position = input.readFloat();\n            if (data.positionMode == PositionMode.Fixed) data.position *= scale;\n            data.spacing = input.readFloat();\n            if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale;\n            data.mixRotate = input.readFloat();\n            data.mixX = input.readFloat();\n            data.mixY = input.readFloat();\n            skeletonData.pathConstraints.push(data);\n        }\n\n        // Default skin.\n        const defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n\n        if (defaultSkin) {\n            skeletonData.defaultSkin = defaultSkin;\n            skeletonData.skins.push(defaultSkin);\n        }\n\n        // Skins.\n        {\n            let i = skeletonData.skins.length;\n\n            Utils.setArraySize(skeletonData.skins, (n = i + input.readInt(true)));\n            for (; i < n; i++) {\n                const skin = this.readSkin(input, skeletonData, false, nonessential);\n\n                if (!skin) throw new Error('readSkin() should not have returned null.');\n                skeletonData.skins[i] = skin;\n            }\n        }\n\n        // Linked meshes.\n        n = this.linkedMeshes.length;\n        for (let i = 0; i < n; i++) {\n            const linkedMesh = this.linkedMeshes[i];\n            const skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n\n            if (!skin) throw new Error('Not skin found for linked mesh.');\n            if (!linkedMesh.parent) throw new Error('Linked mesh parent must not be null');\n            const parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n\n            if (!parent) throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n            linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? (parent as VertexAttachment) : linkedMesh.mesh;\n            linkedMesh.mesh.setParentMesh(parent as MeshAttachment);\n            // if (linkedMesh.mesh.region != null) linkedMesh.mesh.updateRegion();\n        }\n        this.linkedMeshes.length = 0;\n\n        // Events.\n        n = input.readInt(true);\n        for (let i = 0; i < n; i++) {\n            const eventName = input.readStringRef();\n\n            if (!eventName) throw new Error();\n            const data = new EventData(eventName);\n\n            data.intValue = input.readInt(false);\n            data.floatValue = input.readFloat();\n            data.stringValue = input.readString();\n            data.audioPath = input.readString();\n            if (data.audioPath) {\n                data.volume = input.readFloat();\n                data.balance = input.readFloat();\n            }\n            skeletonData.events.push(data);\n        }\n\n        // Animations.\n        n = input.readInt(true);\n        for (let i = 0; i < n; i++) {\n            const animationName = input.readString();\n\n            if (!animationName) throw new Error('Animatio name must not be null.');\n            skeletonData.animations.push(this.readAnimation(input, animationName, skeletonData));\n        }\n\n        return skeletonData;\n    }\n\n    private readSkin(input: BinaryInput, skeletonData: SkeletonData, defaultSkin: boolean, nonessential: boolean): Skin | null {\n        let skin = null;\n        let slotCount = 0;\n\n        if (defaultSkin) {\n            slotCount = input.readInt(true);\n            if (slotCount == 0) return null;\n            skin = new Skin('default');\n        } else {\n            const skinName = input.readStringRef();\n\n            if (!skinName) throw new Error('Skin name must not be null.');\n            skin = new Skin(skinName);\n            skin.bones.length = input.readInt(true);\n            for (let i = 0, n = skin.bones.length; i < n; i++) skin.bones[i] = skeletonData.bones[input.readInt(true)];\n\n            for (let i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n            for (let i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n            for (let i = 0, n = input.readInt(true); i < n; i++) skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n\n            slotCount = input.readInt(true);\n        }\n\n        for (let i = 0; i < slotCount; i++) {\n            const slotIndex = input.readInt(true);\n\n            for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n                const name = input.readStringRef();\n\n                if (!name) throw new Error('Attachment name must not be null');\n                const attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);\n\n                if (attachment) skin.setAttachment(slotIndex, name, attachment);\n            }\n        }\n\n        return skin;\n    }\n\n    private readAttachment(input: BinaryInput, skeletonData: SkeletonData, skin: Skin, slotIndex: number, attachmentName: string, nonessential: boolean): Attachment | null {\n        const scale = this.scale;\n\n        let name = input.readStringRef();\n\n        if (!name) name = attachmentName;\n\n        switch (input.readByte()) {\n            case AttachmentType.Region: {\n                let path = input.readStringRef();\n                const rotation = input.readFloat();\n                const x = input.readFloat();\n                const y = input.readFloat();\n                const scaleX = input.readFloat();\n                const scaleY = input.readFloat();\n                const width = input.readFloat();\n                const height = input.readFloat();\n                const color = input.readInt32();\n                const sequence = this.readSequence(input);\n\n                if (!path) path = name;\n                const region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n\n                if (!region) return null;\n                region.path = path;\n                region.x = x * scale;\n                region.y = y * scale;\n                region.scaleX = scaleX;\n                region.scaleY = scaleY;\n                region.rotation = rotation;\n                region.width = width * scale;\n                region.height = height * scale;\n                Color.rgba8888ToColor(region.color, color);\n                region.sequence = sequence;\n                if (sequence == null) region.updateRegion();\n\n                return region;\n            }\n            case AttachmentType.BoundingBox: {\n                const vertexCount = input.readInt(true);\n                const vertices = this.readVertices(input, vertexCount);\n                const color = nonessential ? input.readInt32() : 0;\n\n                const box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n\n                if (!box) return null;\n                box.worldVerticesLength = vertexCount << 1;\n                box.vertices = vertices.vertices;\n                box.bones = vertices.bones;\n                if (nonessential) Color.rgba8888ToColor(box.color, color);\n\n                return box;\n            }\n            case AttachmentType.Mesh: {\n                let path = input.readStringRef();\n                const color = input.readInt32();\n                const vertexCount = input.readInt(true);\n                const uvs = this.readFloatArray(input, vertexCount << 1, 1);\n                const triangles = this.readShortArray(input);\n                const vertices = this.readVertices(input, vertexCount);\n                const hullLength = input.readInt(true);\n                const sequence = this.readSequence(input);\n                let edges: number[] = [];\n                let width = 0;\n                let height = 0;\n\n                if (nonessential) {\n                    edges = this.readShortArray(input);\n                    width = input.readFloat();\n                    height = input.readFloat();\n                }\n\n                if (!path) path = name;\n                const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n\n                if (!mesh) return null;\n                mesh.path = path;\n                Color.rgba8888ToColor(mesh.color, color);\n                mesh.bones = vertices.bones;\n                mesh.vertices = vertices.vertices;\n                mesh.worldVerticesLength = vertexCount << 1;\n                mesh.triangles = triangles;\n                mesh.regionUVs = new Float32Array(uvs);\n                // if (sequence == null) mesh.updateRegion();\n                mesh.hullLength = hullLength << 1;\n                mesh.sequence = sequence;\n                if (nonessential) {\n                    mesh.edges = edges;\n                    mesh.width = width * scale;\n                    mesh.height = height * scale;\n                }\n\n                return mesh;\n            }\n            case AttachmentType.LinkedMesh: {\n                let path = input.readStringRef();\n                const color = input.readInt32();\n                const skinName = input.readStringRef();\n                const parent = input.readStringRef();\n                const inheritTimelines = input.readBoolean();\n                const sequence = this.readSequence(input);\n                let width = 0;\n                let height = 0;\n\n                if (nonessential) {\n                    width = input.readFloat();\n                    height = input.readFloat();\n                }\n\n                if (!path) path = name;\n                const mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n\n                if (!mesh) return null;\n                mesh.path = path;\n                Color.rgba8888ToColor(mesh.color, color);\n                mesh.sequence = sequence;\n                if (nonessential) {\n                    mesh.width = width * scale;\n                    mesh.height = height * scale;\n                }\n                this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritTimelines));\n\n                return mesh;\n            }\n            case AttachmentType.Path: {\n                const closed = input.readBoolean();\n                const constantSpeed = input.readBoolean();\n                const vertexCount = input.readInt(true);\n                const vertices = this.readVertices(input, vertexCount);\n                const lengths = Utils.newArray(vertexCount / 3, 0);\n\n                for (let i = 0, n = lengths.length; i < n; i++) lengths[i] = input.readFloat() * scale;\n                const color = nonessential ? input.readInt32() : 0;\n\n                const path = this.attachmentLoader.newPathAttachment(skin, name);\n\n                if (!path) return null;\n                path.closed = closed;\n                path.constantSpeed = constantSpeed;\n                path.worldVerticesLength = vertexCount << 1;\n                path.vertices = vertices.vertices;\n                path.bones = vertices.bones;\n                path.lengths = lengths;\n                if (nonessential) Color.rgba8888ToColor(path.color, color);\n\n                return path;\n            }\n            case AttachmentType.Point: {\n                const rotation = input.readFloat();\n                const x = input.readFloat();\n                const y = input.readFloat();\n                const color = nonessential ? input.readInt32() : 0;\n\n                const point = this.attachmentLoader.newPointAttachment(skin, name);\n\n                if (!point) return null;\n                point.x = x * scale;\n                point.y = y * scale;\n                point.rotation = rotation;\n                if (nonessential) Color.rgba8888ToColor(point.color, color);\n\n                return point;\n            }\n            case AttachmentType.Clipping: {\n                const endSlotIndex = input.readInt(true);\n                const vertexCount = input.readInt(true);\n                const vertices = this.readVertices(input, vertexCount);\n                const color = nonessential ? input.readInt32() : 0;\n\n                const clip = this.attachmentLoader.newClippingAttachment(skin, name);\n\n                if (!clip) return null;\n                clip.endSlot = skeletonData.slots[endSlotIndex];\n                clip.worldVerticesLength = vertexCount << 1;\n                clip.vertices = vertices.vertices;\n                clip.bones = vertices.bones;\n                if (nonessential) Color.rgba8888ToColor(clip.color, color);\n\n                return clip;\n            }\n        }\n\n        return null;\n    }\n\n    private readSequence(input: BinaryInput) {\n        if (this.ver40 || !input.readBoolean()) return null;\n        const sequence = new Sequence(input.readInt(true));\n\n        sequence.start = input.readInt(true);\n        sequence.digits = input.readInt(true);\n        sequence.setupIndex = input.readInt(true);\n\n        return sequence;\n    }\n\n    private readDeformTimelineType(input: BinaryInput) {\n        if (this.ver40) return ATTACHMENT_DEFORM;\n\n        return input.readByte();\n    }\n\n    private readVertices(input: BinaryInput, vertexCount: number): Vertices {\n        const scale = this.scale;\n        const verticesLength = vertexCount << 1;\n        const vertices = new Vertices();\n\n        if (!input.readBoolean()) {\n            vertices.vertices = this.readFloatArray(input, verticesLength, scale);\n\n            return vertices;\n        }\n        const weights = new Array<number>();\n        const bonesArray = new Array<number>();\n\n        for (let i = 0; i < vertexCount; i++) {\n            const boneCount = input.readInt(true);\n\n            bonesArray.push(boneCount);\n            for (let ii = 0; ii < boneCount; ii++) {\n                bonesArray.push(input.readInt(true));\n                weights.push(input.readFloat() * scale);\n                weights.push(input.readFloat() * scale);\n                weights.push(input.readFloat());\n            }\n        }\n        vertices.vertices = Utils.toFloatArray(weights);\n        vertices.bones = bonesArray;\n\n        return vertices;\n    }\n\n    private readFloatArray(input: BinaryInput, n: number, scale: number): number[] {\n        const array = new Array<number>(n);\n\n        if (scale == 1) {\n            for (let i = 0; i < n; i++) array[i] = input.readFloat();\n        } else {\n            for (let i = 0; i < n; i++) array[i] = input.readFloat() * scale;\n        }\n\n        return array;\n    }\n\n    private readShortArray(input: BinaryInput): number[] {\n        const n = input.readInt(true);\n        const array = new Array<number>(n);\n\n        for (let i = 0; i < n; i++) array[i] = input.readShort();\n\n        return array;\n    }\n\n    private readAnimation(input: BinaryInput, name: string, skeletonData: SkeletonData): Animation {\n        input.readInt(true); // Number of timelines.\n        const timelines = new Array<Timeline>();\n        const scale = this.scale;\n        // Slot timelines.\n\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const slotIndex = input.readInt(true);\n\n            for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n                const timelineType = input.readByte();\n                const frameCount = input.readInt(true);\n                const frameLast = frameCount - 1;\n\n                switch (timelineType) {\n                    case SLOT_ATTACHMENT: {\n                        const timeline = new AttachmentTimeline(frameCount, slotIndex);\n\n                        for (let frame = 0; frame < frameCount; frame++) timeline.setFrame(frame, input.readFloat(), input.readStringRef());\n                        timelines.push(timeline);\n                        break;\n                    }\n                    case SLOT_RGBA: {\n                        const bezierCount = input.readInt(true);\n                        const timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n\n                        let time = input.readFloat();\n                        let r = input.readUnsignedByte() / 255.0;\n                        let g = input.readUnsignedByte() / 255.0;\n                        let b = input.readUnsignedByte() / 255.0;\n                        let a = input.readUnsignedByte() / 255.0;\n\n                        for (let frame = 0, bezier = 0; ; frame++) {\n                            timeline.setFrame(frame, time, r, g, b, a);\n                            if (frame == frameLast) break;\n\n                            const time2 = input.readFloat();\n                            const r2 = input.readUnsignedByte() / 255.0;\n                            const g2 = input.readUnsignedByte() / 255.0;\n                            const b2 = input.readUnsignedByte() / 255.0;\n                            const a2 = input.readUnsignedByte() / 255.0;\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n                            }\n                            time = time2;\n                            r = r2;\n                            g = g2;\n                            b = b2;\n                            a = a2;\n                        }\n                        timelines.push(timeline);\n                        break;\n                    }\n                    case SLOT_RGB: {\n                        const bezierCount = input.readInt(true);\n                        const timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n\n                        let time = input.readFloat();\n                        let r = input.readUnsignedByte() / 255.0;\n                        let g = input.readUnsignedByte() / 255.0;\n                        let b = input.readUnsignedByte() / 255.0;\n\n                        for (let frame = 0, bezier = 0; ; frame++) {\n                            timeline.setFrame(frame, time, r, g, b);\n                            if (frame == frameLast) break;\n\n                            const time2 = input.readFloat();\n                            const r2 = input.readUnsignedByte() / 255.0;\n                            const g2 = input.readUnsignedByte() / 255.0;\n                            const b2 = input.readUnsignedByte() / 255.0;\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n                            }\n                            time = time2;\n                            r = r2;\n                            g = g2;\n                            b = b2;\n                        }\n                        timelines.push(timeline);\n                        break;\n                    }\n                    case SLOT_RGBA2: {\n                        const bezierCount = input.readInt(true);\n                        const timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n\n                        let time = input.readFloat();\n                        let r = input.readUnsignedByte() / 255.0;\n                        let g = input.readUnsignedByte() / 255.0;\n                        let b = input.readUnsignedByte() / 255.0;\n                        let a = input.readUnsignedByte() / 255.0;\n                        let r2 = input.readUnsignedByte() / 255.0;\n                        let g2 = input.readUnsignedByte() / 255.0;\n                        let b2 = input.readUnsignedByte() / 255.0;\n\n                        for (let frame = 0, bezier = 0; ; frame++) {\n                            timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n                            if (frame == frameLast) break;\n                            const time2 = input.readFloat();\n                            const nr = input.readUnsignedByte() / 255.0;\n                            const ng = input.readUnsignedByte() / 255.0;\n                            const nb = input.readUnsignedByte() / 255.0;\n                            const na = input.readUnsignedByte() / 255.0;\n                            const nr2 = input.readUnsignedByte() / 255.0;\n                            const ng2 = input.readUnsignedByte() / 255.0;\n                            const nb2 = input.readUnsignedByte() / 255.0;\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n                                    setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n                                    setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n                                    setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n                                    setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n                            }\n                            time = time2;\n                            r = nr;\n                            g = ng;\n                            b = nb;\n                            a = na;\n                            r2 = nr2;\n                            g2 = ng2;\n                            b2 = nb2;\n                        }\n                        timelines.push(timeline);\n                        break;\n                    }\n                    case SLOT_RGB2: {\n                        const bezierCount = input.readInt(true);\n                        const timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n\n                        let time = input.readFloat();\n                        let r = input.readUnsignedByte() / 255.0;\n                        let g = input.readUnsignedByte() / 255.0;\n                        let b = input.readUnsignedByte() / 255.0;\n                        let r2 = input.readUnsignedByte() / 255.0;\n                        let g2 = input.readUnsignedByte() / 255.0;\n                        let b2 = input.readUnsignedByte() / 255.0;\n\n                        for (let frame = 0, bezier = 0; ; frame++) {\n                            timeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n                            if (frame == frameLast) break;\n                            const time2 = input.readFloat();\n                            const nr = input.readUnsignedByte() / 255.0;\n                            const ng = input.readUnsignedByte() / 255.0;\n                            const nb = input.readUnsignedByte() / 255.0;\n                            const nr2 = input.readUnsignedByte() / 255.0;\n                            const ng2 = input.readUnsignedByte() / 255.0;\n                            const nb2 = input.readUnsignedByte() / 255.0;\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n                                    setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n                                    setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n                                    setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n                            }\n                            time = time2;\n                            r = nr;\n                            g = ng;\n                            b = nb;\n                            r2 = nr2;\n                            g2 = ng2;\n                            b2 = nb2;\n                        }\n                        timelines.push(timeline);\n                        break;\n                    }\n                    case SLOT_ALPHA: {\n                        const timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n                        let time = input.readFloat();\n                        let a = input.readUnsignedByte() / 255;\n\n                        for (let frame = 0, bezier = 0; ; frame++) {\n                            timeline.setFrame(frame, time, a);\n                            if (frame == frameLast) break;\n                            const time2 = input.readFloat();\n                            const a2 = input.readUnsignedByte() / 255;\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n                            }\n                            time = time2;\n                            a = a2;\n                        }\n                        timelines.push(timeline);\n                    }\n                }\n            }\n        }\n\n        // Bone timelines.\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const boneIndex = input.readInt(true);\n\n            for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n                const type = input.readByte();\n                const frameCount = input.readInt(true);\n                const bezierCount = input.readInt(true);\n\n                switch (type) {\n                    case BONE_ROTATE:\n                        timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_TRANSLATE:\n                        timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));\n                        break;\n                    case BONE_TRANSLATEX:\n                        timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));\n                        break;\n                    case BONE_TRANSLATEY:\n                        timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));\n                        break;\n                    case BONE_SCALE:\n                        timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_SCALEX:\n                        timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_SCALEY:\n                        timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_SHEAR:\n                        timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_SHEARX:\n                        timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));\n                        break;\n                    case BONE_SHEARY:\n                        timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));\n                }\n            }\n        }\n\n        // IK constraint timelines.\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const index = input.readInt(true);\n            const frameCount = input.readInt(true);\n            const frameLast = frameCount - 1;\n            const timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n            let time = input.readFloat();\n            let mix = input.readFloat();\n            let softness = input.readFloat() * scale;\n\n            for (let frame = 0, bezier = 0; ; frame++) {\n                timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());\n                if (frame == frameLast) break;\n                const time2 = input.readFloat();\n                const mix2 = input.readFloat();\n                const softness2 = input.readFloat() * scale;\n\n                switch (input.readByte()) {\n                    case CURVE_STEPPED:\n                        timeline.setStepped(frame);\n                        break;\n                    case CURVE_BEZIER:\n                        setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n                        setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n                }\n                time = time2;\n                mix = mix2;\n                softness = softness2;\n            }\n            timelines.push(timeline);\n        }\n\n        // Transform constraint timelines.\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const index = input.readInt(true);\n            const frameCount = input.readInt(true);\n            const frameLast = frameCount - 1;\n            const timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n            let time = input.readFloat();\n            let mixRotate = input.readFloat();\n            let mixX = input.readFloat();\n            let mixY = input.readFloat();\n            let mixScaleX = input.readFloat();\n            let mixScaleY = input.readFloat();\n            let mixShearY = input.readFloat();\n\n            for (let frame = 0, bezier = 0; ; frame++) {\n                timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n                if (frame == frameLast) break;\n                const time2 = input.readFloat();\n                const mixRotate2 = input.readFloat();\n                const mixX2 = input.readFloat();\n                const mixY2 = input.readFloat();\n                const mixScaleX2 = input.readFloat();\n                const mixScaleY2 = input.readFloat();\n                const mixShearY2 = input.readFloat();\n\n                switch (input.readByte()) {\n                    case CURVE_STEPPED:\n                        timeline.setStepped(frame);\n                        break;\n                    case CURVE_BEZIER:\n                        setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n                        setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n                        setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n                        setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n                        setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n                        setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n                }\n                time = time2;\n                mixRotate = mixRotate2;\n                mixX = mixX2;\n                mixY = mixY2;\n                mixScaleX = mixScaleX2;\n                mixScaleY = mixScaleY2;\n                mixShearY = mixShearY2;\n            }\n            timelines.push(timeline);\n        }\n\n        // Path constraint timelines.\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const index = input.readInt(true);\n            const data = skeletonData.pathConstraints[index];\n\n            for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n                switch (input.readByte()) {\n                    case PATH_POSITION:\n                        timelines.push(\n                            readTimeline1(\n                                input,\n                                new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index),\n                                data.positionMode == PositionMode.Fixed ? scale : 1\n                            )\n                        );\n                        break;\n                    case PATH_SPACING:\n                        timelines.push(\n                            readTimeline1(\n                                input,\n                                new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index),\n                                data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1\n                            )\n                        );\n                        break;\n                    case PATH_MIX:\n                        const timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);\n                        let time = input.readFloat();\n                        let mixRotate = input.readFloat();\n                        let mixX = input.readFloat();\n                        let mixY = input.readFloat();\n\n                        for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n                            timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n                            if (frame == frameLast) break;\n                            const time2 = input.readFloat();\n                            const mixRotate2 = input.readFloat();\n                            const mixX2 = input.readFloat();\n                            const mixY2 = input.readFloat();\n\n                            switch (input.readByte()) {\n                                case CURVE_STEPPED:\n                                    timeline.setStepped(frame);\n                                    break;\n                                case CURVE_BEZIER:\n                                    setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n                                    setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n                            }\n                            time = time2;\n                            mixRotate = mixRotate2;\n                            mixX = mixX2;\n                            mixY = mixY2;\n                        }\n                        timelines.push(timeline);\n                }\n            }\n        }\n\n        // Deform timelines.\n        for (let i = 0, n = input.readInt(true); i < n; i++) {\n            const skin = skeletonData.skins[input.readInt(true)];\n\n            for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n                const slotIndex = input.readInt(true);\n\n                for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n                    const attachmentName = input.readStringRef();\n\n                    if (!attachmentName) throw new Error('attachmentName must not be null.');\n                    const attachment = skin.getAttachment(slotIndex, attachmentName);\n                    const timelineType = this.readDeformTimelineType(input);\n                    const frameCount = input.readInt(true);\n                    const frameLast = frameCount - 1;\n\n                    switch (timelineType) {\n                        case ATTACHMENT_DEFORM: {\n                            const vertexAttachment = attachment as VertexAttachment;\n                            const weighted = vertexAttachment.bones;\n                            const vertices = vertexAttachment.vertices;\n                            const deformLength = weighted ? (vertices.length / 3) * 2 : vertices.length;\n\n                            const bezierCount = input.readInt(true);\n                            const timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);\n\n                            let time = input.readFloat();\n\n                            for (let frame = 0, bezier = 0; ; frame++) {\n                                let deform;\n                                let end = input.readInt(true);\n\n                                if (end == 0) deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n                                else {\n                                    deform = Utils.newFloatArray(deformLength);\n                                    const start = input.readInt(true);\n\n                                    end += start;\n                                    /* eslint-disable max-depth*/\n                                    if (scale == 1) {\n                                        for (let v = start; v < end; v++) deform[v] = input.readFloat();\n                                    } else {\n                                        for (let v = start; v < end; v++) deform[v] = input.readFloat() * scale;\n                                    }\n                                    if (!weighted) {\n                                        for (let v = 0, vn = deform.length; v < vn; v++) deform[v] += vertices[v];\n                                    }\n                                    /* eslint-enable max-depth*/\n                                }\n\n                                timeline.setFrame(frame, time, deform);\n                                if (frame == frameLast) break;\n                                const time2 = input.readFloat();\n\n                                switch (input.readByte()) {\n                                    case CURVE_STEPPED:\n                                        timeline.setStepped(frame);\n                                        break;\n                                    case CURVE_BEZIER:\n                                        setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n                                }\n                                time = time2;\n                            }\n                            timelines.push(timeline);\n                            break;\n                        }\n                        case ATTACHMENT_SEQUENCE: {\n                            const timeline = new SequenceTimeline(frameCount, slotIndex, attachment as unknown as IHasTextureRegion);\n\n                            for (let frame = 0; frame < frameCount; frame++) {\n                                const time = input.readFloat();\n                                const modeAndIndex = input.readInt32();\n\n                                timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4, input.readFloat());\n                            }\n                            timelines.push(timeline);\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n\n        // Draw order timeline.\n        const drawOrderCount = input.readInt(true);\n\n        if (drawOrderCount > 0) {\n            const timeline = new DrawOrderTimeline(drawOrderCount);\n            const slotCount = skeletonData.slots.length;\n\n            for (let i = 0; i < drawOrderCount; i++) {\n                const time = input.readFloat();\n                const offsetCount = input.readInt(true);\n                const drawOrder = Utils.newArray(slotCount, 0);\n\n                for (let ii = slotCount - 1; ii >= 0; ii--) drawOrder[ii] = -1;\n                const unchanged = Utils.newArray(slotCount - offsetCount, 0);\n                let originalIndex = 0;\n                let unchangedIndex = 0;\n\n                for (let ii = 0; ii < offsetCount; ii++) {\n                    const slotIndex = input.readInt(true);\n                    // Collect unchanged items.\n\n                    while (originalIndex != slotIndex) unchanged[unchangedIndex++] = originalIndex++;\n                    // Set changed items.\n                    drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n                }\n                // Collect remaining unchanged items.\n                while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++;\n                // Fill in unchanged items.\n                for (let ii = slotCount - 1; ii >= 0; ii--) if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex];\n                timeline.setFrame(i, time, drawOrder);\n            }\n            timelines.push(timeline);\n        }\n\n        // Event timeline.\n        const eventCount = input.readInt(true);\n\n        if (eventCount > 0) {\n            const timeline = new EventTimeline(eventCount);\n\n            for (let i = 0; i < eventCount; i++) {\n                const time = input.readFloat();\n                const eventData = skeletonData.events[input.readInt(true)];\n                const event = new Event(time, eventData);\n\n                event.intValue = input.readInt(false);\n                event.floatValue = input.readFloat();\n                event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n                if (event.data.audioPath) {\n                    event.volume = input.readFloat();\n                    event.balance = input.readFloat();\n                }\n                timeline.setFrame(i, event);\n            }\n            timelines.push(timeline);\n        }\n\n        let duration = 0;\n\n        for (let i = 0, n = timelines.length; i < n; i++) duration = Math.max(duration, timelines[i].getDuration());\n\n        return new Animation(name, timelines, duration);\n    }\n}\n\nclass LinkedMesh {\n    parent: string | null;\n    skin: string | null;\n    slotIndex: number;\n    mesh: MeshAttachment;\n    inheritTimeline: boolean;\n\n    constructor(mesh: MeshAttachment, skin: string | null, slotIndex: number, parent: string | null, inheritDeform: boolean) {\n        this.mesh = mesh;\n        this.skin = skin;\n        this.slotIndex = slotIndex;\n        this.parent = parent;\n        this.inheritTimeline = inheritDeform;\n    }\n}\n\nclass Vertices {\n    constructor(public bones: Array<number> | null = null, public vertices: Array<number> | Float32Array | null = null) {}\n}\n\nfunction readTimeline1(input: BinaryInput, timeline: CurveTimeline1, scale: number): CurveTimeline1 {\n    let time = input.readFloat();\n    let value = input.readFloat() * scale;\n\n    for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n        timeline.setFrame(frame, time, value);\n        if (frame == frameLast) break;\n        const time2 = input.readFloat();\n        const value2 = input.readFloat() * scale;\n\n        switch (input.readByte()) {\n            case CURVE_STEPPED:\n                timeline.setStepped(frame);\n                break;\n            case CURVE_BEZIER:\n                setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n        }\n        time = time2;\n        value = value2;\n    }\n\n    return timeline;\n}\n\nfunction readTimeline2(input: BinaryInput, timeline: CurveTimeline2, scale: number): CurveTimeline2 {\n    let time = input.readFloat();\n    let value1 = input.readFloat() * scale;\n    let value2 = input.readFloat() * scale;\n\n    for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n        timeline.setFrame(frame, time, value1, value2);\n        if (frame == frameLast) break;\n        const time2 = input.readFloat();\n        const nvalue1 = input.readFloat() * scale;\n        const nvalue2 = input.readFloat() * scale;\n\n        switch (input.readByte()) {\n            case CURVE_STEPPED:\n                timeline.setStepped(frame);\n                break;\n            case CURVE_BEZIER:\n                setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n                setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n        }\n        time = time2;\n        value1 = nvalue1;\n        value2 = nvalue2;\n    }\n\n    return timeline;\n}\n\nfunction setBezier(\n    input: BinaryInput,\n    timeline: CurveTimeline,\n    bezier: number,\n    frame: number,\n    value: number,\n    time1: number,\n    time2: number,\n    value1: number,\n    value2: number,\n    scale: number\n) {\n    timeline.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;\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 ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\n\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\n\n// const CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n"],"names":[],"mappings":"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"}