@zephyr3d/editor 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{index-DzQzWsCG.js → index-DlnbO59X.js} +2 -2
- package/dist/assistant/zephyr-types-index.json +9 -10
- package/dist/index.html +1 -1
- package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_base.js +152 -152
- package/dist/modules/zephyr3d_base.js.map +1 -1
- package/dist/modules/zephyr3d_device.js +15 -15
- package/dist/modules/zephyr3d_device.js.map +1 -1
- package/dist/modules/zephyr3d_loaders.js +6 -6
- package/dist/modules/zephyr3d_loaders.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +1382 -1385
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
- package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/base/dist/vfs/common.js +152 -152
- package/dist/vendor/zephyr3d/base/dist/vfs/common.js.map +1 -1
- package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
- package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +6 -6
- package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +191 -194
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
- package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +119 -119
- package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js +62 -62
- package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
- package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
- package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
- package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
- package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
- package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
- package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
- package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
- package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +275 -275
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/package.json +3 -3
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf_importer.js","sources":["../../src/gltf/gltf_importer.ts"],"sourcesContent":["import type * as draco3d from 'draco3d';\r\nimport type { DeepPartial, InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\r\nimport {\r\n Vector3,\r\n Vector4,\r\n Matrix4x4,\r\n Quaternion,\r\n Interpolator,\r\n InterpolatorScalar,\r\n ASSERT\r\n} from '@zephyr3d/base';\r\nimport { AssetHierarchyNode } from '@zephyr3d/scene';\r\nimport type {\r\n AssetJointDynamicsCollider,\r\n AssetJointDynamicsFlatPlane,\r\n AssetMeshData,\r\n AssetAnimationData,\r\n AssetSubMeshData,\r\n AssetMaterial,\r\n AssetUnlitMaterial,\r\n AssetPBRMaterialMR,\r\n AssetPBRMaterialSG,\r\n AssetMaterialCommon,\r\n AssetPBRMaterialCommon,\r\n AssetAnimationTrack,\r\n AssetMorphTargetBinding,\r\n AssetPrimitiveInfo,\r\n AssetTextureInfo,\r\n AssetSpringBoneCollider,\r\n AssetSpringBoneColliderGroup,\r\n AssetSpringBoneJoint,\r\n SharedModel,\r\n ControllerConfig\r\n} from '@zephyr3d/scene';\r\nimport { AssetSkeleton, AssetScene } from '@zephyr3d/scene';\r\nimport type { HumanoidJointMapping } from '@zephyr3d/scene';\r\nimport { HumanoidBodyRig, HumanoidHandRig } from '@zephyr3d/scene';\r\nimport {\r\n BoundingBox,\r\n DracoMeshDecoder,\r\n getEngine,\r\n MORPH_TARGET_COLOR,\r\n MORPH_TARGET_NORMAL,\r\n MORPH_TARGET_POSITION,\r\n MORPH_TARGET_TANGENT,\r\n MORPH_TARGET_TEX0,\r\n MORPH_TARGET_TEX1,\r\n MORPH_TARGET_TEX2,\r\n MORPH_TARGET_TEX3\r\n} from '@zephyr3d/scene';\r\nimport { ColliderForce, getDevice } from '@zephyr3d/scene';\r\nimport { ComponentType, GLTFAccessor } from './helpers';\r\nimport type { VertexAttribFormat } from '@zephyr3d/device';\r\nimport {\r\n type VertexSemantic,\r\n type TextureAddressMode,\r\n type TextureFilterMode,\r\n type AbstractDevice,\r\n getVertexFormatComponentCount,\r\n getVertexAttribName,\r\n getVertexAttributeIndex\r\n} from '@zephyr3d/device';\r\nimport type {\r\n AnimationChannel,\r\n AnimationSampler,\r\n GlTf,\r\n Material,\r\n MeshPrimitive,\r\n TextureInfo\r\n} from './gltf_types';\r\nimport { AbstractModelImporter } from '../importer';\r\n\r\ntype SpringBoneJointInfo = {\r\n node?: unknown;\r\n hitRadius?: number;\r\n stiffness?: number;\r\n gravityPower?: number;\r\n gravityDir?: unknown;\r\n dragForce?: number;\r\n};\r\n\r\ntype VRMC0BlendShapeBindInfo = {\r\n mesh?: unknown;\r\n index?: unknown;\r\n weight?: unknown;\r\n};\r\n\r\ntype VRMC0BlendShapeGroupInfo = {\r\n name?: unknown;\r\n presetName?: unknown;\r\n binds?: unknown;\r\n};\r\n\r\ntype VRMC1MorphTargetBindInfo = {\r\n node?: unknown;\r\n index?: unknown;\r\n weight?: unknown;\r\n};\r\n\r\ntype VRMC1ExpressionInfo = {\r\n isBinary?: unknown;\r\n morphTargetBinds?: unknown;\r\n};\r\n\r\ntype VRMCMToonTextureInfo = TextureInfo & {\r\n scale?: number;\r\n};\r\n\r\ntype VRMCMToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\r\n\r\ntype VRMCMToonMaterialInfo = {\r\n transparentWithZWrite?: boolean;\r\n renderQueueOffsetNumber?: number;\r\n shadeColorFactor?: number[];\r\n shadeMultiplyTexture?: TextureInfo;\r\n shadingShiftFactor?: number;\r\n shadingShiftTexture?: VRMCMToonTextureInfo;\r\n shadingToonyFactor?: number;\r\n giEqualizationFactor?: number;\r\n matcapFactor?: number[];\r\n matcapTexture?: TextureInfo;\r\n parametricRimColorFactor?: number[];\r\n parametricRimFresnelPowerFactor?: number;\r\n parametricRimLiftFactor?: number;\r\n rimMultiplyTexture?: TextureInfo;\r\n rimLightingMixFactor?: number;\r\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\r\n outlineWidthFactor?: number;\r\n outlineWidthMultiplyTexture?: TextureInfo;\r\n outlineColorFactor?: number[];\r\n outlineLightingMixFactor?: number;\r\n uvAnimationMaskTexture?: TextureInfo;\r\n uvAnimationScrollXSpeedFactor?: number;\r\n uvAnimationScrollYSpeedFactor?: number;\r\n uvAnimationRotationSpeedFactor?: number;\r\n};\r\n\r\ntype GLTFMToonAssetMaterial = AssetUnlitMaterial & {\r\n shadeColorFactor?: Vector3;\r\n shadeMultiplyMap?: AssetTextureInfo;\r\n shadingShiftFactor?: number;\r\n shadingShiftMap?: AssetTextureInfo;\r\n shadingShiftTextureScale?: number;\r\n shadingToonyFactor?: number;\r\n giEqualizationFactor?: number;\r\n matcapFactor?: Vector3;\r\n matcapMap?: AssetTextureInfo;\r\n parametricRimColorFactor?: Vector3;\r\n parametricRimFresnelPowerFactor?: number;\r\n parametricRimLiftFactor?: number;\r\n rimMultiplyMap?: AssetTextureInfo;\r\n rimLightingMixFactor?: number;\r\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\r\n outlineWidthFactor?: number;\r\n outlineWidthMultiplyMap?: AssetTextureInfo;\r\n outlineColorFactor?: Vector3;\r\n outlineLightingMixFactor?: number;\r\n outlineUsesTangentNormals?: boolean;\r\n uvAnimationMaskMap?: AssetTextureInfo;\r\n uvAnimationScrollXSpeedFactor?: number;\r\n uvAnimationScrollYSpeedFactor?: number;\r\n uvAnimationRotationSpeedFactor?: number;\r\n transparentWithZWrite?: boolean;\r\n renderQueueOffsetNumber?: number;\r\n};\r\n\r\ntype GLTFLoadedMeshPrimitive = {\r\n source: MeshPrimitive;\r\n primitive: AssetPrimitiveInfo;\r\n subMeshData: AssetSubMeshData;\r\n materialInfo: Nullable<Material>;\r\n outlineUsesTangentNormals: boolean;\r\n};\r\n\r\ntype VRMAHumanoidBoneInfo = {\r\n node?: unknown;\r\n};\r\n\r\ntype VRMAHumanoidInfo = {\r\n humanBones?: Record<string, VRMAHumanoidBoneInfo>;\r\n};\r\n\r\ntype VRMCVRMAnimationInfo = {\r\n specVersion?: unknown;\r\n humanoid?: VRMAHumanoidInfo;\r\n};\r\n\r\nconst VRM_SPRING_BONE_SUBSTEPS = 3;\r\nconst VRM_GRAVITY_ACCELERATION_SCALE = 3;\r\nconst VRM_BASE_GRAVITY_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\r\nconst VRM_GRAVITY_POWER_TO_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\r\nconst VRM_STIFFNESS_TO_FRAME_HARDNESS = 0.05;\r\nconst VRM_DRAGFORCE_SCALE = 0.5;\r\n\r\n/** @internal */\r\nexport interface GLTFContent extends GlTf {\r\n _loadedBuffers: Nullable<ArrayBuffer[]>;\r\n _accessors: GLTFAccessor[];\r\n _nodes: AssetHierarchyNode[];\r\n _meshes: AssetMeshData[];\r\n _device: AbstractDevice;\r\n _dracoModule?: draco3d.DecoderModule;\r\n}\r\n\r\n/**\r\n * The GLTF/GLB model loader\r\n * @public\r\n */\r\nexport class GLTFImporter extends AbstractModelImporter {\r\n /** @internal */\r\n async initDraco3d(gltf: GLTFContent) {\r\n return new Promise<void>((resolve) => {\r\n const dracoDecoderModule = (window as any).DracoDecoderModule as draco3d.DracoDecoderModule;\r\n if (dracoDecoderModule) {\r\n dracoDecoderModule({\r\n onModuleLoaded: (module: any) => {\r\n gltf._dracoModule = module;\r\n resolve();\r\n }\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\r\n const buffer = await data.arrayBuffer();\r\n if (this.isGLB(buffer)) {\r\n await this.loadBinary(buffer, model, basePath, vfs);\r\n return;\r\n }\r\n const gltf = (await new Response(data).json()) as GLTFContent;\r\n gltf._loadedBuffers = null;\r\n await this.loadJson(gltf, model, basePath, vfs);\r\n }\r\n /** @internal */\r\n async loadBinary(buffer: ArrayBuffer, model: SharedModel, basePath: string, vfs?: VFS) {\r\n const jsonChunkType = 0x4e4f534a;\r\n const binaryChunkType = 0x004e4942;\r\n let gltf: Nullable<GLTFContent> = null;\r\n const buffers: ArrayBuffer[] = [];\r\n const chunkInfos = this.getGLBChunkInfos(buffer);\r\n for (const info of chunkInfos) {\r\n if (info.type === jsonChunkType && !gltf) {\r\n const jsonSlice = new Uint8Array(buffer, 20, info.length);\r\n const stringBuffer = new TextDecoder('utf-8').decode(jsonSlice);\r\n gltf = JSON.parse(stringBuffer);\r\n } else if (info.type === binaryChunkType) {\r\n buffers.push(buffer.slice(info.start, info.start + info.length));\r\n }\r\n }\r\n ASSERT(!!gltf, 'Invalid GLTF format');\r\n gltf._loadedBuffers = buffers;\r\n await this.loadJson(gltf, model, basePath, vfs);\r\n }\r\n /** @internal */\r\n async loadJson(gltf: GLTFContent, model: SharedModel, basePath: string, vfs?: VFS) {\r\n vfs = vfs ?? getEngine().VFS;\r\n // check extensions\r\n if (\r\n !gltf._dracoModule &&\r\n gltf.extensionsRequired &&\r\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\r\n ) {\r\n await this.initDraco3d(gltf);\r\n ASSERT(!!gltf._dracoModule, 'Draco3d is required for loading model');\r\n }\r\n gltf._accessors = [];\r\n gltf._nodes = [];\r\n gltf._meshes = [];\r\n // check asset property\r\n const asset = gltf.asset;\r\n if (asset) {\r\n const gltfVersion = asset.version;\r\n ASSERT(gltfVersion === '2.0', `Invalid GLTF version: ${gltfVersion}`);\r\n }\r\n gltf._baseURI = basePath;\r\n if (!gltf._loadedBuffers) {\r\n gltf._loadedBuffers = [];\r\n const buffers = gltf.buffers;\r\n if (buffers) {\r\n for (const buffer of buffers) {\r\n const uri =\r\n vfs.parseDataURI(buffer.uri!) || vfs.isAbsoluteURL(buffer.uri!)\r\n ? buffer.uri\r\n : vfs.normalizePath(vfs.join(gltf._baseURI, buffer.uri!));\r\n const buf = (await vfs.readFile(uri!, { encoding: 'binary' })) as ArrayBuffer;\r\n ASSERT(buffer.byteLength === buf.byteLength, 'Invalid GLTF: buffer byte length error.');\r\n gltf._loadedBuffers.push(buf);\r\n }\r\n }\r\n }\r\n const accessors = gltf.accessors;\r\n if (accessors) {\r\n for (const accessor of gltf.accessors!) {\r\n gltf._accessors.push(new GLTFAccessor(accessor));\r\n }\r\n }\r\n const scenes = gltf.scenes;\r\n ASSERT(!!scenes, 'No scenes found in model');\r\n const sharedModel = model;\r\n await this._loadMeshes(sharedModel, gltf, vfs);\r\n this._loadNodes(gltf, sharedModel);\r\n this._loadSkins(gltf, sharedModel);\r\n this._loadMorphTargetGroups(gltf, sharedModel);\r\n for (let i = 0; i < (gltf.nodes?.length ?? 0); i++) {\r\n if (typeof gltf.nodes![i].skin === 'number' && gltf.nodes![i].skin! >= 0) {\r\n gltf._nodes[i].skeleton = sharedModel.skeletons[gltf.nodes![i].skin!];\r\n }\r\n }\r\n this._loadSpringBones(gltf, sharedModel);\r\n this._loadAnimations(gltf, sharedModel);\r\n for (const scene of scenes) {\r\n const assetScene = new AssetScene(scene.name);\r\n for (const node of scene.nodes!) {\r\n assetScene.rootNodes.push(gltf._nodes[node]);\r\n }\r\n sharedModel.scenes.push(assetScene);\r\n }\r\n if (typeof gltf.scene === 'number') {\r\n sharedModel.activeScene = gltf.scene;\r\n }\r\n }\r\n /** @internal */\r\n private _loadSpringBones(gltf: GLTFContent, model: SharedModel) {\r\n this._loadVRMC0SpringBones(gltf, model);\r\n this._loadVRMC1SpringBones(gltf, model);\r\n this._buildJointDynamicsSpringBones(model);\r\n }\r\n\r\n /** @internal */\r\n private _loadMorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n model.clearMorphTargetGroups();\r\n const hasVRMC1 = !!gltf.extensions?.VRMC_vrm;\r\n const hasVRMC0 = !!gltf.extensions?.VRM;\r\n if (hasVRMC1) {\r\n this._loadVRMC1MorphTargetGroups(gltf, model);\r\n } else if (hasVRMC0) {\r\n this._loadVRMC0MorphTargetGroups(gltf, model);\r\n } else {\r\n model.buildMorphTargetGroupsByName();\r\n }\r\n }\r\n\r\n private _loadVRMC0MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n const groups = gltf.extensions?.VRM?.blendShapeMaster?.blendShapeGroups;\r\n if (!Array.isArray(groups)) {\r\n return;\r\n }\r\n for (const value of groups) {\r\n if (!value || typeof value !== 'object') {\r\n continue;\r\n }\r\n const groupInfo = value as VRMC0BlendShapeGroupInfo;\r\n const name = this._getVRMC0BlendShapeGroupName(groupInfo);\r\n if (!name) {\r\n continue;\r\n }\r\n const bindings: AssetMorphTargetBinding[] = [];\r\n const binds = Array.isArray(groupInfo.binds) ? groupInfo.binds : [];\r\n for (const bindValue of binds) {\r\n if (!bindValue || typeof bindValue !== 'object') {\r\n continue;\r\n }\r\n const bindInfo = bindValue as VRMC0BlendShapeBindInfo;\r\n const meshIndex = typeof bindInfo.mesh === 'number' ? bindInfo.mesh : -1;\r\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\r\n const mesh = meshIndex >= 0 ? gltf._meshes[meshIndex] : null;\r\n if (!mesh) {\r\n continue;\r\n }\r\n const targetName = this._getMorphTargetName(mesh, targetIndex);\r\n if (!targetName) {\r\n continue;\r\n }\r\n bindings.push({\r\n mesh,\r\n targetIndex,\r\n targetName,\r\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight / 100 : 1\r\n });\r\n }\r\n model.addMorphTargetGroup({ name, bindings });\r\n }\r\n }\r\n\r\n private _loadVRMC1MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\r\n const expressions = gltf.extensions?.VRMC_vrm?.expressions;\r\n if (!expressions) {\r\n return;\r\n }\r\n this._loadVRMC1ExpressionMap(gltf, model, expressions.preset);\r\n this._loadVRMC1ExpressionMap(gltf, model, expressions.custom);\r\n }\r\n\r\n private _loadVRMC1ExpressionMap(gltf: GLTFContent, model: SharedModel, expressionMap: unknown) {\r\n if (!expressionMap || typeof expressionMap !== 'object') {\r\n return;\r\n }\r\n for (const [name, expressionInfo] of Object.entries(expressionMap)) {\r\n if (!expressionInfo || typeof expressionInfo !== 'object') {\r\n continue;\r\n }\r\n const expression = expressionInfo as VRMC1ExpressionInfo;\r\n const bindings: AssetMorphTargetBinding[] = [];\r\n const morphTargetBinds = Array.isArray(expression.morphTargetBinds) ? expression.morphTargetBinds : [];\r\n for (const bindValue of morphTargetBinds) {\r\n if (!bindValue || typeof bindValue !== 'object') {\r\n continue;\r\n }\r\n const bindInfo = bindValue as VRMC1MorphTargetBindInfo;\r\n const nodeIndex = typeof bindInfo.node === 'number' ? bindInfo.node : -1;\r\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\r\n const node = nodeIndex >= 0 ? gltf._nodes[nodeIndex] : null;\r\n const mesh = node?.mesh ?? null;\r\n if (!node || !mesh) {\r\n continue;\r\n }\r\n const targetName = this._getMorphTargetName(mesh, targetIndex);\r\n if (!targetName) {\r\n continue;\r\n }\r\n bindings.push({\r\n node,\r\n targetIndex,\r\n targetName,\r\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight : 1\r\n });\r\n }\r\n model.addMorphTargetGroup({\r\n name,\r\n bindings,\r\n isBinary: expression.isBinary === true\r\n });\r\n }\r\n }\r\n\r\n private _getVRMC0BlendShapeGroupName(groupInfo: VRMC0BlendShapeGroupInfo): Nullable<string> {\r\n const presetName = typeof groupInfo.presetName === 'string' ? groupInfo.presetName : '';\r\n if (presetName && presetName.toLowerCase() !== 'unknown') {\r\n return presetName;\r\n }\r\n const name = typeof groupInfo.name === 'string' ? groupInfo.name : '';\r\n return name || presetName || null;\r\n }\r\n\r\n private _getMorphTargetName(mesh: AssetMeshData, targetIndex: number): Nullable<string> {\r\n if (targetIndex < 0) {\r\n return null;\r\n }\r\n let count = 0;\r\n for (const subMesh of mesh.subMeshes) {\r\n count = Math.max(count, subMesh.numTargets);\r\n }\r\n return targetIndex < count ? (mesh.morphNames?.[targetIndex] ?? `Target${targetIndex}`) : null;\r\n }\r\n\r\n private _loadVRMC1SpringBones(gltf: GLTFContent, model: SharedModel) {\r\n const ext = gltf.extensions?.VRMC_springBone;\r\n if (!ext) {\r\n return;\r\n }\r\n\r\n const colliders: Nullable<AssetSpringBoneCollider>[] = [];\r\n for (let i = 0; i < (ext.colliders ?? []).length; i++) {\r\n const colliderInfo = ext.colliders[i];\r\n const node = this._getNode(gltf, colliderInfo.node);\r\n const extendedShape = colliderInfo.extensions?.VRMC_springBone_extended_collider?.shape;\r\n if (!node || (!colliderInfo.shape && !extendedShape)) {\r\n colliders[i] = null;\r\n continue;\r\n }\r\n const sphere = colliderInfo.shape?.sphere;\r\n const capsule = colliderInfo.shape?.capsule;\r\n const extendedSphere = extendedShape?.sphere;\r\n const extendedCapsule = extendedShape?.capsule;\r\n const extendedPlane = extendedShape?.plane;\r\n let collider: Nullable<AssetSpringBoneCollider> = null;\r\n if (sphere) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(sphere.offset, Vector3.zero()),\r\n radius: sphere.radius ?? 0,\r\n inside: sphere.inside\r\n }\r\n };\r\n } else if (extendedSphere) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(extendedSphere.offset, Vector3.zero()),\r\n radius: extendedSphere.radius ?? 0,\r\n inside: extendedSphere.inside\r\n }\r\n };\r\n } else if (capsule) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'capsule',\r\n offset: this._arrayToVector3(capsule.offset, Vector3.zero()),\r\n tail: this._arrayToVector3(capsule.tail, Vector3.zero()),\r\n radius: capsule.radius ?? 0,\r\n inside: capsule.inside\r\n }\r\n };\r\n } else if (extendedCapsule) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'capsule',\r\n offset: this._arrayToVector3(extendedCapsule.offset, Vector3.zero()),\r\n tail: this._arrayToVector3(extendedCapsule.tail, Vector3.zero()),\r\n radius: extendedCapsule.radius ?? 0,\r\n inside: extendedCapsule.inside\r\n }\r\n };\r\n } else if (extendedPlane) {\r\n collider = {\r\n name: colliderInfo.name,\r\n node,\r\n shape: {\r\n type: 'plane',\r\n offset: this._arrayToVector3(extendedPlane.offset, Vector3.zero()),\r\n normal: this._arrayToVector3(extendedPlane.normal, Vector3.axisPY())\r\n }\r\n };\r\n }\r\n if (collider) {\r\n colliders[i] = collider;\r\n model.springBoneColliders.push(collider);\r\n } else {\r\n colliders[i] = null;\r\n }\r\n }\r\n\r\n const colliderGroups: AssetSpringBoneColliderGroup[] = [];\r\n for (const groupInfo of ext.colliderGroups ?? []) {\r\n const group: AssetSpringBoneColliderGroup = {\r\n name: groupInfo.name,\r\n colliders: (groupInfo.colliders ?? [])\r\n .map((ref: unknown) => colliders[this._getIndex(ref, ['collider', 'index'])])\r\n .filter((collider: Nullable<AssetSpringBoneCollider>): collider is AssetSpringBoneCollider => {\r\n return !!collider;\r\n })\r\n };\r\n colliderGroups.push(group);\r\n model.springBoneColliderGroups.push(group);\r\n }\r\n\r\n for (const springInfo of ext.springs ?? []) {\r\n const joints: AssetSpringBoneJoint[] = [];\r\n for (const jointRef of springInfo.joints ?? []) {\r\n const jointInfo = this._getSpringBoneJointInfo(ext, jointRef);\r\n if (!jointInfo) {\r\n continue;\r\n }\r\n const node = this._getNode(gltf, jointInfo?.node);\r\n if (!node) {\r\n continue;\r\n }\r\n joints.push({\r\n node,\r\n hitRadius: jointInfo.hitRadius ?? 0,\r\n stiffness: jointInfo.stiffness ?? 0,\r\n gravityPower: jointInfo.gravityPower ?? 0,\r\n gravityDir: this._arrayToVector3(jointInfo.gravityDir, new Vector3(0, -1, 0)),\r\n dragForce: jointInfo.dragForce ?? 0\r\n });\r\n }\r\n model.springBones.push({\r\n name: springInfo.name,\r\n center: this._getNode(gltf, springInfo.center)!,\r\n joints,\r\n colliderGroups: (springInfo.colliderGroups ?? [])\r\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\r\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\r\n return !!group;\r\n })\r\n });\r\n }\r\n }\r\n\r\n private _loadVRMC0SpringBones(gltf: GLTFContent, model: SharedModel) {\r\n const secondaryAnimation = gltf.extensions?.VRM?.secondaryAnimation;\r\n if (!secondaryAnimation) {\r\n return;\r\n }\r\n\r\n const colliderGroups: Nullable<AssetSpringBoneColliderGroup>[] = [];\r\n for (let i = 0; i < (secondaryAnimation.colliderGroups ?? []).length; i++) {\r\n const groupInfo = secondaryAnimation.colliderGroups[i];\r\n const node = this._getNode(gltf, groupInfo.node);\r\n if (!node) {\r\n colliderGroups[i] = null;\r\n continue;\r\n }\r\n const group: AssetSpringBoneColliderGroup = {\r\n colliders: []\r\n };\r\n for (const colliderInfo of groupInfo.colliders ?? []) {\r\n const collider: AssetSpringBoneCollider = {\r\n node,\r\n shape: {\r\n type: 'sphere',\r\n offset: this._arrayToVector3(colliderInfo.offset, Vector3.zero()),\r\n radius: colliderInfo.radius ?? 0\r\n }\r\n };\r\n group.colliders.push(collider);\r\n model.springBoneColliders.push(collider);\r\n }\r\n colliderGroups[i] = group;\r\n model.springBoneColliderGroups.push(group);\r\n }\r\n\r\n for (const boneGroupInfo of secondaryAnimation.boneGroups ?? []) {\r\n const rootBones = (boneGroupInfo.bones ?? [])\r\n .map((index: number) => this._getNode(gltf, index))\r\n .filter((node: AssetHierarchyNode) => !!node);\r\n const joints: AssetSpringBoneJoint[] = rootBones.map((node: AssetHierarchyNode) => ({\r\n node,\r\n hitRadius: boneGroupInfo.hitRadius ?? 0,\r\n stiffness: boneGroupInfo.stiffiness ?? boneGroupInfo.stiffness ?? 0,\r\n gravityPower: boneGroupInfo.gravityPower ?? 0,\r\n gravityDir: this._arrayToVector3(boneGroupInfo.gravityDir, new Vector3(0, -1, 0)),\r\n dragForce: boneGroupInfo.dragForce ?? 0\r\n }));\r\n model.springBones.push({\r\n name: boneGroupInfo.comment,\r\n center: this._getNode(gltf, boneGroupInfo.center)!,\r\n joints,\r\n rootBones,\r\n colliderGroups: (boneGroupInfo.colliderGroups ?? [])\r\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\r\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\r\n return !!group;\r\n })\r\n });\r\n }\r\n }\r\n\r\n private _getNode(gltf: GLTFContent, index: unknown): Nullable<AssetHierarchyNode> {\r\n return typeof index === 'number' && index >= 0 ? gltf._nodes[index] : null;\r\n }\r\n\r\n private _arrayToVector3(value: unknown, fallback: Vector3): Vector3 {\r\n if (Array.isArray(value)) {\r\n return new Vector3(value[0] ?? fallback.x, value[1] ?? fallback.y, value[2] ?? fallback.z);\r\n }\r\n if (value && typeof value === 'object') {\r\n const obj = value as { x?: unknown; y?: unknown; z?: unknown };\r\n return new Vector3(\r\n typeof obj.x === 'number' ? obj.x : fallback.x,\r\n typeof obj.y === 'number' ? obj.y : fallback.y,\r\n typeof obj.z === 'number' ? obj.z : fallback.z\r\n );\r\n }\r\n return fallback.clone();\r\n }\r\n\r\n private _getIndex(value: unknown, keys: string[] = ['index']): number {\r\n if (typeof value === 'number' && value >= 0 && Number.isInteger(value)) {\r\n return value;\r\n }\r\n if (value && typeof value === 'object') {\r\n const obj = value as Record<string, unknown>;\r\n for (const key of keys) {\r\n const index = obj[key];\r\n if (typeof index === 'number' && index >= 0 && Number.isInteger(index)) {\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private _getSpringBoneJointInfo(\r\n ext: { joints?: SpringBoneJointInfo[] },\r\n jointRef: unknown\r\n ): Nullable<SpringBoneJointInfo> {\r\n const directIndex = this._getIndex(jointRef);\r\n if (directIndex >= 0) {\r\n return ext.joints?.[directIndex] ?? null;\r\n }\r\n if (jointRef && typeof jointRef === 'object') {\r\n const obj = jointRef as SpringBoneJointInfo;\r\n if (typeof obj.node === 'number') {\r\n return obj;\r\n }\r\n const jointIndex = this._getIndex(jointRef, ['joint', 'index']);\r\n if (jointIndex >= 0) {\r\n return ext.joints?.[jointIndex] ?? null;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _buildJointDynamicsSpringBones(model: SharedModel) {\r\n const colliderMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsCollider>();\r\n const flatPlaneMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsFlatPlane>();\r\n const nodeKeys = new Map<AssetHierarchyNode, number>();\r\n model.nodes.forEach((node, index) => nodeKeys.set(node, index));\r\n for (const collider of model.springBoneColliders) {\r\n const converted = this._toJointDynamicsCollider(collider);\r\n if (converted) {\r\n colliderMap.set(collider, converted);\r\n model.jointDynamicsColliders.push(converted);\r\n continue;\r\n }\r\n const flatPlane = this._toJointDynamicsFlatPlane(collider);\r\n if (flatPlane) {\r\n flatPlaneMap.set(collider, flatPlane);\r\n }\r\n }\r\n\r\n for (const spring of model.springBones) {\r\n const chains = spring.rootBones\r\n ? this._collectJointDynamicsChainsFromRoots(spring.rootBones)\r\n : this._collectJointDynamicsChains(spring.joints);\r\n if (chains.length === 0 || spring.joints.length === 0) {\r\n continue;\r\n }\r\n const colliders: AssetJointDynamicsCollider[] = [];\r\n const flatPlanes: AssetJointDynamicsFlatPlane[] = [];\r\n const colliderKeys = new Set<string>();\r\n const flatPlaneKeys = new Set<string>();\r\n for (const group of spring.colliderGroups) {\r\n for (const collider of group.colliders) {\r\n const converted = colliderMap.get(collider);\r\n const colliderKey = converted ? this._getJointDynamicsColliderKey(converted, nodeKeys) : '';\r\n if (converted && !colliderKeys.has(colliderKey)) {\r\n colliderKeys.add(colliderKey);\r\n colliders.push(converted);\r\n }\r\n const flatPlane = flatPlaneMap.get(collider);\r\n const flatPlaneKey = flatPlane ? this._getJointDynamicsFlatPlaneKey(flatPlane, nodeKeys) : '';\r\n if (flatPlane && !flatPlaneKeys.has(flatPlaneKey)) {\r\n flatPlaneKeys.add(flatPlaneKey);\r\n flatPlanes.push(flatPlane);\r\n }\r\n }\r\n }\r\n model.jointDynamicsSpringBones.push({\r\n name: spring.name,\r\n center: spring.center,\r\n chains,\r\n colliders,\r\n flatPlanes,\r\n controllerConfig: this._mapSpringJointsToControllerConfig(spring.joints, chains.length > 1)\r\n });\r\n }\r\n }\r\n\r\n private _collectJointDynamicsChains(joints: AssetSpringBoneJoint[]) {\r\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\r\n if (joints.length === 0) {\r\n return chains;\r\n }\r\n let chainStart = joints[0].node;\r\n let chainEnd = joints[0].node;\r\n for (let i = 1; i < joints.length; i++) {\r\n const node = joints[i].node;\r\n if (chainEnd.isParentOf(node)) {\r\n chainEnd = node;\r\n continue;\r\n }\r\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\r\n chainStart = node;\r\n chainEnd = node;\r\n }\r\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\r\n return chains;\r\n }\r\n\r\n private _collectJointDynamicsChainsFromRoots(rootBones: AssetHierarchyNode[]) {\r\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\r\n for (const start of rootBones) {\r\n const end = this._findSingleChildChainEnd(start);\r\n if (end && end !== start) {\r\n chains.push({ start, end });\r\n }\r\n }\r\n return chains;\r\n }\r\n\r\n private _pushJointDynamicsChain(\r\n chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[],\r\n start: AssetHierarchyNode,\r\n end: AssetHierarchyNode\r\n ) {\r\n if (start !== end) {\r\n chains.push({ start, end });\r\n return;\r\n }\r\n const inferredEnd = this._findSingleChildChainEnd(start);\r\n if (inferredEnd && inferredEnd !== start) {\r\n chains.push({ start, end: inferredEnd });\r\n }\r\n }\r\n\r\n private _findSingleChildChainEnd(start: AssetHierarchyNode): Nullable<AssetHierarchyNode> {\r\n let current = start;\r\n while (current.children.length > 0) {\r\n if (current.children.length !== 1) {\r\n return null;\r\n }\r\n current = current.children[0];\r\n }\r\n return current;\r\n }\r\n\r\n private _mapSpringJointsToControllerConfig(\r\n joints: AssetSpringBoneJoint[],\r\n loop: boolean\r\n ): DeepPartial<ControllerConfig> {\r\n let stiffness = 0;\r\n let dragForce = 0;\r\n let hitRadius = 0;\r\n const gravity = new Vector3(0, -VRM_BASE_GRAVITY_ACCELERATION, 0);\r\n const gravityPower = Vector3.zero();\r\n for (const joint of joints) {\r\n stiffness += joint.stiffness;\r\n dragForce += joint.dragForce;\r\n hitRadius = Math.max(hitRadius, joint.hitRadius);\r\n const gravityDir =\r\n joint.gravityDir.magnitudeSq > 0 ? Vector3.normalize(joint.gravityDir) : new Vector3(0, -1, 0);\r\n Vector3.add(\r\n gravityPower,\r\n Vector3.scale(gravityDir, Math.max(0, joint.gravityPower) * VRM_GRAVITY_POWER_TO_ACCELERATION),\r\n gravityPower\r\n );\r\n }\r\n const invCount = joints.length > 0 ? 1 / joints.length : 1;\r\n stiffness *= invCount;\r\n dragForce *= invCount;\r\n Vector3.scale(gravityPower, invCount, gravityPower);\r\n Vector3.add(gravity, gravityPower, gravity);\r\n const frameHardness = Math.max(0, Math.min(1, stiffness * VRM_STIFFNESS_TO_FRAME_HARDNESS));\r\n const frameResistance = Math.max(0, Math.min(1, 1 - dragForce * VRM_DRAGFORCE_SCALE));\r\n return {\r\n enableBroadPhase: false,\r\n enableSurfaceCollision: false,\r\n subSteps: VRM_SPRING_BONE_SUBSTEPS,\r\n gravity,\r\n curves: {\r\n hardness: InterpolatorScalar.constant(\r\n this._frameRatioToSubstepRatio(frameHardness, VRM_SPRING_BONE_SUBSTEPS)\r\n ),\r\n resistance: InterpolatorScalar.constant(\r\n this._frameRateToSubstepRate(frameResistance, VRM_SPRING_BONE_SUBSTEPS)\r\n ),\r\n pointRadius: InterpolatorScalar.constant(Math.max(0, hitRadius)),\r\n // ── KEY: stiff structural = inextensible fabric ──\r\n structuralShrinkVertical: InterpolatorScalar.constant(0.95),\r\n structuralStretchVertical: InterpolatorScalar.constant(0.95),\r\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.7),\r\n structuralStretchHorizontal: InterpolatorScalar.constant(0.7),\r\n // Moderate shear keeps the grid from collapsing diagonally\r\n shearShrink: InterpolatorScalar.constant(0.025),\r\n shearStretch: InterpolatorScalar.constant(0.025),\r\n // ── KEY: very soft bending = cloth folds/drapes freely ──\r\n bendingShrinkVertical: InterpolatorScalar.constant(0),\r\n bendingStretchVertical: InterpolatorScalar.constant(0),\r\n bendingShrinkHorizontal: InterpolatorScalar.constant(0),\r\n bendingStretchHorizontal: InterpolatorScalar.constant(0)\r\n },\r\n constraintOptions: {\r\n structuralVertical: true,\r\n structuralHorizontal: true,\r\n shear: false,\r\n bendingVertical: true,\r\n collideStructuralVertical: true,\r\n collideStructuralHorizontal: true,\r\n collideShear: true,\r\n isLoop: loop\r\n }\r\n };\r\n }\r\n\r\n private _frameRatioToSubstepRatio(frameRatio: number, subSteps: number): number {\r\n const ratio = Math.max(0, Math.min(1, frameRatio));\r\n return 1 - Math.pow(1 - ratio, 1 / Math.max(1, subSteps));\r\n }\r\n\r\n private _frameRateToSubstepRate(frameRate: number, subSteps: number): number {\r\n const rate = Math.max(0, Math.min(1, frameRate));\r\n return Math.pow(rate, 1 / Math.max(1, subSteps));\r\n }\r\n\r\n private _getJointDynamicsColliderKey(\r\n collider: AssetJointDynamicsCollider,\r\n nodeKeys: Map<AssetHierarchyNode, number>\r\n ): string {\r\n const r = collider.collider;\r\n return [\r\n this._getAssetNodeKey(collider.node, nodeKeys),\r\n this._vector3Key(collider.localPosition),\r\n this._quaternionKey(collider.localRotation),\r\n this._numberKey(r.radius),\r\n this._numberKey(r.radiusTailScale),\r\n this._numberKey(r.height),\r\n this._numberKey(r.friction),\r\n r.isInverseCollider ? 1 : 0,\r\n r.forceType\r\n ].join('|');\r\n }\r\n\r\n private _getJointDynamicsFlatPlaneKey(\r\n flatPlane: AssetJointDynamicsFlatPlane,\r\n nodeKeys: Map<AssetHierarchyNode, number>\r\n ): string {\r\n return [\r\n this._getAssetNodeKey(flatPlane.node, nodeKeys),\r\n this._vector3Key(flatPlane.position),\r\n this._vector3Key(flatPlane.up)\r\n ].join('|');\r\n }\r\n\r\n private _getAssetNodeKey(node: AssetHierarchyNode, nodeKeys: Map<AssetHierarchyNode, number>): number {\r\n let key = nodeKeys.get(node);\r\n if (key === undefined) {\r\n key = nodeKeys.size;\r\n nodeKeys.set(node, key);\r\n }\r\n return key;\r\n }\r\n\r\n private _vector3Key(value: Vector3): string {\r\n return [value.x, value.y, value.z].map((component) => this._numberKey(component)).join(',');\r\n }\r\n\r\n private _quaternionKey(value: Quaternion): string {\r\n return [value.x, value.y, value.z, value.w].map((component) => this._numberKey(component)).join(',');\r\n }\r\n\r\n private _numberKey(value: number): string {\r\n return `${Object.is(value, -0) ? 0 : value}`;\r\n }\r\n\r\n private _toJointDynamicsCollider(collider: AssetSpringBoneCollider): Nullable<AssetJointDynamicsCollider> {\r\n const shape = collider.shape;\r\n if (shape.type === 'plane') {\r\n return null;\r\n }\r\n if (shape.type === 'sphere') {\r\n return {\r\n name: collider.name,\r\n node: collider.node,\r\n localPosition: shape.offset.clone(),\r\n localRotation: Quaternion.identity(),\r\n collider: {\r\n radius: shape.radius,\r\n radiusTailScale: 1,\r\n height: 0,\r\n friction: 0,\r\n isInverseCollider: shape.inside ?? false,\r\n forceType: ColliderForce.Off\r\n }\r\n };\r\n }\r\n const localDirection = Vector3.sub(shape.tail, shape.offset);\r\n const height = localDirection.magnitude;\r\n const localRotation =\r\n height > 0\r\n ? Quaternion.unitVectorToUnitVector(Vector3.axisPY(), localDirection)\r\n : Quaternion.identity();\r\n const localPosition = Vector3.scale(Vector3.add(shape.offset, shape.tail), 0.5);\r\n return {\r\n name: collider.name,\r\n node: collider.node,\r\n localPosition,\r\n localRotation,\r\n collider: {\r\n radius: shape.radius,\r\n radiusTailScale: 1,\r\n height,\r\n friction: 0,\r\n isInverseCollider: shape.inside ?? false,\r\n forceType: ColliderForce.Off\r\n }\r\n };\r\n }\r\n\r\n private _toJointDynamicsFlatPlane(\r\n collider: AssetSpringBoneCollider\r\n ): Nullable<AssetJointDynamicsFlatPlane> {\r\n const shape = collider.shape;\r\n if (shape.type !== 'plane') {\r\n return null;\r\n }\r\n return {\r\n node: collider.node,\r\n position: shape.offset.clone(),\r\n up: shape.normal.magnitudeSq > 0 ? Vector3.normalize(shape.normal) : Vector3.axisPY()\r\n };\r\n }\r\n\r\n /** @internal */\r\n private _loadNodes(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.nodes) {\r\n for (let i = 0; i < gltf.nodes.length; i++) {\r\n this._loadNode(gltf, i, null, model);\r\n }\r\n for (const node of gltf._nodes) {\r\n if (!node.parent) {\r\n node.computeTransforms(null);\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private _loadSkins(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.skins) {\r\n for (let i = 0; i < gltf.skins.length; i++) {\r\n const skinInfo = gltf.skins[i];\r\n const skeleton = new AssetSkeleton(skinInfo.name);\r\n if (typeof skinInfo.skeleton === 'number') {\r\n skeleton.pivot = gltf._nodes[skinInfo.skeleton];\r\n }\r\n const accessor = gltf._accessors[skinInfo.inverseBindMatrices!];\r\n if (!accessor || accessor.type !== 'MAT4' || accessor.componentType !== ComponentType.FLOAT) {\r\n throw new Error('Invalid GLTF inverse bind matricies accessor');\r\n }\r\n const matrices =\r\n typeof skinInfo.inverseBindMatrices === 'number'\r\n ? (accessor.getDeinterlacedView(gltf) as Float32Array)\r\n : null;\r\n skinInfo.joints.forEach((joint, index) => {\r\n const m = index * 16;\r\n skeleton.addJoint(\r\n gltf._nodes[joint],\r\n matrices ? new Matrix4x4(matrices.subarray(m, m + 16)) : Matrix4x4.identity()\r\n );\r\n });\r\n model.addSkeleton(skeleton);\r\n }\r\n }\r\n this._loadVRMAHumanoidSkeleton(gltf, model);\r\n }\r\n /** @internal */\r\n private _loadVRMAHumanoidSkeleton(gltf: GLTFContent, model: SharedModel) {\r\n const ext = gltf.extensions?.VRMC_vrm_animation as VRMCVRMAnimationInfo | undefined;\r\n const humanBones = ext?.humanoid?.humanBones;\r\n if (!humanBones || typeof humanBones !== 'object') {\r\n return;\r\n }\r\n const mapping = this._getVRMAHumanoidMapping(gltf, humanBones);\r\n const hips = mapping?.body[HumanoidBodyRig.Hips];\r\n if (!mapping || !hips) {\r\n return;\r\n }\r\n const humanBoneNodes = this._getVRMAHumanoidNodes(mapping);\r\n if (humanBoneNodes.length === 0) {\r\n return;\r\n }\r\n const existingSkeleton = model.skeletons.find((skeleton) =>\r\n humanBoneNodes.every((node) => skeleton.joints.indexOf(node) >= 0)\r\n );\r\n if (existingSkeleton) {\r\n this._setAssetSkeletonHumanoidMapping(existingSkeleton, mapping);\r\n return;\r\n }\r\n const root = this._findCommonRoot(humanBoneNodes) ?? hips;\r\n const jointSet = new Set<AssetHierarchyNode>();\r\n for (const node of humanBoneNodes) {\r\n let current: Nullable<AssetHierarchyNode> = node;\r\n while (current) {\r\n jointSet.add(current);\r\n if (current === root) {\r\n break;\r\n }\r\n current = current.parent;\r\n }\r\n }\r\n const skeleton = new AssetSkeleton('VRMC_vrm_animation_humanoid');\r\n skeleton.pivot = root;\r\n this._setAssetSkeletonHumanoidMapping(skeleton, mapping);\r\n for (const joint of this._sortSkeletonJoints(root, jointSet)) {\r\n skeleton.addJoint(joint, Matrix4x4.identity());\r\n }\r\n if (skeleton.joints.length > 0) {\r\n model.addSkeleton(skeleton);\r\n }\r\n }\r\n\r\n private _setAssetSkeletonHumanoidMapping(\r\n skeleton: AssetSkeleton,\r\n mapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>\r\n ) {\r\n (\r\n skeleton as AssetSkeleton & {\r\n humanoidJointMapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>;\r\n }\r\n ).humanoidJointMapping = mapping;\r\n }\r\n\r\n private _getVRMAHumanoidMapping(\r\n gltf: GLTFContent,\r\n humanBones: Record<string, VRMAHumanoidBoneInfo>\r\n ): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\r\n const body = {} as Partial<Record<HumanoidBodyRig, AssetHierarchyNode>>;\r\n const leftHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\r\n const rightHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\r\n const setBody = (vrmaName: string, rig: HumanoidBodyRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\r\n if (node) {\r\n body[rig] = node;\r\n }\r\n };\r\n const setHand = (side: 'left' | 'right', vrmaName: string, rig: HumanoidHandRig) => {\r\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\r\n if (node) {\r\n (side === 'left' ? leftHand : rightHand)[rig] = node;\r\n }\r\n };\r\n setBody('hips', HumanoidBodyRig.Hips);\r\n setBody('spine', HumanoidBodyRig.Spine);\r\n setBody('chest', HumanoidBodyRig.Chest);\r\n setBody('upperChest', HumanoidBodyRig.UpperChest);\r\n setBody('neck', HumanoidBodyRig.Neck);\r\n setBody('head', HumanoidBodyRig.Head);\r\n setBody('leftShoulder', HumanoidBodyRig.LeftShoulder);\r\n setBody('leftUpperArm', HumanoidBodyRig.LeftUpperArm);\r\n setBody('leftLowerArm', HumanoidBodyRig.LeftLowerArm);\r\n setBody('leftHand', HumanoidBodyRig.LeftHand);\r\n setBody('rightShoulder', HumanoidBodyRig.RightShoulder);\r\n setBody('rightUpperArm', HumanoidBodyRig.RightUpperArm);\r\n setBody('rightLowerArm', HumanoidBodyRig.RightLowerArm);\r\n setBody('rightHand', HumanoidBodyRig.RightHand);\r\n setBody('leftUpperLeg', HumanoidBodyRig.LeftUpperLeg);\r\n setBody('leftLowerLeg', HumanoidBodyRig.LeftLowerLeg);\r\n setBody('leftFoot', HumanoidBodyRig.LeftFoot);\r\n setBody('leftToes', HumanoidBodyRig.LeftToes);\r\n setBody('rightUpperLeg', HumanoidBodyRig.RightUpperLeg);\r\n setBody('rightLowerLeg', HumanoidBodyRig.RightLowerLeg);\r\n setBody('rightFoot', HumanoidBodyRig.RightFoot);\r\n setBody('rightToes', HumanoidBodyRig.RightToes);\r\n setHand('left', 'leftThumbMetacarpal', HumanoidHandRig.ThumbProximal);\r\n setHand('left', 'leftThumbProximal', HumanoidHandRig.ThumbIntermediate);\r\n setHand('left', 'leftThumbDistal', HumanoidHandRig.ThumbDistal);\r\n setHand('left', 'leftIndexProximal', HumanoidHandRig.IndexProximal);\r\n setHand('left', 'leftIndexIntermediate', HumanoidHandRig.IndexIntermediate);\r\n setHand('left', 'leftIndexDistal', HumanoidHandRig.IndexDistal);\r\n setHand('left', 'leftMiddleProximal', HumanoidHandRig.MiddleProximal);\r\n setHand('left', 'leftMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\r\n setHand('left', 'leftMiddleDistal', HumanoidHandRig.MiddleDistal);\r\n setHand('left', 'leftRingProximal', HumanoidHandRig.RingProximal);\r\n setHand('left', 'leftRingIntermediate', HumanoidHandRig.RingIntermediate);\r\n setHand('left', 'leftRingDistal', HumanoidHandRig.RingDistal);\r\n setHand('left', 'leftLittleProximal', HumanoidHandRig.PinkyProximal);\r\n setHand('left', 'leftLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\r\n setHand('left', 'leftLittleDistal', HumanoidHandRig.PinkyDistal);\r\n setHand('right', 'rightThumbMetacarpal', HumanoidHandRig.ThumbProximal);\r\n setHand('right', 'rightThumbProximal', HumanoidHandRig.ThumbIntermediate);\r\n setHand('right', 'rightThumbDistal', HumanoidHandRig.ThumbDistal);\r\n setHand('right', 'rightIndexProximal', HumanoidHandRig.IndexProximal);\r\n setHand('right', 'rightIndexIntermediate', HumanoidHandRig.IndexIntermediate);\r\n setHand('right', 'rightIndexDistal', HumanoidHandRig.IndexDistal);\r\n setHand('right', 'rightMiddleProximal', HumanoidHandRig.MiddleProximal);\r\n setHand('right', 'rightMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\r\n setHand('right', 'rightMiddleDistal', HumanoidHandRig.MiddleDistal);\r\n setHand('right', 'rightRingProximal', HumanoidHandRig.RingProximal);\r\n setHand('right', 'rightRingIntermediate', HumanoidHandRig.RingIntermediate);\r\n setHand('right', 'rightRingDistal', HumanoidHandRig.RingDistal);\r\n setHand('right', 'rightLittleProximal', HumanoidHandRig.PinkyProximal);\r\n setHand('right', 'rightLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\r\n setHand('right', 'rightLittleDistal', HumanoidHandRig.PinkyDistal);\r\n if (!body[HumanoidBodyRig.Hips]) {\r\n return null;\r\n }\r\n const result: HumanoidJointMapping<AssetHierarchyNode> = {\r\n body: body as Record<HumanoidBodyRig, AssetHierarchyNode>\r\n };\r\n if (Object.keys(leftHand).length > 0) {\r\n result.leftHand = leftHand as Record<HumanoidHandRig, AssetHierarchyNode>;\r\n }\r\n if (Object.keys(rightHand).length > 0) {\r\n result.rightHand = rightHand as Record<HumanoidHandRig, AssetHierarchyNode>;\r\n }\r\n return result;\r\n }\r\n\r\n private _getVRMAHumanBoneNode(\r\n gltf: GLTFContent,\r\n humanBones: Record<string, VRMAHumanoidBoneInfo>,\r\n boneName: string\r\n ): Nullable<AssetHierarchyNode> {\r\n const nodeIndex = humanBones[boneName]?.node;\r\n return this._getNode(gltf, nodeIndex);\r\n }\r\n\r\n private _getVRMAHumanoidNodes(mapping: HumanoidJointMapping<AssetHierarchyNode>): AssetHierarchyNode[] {\r\n const nodes: AssetHierarchyNode[] = [];\r\n const addMappedNodes = <T extends string>(mapped: Record<T, AssetHierarchyNode> | undefined) => {\r\n if (!mapped) {\r\n return;\r\n }\r\n for (const node of Object.values(mapped) as AssetHierarchyNode[]) {\r\n if (node && nodes.indexOf(node) < 0) {\r\n nodes.push(node);\r\n }\r\n }\r\n };\r\n addMappedNodes(mapping.body);\r\n addMappedNodes(mapping.leftHand);\r\n addMappedNodes(mapping.rightHand);\r\n return nodes;\r\n }\r\n\r\n private _findCommonRoot(nodes: AssetHierarchyNode[]): Nullable<AssetHierarchyNode> {\r\n let root: Nullable<AssetHierarchyNode> = nodes[0] ?? null;\r\n for (let i = 1; root && i < nodes.length; i++) {\r\n while (root && !root.isParentOf(nodes[i])) {\r\n root = root.parent;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private _sortSkeletonJoints(root: AssetHierarchyNode, joints: Set<AssetHierarchyNode>) {\r\n const sorted: AssetHierarchyNode[] = [];\r\n const visit = (node: AssetHierarchyNode) => {\r\n if (joints.has(node)) {\r\n sorted.push(node);\r\n }\r\n for (const child of node.children) {\r\n visit(child);\r\n }\r\n };\r\n visit(root);\r\n for (const joint of joints) {\r\n if (sorted.indexOf(joint) < 0) {\r\n sorted.push(joint);\r\n }\r\n }\r\n return sorted;\r\n }\r\n /** @internal */\r\n private _loadAnimations(gltf: GLTFContent, model: SharedModel) {\r\n if (gltf.animations) {\r\n for (let i = 0; i < gltf.animations.length; i++) {\r\n const animation = this._loadAnimation(gltf, i);\r\n model.addAnimation(animation);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private collectNodes(gltf: GLTFContent) {\r\n const collect: Map<\r\n AssetHierarchyNode,\r\n {\r\n translate: Vector3;\r\n scale: Vector3;\r\n rotation: Quaternion;\r\n worldTransform: Nullable<Matrix4x4>;\r\n }\r\n > = new Map();\r\n for (const node of gltf._nodes) {\r\n collect.set(node, {\r\n translate: node.position || Vector3.zero(),\r\n rotation: node.rotation || Quaternion.identity(),\r\n scale: node.scaling || Vector3.one(),\r\n worldTransform: null\r\n });\r\n }\r\n return collect;\r\n }\r\n /** @internal */\r\n private getAnimationInfo(\r\n gltf: GLTFContent,\r\n index: number\r\n ): {\r\n name: string;\r\n channels: AnimationChannel[];\r\n samplers: AnimationSampler[];\r\n interpolatorTypes: Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\r\n interpolators: Nullable<Interpolator>[];\r\n maxTime: number;\r\n nodes: Map<\r\n AssetHierarchyNode,\r\n {\r\n translate: Vector3;\r\n scale: Vector3;\r\n rotation: Quaternion;\r\n worldTransform: Nullable<Matrix4x4>;\r\n }\r\n >;\r\n } {\r\n const animationInfo = gltf.animations![index];\r\n const name = animationInfo.name || null;\r\n const channels = animationInfo.channels;\r\n const samplers = animationInfo.samplers;\r\n const interpolators = [] as Nullable<Interpolator>[];\r\n const interpolatorTypes = [] as Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\r\n const nodes = this.collectNodes(gltf);\r\n let maxTime = 0;\r\n for (let i = 0; i < channels.length; i++) {\r\n const channel = channels[i];\r\n const sampler = samplers[channel.sampler];\r\n if (!sampler) {\r\n interpolators.push(null);\r\n interpolatorTypes.push(null);\r\n continue;\r\n }\r\n const input = gltf._accessors[sampler.input].getNormalizedDeinterlacedView(gltf);\r\n const output = gltf._accessors[sampler.output].getNormalizedDeinterlacedView(gltf);\r\n if (!(input instanceof Float32Array) || !(output instanceof Float32Array)) {\r\n console.error('Input/output channel of animation must be Float32Array');\r\n interpolators.push(null);\r\n interpolatorTypes.push(null);\r\n continue;\r\n }\r\n const mode: InterpolationMode =\r\n sampler.interpolation === 'STEP'\r\n ? 'step'\r\n : sampler.interpolation === 'CUBICSPLINE'\r\n ? 'cubicspline'\r\n : 'linear';\r\n let interpolator: Nullable<Interpolator> = null;\r\n let interpolatorType: Nullable<'translation' | 'scale' | 'rotation' | 'weights'> = null;\r\n if (channel.target.path === 'rotation') {\r\n interpolator = new Interpolator(mode, 'quat', input, output);\r\n interpolatorType = 'rotation';\r\n } else if (channel.target.path === 'translation') {\r\n interpolator = new Interpolator(mode, 'vec3', input, output);\r\n interpolatorType = 'translation';\r\n } else if (channel.target.path === 'scale') {\r\n interpolator = new Interpolator(mode, 'vec3', input, output);\r\n interpolatorType = 'scale';\r\n } else if (channel.target.path === 'weights') {\r\n interpolator = new Interpolator(mode, null, input, output);\r\n interpolatorType = 'weights';\r\n }\r\n interpolators.push(interpolator);\r\n interpolatorTypes.push(interpolatorType);\r\n if (interpolator) {\r\n const max = input[input.length - 1];\r\n if (max > maxTime) {\r\n maxTime = max;\r\n }\r\n }\r\n }\r\n return { name, channels, samplers, interpolators, interpolatorTypes, maxTime, nodes };\r\n }\r\n /** @internal */\r\n private _loadAnimation(gltf: GLTFContent, index: number): AssetAnimationData {\r\n const animationInfo = this.getAnimationInfo(gltf, index);\r\n const animationData: AssetAnimationData = {\r\n name: animationInfo.name,\r\n tracks: [],\r\n skeletons: [],\r\n nodes: []\r\n };\r\n for (let i = 0; i < animationInfo.channels.length; i++) {\r\n const interpolator = animationInfo.interpolators[i];\r\n const interpolatorType = animationInfo.interpolatorTypes[i];\r\n const targetNodeIndex = animationInfo.channels[i].target.node;\r\n if (!interpolator || !interpolatorType || typeof targetNodeIndex !== 'number') {\r\n continue;\r\n }\r\n const targetNode = gltf._nodes[targetNodeIndex];\r\n if (!targetNode) {\r\n continue;\r\n }\r\n const track: AssetAnimationTrack = {\r\n node: targetNode,\r\n type: interpolatorType,\r\n interpolator\r\n };\r\n if (track.type === 'weights') {\r\n track.defaultMorphWeights = targetNode.weights!;\r\n }\r\n animationData.tracks.push(track);\r\n if (animationData.nodes.indexOf(targetNode) < 0) {\r\n animationData.nodes.push(targetNode);\r\n }\r\n if (targetNode.skeletonAttached) {\r\n for (const skeleton of targetNode.skeletonAttached) {\r\n if (animationData.skeletons.indexOf(skeleton) < 0) {\r\n animationData.skeletons.push(skeleton);\r\n }\r\n }\r\n }\r\n }\r\n return animationData;\r\n }\r\n /** @internal */\r\n private _loadNode(\r\n gltf: GLTFContent,\r\n nodeIndex: number,\r\n parent: Nullable<AssetHierarchyNode>,\r\n model: SharedModel\r\n ): AssetHierarchyNode {\r\n let node: AssetHierarchyNode = gltf._nodes[nodeIndex];\r\n if (node) {\r\n if (parent) {\r\n if (node.parent) {\r\n throw new Error('invalid node hierarchy');\r\n }\r\n parent.addChild(node);\r\n }\r\n return node;\r\n }\r\n const nodeInfo = gltf.nodes?.[nodeIndex];\r\n if (nodeInfo) {\r\n node = new AssetHierarchyNode(nodeInfo.name, model, parent!); //model.addNode(parent, nodeInfo.name);\r\n node.weights = nodeInfo.weights ?? null;\r\n if (typeof nodeInfo.mesh === 'number') {\r\n node.mesh = gltf._meshes[nodeInfo.mesh];\r\n if (node.mesh && nodeInfo.name) {\r\n const subMeshCount = node.mesh.subMeshes.length;\r\n for (let i = 0; i < subMeshCount; i++) {\r\n const primitive = node.mesh.subMeshes[i]?.primitive;\r\n if (primitive) {\r\n primitive.name = subMeshCount > 1 ? `${nodeInfo.name}_${i}` : nodeInfo.name;\r\n }\r\n }\r\n }\r\n if (!node.mesh.morphNames && nodeInfo.extras?.targetNames) {\r\n node.mesh.morphNames = nodeInfo.extras.targetNames;\r\n }\r\n const instancing = nodeInfo.extensions?.['EXT_mesh_gpu_instancing'];\r\n if (instancing) {\r\n const attributes = instancing.attributes;\r\n if (attributes) {\r\n const accessorTranslation =\r\n typeof attributes.TRANSLATION === 'number' ? gltf._accessors[attributes.TRANSLATION] : null;\r\n const accessorScale =\r\n typeof attributes.SCALE === 'number' ? gltf._accessors[attributes.SCALE] : null;\r\n const accessorRotation =\r\n typeof attributes.ROTATION === 'number' ? gltf._accessors[attributes.ROTATION] : null;\r\n const count = accessorTranslation?.count ?? accessorScale?.count ?? accessorRotation?.count ?? 0;\r\n const translationValues = accessorTranslation?.getNormalizedDeinterlacedView(\r\n gltf\r\n ) as Float32Array;\r\n const scaleValues = accessorScale?.getNormalizedDeinterlacedView(gltf) as Float32Array;\r\n const rotationValues = accessorRotation?.getNormalizedDeinterlacedView(gltf) as Float32Array;\r\n for (let i = 0; i < count; i++) {\r\n const t = translationValues\r\n ? new Vector3(\r\n translationValues[i * 3],\r\n translationValues[i * 3 + 1],\r\n translationValues[i * 3 + 2]\r\n )\r\n : Vector3.zero();\r\n const s = scaleValues\r\n ? new Vector3(scaleValues[i * 3], scaleValues[i * 3 + 1], scaleValues[i * 3 + 2])\r\n : Vector3.one();\r\n const r = rotationValues\r\n ? new Quaternion(\r\n rotationValues[i * 4],\r\n rotationValues[i * 4 + 1],\r\n rotationValues[i * 4 + 2],\r\n rotationValues[i * 4 + 3]\r\n )\r\n : Quaternion.identity();\r\n node.instances.push({ t, s, r });\r\n }\r\n }\r\n } else {\r\n node.instances.push({ t: Vector3.zero(), s: Vector3.one(), r: Quaternion.identity() });\r\n }\r\n }\r\n if (!(typeof nodeInfo.skin === 'number') || nodeInfo.skin < 0) {\r\n // GLTF spec: Only the joint transforms are applied to the skinned mesh; the transform of the skinned mesh node MUST be ignored.\r\n if (nodeInfo.matrix) {\r\n const matrix = new Matrix4x4(nodeInfo.matrix);\r\n matrix.decompose(node.scaling, node.rotation, node.position);\r\n } else {\r\n if (nodeInfo.rotation) {\r\n node.rotation.set(nodeInfo.rotation);\r\n }\r\n if (nodeInfo.scale) {\r\n node.scaling.set(nodeInfo.scale);\r\n }\r\n if (nodeInfo.translation) {\r\n node.position.set(nodeInfo.translation);\r\n }\r\n }\r\n }\r\n gltf._nodes[nodeIndex] = node;\r\n if (nodeInfo.children) {\r\n for (const childIndex of nodeInfo.children) {\r\n this._loadNode(gltf, childIndex, node, model);\r\n }\r\n }\r\n } else {\r\n throw new Error(`invalid GLTF node: ${nodeIndex}`);\r\n }\r\n return node;\r\n }\r\n /** @internal */\r\n private async _loadMeshes(model: SharedModel, gltf: GLTFContent, vfs: VFS) {\r\n if (gltf.meshes) {\r\n for (let i = 0; i < gltf.meshes.length; i++) {\r\n gltf._meshes[i] = (await this._loadMesh(model, gltf, i, vfs))!;\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private async _loadMesh(model: SharedModel, gltf: GLTFContent, meshIndex: number, vfs: VFS) {\r\n const meshInfo = gltf.meshes && gltf.meshes[meshIndex];\r\n let mesh: Nullable<AssetMeshData> = null;\r\n if (meshInfo) {\r\n mesh = {\r\n morphWeights: meshInfo.weights ?? undefined,\r\n morphNames: meshInfo['extras']?.targetNames ?? null,\r\n subMeshes: []\r\n };\r\n const primitives = meshInfo.primitives;\r\n const meshName = meshInfo.name || null;\r\n if (primitives) {\r\n const loadedPrimitives: GLTFLoadedMeshPrimitive[] = [];\r\n for (let i = 0; i < primitives.length; i++) {\r\n const p = primitives[i];\r\n const subMeshName = meshName\r\n ? primitives.length > 1\r\n ? `${meshName}_${i}`\r\n : meshName\r\n : `mesh_${meshIndex}_${i}`;\r\n const subMeshData: AssetSubMeshData = {\r\n name: subMeshName,\r\n primitive: null,\r\n material: null,\r\n rawPositions: null,\r\n rawBlendIndices: null,\r\n rawJointWeights: null,\r\n numTargets: 0\r\n };\r\n const primitive: AssetPrimitiveInfo = {\r\n name: subMeshName,\r\n vertices: {} as any,\r\n type: 'triangle-list',\r\n indexCount: 0,\r\n indices: null,\r\n boxMax: Vector3.zero(),\r\n boxMin: Vector3.zero()\r\n };\r\n const attributes = p.attributes;\r\n const dracoExtension = gltf._dracoModule ? p.extensions?.['KHR_draco_mesh_compression'] : null;\r\n let dracoMeshDecoder: Nullable<DracoMeshDecoder> = null;\r\n if (dracoExtension) {\r\n const bufferView = gltf.bufferViews && gltf.bufferViews[dracoExtension.bufferView];\r\n if (!bufferView) {\r\n throw new Error('Draco buffer view not set');\r\n }\r\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\r\n if (!arrayBuffer) {\r\n throw new Error('Draco buffer view does not point to a valid ArrayBuffer');\r\n }\r\n dracoMeshDecoder = new DracoMeshDecoder(\r\n new Int8Array(arrayBuffer, bufferView.byteOffset ?? 0, bufferView.byteLength),\r\n gltf._dracoModule!\r\n );\r\n }\r\n for (const attrib in attributes) {\r\n this._loadVertexBuffer(\r\n gltf,\r\n attrib,\r\n attributes[attrib],\r\n primitive,\r\n subMeshData,\r\n dracoExtension,\r\n dracoMeshDecoder!\r\n );\r\n }\r\n if (p.targets) {\r\n if (getDevice().type === 'webgl') {\r\n // Emulate vertexID for WebGL1 device\r\n if (attributes['TEXCOORD_7'] !== undefined) {\r\n console.error(`Could not load morph target animation`);\r\n p.targets = undefined;\r\n } else {\r\n const positionInfo = primitive.vertices['position'];\r\n const numVertices = positionInfo\r\n ? (positionInfo.data.length / getVertexFormatComponentCount(positionInfo.format)) >> 0\r\n : 0;\r\n const vertexIndices = new Float32Array(numVertices);\r\n for (let i = 0; i < vertexIndices.length; i++) {\r\n vertexIndices[i] = i;\r\n }\r\n primitive.vertices['texCoord7'] = { format: 'tex7_f32', data: vertexIndices };\r\n }\r\n }\r\n }\r\n if (p.targets) {\r\n const targets: AssetSubMeshData['targets'] = {};\r\n const targetBox: AssetSubMeshData['targetBox'] = [];\r\n const targetMap = {\r\n POSITION: MORPH_TARGET_POSITION,\r\n NORMAL: MORPH_TARGET_NORMAL,\r\n TANGENT: MORPH_TARGET_TANGENT,\r\n TEXCOORD_0: MORPH_TARGET_TEX0,\r\n TEXCOORD_1: MORPH_TARGET_TEX1,\r\n TEXCOORD_2: MORPH_TARGET_TEX2,\r\n TEXCOORD_3: MORPH_TARGET_TEX3,\r\n COLOR_0: MORPH_TARGET_COLOR\r\n };\r\n const morphAttribSet = new Set<number>();\r\n for (const target of p.targets) {\r\n for (const k in target) {\r\n const t = targetMap[k as keyof typeof targetMap];\r\n if (t !== undefined) {\r\n targets[t] = targets[t] ?? { numComponents: 0, data: [] };\r\n const accessorIndex = target[k] as number;\r\n const accessor = gltf._accessors[accessorIndex];\r\n targets[t].numComponents = accessor.getComponentCount(accessor.type);\r\n targets[t].data.push(accessor.getNormalizedDeinterlacedView(gltf) as Float32Array);\r\n if (k === 'POSITION') {\r\n const min = accessor.min\r\n ? new Vector3(accessor.min[0], accessor.min[1], accessor.min[2])\r\n : Vector3.zero();\r\n const max = accessor.max\r\n ? new Vector3(accessor.max[0], accessor.max[1], accessor.max[2])\r\n : Vector3.zero();\r\n targetBox.push(new BoundingBox(min, max));\r\n }\r\n morphAttribSet.add(t);\r\n }\r\n }\r\n }\r\n subMeshData.numTargets = p.targets.length;\r\n subMeshData.targets = targets;\r\n subMeshData.targetBox = targetBox;\r\n subMeshData.morphAttribCount = morphAttribSet.size;\r\n }\r\n const indices = p.indices;\r\n if (typeof indices === 'number') {\r\n this._loadIndexBuffer(gltf, indices, primitive, subMeshData, dracoExtension, dracoMeshDecoder!);\r\n }\r\n let primitiveType = p.mode;\r\n if (typeof primitiveType !== 'number') {\r\n primitiveType = 4;\r\n }\r\n primitive.type = this._primitiveType(primitiveType)!;\r\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\r\n const outlineUsesTangentNormals = this._shouldGenerateMToonOutlineNormals(\r\n materialInfo,\r\n p,\r\n primitive\r\n );\r\n loadedPrimitives.push({\r\n source: p,\r\n primitive,\r\n subMeshData,\r\n materialInfo,\r\n outlineUsesTangentNormals\r\n });\r\n }\r\n this._generateMToonOutlineNormals(loadedPrimitives);\r\n for (const loaded of loadedPrimitives) {\r\n const { source: p, primitive, subMeshData, materialInfo, outlineUsesTangentNormals } = loaded;\r\n const hasVertexNormal = !!primitive.vertices['normal'];\r\n const hasVertexColor = !!primitive.vertices['diffuse'];\r\n const hasVertexTangent = !!primitive.vertices['tangent'];\r\n const flagsHash = [\r\n hasVertexNormal ? 'N' : '',\r\n hasVertexColor ? 'C' : '',\r\n hasVertexTangent ? 'T' : '',\r\n outlineUsesTangentNormals ? 'OTN' : ''\r\n ]\r\n .filter((v) => !!v)\r\n .join('');\r\n const materialHash = [p.material ?? 'default', flagsHash].filter((v) => !!v).join('.');\r\n let material = model.getMaterial(materialHash);\r\n if (!material) {\r\n material = await this._loadMaterial(\r\n model,\r\n gltf,\r\n materialInfo!,\r\n hasVertexColor,\r\n hasVertexNormal,\r\n hasVertexTangent,\r\n outlineUsesTangentNormals,\r\n vfs\r\n );\r\n model.setMaterial(materialHash, material);\r\n } else if (outlineUsesTangentNormals && material.type === 'mtoon') {\r\n (material as GLTFMToonAssetMaterial).outlineUsesTangentNormals = true;\r\n }\r\n subMeshData.primitive = primitive;\r\n subMeshData.material = material;\r\n mesh.subMeshes.push(subMeshData);\r\n model.addPrimitive(primitive);\r\n }\r\n }\r\n }\r\n return mesh;\r\n }\r\n private _shouldGenerateMToonOutlineNormals(\r\n materialInfo: Nullable<Material>,\r\n primitiveInfo: MeshPrimitive,\r\n primitive: AssetPrimitiveInfo\r\n ) {\r\n if (!materialInfo?.extensions?.VRMC_materials_mtoon) {\r\n return false;\r\n }\r\n if (materialInfo.normalTexture) {\r\n return false;\r\n }\r\n if (primitiveInfo.targets?.some((target) => target.TANGENT !== undefined)) {\r\n return false;\r\n }\r\n return (\r\n primitive.type === 'triangle-list' && !!primitive.vertices['position'] && !!primitive.vertices['normal']\r\n );\r\n }\r\n private _generateMToonOutlineNormals(primitives: GLTFLoadedMeshPrimitive[]) {\r\n const targets = primitives.filter((p) => p.outlineUsesTangentNormals);\r\n if (targets.length === 0) {\r\n return;\r\n }\r\n const sums = new Map<string, [number, number, number]>();\r\n for (const { primitive } of targets) {\r\n const positionInfo = primitive.vertices['position'];\r\n if (!positionInfo) {\r\n continue;\r\n }\r\n const positions = positionInfo.data as Float32Array;\r\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\r\n const vertexCount = (positions.length / positionStride) >> 0;\r\n const indices = this._getTriangleIndices(primitive, vertexCount);\r\n if (!indices) {\r\n continue;\r\n }\r\n for (let i = 0; i + 2 < indices.length; i += 3) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n const p0 = i0 * positionStride;\r\n const p1 = i1 * positionStride;\r\n const p2 = i2 * positionStride;\r\n const ax = positions[p1] - positions[p0];\r\n const ay = positions[p1 + 1] - positions[p0 + 1];\r\n const az = positions[p1 + 2] - positions[p0 + 2];\r\n const bx = positions[p2] - positions[p0];\r\n const by = positions[p2 + 1] - positions[p0 + 1];\r\n const bz = positions[p2 + 2] - positions[p0 + 2];\r\n const nx = ay * bz - az * by;\r\n const ny = az * bx - ax * bz;\r\n const nz = ax * by - ay * bx;\r\n if (nx * nx + ny * ny + nz * nz <= 1e-20) {\r\n continue;\r\n }\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i0, nx, ny, nz);\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i1, nx, ny, nz);\r\n this._accumulateOutlineNormal(sums, positions, positionStride, i2, nx, ny, nz);\r\n }\r\n }\r\n for (const { primitive } of targets) {\r\n const positionInfo = primitive.vertices['position'];\r\n const normalInfo = primitive.vertices['normal'];\r\n if (!positionInfo || !normalInfo) {\r\n continue;\r\n }\r\n const positions = positionInfo.data as Float32Array;\r\n const normals = normalInfo.data as Float32Array;\r\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\r\n const normalStride = getVertexFormatComponentCount(normalInfo.format);\r\n const vertexCount = (positions.length / positionStride) >> 0;\r\n const tangents = new Float32Array(vertexCount * 4);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const key = this._outlinePositionKey(\r\n positions[i * positionStride],\r\n positions[i * positionStride + 1],\r\n positions[i * positionStride + 2]\r\n );\r\n const sum = sums.get(key);\r\n let nx = sum?.[0] ?? normals[i * normalStride];\r\n let ny = sum?.[1] ?? normals[i * normalStride + 1];\r\n let nz = sum?.[2] ?? normals[i * normalStride + 2];\r\n const len = Math.hypot(nx, ny, nz);\r\n if (len > 1e-10) {\r\n nx /= len;\r\n ny /= len;\r\n nz /= len;\r\n } else {\r\n nx = normals[i * normalStride];\r\n ny = normals[i * normalStride + 1];\r\n nz = normals[i * normalStride + 2];\r\n const fallbackLen = Math.hypot(nx, ny, nz);\r\n if (fallbackLen > 1e-10) {\r\n nx /= fallbackLen;\r\n ny /= fallbackLen;\r\n nz /= fallbackLen;\r\n } else {\r\n nx = 0;\r\n ny = 1;\r\n nz = 0;\r\n }\r\n }\r\n tangents[i * 4] = nx;\r\n tangents[i * 4 + 1] = ny;\r\n tangents[i * 4 + 2] = nz;\r\n tangents[i * 4 + 3] = 1;\r\n }\r\n primitive.vertices['tangent'] = { format: 'tangent_f32x4', data: tangents };\r\n }\r\n }\r\n private _accumulateOutlineNormal(\r\n sums: Map<string, [number, number, number]>,\r\n positions: Float32Array,\r\n stride: number,\r\n index: number,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const offset = index * stride;\r\n const key = this._outlinePositionKey(positions[offset], positions[offset + 1], positions[offset + 2]);\r\n const sum = sums.get(key);\r\n if (sum) {\r\n sum[0] += x;\r\n sum[1] += y;\r\n sum[2] += z;\r\n } else {\r\n sums.set(key, [x, y, z]);\r\n }\r\n }\r\n private _getTriangleIndices(primitive: AssetPrimitiveInfo, vertexCount: number) {\r\n if (primitive.indices) {\r\n return primitive.indices;\r\n }\r\n const indices = new Uint32Array(vertexCount);\r\n for (let i = 0; i < vertexCount; i++) {\r\n indices[i] = i;\r\n }\r\n return indices;\r\n }\r\n private _outlinePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)},${Math.round(y * 100000)},${Math.round(z * 100000)}`;\r\n }\r\n /** @internal */\r\n private async _loadMaterial(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n materialInfo: Material,\r\n vertexColor: boolean,\r\n vertexNormal: boolean,\r\n useTangent: boolean,\r\n outlineUsesTangentNormals: boolean,\r\n vfs: VFS\r\n ): Promise<AssetMaterial> {\r\n const materialName = materialInfo?.name || 'material';\r\n let assetMaterial: Nullable<AssetMaterial> = null;\r\n let pbrMetallicRoughness: Nullable<AssetPBRMaterialMR> = null;\r\n let pbrSpecularGlossness: Nullable<AssetPBRMaterialSG> = null;\r\n const pbrCommon: AssetMaterialCommon = {\r\n useTangent,\r\n vertexColor,\r\n vertexNormal,\r\n bumpScale: 1,\r\n emissiveColor: Vector3.zero(),\r\n emissiveStrength: 1,\r\n occlusionStrength: 1\r\n };\r\n switch (materialInfo?.alphaMode) {\r\n case 'BLEND': {\r\n pbrCommon.alphaMode = 'blend';\r\n break;\r\n }\r\n case 'MASK': {\r\n pbrCommon.alphaMode = 'mask';\r\n pbrCommon.alphaCutoff = materialInfo.alphaCutoff ?? 0.5;\r\n break;\r\n }\r\n }\r\n if (materialInfo?.doubleSided) {\r\n pbrCommon.doubleSided = true;\r\n }\r\n const mtoonExtension = materialInfo?.extensions?.VRMC_materials_mtoon as\r\n | VRMCMToonMaterialInfo\r\n | undefined;\r\n if (\r\n materialInfo?.pbrMetallicRoughness ||\r\n materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness ||\r\n mtoonExtension\r\n ) {\r\n pbrCommon.normalMap = materialInfo.normalTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.normalTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\r\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.occlusionTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\r\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.emissiveTexture, false, vfs)\r\n : undefined;\r\n pbrCommon.emissiveStrength =\r\n materialInfo?.extensions?.KHR_materials_emissive_strength?.emissiveStrength ?? 1;\r\n pbrCommon.emissiveColor = materialInfo.emissiveFactor\r\n ? new Vector3(materialInfo.emissiveFactor)\r\n : Vector3.zero();\r\n }\r\n if (materialInfo?.pbrMetallicRoughness) {\r\n pbrMetallicRoughness = {\r\n name: materialName,\r\n type: 'pbrMetallicRoughness',\r\n ior: 1.5,\r\n common: pbrCommon\r\n };\r\n pbrMetallicRoughness.diffuse = new Vector4(\r\n materialInfo.pbrMetallicRoughness.baseColorFactor ?? [1, 1, 1, 1]\r\n );\r\n pbrMetallicRoughness.metallic = materialInfo.pbrMetallicRoughness.metallicFactor ?? 1;\r\n pbrMetallicRoughness.roughness = materialInfo.pbrMetallicRoughness.roughnessFactor ?? 1;\r\n pbrMetallicRoughness.diffuseMap = materialInfo.pbrMetallicRoughness.baseColorTexture\r\n ? await this._loadTexture(model, gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true, vfs)\r\n : undefined;\r\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.pbrMetallicRoughness.metallicRoughnessTexture,\r\n false,\r\n vfs\r\n )\r\n : undefined;\r\n pbrMetallicRoughness.metallicIndex = 2;\r\n pbrMetallicRoughness.roughnessIndex = 1;\r\n }\r\n if (mtoonExtension) {\r\n return this._loadMToonMaterial(\r\n model,\r\n gltf,\r\n materialName,\r\n materialInfo,\r\n pbrCommon,\r\n mtoonExtension,\r\n outlineUsesTangentNormals,\r\n vfs\r\n );\r\n }\r\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\r\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\r\n pbrSpecularGlossness = {\r\n name: materialName,\r\n type: 'pbrSpecularGlossiness',\r\n ior: 1.5,\r\n common: pbrCommon\r\n };\r\n pbrSpecularGlossness.diffuse = new Vector4(sg.diffuseFactor ?? [1, 1, 1, 1]);\r\n pbrSpecularGlossness.specular = new Vector3(sg.specularFactor ?? [1, 1, 1]);\r\n pbrSpecularGlossness.glossness = sg.glossnessFactor ?? 1;\r\n pbrSpecularGlossness.diffuseMap = sg.diffuseTexture\r\n ? await this._loadTexture(model, gltf, sg.diffuseTexture, true, vfs)\r\n : undefined;\r\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\r\n ? await this._loadTexture(model, gltf, sg.specularGlossinessTexture, true, vfs)\r\n : undefined;\r\n }\r\n assetMaterial = pbrSpecularGlossness || pbrMetallicRoughness;\r\n if (!assetMaterial || materialInfo?.extensions?.KHR_materials_unlit) {\r\n if (materialInfo?.extensions?.KHR_materials_unlit) {\r\n assetMaterial = {\r\n name: materialName,\r\n type: 'unlit',\r\n common: pbrCommon,\r\n diffuse: pbrMetallicRoughness?.diffuse ?? Vector4.one(),\r\n diffuseMap: pbrMetallicRoughness?.diffuseMap ?? null\r\n } as AssetUnlitMaterial;\r\n } else {\r\n assetMaterial = {\r\n name: materialName,\r\n type: 'pbrMetallicRoughness',\r\n common: pbrCommon,\r\n diffuse: Vector4.one(),\r\n metallic: 1,\r\n roughness: 1,\r\n diffuseMap: undefined,\r\n metallicMap: undefined,\r\n metallicIndex: 2,\r\n roughnessIndex: 1\r\n } as AssetPBRMaterialMR;\r\n }\r\n }\r\n if (assetMaterial.type !== 'unlit' && materialInfo?.extensions?.KHR_materials_ior) {\r\n (assetMaterial as AssetPBRMaterialCommon).ior = materialInfo.extensions.KHR_materials_ior.ior ?? 1.5;\r\n }\r\n if (assetMaterial.type === 'pbrMetallicRoughness') {\r\n pbrMetallicRoughness = assetMaterial;\r\n // KHR_materials_specular extension\r\n const specularColorFactor = (materialInfo?.extensions?.KHR_materials_specular?.specularColorFactor ?? [\r\n 1, 1, 1\r\n ]) as [number, number, number];\r\n pbrMetallicRoughness.specularFactor = new Vector4(\r\n ...specularColorFactor,\r\n materialInfo?.extensions?.KHR_materials_specular?.specularFactor ?? 1\r\n );\r\n pbrMetallicRoughness.specularMap = materialInfo?.extensions?.KHR_materials_specular?.specularTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularTexture,\r\n false,\r\n vfs\r\n )\r\n : undefined;\r\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\r\n ?.specularColorTexture\r\n ? await this._loadTexture(\r\n model,\r\n gltf,\r\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\r\n true,\r\n vfs\r\n )\r\n : undefined;\r\n // KHR_materials_iridescence\r\n const iridescence = materialInfo?.extensions?.KHR_materials_iridescence;\r\n if (iridescence) {\r\n pbrMetallicRoughness.iridescence = {\r\n iridescenceFactor: iridescence.iridescenceFactor ?? 0,\r\n iridescenceMap: iridescence.iridescenceTexture\r\n ? await this._loadTexture(model, gltf, iridescence.iridescenceTexture, false, vfs)\r\n : undefined,\r\n iridescenceIor: iridescence.iridescenceIor ?? 1.3,\r\n iridescenceThicknessMinimum: iridescence.iridescenceThicknessMinimum ?? 100,\r\n iridescenceThicknessMaximum: iridescence.iridescenceThicknessMaximum ?? 400,\r\n iridescenceThicknessMap: iridescence.iridescenceThicknessTexture\r\n ? await this._loadTexture(model, gltf, iridescence.iridescenceThicknessTexture, false, vfs)\r\n : undefined\r\n };\r\n }\r\n // KHR_materials_transmission\r\n const transmission = materialInfo?.extensions?.KHR_materials_transmission;\r\n if (transmission) {\r\n pbrMetallicRoughness.transmission = {\r\n transmissionFactor: transmission.transmissionFactor ?? 0,\r\n transmissionMap: transmission.transmissionTexture\r\n ? await this._loadTexture(model, gltf, transmission.transmissionTexture, false, vfs)\r\n : undefined,\r\n thicknessFactor: 0,\r\n thicknessMap: undefined,\r\n attenuationDistance: 99999,\r\n attenuationColor: Vector3.one()\r\n };\r\n const volume = materialInfo?.extensions?.KHR_materials_volume;\r\n if (volume) {\r\n pbrMetallicRoughness.transmission.thicknessFactor = volume.thicknessFactor ?? 0;\r\n pbrMetallicRoughness.transmission.thicknessMap = volume.thicknessTexture\r\n ? await this._loadTexture(model, gltf, volume.thicknessTexture, false, vfs)\r\n : undefined;\r\n pbrMetallicRoughness.transmission.attenuationDistance = volume.attenuationDistance ?? 99999;\r\n const attenuationColor = (volume.attenuationColor ?? [1, 1, 1]) as [number, number, number];\r\n pbrMetallicRoughness.transmission.attenuationColor = new Vector3(...attenuationColor);\r\n }\r\n }\r\n // KHR_materials_sheen\r\n const sheen = materialInfo?.extensions?.KHR_materials_sheen;\r\n if (sheen) {\r\n pbrMetallicRoughness.sheen = {\r\n sheenColorFactor: new Vector3(sheen.sheenColorFactor ?? [0, 0, 0]),\r\n sheenColorMap: sheen.sheenColorTexture\r\n ? await this._loadTexture(model, gltf, sheen.sheenColorTexture, true, vfs)\r\n : undefined,\r\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\r\n sheenRoughnessMap: sheen.sheenRoughnessTexture\r\n ? await this._loadTexture(model, gltf, sheen.sheenRoughnessTexture, true, vfs)\r\n : undefined\r\n };\r\n }\r\n // KHR_materials_clearcoat\r\n const cc = materialInfo?.extensions?.KHR_materials_clearcoat;\r\n if (cc) {\r\n pbrMetallicRoughness.clearcoat = {\r\n clearCoatFactor: cc.clearcoatFactor ?? 0,\r\n clearCoatIntensityMap: cc.clearcoatTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatTexture, false, vfs)\r\n : undefined,\r\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\r\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatRoughnessTexture, false, vfs)\r\n : undefined,\r\n clearCoatNormalMap: cc.clearcoatNormalTexture\r\n ? await this._loadTexture(model, gltf, cc.clearcoatNormalTexture, false, vfs)\r\n : undefined\r\n };\r\n }\r\n }\r\n return assetMaterial;\r\n }\r\n /** @internal */\r\n private async _loadMToonMaterial(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n materialName: string,\r\n materialInfo: Material,\r\n common: AssetMaterialCommon,\r\n mtoon: VRMCMToonMaterialInfo,\r\n outlineUsesTangentNormals: boolean,\r\n vfs: VFS\r\n ): Promise<GLTFMToonAssetMaterial> {\r\n const pbr = materialInfo?.pbrMetallicRoughness;\r\n const mtoonMaterial: GLTFMToonAssetMaterial = {\r\n name: materialName,\r\n type: 'mtoon',\r\n common,\r\n diffuse: new Vector4(pbr?.baseColorFactor ?? [1, 1, 1, 1]),\r\n diffuseMap: pbr?.baseColorTexture\r\n ? await this._loadTexture(model, gltf, pbr.baseColorTexture, true, vfs)\r\n : undefined,\r\n shadeColorFactor: mtoon.shadeColorFactor ? new Vector3(mtoon.shadeColorFactor) : undefined,\r\n shadeMultiplyMap: mtoon.shadeMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.shadeMultiplyTexture, true, vfs)\r\n : undefined,\r\n shadingShiftFactor: mtoon.shadingShiftFactor,\r\n shadingShiftMap: mtoon.shadingShiftTexture\r\n ? await this._loadTexture(model, gltf, mtoon.shadingShiftTexture, false, vfs)\r\n : undefined,\r\n shadingShiftTextureScale: mtoon.shadingShiftTexture?.scale,\r\n shadingToonyFactor: mtoon.shadingToonyFactor,\r\n giEqualizationFactor: mtoon.giEqualizationFactor,\r\n matcapFactor: mtoon.matcapFactor ? new Vector3(mtoon.matcapFactor) : undefined,\r\n matcapMap: mtoon.matcapTexture\r\n ? await this._loadTexture(model, gltf, mtoon.matcapTexture, true, vfs)\r\n : undefined,\r\n parametricRimColorFactor: mtoon.parametricRimColorFactor\r\n ? new Vector3(mtoon.parametricRimColorFactor)\r\n : undefined,\r\n parametricRimFresnelPowerFactor: mtoon.parametricRimFresnelPowerFactor,\r\n parametricRimLiftFactor: mtoon.parametricRimLiftFactor,\r\n rimMultiplyMap: mtoon.rimMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.rimMultiplyTexture, true, vfs)\r\n : undefined,\r\n rimLightingMixFactor: mtoon.rimLightingMixFactor,\r\n outlineWidthMode: mtoon.outlineWidthMode,\r\n outlineWidthFactor: mtoon.outlineWidthFactor,\r\n outlineWidthMultiplyMap: mtoon.outlineWidthMultiplyTexture\r\n ? await this._loadTexture(model, gltf, mtoon.outlineWidthMultiplyTexture, false, vfs)\r\n : undefined,\r\n outlineColorFactor: mtoon.outlineColorFactor ? new Vector3(mtoon.outlineColorFactor) : undefined,\r\n outlineLightingMixFactor: mtoon.outlineLightingMixFactor,\r\n outlineUsesTangentNormals,\r\n uvAnimationMaskMap: mtoon.uvAnimationMaskTexture\r\n ? await this._loadTexture(model, gltf, mtoon.uvAnimationMaskTexture, false, vfs)\r\n : undefined,\r\n uvAnimationScrollXSpeedFactor: mtoon.uvAnimationScrollXSpeedFactor,\r\n uvAnimationScrollYSpeedFactor: mtoon.uvAnimationScrollYSpeedFactor,\r\n uvAnimationRotationSpeedFactor: mtoon.uvAnimationRotationSpeedFactor,\r\n transparentWithZWrite: mtoon.transparentWithZWrite,\r\n renderQueueOffsetNumber: mtoon.renderQueueOffsetNumber\r\n };\r\n return mtoonMaterial;\r\n }\r\n /** @internal */\r\n private async _loadTexture(\r\n model: SharedModel,\r\n gltf: GLTFContent,\r\n info: Partial<TextureInfo>,\r\n sRGB: boolean,\r\n vfs: VFS\r\n ): Promise<AssetTextureInfo> {\r\n const mt: AssetTextureInfo = {\r\n image: null,\r\n sampler: null,\r\n texCoord: info.texCoord ?? 0,\r\n transform: null\r\n };\r\n const textureInfo = gltf.textures![info.index!];\r\n if (textureInfo) {\r\n if (info.extensions?.KHR_texture_transform) {\r\n const uvTransform = info.extensions.KHR_texture_transform;\r\n if (uvTransform.texCoord !== undefined) {\r\n mt.texCoord = uvTransform.texCoord;\r\n }\r\n const rotation =\r\n uvTransform.rotation !== undefined\r\n ? Matrix4x4.rotationZ(-uvTransform.rotation)\r\n : Matrix4x4.identity();\r\n const scale =\r\n uvTransform.scale !== undefined\r\n ? new Vector3(uvTransform.scale[0], uvTransform.scale[1], 1)\r\n : Vector3.one();\r\n const translation =\r\n uvTransform.offset !== undefined\r\n ? new Vector3(uvTransform.offset[0], uvTransform.offset[1], 0)\r\n : Vector3.zero();\r\n mt.transform = Matrix4x4.scaling(scale).multiplyLeft(rotation).translateLeft(translation);\r\n }\r\n mt.name = textureInfo.name || undefined;\r\n let wrapS: TextureAddressMode = 'repeat';\r\n let wrapT: TextureAddressMode = 'repeat';\r\n let magFilter: TextureFilterMode = 'linear';\r\n let minFilter: TextureFilterMode = 'linear';\r\n let mipFilter: TextureFilterMode = 'linear';\r\n const samplerIndex: number = textureInfo.sampler!;\r\n const sampler = gltf.samplers && gltf.samplers[samplerIndex];\r\n if (sampler) {\r\n switch (sampler.wrapS) {\r\n case 0x2901: // gl.REPEAT\r\n wrapS = 'repeat';\r\n break;\r\n case 0x8370: // gl.MIRRORED_REPEAT\r\n wrapS = 'mirrored-repeat';\r\n break;\r\n case 0x812f: // gl.CLAMP_TO_EDGE\r\n wrapS = 'clamp';\r\n break;\r\n }\r\n switch (sampler.wrapT) {\r\n case 0x2901: // gl.REPEAT\r\n wrapT = 'repeat';\r\n break;\r\n case 0x8370: // gl.MIRRORED_REPEAT\r\n wrapT = 'mirrored-repeat';\r\n break;\r\n case 0x812f: // gl.CLAMP_TO_EDGE\r\n wrapT = 'clamp';\r\n break;\r\n }\r\n switch (sampler.magFilter) {\r\n case 0x2600: // gl.NEAREST\r\n magFilter = 'nearest';\r\n break;\r\n case 0x2601: // gl.LINEAR\r\n magFilter = 'linear';\r\n break;\r\n }\r\n switch (sampler.minFilter) {\r\n case 0x2600: // gl.NEAREST\r\n minFilter = 'nearest';\r\n mipFilter = 'none';\r\n break;\r\n case 0x2601: // gl.LINEAR\r\n minFilter = 'linear';\r\n mipFilter = 'none';\r\n break;\r\n case 0x2700: // gl.NEAREST_MIPMAP_NEAREST\r\n minFilter = 'nearest';\r\n mipFilter = 'nearest';\r\n break;\r\n case 0x2701: // gl.LINEAR_MIPMAP_NEAREST\r\n minFilter = 'linear';\r\n mipFilter = 'nearest';\r\n break;\r\n case 0x2702: // gl.NEAREST_MIPMAP_LINEAR\r\n minFilter = 'nearest';\r\n mipFilter = 'linear';\r\n break;\r\n case 0x2703: // gl.LINEAR_MIPMAP_LINEAR\r\n minFilter = 'linear';\r\n mipFilter = 'linear';\r\n break;\r\n }\r\n }\r\n const imageIndex: number = textureInfo.source!;\r\n mt.image = model.getImage(imageIndex);\r\n if (!mt.image) {\r\n const image = gltf.images![imageIndex];\r\n if (image) {\r\n if (image.uri) {\r\n const imageUrl = vfs.normalizePath(vfs.join(gltf._baseURI, image.uri));\r\n mt.image = {\r\n name: image.name || textureInfo.name || undefined,\r\n uri: imageUrl\r\n };\r\n } else if (typeof image.bufferView === 'number' && image.mimeType) {\r\n const bufferView = gltf.bufferViews && gltf.bufferViews[image.bufferView];\r\n if (bufferView) {\r\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\r\n if (arrayBuffer) {\r\n const view = new Uint8Array(arrayBuffer, bufferView.byteOffset || 0, bufferView.byteLength);\r\n const mimeType = image.mimeType;\r\n mt.image = {\r\n name: image.name || textureInfo.name || undefined,\r\n data: view,\r\n mimeType\r\n };\r\n }\r\n }\r\n }\r\n }\r\n if (mt.image) {\r\n model.setImage(imageIndex, mt.image);\r\n }\r\n }\r\n if (mt.image) {\r\n mt.sRGB = !!sRGB;\r\n mt.sampler = {\r\n wrapS,\r\n wrapT,\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n };\r\n }\r\n }\r\n return mt;\r\n }\r\n /** @internal */\r\n private _primitiveType(type: number) {\r\n switch (type) {\r\n case 0: // GL_POINTS\r\n return 'point-list';\r\n case 1: // GL_LINES\r\n return 'line-list';\r\n /* FIXME:\r\n case 2: // GL_LINE_LOOP\r\n return PrimitiveType.LineLoop;\r\n */\r\n case 3: // GL_LINE_STRIP\r\n return 'line-strip';\r\n case 4: // GL_TRIANGLES\r\n return 'triangle-list';\r\n case 5: // GL_TRIANGLE_STRIP\r\n return 'triangle-strip';\r\n case 6: // GL_TRIANGLE_FAN\r\n return 'triangle-fan';\r\n default:\r\n return null;\r\n }\r\n }\r\n /** @internal */\r\n private _loadIndexBuffer(\r\n gltf: GLTFContent,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n meshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: DracoMeshDecoder\r\n ) {\r\n const accessor = gltf._accessors[accessorIndex];\r\n if (dracoMeshDecoder) {\r\n const indices = dracoMeshDecoder.getIndexBuffer();\r\n if (!indices || indices.length !== accessor.count) {\r\n throw new Error(`Decode index buffer failed`);\r\n }\r\n if (indices.length !== accessor.count) {\r\n throw new Error(`Decode index buffer failed`);\r\n }\r\n gltf._loadedBuffers!.push(indices.buffer);\r\n if (!gltf.bufferViews) {\r\n gltf.bufferViews = [];\r\n }\r\n gltf.bufferViews.push({\r\n buffer: gltf._loadedBuffers!.length - 1,\r\n byteOffset: 0,\r\n byteLength: indices.byteLength\r\n });\r\n accessor.componentType = ComponentType.UINT;\r\n accessor.bufferView = gltf.bufferViews.length - 1;\r\n }\r\n this._setBuffer(gltf, accessorIndex, primitive, null, meshData);\r\n }\r\n /** @internal */\r\n private _loadVertexBuffer(\r\n gltf: GLTFContent,\r\n attribName: string,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n subMeshData: AssetSubMeshData,\r\n dracoExtension?: any,\r\n dracoMeshDecoder?: DracoMeshDecoder\r\n ) {\r\n const dracoId = dracoExtension?.attributes?.[attribName];\r\n if (dracoId !== undefined) {\r\n const accessor = gltf._accessors[accessorIndex];\r\n let buffer: Nullable<TypedArray> = null;\r\n const numElements = accessor.count * accessor.getComponentCount(accessor.type);\r\n switch (accessor.componentType) {\r\n case ComponentType.FLOAT:\r\n buffer = new Float32Array(numElements);\r\n break;\r\n case ComponentType.BYTE:\r\n buffer = new Int8Array(numElements);\r\n break;\r\n case ComponentType.SHORT:\r\n buffer = new Int16Array(numElements);\r\n break;\r\n case ComponentType.INT:\r\n buffer = new Int32Array(numElements);\r\n break;\r\n case ComponentType.UBYTE:\r\n buffer = new Uint8Array(numElements);\r\n break;\r\n case ComponentType.USHORT:\r\n buffer = new Uint16Array(numElements);\r\n break;\r\n case ComponentType.UINT:\r\n buffer = new Uint32Array(numElements);\r\n break;\r\n default:\r\n throw new Error(`Invalid component type: ${accessor.componentType}`);\r\n }\r\n if (!dracoMeshDecoder!.getAttributeBuffer(dracoId, buffer)) {\r\n throw new Error(`Decode draco mesh failed`);\r\n }\r\n gltf._loadedBuffers!.push(buffer.buffer);\r\n if (!gltf.bufferViews) {\r\n gltf.bufferViews = [];\r\n }\r\n gltf.bufferViews.push({\r\n buffer: gltf._loadedBuffers!.length - 1,\r\n byteOffset: 0,\r\n byteLength: buffer.byteLength\r\n });\r\n accessor.bufferView = gltf.bufferViews.length - 1;\r\n }\r\n let semantic: Nullable<VertexSemantic> = null;\r\n switch (attribName) {\r\n case 'POSITION':\r\n semantic = 'position';\r\n break;\r\n case 'NORMAL':\r\n semantic = 'normal';\r\n break;\r\n case 'TANGENT':\r\n semantic = 'tangent';\r\n break;\r\n case 'TEXCOORD_0':\r\n semantic = 'texCoord0';\r\n break;\r\n case 'TEXCOORD_1':\r\n semantic = 'texCoord1';\r\n break;\r\n case 'TEXCOORD_2':\r\n semantic = 'texCoord2';\r\n break;\r\n case 'TEXCOORD_3':\r\n semantic = 'texCoord3';\r\n break;\r\n case 'TEXCOORD_4':\r\n semantic = 'texCoord4';\r\n break;\r\n case 'TEXCOORD_5':\r\n semantic = 'texCoord5';\r\n break;\r\n case 'TEXCOORD_6':\r\n semantic = 'texCoord6';\r\n break;\r\n case 'TEXCOORD_7':\r\n semantic = 'texCoord7';\r\n break;\r\n case 'COLOR_0':\r\n semantic = 'diffuse';\r\n break;\r\n case 'JOINTS_0':\r\n semantic = 'blendIndices';\r\n break;\r\n case 'WEIGHTS_0':\r\n semantic = 'blendWeights';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this._setBuffer(gltf, accessorIndex, primitive, semantic, subMeshData);\r\n }\r\n /** @internal */\r\n private _setBuffer(\r\n gltf: GLTFContent,\r\n accessorIndex: number,\r\n primitive: AssetPrimitiveInfo,\r\n semantic: Nullable<VertexSemantic>,\r\n subMeshData: AssetSubMeshData\r\n ) {\r\n const device = getDevice();\r\n const accessor = gltf._accessors[accessorIndex];\r\n const componentCount = accessor.getComponentCount(accessor.type);\r\n let data = accessor.getNormalizedDeinterlacedView(gltf);\r\n let buffer: Nullable<TypedArray> = null;\r\n let attribFormat: Nullable<VertexAttribFormat> = null;\r\n if (semantic && !(data instanceof Float32Array)) {\r\n const floatData = new Float32Array(data.length);\r\n floatData.set(data);\r\n data = floatData;\r\n }\r\n if (!semantic) {\r\n if (!(data instanceof Uint8Array) && !(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n console.error('Invalid index buffer component type');\r\n return;\r\n }\r\n if (data instanceof Uint32Array && !device.getDeviceCaps().miscCaps.support32BitIndex) {\r\n console.error('Device does not support 32bit vertex index');\r\n return;\r\n }\r\n if (data instanceof Uint8Array) {\r\n const uint16Data = new Uint16Array(data.length);\r\n uint16Data.set(data);\r\n data = uint16Data;\r\n }\r\n }\r\n if (!semantic) {\r\n buffer = data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n } else {\r\n attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\r\n buffer = data;\r\n }\r\n if (buffer) {\r\n if (!semantic) {\r\n primitive.indices = buffer as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\r\n primitive.indexCount = buffer.length;\r\n } else {\r\n const semantic = getVertexAttribName(getVertexAttributeIndex(attribFormat!));\r\n primitive.vertices[semantic] = { format: attribFormat!, data: buffer };\r\n if (semantic === 'position') {\r\n if (!primitive.indices) {\r\n primitive.indexCount = Math.floor(buffer.byteLength / 12);\r\n }\r\n const data = accessor.getNormalizedDeinterlacedView(gltf);\r\n subMeshData.rawPositions = data as Float32Array;\r\n const min = accessor.min;\r\n const max = accessor.max;\r\n if (min && max) {\r\n primitive.boxMin.set(min);\r\n primitive.boxMax.set(max);\r\n } else {\r\n const bbox = new BoundingBox();\r\n bbox.beginExtend();\r\n for (let i = 0; i < data.length; i++) {\r\n const v = new Vector3(\r\n data[i * componentCount],\r\n data[i * componentCount + 1],\r\n data[i * componentCount + 2]\r\n );\r\n bbox.extend(v);\r\n }\r\n if (bbox.isValid()) {\r\n primitive.boxMin.set(bbox.minPoint);\r\n primitive.boxMax.set(bbox.maxPoint);\r\n }\r\n }\r\n } else if (semantic === 'blendIndices') {\r\n subMeshData.rawBlendIndices = accessor.getNormalizedDeinterlacedView(gltf);\r\n } else if (semantic === 'blendWeights') {\r\n subMeshData.rawJointWeights = accessor.getNormalizedDeinterlacedView(gltf);\r\n }\r\n }\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n private isGLB(data: ArrayBuffer): boolean {\r\n if (data.byteLength > 12) {\r\n const p = new Uint32Array(data, 0, 3);\r\n if (p[0] === 0x46546c67 && p[1] === 2 && p[2] === data.byteLength) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n private getGLBChunkInfo(\r\n data: ArrayBuffer,\r\n offset: number\r\n ): { start: number; length: number; type: number } {\r\n const header = new Uint32Array(data, offset, 2);\r\n const start = offset + 8;\r\n const length = header[0];\r\n const type = header[1];\r\n return { start, length, type };\r\n }\r\n /** @internal */\r\n private getGLBChunkInfos(data: ArrayBuffer): { start: number; length: number; type: number }[] {\r\n const infos: { start: number; length: number; type: number }[] = [];\r\n let offset = 12;\r\n while (offset < data.byteLength) {\r\n const info = this.getGLBChunkInfo(data, offset);\r\n infos.push(info);\r\n offset += info.length + 8;\r\n }\r\n return infos;\r\n }\r\n}\r\n"],"names":["VRM_SPRING_BONE_SUBSTEPS","VRM_GRAVITY_ACCELERATION_SCALE","VRM_GRAVITY_POWER_TO_ACCELERATION","VRM_STIFFNESS_TO_FRAME_HARDNESS","VRM_DRAGFORCE_SCALE","GLTFImporter","AbstractModelImporter","initDraco3d","gltf","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","import","data","model","basePath","vfs","buffer","arrayBuffer","isGLB","loadBinary","Response","json","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","getEngine","VFS","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","readFile","encoding","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","i","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","scene","assetScene","AssetScene","name","node","rootNodes","activeScene","_loadVRMC0SpringBones","_loadVRMC1SpringBones","_buildJointDynamicsSpringBones","clearMorphTargetGroups","hasVRMC1","extensions","VRMC_vrm","hasVRMC0","VRM","_loadVRMC1MorphTargetGroups","_loadVRMC0MorphTargetGroups","buildMorphTargetGroupsByName","groups","blendShapeMaster","blendShapeGroups","Array","isArray","value","groupInfo","_getVRMC0BlendShapeGroupName","bindings","binds","bindValue","bindInfo","meshIndex","mesh","targetIndex","index","targetName","_getMorphTargetName","weight","addMorphTargetGroup","expressions","_loadVRMC1ExpressionMap","preset","custom","expressionMap","expressionInfo","Object","entries","expression","morphTargetBinds","nodeIndex","isBinary","presetName","toLowerCase","count","subMesh","subMeshes","Math","max","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","offset","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","map","ref","_getIndex","filter","springBoneColliderGroups","springInfo","springs","joints","jointRef","jointInfo","_getSpringBoneJointInfo","hitRadius","stiffness","gravityPower","gravityDir","dragForce","springBones","center","secondaryAnimation","boneGroupInfo","boneGroups","rootBones","bones","stiffiness","comment","fallback","x","y","z","obj","clone","keys","Number","isInteger","key","directIndex","jointIndex","colliderMap","Map","flatPlaneMap","nodeKeys","forEach","set","converted","_toJointDynamicsCollider","jointDynamicsColliders","flatPlane","_toJointDynamicsFlatPlane","spring","chains","_collectJointDynamicsChainsFromRoots","_collectJointDynamicsChains","flatPlanes","colliderKeys","Set","flatPlaneKeys","get","colliderKey","_getJointDynamicsColliderKey","has","add","flatPlaneKey","_getJointDynamicsFlatPlaneKey","jointDynamicsSpringBones","controllerConfig","_mapSpringJointsToControllerConfig","chainStart","chainEnd","isParentOf","_pushJointDynamicsChain","end","_findSingleChildChainEnd","inferredEnd","current","children","loop","gravity","joint","magnitudeSq","normalize","scale","invCount","frameHardness","min","frameResistance","enableBroadPhase","enableSurfaceCollision","subSteps","curves","hardness","InterpolatorScalar","constant","_frameRatioToSubstepRatio","resistance","_frameRateToSubstepRate","pointRadius","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","constraintOptions","structuralVertical","structuralHorizontal","shear","bendingVertical","collideStructuralVertical","collideStructuralHorizontal","collideShear","isLoop","frameRatio","ratio","pow","frameRate","rate","r","_getAssetNodeKey","_vector3Key","localPosition","_quaternionKey","localRotation","_numberKey","radiusTailScale","height","friction","isInverseCollider","forceType","position","up","undefined","size","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","m","addJoint","Matrix4x4","subarray","addSkeleton","_loadVRMAHumanoidSkeleton","VRMC_vrm_animation","humanBones","humanoid","mapping","_getVRMAHumanoidMapping","hips","body","HumanoidBodyRig","Hips","humanBoneNodes","_getVRMAHumanoidNodes","existingSkeleton","find","every","_setAssetSkeletonHumanoidMapping","root","_findCommonRoot","jointSet","_sortSkeletonJoints","humanoidJointMapping","leftHand","rightHand","setBody","vrmaName","rig","_getVRMAHumanBoneNode","setHand","side","Spine","Chest","UpperChest","Neck","Head","LeftShoulder","LeftUpperArm","LeftLowerArm","LeftHand","RightShoulder","RightUpperArm","RightLowerArm","RightHand","LeftUpperLeg","LeftLowerLeg","LeftFoot","LeftToes","RightUpperLeg","RightLowerLeg","RightFoot","RightToes","HumanoidHandRig","ThumbProximal","ThumbIntermediate","ThumbDistal","IndexProximal","IndexIntermediate","IndexDistal","MiddleProximal","MiddleIntermediate","MiddleDistal","RingProximal","RingIntermediate","RingDistal","PinkyProximal","PinkyIntermediate","PinkyDistal","result","boneName","addMappedNodes","mapped","values","sorted","visit","child","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","translate","rotation","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","getNormalizedDeinterlacedView","output","Float32Array","console","error","mode","interpolation","interpolator","interpolatorType","target","path","Interpolator","animationData","tracks","targetNodeIndex","targetNode","track","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","instancing","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","translationValues","scaleValues","rotationValues","t","s","instances","matrix","decompose","translation","childIndex","meshes","_loadMesh","meshInfo","morphWeights","primitives","meshName","loadedPrimitives","p","subMeshName","subMeshData","material","rawPositions","rawBlendIndices","rawJointWeights","vertices","indexCount","indices","boxMax","boxMin","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","attrib","_loadVertexBuffer","targets","getDevice","positionInfo","numVertices","getVertexFormatComponentCount","format","vertexIndices","targetBox","targetMap","POSITION","MORPH_TARGET_POSITION","NORMAL","MORPH_TARGET_NORMAL","TANGENT","MORPH_TARGET_TANGENT","TEXCOORD_0","MORPH_TARGET_TEX0","TEXCOORD_1","MORPH_TARGET_TEX1","TEXCOORD_2","MORPH_TARGET_TEX2","TEXCOORD_3","MORPH_TARGET_TEX3","COLOR_0","MORPH_TARGET_COLOR","morphAttribSet","k","numComponents","accessorIndex","getComponentCount","BoundingBox","morphAttribCount","_loadIndexBuffer","primitiveType","_primitiveType","materialInfo","materials","outlineUsesTangentNormals","_shouldGenerateMToonOutlineNormals","source","_generateMToonOutlineNormals","loaded","hasVertexNormal","hasVertexColor","hasVertexTangent","flagsHash","v","materialHash","getMaterial","_loadMaterial","setMaterial","addPrimitive","primitiveInfo","VRMC_materials_mtoon","normalTexture","some","sums","positions","positionStride","vertexCount","_getTriangleIndices","i0","i1","i2","p0","p1","p2","ax","ay","az","bx","by","bz","nx","ny","nz","_accumulateOutlineNormal","normalInfo","normals","normalStride","tangents","_outlinePositionKey","sum","len","hypot","fallbackLen","stride","Uint32Array","round","vertexColor","vertexNormal","useTangent","materialName","assetMaterial","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","bumpScale","emissiveColor","emissiveStrength","occlusionStrength","alphaMode","alphaCutoff","doubleSided","mtoonExtension","KHR_materials_pbrSpecularGlossiness","normalMap","_loadTexture","occlusionMap","occlusionTexture","strength","emissiveMap","emissiveTexture","KHR_materials_emissive_strength","emissiveFactor","ior","common","diffuse","Vector4","baseColorFactor","metallic","metallicFactor","roughness","roughnessFactor","diffuseMap","baseColorTexture","metallicMap","metallicRoughnessTexture","metallicIndex","roughnessIndex","_loadMToonMaterial","sg","diffuseFactor","specular","specularFactor","glossness","glossnessFactor","diffuseTexture","specularGlossnessMap","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","specularMap","specularTexture","specularColorMap","specularColorTexture","iridescence","KHR_materials_iridescence","iridescenceFactor","iridescenceMap","iridescenceTexture","iridescenceIor","iridescenceThicknessMinimum","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","transmission","KHR_materials_transmission","transmissionFactor","transmissionMap","transmissionTexture","thicknessFactor","thicknessMap","attenuationDistance","attenuationColor","volume","KHR_materials_volume","thicknessTexture","sheen","KHR_materials_sheen","sheenColorFactor","sheenColorMap","sheenColorTexture","sheenRoughnessFactor","sheenRoughnessMap","sheenRoughnessTexture","cc","KHR_materials_clearcoat","clearcoat","clearCoatFactor","clearcoatFactor","clearCoatIntensityMap","clearcoatTexture","clearCoatRoughnessFactor","clearcoatRoughnessFactor","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearCoatNormalMap","clearcoatNormalTexture","mtoon","pbr","mtoonMaterial","shadeColorFactor","shadeMultiplyMap","shadeMultiplyTexture","shadingShiftFactor","shadingShiftMap","shadingShiftTexture","shadingShiftTextureScale","shadingToonyFactor","giEqualizationFactor","matcapFactor","matcapMap","matcapTexture","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimMultiplyMap","rimMultiplyTexture","rimLightingMixFactor","outlineWidthMode","outlineWidthFactor","outlineWidthMultiplyMap","outlineWidthMultiplyTexture","outlineColorFactor","outlineLightingMixFactor","uvAnimationMaskMap","uvAnimationMaskTexture","uvAnimationScrollXSpeedFactor","uvAnimationScrollYSpeedFactor","uvAnimationRotationSpeedFactor","transparentWithZWrite","renderQueueOffsetNumber","sRGB","mt","image","texCoord","transform","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","getImage","images","imageUrl","mimeType","view","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","getAttributeBuffer","semantic","device","componentCount","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","floor","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos"],"mappings":";;;;;;AA2LA,MAAMA,wBAA2B,GAAA,CAAA;AACjC,MAAMC,8BAAiC,GAAA,CAAA;AAEvC,MAAMC,oCAAoC,GAAMD,GAAAA,8BAAAA;AAChD,MAAME,+BAAkC,GAAA,IAAA;AACxC,MAAMC,mBAAsB,GAAA,GAAA;AAY5B;;;IAIO,MAAMC,YAAqBC,SAAAA,qBAAAA,CAAAA;AAChC,qBACA,MAAMC,WAAYC,CAAAA,IAAiB,EAAE;QACnC,OAAO,IAAIC,QAAc,CAACC,OAAAA,GAAAA;YACxB,MAAMC,kBAAAA,GAAqB,MAACC,CAAeC,kBAAkB;AAC7D,YAAA,IAAIF,kBAAoB,EAAA;gBACtBA,kBAAmB,CAAA;AACjBG,oBAAAA,cAAAA,EAAgB,CAACC,MAAAA,GAAAA;AACfP,wBAAAA,IAAAA,CAAKQ,YAAY,GAAGD,MAAAA;AACpBL,wBAAAA,OAAAA,EAAAA;AACF;AACF,iBAAA,CAAA;aACK,MAAA;AACLA,gBAAAA,OAAAA,EAAAA;AACF;AACF,SAAA,CAAA;AACF;IACA,MAAMO,MAAAA,CAAOC,IAAU,EAAEC,KAAkB,EAAEC,QAAgB,EAAEC,GAAS,EAAE;QACxE,MAAMC,MAAAA,GAAS,MAAMJ,IAAAA,CAAKK,WAAW,EAAA;AACrC,QAAA,IAAI,IAAI,CAACC,KAAK,CAACF,MAAS,CAAA,EAAA;AACtB,YAAA,MAAM,IAAI,CAACG,UAAU,CAACH,MAAAA,EAAQH,OAAOC,QAAUC,EAAAA,GAAAA,CAAAA;AAC/C,YAAA;AACF;AACA,QAAA,MAAMb,IAAQ,GAAA,MAAM,IAAIkB,QAAAA,CAASR,MAAMS,IAAI,EAAA;AAC3CnB,QAAAA,IAAAA,CAAKoB,cAAc,GAAG,IAAA;AACtB,QAAA,MAAM,IAAI,CAACC,QAAQ,CAACrB,IAAAA,EAAMW,OAAOC,QAAUC,EAAAA,GAAAA,CAAAA;AAC7C;qBAEA,MAAMI,UAAAA,CAAWH,MAAmB,EAAEH,KAAkB,EAAEC,QAAgB,EAAEC,GAAS,EAAE;AACrF,QAAA,MAAMS,aAAgB,GAAA,UAAA;AACtB,QAAA,MAAMC,eAAkB,GAAA,UAAA;AACxB,QAAA,IAAIvB,IAA8B,GAAA,IAAA;AAClC,QAAA,MAAMwB,UAAyB,EAAE;AACjC,QAAA,MAAMC,UAAa,GAAA,IAAI,CAACC,gBAAgB,CAACZ,MAAAA,CAAAA;QACzC,KAAK,MAAMa,QAAQF,UAAY,CAAA;AAC7B,YAAA,IAAIE,IAAKC,CAAAA,IAAI,KAAKN,aAAAA,IAAiB,CAACtB,IAAM,EAAA;AACxC,gBAAA,MAAM6B,YAAY,IAAIC,UAAAA,CAAWhB,MAAQ,EAAA,EAAA,EAAIa,KAAKI,MAAM,CAAA;AACxD,gBAAA,MAAMC,YAAe,GAAA,IAAIC,WAAY,CAAA,OAAA,CAAA,CAASC,MAAM,CAACL,SAAAA,CAAAA;gBACrD7B,IAAOmC,GAAAA,IAAAA,CAAKC,KAAK,CAACJ,YAAAA,CAAAA;AACpB,aAAA,MAAO,IAAIL,IAAAA,CAAKC,IAAI,KAAKL,eAAiB,EAAA;AACxCC,gBAAAA,OAAAA,CAAQa,IAAI,CAACvB,MAAOwB,CAAAA,KAAK,CAACX,IAAAA,CAAKY,KAAK,EAAEZ,IAAKY,CAAAA,KAAK,GAAGZ,IAAAA,CAAKI,MAAM,CAAA,CAAA;AAChE;AACF;QACAS,MAAO,CAAA,CAAC,CAACxC,IAAM,EAAA,qBAAA,CAAA;AACfA,QAAAA,IAAAA,CAAKoB,cAAc,GAAGI,OAAAA;AACtB,QAAA,MAAM,IAAI,CAACH,QAAQ,CAACrB,IAAAA,EAAMW,OAAOC,QAAUC,EAAAA,GAAAA,CAAAA;AAC7C;qBAEA,MAAMQ,QAAAA,CAASrB,IAAiB,EAAEW,KAAkB,EAAEC,QAAgB,EAAEC,GAAS,EAAE;QACjFA,GAAMA,GAAAA,GAAAA,IAAO4B,YAAYC,GAAG;;AAE5B,QAAA,IACE,CAAC1C,IAAAA,CAAKQ,YAAY,IAClBR,IAAK2C,CAAAA,kBAAkB,IACvB3C,IAAAA,CAAK2C,kBAAkB,CAACC,OAAO,CAAC,iCAAiC,CACjE,EAAA;YACA,MAAM,IAAI,CAAC7C,WAAW,CAACC,IAAAA,CAAAA;AACvBwC,YAAAA,MAAAA,CAAO,CAAC,CAACxC,IAAKQ,CAAAA,YAAY,EAAE,uCAAA,CAAA;AAC9B;QACAR,IAAK6C,CAAAA,UAAU,GAAG,EAAE;QACpB7C,IAAK8C,CAAAA,MAAM,GAAG,EAAE;QAChB9C,IAAK+C,CAAAA,OAAO,GAAG,EAAE;;QAEjB,MAAMC,KAAAA,GAAQhD,KAAKgD,KAAK;AACxB,QAAA,IAAIA,KAAO,EAAA;YACT,MAAMC,WAAAA,GAAcD,MAAME,OAAO;AACjCV,YAAAA,MAAAA,CAAOS,WAAgB,KAAA,KAAA,EAAO,CAAC,sBAAsB,EAAEA,WAAa,CAAA,CAAA,CAAA;AACtE;AACAjD,QAAAA,IAAAA,CAAKmD,QAAQ,GAAGvC,QAAAA;QAChB,IAAI,CAACZ,IAAKoB,CAAAA,cAAc,EAAE;YACxBpB,IAAKoB,CAAAA,cAAc,GAAG,EAAE;YACxB,MAAMI,OAAAA,GAAUxB,KAAKwB,OAAO;AAC5B,YAAA,IAAIA,OAAS,EAAA;gBACX,KAAK,MAAMV,UAAUU,OAAS,CAAA;oBAC5B,MAAM4B,GAAAA,GACJvC,GAAIwC,CAAAA,YAAY,CAACvC,MAAAA,CAAOsC,GAAG,CAAA,IAAMvC,GAAIyC,CAAAA,aAAa,CAACxC,MAAAA,CAAOsC,GAAG,CAAA,GACzDtC,OAAOsC,GAAG,GACVvC,GAAI0C,CAAAA,aAAa,CAAC1C,GAAAA,CAAI2C,IAAI,CAACxD,IAAKmD,CAAAA,QAAQ,EAAErC,MAAAA,CAAOsC,GAAG,CAAA,CAAA;AAC1D,oBAAA,MAAMK,GAAO,GAAA,MAAM5C,GAAI6C,CAAAA,QAAQ,CAACN,GAAM,EAAA;wBAAEO,QAAU,EAAA;AAAS,qBAAA,CAAA;AAC3DnB,oBAAAA,MAAAA,CAAO1B,MAAO8C,CAAAA,UAAU,KAAKH,GAAAA,CAAIG,UAAU,EAAE,yCAAA,CAAA;oBAC7C5D,IAAKoB,CAAAA,cAAc,CAACiB,IAAI,CAACoB,GAAAA,CAAAA;AAC3B;AACF;AACF;QACA,MAAMI,SAAAA,GAAY7D,KAAK6D,SAAS;AAChC,QAAA,IAAIA,SAAW,EAAA;AACb,YAAA,KAAK,MAAMC,QAAAA,IAAY9D,IAAK6D,CAAAA,SAAS,CAAG;AACtC7D,gBAAAA,IAAAA,CAAK6C,UAAU,CAACR,IAAI,CAAC,IAAI0B,YAAaD,CAAAA,QAAAA,CAAAA,CAAAA;AACxC;AACF;QACA,MAAME,MAAAA,GAAShE,KAAKgE,MAAM;QAC1BxB,MAAO,CAAA,CAAC,CAACwB,MAAQ,EAAA,0BAAA,CAAA;AACjB,QAAA,MAAMC,WAActD,GAAAA,KAAAA;AACpB,QAAA,MAAM,IAAI,CAACuD,WAAW,CAACD,aAAajE,IAAMa,EAAAA,GAAAA,CAAAA;QAC1C,IAAI,CAACsD,UAAU,CAACnE,IAAMiE,EAAAA,WAAAA,CAAAA;QACtB,IAAI,CAACG,UAAU,CAACpE,IAAMiE,EAAAA,WAAAA,CAAAA;QACtB,IAAI,CAACI,sBAAsB,CAACrE,IAAMiE,EAAAA,WAAAA,CAAAA;QAClC,IAAK,IAAIK,CAAI,GAAA,CAAA,EAAGA,CAAKtE,IAAAA,IAAKuE,CAAAA,KAAK,EAAExC,MAAAA,IAAU,CAAA,CAAA,EAAIuC,CAAK,EAAA,CAAA;AAClD,YAAA,IAAI,OAAOtE,IAAKuE,CAAAA,KAAK,CAAED,CAAAA,CAAE,CAACE,IAAI,KAAK,QAAYxE,IAAAA,IAAAA,CAAKuE,KAAK,CAAED,EAAE,CAACE,IAAI,IAAK,CAAG,EAAA;AACxExE,gBAAAA,IAAAA,CAAK8C,MAAM,CAACwB,CAAAA,CAAE,CAACG,QAAQ,GAAGR,WAAYS,CAAAA,SAAS,CAAC1E,IAAAA,CAAKuE,KAAK,CAAED,CAAE,CAAA,CAACE,IAAI,CAAE;AACvE;AACF;QACA,IAAI,CAACG,gBAAgB,CAAC3E,IAAMiE,EAAAA,WAAAA,CAAAA;QAC5B,IAAI,CAACW,eAAe,CAAC5E,IAAMiE,EAAAA,WAAAA,CAAAA;QAC3B,KAAK,MAAMY,SAASb,MAAQ,CAAA;AAC1B,YAAA,MAAMc,UAAa,GAAA,IAAIC,UAAWF,CAAAA,KAAAA,CAAMG,IAAI,CAAA;AAC5C,YAAA,KAAK,MAAMC,IAAAA,IAAQJ,KAAMN,CAAAA,KAAK,CAAG;AAC/BO,gBAAAA,UAAAA,CAAWI,SAAS,CAAC7C,IAAI,CAACrC,IAAK8C,CAAAA,MAAM,CAACmC,IAAK,CAAA,CAAA;AAC7C;YACAhB,WAAYD,CAAAA,MAAM,CAAC3B,IAAI,CAACyC,UAAAA,CAAAA;AAC1B;AACA,QAAA,IAAI,OAAO9E,IAAAA,CAAK6E,KAAK,KAAK,QAAU,EAAA;YAClCZ,WAAYkB,CAAAA,WAAW,GAAGnF,IAAAA,CAAK6E,KAAK;AACtC;AACF;AACA,qBACA,gBAAQF,CAAiB3E,IAAiB,EAAEW,KAAkB,EAAE;QAC9D,IAAI,CAACyE,qBAAqB,CAACpF,IAAMW,EAAAA,KAAAA,CAAAA;QACjC,IAAI,CAAC0E,qBAAqB,CAACrF,IAAMW,EAAAA,KAAAA,CAAAA;QACjC,IAAI,CAAC2E,8BAA8B,CAAC3E,KAAAA,CAAAA;AACtC;AAEA,qBACA,sBAAQ0D,CAAuBrE,IAAiB,EAAEW,KAAkB,EAAE;AACpEA,QAAAA,KAAAA,CAAM4E,sBAAsB,EAAA;AAC5B,QAAA,MAAMC,QAAW,GAAA,CAAC,CAACxF,IAAAA,CAAKyF,UAAU,EAAEC,QAAAA;AACpC,QAAA,MAAMC,QAAW,GAAA,CAAC,CAAC3F,IAAAA,CAAKyF,UAAU,EAAEG,GAAAA;AACpC,QAAA,IAAIJ,QAAU,EAAA;YACZ,IAAI,CAACK,2BAA2B,CAAC7F,IAAMW,EAAAA,KAAAA,CAAAA;AACzC,SAAA,MAAO,IAAIgF,QAAU,EAAA;YACnB,IAAI,CAACG,2BAA2B,CAAC9F,IAAMW,EAAAA,KAAAA,CAAAA;SAClC,MAAA;AACLA,YAAAA,KAAAA,CAAMoF,4BAA4B,EAAA;AACpC;AACF;IAEQD,2BAA4B9F,CAAAA,IAAiB,EAAEW,KAAkB,EAAE;AACzE,QAAA,MAAMqF,MAAShG,GAAAA,IAAAA,CAAKyF,UAAU,EAAEG,KAAKK,gBAAkBC,EAAAA,gBAAAA;AACvD,QAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACJ,MAAS,CAAA,EAAA;AAC1B,YAAA;AACF;QACA,KAAK,MAAMK,SAASL,MAAQ,CAAA;AAC1B,YAAA,IAAI,CAACK,KAAAA,IAAS,OAAOA,KAAAA,KAAU,QAAU,EAAA;AACvC,gBAAA;AACF;AACA,YAAA,MAAMC,SAAYD,GAAAA,KAAAA;AAClB,YAAA,MAAMrB,IAAO,GAAA,IAAI,CAACuB,4BAA4B,CAACD,SAAAA,CAAAA;AAC/C,YAAA,IAAI,CAACtB,IAAM,EAAA;AACT,gBAAA;AACF;AACA,YAAA,MAAMwB,WAAsC,EAAE;YAC9C,MAAMC,KAAAA,GAAQN,KAAMC,CAAAA,OAAO,CAACE,SAAAA,CAAUG,KAAK,CAAIH,GAAAA,SAAAA,CAAUG,KAAK,GAAG,EAAE;YACnE,KAAK,MAAMC,aAAaD,KAAO,CAAA;AAC7B,gBAAA,IAAI,CAACC,SAAAA,IAAa,OAAOA,SAAAA,KAAc,QAAU,EAAA;AAC/C,oBAAA;AACF;AACA,gBAAA,MAAMC,QAAWD,GAAAA,SAAAA;gBACjB,MAAME,SAAAA,GAAY,OAAOD,QAASE,CAAAA,IAAI,KAAK,QAAWF,GAAAA,QAAAA,CAASE,IAAI,GAAG,EAAC;gBACvE,MAAMC,WAAAA,GAAc,OAAOH,QAASI,CAAAA,KAAK,KAAK,QAAWJ,GAAAA,QAAAA,CAASI,KAAK,GAAG,EAAC;AAC3E,gBAAA,MAAMF,OAAOD,SAAa,IAAA,CAAA,GAAI5G,KAAK+C,OAAO,CAAC6D,UAAU,GAAG,IAAA;AACxD,gBAAA,IAAI,CAACC,IAAM,EAAA;AACT,oBAAA;AACF;AACA,gBAAA,MAAMG,UAAa,GAAA,IAAI,CAACC,mBAAmB,CAACJ,IAAMC,EAAAA,WAAAA,CAAAA;AAClD,gBAAA,IAAI,CAACE,UAAY,EAAA;AACf,oBAAA;AACF;AACAR,gBAAAA,QAAAA,CAASnE,IAAI,CAAC;AACZwE,oBAAAA,IAAAA;AACAC,oBAAAA,WAAAA;AACAE,oBAAAA,UAAAA;oBACAE,MAAQ,EAAA,OAAOP,SAASO,MAAM,KAAK,WAAWP,QAASO,CAAAA,MAAM,GAAG,GAAM,GAAA;AACxE,iBAAA,CAAA;AACF;AACAvG,YAAAA,KAAAA,CAAMwG,mBAAmB,CAAC;AAAEnC,gBAAAA,IAAAA;AAAMwB,gBAAAA;AAAS,aAAA,CAAA;AAC7C;AACF;IAEQX,2BAA4B7F,CAAAA,IAAiB,EAAEW,KAAkB,EAAE;AACzE,QAAA,MAAMyG,WAAcpH,GAAAA,IAAAA,CAAKyF,UAAU,EAAEC,QAAU0B,EAAAA,WAAAA;AAC/C,QAAA,IAAI,CAACA,WAAa,EAAA;AAChB,YAAA;AACF;AACA,QAAA,IAAI,CAACC,uBAAuB,CAACrH,IAAMW,EAAAA,KAAAA,EAAOyG,YAAYE,MAAM,CAAA;AAC5D,QAAA,IAAI,CAACD,uBAAuB,CAACrH,IAAMW,EAAAA,KAAAA,EAAOyG,YAAYG,MAAM,CAAA;AAC9D;AAEQF,IAAAA,uBAAAA,CAAwBrH,IAAiB,EAAEW,KAAkB,EAAE6G,aAAsB,EAAE;AAC7F,QAAA,IAAI,CAACA,aAAAA,IAAiB,OAAOA,aAAAA,KAAkB,QAAU,EAAA;AACvD,YAAA;AACF;QACA,KAAK,MAAM,CAACxC,IAAMyC,EAAAA,cAAAA,CAAe,IAAIC,MAAOC,CAAAA,OAAO,CAACH,aAAgB,CAAA,CAAA;AAClE,YAAA,IAAI,CAACC,cAAAA,IAAkB,OAAOA,cAAAA,KAAmB,QAAU,EAAA;AACzD,gBAAA;AACF;AACA,YAAA,MAAMG,UAAaH,GAAAA,cAAAA;AACnB,YAAA,MAAMjB,WAAsC,EAAE;YAC9C,MAAMqB,gBAAAA,GAAmB1B,KAAMC,CAAAA,OAAO,CAACwB,UAAAA,CAAWC,gBAAgB,CAAID,GAAAA,UAAAA,CAAWC,gBAAgB,GAAG,EAAE;YACtG,KAAK,MAAMnB,aAAamB,gBAAkB,CAAA;AACxC,gBAAA,IAAI,CAACnB,SAAAA,IAAa,OAAOA,SAAAA,KAAc,QAAU,EAAA;AAC/C,oBAAA;AACF;AACA,gBAAA,MAAMC,QAAWD,GAAAA,SAAAA;gBACjB,MAAMoB,SAAAA,GAAY,OAAOnB,QAAS1B,CAAAA,IAAI,KAAK,QAAW0B,GAAAA,QAAAA,CAAS1B,IAAI,GAAG,EAAC;gBACvE,MAAM6B,WAAAA,GAAc,OAAOH,QAASI,CAAAA,KAAK,KAAK,QAAWJ,GAAAA,QAAAA,CAASI,KAAK,GAAG,EAAC;AAC3E,gBAAA,MAAM9B,OAAO6C,SAAa,IAAA,CAAA,GAAI9H,KAAK8C,MAAM,CAACgF,UAAU,GAAG,IAAA;gBACvD,MAAMjB,IAAAA,GAAO5B,MAAM4B,IAAQ,IAAA,IAAA;gBAC3B,IAAI,CAAC5B,IAAQ,IAAA,CAAC4B,IAAM,EAAA;AAClB,oBAAA;AACF;AACA,gBAAA,MAAMG,UAAa,GAAA,IAAI,CAACC,mBAAmB,CAACJ,IAAMC,EAAAA,WAAAA,CAAAA;AAClD,gBAAA,IAAI,CAACE,UAAY,EAAA;AACf,oBAAA;AACF;AACAR,gBAAAA,QAAAA,CAASnE,IAAI,CAAC;AACZ4C,oBAAAA,IAAAA;AACA6B,oBAAAA,WAAAA;AACAE,oBAAAA,UAAAA;AACAE,oBAAAA,MAAAA,EAAQ,OAAOP,QAASO,CAAAA,MAAM,KAAK,QAAWP,GAAAA,QAAAA,CAASO,MAAM,GAAG;AAClE,iBAAA,CAAA;AACF;AACAvG,YAAAA,KAAAA,CAAMwG,mBAAmB,CAAC;AACxBnC,gBAAAA,IAAAA;AACAwB,gBAAAA,QAAAA;gBACAuB,QAAUH,EAAAA,UAAAA,CAAWG,QAAQ,KAAK;AACpC,aAAA,CAAA;AACF;AACF;AAEQxB,IAAAA,4BAAAA,CAA6BD,SAAmC,EAAoB;QAC1F,MAAM0B,UAAAA,GAAa,OAAO1B,SAAU0B,CAAAA,UAAU,KAAK,QAAW1B,GAAAA,SAAAA,CAAU0B,UAAU,GAAG,EAAA;AACrF,QAAA,IAAIA,UAAcA,IAAAA,UAAAA,CAAWC,WAAW,EAAA,KAAO,SAAW,EAAA;YACxD,OAAOD,UAAAA;AACT;QACA,MAAMhD,IAAAA,GAAO,OAAOsB,SAAUtB,CAAAA,IAAI,KAAK,QAAWsB,GAAAA,SAAAA,CAAUtB,IAAI,GAAG,EAAA;AACnE,QAAA,OAAOA,QAAQgD,UAAc,IAAA,IAAA;AAC/B;IAEQf,mBAAoBJ,CAAAA,IAAmB,EAAEC,WAAmB,EAAoB;AACtF,QAAA,IAAIA,cAAc,CAAG,EAAA;YACnB,OAAO,IAAA;AACT;AACA,QAAA,IAAIoB,KAAQ,GAAA,CAAA;AACZ,QAAA,KAAK,MAAMC,OAAAA,IAAWtB,IAAKuB,CAAAA,SAAS,CAAE;AACpCF,YAAAA,KAAAA,GAAQG,IAAKC,CAAAA,GAAG,CAACJ,KAAAA,EAAOC,QAAQI,UAAU,CAAA;AAC5C;AACA,QAAA,OAAOzB,WAAcoB,GAAAA,KAAAA,GAASrB,IAAK2B,CAAAA,UAAU,GAAG1B,WAAY,CAAA,IAAI,CAAC,MAAM,EAAEA,WAAAA,CAAAA,CAAa,GAAI,IAAA;AAC5F;IAEQzB,qBAAsBrF,CAAAA,IAAiB,EAAEW,KAAkB,EAAE;QACnE,MAAM8H,GAAAA,GAAMzI,IAAKyF,CAAAA,UAAU,EAAEiD,eAAAA;AAC7B,QAAA,IAAI,CAACD,GAAK,EAAA;AACR,YAAA;AACF;AAEA,QAAA,MAAME,YAAiD,EAAE;AACzD,QAAA,IAAK,IAAIrE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,CAACmE,GAAAA,CAAIE,SAAS,IAAI,EAAC,EAAG5G,MAAM,EAAEuC,CAAK,EAAA,CAAA;AACrD,YAAA,MAAMsE,YAAeH,GAAAA,GAAAA,CAAIE,SAAS,CAACrE,CAAE,CAAA;AACrC,YAAA,MAAMW,OAAO,IAAI,CAAC4D,QAAQ,CAAC7I,IAAAA,EAAM4I,aAAa3D,IAAI,CAAA;AAClD,YAAA,MAAM6D,aAAgBF,GAAAA,YAAAA,CAAanD,UAAU,EAAEsD,iCAAmCC,EAAAA,KAAAA;AAClF,YAAA,IAAI,CAAC/D,IAAS,IAAA,CAAC2D,aAAaI,KAAK,IAAI,CAACF,aAAgB,EAAA;gBACpDH,SAAS,CAACrE,EAAE,GAAG,IAAA;AACf,gBAAA;AACF;YACA,MAAM2E,MAAAA,GAASL,YAAaI,CAAAA,KAAK,EAAEC,MAAAA;YACnC,MAAMC,OAAAA,GAAUN,YAAaI,CAAAA,KAAK,EAAEE,OAAAA;AACpC,YAAA,MAAMC,iBAAiBL,aAAeG,EAAAA,MAAAA;AACtC,YAAA,MAAMG,kBAAkBN,aAAeI,EAAAA,OAAAA;AACvC,YAAA,MAAMG,gBAAgBP,aAAeQ,EAAAA,KAAAA;AACrC,YAAA,IAAIC,QAA8C,GAAA,IAAA;AAClD,YAAA,IAAIN,MAAQ,EAAA;gBACVM,QAAW,GAAA;AACTvE,oBAAAA,IAAAA,EAAM4D,aAAa5D,IAAI;AACvBC,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,QAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACR,OAAOO,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBACxDC,MAAQX,EAAAA,MAAAA,CAAOW,MAAM,IAAI,CAAA;AACzBC,wBAAAA,MAAAA,EAAQZ,OAAOY;AACjB;AACF,iBAAA;AACF,aAAA,MAAO,IAAIV,cAAgB,EAAA;gBACzBI,QAAW,GAAA;AACTvE,oBAAAA,IAAAA,EAAM4D,aAAa5D,IAAI;AACvBC,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,QAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACN,eAAeK,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBAChEC,MAAQT,EAAAA,cAAAA,CAAeS,MAAM,IAAI,CAAA;AACjCC,wBAAAA,MAAAA,EAAQV,eAAeU;AACzB;AACF,iBAAA;AACF,aAAA,MAAO,IAAIX,OAAS,EAAA;gBAClBK,QAAW,GAAA;AACTvE,oBAAAA,IAAAA,EAAM4D,aAAa5D,IAAI;AACvBC,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,SAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACP,QAAQM,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBACzDG,IAAM,EAAA,IAAI,CAACL,eAAe,CAACP,QAAQY,IAAI,EAAEJ,QAAQC,IAAI,EAAA,CAAA;wBACrDC,MAAQV,EAAAA,OAAAA,CAAQU,MAAM,IAAI,CAAA;AAC1BC,wBAAAA,MAAAA,EAAQX,QAAQW;AAClB;AACF,iBAAA;AACF,aAAA,MAAO,IAAIT,eAAiB,EAAA;gBAC1BG,QAAW,GAAA;AACTvE,oBAAAA,IAAAA,EAAM4D,aAAa5D,IAAI;AACvBC,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,SAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACL,gBAAgBI,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBACjEG,IAAM,EAAA,IAAI,CAACL,eAAe,CAACL,gBAAgBU,IAAI,EAAEJ,QAAQC,IAAI,EAAA,CAAA;wBAC7DC,MAAQR,EAAAA,eAAAA,CAAgBQ,MAAM,IAAI,CAAA;AAClCC,wBAAAA,MAAAA,EAAQT,gBAAgBS;AAC1B;AACF,iBAAA;AACF,aAAA,MAAO,IAAIR,aAAe,EAAA;gBACxBE,QAAW,GAAA;AACTvE,oBAAAA,IAAAA,EAAM4D,aAAa5D,IAAI;AACvBC,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,OAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACJ,cAAcG,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBAC/DI,MAAQ,EAAA,IAAI,CAACN,eAAe,CAACJ,cAAcU,MAAM,EAAEL,QAAQM,MAAM,EAAA;AACnE;AACF,iBAAA;AACF;AACA,YAAA,IAAIT,QAAU,EAAA;gBACZZ,SAAS,CAACrE,EAAE,GAAGiF,QAAAA;gBACf5I,KAAMsJ,CAAAA,mBAAmB,CAAC5H,IAAI,CAACkH,QAAAA,CAAAA;aAC1B,MAAA;gBACLZ,SAAS,CAACrE,EAAE,GAAG,IAAA;AACjB;AACF;AAEA,QAAA,MAAM4F,iBAAiD,EAAE;AACzD,QAAA,KAAK,MAAM5D,SAAamC,IAAAA,GAAAA,CAAIyB,cAAc,IAAI,EAAE,CAAE;AAChD,YAAA,MAAMC,KAAsC,GAAA;AAC1CnF,gBAAAA,IAAAA,EAAMsB,UAAUtB,IAAI;AACpB2D,gBAAAA,SAAAA,EAAW,CAACrC,SAAAA,CAAUqC,SAAS,IAAI,EAAE,EAClCyB,GAAG,CAAC,CAACC,MAAiB1B,SAAS,CAAC,IAAI,CAAC2B,SAAS,CAACD,GAAK,EAAA;AAAC,wBAAA,UAAA;AAAY,wBAAA;qBAAQ,CAAE,CAAA,CAAA,CAC3EE,MAAM,CAAC,CAAChB,QAAAA,GAAAA;AACP,oBAAA,OAAO,CAAC,CAACA,QAAAA;AACX,iBAAA;AACJ,aAAA;AACAW,YAAAA,cAAAA,CAAe7H,IAAI,CAAC8H,KAAAA,CAAAA;YACpBxJ,KAAM6J,CAAAA,wBAAwB,CAACnI,IAAI,CAAC8H,KAAAA,CAAAA;AACtC;AAEA,QAAA,KAAK,MAAMM,UAAchC,IAAAA,GAAAA,CAAIiC,OAAO,IAAI,EAAE,CAAE;AAC1C,YAAA,MAAMC,SAAiC,EAAE;AACzC,YAAA,KAAK,MAAMC,QAAYH,IAAAA,UAAAA,CAAWE,MAAM,IAAI,EAAE,CAAE;AAC9C,gBAAA,MAAME,SAAY,GAAA,IAAI,CAACC,uBAAuB,CAACrC,GAAKmC,EAAAA,QAAAA,CAAAA;AACpD,gBAAA,IAAI,CAACC,SAAW,EAAA;AACd,oBAAA;AACF;AACA,gBAAA,MAAM5F,OAAO,IAAI,CAAC4D,QAAQ,CAAC7I,MAAM6K,SAAW5F,EAAAA,IAAAA,CAAAA;AAC5C,gBAAA,IAAI,CAACA,IAAM,EAAA;AACT,oBAAA;AACF;AACA0F,gBAAAA,MAAAA,CAAOtI,IAAI,CAAC;AACV4C,oBAAAA,IAAAA;oBACA8F,SAAWF,EAAAA,SAAAA,CAAUE,SAAS,IAAI,CAAA;oBAClCC,SAAWH,EAAAA,SAAAA,CAAUG,SAAS,IAAI,CAAA;oBAClCC,YAAcJ,EAAAA,SAAAA,CAAUI,YAAY,IAAI,CAAA;oBACxCC,UAAY,EAAA,IAAI,CAACzB,eAAe,CAACoB,SAAAA,CAAUK,UAAU,EAAE,IAAIxB,OAAAA,CAAQ,CAAG,EAAA,EAAI,EAAA,CAAA,CAAA,CAAA;oBAC1EyB,SAAWN,EAAAA,SAAAA,CAAUM,SAAS,IAAI;AACpC,iBAAA,CAAA;AACF;YACAxK,KAAMyK,CAAAA,WAAW,CAAC/I,IAAI,CAAC;AACrB2C,gBAAAA,IAAAA,EAAMyF,WAAWzF,IAAI;AACrBqG,gBAAAA,MAAAA,EAAQ,IAAI,CAACxC,QAAQ,CAAC7I,IAAAA,EAAMyK,WAAWY,MAAM,CAAA;AAC7CV,gBAAAA,MAAAA;AACAT,gBAAAA,cAAAA,EAAgB,CAACO,UAAAA,CAAWP,cAAc,IAAI,EAAE,EAC7CE,GAAG,CAAC,CAACC,MAAiBH,cAAc,CAAC,IAAI,CAACI,SAAS,CAACD,GAAK,EAAA;AAAC,wBAAA,eAAA;AAAiB,wBAAA;qBAAQ,CAAE,CAAA,CAAA,CACrFE,MAAM,CAAC,CAACJ,KAAAA,GAAAA;AACP,oBAAA,OAAO,CAAC,CAACA,KAAAA;AACX,iBAAA;AACJ,aAAA,CAAA;AACF;AACF;IAEQ/E,qBAAsBpF,CAAAA,IAAiB,EAAEW,KAAkB,EAAE;AACnE,QAAA,MAAM2K,kBAAqBtL,GAAAA,IAAAA,CAAKyF,UAAU,EAAEG,GAAK0F,EAAAA,kBAAAA;AACjD,QAAA,IAAI,CAACA,kBAAoB,EAAA;AACvB,YAAA;AACF;AAEA,QAAA,MAAMpB,iBAA2D,EAAE;AACnE,QAAA,IAAK,IAAI5F,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,CAACgH,kBAAAA,CAAmBpB,cAAc,IAAI,EAAC,EAAGnI,MAAM,EAAEuC,CAAK,EAAA,CAAA;AACzE,YAAA,MAAMgC,SAAYgF,GAAAA,kBAAAA,CAAmBpB,cAAc,CAAC5F,CAAE,CAAA;AACtD,YAAA,MAAMW,OAAO,IAAI,CAAC4D,QAAQ,CAAC7I,IAAAA,EAAMsG,UAAUrB,IAAI,CAAA;AAC/C,YAAA,IAAI,CAACA,IAAM,EAAA;gBACTiF,cAAc,CAAC5F,EAAE,GAAG,IAAA;AACpB,gBAAA;AACF;AACA,YAAA,MAAM6F,KAAsC,GAAA;AAC1CxB,gBAAAA,SAAAA,EAAW;AACb,aAAA;AACA,YAAA,KAAK,MAAMC,YAAgBtC,IAAAA,SAAAA,CAAUqC,SAAS,IAAI,EAAE,CAAE;AACpD,gBAAA,MAAMY,QAAoC,GAAA;AACxCtE,oBAAAA,IAAAA;oBACA+D,KAAO,EAAA;wBACLpH,IAAM,EAAA,QAAA;wBACN4H,MAAQ,EAAA,IAAI,CAACC,eAAe,CAACb,aAAaY,MAAM,EAAEE,QAAQC,IAAI,EAAA,CAAA;wBAC9DC,MAAQhB,EAAAA,YAAAA,CAAagB,MAAM,IAAI;AACjC;AACF,iBAAA;gBACAO,KAAMxB,CAAAA,SAAS,CAACtG,IAAI,CAACkH,QAAAA,CAAAA;gBACrB5I,KAAMsJ,CAAAA,mBAAmB,CAAC5H,IAAI,CAACkH,QAAAA,CAAAA;AACjC;YACAW,cAAc,CAAC5F,EAAE,GAAG6F,KAAAA;YACpBxJ,KAAM6J,CAAAA,wBAAwB,CAACnI,IAAI,CAAC8H,KAAAA,CAAAA;AACtC;AAEA,QAAA,KAAK,MAAMoB,aAAiBD,IAAAA,kBAAAA,CAAmBE,UAAU,IAAI,EAAE,CAAE;YAC/D,MAAMC,SAAAA,GAAY,CAACF,aAAcG,CAAAA,KAAK,IAAI,EAAC,EACxCtB,GAAG,CAAC,CAACrD,QAAkB,IAAI,CAAC8B,QAAQ,CAAC7I,IAAM+G,EAAAA,KAAAA,CAAAA,CAAAA,CAC3CwD,MAAM,CAAC,CAACtF,IAA6B,GAAA,CAAC,CAACA,IAAAA,CAAAA;AAC1C,YAAA,MAAM0F,SAAiCc,SAAUrB,CAAAA,GAAG,CAAC,CAACnF,QAA8B;AAClFA,oBAAAA,IAAAA;oBACA8F,SAAWQ,EAAAA,aAAAA,CAAcR,SAAS,IAAI,CAAA;AACtCC,oBAAAA,SAAAA,EAAWO,aAAcI,CAAAA,UAAU,IAAIJ,aAAAA,CAAcP,SAAS,IAAI,CAAA;oBAClEC,YAAcM,EAAAA,aAAAA,CAAcN,YAAY,IAAI,CAAA;oBAC5CC,UAAY,EAAA,IAAI,CAACzB,eAAe,CAAC8B,aAAAA,CAAcL,UAAU,EAAE,IAAIxB,OAAAA,CAAQ,CAAG,EAAA,EAAI,EAAA,CAAA,CAAA,CAAA;oBAC9EyB,SAAWI,EAAAA,aAAAA,CAAcJ,SAAS,IAAI;iBACxC,CAAA,CAAA;YACAxK,KAAMyK,CAAAA,WAAW,CAAC/I,IAAI,CAAC;AACrB2C,gBAAAA,IAAAA,EAAMuG,cAAcK,OAAO;AAC3BP,gBAAAA,MAAAA,EAAQ,IAAI,CAACxC,QAAQ,CAAC7I,IAAAA,EAAMuL,cAAcF,MAAM,CAAA;AAChDV,gBAAAA,MAAAA;AACAc,gBAAAA,SAAAA;AACAvB,gBAAAA,cAAAA,EAAgB,CAACqB,aAAAA,CAAcrB,cAAc,IAAI,EAAE,EAChDE,GAAG,CAAC,CAACC,MAAiBH,cAAc,CAAC,IAAI,CAACI,SAAS,CAACD,GAAK,EAAA;AAAC,wBAAA,eAAA;AAAiB,wBAAA;qBAAQ,CAAE,CAAA,CAAA,CACrFE,MAAM,CAAC,CAACJ,KAAAA,GAAAA;AACP,oBAAA,OAAO,CAAC,CAACA,KAAAA;AACX,iBAAA;AACJ,aAAA,CAAA;AACF;AACF;IAEQtB,QAAS7I,CAAAA,IAAiB,EAAE+G,KAAc,EAAgC;QAChF,OAAO,OAAOA,UAAU,QAAYA,IAAAA,KAAAA,IAAS,IAAI/G,IAAK8C,CAAAA,MAAM,CAACiE,KAAAA,CAAM,GAAG,IAAA;AACxE;IAEQ0C,eAAgBpD,CAAAA,KAAc,EAAEwF,QAAiB,EAAW;QAClE,IAAI1F,KAAAA,CAAMC,OAAO,CAACC,KAAQ,CAAA,EAAA;YACxB,OAAO,IAAIqD,QAAQrD,KAAK,CAAC,EAAE,IAAIwF,QAAAA,CAASC,CAAC,EAAEzF,KAAK,CAAC,CAAE,CAAA,IAAIwF,SAASE,CAAC,EAAE1F,KAAK,CAAC,CAAA,CAAE,IAAIwF,QAAAA,CAASG,CAAC,CAAA;AAC3F;QACA,IAAI3F,KAAAA,IAAS,OAAOA,KAAAA,KAAU,QAAU,EAAA;AACtC,YAAA,MAAM4F,GAAM5F,GAAAA,KAAAA;AACZ,YAAA,OAAO,IAAIqD,OAAAA,CACT,OAAOuC,GAAAA,CAAIH,CAAC,KAAK,QAAA,GAAWG,GAAIH,CAAAA,CAAC,GAAGD,QAAAA,CAASC,CAAC,EAC9C,OAAOG,GAAIF,CAAAA,CAAC,KAAK,QAAA,GAAWE,GAAIF,CAAAA,CAAC,GAAGF,QAAAA,CAASE,CAAC,EAC9C,OAAOE,GAAID,CAAAA,CAAC,KAAK,QAAWC,GAAAA,GAAAA,CAAID,CAAC,GAAGH,SAASG,CAAC,CAAA;AAElD;AACA,QAAA,OAAOH,SAASK,KAAK,EAAA;AACvB;IAEQ5B,SAAUjE,CAAAA,KAAc,EAAE8F,IAAiB,GAAA;AAAC,QAAA;KAAQ,EAAU;QACpE,IAAI,OAAO9F,UAAU,QAAYA,IAAAA,KAAAA,IAAS,KAAK+F,MAAOC,CAAAA,SAAS,CAAChG,KAAQ,CAAA,EAAA;YACtE,OAAOA,KAAAA;AACT;QACA,IAAIA,KAAAA,IAAS,OAAOA,KAAAA,KAAU,QAAU,EAAA;AACtC,YAAA,MAAM4F,GAAM5F,GAAAA,KAAAA;YACZ,KAAK,MAAMiG,OAAOH,IAAM,CAAA;gBACtB,MAAMpF,KAAAA,GAAQkF,GAAG,CAACK,GAAI,CAAA;gBACtB,IAAI,OAAOvF,UAAU,QAAYA,IAAAA,KAAAA,IAAS,KAAKqF,MAAOC,CAAAA,SAAS,CAACtF,KAAQ,CAAA,EAAA;oBACtE,OAAOA,KAAAA;AACT;AACF;AACF;AACA,QAAA,OAAO,EAAC;AACV;IAEQ+D,uBACNrC,CAAAA,GAAuC,EACvCmC,QAAiB,EACc;AAC/B,QAAA,MAAM2B,WAAc,GAAA,IAAI,CAACjC,SAAS,CAACM,QAAAA,CAAAA;AACnC,QAAA,IAAI2B,eAAe,CAAG,EAAA;AACpB,YAAA,OAAO9D,GAAIkC,CAAAA,MAAM,GAAG4B,YAAY,IAAI,IAAA;AACtC;QACA,IAAI3B,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAU,EAAA;AAC5C,YAAA,MAAMqB,GAAMrB,GAAAA,QAAAA;AACZ,YAAA,IAAI,OAAOqB,GAAAA,CAAIhH,IAAI,KAAK,QAAU,EAAA;gBAChC,OAAOgH,GAAAA;AACT;AACA,YAAA,MAAMO,UAAa,GAAA,IAAI,CAAClC,SAAS,CAACM,QAAU,EAAA;AAAC,gBAAA,OAAA;AAAS,gBAAA;AAAQ,aAAA,CAAA;AAC9D,YAAA,IAAI4B,cAAc,CAAG,EAAA;AACnB,gBAAA,OAAO/D,GAAIkC,CAAAA,MAAM,GAAG6B,WAAW,IAAI,IAAA;AACrC;AACF;QACA,OAAO,IAAA;AACT;AAEQlH,IAAAA,8BAAAA,CAA+B3E,KAAkB,EAAE;AACzD,QAAA,MAAM8L,cAAc,IAAIC,GAAAA,EAAAA;AACxB,QAAA,MAAMC,eAAe,IAAID,GAAAA,EAAAA;AACzB,QAAA,MAAME,WAAW,IAAIF,GAAAA,EAAAA;QACrB/L,KAAM4D,CAAAA,KAAK,CAACsI,OAAO,CAAC,CAAC5H,MAAM8B,KAAU6F,GAAAA,QAAAA,CAASE,GAAG,CAAC7H,IAAM8B,EAAAA,KAAAA,CAAAA,CAAAA;AACxD,QAAA,KAAK,MAAMwC,QAAAA,IAAY5I,KAAMsJ,CAAAA,mBAAmB,CAAE;AAChD,YAAA,MAAM8C,SAAY,GAAA,IAAI,CAACC,wBAAwB,CAACzD,QAAAA,CAAAA;AAChD,YAAA,IAAIwD,SAAW,EAAA;gBACbN,WAAYK,CAAAA,GAAG,CAACvD,QAAUwD,EAAAA,SAAAA,CAAAA;gBAC1BpM,KAAMsM,CAAAA,sBAAsB,CAAC5K,IAAI,CAAC0K,SAAAA,CAAAA;AAClC,gBAAA;AACF;AACA,YAAA,MAAMG,SAAY,GAAA,IAAI,CAACC,yBAAyB,CAAC5D,QAAAA,CAAAA;AACjD,YAAA,IAAI2D,SAAW,EAAA;gBACbP,YAAaG,CAAAA,GAAG,CAACvD,QAAU2D,EAAAA,SAAAA,CAAAA;AAC7B;AACF;AAEA,QAAA,KAAK,MAAME,MAAAA,IAAUzM,KAAMyK,CAAAA,WAAW,CAAE;AACtC,YAAA,MAAMiC,SAASD,MAAO3B,CAAAA,SAAS,GAC3B,IAAI,CAAC6B,oCAAoC,CAACF,MAAO3B,CAAAA,SAAS,IAC1D,IAAI,CAAC8B,2BAA2B,CAACH,OAAOzC,MAAM,CAAA;YAClD,IAAI0C,MAAAA,CAAOtL,MAAM,KAAK,CAAA,IAAKqL,OAAOzC,MAAM,CAAC5I,MAAM,KAAK,CAAG,EAAA;AACrD,gBAAA;AACF;AACA,YAAA,MAAM4G,YAA0C,EAAE;AAClD,YAAA,MAAM6E,aAA4C,EAAE;AACpD,YAAA,MAAMC,eAAe,IAAIC,GAAAA,EAAAA;AACzB,YAAA,MAAMC,gBAAgB,IAAID,GAAAA,EAAAA;AAC1B,YAAA,KAAK,MAAMvD,KAAAA,IAASiD,MAAOlD,CAAAA,cAAc,CAAE;AACzC,gBAAA,KAAK,MAAMX,QAAAA,IAAYY,KAAMxB,CAAAA,SAAS,CAAE;oBACtC,MAAMoE,SAAAA,GAAYN,WAAYmB,CAAAA,GAAG,CAACrE,QAAAA,CAAAA;AAClC,oBAAA,MAAMsE,cAAcd,SAAY,GAAA,IAAI,CAACe,4BAA4B,CAACf,WAAWH,QAAY,CAAA,GAAA,EAAA;AACzF,oBAAA,IAAIG,SAAa,IAAA,CAACU,YAAaM,CAAAA,GAAG,CAACF,WAAc,CAAA,EAAA;AAC/CJ,wBAAAA,YAAAA,CAAaO,GAAG,CAACH,WAAAA,CAAAA;AACjBlF,wBAAAA,SAAAA,CAAUtG,IAAI,CAAC0K,SAAAA,CAAAA;AACjB;oBACA,MAAMG,SAAAA,GAAYP,YAAaiB,CAAAA,GAAG,CAACrE,QAAAA,CAAAA;AACnC,oBAAA,MAAM0E,eAAef,SAAY,GAAA,IAAI,CAACgB,6BAA6B,CAAChB,WAAWN,QAAY,CAAA,GAAA,EAAA;AAC3F,oBAAA,IAAIM,SAAa,IAAA,CAACS,aAAcI,CAAAA,GAAG,CAACE,YAAe,CAAA,EAAA;AACjDN,wBAAAA,aAAAA,CAAcK,GAAG,CAACC,YAAAA,CAAAA;AAClBT,wBAAAA,UAAAA,CAAWnL,IAAI,CAAC6K,SAAAA,CAAAA;AAClB;AACF;AACF;YACAvM,KAAMwN,CAAAA,wBAAwB,CAAC9L,IAAI,CAAC;AAClC2C,gBAAAA,IAAAA,EAAMoI,OAAOpI,IAAI;AACjBqG,gBAAAA,MAAAA,EAAQ+B,OAAO/B,MAAM;AACrBgC,gBAAAA,MAAAA;AACA1E,gBAAAA,SAAAA;AACA6E,gBAAAA,UAAAA;gBACAY,gBAAkB,EAAA,IAAI,CAACC,kCAAkC,CAACjB,OAAOzC,MAAM,EAAE0C,MAAOtL,CAAAA,MAAM,GAAG,CAAA;AAC3F,aAAA,CAAA;AACF;AACF;AAEQwL,IAAAA,2BAAAA,CAA4B5C,MAA8B,EAAE;AAClE,QAAA,MAAM0C,SAAmE,EAAE;QAC3E,IAAI1C,MAAAA,CAAO5I,MAAM,KAAK,CAAG,EAAA;YACvB,OAAOsL,MAAAA;AACT;AACA,QAAA,IAAIiB,UAAa3D,GAAAA,MAAM,CAAC,CAAA,CAAE,CAAC1F,IAAI;AAC/B,QAAA,IAAIsJ,QAAW5D,GAAAA,MAAM,CAAC,CAAA,CAAE,CAAC1F,IAAI;AAC7B,QAAA,IAAK,IAAIX,CAAI,GAAA,CAAA,EAAGA,IAAIqG,MAAO5I,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;AACtC,YAAA,MAAMW,IAAO0F,GAAAA,MAAM,CAACrG,CAAAA,CAAE,CAACW,IAAI;YAC3B,IAAIsJ,QAAAA,CAASC,UAAU,CAACvJ,IAAO,CAAA,EAAA;gBAC7BsJ,QAAWtJ,GAAAA,IAAAA;AACX,gBAAA;AACF;AACA,YAAA,IAAI,CAACwJ,uBAAuB,CAACpB,MAAAA,EAAQiB,UAAYC,EAAAA,QAAAA,CAAAA;YACjDD,UAAarJ,GAAAA,IAAAA;YACbsJ,QAAWtJ,GAAAA,IAAAA;AACb;AACA,QAAA,IAAI,CAACwJ,uBAAuB,CAACpB,MAAAA,EAAQiB,UAAYC,EAAAA,QAAAA,CAAAA;QACjD,OAAOlB,MAAAA;AACT;AAEQC,IAAAA,oCAAAA,CAAqC7B,SAA+B,EAAE;AAC5E,QAAA,MAAM4B,SAAmE,EAAE;QAC3E,KAAK,MAAM9K,SAASkJ,SAAW,CAAA;AAC7B,YAAA,MAAMiD,GAAM,GAAA,IAAI,CAACC,wBAAwB,CAACpM,KAAAA,CAAAA;YAC1C,IAAImM,GAAAA,IAAOA,QAAQnM,KAAO,EAAA;AACxB8K,gBAAAA,MAAAA,CAAOhL,IAAI,CAAC;AAAEE,oBAAAA,KAAAA;AAAOmM,oBAAAA;AAAI,iBAAA,CAAA;AAC3B;AACF;QACA,OAAOrB,MAAAA;AACT;AAEQoB,IAAAA,uBAAAA,CACNpB,MAAgE,EAChE9K,KAAyB,EACzBmM,GAAuB,EACvB;AACA,QAAA,IAAInM,UAAUmM,GAAK,EAAA;AACjBrB,YAAAA,MAAAA,CAAOhL,IAAI,CAAC;AAAEE,gBAAAA,KAAAA;AAAOmM,gBAAAA;AAAI,aAAA,CAAA;AACzB,YAAA;AACF;AACA,QAAA,MAAME,WAAc,GAAA,IAAI,CAACD,wBAAwB,CAACpM,KAAAA,CAAAA;QAClD,IAAIqM,WAAAA,IAAeA,gBAAgBrM,KAAO,EAAA;AACxC8K,YAAAA,MAAAA,CAAOhL,IAAI,CAAC;AAAEE,gBAAAA,KAAAA;gBAAOmM,GAAKE,EAAAA;AAAY,aAAA,CAAA;AACxC;AACF;AAEQD,IAAAA,wBAAAA,CAAyBpM,KAAyB,EAAgC;AACxF,QAAA,IAAIsM,OAAUtM,GAAAA,KAAAA;AACd,QAAA,MAAOsM,OAAQC,CAAAA,QAAQ,CAAC/M,MAAM,GAAG,CAAG,CAAA;AAClC,YAAA,IAAI8M,OAAQC,CAAAA,QAAQ,CAAC/M,MAAM,KAAK,CAAG,EAAA;gBACjC,OAAO,IAAA;AACT;YACA8M,OAAUA,GAAAA,OAAAA,CAAQC,QAAQ,CAAC,CAAE,CAAA;AAC/B;QACA,OAAOD,OAAAA;AACT;IAEQR,kCACN1D,CAAAA,MAA8B,EAC9BoE,IAAa,EACkB;AAC/B,QAAA,IAAI/D,SAAY,GAAA,CAAA;AAChB,QAAA,IAAIG,SAAY,GAAA,CAAA;AAChB,QAAA,IAAIJ,SAAY,GAAA,CAAA;AAChB,QAAA,MAAMiE,OAAU,GAAA,IAAItF,OAAQ,CAAA,CAAA,EAAG,mBAAgC,EAAA,CAAA,CAAA;QAC/D,MAAMuB,YAAAA,GAAevB,QAAQC,IAAI,EAAA;QACjC,KAAK,MAAMsF,SAAStE,MAAQ,CAAA;AAC1BK,YAAAA,SAAAA,IAAaiE,MAAMjE,SAAS;AAC5BG,YAAAA,SAAAA,IAAa8D,MAAM9D,SAAS;AAC5BJ,YAAAA,SAAAA,GAAY1C,IAAKC,CAAAA,GAAG,CAACyC,SAAAA,EAAWkE,MAAMlE,SAAS,CAAA;AAC/C,YAAA,MAAMG,aACJ+D,KAAM/D,CAAAA,UAAU,CAACgE,WAAW,GAAG,CAAIxF,GAAAA,OAAAA,CAAQyF,SAAS,CAACF,MAAM/D,UAAU,CAAA,GAAI,IAAIxB,OAAQ,CAAA,CAAA,EAAG,EAAI,EAAA,CAAA,CAAA;AAC9FA,YAAAA,OAAAA,CAAQsE,GAAG,CACT/C,YACAvB,EAAAA,OAAAA,CAAQ0F,KAAK,CAAClE,UAAAA,EAAY7C,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAG2G,KAAMhE,CAAAA,YAAY,IAAIvL,iCAC5DuL,CAAAA,EAAAA,YAAAA,CAAAA;AAEJ;QACA,MAAMoE,QAAAA,GAAW1E,OAAO5I,MAAM,GAAG,IAAI,CAAI4I,GAAAA,MAAAA,CAAO5I,MAAM,GAAG,CAAA;QACzDiJ,SAAaqE,IAAAA,QAAAA;QACblE,SAAakE,IAAAA,QAAAA;QACb3F,OAAQ0F,CAAAA,KAAK,CAACnE,YAAAA,EAAcoE,QAAUpE,EAAAA,YAAAA,CAAAA;QACtCvB,OAAQsE,CAAAA,GAAG,CAACgB,OAAAA,EAAS/D,YAAc+D,EAAAA,OAAAA,CAAAA;QACnC,MAAMM,aAAAA,GAAgBjH,KAAKC,GAAG,CAAC,GAAGD,IAAKkH,CAAAA,GAAG,CAAC,CAAA,EAAGvE,SAAYrL,GAAAA,+BAAAA,CAAAA,CAAAA;QAC1D,MAAM6P,eAAAA,GAAkBnH,IAAKC,CAAAA,GAAG,CAAC,CAAA,EAAGD,KAAKkH,GAAG,CAAC,CAAG,EAAA,CAAA,GAAIpE,SAAYvL,GAAAA,mBAAAA,CAAAA,CAAAA;QAChE,OAAO;YACL6P,gBAAkB,EAAA,KAAA;YAClBC,sBAAwB,EAAA,KAAA;YACxBC,QAAUnQ,EAAAA,wBAAAA;AACVwP,YAAAA,OAAAA;YACAY,MAAQ,EAAA;AACNC,gBAAAA,QAAAA,EAAUC,mBAAmBC,QAAQ,CACnC,IAAI,CAACC,yBAAyB,CAACV,aAAe9P,EAAAA,wBAAAA,CAAAA,CAAAA;AAEhDyQ,gBAAAA,UAAAA,EAAYH,mBAAmBC,QAAQ,CACrC,IAAI,CAACG,uBAAuB,CAACV,eAAiBhQ,EAAAA,wBAAAA,CAAAA,CAAAA;AAEhD2Q,gBAAAA,WAAAA,EAAaL,mBAAmBC,QAAQ,CAAC1H,IAAKC,CAAAA,GAAG,CAAC,CAAGyC,EAAAA,SAAAA,CAAAA,CAAAA;;gBAErDqF,wBAA0BN,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,IAAA,CAAA;gBACtDM,yBAA2BP,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,IAAA,CAAA;gBACvDO,0BAA4BR,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,GAAA,CAAA;gBACxDQ,2BAA6BT,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,GAAA,CAAA;;gBAEzDS,WAAaV,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,KAAA,CAAA;gBACzCU,YAAcX,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,KAAA,CAAA;;gBAE1CW,qBAAuBZ,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,CAAA,CAAA;gBACnDY,sBAAwBb,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,CAAA,CAAA;gBACpDa,uBAAyBd,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,CAAA,CAAA;gBACrDc,wBAA0Bf,EAAAA,kBAAAA,CAAmBC,QAAQ,CAAC,CAAA;AACxD,aAAA;YACAe,iBAAmB,EAAA;gBACjBC,kBAAoB,EAAA,IAAA;gBACpBC,oBAAsB,EAAA,IAAA;gBACtBC,KAAO,EAAA,KAAA;gBACPC,eAAiB,EAAA,IAAA;gBACjBC,yBAA2B,EAAA,IAAA;gBAC3BC,2BAA6B,EAAA,IAAA;gBAC7BC,YAAc,EAAA,IAAA;gBACdC,MAAQvC,EAAAA;AACV;AACF,SAAA;AACF;IAEQiB,yBAA0BuB,CAAAA,UAAkB,EAAE5B,QAAgB,EAAU;QAC9E,MAAM6B,KAAAA,GAAQnJ,KAAKC,GAAG,CAAC,GAAGD,IAAKkH,CAAAA,GAAG,CAAC,CAAGgC,EAAAA,UAAAA,CAAAA,CAAAA;QACtC,OAAO,CAAA,GAAIlJ,IAAKoJ,CAAAA,GAAG,CAAC,CAAA,GAAID,OAAO,CAAInJ,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGqH,EAAAA,QAAAA,CAAAA,CAAAA;AACjD;IAEQO,uBAAwBwB,CAAAA,SAAiB,EAAE/B,QAAgB,EAAU;QAC3E,MAAMgC,IAAAA,GAAOtJ,KAAKC,GAAG,CAAC,GAAGD,IAAKkH,CAAAA,GAAG,CAAC,CAAGmC,EAAAA,SAAAA,CAAAA,CAAAA;QACrC,OAAOrJ,IAAAA,CAAKoJ,GAAG,CAACE,IAAAA,EAAM,IAAItJ,IAAKC,CAAAA,GAAG,CAAC,CAAGqH,EAAAA,QAAAA,CAAAA,CAAAA;AACxC;IAEQ7B,4BACNvE,CAAAA,QAAoC,EACpCqD,QAAyC,EACjC;QACR,MAAMgF,CAAAA,GAAIrI,SAASA,QAAQ;QAC3B,OAAO;AACL,YAAA,IAAI,CAACsI,gBAAgB,CAACtI,QAAAA,CAAStE,IAAI,EAAE2H,QAAAA,CAAAA;AACrC,YAAA,IAAI,CAACkF,WAAW,CAACvI,QAAAA,CAASwI,aAAa,CAAA;AACvC,YAAA,IAAI,CAACC,cAAc,CAACzI,QAAAA,CAAS0I,aAAa,CAAA;AAC1C,YAAA,IAAI,CAACC,UAAU,CAACN,CAAAA,CAAEhI,MAAM,CAAA;AACxB,YAAA,IAAI,CAACsI,UAAU,CAACN,CAAAA,CAAEO,eAAe,CAAA;AACjC,YAAA,IAAI,CAACD,UAAU,CAACN,CAAAA,CAAEQ,MAAM,CAAA;AACxB,YAAA,IAAI,CAACF,UAAU,CAACN,CAAAA,CAAES,QAAQ,CAAA;YAC1BT,CAAEU,CAAAA,iBAAiB,GAAG,CAAI,GAAA,CAAA;AAC1BV,YAAAA,CAAAA,CAAEW;AACH,SAAA,CAAC/O,IAAI,CAAC,GAAA,CAAA;AACT;IAEQ0K,6BACNhB,CAAAA,SAAsC,EACtCN,QAAyC,EACjC;QACR,OAAO;AACL,YAAA,IAAI,CAACiF,gBAAgB,CAAC3E,SAAAA,CAAUjI,IAAI,EAAE2H,QAAAA,CAAAA;AACtC,YAAA,IAAI,CAACkF,WAAW,CAAC5E,SAAAA,CAAUsF,QAAQ,CAAA;AACnC,YAAA,IAAI,CAACV,WAAW,CAAC5E,SAAAA,CAAUuF,EAAE;AAC9B,SAAA,CAACjP,IAAI,CAAC,GAAA,CAAA;AACT;IAEQqO,gBAAiB5M,CAAAA,IAAwB,EAAE2H,QAAyC,EAAU;QACpG,IAAIN,GAAAA,GAAMM,QAASgB,CAAAA,GAAG,CAAC3I,IAAAA,CAAAA;AACvB,QAAA,IAAIqH,QAAQoG,SAAW,EAAA;AACrBpG,YAAAA,GAAAA,GAAMM,SAAS+F,IAAI;YACnB/F,QAASE,CAAAA,GAAG,CAAC7H,IAAMqH,EAAAA,GAAAA,CAAAA;AACrB;QACA,OAAOA,GAAAA;AACT;AAEQwF,IAAAA,WAAAA,CAAYzL,KAAc,EAAU;QAC1C,OAAO;AAACA,YAAAA,KAAAA,CAAMyF,CAAC;AAAEzF,YAAAA,KAAAA,CAAM0F,CAAC;AAAE1F,YAAAA,KAAAA,CAAM2F;SAAE,CAAC5B,GAAG,CAAC,CAACwI,SAAc,GAAA,IAAI,CAACV,UAAU,CAACU,SAAYpP,CAAAA,CAAAA,CAAAA,IAAI,CAAC,GAAA,CAAA;AACzF;AAEQwO,IAAAA,cAAAA,CAAe3L,KAAiB,EAAU;QAChD,OAAO;AAACA,YAAAA,KAAAA,CAAMyF,CAAC;AAAEzF,YAAAA,KAAAA,CAAM0F,CAAC;AAAE1F,YAAAA,KAAAA,CAAM2F,CAAC;AAAE3F,YAAAA,KAAAA,CAAMwM;SAAE,CAACzI,GAAG,CAAC,CAACwI,SAAc,GAAA,IAAI,CAACV,UAAU,CAACU,SAAYpP,CAAAA,CAAAA,CAAAA,IAAI,CAAC,GAAA,CAAA;AAClG;AAEQ0O,IAAAA,UAAAA,CAAW7L,KAAa,EAAU;QACxC,OAAO,CAAA,EAAGqB,OAAOoL,EAAE,CAACzM,OAAO,EAAC,CAAA,GAAK,IAAIA,KAAO,CAAA,CAAA;AAC9C;AAEQ2G,IAAAA,wBAAAA,CAAyBzD,QAAiC,EAAwC;QACxG,MAAMP,KAAAA,GAAQO,SAASP,KAAK;QAC5B,IAAIA,KAAAA,CAAMpH,IAAI,KAAK,OAAS,EAAA;YAC1B,OAAO,IAAA;AACT;QACA,IAAIoH,KAAAA,CAAMpH,IAAI,KAAK,QAAU,EAAA;YAC3B,OAAO;AACLoD,gBAAAA,IAAAA,EAAMuE,SAASvE,IAAI;AACnBC,gBAAAA,IAAAA,EAAMsE,SAAStE,IAAI;gBACnB8M,aAAe/I,EAAAA,KAAAA,CAAMQ,MAAM,CAAC0C,KAAK,EAAA;AACjC+F,gBAAAA,aAAAA,EAAec,WAAWC,QAAQ,EAAA;gBAClCzJ,QAAU,EAAA;AACRK,oBAAAA,MAAAA,EAAQZ,MAAMY,MAAM;oBACpBuI,eAAiB,EAAA,CAAA;oBACjBC,MAAQ,EAAA,CAAA;oBACRC,QAAU,EAAA,CAAA;oBACVC,iBAAmBtJ,EAAAA,KAAAA,CAAMa,MAAM,IAAI,KAAA;AACnC0I,oBAAAA,SAAAA,EAAWU,cAAcC;AAC3B;AACF,aAAA;AACF;QACA,MAAMC,cAAAA,GAAiBzJ,QAAQ0J,GAAG,CAACpK,MAAMc,IAAI,EAAEd,MAAMQ,MAAM,CAAA;QAC3D,MAAM4I,MAAAA,GAASe,eAAeE,SAAS;QACvC,MAAMpB,aAAAA,GACJG,MAAS,GAAA,CAAA,GACLW,UAAWO,CAAAA,sBAAsB,CAAC5J,OAAAA,CAAQM,MAAM,EAAA,EAAImJ,cACpDJ,CAAAA,GAAAA,UAAAA,CAAWC,QAAQ,EAAA;AACzB,QAAA,MAAMjB,aAAgBrI,GAAAA,OAAAA,CAAQ0F,KAAK,CAAC1F,OAAQsE,CAAAA,GAAG,CAAChF,KAAAA,CAAMQ,MAAM,EAAER,KAAMc,CAAAA,IAAI,CAAG,EAAA,GAAA,CAAA;QAC3E,OAAO;AACL9E,YAAAA,IAAAA,EAAMuE,SAASvE,IAAI;AACnBC,YAAAA,IAAAA,EAAMsE,SAAStE,IAAI;AACnB8M,YAAAA,aAAAA;AACAE,YAAAA,aAAAA;YACA1I,QAAU,EAAA;AACRK,gBAAAA,MAAAA,EAAQZ,MAAMY,MAAM;gBACpBuI,eAAiB,EAAA,CAAA;AACjBC,gBAAAA,MAAAA;gBACAC,QAAU,EAAA,CAAA;gBACVC,iBAAmBtJ,EAAAA,KAAAA,CAAMa,MAAM,IAAI,KAAA;AACnC0I,gBAAAA,SAAAA,EAAWU,cAAcC;AAC3B;AACF,SAAA;AACF;AAEQ/F,IAAAA,yBAAAA,CACN5D,QAAiC,EACM;QACvC,MAAMP,KAAAA,GAAQO,SAASP,KAAK;QAC5B,IAAIA,KAAAA,CAAMpH,IAAI,KAAK,OAAS,EAAA;YAC1B,OAAO,IAAA;AACT;QACA,OAAO;AACLqD,YAAAA,IAAAA,EAAMsE,SAAStE,IAAI;YACnBuN,QAAUxJ,EAAAA,KAAAA,CAAMQ,MAAM,CAAC0C,KAAK,EAAA;AAC5BuG,YAAAA,EAAAA,EAAIzJ,KAAMe,CAAAA,MAAM,CAACmF,WAAW,GAAG,CAAA,GAAIxF,OAAQyF,CAAAA,SAAS,CAACnG,KAAAA,CAAMe,MAAM,CAAA,GAAIL,QAAQM,MAAM;AACrF,SAAA;AACF;AAEA,qBACA,UAAQ7F,CAAWnE,IAAiB,EAAEW,KAAkB,EAAE;QACxD,IAAIX,IAAAA,CAAKuE,KAAK,EAAE;YACd,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAItE,KAAKuE,KAAK,CAACxC,MAAM,EAAEuC,CAAK,EAAA,CAAA;AAC1C,gBAAA,IAAI,CAACiP,SAAS,CAACvT,IAAAA,EAAMsE,GAAG,IAAM3D,EAAAA,KAAAA,CAAAA;AAChC;AACA,YAAA,KAAK,MAAMsE,IAAAA,IAAQjF,IAAK8C,CAAAA,MAAM,CAAE;gBAC9B,IAAI,CAACmC,IAAKuO,CAAAA,MAAM,EAAE;AAChBvO,oBAAAA,IAAAA,CAAKwO,iBAAiB,CAAC,IAAA,CAAA;AACzB;AACF;AACF;AACF;AACA,qBACA,UAAQrP,CAAWpE,IAAiB,EAAEW,KAAkB,EAAE;QACxD,IAAIX,IAAAA,CAAK0T,KAAK,EAAE;YACd,IAAK,IAAIpP,IAAI,CAAGA,EAAAA,CAAAA,GAAItE,KAAK0T,KAAK,CAAC3R,MAAM,EAAEuC,CAAK,EAAA,CAAA;AAC1C,gBAAA,MAAMqP,QAAW3T,GAAAA,IAAAA,CAAK0T,KAAK,CAACpP,CAAE,CAAA;AAC9B,gBAAA,MAAMG,QAAW,GAAA,IAAImP,aAAcD,CAAAA,QAAAA,CAAS3O,IAAI,CAAA;AAChD,gBAAA,IAAI,OAAO2O,QAAAA,CAASlP,QAAQ,KAAK,QAAU,EAAA;AACzCA,oBAAAA,QAAAA,CAASoP,KAAK,GAAG7T,IAAAA,CAAK8C,MAAM,CAAC6Q,QAAAA,CAASlP,QAAQ,CAAC;AACjD;AACA,gBAAA,MAAMX,WAAW9D,IAAK6C,CAAAA,UAAU,CAAC8Q,QAAAA,CAASG,mBAAmB,CAAE;gBAC/D,IAAI,CAAChQ,QAAYA,IAAAA,QAAAA,CAASlC,IAAI,KAAK,MAAUkC,IAAAA,QAAAA,CAASiQ,aAAa,KAAKC,aAAcC,CAAAA,KAAK,EAAE;AAC3F,oBAAA,MAAM,IAAIC,KAAM,CAAA,8CAAA,CAAA;AAClB;gBACA,MAAMC,QAAAA,GACJ,OAAOR,QAASG,CAAAA,mBAAmB,KAAK,QACnChQ,GAAAA,QAAAA,CAASsQ,mBAAmB,CAACpU,IAC9B,CAAA,GAAA,IAAA;AACN2T,gBAAAA,QAAAA,CAAShJ,MAAM,CAACkC,OAAO,CAAC,CAACoC,KAAOlI,EAAAA,KAAAA,GAAAA;AAC9B,oBAAA,MAAMsN,IAAItN,KAAQ,GAAA,EAAA;AAClBtC,oBAAAA,QAAAA,CAAS6P,QAAQ,CACftU,IAAAA,CAAK8C,MAAM,CAACmM,MAAM,EAClBkF,QAAAA,GAAW,IAAII,SAAAA,CAAUJ,SAASK,QAAQ,CAACH,GAAGA,CAAI,GAAA,EAAA,CAAA,CAAA,GAAOE,UAAUvB,QAAQ,EAAA,CAAA;AAE/E,iBAAA,CAAA;AACArS,gBAAAA,KAAAA,CAAM8T,WAAW,CAAChQ,QAAAA,CAAAA;AACpB;AACF;QACA,IAAI,CAACiQ,yBAAyB,CAAC1U,IAAMW,EAAAA,KAAAA,CAAAA;AACvC;AACA,qBACA,yBAAQ+T,CAA0B1U,IAAiB,EAAEW,KAAkB,EAAE;QACvE,MAAM8H,GAAAA,GAAMzI,IAAKyF,CAAAA,UAAU,EAAEkP,kBAAAA;QAC7B,MAAMC,UAAAA,GAAanM,KAAKoM,QAAUD,EAAAA,UAAAA;AAClC,QAAA,IAAI,CAACA,UAAAA,IAAc,OAAOA,UAAAA,KAAe,QAAU,EAAA;AACjD,YAAA;AACF;AACA,QAAA,MAAME,OAAU,GAAA,IAAI,CAACC,uBAAuB,CAAC/U,IAAM4U,EAAAA,UAAAA,CAAAA;AACnD,QAAA,MAAMI,OAAOF,OAASG,EAAAA,IAAI,CAACC,eAAAA,CAAgBC,IAAI,CAAC;QAChD,IAAI,CAACL,OAAW,IAAA,CAACE,IAAM,EAAA;AACrB,YAAA;AACF;AACA,QAAA,MAAMI,cAAiB,GAAA,IAAI,CAACC,qBAAqB,CAACP,OAAAA,CAAAA;QAClD,IAAIM,cAAAA,CAAerT,MAAM,KAAK,CAAG,EAAA;AAC/B,YAAA;AACF;AACA,QAAA,MAAMuT,mBAAmB3U,KAAM+D,CAAAA,SAAS,CAAC6Q,IAAI,CAAC,CAAC9Q,QAC7C2Q,GAAAA,cAAAA,CAAeI,KAAK,CAAC,CAACvQ,IAASR,GAAAA,QAAAA,CAASkG,MAAM,CAAC/H,OAAO,CAACqC,IAAS,CAAA,IAAA,CAAA,CAAA,CAAA;AAElE,QAAA,IAAIqQ,gBAAkB,EAAA;YACpB,IAAI,CAACG,gCAAgC,CAACH,gBAAkBR,EAAAA,OAAAA,CAAAA;AACxD,YAAA;AACF;AACA,QAAA,MAAMY,IAAO,GAAA,IAAI,CAACC,eAAe,CAACP,cAAmBJ,CAAAA,IAAAA,IAAAA;AACrD,QAAA,MAAMY,WAAW,IAAIlI,GAAAA,EAAAA;QACrB,KAAK,MAAMzI,QAAQmQ,cAAgB,CAAA;AACjC,YAAA,IAAIvG,OAAwC5J,GAAAA,IAAAA;AAC5C,YAAA,MAAO4J,OAAS,CAAA;AACd+G,gBAAAA,QAAAA,CAAS5H,GAAG,CAACa,OAAAA,CAAAA;AACb,gBAAA,IAAIA,YAAY6G,IAAM,EAAA;AACpB,oBAAA;AACF;AACA7G,gBAAAA,OAAAA,GAAUA,QAAQ2E,MAAM;AAC1B;AACF;QACA,MAAM/O,QAAAA,GAAW,IAAImP,aAAc,CAAA,6BAAA,CAAA;AACnCnP,QAAAA,QAAAA,CAASoP,KAAK,GAAG6B,IAAAA;QACjB,IAAI,CAACD,gCAAgC,CAAChR,QAAUqQ,EAAAA,OAAAA,CAAAA;AAChD,QAAA,KAAK,MAAM7F,KAAS,IAAA,IAAI,CAAC4G,mBAAmB,CAACH,MAAME,QAAW,CAAA,CAAA;AAC5DnR,YAAAA,QAAAA,CAAS6P,QAAQ,CAACrF,KAAOsF,EAAAA,SAAAA,CAAUvB,QAAQ,EAAA,CAAA;AAC7C;AACA,QAAA,IAAIvO,QAASkG,CAAAA,MAAM,CAAC5I,MAAM,GAAG,CAAG,EAAA;AAC9BpB,YAAAA,KAAAA,CAAM8T,WAAW,CAAChQ,QAAAA,CAAAA;AACpB;AACF;IAEQgR,gCACNhR,CAAAA,QAAuB,EACvBqQ,OAA2D,EAC3D;AAEErQ,QAAAA,QAAAA,CAGAqR,oBAAoB,GAAGhB,OAAAA;AAC3B;IAEQC,uBACN/U,CAAAA,IAAiB,EACjB4U,UAAgD,EACI;AACpD,QAAA,MAAMK,OAAO,EAAC;AACd,QAAA,MAAMc,WAAW,EAAC;AAClB,QAAA,MAAMC,YAAY,EAAC;QACnB,MAAMC,OAAAA,GAAU,CAACC,QAAkBC,EAAAA,GAAAA,GAAAA;AACjC,YAAA,MAAMlR,OAAO,IAAI,CAACmR,qBAAqB,CAACpW,MAAM4U,UAAYsB,EAAAA,QAAAA,CAAAA;AAC1D,YAAA,IAAIjR,IAAM,EAAA;gBACRgQ,IAAI,CAACkB,IAAI,GAAGlR,IAAAA;AACd;AACF,SAAA;QACA,MAAMoR,OAAAA,GAAU,CAACC,IAAAA,EAAwBJ,QAAkBC,EAAAA,GAAAA,GAAAA;AACzD,YAAA,MAAMlR,OAAO,IAAI,CAACmR,qBAAqB,CAACpW,MAAM4U,UAAYsB,EAAAA,QAAAA,CAAAA;AAC1D,YAAA,IAAIjR,IAAM,EAAA;AACPqR,gBAAAA,CAAAA,SAAS,MAASP,GAAAA,QAAAA,GAAWC,SAAQ,EAAGG,IAAI,GAAGlR,IAAAA;AAClD;AACF,SAAA;QACAgR,OAAQ,CAAA,MAAA,EAAQf,gBAAgBC,IAAI,CAAA;QACpCc,OAAQ,CAAA,OAAA,EAASf,gBAAgBqB,KAAK,CAAA;QACtCN,OAAQ,CAAA,OAAA,EAASf,gBAAgBsB,KAAK,CAAA;QACtCP,OAAQ,CAAA,YAAA,EAAcf,gBAAgBuB,UAAU,CAAA;QAChDR,OAAQ,CAAA,MAAA,EAAQf,gBAAgBwB,IAAI,CAAA;QACpCT,OAAQ,CAAA,MAAA,EAAQf,gBAAgByB,IAAI,CAAA;QACpCV,OAAQ,CAAA,cAAA,EAAgBf,gBAAgB0B,YAAY,CAAA;QACpDX,OAAQ,CAAA,cAAA,EAAgBf,gBAAgB2B,YAAY,CAAA;QACpDZ,OAAQ,CAAA,cAAA,EAAgBf,gBAAgB4B,YAAY,CAAA;QACpDb,OAAQ,CAAA,UAAA,EAAYf,gBAAgB6B,QAAQ,CAAA;QAC5Cd,OAAQ,CAAA,eAAA,EAAiBf,gBAAgB8B,aAAa,CAAA;QACtDf,OAAQ,CAAA,eAAA,EAAiBf,gBAAgB+B,aAAa,CAAA;QACtDhB,OAAQ,CAAA,eAAA,EAAiBf,gBAAgBgC,aAAa,CAAA;QACtDjB,OAAQ,CAAA,WAAA,EAAaf,gBAAgBiC,SAAS,CAAA;QAC9ClB,OAAQ,CAAA,cAAA,EAAgBf,gBAAgBkC,YAAY,CAAA;QACpDnB,OAAQ,CAAA,cAAA,EAAgBf,gBAAgBmC,YAAY,CAAA;QACpDpB,OAAQ,CAAA,UAAA,EAAYf,gBAAgBoC,QAAQ,CAAA;QAC5CrB,OAAQ,CAAA,UAAA,EAAYf,gBAAgBqC,QAAQ,CAAA;QAC5CtB,OAAQ,CAAA,eAAA,EAAiBf,gBAAgBsC,aAAa,CAAA;QACtDvB,OAAQ,CAAA,eAAA,EAAiBf,gBAAgBuC,aAAa,CAAA;QACtDxB,OAAQ,CAAA,WAAA,EAAaf,gBAAgBwC,SAAS,CAAA;QAC9CzB,OAAQ,CAAA,WAAA,EAAaf,gBAAgByC,SAAS,CAAA;QAC9CtB,OAAQ,CAAA,MAAA,EAAQ,qBAAuBuB,EAAAA,eAAAA,CAAgBC,aAAa,CAAA;QACpExB,OAAQ,CAAA,MAAA,EAAQ,mBAAqBuB,EAAAA,eAAAA,CAAgBE,iBAAiB,CAAA;QACtEzB,OAAQ,CAAA,MAAA,EAAQ,iBAAmBuB,EAAAA,eAAAA,CAAgBG,WAAW,CAAA;QAC9D1B,OAAQ,CAAA,MAAA,EAAQ,mBAAqBuB,EAAAA,eAAAA,CAAgBI,aAAa,CAAA;QAClE3B,OAAQ,CAAA,MAAA,EAAQ,uBAAyBuB,EAAAA,eAAAA,CAAgBK,iBAAiB,CAAA;QAC1E5B,OAAQ,CAAA,MAAA,EAAQ,iBAAmBuB,EAAAA,eAAAA,CAAgBM,WAAW,CAAA;QAC9D7B,OAAQ,CAAA,MAAA,EAAQ,oBAAsBuB,EAAAA,eAAAA,CAAgBO,cAAc,CAAA;QACpE9B,OAAQ,CAAA,MAAA,EAAQ,wBAA0BuB,EAAAA,eAAAA,CAAgBQ,kBAAkB,CAAA;QAC5E/B,OAAQ,CAAA,MAAA,EAAQ,kBAAoBuB,EAAAA,eAAAA,CAAgBS,YAAY,CAAA;QAChEhC,OAAQ,CAAA,MAAA,EAAQ,kBAAoBuB,EAAAA,eAAAA,CAAgBU,YAAY,CAAA;QAChEjC,OAAQ,CAAA,MAAA,EAAQ,sBAAwBuB,EAAAA,eAAAA,CAAgBW,gBAAgB,CAAA;QACxElC,OAAQ,CAAA,MAAA,EAAQ,gBAAkBuB,EAAAA,eAAAA,CAAgBY,UAAU,CAAA;QAC5DnC,OAAQ,CAAA,MAAA,EAAQ,oBAAsBuB,EAAAA,eAAAA,CAAgBa,aAAa,CAAA;QACnEpC,OAAQ,CAAA,MAAA,EAAQ,wBAA0BuB,EAAAA,eAAAA,CAAgBc,iBAAiB,CAAA;QAC3ErC,OAAQ,CAAA,MAAA,EAAQ,kBAAoBuB,EAAAA,eAAAA,CAAgBe,WAAW,CAAA;QAC/DtC,OAAQ,CAAA,OAAA,EAAS,sBAAwBuB,EAAAA,eAAAA,CAAgBC,aAAa,CAAA;QACtExB,OAAQ,CAAA,OAAA,EAAS,oBAAsBuB,EAAAA,eAAAA,CAAgBE,iBAAiB,CAAA;QACxEzB,OAAQ,CAAA,OAAA,EAAS,kBAAoBuB,EAAAA,eAAAA,CAAgBG,WAAW,CAAA;QAChE1B,OAAQ,CAAA,OAAA,EAAS,oBAAsBuB,EAAAA,eAAAA,CAAgBI,aAAa,CAAA;QACpE3B,OAAQ,CAAA,OAAA,EAAS,wBAA0BuB,EAAAA,eAAAA,CAAgBK,iBAAiB,CAAA;QAC5E5B,OAAQ,CAAA,OAAA,EAAS,kBAAoBuB,EAAAA,eAAAA,CAAgBM,WAAW,CAAA;QAChE7B,OAAQ,CAAA,OAAA,EAAS,qBAAuBuB,EAAAA,eAAAA,CAAgBO,cAAc,CAAA;QACtE9B,OAAQ,CAAA,OAAA,EAAS,yBAA2BuB,EAAAA,eAAAA,CAAgBQ,kBAAkB,CAAA;QAC9E/B,OAAQ,CAAA,OAAA,EAAS,mBAAqBuB,EAAAA,eAAAA,CAAgBS,YAAY,CAAA;QAClEhC,OAAQ,CAAA,OAAA,EAAS,mBAAqBuB,EAAAA,eAAAA,CAAgBU,YAAY,CAAA;QAClEjC,OAAQ,CAAA,OAAA,EAAS,uBAAyBuB,EAAAA,eAAAA,CAAgBW,gBAAgB,CAAA;QAC1ElC,OAAQ,CAAA,OAAA,EAAS,iBAAmBuB,EAAAA,eAAAA,CAAgBY,UAAU,CAAA;QAC9DnC,OAAQ,CAAA,OAAA,EAAS,qBAAuBuB,EAAAA,eAAAA,CAAgBa,aAAa,CAAA;QACrEpC,OAAQ,CAAA,OAAA,EAAS,yBAA2BuB,EAAAA,eAAAA,CAAgBc,iBAAiB,CAAA;QAC7ErC,OAAQ,CAAA,OAAA,EAAS,mBAAqBuB,EAAAA,eAAAA,CAAgBe,WAAW,CAAA;AACjE,QAAA,IAAI,CAAC1D,IAAI,CAACC,eAAgBC,CAAAA,IAAI,CAAC,EAAE;YAC/B,OAAO,IAAA;AACT;AACA,QAAA,MAAMyD,MAAmD,GAAA;YACvD3D,IAAMA,EAAAA;AACR,SAAA;AACA,QAAA,IAAIvN,OAAOyE,IAAI,CAAC4J,QAAUhU,CAAAA,CAAAA,MAAM,GAAG,CAAG,EAAA;AACpC6W,YAAAA,MAAAA,CAAO7C,QAAQ,GAAGA,QAAAA;AACpB;AACA,QAAA,IAAIrO,OAAOyE,IAAI,CAAC6J,SAAWjU,CAAAA,CAAAA,MAAM,GAAG,CAAG,EAAA;AACrC6W,YAAAA,MAAAA,CAAO5C,SAAS,GAAGA,SAAAA;AACrB;QACA,OAAO4C,MAAAA;AACT;AAEQxC,IAAAA,qBAAAA,CACNpW,IAAiB,EACjB4U,UAAgD,EAChDiE,QAAgB,EACc;AAC9B,QAAA,MAAM/Q,SAAY8M,GAAAA,UAAU,CAACiE,QAAAA,CAAS,EAAE5T,IAAAA;AACxC,QAAA,OAAO,IAAI,CAAC4D,QAAQ,CAAC7I,IAAM8H,EAAAA,SAAAA,CAAAA;AAC7B;AAEQuN,IAAAA,qBAAAA,CAAsBP,OAAiD,EAAwB;AACrG,QAAA,MAAMvQ,QAA8B,EAAE;AACtC,QAAA,MAAMuU,iBAAiB,CAAmBC,MAAAA,GAAAA;AACxC,YAAA,IAAI,CAACA,MAAQ,EAAA;AACX,gBAAA;AACF;AACA,YAAA,KAAK,MAAM9T,IAAAA,IAAQyC,MAAOsR,CAAAA,MAAM,CAACD,MAAiC,CAAA,CAAA;AAChE,gBAAA,IAAI9T,IAAQV,IAAAA,KAAAA,CAAM3B,OAAO,CAACqC,QAAQ,CAAG,EAAA;AACnCV,oBAAAA,KAAAA,CAAMlC,IAAI,CAAC4C,IAAAA,CAAAA;AACb;AACF;AACF,SAAA;AACA6T,QAAAA,cAAAA,CAAehE,QAAQG,IAAI,CAAA;AAC3B6D,QAAAA,cAAAA,CAAehE,QAAQiB,QAAQ,CAAA;AAC/B+C,QAAAA,cAAAA,CAAehE,QAAQkB,SAAS,CAAA;QAChC,OAAOzR,KAAAA;AACT;AAEQoR,IAAAA,eAAAA,CAAgBpR,KAA2B,EAAgC;AACjF,QAAA,IAAImR,IAAqCnR,GAAAA,KAAK,CAAC,CAAA,CAAE,IAAI,IAAA;QACrD,IAAK,IAAID,IAAI,CAAGoR,EAAAA,IAAAA,IAAQpR,IAAIC,KAAMxC,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;YAC7C,MAAOoR,IAAAA,IAAQ,CAACA,IAAKlH,CAAAA,UAAU,CAACjK,KAAK,CAACD,EAAE,CAAG,CAAA;AACzCoR,gBAAAA,IAAAA,GAAOA,KAAKlC,MAAM;AACpB;AACF;QACA,OAAOkC,IAAAA;AACT;IAEQG,mBAAoBH,CAAAA,IAAwB,EAAE/K,MAA+B,EAAE;AACrF,QAAA,MAAMsO,SAA+B,EAAE;AACvC,QAAA,MAAMC,QAAQ,CAACjU,IAAAA,GAAAA;YACb,IAAI0F,MAAAA,CAAOoD,GAAG,CAAC9I,IAAO,CAAA,EAAA;AACpBgU,gBAAAA,MAAAA,CAAO5W,IAAI,CAAC4C,IAAAA,CAAAA;AACd;AACA,YAAA,KAAK,MAAMkU,KAAAA,IAASlU,IAAK6J,CAAAA,QAAQ,CAAE;gBACjCoK,KAAMC,CAAAA,KAAAA,CAAAA;AACR;AACF,SAAA;QACAD,KAAMxD,CAAAA,IAAAA,CAAAA;QACN,KAAK,MAAMzG,SAAStE,MAAQ,CAAA;AAC1B,YAAA,IAAIsO,MAAOrW,CAAAA,OAAO,CAACqM,KAAAA,CAAAA,GAAS,CAAG,EAAA;AAC7BgK,gBAAAA,MAAAA,CAAO5W,IAAI,CAAC4M,KAAAA,CAAAA;AACd;AACF;QACA,OAAOgK,MAAAA;AACT;AACA,qBACA,eAAQrU,CAAgB5E,IAAiB,EAAEW,KAAkB,EAAE;QAC7D,IAAIX,IAAAA,CAAKoZ,UAAU,EAAE;YACnB,IAAK,IAAI9U,IAAI,CAAGA,EAAAA,CAAAA,GAAItE,KAAKoZ,UAAU,CAACrX,MAAM,EAAEuC,CAAK,EAAA,CAAA;AAC/C,gBAAA,MAAM+U,SAAY,GAAA,IAAI,CAACC,cAAc,CAACtZ,IAAMsE,EAAAA,CAAAA,CAAAA;AAC5C3D,gBAAAA,KAAAA,CAAM4Y,YAAY,CAACF,SAAAA,CAAAA;AACrB;AACF;AACF;AACA,qBACQG,YAAaxZ,CAAAA,IAAiB,EAAE;AACtC,QAAA,MAAMyZ,UAQF,IAAI/M,GAAAA,EAAAA;AACR,QAAA,KAAK,MAAMzH,IAAAA,IAAQjF,IAAK8C,CAAAA,MAAM,CAAE;YAC9B2W,OAAQ3M,CAAAA,GAAG,CAAC7H,IAAM,EAAA;AAChByU,gBAAAA,SAAAA,EAAWzU,IAAKuN,CAAAA,QAAQ,IAAI9I,OAAAA,CAAQC,IAAI,EAAA;AACxCgQ,gBAAAA,QAAAA,EAAU1U,IAAK0U,CAAAA,QAAQ,IAAI5G,UAAAA,CAAWC,QAAQ,EAAA;AAC9C5D,gBAAAA,KAAAA,EAAOnK,IAAK2U,CAAAA,OAAO,IAAIlQ,OAAAA,CAAQmQ,GAAG,EAAA;gBAClCC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACF;QACA,OAAOL,OAAAA;AACT;AACA,qBACA,gBAAQM,CACN/Z,IAAiB,EACjB+G,KAAa,EAiBb;AACA,QAAA,MAAMiT,aAAgBha,GAAAA,IAAAA,CAAKoZ,UAAW,CAACrS,KAAM,CAAA;QAC7C,MAAM/B,IAAAA,GAAOgV,aAAchV,CAAAA,IAAI,IAAI,IAAA;QACnC,MAAMiV,QAAAA,GAAWD,cAAcC,QAAQ;QACvC,MAAMC,QAAAA,GAAWF,cAAcE,QAAQ;AACvC,QAAA,MAAMC,gBAAgB,EAAE;AACxB,QAAA,MAAMC,oBAAoB,EAAE;AAC5B,QAAA,MAAM7V,KAAQ,GAAA,IAAI,CAACiV,YAAY,CAACxZ,IAAAA,CAAAA;AAChC,QAAA,IAAIqa,OAAU,GAAA,CAAA;AACd,QAAA,IAAK,IAAI/V,CAAI,GAAA,CAAA,EAAGA,IAAI2V,QAASlY,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;YACxC,MAAMgW,OAAAA,GAAUL,QAAQ,CAAC3V,CAAE,CAAA;AAC3B,YAAA,MAAMiW,OAAUL,GAAAA,QAAQ,CAACI,OAAAA,CAAQC,OAAO,CAAC;AACzC,YAAA,IAAI,CAACA,OAAS,EAAA;AACZJ,gBAAAA,aAAAA,CAAc9X,IAAI,CAAC,IAAA,CAAA;AACnB+X,gBAAAA,iBAAAA,CAAkB/X,IAAI,CAAC,IAAA,CAAA;AACvB,gBAAA;AACF;YACA,MAAMmY,KAAAA,GAAQxa,KAAK6C,UAAU,CAAC0X,QAAQC,KAAK,CAAC,CAACC,6BAA6B,CAACza,IAAAA,CAAAA;YAC3E,MAAM0a,MAAAA,GAAS1a,KAAK6C,UAAU,CAAC0X,QAAQG,MAAM,CAAC,CAACD,6BAA6B,CAACza,IAAAA,CAAAA;YAC7E,IAAI,EAAEwa,KAAiBG,YAAAA,YAAW,KAAM,EAAED,MAAkBC,YAAAA,YAAW,CAAI,EAAA;AACzEC,gBAAAA,OAAAA,CAAQC,KAAK,CAAC,wDAAA,CAAA;AACdV,gBAAAA,aAAAA,CAAc9X,IAAI,CAAC,IAAA,CAAA;AACnB+X,gBAAAA,iBAAAA,CAAkB/X,IAAI,CAAC,IAAA,CAAA;AACvB,gBAAA;AACF;YACA,MAAMyY,IAAAA,GACJP,OAAQQ,CAAAA,aAAa,KAAK,MAAA,GACtB,SACAR,OAAQQ,CAAAA,aAAa,KAAK,aAAA,GACxB,aACA,GAAA,QAAA;AACR,YAAA,IAAIC,YAAuC,GAAA,IAAA;AAC3C,YAAA,IAAIC,gBAA+E,GAAA,IAAA;AACnF,YAAA,IAAIX,OAAQY,CAAAA,MAAM,CAACC,IAAI,KAAK,UAAY,EAAA;AACtCH,gBAAAA,YAAAA,GAAe,IAAII,YAAAA,CAAaN,IAAM,EAAA,MAAA,EAAQN,KAAOE,EAAAA,MAAAA,CAAAA;gBACrDO,gBAAmB,GAAA,UAAA;AACrB,aAAA,MAAO,IAAIX,OAAQY,CAAAA,MAAM,CAACC,IAAI,KAAK,aAAe,EAAA;AAChDH,gBAAAA,YAAAA,GAAe,IAAII,YAAAA,CAAaN,IAAM,EAAA,MAAA,EAAQN,KAAOE,EAAAA,MAAAA,CAAAA;gBACrDO,gBAAmB,GAAA,aAAA;AACrB,aAAA,MAAO,IAAIX,OAAQY,CAAAA,MAAM,CAACC,IAAI,KAAK,OAAS,EAAA;AAC1CH,gBAAAA,YAAAA,GAAe,IAAII,YAAAA,CAAaN,IAAM,EAAA,MAAA,EAAQN,KAAOE,EAAAA,MAAAA,CAAAA;gBACrDO,gBAAmB,GAAA,OAAA;AACrB,aAAA,MAAO,IAAIX,OAAQY,CAAAA,MAAM,CAACC,IAAI,KAAK,SAAW,EAAA;AAC5CH,gBAAAA,YAAAA,GAAe,IAAII,YAAAA,CAAaN,IAAM,EAAA,IAAA,EAAMN,KAAOE,EAAAA,MAAAA,CAAAA;gBACnDO,gBAAmB,GAAA,SAAA;AACrB;AACAd,YAAAA,aAAAA,CAAc9X,IAAI,CAAC2Y,YAAAA,CAAAA;AACnBZ,YAAAA,iBAAAA,CAAkB/X,IAAI,CAAC4Y,gBAAAA,CAAAA;AACvB,YAAA,IAAID,YAAc,EAAA;AAChB,gBAAA,MAAM1S,MAAMkS,KAAK,CAACA,KAAMzY,CAAAA,MAAM,GAAG,CAAE,CAAA;AACnC,gBAAA,IAAIuG,MAAM+R,OAAS,EAAA;oBACjBA,OAAU/R,GAAAA,GAAAA;AACZ;AACF;AACF;QACA,OAAO;AAAEtD,YAAAA,IAAAA;AAAMiV,YAAAA,QAAAA;AAAUC,YAAAA,QAAAA;AAAUC,YAAAA,aAAAA;AAAeC,YAAAA,iBAAAA;AAAmBC,YAAAA,OAAAA;AAAS9V,YAAAA;AAAM,SAAA;AACtF;AACA,qBACA,cAAQ+U,CAAetZ,IAAiB,EAAE+G,KAAa,EAAsB;AAC3E,QAAA,MAAMiT,aAAgB,GAAA,IAAI,CAACD,gBAAgB,CAAC/Z,IAAM+G,EAAAA,KAAAA,CAAAA;AAClD,QAAA,MAAMsU,aAAoC,GAAA;AACxCrW,YAAAA,IAAAA,EAAMgV,cAAchV,IAAI;AACxBsW,YAAAA,MAAAA,EAAQ,EAAE;AACV5W,YAAAA,SAAAA,EAAW,EAAE;AACbH,YAAAA,KAAAA,EAAO;AACT,SAAA;QACA,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAI0V,cAAcC,QAAQ,CAAClY,MAAM,EAAEuC,CAAK,EAAA,CAAA;AACtD,YAAA,MAAM0W,YAAehB,GAAAA,aAAAA,CAAcG,aAAa,CAAC7V,CAAE,CAAA;AACnD,YAAA,MAAM2W,gBAAmBjB,GAAAA,aAAAA,CAAcI,iBAAiB,CAAC9V,CAAE,CAAA;YAC3D,MAAMiX,eAAAA,GAAkBvB,cAAcC,QAAQ,CAAC3V,EAAE,CAAC4W,MAAM,CAACjW,IAAI;AAC7D,YAAA,IAAI,CAAC+V,YAAgB,IAAA,CAACC,gBAAoB,IAAA,OAAOM,oBAAoB,QAAU,EAAA;AAC7E,gBAAA;AACF;AACA,YAAA,MAAMC,UAAaxb,GAAAA,IAAAA,CAAK8C,MAAM,CAACyY,eAAgB,CAAA;AAC/C,YAAA,IAAI,CAACC,UAAY,EAAA;AACf,gBAAA;AACF;AACA,YAAA,MAAMC,KAA6B,GAAA;gBACjCxW,IAAMuW,EAAAA,UAAAA;gBACN5Z,IAAMqZ,EAAAA,gBAAAA;AACND,gBAAAA;AACF,aAAA;YACA,IAAIS,KAAAA,CAAM7Z,IAAI,KAAK,SAAW,EAAA;gBAC5B6Z,KAAMC,CAAAA,mBAAmB,GAAGF,UAAAA,CAAWG,OAAO;AAChD;YACAN,aAAcC,CAAAA,MAAM,CAACjZ,IAAI,CAACoZ,KAAAA,CAAAA;AAC1B,YAAA,IAAIJ,cAAc9W,KAAK,CAAC3B,OAAO,CAAC4Y,cAAc,CAAG,EAAA;gBAC/CH,aAAc9W,CAAAA,KAAK,CAAClC,IAAI,CAACmZ,UAAAA,CAAAA;AAC3B;YACA,IAAIA,UAAAA,CAAWI,gBAAgB,EAAE;AAC/B,gBAAA,KAAK,MAAMnX,QAAAA,IAAY+W,UAAWI,CAAAA,gBAAgB,CAAE;AAClD,oBAAA,IAAIP,cAAc3W,SAAS,CAAC9B,OAAO,CAAC6B,YAAY,CAAG,EAAA;wBACjD4W,aAAc3W,CAAAA,SAAS,CAACrC,IAAI,CAACoC,QAAAA,CAAAA;AAC/B;AACF;AACF;AACF;QACA,OAAO4W,aAAAA;AACT;qBAEA,SAAQ9H,CACNvT,IAAiB,EACjB8H,SAAiB,EACjB0L,MAAoC,EACpC7S,KAAkB,EACE;AACpB,QAAA,IAAIsE,IAA2BjF,GAAAA,IAAAA,CAAK8C,MAAM,CAACgF,SAAU,CAAA;AACrD,QAAA,IAAI7C,IAAM,EAAA;AACR,YAAA,IAAIuO,MAAQ,EAAA;gBACV,IAAIvO,IAAAA,CAAKuO,MAAM,EAAE;AACf,oBAAA,MAAM,IAAIU,KAAM,CAAA,wBAAA,CAAA;AAClB;AACAV,gBAAAA,MAAAA,CAAOqI,QAAQ,CAAC5W,IAAAA,CAAAA;AAClB;YACA,OAAOA,IAAAA;AACT;AACA,QAAA,MAAM6W,QAAW9b,GAAAA,IAAAA,CAAKuE,KAAK,GAAGuD,SAAU,CAAA;AACxC,QAAA,IAAIgU,QAAU,EAAA;AACZ7W,YAAAA,IAAAA,GAAO,IAAI8W,kBAAmBD,CAAAA,QAAAA,CAAS9W,IAAI,EAAErE,KAAAA,EAAO6S;AACpDvO,YAAAA,IAAAA,CAAK0W,OAAO,GAAGG,QAASH,CAAAA,OAAO,IAAI,IAAA;AACnC,YAAA,IAAI,OAAOG,QAAAA,CAASjV,IAAI,KAAK,QAAU,EAAA;AACrC5B,gBAAAA,IAAAA,CAAK4B,IAAI,GAAG7G,IAAAA,CAAK+C,OAAO,CAAC+Y,QAAAA,CAASjV,IAAI,CAAC;AACvC,gBAAA,IAAI5B,IAAK4B,CAAAA,IAAI,IAAIiV,QAAAA,CAAS9W,IAAI,EAAE;AAC9B,oBAAA,MAAMgX,eAAe/W,IAAK4B,CAAAA,IAAI,CAACuB,SAAS,CAACrG,MAAM;AAC/C,oBAAA,IAAK,IAAIuC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI0X,cAAc1X,CAAK,EAAA,CAAA;AACrC,wBAAA,MAAM2X,YAAYhX,IAAK4B,CAAAA,IAAI,CAACuB,SAAS,CAAC9D,EAAE,EAAE2X,SAAAA;AAC1C,wBAAA,IAAIA,SAAW,EAAA;AACbA,4BAAAA,SAAAA,CAAUjX,IAAI,GAAGgX,YAAe,GAAA,CAAA,GAAI,CAAGF,EAAAA,QAAAA,CAAS9W,IAAI,CAAC,CAAC,EAAEV,CAAG,CAAA,CAAA,GAAGwX,SAAS9W,IAAI;AAC7E;AACF;AACF;gBACA,IAAI,CAACC,KAAK4B,IAAI,CAAC2B,UAAU,IAAIsT,QAAAA,CAASI,MAAM,EAAEC,WAAa,EAAA;AACzDlX,oBAAAA,IAAAA,CAAK4B,IAAI,CAAC2B,UAAU,GAAGsT,QAASI,CAAAA,MAAM,CAACC,WAAW;AACpD;AACA,gBAAA,MAAMC,UAAaN,GAAAA,QAAAA,CAASrW,UAAU,GAAG,yBAA0B,CAAA;AACnE,gBAAA,IAAI2W,UAAY,EAAA;oBACd,MAAMC,UAAAA,GAAaD,WAAWC,UAAU;AACxC,oBAAA,IAAIA,UAAY,EAAA;AACd,wBAAA,MAAMC,mBACJ,GAAA,OAAOD,UAAWE,CAAAA,WAAW,KAAK,QAAA,GAAWvc,IAAK6C,CAAAA,UAAU,CAACwZ,UAAAA,CAAWE,WAAW,CAAC,GAAG,IAAA;AACzF,wBAAA,MAAMC,aACJ,GAAA,OAAOH,UAAWI,CAAAA,KAAK,KAAK,QAAA,GAAWzc,IAAK6C,CAAAA,UAAU,CAACwZ,UAAAA,CAAWI,KAAK,CAAC,GAAG,IAAA;AAC7E,wBAAA,MAAMC,gBACJ,GAAA,OAAOL,UAAWM,CAAAA,QAAQ,KAAK,QAAA,GAAW3c,IAAK6C,CAAAA,UAAU,CAACwZ,UAAAA,CAAWM,QAAQ,CAAC,GAAG,IAAA;AACnF,wBAAA,MAAMzU,QAAQoU,mBAAqBpU,EAAAA,KAAAA,IAASsU,aAAetU,EAAAA,KAAAA,IAASwU,kBAAkBxU,KAAS,IAAA,CAAA;wBAC/F,MAAM0U,iBAAAA,GAAoBN,qBAAqB7B,6BAC7Cza,CAAAA,IAAAA,CAAAA;wBAEF,MAAM6c,WAAAA,GAAcL,eAAe/B,6BAA8Bza,CAAAA,IAAAA,CAAAA;wBACjE,MAAM8c,cAAAA,GAAiBJ,kBAAkBjC,6BAA8Bza,CAAAA,IAAAA,CAAAA;AACvE,wBAAA,IAAK,IAAIsE,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI4D,OAAO5D,CAAK,EAAA,CAAA;4BAC9B,MAAMyY,CAAAA,GAAIH,oBACN,IAAIlT,OAAAA,CACFkT,iBAAiB,CAACtY,CAAAA,GAAI,CAAE,CAAA,EACxBsY,iBAAiB,CAACtY,IAAI,CAAI,GAAA,CAAA,CAAE,EAC5BsY,iBAAiB,CAACtY,IAAI,CAAI,GAAA,CAAA,CAAE,CAE9BoF,GAAAA,OAAAA,CAAQC,IAAI,EAAA;4BAChB,MAAMqT,CAAAA,GAAIH,cACN,IAAInT,OAAAA,CAAQmT,WAAW,CAACvY,CAAAA,GAAI,CAAE,CAAA,EAAEuY,WAAW,CAACvY,IAAI,CAAI,GAAA,CAAA,CAAE,EAAEuY,WAAW,CAACvY,IAAI,CAAI,GAAA,CAAA,CAAE,CAC9EoF,GAAAA,OAAAA,CAAQmQ,GAAG,EAAA;AACf,4BAAA,MAAMjI,CAAIkL,GAAAA,cAAAA,GACN,IAAI/J,UAAAA,CACF+J,cAAc,CAACxY,CAAI,GAAA,CAAA,CAAE,EACrBwY,cAAc,CAACxY,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,EACzBwY,cAAc,CAACxY,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,EACzBwY,cAAc,CAACxY,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,CAE3ByO,GAAAA,UAAAA,CAAWC,QAAQ,EAAA;4BACvB/N,IAAKgY,CAAAA,SAAS,CAAC5a,IAAI,CAAC;AAAE0a,gCAAAA,CAAAA;AAAGC,gCAAAA,CAAAA;AAAGpL,gCAAAA;AAAE,6BAAA,CAAA;AAChC;AACF;iBACK,MAAA;oBACL3M,IAAKgY,CAAAA,SAAS,CAAC5a,IAAI,CAAC;AAAE0a,wBAAAA,CAAAA,EAAGrT,QAAQC,IAAI,EAAA;AAAIqT,wBAAAA,CAAAA,EAAGtT,QAAQmQ,GAAG,EAAA;AAAIjI,wBAAAA,CAAAA,EAAGmB,WAAWC,QAAQ;AAAG,qBAAA,CAAA;AACtF;AACF;YACA,IAAI,EAAE,OAAO8I,QAAStX,CAAAA,IAAI,KAAK,QAAO,CAAMsX,IAAAA,QAAAA,CAAStX,IAAI,GAAG,CAAG,EAAA;;gBAE7D,IAAIsX,QAAAA,CAASoB,MAAM,EAAE;AACnB,oBAAA,MAAMA,MAAS,GAAA,IAAI3I,SAAUuH,CAAAA,QAAAA,CAASoB,MAAM,CAAA;oBAC5CA,MAAOC,CAAAA,SAAS,CAAClY,IAAK2U,CAAAA,OAAO,EAAE3U,IAAK0U,CAAAA,QAAQ,EAAE1U,IAAAA,CAAKuN,QAAQ,CAAA;iBACtD,MAAA;oBACL,IAAIsJ,QAAAA,CAASnC,QAAQ,EAAE;AACrB1U,wBAAAA,IAAAA,CAAK0U,QAAQ,CAAC7M,GAAG,CAACgP,SAASnC,QAAQ,CAAA;AACrC;oBACA,IAAImC,QAAAA,CAAS1M,KAAK,EAAE;AAClBnK,wBAAAA,IAAAA,CAAK2U,OAAO,CAAC9M,GAAG,CAACgP,SAAS1M,KAAK,CAAA;AACjC;oBACA,IAAI0M,QAAAA,CAASsB,WAAW,EAAE;AACxBnY,wBAAAA,IAAAA,CAAKuN,QAAQ,CAAC1F,GAAG,CAACgP,SAASsB,WAAW,CAAA;AACxC;AACF;AACF;YACApd,IAAK8C,CAAAA,MAAM,CAACgF,SAAAA,CAAU,GAAG7C,IAAAA;YACzB,IAAI6W,QAAAA,CAAShN,QAAQ,EAAE;AACrB,gBAAA,KAAK,MAAMuO,UAAAA,IAAcvB,QAAShN,CAAAA,QAAQ,CAAE;AAC1C,oBAAA,IAAI,CAACyE,SAAS,CAACvT,IAAAA,EAAMqd,YAAYpY,IAAMtE,EAAAA,KAAAA,CAAAA;AACzC;AACF;SACK,MAAA;AACL,YAAA,MAAM,IAAIuT,KAAAA,CAAM,CAAC,mBAAmB,EAAEpM,SAAW,CAAA,CAAA,CAAA;AACnD;QACA,OAAO7C,IAAAA;AACT;qBAEA,MAAcf,WAAYvD,CAAAA,KAAkB,EAAEX,IAAiB,EAAEa,GAAQ,EAAE;QACzE,IAAIb,IAAAA,CAAKsd,MAAM,EAAE;YACf,IAAK,IAAIhZ,IAAI,CAAGA,EAAAA,CAAAA,GAAItE,KAAKsd,MAAM,CAACvb,MAAM,EAAEuC,CAAK,EAAA,CAAA;gBAC3CtE,IAAK+C,CAAAA,OAAO,CAACuB,CAAAA,CAAE,GAAI,MAAM,IAAI,CAACiZ,SAAS,CAAC5c,KAAOX,EAAAA,IAAAA,EAAMsE,CAAGzD,EAAAA,GAAAA,CAAAA;AAC1D;AACF;AACF;qBAEA,MAAc0c,SAAAA,CAAU5c,KAAkB,EAAEX,IAAiB,EAAE4G,SAAiB,EAAE/F,GAAQ,EAAE;AAC1F,QAAA,MAAM2c,WAAWxd,IAAKsd,CAAAA,MAAM,IAAItd,IAAKsd,CAAAA,MAAM,CAAC1W,SAAU,CAAA;AACtD,QAAA,IAAIC,IAAgC,GAAA,IAAA;AACpC,QAAA,IAAI2W,QAAU,EAAA;YACZ3W,IAAO,GAAA;gBACL4W,YAAcD,EAAAA,QAAAA,CAAS7B,OAAO,IAAIjJ,SAAAA;AAClClK,gBAAAA,UAAAA,EAAYgV,QAAQ,CAAC,QAAS,CAAA,EAAErB,WAAe,IAAA,IAAA;AAC/C/T,gBAAAA,SAAAA,EAAW;AACb,aAAA;YACA,MAAMsV,UAAAA,GAAaF,SAASE,UAAU;YACtC,MAAMC,QAAAA,GAAWH,QAASxY,CAAAA,IAAI,IAAI,IAAA;AAClC,YAAA,IAAI0Y,UAAY,EAAA;AACd,gBAAA,MAAME,mBAA8C,EAAE;AACtD,gBAAA,IAAK,IAAItZ,CAAI,GAAA,CAAA,EAAGA,IAAIoZ,UAAW3b,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;oBAC1C,MAAMuZ,CAAAA,GAAIH,UAAU,CAACpZ,CAAE,CAAA;AACvB,oBAAA,MAAMwZ,cAAcH,QAChBD,GAAAA,UAAAA,CAAW3b,MAAM,GAAG,CAAA,GAClB,GAAG4b,QAAS,CAAA,CAAC,EAAErZ,CAAG,CAAA,CAAA,GAClBqZ,WACF,CAAC,KAAK,EAAE/W,SAAU,CAAA,CAAC,EAAEtC,CAAG,CAAA,CAAA;AAC5B,oBAAA,MAAMyZ,WAAgC,GAAA;wBACpC/Y,IAAM8Y,EAAAA,WAAAA;wBACN7B,SAAW,EAAA,IAAA;wBACX+B,QAAU,EAAA,IAAA;wBACVC,YAAc,EAAA,IAAA;wBACdC,eAAiB,EAAA,IAAA;wBACjBC,eAAiB,EAAA,IAAA;wBACjB5V,UAAY,EAAA;AACd,qBAAA;AACA,oBAAA,MAAM0T,SAAgC,GAAA;wBACpCjX,IAAM8Y,EAAAA,WAAAA;AACNM,wBAAAA,QAAAA,EAAU,EAAC;wBACXxc,IAAM,EAAA,eAAA;wBACNyc,UAAY,EAAA,CAAA;wBACZC,OAAS,EAAA,IAAA;AACTC,wBAAAA,MAAAA,EAAQ7U,QAAQC,IAAI,EAAA;AACpB6U,wBAAAA,MAAAA,EAAQ9U,QAAQC,IAAI;AACtB,qBAAA;oBACA,MAAM0S,UAAAA,GAAawB,EAAExB,UAAU;oBAC/B,MAAMoC,cAAAA,GAAiBze,KAAKQ,YAAY,GAAGqd,EAAEpY,UAAU,GAAG,4BAAA,CAA6B,GAAG,IAAA;AAC1F,oBAAA,IAAIiZ,gBAA+C,GAAA,IAAA;AACnD,oBAAA,IAAID,cAAgB,EAAA;wBAClB,MAAME,UAAAA,GAAa3e,KAAK4e,WAAW,IAAI5e,KAAK4e,WAAW,CAACH,cAAeE,CAAAA,UAAU,CAAC;AAClF,wBAAA,IAAI,CAACA,UAAY,EAAA;AACf,4BAAA,MAAM,IAAIzK,KAAM,CAAA,2BAAA,CAAA;AAClB;wBACA,MAAMnT,WAAAA,GAAcf,KAAKoB,cAAc,IAAIpB,KAAKoB,cAAc,CAACud,UAAW7d,CAAAA,MAAM,CAAC;AACjF,wBAAA,IAAI,CAACC,WAAa,EAAA;AAChB,4BAAA,MAAM,IAAImT,KAAM,CAAA,yDAAA,CAAA;AAClB;AACAwK,wBAAAA,gBAAAA,GAAmB,IAAIG,gBAAAA,CACrB,IAAIC,SAAAA,CAAU/d,WAAa4d,EAAAA,UAAAA,CAAWI,UAAU,IAAI,CAAGJ,EAAAA,UAAAA,CAAW/a,UAAU,CAAA,EAC5E5D,KAAKQ,YAAY,CAAA;AAErB;oBACA,IAAK,MAAMwe,UAAU3C,UAAY,CAAA;wBAC/B,IAAI,CAAC4C,iBAAiB,CACpBjf,IACAgf,EAAAA,MAAAA,EACA3C,UAAU,CAAC2C,MAAO,CAAA,EAClB/C,SACA8B,EAAAA,WAAAA,EACAU,cACAC,EAAAA,gBAAAA,CAAAA;AAEJ;oBACA,IAAIb,CAAAA,CAAEqB,OAAO,EAAE;wBACb,IAAIC,SAAAA,EAAAA,CAAYvd,IAAI,KAAK,OAAS,EAAA;;AAEhC,4BAAA,IAAIya,UAAU,CAAC,YAAa,CAAA,KAAK3J,SAAW,EAAA;AAC1CkI,gCAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,qCAAqC,CAAC,CAAA;AACrDgD,gCAAAA,CAAAA,CAAEqB,OAAO,GAAGxM,SAAAA;6BACP,MAAA;AACL,gCAAA,MAAM0M,YAAenD,GAAAA,SAAAA,CAAUmC,QAAQ,CAAC,UAAW,CAAA;AACnD,gCAAA,MAAMiB,WAAcD,GAAAA,YAAAA,GAChB,YAACA,CAAa1e,IAAI,CAACqB,MAAM,GAAGud,6BAA8BF,CAAAA,YAAAA,CAAaG,MAAM,CAAA,IAAM,CACnF,GAAA,CAAA;gCACJ,MAAMC,aAAAA,GAAgB,IAAI7E,YAAa0E,CAAAA,WAAAA,CAAAA;AACvC,gCAAA,IAAK,IAAI/a,CAAI,GAAA,CAAA,EAAGA,IAAIkb,aAAczd,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;oCAC7Ckb,aAAa,CAAClb,EAAE,GAAGA,CAAAA;AACrB;gCACA2X,SAAUmC,CAAAA,QAAQ,CAAC,WAAA,CAAY,GAAG;oCAAEmB,MAAQ,EAAA,UAAA;oCAAY7e,IAAM8e,EAAAA;AAAc,iCAAA;AAC9E;AACF;AACF;oBACA,IAAI3B,CAAAA,CAAEqB,OAAO,EAAE;AACb,wBAAA,MAAMA,UAAuC,EAAC;AAC9C,wBAAA,MAAMO,YAA2C,EAAE;AACnD,wBAAA,MAAMC,SAAY,GAAA;4BAChBC,QAAUC,EAAAA,qBAAAA;4BACVC,MAAQC,EAAAA,mBAAAA;4BACRC,OAASC,EAAAA,oBAAAA;4BACTC,UAAYC,EAAAA,iBAAAA;4BACZC,UAAYC,EAAAA,iBAAAA;4BACZC,UAAYC,EAAAA,iBAAAA;4BACZC,UAAYC,EAAAA,iBAAAA;4BACZC,OAASC,EAAAA;AACX,yBAAA;AACA,wBAAA,MAAMC,iBAAiB,IAAIjT,GAAAA,EAAAA;AAC3B,wBAAA,KAAK,MAAMwN,MAAAA,IAAU2C,CAAEqB,CAAAA,OAAO,CAAE;4BAC9B,IAAK,MAAM0B,KAAK1F,MAAQ,CAAA;gCACtB,MAAM6B,CAAAA,GAAI2C,SAAS,CAACkB,CAA4B,CAAA;AAChD,gCAAA,IAAI7D,MAAMrK,SAAW,EAAA;AACnBwM,oCAAAA,OAAO,CAACnC,CAAE,CAAA,GAAGmC,OAAO,CAACnC,EAAE,IAAI;wCAAE8D,aAAe,EAAA,CAAA;AAAGngB,wCAAAA,IAAAA,EAAM;AAAG,qCAAA;oCACxD,MAAMogB,aAAAA,GAAgB5F,MAAM,CAAC0F,CAAE,CAAA;AAC/B,oCAAA,MAAM9c,QAAW9D,GAAAA,IAAAA,CAAK6C,UAAU,CAACie,aAAc,CAAA;oCAC/C5B,OAAO,CAACnC,EAAE,CAAC8D,aAAa,GAAG/c,QAASid,CAAAA,iBAAiB,CAACjd,QAAAA,CAASlC,IAAI,CAAA;oCACnEsd,OAAO,CAACnC,EAAE,CAACrc,IAAI,CAAC2B,IAAI,CAACyB,QAAS2W,CAAAA,6BAA6B,CAACza,IAAAA,CAAAA,CAAAA;AAC5D,oCAAA,IAAI4gB,MAAM,UAAY,EAAA;wCACpB,MAAMrR,GAAAA,GAAMzL,SAASyL,GAAG,GACpB,IAAI7F,OAAQ5F,CAAAA,QAAAA,CAASyL,GAAG,CAAC,CAAE,CAAA,EAAEzL,SAASyL,GAAG,CAAC,EAAE,EAAEzL,QAAAA,CAASyL,GAAG,CAAC,CAAA,CAAE,CAC7D7F,GAAAA,OAAAA,CAAQC,IAAI,EAAA;wCAChB,MAAMrB,GAAAA,GAAMxE,SAASwE,GAAG,GACpB,IAAIoB,OAAQ5F,CAAAA,QAAAA,CAASwE,GAAG,CAAC,CAAE,CAAA,EAAExE,SAASwE,GAAG,CAAC,EAAE,EAAExE,QAAAA,CAASwE,GAAG,CAAC,CAAA,CAAE,CAC7DoB,GAAAA,OAAAA,CAAQC,IAAI,EAAA;AAChB8V,wCAAAA,SAAAA,CAAUpd,IAAI,CAAC,IAAI2e,WAAAA,CAAYzR,GAAKjH,EAAAA,GAAAA,CAAAA,CAAAA;AACtC;AACAqY,oCAAAA,cAAAA,CAAe3S,GAAG,CAAC+O,CAAAA,CAAAA;AACrB;AACF;AACF;AACAgB,wBAAAA,WAAAA,CAAYxV,UAAU,GAAGsV,CAAEqB,CAAAA,OAAO,CAACnd,MAAM;AACzCgc,wBAAAA,WAAAA,CAAYmB,OAAO,GAAGA,OAAAA;AACtBnB,wBAAAA,WAAAA,CAAY0B,SAAS,GAAGA,SAAAA;wBACxB1B,WAAYkD,CAAAA,gBAAgB,GAAGN,cAAAA,CAAehO,IAAI;AACpD;oBACA,MAAM2L,OAAAA,GAAUT,EAAES,OAAO;oBACzB,IAAI,OAAOA,YAAY,QAAU,EAAA;AAC/B,wBAAA,IAAI,CAAC4C,gBAAgB,CAAClhB,MAAMse,OAASrC,EAAAA,SAAAA,EAAW8B,aAAaU,cAAgBC,EAAAA,gBAAAA,CAAAA;AAC/E;oBACA,IAAIyC,aAAAA,GAAgBtD,EAAE/C,IAAI;oBAC1B,IAAI,OAAOqG,kBAAkB,QAAU,EAAA;wBACrCA,aAAgB,GAAA,CAAA;AAClB;AACAlF,oBAAAA,SAAAA,CAAUra,IAAI,GAAG,IAAI,CAACwf,cAAc,CAACD,aAAAA,CAAAA;AACrC,oBAAA,MAAME,YAAexD,GAAAA,CAAAA,CAAEG,QAAQ,KAAKtL,SAAY1S,GAAAA,IAAAA,CAAKshB,SAAU,CAACzD,CAAAA,CAAEG,QAAQ,CAAC,GAAG,IAAA;AAC9E,oBAAA,MAAMuD,4BAA4B,IAAI,CAACC,kCAAkC,CACvEH,cACAxD,CACA5B,EAAAA,SAAAA,CAAAA;AAEF2B,oBAAAA,gBAAAA,CAAiBvb,IAAI,CAAC;wBACpBof,MAAQ5D,EAAAA,CAAAA;AACR5B,wBAAAA,SAAAA;AACA8B,wBAAAA,WAAAA;AACAsD,wBAAAA,YAAAA;AACAE,wBAAAA;AACF,qBAAA,CAAA;AACF;gBACA,IAAI,CAACG,4BAA4B,CAAC9D,gBAAAA,CAAAA;gBAClC,KAAK,MAAM+D,UAAU/D,gBAAkB,CAAA;AACrC,oBAAA,MAAM,EAAE6D,MAAAA,EAAQ5D,CAAC,EAAE5B,SAAS,EAAE8B,WAAW,EAAEsD,YAAY,EAAEE,yBAAyB,EAAE,GAAGI,MAAAA;AACvF,oBAAA,MAAMC,kBAAkB,CAAC,CAAC3F,SAAUmC,CAAAA,QAAQ,CAAC,QAAS,CAAA;AACtD,oBAAA,MAAMyD,iBAAiB,CAAC,CAAC5F,SAAUmC,CAAAA,QAAQ,CAAC,SAAU,CAAA;AACtD,oBAAA,MAAM0D,mBAAmB,CAAC,CAAC7F,SAAUmC,CAAAA,QAAQ,CAAC,SAAU,CAAA;AACxD,oBAAA,MAAM2D,SAAY,GAAA;AAChBH,wBAAAA,eAAAA,GAAkB,GAAM,GAAA,EAAA;AACxBC,wBAAAA,cAAAA,GAAiB,GAAM,GAAA,EAAA;AACvBC,wBAAAA,gBAAAA,GAAmB,GAAM,GAAA,EAAA;AACzBP,wBAAAA,yBAAAA,GAA4B,KAAQ,GAAA;qBACrC,CACEhX,MAAM,CAAC,CAACyX,CAAAA,GAAM,CAAC,CAACA,CAAAA,CAAAA,CAChBxe,IAAI,CAAC,EAAA,CAAA;AACR,oBAAA,MAAMye,YAAe,GAAA;AAACpE,wBAAAA,CAAAA,CAAEG,QAAQ,IAAI,SAAA;AAAW+D,wBAAAA;qBAAU,CAACxX,MAAM,CAAC,CAACyX,CAAAA,GAAM,CAAC,CAACA,CAAAA,CAAAA,CAAGxe,IAAI,CAAC,GAAA,CAAA;oBAClF,IAAIwa,QAAAA,GAAWrd,KAAMuhB,CAAAA,WAAW,CAACD,YAAAA,CAAAA;AACjC,oBAAA,IAAI,CAACjE,QAAU,EAAA;wBACbA,QAAW,GAAA,MAAM,IAAI,CAACmE,aAAa,CACjCxhB,KACAX,EAAAA,IAAAA,EACAqhB,YACAQ,EAAAA,cAAAA,EACAD,eACAE,EAAAA,gBAAAA,EACAP,yBACA1gB,EAAAA,GAAAA,CAAAA;wBAEFF,KAAMyhB,CAAAA,WAAW,CAACH,YAAcjE,EAAAA,QAAAA,CAAAA;AAClC,qBAAA,MAAO,IAAIuD,yBAAAA,IAA6BvD,QAASpc,CAAAA,IAAI,KAAK,OAAS,EAAA;AAChEoc,wBAAAA,QAAAA,CAAoCuD,yBAAyB,GAAG,IAAA;AACnE;AACAxD,oBAAAA,WAAAA,CAAY9B,SAAS,GAAGA,SAAAA;AACxB8B,oBAAAA,WAAAA,CAAYC,QAAQ,GAAGA,QAAAA;oBACvBnX,IAAKuB,CAAAA,SAAS,CAAC/F,IAAI,CAAC0b,WAAAA,CAAAA;AACpBpd,oBAAAA,KAAAA,CAAM0hB,YAAY,CAACpG,SAAAA,CAAAA;AACrB;AACF;AACF;QACA,OAAOpV,IAAAA;AACT;AACQ2a,IAAAA,kCAAAA,CACNH,YAAgC,EAChCiB,aAA4B,EAC5BrG,SAA6B,EAC7B;QACA,IAAI,CAACoF,YAAc5b,EAAAA,UAAAA,EAAY8c,oBAAsB,EAAA;YACnD,OAAO,KAAA;AACT;QACA,IAAIlB,YAAAA,CAAamB,aAAa,EAAE;YAC9B,OAAO,KAAA;AACT;QACA,IAAIF,aAAAA,CAAcpD,OAAO,EAAEuD,IAAAA,CAAK,CAACvH,MAAWA,GAAAA,MAAAA,CAAO6E,OAAO,KAAKrN,SAAY,CAAA,EAAA;YACzE,OAAO,KAAA;AACT;AACA,QAAA,OACEuJ,UAAUra,IAAI,KAAK,eAAmB,IAAA,CAAC,CAACqa,SAAUmC,CAAAA,QAAQ,CAAC,UAAA,CAAW,IAAI,CAAC,CAACnC,SAAUmC,CAAAA,QAAQ,CAAC,QAAS,CAAA;AAE5G;AACQsD,IAAAA,4BAAAA,CAA6BhE,UAAqC,EAAE;AAC1E,QAAA,MAAMwB,UAAUxB,UAAWnT,CAAAA,MAAM,CAAC,CAACsT,CAAAA,GAAMA,EAAE0D,yBAAyB,CAAA;QACpE,IAAIrC,OAAAA,CAAQnd,MAAM,KAAK,CAAG,EAAA;AACxB,YAAA;AACF;AACA,QAAA,MAAM2gB,OAAO,IAAIhW,GAAAA,EAAAA;AACjB,QAAA,KAAK,MAAM,EAAEuP,SAAS,EAAE,IAAIiD,OAAS,CAAA;AACnC,YAAA,MAAME,YAAenD,GAAAA,SAAAA,CAAUmC,QAAQ,CAAC,UAAW,CAAA;AACnD,YAAA,IAAI,CAACgB,YAAc,EAAA;AACjB,gBAAA;AACF;YACA,MAAMuD,SAAAA,GAAYvD,aAAa1e,IAAI;YACnC,MAAMkiB,cAAAA,GAAiBtD,6BAA8BF,CAAAA,YAAAA,CAAaG,MAAM,CAAA;AACxE,YAAA,MAAMsD,WAAc,GAACF,SAAU5gB,CAAAA,MAAM,GAAG6gB,cAAmB,IAAA,CAAA;AAC3D,YAAA,MAAMtE,OAAU,GAAA,IAAI,CAACwE,mBAAmB,CAAC7G,SAAW4G,EAAAA,WAAAA,CAAAA;AACpD,YAAA,IAAI,CAACvE,OAAS,EAAA;AACZ,gBAAA;AACF;YACA,IAAK,IAAIha,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAIga,OAAQvc,CAAAA,MAAM,EAAEuC,CAAAA,IAAK,CAAG,CAAA;gBAC9C,MAAMye,EAAAA,GAAKzE,OAAO,CAACha,CAAE,CAAA;AACrB,gBAAA,MAAM0e,EAAK1E,GAAAA,OAAO,CAACha,CAAAA,GAAI,CAAE,CAAA;AACzB,gBAAA,MAAM2e,EAAK3E,GAAAA,OAAO,CAACha,CAAAA,GAAI,CAAE,CAAA;AACzB,gBAAA,MAAM4e,KAAKH,EAAKH,GAAAA,cAAAA;AAChB,gBAAA,MAAMO,KAAKH,EAAKJ,GAAAA,cAAAA;AAChB,gBAAA,MAAMQ,KAAKH,EAAKL,GAAAA,cAAAA;AAChB,gBAAA,MAAMS,KAAKV,SAAS,CAACQ,GAAG,GAAGR,SAAS,CAACO,EAAG,CAAA;gBACxC,MAAMI,EAAAA,GAAKX,SAAS,CAACQ,EAAAA,GAAK,EAAE,GAAGR,SAAS,CAACO,EAAAA,GAAK,CAAE,CAAA;gBAChD,MAAMK,EAAAA,GAAKZ,SAAS,CAACQ,EAAAA,GAAK,EAAE,GAAGR,SAAS,CAACO,EAAAA,GAAK,CAAE,CAAA;AAChD,gBAAA,MAAMM,KAAKb,SAAS,CAACS,GAAG,GAAGT,SAAS,CAACO,EAAG,CAAA;gBACxC,MAAMO,EAAAA,GAAKd,SAAS,CAACS,EAAAA,GAAK,EAAE,GAAGT,SAAS,CAACO,EAAAA,GAAK,CAAE,CAAA;gBAChD,MAAMQ,EAAAA,GAAKf,SAAS,CAACS,EAAAA,GAAK,EAAE,GAAGT,SAAS,CAACO,EAAAA,GAAK,CAAE,CAAA;gBAChD,MAAMS,EAAAA,GAAKL,EAAKI,GAAAA,EAAAA,GAAKH,EAAKE,GAAAA,EAAAA;gBAC1B,MAAMG,EAAAA,GAAKL,EAAKC,GAAAA,EAAAA,GAAKH,EAAKK,GAAAA,EAAAA;gBAC1B,MAAMG,EAAAA,GAAKR,EAAKI,GAAAA,EAAAA,GAAKH,EAAKE,GAAAA,EAAAA;AAC1B,gBAAA,IAAIG,KAAKA,EAAKC,GAAAA,EAAAA,GAAKA,EAAKC,GAAAA,EAAAA,GAAKA,MAAM,KAAO,EAAA;AACxC,oBAAA;AACF;gBACA,IAAI,CAACC,wBAAwB,CAACpB,IAAAA,EAAMC,WAAWC,cAAgBG,EAAAA,EAAAA,EAAIY,IAAIC,EAAIC,EAAAA,EAAAA,CAAAA;gBAC3E,IAAI,CAACC,wBAAwB,CAACpB,IAAAA,EAAMC,WAAWC,cAAgBI,EAAAA,EAAAA,EAAIW,IAAIC,EAAIC,EAAAA,EAAAA,CAAAA;gBAC3E,IAAI,CAACC,wBAAwB,CAACpB,IAAAA,EAAMC,WAAWC,cAAgBK,EAAAA,EAAAA,EAAIU,IAAIC,EAAIC,EAAAA,EAAAA,CAAAA;AAC7E;AACF;AACA,QAAA,KAAK,MAAM,EAAE5H,SAAS,EAAE,IAAIiD,OAAS,CAAA;AACnC,YAAA,MAAME,YAAenD,GAAAA,SAAAA,CAAUmC,QAAQ,CAAC,UAAW,CAAA;AACnD,YAAA,MAAM2F,UAAa9H,GAAAA,SAAAA,CAAUmC,QAAQ,CAAC,QAAS,CAAA;YAC/C,IAAI,CAACgB,YAAgB,IAAA,CAAC2E,UAAY,EAAA;AAChC,gBAAA;AACF;YACA,MAAMpB,SAAAA,GAAYvD,aAAa1e,IAAI;YACnC,MAAMsjB,OAAAA,GAAUD,WAAWrjB,IAAI;YAC/B,MAAMkiB,cAAAA,GAAiBtD,6BAA8BF,CAAAA,YAAAA,CAAaG,MAAM,CAAA;YACxE,MAAM0E,YAAAA,GAAe3E,6BAA8ByE,CAAAA,UAAAA,CAAWxE,MAAM,CAAA;AACpE,YAAA,MAAMsD,WAAc,GAACF,SAAU5gB,CAAAA,MAAM,GAAG6gB,cAAmB,IAAA,CAAA;YAC3D,MAAMsB,QAAAA,GAAW,IAAIvJ,YAAAA,CAAakI,WAAc,GAAA,CAAA,CAAA;AAChD,YAAA,IAAK,IAAIve,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIue,aAAave,CAAK,EAAA,CAAA;gBACpC,MAAMgI,GAAAA,GAAM,IAAI,CAAC6X,mBAAmB,CAClCxB,SAAS,CAACre,IAAIse,cAAe,CAAA,EAC7BD,SAAS,CAACre,CAAAA,GAAIse,iBAAiB,CAAE,CAAA,EACjCD,SAAS,CAACre,CAAAA,GAAIse,iBAAiB,CAAE,CAAA,CAAA;gBAEnC,MAAMwB,GAAAA,GAAM1B,IAAK9U,CAAAA,GAAG,CAACtB,GAAAA,CAAAA;gBACrB,IAAIqX,EAAAA,GAAKS,MAAM,CAAA,CAAE,IAAIJ,OAAO,CAAC1f,IAAI2f,YAAa,CAAA;gBAC9C,IAAIL,EAAAA,GAAKQ,MAAM,CAAA,CAAE,IAAIJ,OAAO,CAAC1f,CAAI2f,GAAAA,YAAAA,GAAe,CAAE,CAAA;gBAClD,IAAIJ,EAAAA,GAAKO,MAAM,CAAA,CAAE,IAAIJ,OAAO,CAAC1f,CAAI2f,GAAAA,YAAAA,GAAe,CAAE,CAAA;AAClD,gBAAA,MAAMI,GAAMhc,GAAAA,IAAAA,CAAKic,KAAK,CAACX,IAAIC,EAAIC,EAAAA,EAAAA,CAAAA;AAC/B,gBAAA,IAAIQ,MAAM,KAAO,EAAA;oBACfV,EAAMU,IAAAA,GAAAA;oBACNT,EAAMS,IAAAA,GAAAA;oBACNR,EAAMQ,IAAAA,GAAAA;iBACD,MAAA;oBACLV,EAAKK,GAAAA,OAAO,CAAC1f,CAAAA,GAAI2f,YAAa,CAAA;AAC9BL,oBAAAA,EAAAA,GAAKI,OAAO,CAAC1f,CAAI2f,GAAAA,YAAAA,GAAe,CAAE,CAAA;AAClCJ,oBAAAA,EAAAA,GAAKG,OAAO,CAAC1f,CAAI2f,GAAAA,YAAAA,GAAe,CAAE,CAAA;AAClC,oBAAA,MAAMM,WAAclc,GAAAA,IAAAA,CAAKic,KAAK,CAACX,IAAIC,EAAIC,EAAAA,EAAAA,CAAAA;AACvC,oBAAA,IAAIU,cAAc,KAAO,EAAA;wBACvBZ,EAAMY,IAAAA,WAAAA;wBACNX,EAAMW,IAAAA,WAAAA;wBACNV,EAAMU,IAAAA,WAAAA;qBACD,MAAA;wBACLZ,EAAK,GAAA,CAAA;wBACLC,EAAK,GAAA,CAAA;wBACLC,EAAK,GAAA,CAAA;AACP;AACF;gBACAK,QAAQ,CAAC5f,CAAI,GAAA,CAAA,CAAE,GAAGqf,EAAAA;AAClBO,gBAAAA,QAAQ,CAAC5f,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGsf,EAAAA;AACtBM,gBAAAA,QAAQ,CAAC5f,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGuf,EAAAA;AACtBK,gBAAAA,QAAQ,CAAC5f,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACxB;YACA2X,SAAUmC,CAAAA,QAAQ,CAAC,SAAA,CAAU,GAAG;gBAAEmB,MAAQ,EAAA,eAAA;gBAAiB7e,IAAMwjB,EAAAA;AAAS,aAAA;AAC5E;AACF;AACQJ,IAAAA,wBAAAA,CACNpB,IAA2C,EAC3CC,SAAuB,EACvB6B,MAAc,EACdzd,KAAa,EACb+E,CAAS,EACTC,CAAS,EACTC,CAAS,EACT;AACA,QAAA,MAAMxC,SAASzC,KAAQyd,GAAAA,MAAAA;AACvB,QAAA,MAAMlY,MAAM,IAAI,CAAC6X,mBAAmB,CAACxB,SAAS,CAACnZ,MAAAA,CAAO,EAAEmZ,SAAS,CAACnZ,MAAS,GAAA,CAAA,CAAE,EAAEmZ,SAAS,CAACnZ,SAAS,CAAE,CAAA,CAAA;QACpG,MAAM4a,GAAAA,GAAM1B,IAAK9U,CAAAA,GAAG,CAACtB,GAAAA,CAAAA;AACrB,QAAA,IAAI8X,GAAK,EAAA;YACPA,GAAG,CAAC,EAAE,IAAItY,CAAAA;YACVsY,GAAG,CAAC,EAAE,IAAIrY,CAAAA;YACVqY,GAAG,CAAC,EAAE,IAAIpY,CAAAA;SACL,MAAA;YACL0W,IAAK5V,CAAAA,GAAG,CAACR,GAAK,EAAA;AAACR,gBAAAA,CAAAA;AAAGC,gBAAAA,CAAAA;AAAGC,gBAAAA;AAAE,aAAA,CAAA;AACzB;AACF;IACQ8W,mBAAoB7G,CAAAA,SAA6B,EAAE4G,WAAmB,EAAE;QAC9E,IAAI5G,SAAAA,CAAUqC,OAAO,EAAE;AACrB,YAAA,OAAOrC,UAAUqC,OAAO;AAC1B;QACA,MAAMA,OAAAA,GAAU,IAAImG,WAAY5B,CAAAA,WAAAA,CAAAA;AAChC,QAAA,IAAK,IAAIve,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIue,aAAave,CAAK,EAAA,CAAA;YACpCga,OAAO,CAACha,EAAE,GAAGA,CAAAA;AACf;QACA,OAAOga,OAAAA;AACT;AACQ6F,IAAAA,mBAAAA,CAAoBrY,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAE;AAC3D,QAAA,OAAO,GAAG3D,IAAKqc,CAAAA,KAAK,CAAC5Y,CAAI,GAAA,MAAA,CAAA,CAAQ,CAAC,EAAEzD,IAAAA,CAAKqc,KAAK,CAAC3Y,CAAAA,GAAI,QAAQ,CAAC,EAAE1D,KAAKqc,KAAK,CAAC1Y,IAAI,MAAS,CAAA,CAAA,CAAA;AACxF;AACA,qBACA,MAAcmW,aAAAA,CACZxhB,KAAkB,EAClBX,IAAiB,EACjBqhB,YAAsB,EACtBsD,WAAoB,EACpBC,YAAqB,EACrBC,UAAmB,EACnBtD,yBAAkC,EAClC1gB,GAAQ,EACgB;QACxB,MAAMikB,YAAAA,GAAezD,cAAcrc,IAAQ,IAAA,UAAA;AAC3C,QAAA,IAAI+f,aAAyC,GAAA,IAAA;AAC7C,QAAA,IAAIC,oBAAqD,GAAA,IAAA;AACzD,QAAA,IAAIC,oBAAqD,GAAA,IAAA;AACzD,QAAA,MAAMC,SAAiC,GAAA;AACrCL,YAAAA,UAAAA;AACAF,YAAAA,WAAAA;AACAC,YAAAA,YAAAA;YACAO,SAAW,EAAA,CAAA;AACXC,YAAAA,aAAAA,EAAe1b,QAAQC,IAAI,EAAA;YAC3B0b,gBAAkB,EAAA,CAAA;YAClBC,iBAAmB,EAAA;AACrB,SAAA;AACA,QAAA,OAAQjE,YAAckE,EAAAA,SAAAA;YACpB,KAAK,OAAA;AAAS,gBAAA;AACZL,oBAAAA,SAAAA,CAAUK,SAAS,GAAG,OAAA;AACtB,oBAAA;AACF;YACA,KAAK,MAAA;AAAQ,gBAAA;AACXL,oBAAAA,SAAAA,CAAUK,SAAS,GAAG,MAAA;AACtBL,oBAAAA,SAAAA,CAAUM,WAAW,GAAGnE,YAAamE,CAAAA,WAAW,IAAI,GAAA;AACpD,oBAAA;AACF;AACF;AACA,QAAA,IAAInE,cAAcoE,WAAa,EAAA;AAC7BP,YAAAA,SAAAA,CAAUO,WAAW,GAAG,IAAA;AAC1B;QACA,MAAMC,cAAAA,GAAiBrE,cAAc5b,UAAY8c,EAAAA,oBAAAA;AAGjD,QAAA,IACElB,YAAc2D,EAAAA,oBAAAA,IACd3D,YAAc5b,EAAAA,UAAAA,EAAYkgB,uCAC1BD,cACA,EAAA;AACAR,YAAAA,SAAAA,CAAUU,SAAS,GAAGvE,YAAAA,CAAamB,aAAa,GAC5C,MAAM,IAAI,CAACqD,YAAY,CAACllB,OAAOX,IAAMqhB,EAAAA,YAAAA,CAAamB,aAAa,EAAE,OAAO3hB,GACxE6R,CAAAA,GAAAA,SAAAA;AACJwS,YAAAA,SAAAA,CAAUC,SAAS,GAAG9D,YAAamB,CAAAA,aAAa,EAAEpT,KAAS,IAAA,CAAA;AAC3D8V,YAAAA,SAAAA,CAAUY,YAAY,GAAGzE,YAAAA,CAAa0E,gBAAgB,GAClD,MAAM,IAAI,CAACF,YAAY,CAACllB,OAAOX,IAAMqhB,EAAAA,YAAAA,CAAa0E,gBAAgB,EAAE,OAAOllB,GAC3E6R,CAAAA,GAAAA,SAAAA;AACJwS,YAAAA,SAAAA,CAAUI,iBAAiB,GAAGjE,YAAa0E,CAAAA,gBAAgB,EAAEC,QAAY,IAAA,CAAA;AACzEd,YAAAA,SAAAA,CAAUe,WAAW,GAAG5E,YAAAA,CAAa6E,eAAe,GAChD,MAAM,IAAI,CAACL,YAAY,CAACllB,OAAOX,IAAMqhB,EAAAA,YAAAA,CAAa6E,eAAe,EAAE,OAAOrlB,GAC1E6R,CAAAA,GAAAA,SAAAA;AACJwS,YAAAA,SAAAA,CAAUG,gBAAgB,GACxBhE,YAAc5b,EAAAA,UAAAA,EAAY0gB,iCAAiCd,gBAAoB,IAAA,CAAA;YACjFH,SAAUE,CAAAA,aAAa,GAAG/D,YAAAA,CAAa+E,cAAc,GACjD,IAAI1c,OAAAA,CAAQ2X,YAAa+E,CAAAA,cAAc,CACvC1c,GAAAA,OAAAA,CAAQC,IAAI,EAAA;AAClB;AACA,QAAA,IAAI0X,cAAc2D,oBAAsB,EAAA;YACtCA,oBAAuB,GAAA;gBACrBhgB,IAAM8f,EAAAA,YAAAA;gBACNljB,IAAM,EAAA,sBAAA;gBACNykB,GAAK,EAAA,GAAA;gBACLC,MAAQpB,EAAAA;AACV,aAAA;YACAF,oBAAqBuB,CAAAA,OAAO,GAAG,IAAIC,OAAAA,CACjCnF,aAAa2D,oBAAoB,CAACyB,eAAe,IAAI;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA,CAAA;AAEnEzB,YAAAA,oBAAAA,CAAqB0B,QAAQ,GAAGrF,YAAAA,CAAa2D,oBAAoB,CAAC2B,cAAc,IAAI,CAAA;AACpF3B,YAAAA,oBAAAA,CAAqB4B,SAAS,GAAGvF,YAAAA,CAAa2D,oBAAoB,CAAC6B,eAAe,IAAI,CAAA;YACtF7B,oBAAqB8B,CAAAA,UAAU,GAAGzF,YAAa2D,CAAAA,oBAAoB,CAAC+B,gBAAgB,GAChF,MAAM,IAAI,CAAClB,YAAY,CAACllB,KAAAA,EAAOX,MAAMqhB,YAAa2D,CAAAA,oBAAoB,CAAC+B,gBAAgB,EAAE,MAAMlmB,GAC/F6R,CAAAA,GAAAA,SAAAA;YACJsS,oBAAqBgC,CAAAA,WAAW,GAAG3F,YAAa2D,CAAAA,oBAAoB,CAACiC,wBAAwB,GACzF,MAAM,IAAI,CAACpB,YAAY,CACrBllB,KAAAA,EACAX,MACAqhB,YAAa2D,CAAAA,oBAAoB,CAACiC,wBAAwB,EAC1D,OACApmB,GAEF6R,CAAAA,GAAAA,SAAAA;AACJsS,YAAAA,oBAAAA,CAAqBkC,aAAa,GAAG,CAAA;AACrClC,YAAAA,oBAAAA,CAAqBmC,cAAc,GAAG,CAAA;AACxC;AACA,QAAA,IAAIzB,cAAgB,EAAA;YAClB,OAAO,IAAI,CAAC0B,kBAAkB,CAC5BzmB,KAAAA,EACAX,MACA8kB,YACAzD,EAAAA,YAAAA,EACA6D,SACAQ,EAAAA,cAAAA,EACAnE,yBACA1gB,EAAAA,GAAAA,CAAAA;AAEJ;QACA,IAAIwgB,YAAAA,EAAc5b,YAAYkgB,mCAAqC,EAAA;YACjE,MAAM0B,EAAAA,GAAKhG,YAAa5b,CAAAA,UAAU,EAAEkgB,mCAAAA;YACpCV,oBAAuB,GAAA;gBACrBjgB,IAAM8f,EAAAA,YAAAA;gBACNljB,IAAM,EAAA,uBAAA;gBACNykB,GAAK,EAAA,GAAA;gBACLC,MAAQpB,EAAAA;AACV,aAAA;AACAD,YAAAA,oBAAAA,CAAqBsB,OAAO,GAAG,IAAIC,OAAQa,CAAAA,EAAAA,CAAGC,aAAa,IAAI;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA,CAAA;AAC3ErC,YAAAA,oBAAAA,CAAqBsC,QAAQ,GAAG,IAAI7d,OAAQ2d,CAAAA,EAAAA,CAAGG,cAAc,IAAI;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA,CAAA;AAC1EvC,YAAAA,oBAAAA,CAAqBwC,SAAS,GAAGJ,EAAGK,CAAAA,eAAe,IAAI,CAAA;AACvDzC,YAAAA,oBAAAA,CAAqB6B,UAAU,GAAGO,EAAAA,CAAGM,cAAc,GAC/C,MAAM,IAAI,CAAC9B,YAAY,CAACllB,OAAOX,IAAMqnB,EAAAA,EAAAA,CAAGM,cAAc,EAAE,MAAM9mB,GAC9D6R,CAAAA,GAAAA,SAAAA;AACJuS,YAAAA,oBAAAA,CAAqB2C,oBAAoB,GAAGP,EAAAA,CAAGQ,yBAAyB,GACpE,MAAM,IAAI,CAAChC,YAAY,CAACllB,OAAOX,IAAMqnB,EAAAA,EAAAA,CAAGQ,yBAAyB,EAAE,MAAMhnB,GACzE6R,CAAAA,GAAAA,SAAAA;AACN;AACAqS,QAAAA,aAAAA,GAAgBE,oBAAwBD,IAAAA,oBAAAA;AACxC,QAAA,IAAI,CAACD,aAAAA,IAAiB1D,YAAc5b,EAAAA,UAAAA,EAAYqiB,mBAAqB,EAAA;YACnE,IAAIzG,YAAAA,EAAc5b,YAAYqiB,mBAAqB,EAAA;gBACjD/C,aAAgB,GAAA;oBACd/f,IAAM8f,EAAAA,YAAAA;oBACNljB,IAAM,EAAA,OAAA;oBACN0kB,MAAQpB,EAAAA,SAAAA;oBACRqB,OAASvB,EAAAA,oBAAAA,EAAsBuB,OAAWC,IAAAA,OAAAA,CAAQ3M,GAAG,EAAA;AACrDiN,oBAAAA,UAAAA,EAAY9B,sBAAsB8B,UAAc,IAAA;AAClD,iBAAA;aACK,MAAA;gBACL/B,aAAgB,GAAA;oBACd/f,IAAM8f,EAAAA,YAAAA;oBACNljB,IAAM,EAAA,sBAAA;oBACN0kB,MAAQpB,EAAAA,SAAAA;AACRqB,oBAAAA,OAAAA,EAASC,QAAQ3M,GAAG,EAAA;oBACpB6M,QAAU,EAAA,CAAA;oBACVE,SAAW,EAAA,CAAA;oBACXE,UAAYpU,EAAAA,SAAAA;oBACZsU,WAAatU,EAAAA,SAAAA;oBACbwU,aAAe,EAAA,CAAA;oBACfC,cAAgB,EAAA;AAClB,iBAAA;AACF;AACF;AACA,QAAA,IAAIpC,cAAcnjB,IAAI,KAAK,OAAWyf,IAAAA,YAAAA,EAAc5b,YAAYsiB,iBAAmB,EAAA;YAChFhD,aAAyCsB,CAAAA,GAAG,GAAGhF,YAAa5b,CAAAA,UAAU,CAACsiB,iBAAiB,CAAC1B,GAAG,IAAI,GAAA;AACnG;QACA,IAAItB,aAAAA,CAAcnjB,IAAI,KAAK,sBAAwB,EAAA;YACjDojB,oBAAuBD,GAAAA,aAAAA;;AAEvB,YAAA,MAAMiD,mBAAuB3G,GAAAA,YAAAA,EAAc5b,UAAYwiB,EAAAA,sBAAAA,EAAwBD,mBAAuB,IAAA;AACpG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AACP,aAAA;YACDhD,oBAAqBwC,CAAAA,cAAc,GAAG,IAAIhB,OAAAA,CAAAA,GACrCwB,qBACH3G,YAAc5b,EAAAA,UAAAA,EAAYwiB,wBAAwBT,cAAkB,IAAA,CAAA,CAAA;YAEtExC,oBAAqBkD,CAAAA,WAAW,GAAG7G,YAAc5b,EAAAA,UAAAA,EAAYwiB,wBAAwBE,eACjF,GAAA,MAAM,IAAI,CAACtC,YAAY,CACrBllB,KACAX,EAAAA,IAAAA,EACAqhB,aAAa5b,UAAU,CAACwiB,sBAAsB,CAACE,eAAe,EAC9D,KAAA,EACAtnB,GAEF6R,CAAAA,GAAAA,SAAAA;YACJsS,oBAAqBoD,CAAAA,gBAAgB,GAAG/G,YAAc5b,EAAAA,UAAAA,EAAYwiB,wBAC9DI,oBACA,GAAA,MAAM,IAAI,CAACxC,YAAY,CACrBllB,KACAX,EAAAA,IAAAA,EACAqhB,aAAa5b,UAAU,CAACwiB,sBAAsB,CAACI,oBAAoB,EACnE,IAAA,EACAxnB,GAEF6R,CAAAA,GAAAA,SAAAA;;YAEJ,MAAM4V,WAAAA,GAAcjH,cAAc5b,UAAY8iB,EAAAA,yBAAAA;AAC9C,YAAA,IAAID,WAAa,EAAA;AACftD,gBAAAA,oBAAAA,CAAqBsD,WAAW,GAAG;oBACjCE,iBAAmBF,EAAAA,WAAAA,CAAYE,iBAAiB,IAAI,CAAA;AACpDC,oBAAAA,cAAAA,EAAgBH,WAAYI,CAAAA,kBAAkB,GAC1C,MAAM,IAAI,CAAC7C,YAAY,CAACllB,KAAAA,EAAOX,IAAMsoB,EAAAA,WAAAA,CAAYI,kBAAkB,EAAE,OAAO7nB,GAC5E6R,CAAAA,GAAAA,SAAAA;oBACJiW,cAAgBL,EAAAA,WAAAA,CAAYK,cAAc,IAAI,GAAA;oBAC9CC,2BAA6BN,EAAAA,WAAAA,CAAYM,2BAA2B,IAAI,GAAA;oBACxEC,2BAA6BP,EAAAA,WAAAA,CAAYO,2BAA2B,IAAI,GAAA;AACxEC,oBAAAA,uBAAAA,EAAyBR,WAAYS,CAAAA,2BAA2B,GAC5D,MAAM,IAAI,CAAClD,YAAY,CAACllB,KAAAA,EAAOX,IAAMsoB,EAAAA,WAAAA,CAAYS,2BAA2B,EAAE,OAAOloB,GACrF6R,CAAAA,GAAAA;AACN,iBAAA;AACF;;YAEA,MAAMsW,YAAAA,GAAe3H,cAAc5b,UAAYwjB,EAAAA,0BAAAA;AAC/C,YAAA,IAAID,YAAc,EAAA;AAChBhE,gBAAAA,oBAAAA,CAAqBgE,YAAY,GAAG;oBAClCE,kBAAoBF,EAAAA,YAAAA,CAAaE,kBAAkB,IAAI,CAAA;AACvDC,oBAAAA,eAAAA,EAAiBH,YAAaI,CAAAA,mBAAmB,GAC7C,MAAM,IAAI,CAACvD,YAAY,CAACllB,KAAAA,EAAOX,IAAMgpB,EAAAA,YAAAA,CAAaI,mBAAmB,EAAE,OAAOvoB,GAC9E6R,CAAAA,GAAAA,SAAAA;oBACJ2W,eAAiB,EAAA,CAAA;oBACjBC,YAAc5W,EAAAA,SAAAA;oBACd6W,mBAAqB,EAAA,KAAA;AACrBC,oBAAAA,gBAAAA,EAAkB9f,QAAQmQ,GAAG;AAC/B,iBAAA;gBACA,MAAM4P,MAAAA,GAASpI,cAAc5b,UAAYikB,EAAAA,oBAAAA;AACzC,gBAAA,IAAID,MAAQ,EAAA;AACVzE,oBAAAA,oBAAAA,CAAqBgE,YAAY,CAACK,eAAe,GAAGI,MAAAA,CAAOJ,eAAe,IAAI,CAAA;AAC9ErE,oBAAAA,oBAAAA,CAAqBgE,YAAY,CAACM,YAAY,GAAGG,MAAOE,CAAAA,gBAAgB,GACpE,MAAM,IAAI,CAAC9D,YAAY,CAACllB,KAAOX,EAAAA,IAAAA,EAAMypB,OAAOE,gBAAgB,EAAE,OAAO9oB,GACrE6R,CAAAA,GAAAA,SAAAA;AACJsS,oBAAAA,oBAAAA,CAAqBgE,YAAY,CAACO,mBAAmB,GAAGE,MAAAA,CAAOF,mBAAmB,IAAI,KAAA;oBACtF,MAAMC,gBAAAA,GAAoBC,MAAOD,CAAAA,gBAAgB,IAAI;AAAC,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA;AAC9DxE,oBAAAA,oBAAAA,CAAqBgE,YAAY,CAACQ,gBAAgB,GAAG,IAAI9f,OAAW8f,CAAAA,GAAAA,gBAAAA,CAAAA;AACtE;AACF;;YAEA,MAAMI,KAAAA,GAAQvI,cAAc5b,UAAYokB,EAAAA,mBAAAA;AACxC,YAAA,IAAID,KAAO,EAAA;AACT5E,gBAAAA,oBAAAA,CAAqB4E,KAAK,GAAG;AAC3BE,oBAAAA,gBAAAA,EAAkB,IAAIpgB,OAAAA,CAAQkgB,KAAME,CAAAA,gBAAgB,IAAI;AAAC,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA,CAAA;AACjEC,oBAAAA,aAAAA,EAAeH,KAAMI,CAAAA,iBAAiB,GAClC,MAAM,IAAI,CAACnE,YAAY,CAACllB,KAAAA,EAAOX,IAAM4pB,EAAAA,KAAAA,CAAMI,iBAAiB,EAAE,MAAMnpB,GACpE6R,CAAAA,GAAAA,SAAAA;oBACJuX,oBAAsBL,EAAAA,KAAAA,CAAMK,oBAAoB,IAAI,CAAA;AACpDC,oBAAAA,iBAAAA,EAAmBN,KAAMO,CAAAA,qBAAqB,GAC1C,MAAM,IAAI,CAACtE,YAAY,CAACllB,KAAAA,EAAOX,IAAM4pB,EAAAA,KAAAA,CAAMO,qBAAqB,EAAE,MAAMtpB,GACxE6R,CAAAA,GAAAA;AACN,iBAAA;AACF;;YAEA,MAAM0X,EAAAA,GAAK/I,cAAc5b,UAAY4kB,EAAAA,uBAAAA;AACrC,YAAA,IAAID,EAAI,EAAA;AACNpF,gBAAAA,oBAAAA,CAAqBsF,SAAS,GAAG;oBAC/BC,eAAiBH,EAAAA,EAAAA,CAAGI,eAAe,IAAI,CAAA;AACvCC,oBAAAA,qBAAAA,EAAuBL,EAAGM,CAAAA,gBAAgB,GACtC,MAAM,IAAI,CAAC7E,YAAY,CAACllB,KAAAA,EAAOX,IAAMoqB,EAAAA,EAAAA,CAAGM,gBAAgB,EAAE,OAAO7pB,GACjE6R,CAAAA,GAAAA,SAAAA;oBACJiY,wBAA0BP,EAAAA,EAAAA,CAAGQ,wBAAwB,IAAI,CAAA;AACzDC,oBAAAA,qBAAAA,EAAuBT,EAAGU,CAAAA,yBAAyB,GAC/C,MAAM,IAAI,CAACjF,YAAY,CAACllB,KAAAA,EAAOX,IAAMoqB,EAAAA,EAAAA,CAAGU,yBAAyB,EAAE,OAAOjqB,GAC1E6R,CAAAA,GAAAA,SAAAA;AACJqY,oBAAAA,kBAAAA,EAAoBX,EAAGY,CAAAA,sBAAsB,GACzC,MAAM,IAAI,CAACnF,YAAY,CAACllB,KAAAA,EAAOX,IAAMoqB,EAAAA,EAAAA,CAAGY,sBAAsB,EAAE,OAAOnqB,GACvE6R,CAAAA,GAAAA;AACN,iBAAA;AACF;AACF;QACA,OAAOqS,aAAAA;AACT;AACA,qBACA,MAAcqC,kBAAAA,CACZzmB,KAAkB,EAClBX,IAAiB,EACjB8kB,YAAoB,EACpBzD,YAAsB,EACtBiF,MAA2B,EAC3B2E,KAA4B,EAC5B1J,yBAAkC,EAClC1gB,GAAQ,EACyB;AACjC,QAAA,MAAMqqB,MAAM7J,YAAc2D,EAAAA,oBAAAA;AAC1B,QAAA,MAAMmG,aAAwC,GAAA;YAC5CnmB,IAAM8f,EAAAA,YAAAA;YACNljB,IAAM,EAAA,OAAA;AACN0kB,YAAAA,MAAAA;YACAC,OAAS,EAAA,IAAIC,OAAQ0E,CAAAA,GAAAA,EAAKzE,eAAmB,IAAA;AAAC,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA,CAAA;AAAG,gBAAA;AAAE,aAAA,CAAA;AACzDK,YAAAA,UAAAA,EAAYoE,GAAKnE,EAAAA,gBAAAA,GACb,MAAM,IAAI,CAAClB,YAAY,CAACllB,KAAAA,EAAOX,IAAMkrB,EAAAA,GAAAA,CAAInE,gBAAgB,EAAE,MAAMlmB,GACjE6R,CAAAA,GAAAA,SAAAA;AACJ0Y,YAAAA,gBAAAA,EAAkBH,MAAMG,gBAAgB,GAAG,IAAI1hB,OAAQuhB,CAAAA,KAAAA,CAAMG,gBAAgB,CAAI1Y,GAAAA,SAAAA;AACjF2Y,YAAAA,gBAAAA,EAAkBJ,KAAMK,CAAAA,oBAAoB,GACxC,MAAM,IAAI,CAACzF,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAMK,oBAAoB,EAAE,MAAMzqB,GACvE6R,CAAAA,GAAAA,SAAAA;AACJ6Y,YAAAA,kBAAAA,EAAoBN,MAAMM,kBAAkB;AAC5CC,YAAAA,eAAAA,EAAiBP,KAAMQ,CAAAA,mBAAmB,GACtC,MAAM,IAAI,CAAC5F,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAMQ,mBAAmB,EAAE,OAAO5qB,GACvE6R,CAAAA,GAAAA,SAAAA;YACJgZ,wBAA0BT,EAAAA,KAAAA,CAAMQ,mBAAmB,EAAErc,KAAAA;AACrDuc,YAAAA,kBAAAA,EAAoBV,MAAMU,kBAAkB;AAC5CC,YAAAA,oBAAAA,EAAsBX,MAAMW,oBAAoB;AAChDC,YAAAA,YAAAA,EAAcZ,MAAMY,YAAY,GAAG,IAAIniB,OAAQuhB,CAAAA,KAAAA,CAAMY,YAAY,CAAInZ,GAAAA,SAAAA;AACrEoZ,YAAAA,SAAAA,EAAWb,KAAMc,CAAAA,aAAa,GAC1B,MAAM,IAAI,CAAClG,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAMc,aAAa,EAAE,MAAMlrB,GAChE6R,CAAAA,GAAAA,SAAAA;AACJsZ,YAAAA,wBAAAA,EAA0Bf,MAAMe,wBAAwB,GACpD,IAAItiB,OAAQuhB,CAAAA,KAAAA,CAAMe,wBAAwB,CAC1CtZ,GAAAA,SAAAA;AACJuZ,YAAAA,+BAAAA,EAAiChB,MAAMgB,+BAA+B;AACtEC,YAAAA,uBAAAA,EAAyBjB,MAAMiB,uBAAuB;AACtDC,YAAAA,cAAAA,EAAgBlB,KAAMmB,CAAAA,kBAAkB,GACpC,MAAM,IAAI,CAACvG,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAMmB,kBAAkB,EAAE,MAAMvrB,GACrE6R,CAAAA,GAAAA,SAAAA;AACJ2Z,YAAAA,oBAAAA,EAAsBpB,MAAMoB,oBAAoB;AAChDC,YAAAA,gBAAAA,EAAkBrB,MAAMqB,gBAAgB;AACxCC,YAAAA,kBAAAA,EAAoBtB,MAAMsB,kBAAkB;AAC5CC,YAAAA,uBAAAA,EAAyBvB,KAAMwB,CAAAA,2BAA2B,GACtD,MAAM,IAAI,CAAC5G,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAMwB,2BAA2B,EAAE,OAAO5rB,GAC/E6R,CAAAA,GAAAA,SAAAA;AACJga,YAAAA,kBAAAA,EAAoBzB,MAAMyB,kBAAkB,GAAG,IAAIhjB,OAAQuhB,CAAAA,KAAAA,CAAMyB,kBAAkB,CAAIha,GAAAA,SAAAA;AACvFia,YAAAA,wBAAAA,EAA0B1B,MAAM0B,wBAAwB;AACxDpL,YAAAA,yBAAAA;AACAqL,YAAAA,kBAAAA,EAAoB3B,KAAM4B,CAAAA,sBAAsB,GAC5C,MAAM,IAAI,CAAChH,YAAY,CAACllB,KAAAA,EAAOX,IAAMirB,EAAAA,KAAAA,CAAM4B,sBAAsB,EAAE,OAAOhsB,GAC1E6R,CAAAA,GAAAA,SAAAA;AACJoa,YAAAA,6BAAAA,EAA+B7B,MAAM6B,6BAA6B;AAClEC,YAAAA,6BAAAA,EAA+B9B,MAAM8B,6BAA6B;AAClEC,YAAAA,8BAAAA,EAAgC/B,MAAM+B,8BAA8B;AACpEC,YAAAA,qBAAAA,EAAuBhC,MAAMgC,qBAAqB;AAClDC,YAAAA,uBAAAA,EAAyBjC,MAAMiC;AACjC,SAAA;QACA,OAAO/B,aAAAA;AACT;AACA,qBACA,MAActF,YACZllB,CAAAA,KAAkB,EAClBX,IAAiB,EACjB2B,IAA0B,EAC1BwrB,IAAa,EACbtsB,GAAQ,EACmB;AAC3B,QAAA,MAAMusB,EAAuB,GAAA;YAC3BC,KAAO,EAAA,IAAA;YACP9S,OAAS,EAAA,IAAA;YACT+S,QAAU3rB,EAAAA,IAAAA,CAAK2rB,QAAQ,IAAI,CAAA;YAC3BC,SAAW,EAAA;AACb,SAAA;AACA,QAAA,MAAMC,cAAcxtB,IAAKytB,CAAAA,QAAQ,CAAE9rB,IAAAA,CAAKoF,KAAK,CAAE;AAC/C,QAAA,IAAIymB,WAAa,EAAA;YACf,IAAI7rB,IAAAA,CAAK8D,UAAU,EAAEioB,qBAAuB,EAAA;AAC1C,gBAAA,MAAMC,WAAchsB,GAAAA,IAAAA,CAAK8D,UAAU,CAACioB,qBAAqB;gBACzD,IAAIC,WAAAA,CAAYL,QAAQ,KAAK5a,SAAW,EAAA;oBACtC0a,EAAGE,CAAAA,QAAQ,GAAGK,WAAAA,CAAYL,QAAQ;AACpC;AACA,gBAAA,MAAM3T,QACJgU,GAAAA,WAAAA,CAAYhU,QAAQ,KAAKjH,SACrB6B,GAAAA,SAAAA,CAAUqZ,SAAS,CAAC,CAACD,WAAAA,CAAYhU,QAAQ,CAAA,GACzCpF,UAAUvB,QAAQ,EAAA;AACxB,gBAAA,MAAM5D,QACJue,WAAYve,CAAAA,KAAK,KAAKsD,SAClB,GAAA,IAAIhJ,QAAQikB,WAAYve,CAAAA,KAAK,CAAC,CAAE,CAAA,EAAEue,YAAYve,KAAK,CAAC,EAAE,EAAE,CAAA,CAAA,GACxD1F,QAAQmQ,GAAG,EAAA;AACjB,gBAAA,MAAMuD,cACJuQ,WAAYnkB,CAAAA,MAAM,KAAKkJ,SACnB,GAAA,IAAIhJ,QAAQikB,WAAYnkB,CAAAA,MAAM,CAAC,CAAE,CAAA,EAAEmkB,YAAYnkB,MAAM,CAAC,EAAE,EAAE,CAAA,CAAA,GAC1DE,QAAQC,IAAI,EAAA;gBAClByjB,EAAGG,CAAAA,SAAS,GAAGhZ,SAAAA,CAAUqF,OAAO,CAACxK,OAAOye,YAAY,CAAClU,QAAUmU,CAAAA,CAAAA,aAAa,CAAC1Q,WAAAA,CAAAA;AAC/E;AACAgQ,YAAAA,EAAAA,CAAGpoB,IAAI,GAAGwoB,WAAYxoB,CAAAA,IAAI,IAAI0N,SAAAA;AAC9B,YAAA,IAAIqb,KAA4B,GAAA,QAAA;AAChC,YAAA,IAAIC,KAA4B,GAAA,QAAA;AAChC,YAAA,IAAIC,SAA+B,GAAA,QAAA;AACnC,YAAA,IAAIC,SAA+B,GAAA,QAAA;AACnC,YAAA,IAAIC,SAA+B,GAAA,QAAA;YACnC,MAAMC,YAAAA,GAAuBZ,YAAYjT,OAAO;AAChD,YAAA,MAAMA,UAAUva,IAAKka,CAAAA,QAAQ,IAAIla,IAAKka,CAAAA,QAAQ,CAACkU,YAAa,CAAA;AAC5D,YAAA,IAAI7T,OAAS,EAAA;AACX,gBAAA,OAAQA,QAAQwT,KAAK;oBACnB,KAAK,MAAA;wBACHA,KAAQ,GAAA,QAAA;AACR,wBAAA;oBACF,KAAK,MAAA;wBACHA,KAAQ,GAAA,iBAAA;AACR,wBAAA;oBACF,KAAK,MAAA;wBACHA,KAAQ,GAAA,OAAA;AACR,wBAAA;AACJ;AACA,gBAAA,OAAQxT,QAAQyT,KAAK;oBACnB,KAAK,MAAA;wBACHA,KAAQ,GAAA,QAAA;AACR,wBAAA;oBACF,KAAK,MAAA;wBACHA,KAAQ,GAAA,iBAAA;AACR,wBAAA;oBACF,KAAK,MAAA;wBACHA,KAAQ,GAAA,OAAA;AACR,wBAAA;AACJ;AACA,gBAAA,OAAQzT,QAAQ0T,SAAS;oBACvB,KAAK,MAAA;wBACHA,SAAY,GAAA,SAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHA,SAAY,GAAA,QAAA;AACZ,wBAAA;AACJ;AACA,gBAAA,OAAQ1T,QAAQ2T,SAAS;oBACvB,KAAK,MAAA;wBACHA,SAAY,GAAA,SAAA;wBACZC,SAAY,GAAA,MAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHD,SAAY,GAAA,QAAA;wBACZC,SAAY,GAAA,MAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHD,SAAY,GAAA,SAAA;wBACZC,SAAY,GAAA,SAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHD,SAAY,GAAA,QAAA;wBACZC,SAAY,GAAA,SAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHD,SAAY,GAAA,SAAA;wBACZC,SAAY,GAAA,QAAA;AACZ,wBAAA;oBACF,KAAK,MAAA;wBACHD,SAAY,GAAA,QAAA;wBACZC,SAAY,GAAA,QAAA;AACZ,wBAAA;AACJ;AACF;YACA,MAAME,UAAAA,GAAqBb,YAAY/L,MAAM;AAC7C2L,YAAAA,EAAAA,CAAGC,KAAK,GAAG1sB,KAAM2tB,CAAAA,QAAQ,CAACD,UAAAA,CAAAA;YAC1B,IAAI,CAACjB,EAAGC,CAAAA,KAAK,EAAE;AACb,gBAAA,MAAMA,KAAQrtB,GAAAA,IAAAA,CAAKuuB,MAAO,CAACF,UAAW,CAAA;AACtC,gBAAA,IAAIhB,KAAO,EAAA;oBACT,IAAIA,KAAAA,CAAMjqB,GAAG,EAAE;wBACb,MAAMorB,QAAAA,GAAW3tB,GAAI0C,CAAAA,aAAa,CAAC1C,GAAAA,CAAI2C,IAAI,CAACxD,IAAKmD,CAAAA,QAAQ,EAAEkqB,KAAAA,CAAMjqB,GAAG,CAAA,CAAA;AACpEgqB,wBAAAA,EAAAA,CAAGC,KAAK,GAAG;AACTroB,4BAAAA,IAAAA,EAAMqoB,KAAMroB,CAAAA,IAAI,IAAIwoB,WAAAA,CAAYxoB,IAAI,IAAI0N,SAAAA;4BACxCtP,GAAKorB,EAAAA;AACP,yBAAA;qBACK,MAAA,IAAI,OAAOnB,KAAM1O,CAAAA,UAAU,KAAK,QAAY0O,IAAAA,KAAAA,CAAMoB,QAAQ,EAAE;wBACjE,MAAM9P,UAAAA,GAAa3e,KAAK4e,WAAW,IAAI5e,KAAK4e,WAAW,CAACyO,KAAM1O,CAAAA,UAAU,CAAC;AACzE,wBAAA,IAAIA,UAAY,EAAA;4BACd,MAAM5d,WAAAA,GAAcf,KAAKoB,cAAc,IAAIpB,KAAKoB,cAAc,CAACud,UAAW7d,CAAAA,MAAM,CAAC;AACjF,4BAAA,IAAIC,WAAa,EAAA;gCACf,MAAM2tB,IAAAA,GAAO,IAAI5sB,UAAWf,CAAAA,WAAAA,EAAa4d,WAAWI,UAAU,IAAI,CAAGJ,EAAAA,UAAAA,CAAW/a,UAAU,CAAA;gCAC1F,MAAM6qB,QAAAA,GAAWpB,MAAMoB,QAAQ;AAC/BrB,gCAAAA,EAAAA,CAAGC,KAAK,GAAG;AACTroB,oCAAAA,IAAAA,EAAMqoB,KAAMroB,CAAAA,IAAI,IAAIwoB,WAAAA,CAAYxoB,IAAI,IAAI0N,SAAAA;oCACxChS,IAAMguB,EAAAA,IAAAA;AACND,oCAAAA;AACF,iCAAA;AACF;AACF;AACF;AACF;gBACA,IAAIrB,EAAAA,CAAGC,KAAK,EAAE;AACZ1sB,oBAAAA,KAAAA,CAAMguB,QAAQ,CAACN,UAAYjB,EAAAA,EAAAA,CAAGC,KAAK,CAAA;AACrC;AACF;YACA,IAAID,EAAAA,CAAGC,KAAK,EAAE;gBACZD,EAAGD,CAAAA,IAAI,GAAG,CAAC,CAACA,IAAAA;AACZC,gBAAAA,EAAAA,CAAG7S,OAAO,GAAG;AACXwT,oBAAAA,KAAAA;AACAC,oBAAAA,KAAAA;AACAC,oBAAAA,SAAAA;AACAC,oBAAAA,SAAAA;AACAC,oBAAAA;AACF,iBAAA;AACF;AACF;QACA,OAAOf,EAAAA;AACT;AACA,qBACQhM,cAAexf,CAAAA,IAAY,EAAE;QACnC,OAAQA,IAAAA;YACN,KAAK,CAAA;gBACH,OAAO,YAAA;YACT,KAAK,CAAA;gBACH,OAAO,WAAA;AACT;;;AAGA,SACA,KAAK,CAAA;gBACH,OAAO,YAAA;YACT,KAAK,CAAA;gBACH,OAAO,eAAA;YACT,KAAK,CAAA;gBACH,OAAO,gBAAA;YACT,KAAK,CAAA;gBACH,OAAO,cAAA;AACT,YAAA;gBACE,OAAO,IAAA;AACX;AACF;AACA,qBACQsf,gBACNlhB,CAAAA,IAAiB,EACjB8gB,aAAqB,EACrB7E,SAA6B,EAC7B2S,QAA0B,EAC1BnQ,cAAoB,EACpBC,gBAAmC,EACnC;AACA,QAAA,MAAM5a,QAAW9D,GAAAA,IAAAA,CAAK6C,UAAU,CAACie,aAAc,CAAA;AAC/C,QAAA,IAAIpC,gBAAkB,EAAA;YACpB,MAAMJ,OAAAA,GAAUI,iBAAiBmQ,cAAc,EAAA;AAC/C,YAAA,IAAI,CAACvQ,OAAWA,IAAAA,OAAAA,CAAQvc,MAAM,KAAK+B,QAAAA,CAASoE,KAAK,EAAE;AACjD,gBAAA,MAAM,IAAIgM,KAAAA,CAAM,CAAC,0BAA0B,CAAC,CAAA;AAC9C;AACA,YAAA,IAAIoK,OAAQvc,CAAAA,MAAM,KAAK+B,QAAAA,CAASoE,KAAK,EAAE;AACrC,gBAAA,MAAM,IAAIgM,KAAAA,CAAM,CAAC,0BAA0B,CAAC,CAAA;AAC9C;AACAlU,YAAAA,IAAAA,CAAKoB,cAAc,CAAEiB,IAAI,CAACic,QAAQxd,MAAM,CAAA;YACxC,IAAI,CAACd,IAAK4e,CAAAA,WAAW,EAAE;gBACrB5e,IAAK4e,CAAAA,WAAW,GAAG,EAAE;AACvB;YACA5e,IAAK4e,CAAAA,WAAW,CAACvc,IAAI,CAAC;AACpBvB,gBAAAA,MAAAA,EAAQd,IAAKoB,CAAAA,cAAc,CAAEW,MAAM,GAAG,CAAA;gBACtCgd,UAAY,EAAA,CAAA;AACZnb,gBAAAA,UAAAA,EAAY0a,QAAQ1a;AACtB,aAAA,CAAA;YACAE,QAASiQ,CAAAA,aAAa,GAAGC,aAAAA,CAAc8a,IAAI;AAC3ChrB,YAAAA,QAAAA,CAAS6a,UAAU,GAAG3e,IAAAA,CAAK4e,WAAW,CAAC7c,MAAM,GAAG,CAAA;AAClD;AACA,QAAA,IAAI,CAACgtB,UAAU,CAAC/uB,IAAM8gB,EAAAA,aAAAA,EAAe7E,WAAW,IAAM2S,EAAAA,QAAAA,CAAAA;AACxD;AACA,qBACA,iBAAQ3P,CACNjf,IAAiB,EACjBgvB,UAAkB,EAClBlO,aAAqB,EACrB7E,SAA6B,EAC7B8B,WAA6B,EAC7BU,cAAoB,EACpBC,gBAAmC,EACnC;AACA,QAAA,MAAMuQ,OAAUxQ,GAAAA,cAAAA,EAAgBpC,UAAY,GAAC2S,UAAW,CAAA;AACxD,QAAA,IAAIC,YAAYvc,SAAW,EAAA;AACzB,YAAA,MAAM5O,QAAW9D,GAAAA,IAAAA,CAAK6C,UAAU,CAACie,aAAc,CAAA;AAC/C,YAAA,IAAIhgB,MAA+B,GAAA,IAAA;YACnC,MAAMouB,WAAAA,GAAcprB,SAASoE,KAAK,GAAGpE,SAASid,iBAAiB,CAACjd,SAASlC,IAAI,CAAA;AAC7E,YAAA,OAAQkC,SAASiQ,aAAa;AAC5B,gBAAA,KAAKC,cAAcC,KAAK;AACtBnT,oBAAAA,MAAAA,GAAS,IAAI6Z,YAAauU,CAAAA,WAAAA,CAAAA;AAC1B,oBAAA;AACF,gBAAA,KAAKlb,cAAcmb,IAAI;AACrBruB,oBAAAA,MAAAA,GAAS,IAAIge,SAAUoQ,CAAAA,WAAAA,CAAAA;AACvB,oBAAA;AACF,gBAAA,KAAKlb,cAAcob,KAAK;AACtBtuB,oBAAAA,MAAAA,GAAS,IAAIuuB,UAAWH,CAAAA,WAAAA,CAAAA;AACxB,oBAAA;AACF,gBAAA,KAAKlb,cAAcsb,GAAG;AACpBxuB,oBAAAA,MAAAA,GAAS,IAAIyuB,UAAWL,CAAAA,WAAAA,CAAAA;AACxB,oBAAA;AACF,gBAAA,KAAKlb,cAAcwb,KAAK;AACtB1uB,oBAAAA,MAAAA,GAAS,IAAIgB,UAAWotB,CAAAA,WAAAA,CAAAA;AACxB,oBAAA;AACF,gBAAA,KAAKlb,cAAcyb,MAAM;AACvB3uB,oBAAAA,MAAAA,GAAS,IAAI4uB,WAAYR,CAAAA,WAAAA,CAAAA;AACzB,oBAAA;AACF,gBAAA,KAAKlb,cAAc8a,IAAI;AACrBhuB,oBAAAA,MAAAA,GAAS,IAAI2jB,WAAYyK,CAAAA,WAAAA,CAAAA;AACzB,oBAAA;AACF,gBAAA;AACE,oBAAA,MAAM,IAAIhb,KAAM,CAAA,CAAC,wBAAwB,EAAEpQ,QAAAA,CAASiQ,aAAa,CAAE,CAAA,CAAA;AACvE;AACA,YAAA,IAAI,CAAC2K,gBAAAA,CAAkBiR,kBAAkB,CAACV,SAASnuB,MAAS,CAAA,EAAA;AAC1D,gBAAA,MAAM,IAAIoT,KAAAA,CAAM,CAAC,wBAAwB,CAAC,CAAA;AAC5C;AACAlU,YAAAA,IAAAA,CAAKoB,cAAc,CAAEiB,IAAI,CAACvB,OAAOA,MAAM,CAAA;YACvC,IAAI,CAACd,IAAK4e,CAAAA,WAAW,EAAE;gBACrB5e,IAAK4e,CAAAA,WAAW,GAAG,EAAE;AACvB;YACA5e,IAAK4e,CAAAA,WAAW,CAACvc,IAAI,CAAC;AACpBvB,gBAAAA,MAAAA,EAAQd,IAAKoB,CAAAA,cAAc,CAAEW,MAAM,GAAG,CAAA;gBACtCgd,UAAY,EAAA,CAAA;AACZnb,gBAAAA,UAAAA,EAAY9C,OAAO8C;AACrB,aAAA,CAAA;AACAE,YAAAA,QAAAA,CAAS6a,UAAU,GAAG3e,IAAAA,CAAK4e,WAAW,CAAC7c,MAAM,GAAG,CAAA;AAClD;AACA,QAAA,IAAI6tB,QAAqC,GAAA,IAAA;QACzC,OAAQZ,UAAAA;YACN,KAAK,UAAA;gBACHY,QAAW,GAAA,UAAA;AACX,gBAAA;YACF,KAAK,QAAA;gBACHA,QAAW,GAAA,QAAA;AACX,gBAAA;YACF,KAAK,SAAA;gBACHA,QAAW,GAAA,SAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,YAAA;gBACHA,QAAW,GAAA,WAAA;AACX,gBAAA;YACF,KAAK,SAAA;gBACHA,QAAW,GAAA,SAAA;AACX,gBAAA;YACF,KAAK,UAAA;gBACHA,QAAW,GAAA,cAAA;AACX,gBAAA;YACF,KAAK,WAAA;gBACHA,QAAW,GAAA,cAAA;AACX,gBAAA;AACF,YAAA;AACE,gBAAA;AACJ;AAEA,QAAA,IAAI,CAACb,UAAU,CAAC/uB,IAAM8gB,EAAAA,aAAAA,EAAe7E,WAAW2T,QAAU7R,EAAAA,WAAAA,CAAAA;AAC5D;AACA,qBACQgR,UACN/uB,CAAAA,IAAiB,EACjB8gB,aAAqB,EACrB7E,SAA6B,EAC7B2T,QAAkC,EAClC7R,WAA6B,EAC7B;AACA,QAAA,MAAM8R,MAAS1Q,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAMrb,QAAW9D,GAAAA,IAAAA,CAAK6C,UAAU,CAACie,aAAc,CAAA;AAC/C,QAAA,MAAMgP,cAAiBhsB,GAAAA,QAAAA,CAASid,iBAAiB,CAACjd,SAASlC,IAAI,CAAA;QAC/D,IAAIlB,IAAAA,GAAOoD,QAAS2W,CAAAA,6BAA6B,CAACza,IAAAA,CAAAA;AAClD,QAAA,IAAIc,MAA+B,GAAA,IAAA;AACnC,QAAA,IAAIivB,YAA6C,GAAA,IAAA;AACjD,QAAA,IAAIH,QAAY,IAAA,EAAElvB,IAAAA,YAAgBia,YAAW,CAAI,EAAA;AAC/C,YAAA,MAAMqV,SAAY,GAAA,IAAIrV,YAAaja,CAAAA,IAAAA,CAAKqB,MAAM,CAAA;AAC9CiuB,YAAAA,SAAAA,CAAUljB,GAAG,CAACpM,IAAAA,CAAAA;YACdA,IAAOsvB,GAAAA,SAAAA;AACT;AACA,QAAA,IAAI,CAACJ,QAAU,EAAA;AACb,YAAA,IAAI,EAAElvB,IAAgBoB,YAAAA,UAAS,KAAM,EAAEpB,IAAgBgvB,YAAAA,WAAU,CAAM,IAAA,EAAEhvB,IAAAA,YAAgB+jB,WAAU,CAAI,EAAA;AACrG7J,gBAAAA,OAAAA,CAAQC,KAAK,CAAC,qCAAA,CAAA;AACd,gBAAA;AACF;YACA,IAAIna,IAAAA,YAAgB+jB,eAAe,CAACoL,MAAAA,CAAOI,aAAa,EAAGC,CAAAA,QAAQ,CAACC,iBAAiB,EAAE;AACrFvV,gBAAAA,OAAAA,CAAQC,KAAK,CAAC,4CAAA,CAAA;AACd,gBAAA;AACF;AACA,YAAA,IAAIna,gBAAgBoB,UAAY,EAAA;AAC9B,gBAAA,MAAMsuB,UAAa,GAAA,IAAIV,WAAYhvB,CAAAA,IAAAA,CAAKqB,MAAM,CAAA;AAC9CquB,gBAAAA,UAAAA,CAAWtjB,GAAG,CAACpM,IAAAA,CAAAA;gBACfA,IAAO0vB,GAAAA,UAAAA;AACT;AACF;AACA,QAAA,IAAI,CAACR,QAAU,EAAA;YACb9uB,MAASJ,GAAAA,IAAAA;SACJ,MAAA;AACLqvB,YAAAA,YAAAA,GAAeF,MAAOQ,CAAAA,qBAAqB,CAACT,QAAAA,EAAU,KAAOE,EAAAA,cAAAA,CAAAA;YAC7DhvB,MAASJ,GAAAA,IAAAA;AACX;AACA,QAAA,IAAII,MAAQ,EAAA;AACV,YAAA,IAAI,CAAC8uB,QAAU,EAAA;AACb3T,gBAAAA,SAAAA,CAAUqC,OAAO,GAAGxd,MAAAA;gBACpBmb,SAAUoC,CAAAA,UAAU,GAAGvd,MAAAA,CAAOiB,MAAM;aAC/B,MAAA;gBACL,MAAM6tB,QAAAA,GAAWU,oBAAoBC,uBAAwBR,CAAAA,YAAAA,CAAAA,CAAAA;gBAC7D9T,SAAUmC,CAAAA,QAAQ,CAACwR,QAAAA,CAAS,GAAG;oBAAErQ,MAAQwQ,EAAAA,YAAAA;oBAAervB,IAAMI,EAAAA;AAAO,iBAAA;AACrE,gBAAA,IAAI8uB,aAAa,UAAY,EAAA;oBAC3B,IAAI,CAAC3T,SAAUqC,CAAAA,OAAO,EAAE;AACtBrC,wBAAAA,SAAAA,CAAUoC,UAAU,GAAGhW,IAAAA,CAAKmoB,KAAK,CAAC1vB,MAAAA,CAAO8C,UAAU,GAAG,EAAA,CAAA;AACxD;oBACA,MAAMlD,IAAAA,GAAOoD,QAAS2W,CAAAA,6BAA6B,CAACza,IAAAA,CAAAA;AACpD+d,oBAAAA,WAAAA,CAAYE,YAAY,GAAGvd,IAAAA;oBAC3B,MAAM6O,GAAAA,GAAMzL,SAASyL,GAAG;oBACxB,MAAMjH,GAAAA,GAAMxE,SAASwE,GAAG;AACxB,oBAAA,IAAIiH,OAAOjH,GAAK,EAAA;wBACd2T,SAAUuC,CAAAA,MAAM,CAAC1R,GAAG,CAACyC,GAAAA,CAAAA;wBACrB0M,SAAUsC,CAAAA,MAAM,CAACzR,GAAG,CAACxE,GAAAA,CAAAA;qBAChB,MAAA;AACL,wBAAA,MAAMmoB,OAAO,IAAIzP,WAAAA,EAAAA;AACjByP,wBAAAA,IAAAA,CAAKC,WAAW,EAAA;AAChB,wBAAA,IAAK,IAAIpsB,CAAI,GAAA,CAAA,EAAGA,IAAI5D,IAAKqB,CAAAA,MAAM,EAAEuC,CAAK,EAAA,CAAA;AACpC,4BAAA,MAAM0d,IAAI,IAAItY,OAAAA,CACZhJ,IAAI,CAAC4D,CAAAA,GAAIwrB,eAAe,EACxBpvB,IAAI,CAAC4D,CAAAA,GAAIwrB,iBAAiB,CAAE,CAAA,EAC5BpvB,IAAI,CAAC4D,CAAAA,GAAIwrB,iBAAiB,CAAE,CAAA,CAAA;AAE9BW,4BAAAA,IAAAA,CAAKE,MAAM,CAAC3O,CAAAA,CAAAA;AACd;wBACA,IAAIyO,IAAAA,CAAKG,OAAO,EAAI,EAAA;AAClB3U,4BAAAA,SAAAA,CAAUuC,MAAM,CAAC1R,GAAG,CAAC2jB,KAAKI,QAAQ,CAAA;AAClC5U,4BAAAA,SAAAA,CAAUsC,MAAM,CAACzR,GAAG,CAAC2jB,KAAKK,QAAQ,CAAA;AACpC;AACF;iBACK,MAAA,IAAIlB,aAAa,cAAgB,EAAA;AACtC7R,oBAAAA,WAAAA,CAAYG,eAAe,GAAGpa,QAAS2W,CAAAA,6BAA6B,CAACza,IAAAA,CAAAA;iBAChE,MAAA,IAAI4vB,aAAa,cAAgB,EAAA;AACtC7R,oBAAAA,WAAAA,CAAYI,eAAe,GAAGra,QAAS2W,CAAAA,6BAA6B,CAACza,IAAAA,CAAAA;AACvE;AACF;AACF;QACA,OAAOc,MAAAA;AACT;AACA,qBACQE,KAAMN,CAAAA,IAAiB,EAAW;QACxC,IAAIA,IAAAA,CAAKkD,UAAU,GAAG,EAAI,EAAA;AACxB,YAAA,MAAMia,CAAI,GAAA,IAAI4G,WAAY/jB,CAAAA,IAAAA,EAAM,CAAG,EAAA,CAAA,CAAA;AACnC,YAAA,IAAImd,CAAC,CAAC,CAAA,CAAE,KAAK,UAAA,IAAcA,CAAC,CAAC,CAAA,CAAE,KAAK,CAAA,IAAKA,CAAC,CAAC,CAAA,CAAE,KAAKnd,IAAAA,CAAKkD,UAAU,EAAE;gBACjE,OAAO,IAAA;AACT;AACF;QACA,OAAO,KAAA;AACT;AACA,qBACA,eAAQmtB,CACNrwB,IAAiB,EACjB8I,MAAc,EACmC;AACjD,QAAA,MAAMwnB,MAAS,GAAA,IAAIvM,WAAY/jB,CAAAA,IAAAA,EAAM8I,MAAQ,EAAA,CAAA,CAAA;AAC7C,QAAA,MAAMjH,QAAQiH,MAAS,GAAA,CAAA;QACvB,MAAMzH,MAAAA,GAASivB,MAAM,CAAC,CAAE,CAAA;QACxB,MAAMpvB,IAAAA,GAAOovB,MAAM,CAAC,CAAE,CAAA;QACtB,OAAO;AAAEzuB,YAAAA,KAAAA;AAAOR,YAAAA,MAAAA;AAAQH,YAAAA;AAAK,SAAA;AAC/B;AACA,qBACQF,gBAAiBhB,CAAAA,IAAiB,EAAqD;AAC7F,QAAA,MAAMuwB,QAA2D,EAAE;AACnE,QAAA,IAAIznB,MAAS,GAAA,EAAA;QACb,MAAOA,MAAAA,GAAS9I,IAAKkD,CAAAA,UAAU,CAAE;AAC/B,YAAA,MAAMjC,IAAO,GAAA,IAAI,CAACovB,eAAe,CAACrwB,IAAM8I,EAAAA,MAAAA,CAAAA;AACxCynB,YAAAA,KAAAA,CAAM5uB,IAAI,CAACV,IAAAA,CAAAA;YACX6H,MAAU7H,IAAAA,IAAAA,CAAKI,MAAM,GAAG,CAAA;AAC1B;QACA,OAAOkvB,KAAAA;AACT;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"gltf_importer.js","sources":["../../src/gltf/gltf_importer.ts"],"sourcesContent":["import type * as draco3d from 'draco3d';\nimport type { DeepPartial, InterpolationMode, Nullable, TypedArray, VFS } from '@zephyr3d/base';\nimport {\n Vector3,\n Vector4,\n Matrix4x4,\n Quaternion,\n Interpolator,\n InterpolatorScalar,\n ASSERT\n} from '@zephyr3d/base';\nimport { AssetHierarchyNode } from '@zephyr3d/scene';\nimport type {\n AssetJointDynamicsCollider,\n AssetJointDynamicsFlatPlane,\n AssetMeshData,\n AssetAnimationData,\n AssetSubMeshData,\n AssetMaterial,\n AssetUnlitMaterial,\n AssetPBRMaterialMR,\n AssetPBRMaterialSG,\n AssetMaterialCommon,\n AssetPBRMaterialCommon,\n AssetAnimationTrack,\n AssetMorphTargetBinding,\n AssetPrimitiveInfo,\n AssetTextureInfo,\n AssetSpringBoneCollider,\n AssetSpringBoneColliderGroup,\n AssetSpringBoneJoint,\n SharedModel,\n ControllerConfig\n} from '@zephyr3d/scene';\nimport { AssetSkeleton, AssetScene } from '@zephyr3d/scene';\nimport type { HumanoidJointMapping } from '@zephyr3d/scene';\nimport { HumanoidBodyRig, HumanoidHandRig } from '@zephyr3d/scene';\nimport {\n BoundingBox,\n DracoMeshDecoder,\n getEngine,\n MORPH_TARGET_COLOR,\n MORPH_TARGET_NORMAL,\n MORPH_TARGET_POSITION,\n MORPH_TARGET_TANGENT,\n MORPH_TARGET_TEX0,\n MORPH_TARGET_TEX1,\n MORPH_TARGET_TEX2,\n MORPH_TARGET_TEX3\n} from '@zephyr3d/scene';\nimport { ColliderForce, getDevice } from '@zephyr3d/scene';\nimport { ComponentType, GLTFAccessor } from './helpers';\nimport type { VertexAttribFormat } from '@zephyr3d/device';\nimport {\n type VertexSemantic,\n type TextureAddressMode,\n type TextureFilterMode,\n type AbstractDevice,\n getVertexFormatComponentCount,\n getVertexAttribName,\n getVertexAttributeIndex\n} from '@zephyr3d/device';\nimport type {\n AnimationChannel,\n AnimationSampler,\n GlTf,\n Material,\n MeshPrimitive,\n TextureInfo\n} from './gltf_types';\nimport { AbstractModelImporter } from '../importer';\n\ntype SpringBoneJointInfo = {\n node?: unknown;\n hitRadius?: number;\n stiffness?: number;\n gravityPower?: number;\n gravityDir?: unknown;\n dragForce?: number;\n};\n\ntype VRMC0BlendShapeBindInfo = {\n mesh?: unknown;\n index?: unknown;\n weight?: unknown;\n};\n\ntype VRMC0BlendShapeGroupInfo = {\n name?: unknown;\n presetName?: unknown;\n binds?: unknown;\n};\n\ntype VRMC1MorphTargetBindInfo = {\n node?: unknown;\n index?: unknown;\n weight?: unknown;\n};\n\ntype VRMC1ExpressionInfo = {\n isBinary?: unknown;\n morphTargetBinds?: unknown;\n};\n\ntype VRMCMToonTextureInfo = TextureInfo & {\n scale?: number;\n};\n\ntype VRMCMToonOutlineWidthMode = 'none' | 'worldCoordinates' | 'screenCoordinates';\n\ntype VRMCMToonMaterialInfo = {\n transparentWithZWrite?: boolean;\n renderQueueOffsetNumber?: number;\n shadeColorFactor?: number[];\n shadeMultiplyTexture?: TextureInfo;\n shadingShiftFactor?: number;\n shadingShiftTexture?: VRMCMToonTextureInfo;\n shadingToonyFactor?: number;\n giEqualizationFactor?: number;\n matcapFactor?: number[];\n matcapTexture?: TextureInfo;\n parametricRimColorFactor?: number[];\n parametricRimFresnelPowerFactor?: number;\n parametricRimLiftFactor?: number;\n rimMultiplyTexture?: TextureInfo;\n rimLightingMixFactor?: number;\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\n outlineWidthFactor?: number;\n outlineWidthMultiplyTexture?: TextureInfo;\n outlineColorFactor?: number[];\n outlineLightingMixFactor?: number;\n uvAnimationMaskTexture?: TextureInfo;\n uvAnimationScrollXSpeedFactor?: number;\n uvAnimationScrollYSpeedFactor?: number;\n uvAnimationRotationSpeedFactor?: number;\n};\n\ntype GLTFMToonAssetMaterial = AssetUnlitMaterial & {\n shadeColorFactor?: Vector3;\n shadeMultiplyMap?: AssetTextureInfo;\n shadingShiftFactor?: number;\n shadingShiftMap?: AssetTextureInfo;\n shadingShiftTextureScale?: number;\n shadingToonyFactor?: number;\n giEqualizationFactor?: number;\n matcapFactor?: Vector3;\n matcapMap?: AssetTextureInfo;\n parametricRimColorFactor?: Vector3;\n parametricRimFresnelPowerFactor?: number;\n parametricRimLiftFactor?: number;\n rimMultiplyMap?: AssetTextureInfo;\n rimLightingMixFactor?: number;\n outlineWidthMode?: VRMCMToonOutlineWidthMode;\n outlineWidthFactor?: number;\n outlineWidthMultiplyMap?: AssetTextureInfo;\n outlineColorFactor?: Vector3;\n outlineLightingMixFactor?: number;\n outlineUsesTangentNormals?: boolean;\n uvAnimationMaskMap?: AssetTextureInfo;\n uvAnimationScrollXSpeedFactor?: number;\n uvAnimationScrollYSpeedFactor?: number;\n uvAnimationRotationSpeedFactor?: number;\n transparentWithZWrite?: boolean;\n renderQueueOffsetNumber?: number;\n};\n\ntype GLTFLoadedMeshPrimitive = {\n source: MeshPrimitive;\n primitive: AssetPrimitiveInfo;\n subMeshData: AssetSubMeshData;\n materialInfo: Nullable<Material>;\n outlineUsesTangentNormals: boolean;\n};\n\ntype VRMAHumanoidBoneInfo = {\n node?: unknown;\n};\n\ntype VRMAHumanoidInfo = {\n humanBones?: Record<string, VRMAHumanoidBoneInfo>;\n};\n\ntype VRMCVRMAnimationInfo = {\n specVersion?: unknown;\n humanoid?: VRMAHumanoidInfo;\n};\n\nconst VRM_SPRING_BONE_SUBSTEPS = 3;\nconst VRM_GRAVITY_ACCELERATION_SCALE = 3;\nconst VRM_BASE_GRAVITY_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\nconst VRM_GRAVITY_POWER_TO_ACCELERATION = 9.8 * VRM_GRAVITY_ACCELERATION_SCALE;\nconst VRM_STIFFNESS_TO_FRAME_HARDNESS = 0.05;\nconst VRM_DRAGFORCE_SCALE = 0.5;\n\n/** @internal */\nexport interface GLTFContent extends GlTf {\n _loadedBuffers: Nullable<ArrayBuffer[]>;\n _accessors: GLTFAccessor[];\n _nodes: AssetHierarchyNode[];\n _meshes: AssetMeshData[];\n _device: AbstractDevice;\n _dracoModule?: draco3d.DecoderModule;\n}\n\n/**\n * The GLTF/GLB model loader\n * @public\n */\nexport class GLTFImporter extends AbstractModelImporter {\n /** @internal */\n async initDraco3d(gltf: GLTFContent) {\n return new Promise<void>((resolve) => {\n const dracoDecoderModule = (window as any).DracoDecoderModule as draco3d.DracoDecoderModule;\n if (dracoDecoderModule) {\n dracoDecoderModule({\n onModuleLoaded: (module: any) => {\n gltf._dracoModule = module;\n resolve();\n }\n });\n } else {\n resolve();\n }\n });\n }\n async import(data: Blob, model: SharedModel, basePath: string, vfs?: VFS) {\n const buffer = await data.arrayBuffer();\n if (this.isGLB(buffer)) {\n await this.loadBinary(buffer, model, basePath, vfs);\n return;\n }\n const gltf = (await new Response(data).json()) as GLTFContent;\n gltf._loadedBuffers = null;\n await this.loadJson(gltf, model, basePath, vfs);\n }\n /** @internal */\n async loadBinary(buffer: ArrayBuffer, model: SharedModel, basePath: string, vfs?: VFS) {\n const jsonChunkType = 0x4e4f534a;\n const binaryChunkType = 0x004e4942;\n let gltf: Nullable<GLTFContent> = null;\n const buffers: ArrayBuffer[] = [];\n const chunkInfos = this.getGLBChunkInfos(buffer);\n for (const info of chunkInfos) {\n if (info.type === jsonChunkType && !gltf) {\n const jsonSlice = new Uint8Array(buffer, 20, info.length);\n const stringBuffer = new TextDecoder('utf-8').decode(jsonSlice);\n gltf = JSON.parse(stringBuffer);\n } else if (info.type === binaryChunkType) {\n buffers.push(buffer.slice(info.start, info.start + info.length));\n }\n }\n ASSERT(!!gltf, 'Invalid GLTF format');\n gltf._loadedBuffers = buffers;\n await this.loadJson(gltf, model, basePath, vfs);\n }\n /** @internal */\n async loadJson(gltf: GLTFContent, model: SharedModel, basePath: string, vfs?: VFS) {\n vfs = vfs ?? getEngine().VFS;\n // check extensions\n if (\n !gltf._dracoModule &&\n gltf.extensionsRequired &&\n gltf.extensionsRequired.indexOf('KHR_draco_mesh_compression') >= 0\n ) {\n await this.initDraco3d(gltf);\n ASSERT(!!gltf._dracoModule, 'Draco3d is required for loading model');\n }\n gltf._accessors = [];\n gltf._nodes = [];\n gltf._meshes = [];\n // check asset property\n const asset = gltf.asset;\n if (asset) {\n const gltfVersion = asset.version;\n ASSERT(gltfVersion === '2.0', `Invalid GLTF version: ${gltfVersion}`);\n }\n gltf._baseURI = basePath;\n if (!gltf._loadedBuffers) {\n gltf._loadedBuffers = [];\n const buffers = gltf.buffers;\n if (buffers) {\n for (const buffer of buffers) {\n const uri =\n vfs.parseDataURI(buffer.uri!) || vfs.isAbsoluteURL(buffer.uri!)\n ? buffer.uri\n : vfs.normalizePath(vfs.join(gltf._baseURI, buffer.uri!));\n const buf = (await vfs.readFile(uri!, { encoding: 'binary' })) as ArrayBuffer;\n ASSERT(buffer.byteLength === buf.byteLength, 'Invalid GLTF: buffer byte length error.');\n gltf._loadedBuffers.push(buf);\n }\n }\n }\n const accessors = gltf.accessors;\n if (accessors) {\n for (const accessor of gltf.accessors!) {\n gltf._accessors.push(new GLTFAccessor(accessor));\n }\n }\n const scenes = gltf.scenes;\n ASSERT(!!scenes, 'No scenes found in model');\n const sharedModel = model;\n await this._loadMeshes(sharedModel, gltf, vfs);\n this._loadNodes(gltf, sharedModel);\n this._loadSkins(gltf, sharedModel);\n this._loadMorphTargetGroups(gltf, sharedModel);\n for (let i = 0; i < (gltf.nodes?.length ?? 0); i++) {\n if (typeof gltf.nodes![i].skin === 'number' && gltf.nodes![i].skin! >= 0) {\n gltf._nodes[i].skeleton = sharedModel.skeletons[gltf.nodes![i].skin!];\n }\n }\n this._loadSpringBones(gltf, sharedModel);\n this._loadAnimations(gltf, sharedModel);\n for (const scene of scenes) {\n const assetScene = new AssetScene(scene.name);\n for (const node of scene.nodes!) {\n assetScene.rootNodes.push(gltf._nodes[node]);\n }\n sharedModel.scenes.push(assetScene);\n }\n if (typeof gltf.scene === 'number') {\n sharedModel.activeScene = gltf.scene;\n }\n }\n /** @internal */\n private _loadSpringBones(gltf: GLTFContent, model: SharedModel) {\n this._loadVRMC0SpringBones(gltf, model);\n this._loadVRMC1SpringBones(gltf, model);\n this._buildJointDynamicsSpringBones(model);\n }\n\n /** @internal */\n private _loadMorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n model.clearMorphTargetGroups();\n const hasVRMC1 = !!gltf.extensions?.VRMC_vrm;\n const hasVRMC0 = !!gltf.extensions?.VRM;\n if (hasVRMC1) {\n this._loadVRMC1MorphTargetGroups(gltf, model);\n } else if (hasVRMC0) {\n this._loadVRMC0MorphTargetGroups(gltf, model);\n } else {\n model.buildMorphTargetGroupsByName();\n }\n }\n\n private _loadVRMC0MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n const groups = gltf.extensions?.VRM?.blendShapeMaster?.blendShapeGroups;\n if (!Array.isArray(groups)) {\n return;\n }\n for (const value of groups) {\n if (!value || typeof value !== 'object') {\n continue;\n }\n const groupInfo = value as VRMC0BlendShapeGroupInfo;\n const name = this._getVRMC0BlendShapeGroupName(groupInfo);\n if (!name) {\n continue;\n }\n const bindings: AssetMorphTargetBinding[] = [];\n const binds = Array.isArray(groupInfo.binds) ? groupInfo.binds : [];\n for (const bindValue of binds) {\n if (!bindValue || typeof bindValue !== 'object') {\n continue;\n }\n const bindInfo = bindValue as VRMC0BlendShapeBindInfo;\n const meshIndex = typeof bindInfo.mesh === 'number' ? bindInfo.mesh : -1;\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\n const mesh = meshIndex >= 0 ? gltf._meshes[meshIndex] : null;\n if (!mesh) {\n continue;\n }\n const targetName = this._getMorphTargetName(mesh, targetIndex);\n if (!targetName) {\n continue;\n }\n bindings.push({\n mesh,\n targetIndex,\n targetName,\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight / 100 : 1\n });\n }\n model.addMorphTargetGroup({ name, bindings });\n }\n }\n\n private _loadVRMC1MorphTargetGroups(gltf: GLTFContent, model: SharedModel) {\n const expressions = gltf.extensions?.VRMC_vrm?.expressions;\n if (!expressions) {\n return;\n }\n this._loadVRMC1ExpressionMap(gltf, model, expressions.preset);\n this._loadVRMC1ExpressionMap(gltf, model, expressions.custom);\n }\n\n private _loadVRMC1ExpressionMap(gltf: GLTFContent, model: SharedModel, expressionMap: unknown) {\n if (!expressionMap || typeof expressionMap !== 'object') {\n return;\n }\n for (const [name, expressionInfo] of Object.entries(expressionMap)) {\n if (!expressionInfo || typeof expressionInfo !== 'object') {\n continue;\n }\n const expression = expressionInfo as VRMC1ExpressionInfo;\n const bindings: AssetMorphTargetBinding[] = [];\n const morphTargetBinds = Array.isArray(expression.morphTargetBinds) ? expression.morphTargetBinds : [];\n for (const bindValue of morphTargetBinds) {\n if (!bindValue || typeof bindValue !== 'object') {\n continue;\n }\n const bindInfo = bindValue as VRMC1MorphTargetBindInfo;\n const nodeIndex = typeof bindInfo.node === 'number' ? bindInfo.node : -1;\n const targetIndex = typeof bindInfo.index === 'number' ? bindInfo.index : -1;\n const node = nodeIndex >= 0 ? gltf._nodes[nodeIndex] : null;\n const mesh = node?.mesh ?? null;\n if (!node || !mesh) {\n continue;\n }\n const targetName = this._getMorphTargetName(mesh, targetIndex);\n if (!targetName) {\n continue;\n }\n bindings.push({\n node,\n targetIndex,\n targetName,\n weight: typeof bindInfo.weight === 'number' ? bindInfo.weight : 1\n });\n }\n model.addMorphTargetGroup({\n name,\n bindings,\n isBinary: expression.isBinary === true\n });\n }\n }\n\n private _getVRMC0BlendShapeGroupName(groupInfo: VRMC0BlendShapeGroupInfo): Nullable<string> {\n const presetName = typeof groupInfo.presetName === 'string' ? groupInfo.presetName : '';\n if (presetName && presetName.toLowerCase() !== 'unknown') {\n return presetName;\n }\n const name = typeof groupInfo.name === 'string' ? groupInfo.name : '';\n return name || presetName || null;\n }\n\n private _getMorphTargetName(mesh: AssetMeshData, targetIndex: number): Nullable<string> {\n if (targetIndex < 0) {\n return null;\n }\n let count = 0;\n for (const subMesh of mesh.subMeshes) {\n count = Math.max(count, subMesh.numTargets);\n }\n return targetIndex < count ? (mesh.morphNames?.[targetIndex] ?? `Target${targetIndex}`) : null;\n }\n\n private _loadVRMC1SpringBones(gltf: GLTFContent, model: SharedModel) {\n const ext = gltf.extensions?.VRMC_springBone;\n if (!ext) {\n return;\n }\n\n const colliders: Nullable<AssetSpringBoneCollider>[] = [];\n for (let i = 0; i < (ext.colliders ?? []).length; i++) {\n const colliderInfo = ext.colliders[i];\n const node = this._getNode(gltf, colliderInfo.node);\n const extendedShape = colliderInfo.extensions?.VRMC_springBone_extended_collider?.shape;\n if (!node || (!colliderInfo.shape && !extendedShape)) {\n colliders[i] = null;\n continue;\n }\n const sphere = colliderInfo.shape?.sphere;\n const capsule = colliderInfo.shape?.capsule;\n const extendedSphere = extendedShape?.sphere;\n const extendedCapsule = extendedShape?.capsule;\n const extendedPlane = extendedShape?.plane;\n let collider: Nullable<AssetSpringBoneCollider> = null;\n if (sphere) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(sphere.offset, Vector3.zero()),\n radius: sphere.radius ?? 0,\n inside: sphere.inside\n }\n };\n } else if (extendedSphere) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(extendedSphere.offset, Vector3.zero()),\n radius: extendedSphere.radius ?? 0,\n inside: extendedSphere.inside\n }\n };\n } else if (capsule) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'capsule',\n offset: this._arrayToVector3(capsule.offset, Vector3.zero()),\n tail: this._arrayToVector3(capsule.tail, Vector3.zero()),\n radius: capsule.radius ?? 0,\n inside: capsule.inside\n }\n };\n } else if (extendedCapsule) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'capsule',\n offset: this._arrayToVector3(extendedCapsule.offset, Vector3.zero()),\n tail: this._arrayToVector3(extendedCapsule.tail, Vector3.zero()),\n radius: extendedCapsule.radius ?? 0,\n inside: extendedCapsule.inside\n }\n };\n } else if (extendedPlane) {\n collider = {\n name: colliderInfo.name,\n node,\n shape: {\n type: 'plane',\n offset: this._arrayToVector3(extendedPlane.offset, Vector3.zero()),\n normal: this._arrayToVector3(extendedPlane.normal, Vector3.axisPY())\n }\n };\n }\n if (collider) {\n colliders[i] = collider;\n model.springBoneColliders.push(collider);\n } else {\n colliders[i] = null;\n }\n }\n\n const colliderGroups: AssetSpringBoneColliderGroup[] = [];\n for (const groupInfo of ext.colliderGroups ?? []) {\n const group: AssetSpringBoneColliderGroup = {\n name: groupInfo.name,\n colliders: (groupInfo.colliders ?? [])\n .map((ref: unknown) => colliders[this._getIndex(ref, ['collider', 'index'])])\n .filter((collider: Nullable<AssetSpringBoneCollider>): collider is AssetSpringBoneCollider => {\n return !!collider;\n })\n };\n colliderGroups.push(group);\n model.springBoneColliderGroups.push(group);\n }\n\n for (const springInfo of ext.springs ?? []) {\n const joints: AssetSpringBoneJoint[] = [];\n for (const jointRef of springInfo.joints ?? []) {\n const jointInfo = this._getSpringBoneJointInfo(ext, jointRef);\n if (!jointInfo) {\n continue;\n }\n const node = this._getNode(gltf, jointInfo?.node);\n if (!node) {\n continue;\n }\n joints.push({\n node,\n hitRadius: jointInfo.hitRadius ?? 0,\n stiffness: jointInfo.stiffness ?? 0,\n gravityPower: jointInfo.gravityPower ?? 0,\n gravityDir: this._arrayToVector3(jointInfo.gravityDir, new Vector3(0, -1, 0)),\n dragForce: jointInfo.dragForce ?? 0\n });\n }\n model.springBones.push({\n name: springInfo.name,\n center: this._getNode(gltf, springInfo.center)!,\n joints,\n colliderGroups: (springInfo.colliderGroups ?? [])\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\n return !!group;\n })\n });\n }\n }\n\n private _loadVRMC0SpringBones(gltf: GLTFContent, model: SharedModel) {\n const secondaryAnimation = gltf.extensions?.VRM?.secondaryAnimation;\n if (!secondaryAnimation) {\n return;\n }\n\n const colliderGroups: Nullable<AssetSpringBoneColliderGroup>[] = [];\n for (let i = 0; i < (secondaryAnimation.colliderGroups ?? []).length; i++) {\n const groupInfo = secondaryAnimation.colliderGroups[i];\n const node = this._getNode(gltf, groupInfo.node);\n if (!node) {\n colliderGroups[i] = null;\n continue;\n }\n const group: AssetSpringBoneColliderGroup = {\n colliders: []\n };\n for (const colliderInfo of groupInfo.colliders ?? []) {\n const collider: AssetSpringBoneCollider = {\n node,\n shape: {\n type: 'sphere',\n offset: this._arrayToVector3(colliderInfo.offset, Vector3.zero()),\n radius: colliderInfo.radius ?? 0\n }\n };\n group.colliders.push(collider);\n model.springBoneColliders.push(collider);\n }\n colliderGroups[i] = group;\n model.springBoneColliderGroups.push(group);\n }\n\n for (const boneGroupInfo of secondaryAnimation.boneGroups ?? []) {\n const rootBones = (boneGroupInfo.bones ?? [])\n .map((index: number) => this._getNode(gltf, index))\n .filter((node: AssetHierarchyNode) => !!node);\n const joints: AssetSpringBoneJoint[] = rootBones.map((node: AssetHierarchyNode) => ({\n node,\n hitRadius: boneGroupInfo.hitRadius ?? 0,\n stiffness: boneGroupInfo.stiffiness ?? boneGroupInfo.stiffness ?? 0,\n gravityPower: boneGroupInfo.gravityPower ?? 0,\n gravityDir: this._arrayToVector3(boneGroupInfo.gravityDir, new Vector3(0, -1, 0)),\n dragForce: boneGroupInfo.dragForce ?? 0\n }));\n model.springBones.push({\n name: boneGroupInfo.comment,\n center: this._getNode(gltf, boneGroupInfo.center)!,\n joints,\n rootBones,\n colliderGroups: (boneGroupInfo.colliderGroups ?? [])\n .map((ref: unknown) => colliderGroups[this._getIndex(ref, ['colliderGroup', 'index'])])\n .filter((group: Nullable<AssetSpringBoneColliderGroup>): group is AssetSpringBoneColliderGroup => {\n return !!group;\n })\n });\n }\n }\n\n private _getNode(gltf: GLTFContent, index: unknown): Nullable<AssetHierarchyNode> {\n return typeof index === 'number' && index >= 0 ? gltf._nodes[index] : null;\n }\n\n private _arrayToVector3(value: unknown, fallback: Vector3): Vector3 {\n if (Array.isArray(value)) {\n return new Vector3(value[0] ?? fallback.x, value[1] ?? fallback.y, value[2] ?? fallback.z);\n }\n if (value && typeof value === 'object') {\n const obj = value as { x?: unknown; y?: unknown; z?: unknown };\n return new Vector3(\n typeof obj.x === 'number' ? obj.x : fallback.x,\n typeof obj.y === 'number' ? obj.y : fallback.y,\n typeof obj.z === 'number' ? obj.z : fallback.z\n );\n }\n return fallback.clone();\n }\n\n private _getIndex(value: unknown, keys: string[] = ['index']): number {\n if (typeof value === 'number' && value >= 0 && Number.isInteger(value)) {\n return value;\n }\n if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n for (const key of keys) {\n const index = obj[key];\n if (typeof index === 'number' && index >= 0 && Number.isInteger(index)) {\n return index;\n }\n }\n }\n return -1;\n }\n\n private _getSpringBoneJointInfo(\n ext: { joints?: SpringBoneJointInfo[] },\n jointRef: unknown\n ): Nullable<SpringBoneJointInfo> {\n const directIndex = this._getIndex(jointRef);\n if (directIndex >= 0) {\n return ext.joints?.[directIndex] ?? null;\n }\n if (jointRef && typeof jointRef === 'object') {\n const obj = jointRef as SpringBoneJointInfo;\n if (typeof obj.node === 'number') {\n return obj;\n }\n const jointIndex = this._getIndex(jointRef, ['joint', 'index']);\n if (jointIndex >= 0) {\n return ext.joints?.[jointIndex] ?? null;\n }\n }\n return null;\n }\n\n private _buildJointDynamicsSpringBones(model: SharedModel) {\n const colliderMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsCollider>();\n const flatPlaneMap = new Map<AssetSpringBoneCollider, AssetJointDynamicsFlatPlane>();\n const nodeKeys = new Map<AssetHierarchyNode, number>();\n model.nodes.forEach((node, index) => nodeKeys.set(node, index));\n for (const collider of model.springBoneColliders) {\n const converted = this._toJointDynamicsCollider(collider);\n if (converted) {\n colliderMap.set(collider, converted);\n model.jointDynamicsColliders.push(converted);\n continue;\n }\n const flatPlane = this._toJointDynamicsFlatPlane(collider);\n if (flatPlane) {\n flatPlaneMap.set(collider, flatPlane);\n }\n }\n\n for (const spring of model.springBones) {\n const chains = spring.rootBones\n ? this._collectJointDynamicsChainsFromRoots(spring.rootBones)\n : this._collectJointDynamicsChains(spring.joints);\n if (chains.length === 0 || spring.joints.length === 0) {\n continue;\n }\n const colliders: AssetJointDynamicsCollider[] = [];\n const flatPlanes: AssetJointDynamicsFlatPlane[] = [];\n const colliderKeys = new Set<string>();\n const flatPlaneKeys = new Set<string>();\n for (const group of spring.colliderGroups) {\n for (const collider of group.colliders) {\n const converted = colliderMap.get(collider);\n const colliderKey = converted ? this._getJointDynamicsColliderKey(converted, nodeKeys) : '';\n if (converted && !colliderKeys.has(colliderKey)) {\n colliderKeys.add(colliderKey);\n colliders.push(converted);\n }\n const flatPlane = flatPlaneMap.get(collider);\n const flatPlaneKey = flatPlane ? this._getJointDynamicsFlatPlaneKey(flatPlane, nodeKeys) : '';\n if (flatPlane && !flatPlaneKeys.has(flatPlaneKey)) {\n flatPlaneKeys.add(flatPlaneKey);\n flatPlanes.push(flatPlane);\n }\n }\n }\n model.jointDynamicsSpringBones.push({\n name: spring.name,\n center: spring.center,\n chains,\n colliders,\n flatPlanes,\n controllerConfig: this._mapSpringJointsToControllerConfig(spring.joints, chains.length > 1)\n });\n }\n }\n\n private _collectJointDynamicsChains(joints: AssetSpringBoneJoint[]) {\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\n if (joints.length === 0) {\n return chains;\n }\n let chainStart = joints[0].node;\n let chainEnd = joints[0].node;\n for (let i = 1; i < joints.length; i++) {\n const node = joints[i].node;\n if (chainEnd.isParentOf(node)) {\n chainEnd = node;\n continue;\n }\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\n chainStart = node;\n chainEnd = node;\n }\n this._pushJointDynamicsChain(chains, chainStart, chainEnd);\n return chains;\n }\n\n private _collectJointDynamicsChainsFromRoots(rootBones: AssetHierarchyNode[]) {\n const chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[] = [];\n for (const start of rootBones) {\n const end = this._findSingleChildChainEnd(start);\n if (end && end !== start) {\n chains.push({ start, end });\n }\n }\n return chains;\n }\n\n private _pushJointDynamicsChain(\n chains: { start: AssetHierarchyNode; end: AssetHierarchyNode }[],\n start: AssetHierarchyNode,\n end: AssetHierarchyNode\n ) {\n if (start !== end) {\n chains.push({ start, end });\n return;\n }\n const inferredEnd = this._findSingleChildChainEnd(start);\n if (inferredEnd && inferredEnd !== start) {\n chains.push({ start, end: inferredEnd });\n }\n }\n\n private _findSingleChildChainEnd(start: AssetHierarchyNode): Nullable<AssetHierarchyNode> {\n let current = start;\n while (current.children.length > 0) {\n if (current.children.length !== 1) {\n return null;\n }\n current = current.children[0];\n }\n return current;\n }\n\n private _mapSpringJointsToControllerConfig(\n joints: AssetSpringBoneJoint[],\n loop: boolean\n ): DeepPartial<ControllerConfig> {\n let stiffness = 0;\n let dragForce = 0;\n let hitRadius = 0;\n const gravity = new Vector3(0, -VRM_BASE_GRAVITY_ACCELERATION, 0);\n const gravityPower = Vector3.zero();\n for (const joint of joints) {\n stiffness += joint.stiffness;\n dragForce += joint.dragForce;\n hitRadius = Math.max(hitRadius, joint.hitRadius);\n const gravityDir =\n joint.gravityDir.magnitudeSq > 0 ? Vector3.normalize(joint.gravityDir) : new Vector3(0, -1, 0);\n Vector3.add(\n gravityPower,\n Vector3.scale(gravityDir, Math.max(0, joint.gravityPower) * VRM_GRAVITY_POWER_TO_ACCELERATION),\n gravityPower\n );\n }\n const invCount = joints.length > 0 ? 1 / joints.length : 1;\n stiffness *= invCount;\n dragForce *= invCount;\n Vector3.scale(gravityPower, invCount, gravityPower);\n Vector3.add(gravity, gravityPower, gravity);\n const frameHardness = Math.max(0, Math.min(1, stiffness * VRM_STIFFNESS_TO_FRAME_HARDNESS));\n const frameResistance = Math.max(0, Math.min(1, 1 - dragForce * VRM_DRAGFORCE_SCALE));\n return {\n enableBroadPhase: false,\n enableSurfaceCollision: false,\n subSteps: VRM_SPRING_BONE_SUBSTEPS,\n gravity,\n curves: {\n hardness: InterpolatorScalar.constant(\n this._frameRatioToSubstepRatio(frameHardness, VRM_SPRING_BONE_SUBSTEPS)\n ),\n resistance: InterpolatorScalar.constant(\n this._frameRateToSubstepRate(frameResistance, VRM_SPRING_BONE_SUBSTEPS)\n ),\n pointRadius: InterpolatorScalar.constant(Math.max(0, hitRadius)),\n // ── KEY: stiff structural = inextensible fabric ──\n structuralShrinkVertical: InterpolatorScalar.constant(0.95),\n structuralStretchVertical: InterpolatorScalar.constant(0.95),\n structuralShrinkHorizontal: InterpolatorScalar.constant(0.7),\n structuralStretchHorizontal: InterpolatorScalar.constant(0.7),\n // Moderate shear keeps the grid from collapsing diagonally\n shearShrink: InterpolatorScalar.constant(0.025),\n shearStretch: InterpolatorScalar.constant(0.025),\n // ── KEY: very soft bending = cloth folds/drapes freely ──\n bendingShrinkVertical: InterpolatorScalar.constant(0),\n bendingStretchVertical: InterpolatorScalar.constant(0),\n bendingShrinkHorizontal: InterpolatorScalar.constant(0),\n bendingStretchHorizontal: InterpolatorScalar.constant(0)\n },\n constraintOptions: {\n structuralVertical: true,\n structuralHorizontal: true,\n shear: false,\n bendingVertical: true,\n collideStructuralVertical: true,\n collideStructuralHorizontal: true,\n collideShear: true,\n isLoop: loop\n }\n };\n }\n\n private _frameRatioToSubstepRatio(frameRatio: number, subSteps: number): number {\n const ratio = Math.max(0, Math.min(1, frameRatio));\n return 1 - Math.pow(1 - ratio, 1 / Math.max(1, subSteps));\n }\n\n private _frameRateToSubstepRate(frameRate: number, subSteps: number): number {\n const rate = Math.max(0, Math.min(1, frameRate));\n return Math.pow(rate, 1 / Math.max(1, subSteps));\n }\n\n private _getJointDynamicsColliderKey(\n collider: AssetJointDynamicsCollider,\n nodeKeys: Map<AssetHierarchyNode, number>\n ): string {\n const r = collider.collider;\n return [\n this._getAssetNodeKey(collider.node, nodeKeys),\n this._vector3Key(collider.localPosition),\n this._quaternionKey(collider.localRotation),\n this._numberKey(r.radius),\n this._numberKey(r.radiusTailScale),\n this._numberKey(r.height),\n this._numberKey(r.friction),\n r.isInverseCollider ? 1 : 0,\n r.forceType\n ].join('|');\n }\n\n private _getJointDynamicsFlatPlaneKey(\n flatPlane: AssetJointDynamicsFlatPlane,\n nodeKeys: Map<AssetHierarchyNode, number>\n ): string {\n return [\n this._getAssetNodeKey(flatPlane.node, nodeKeys),\n this._vector3Key(flatPlane.position),\n this._vector3Key(flatPlane.up)\n ].join('|');\n }\n\n private _getAssetNodeKey(node: AssetHierarchyNode, nodeKeys: Map<AssetHierarchyNode, number>): number {\n let key = nodeKeys.get(node);\n if (key === undefined) {\n key = nodeKeys.size;\n nodeKeys.set(node, key);\n }\n return key;\n }\n\n private _vector3Key(value: Vector3): string {\n return [value.x, value.y, value.z].map((component) => this._numberKey(component)).join(',');\n }\n\n private _quaternionKey(value: Quaternion): string {\n return [value.x, value.y, value.z, value.w].map((component) => this._numberKey(component)).join(',');\n }\n\n private _numberKey(value: number): string {\n return `${Object.is(value, -0) ? 0 : value}`;\n }\n\n private _toJointDynamicsCollider(collider: AssetSpringBoneCollider): Nullable<AssetJointDynamicsCollider> {\n const shape = collider.shape;\n if (shape.type === 'plane') {\n return null;\n }\n if (shape.type === 'sphere') {\n return {\n name: collider.name,\n node: collider.node,\n localPosition: shape.offset.clone(),\n localRotation: Quaternion.identity(),\n collider: {\n radius: shape.radius,\n radiusTailScale: 1,\n height: 0,\n friction: 0,\n isInverseCollider: shape.inside ?? false,\n forceType: ColliderForce.Off\n }\n };\n }\n const localDirection = Vector3.sub(shape.tail, shape.offset);\n const height = localDirection.magnitude;\n const localRotation =\n height > 0\n ? Quaternion.unitVectorToUnitVector(Vector3.axisPY(), localDirection)\n : Quaternion.identity();\n const localPosition = Vector3.scale(Vector3.add(shape.offset, shape.tail), 0.5);\n return {\n name: collider.name,\n node: collider.node,\n localPosition,\n localRotation,\n collider: {\n radius: shape.radius,\n radiusTailScale: 1,\n height,\n friction: 0,\n isInverseCollider: shape.inside ?? false,\n forceType: ColliderForce.Off\n }\n };\n }\n\n private _toJointDynamicsFlatPlane(\n collider: AssetSpringBoneCollider\n ): Nullable<AssetJointDynamicsFlatPlane> {\n const shape = collider.shape;\n if (shape.type !== 'plane') {\n return null;\n }\n return {\n node: collider.node,\n position: shape.offset.clone(),\n up: shape.normal.magnitudeSq > 0 ? Vector3.normalize(shape.normal) : Vector3.axisPY()\n };\n }\n\n /** @internal */\n private _loadNodes(gltf: GLTFContent, model: SharedModel) {\n if (gltf.nodes) {\n for (let i = 0; i < gltf.nodes.length; i++) {\n this._loadNode(gltf, i, null, model);\n }\n for (const node of gltf._nodes) {\n if (!node.parent) {\n node.computeTransforms(null);\n }\n }\n }\n }\n /** @internal */\n private _loadSkins(gltf: GLTFContent, model: SharedModel) {\n if (gltf.skins) {\n for (let i = 0; i < gltf.skins.length; i++) {\n const skinInfo = gltf.skins[i];\n const skeleton = new AssetSkeleton(skinInfo.name);\n if (typeof skinInfo.skeleton === 'number') {\n skeleton.pivot = gltf._nodes[skinInfo.skeleton];\n }\n const accessor = gltf._accessors[skinInfo.inverseBindMatrices!];\n if (!accessor || accessor.type !== 'MAT4' || accessor.componentType !== ComponentType.FLOAT) {\n throw new Error('Invalid GLTF inverse bind matricies accessor');\n }\n const matrices =\n typeof skinInfo.inverseBindMatrices === 'number'\n ? (accessor.getDeinterlacedView(gltf) as Float32Array)\n : null;\n skinInfo.joints.forEach((joint, index) => {\n const m = index * 16;\n skeleton.addJoint(\n gltf._nodes[joint],\n matrices ? new Matrix4x4(matrices.subarray(m, m + 16)) : Matrix4x4.identity()\n );\n });\n model.addSkeleton(skeleton);\n }\n }\n this._loadVRMAHumanoidSkeleton(gltf, model);\n }\n /** @internal */\n private _loadVRMAHumanoidSkeleton(gltf: GLTFContent, model: SharedModel) {\n const ext = gltf.extensions?.VRMC_vrm_animation as VRMCVRMAnimationInfo | undefined;\n const humanBones = ext?.humanoid?.humanBones;\n if (!humanBones || typeof humanBones !== 'object') {\n return;\n }\n const mapping = this._getVRMAHumanoidMapping(gltf, humanBones);\n const hips = mapping?.body[HumanoidBodyRig.Hips];\n if (!mapping || !hips) {\n return;\n }\n const humanBoneNodes = this._getVRMAHumanoidNodes(mapping);\n if (humanBoneNodes.length === 0) {\n return;\n }\n const existingSkeleton = model.skeletons.find((skeleton) =>\n humanBoneNodes.every((node) => skeleton.joints.indexOf(node) >= 0)\n );\n if (existingSkeleton) {\n this._setAssetSkeletonHumanoidMapping(existingSkeleton, mapping);\n return;\n }\n const root = this._findCommonRoot(humanBoneNodes) ?? hips;\n const jointSet = new Set<AssetHierarchyNode>();\n for (const node of humanBoneNodes) {\n let current: Nullable<AssetHierarchyNode> = node;\n while (current) {\n jointSet.add(current);\n if (current === root) {\n break;\n }\n current = current.parent;\n }\n }\n const skeleton = new AssetSkeleton('VRMC_vrm_animation_humanoid');\n skeleton.pivot = root;\n this._setAssetSkeletonHumanoidMapping(skeleton, mapping);\n for (const joint of this._sortSkeletonJoints(root, jointSet)) {\n skeleton.addJoint(joint, Matrix4x4.identity());\n }\n if (skeleton.joints.length > 0) {\n model.addSkeleton(skeleton);\n }\n }\n\n private _setAssetSkeletonHumanoidMapping(\n skeleton: AssetSkeleton,\n mapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>\n ) {\n (\n skeleton as AssetSkeleton & {\n humanoidJointMapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>;\n }\n ).humanoidJointMapping = mapping;\n }\n\n private _getVRMAHumanoidMapping(\n gltf: GLTFContent,\n humanBones: Record<string, VRMAHumanoidBoneInfo>\n ): Nullable<HumanoidJointMapping<AssetHierarchyNode>> {\n const body = {} as Partial<Record<HumanoidBodyRig, AssetHierarchyNode>>;\n const leftHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\n const rightHand = {} as Partial<Record<HumanoidHandRig, AssetHierarchyNode>>;\n const setBody = (vrmaName: string, rig: HumanoidBodyRig) => {\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\n if (node) {\n body[rig] = node;\n }\n };\n const setHand = (side: 'left' | 'right', vrmaName: string, rig: HumanoidHandRig) => {\n const node = this._getVRMAHumanBoneNode(gltf, humanBones, vrmaName);\n if (node) {\n (side === 'left' ? leftHand : rightHand)[rig] = node;\n }\n };\n setBody('hips', HumanoidBodyRig.Hips);\n setBody('spine', HumanoidBodyRig.Spine);\n setBody('chest', HumanoidBodyRig.Chest);\n setBody('upperChest', HumanoidBodyRig.UpperChest);\n setBody('neck', HumanoidBodyRig.Neck);\n setBody('head', HumanoidBodyRig.Head);\n setBody('leftShoulder', HumanoidBodyRig.LeftShoulder);\n setBody('leftUpperArm', HumanoidBodyRig.LeftUpperArm);\n setBody('leftLowerArm', HumanoidBodyRig.LeftLowerArm);\n setBody('leftHand', HumanoidBodyRig.LeftHand);\n setBody('rightShoulder', HumanoidBodyRig.RightShoulder);\n setBody('rightUpperArm', HumanoidBodyRig.RightUpperArm);\n setBody('rightLowerArm', HumanoidBodyRig.RightLowerArm);\n setBody('rightHand', HumanoidBodyRig.RightHand);\n setBody('leftUpperLeg', HumanoidBodyRig.LeftUpperLeg);\n setBody('leftLowerLeg', HumanoidBodyRig.LeftLowerLeg);\n setBody('leftFoot', HumanoidBodyRig.LeftFoot);\n setBody('leftToes', HumanoidBodyRig.LeftToes);\n setBody('rightUpperLeg', HumanoidBodyRig.RightUpperLeg);\n setBody('rightLowerLeg', HumanoidBodyRig.RightLowerLeg);\n setBody('rightFoot', HumanoidBodyRig.RightFoot);\n setBody('rightToes', HumanoidBodyRig.RightToes);\n setHand('left', 'leftThumbMetacarpal', HumanoidHandRig.ThumbProximal);\n setHand('left', 'leftThumbProximal', HumanoidHandRig.ThumbIntermediate);\n setHand('left', 'leftThumbDistal', HumanoidHandRig.ThumbDistal);\n setHand('left', 'leftIndexProximal', HumanoidHandRig.IndexProximal);\n setHand('left', 'leftIndexIntermediate', HumanoidHandRig.IndexIntermediate);\n setHand('left', 'leftIndexDistal', HumanoidHandRig.IndexDistal);\n setHand('left', 'leftMiddleProximal', HumanoidHandRig.MiddleProximal);\n setHand('left', 'leftMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\n setHand('left', 'leftMiddleDistal', HumanoidHandRig.MiddleDistal);\n setHand('left', 'leftRingProximal', HumanoidHandRig.RingProximal);\n setHand('left', 'leftRingIntermediate', HumanoidHandRig.RingIntermediate);\n setHand('left', 'leftRingDistal', HumanoidHandRig.RingDistal);\n setHand('left', 'leftLittleProximal', HumanoidHandRig.PinkyProximal);\n setHand('left', 'leftLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\n setHand('left', 'leftLittleDistal', HumanoidHandRig.PinkyDistal);\n setHand('right', 'rightThumbMetacarpal', HumanoidHandRig.ThumbProximal);\n setHand('right', 'rightThumbProximal', HumanoidHandRig.ThumbIntermediate);\n setHand('right', 'rightThumbDistal', HumanoidHandRig.ThumbDistal);\n setHand('right', 'rightIndexProximal', HumanoidHandRig.IndexProximal);\n setHand('right', 'rightIndexIntermediate', HumanoidHandRig.IndexIntermediate);\n setHand('right', 'rightIndexDistal', HumanoidHandRig.IndexDistal);\n setHand('right', 'rightMiddleProximal', HumanoidHandRig.MiddleProximal);\n setHand('right', 'rightMiddleIntermediate', HumanoidHandRig.MiddleIntermediate);\n setHand('right', 'rightMiddleDistal', HumanoidHandRig.MiddleDistal);\n setHand('right', 'rightRingProximal', HumanoidHandRig.RingProximal);\n setHand('right', 'rightRingIntermediate', HumanoidHandRig.RingIntermediate);\n setHand('right', 'rightRingDistal', HumanoidHandRig.RingDistal);\n setHand('right', 'rightLittleProximal', HumanoidHandRig.PinkyProximal);\n setHand('right', 'rightLittleIntermediate', HumanoidHandRig.PinkyIntermediate);\n setHand('right', 'rightLittleDistal', HumanoidHandRig.PinkyDistal);\n if (!body[HumanoidBodyRig.Hips]) {\n return null;\n }\n const result: HumanoidJointMapping<AssetHierarchyNode> = {\n body: body as Record<HumanoidBodyRig, AssetHierarchyNode>\n };\n if (Object.keys(leftHand).length > 0) {\n result.leftHand = leftHand as Record<HumanoidHandRig, AssetHierarchyNode>;\n }\n if (Object.keys(rightHand).length > 0) {\n result.rightHand = rightHand as Record<HumanoidHandRig, AssetHierarchyNode>;\n }\n return result;\n }\n\n private _getVRMAHumanBoneNode(\n gltf: GLTFContent,\n humanBones: Record<string, VRMAHumanoidBoneInfo>,\n boneName: string\n ): Nullable<AssetHierarchyNode> {\n const nodeIndex = humanBones[boneName]?.node;\n return this._getNode(gltf, nodeIndex);\n }\n\n private _getVRMAHumanoidNodes(mapping: HumanoidJointMapping<AssetHierarchyNode>): AssetHierarchyNode[] {\n const nodes: AssetHierarchyNode[] = [];\n const addMappedNodes = <T extends string>(mapped: Record<T, AssetHierarchyNode> | undefined) => {\n if (!mapped) {\n return;\n }\n for (const node of Object.values(mapped) as AssetHierarchyNode[]) {\n if (node && nodes.indexOf(node) < 0) {\n nodes.push(node);\n }\n }\n };\n addMappedNodes(mapping.body);\n addMappedNodes(mapping.leftHand);\n addMappedNodes(mapping.rightHand);\n return nodes;\n }\n\n private _findCommonRoot(nodes: AssetHierarchyNode[]): Nullable<AssetHierarchyNode> {\n let root: Nullable<AssetHierarchyNode> = nodes[0] ?? null;\n for (let i = 1; root && i < nodes.length; i++) {\n while (root && !root.isParentOf(nodes[i])) {\n root = root.parent;\n }\n }\n return root;\n }\n\n private _sortSkeletonJoints(root: AssetHierarchyNode, joints: Set<AssetHierarchyNode>) {\n const sorted: AssetHierarchyNode[] = [];\n const visit = (node: AssetHierarchyNode) => {\n if (joints.has(node)) {\n sorted.push(node);\n }\n for (const child of node.children) {\n visit(child);\n }\n };\n visit(root);\n for (const joint of joints) {\n if (sorted.indexOf(joint) < 0) {\n sorted.push(joint);\n }\n }\n return sorted;\n }\n /** @internal */\n private _loadAnimations(gltf: GLTFContent, model: SharedModel) {\n if (gltf.animations) {\n for (let i = 0; i < gltf.animations.length; i++) {\n const animation = this._loadAnimation(gltf, i);\n model.addAnimation(animation);\n }\n }\n }\n /** @internal */\n private collectNodes(gltf: GLTFContent) {\n const collect: Map<\n AssetHierarchyNode,\n {\n translate: Vector3;\n scale: Vector3;\n rotation: Quaternion;\n worldTransform: Nullable<Matrix4x4>;\n }\n > = new Map();\n for (const node of gltf._nodes) {\n collect.set(node, {\n translate: node.position || Vector3.zero(),\n rotation: node.rotation || Quaternion.identity(),\n scale: node.scaling || Vector3.one(),\n worldTransform: null\n });\n }\n return collect;\n }\n /** @internal */\n private getAnimationInfo(\n gltf: GLTFContent,\n index: number\n ): {\n name: string;\n channels: AnimationChannel[];\n samplers: AnimationSampler[];\n interpolatorTypes: Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\n interpolators: Nullable<Interpolator>[];\n maxTime: number;\n nodes: Map<\n AssetHierarchyNode,\n {\n translate: Vector3;\n scale: Vector3;\n rotation: Quaternion;\n worldTransform: Nullable<Matrix4x4>;\n }\n >;\n } {\n const animationInfo = gltf.animations![index];\n const name = animationInfo.name || null;\n const channels = animationInfo.channels;\n const samplers = animationInfo.samplers;\n const interpolators = [] as Nullable<Interpolator>[];\n const interpolatorTypes = [] as Nullable<'translation' | 'scale' | 'rotation' | 'weights'>[];\n const nodes = this.collectNodes(gltf);\n let maxTime = 0;\n for (let i = 0; i < channels.length; i++) {\n const channel = channels[i];\n const sampler = samplers[channel.sampler];\n if (!sampler) {\n interpolators.push(null);\n interpolatorTypes.push(null);\n continue;\n }\n const input = gltf._accessors[sampler.input].getNormalizedDeinterlacedView(gltf);\n const output = gltf._accessors[sampler.output].getNormalizedDeinterlacedView(gltf);\n if (!(input instanceof Float32Array) || !(output instanceof Float32Array)) {\n console.error('Input/output channel of animation must be Float32Array');\n interpolators.push(null);\n interpolatorTypes.push(null);\n continue;\n }\n const mode: InterpolationMode =\n sampler.interpolation === 'STEP'\n ? 'step'\n : sampler.interpolation === 'CUBICSPLINE'\n ? 'cubicspline'\n : 'linear';\n let interpolator: Nullable<Interpolator> = null;\n let interpolatorType: Nullable<'translation' | 'scale' | 'rotation' | 'weights'> = null;\n if (channel.target.path === 'rotation') {\n interpolator = new Interpolator(mode, 'quat', input, output);\n interpolatorType = 'rotation';\n } else if (channel.target.path === 'translation') {\n interpolator = new Interpolator(mode, 'vec3', input, output);\n interpolatorType = 'translation';\n } else if (channel.target.path === 'scale') {\n interpolator = new Interpolator(mode, 'vec3', input, output);\n interpolatorType = 'scale';\n } else if (channel.target.path === 'weights') {\n interpolator = new Interpolator(mode, null, input, output);\n interpolatorType = 'weights';\n }\n interpolators.push(interpolator);\n interpolatorTypes.push(interpolatorType);\n if (interpolator) {\n const max = input[input.length - 1];\n if (max > maxTime) {\n maxTime = max;\n }\n }\n }\n return { name, channels, samplers, interpolators, interpolatorTypes, maxTime, nodes };\n }\n /** @internal */\n private _loadAnimation(gltf: GLTFContent, index: number): AssetAnimationData {\n const animationInfo = this.getAnimationInfo(gltf, index);\n const animationData: AssetAnimationData = {\n name: animationInfo.name,\n tracks: [],\n skeletons: [],\n nodes: []\n };\n for (let i = 0; i < animationInfo.channels.length; i++) {\n const interpolator = animationInfo.interpolators[i];\n const interpolatorType = animationInfo.interpolatorTypes[i];\n const targetNodeIndex = animationInfo.channels[i].target.node;\n if (!interpolator || !interpolatorType || typeof targetNodeIndex !== 'number') {\n continue;\n }\n const targetNode = gltf._nodes[targetNodeIndex];\n if (!targetNode) {\n continue;\n }\n const track: AssetAnimationTrack = {\n node: targetNode,\n type: interpolatorType,\n interpolator\n };\n if (track.type === 'weights') {\n track.defaultMorphWeights = targetNode.weights!;\n }\n animationData.tracks.push(track);\n if (animationData.nodes.indexOf(targetNode) < 0) {\n animationData.nodes.push(targetNode);\n }\n if (targetNode.skeletonAttached) {\n for (const skeleton of targetNode.skeletonAttached) {\n if (animationData.skeletons.indexOf(skeleton) < 0) {\n animationData.skeletons.push(skeleton);\n }\n }\n }\n }\n return animationData;\n }\n /** @internal */\n private _loadNode(\n gltf: GLTFContent,\n nodeIndex: number,\n parent: Nullable<AssetHierarchyNode>,\n model: SharedModel\n ): AssetHierarchyNode {\n let node: AssetHierarchyNode = gltf._nodes[nodeIndex];\n if (node) {\n if (parent) {\n if (node.parent) {\n throw new Error('invalid node hierarchy');\n }\n parent.addChild(node);\n }\n return node;\n }\n const nodeInfo = gltf.nodes?.[nodeIndex];\n if (nodeInfo) {\n node = new AssetHierarchyNode(nodeInfo.name, model, parent!); //model.addNode(parent, nodeInfo.name);\n node.weights = nodeInfo.weights ?? null;\n if (typeof nodeInfo.mesh === 'number') {\n node.mesh = gltf._meshes[nodeInfo.mesh];\n if (node.mesh && nodeInfo.name) {\n const subMeshCount = node.mesh.subMeshes.length;\n for (let i = 0; i < subMeshCount; i++) {\n const primitive = node.mesh.subMeshes[i]?.primitive;\n if (primitive) {\n primitive.name = subMeshCount > 1 ? `${nodeInfo.name}_${i}` : nodeInfo.name;\n }\n }\n }\n if (!node.mesh.morphNames && nodeInfo.extras?.targetNames) {\n node.mesh.morphNames = nodeInfo.extras.targetNames;\n }\n const instancing = nodeInfo.extensions?.['EXT_mesh_gpu_instancing'];\n if (instancing) {\n const attributes = instancing.attributes;\n if (attributes) {\n const accessorTranslation =\n typeof attributes.TRANSLATION === 'number' ? gltf._accessors[attributes.TRANSLATION] : null;\n const accessorScale =\n typeof attributes.SCALE === 'number' ? gltf._accessors[attributes.SCALE] : null;\n const accessorRotation =\n typeof attributes.ROTATION === 'number' ? gltf._accessors[attributes.ROTATION] : null;\n const count = accessorTranslation?.count ?? accessorScale?.count ?? accessorRotation?.count ?? 0;\n const translationValues = accessorTranslation?.getNormalizedDeinterlacedView(\n gltf\n ) as Float32Array;\n const scaleValues = accessorScale?.getNormalizedDeinterlacedView(gltf) as Float32Array;\n const rotationValues = accessorRotation?.getNormalizedDeinterlacedView(gltf) as Float32Array;\n for (let i = 0; i < count; i++) {\n const t = translationValues\n ? new Vector3(\n translationValues[i * 3],\n translationValues[i * 3 + 1],\n translationValues[i * 3 + 2]\n )\n : Vector3.zero();\n const s = scaleValues\n ? new Vector3(scaleValues[i * 3], scaleValues[i * 3 + 1], scaleValues[i * 3 + 2])\n : Vector3.one();\n const r = rotationValues\n ? new Quaternion(\n rotationValues[i * 4],\n rotationValues[i * 4 + 1],\n rotationValues[i * 4 + 2],\n rotationValues[i * 4 + 3]\n )\n : Quaternion.identity();\n node.instances.push({ t, s, r });\n }\n }\n } else {\n node.instances.push({ t: Vector3.zero(), s: Vector3.one(), r: Quaternion.identity() });\n }\n }\n if (!(typeof nodeInfo.skin === 'number') || nodeInfo.skin < 0) {\n // GLTF spec: Only the joint transforms are applied to the skinned mesh; the transform of the skinned mesh node MUST be ignored.\n if (nodeInfo.matrix) {\n const matrix = new Matrix4x4(nodeInfo.matrix);\n matrix.decompose(node.scaling, node.rotation, node.position);\n } else {\n if (nodeInfo.rotation) {\n node.rotation.set(nodeInfo.rotation);\n }\n if (nodeInfo.scale) {\n node.scaling.set(nodeInfo.scale);\n }\n if (nodeInfo.translation) {\n node.position.set(nodeInfo.translation);\n }\n }\n }\n gltf._nodes[nodeIndex] = node;\n if (nodeInfo.children) {\n for (const childIndex of nodeInfo.children) {\n this._loadNode(gltf, childIndex, node, model);\n }\n }\n } else {\n throw new Error(`invalid GLTF node: ${nodeIndex}`);\n }\n return node;\n }\n /** @internal */\n private async _loadMeshes(model: SharedModel, gltf: GLTFContent, vfs: VFS) {\n if (gltf.meshes) {\n for (let i = 0; i < gltf.meshes.length; i++) {\n gltf._meshes[i] = (await this._loadMesh(model, gltf, i, vfs))!;\n }\n }\n }\n /** @internal */\n private async _loadMesh(model: SharedModel, gltf: GLTFContent, meshIndex: number, vfs: VFS) {\n const meshInfo = gltf.meshes && gltf.meshes[meshIndex];\n let mesh: Nullable<AssetMeshData> = null;\n if (meshInfo) {\n mesh = {\n morphWeights: meshInfo.weights ?? undefined,\n morphNames: meshInfo['extras']?.targetNames ?? null,\n subMeshes: []\n };\n const primitives = meshInfo.primitives;\n const meshName = meshInfo.name || null;\n if (primitives) {\n const loadedPrimitives: GLTFLoadedMeshPrimitive[] = [];\n for (let i = 0; i < primitives.length; i++) {\n const p = primitives[i];\n const subMeshName = meshName\n ? primitives.length > 1\n ? `${meshName}_${i}`\n : meshName\n : `mesh_${meshIndex}_${i}`;\n const subMeshData: AssetSubMeshData = {\n name: subMeshName,\n primitive: null,\n material: null,\n rawPositions: null,\n rawBlendIndices: null,\n rawJointWeights: null,\n numTargets: 0\n };\n const primitive: AssetPrimitiveInfo = {\n name: subMeshName,\n vertices: {} as any,\n type: 'triangle-list',\n indexCount: 0,\n indices: null,\n boxMax: Vector3.zero(),\n boxMin: Vector3.zero()\n };\n const attributes = p.attributes;\n const dracoExtension = gltf._dracoModule ? p.extensions?.['KHR_draco_mesh_compression'] : null;\n let dracoMeshDecoder: Nullable<DracoMeshDecoder> = null;\n if (dracoExtension) {\n const bufferView = gltf.bufferViews && gltf.bufferViews[dracoExtension.bufferView];\n if (!bufferView) {\n throw new Error('Draco buffer view not set');\n }\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\n if (!arrayBuffer) {\n throw new Error('Draco buffer view does not point to a valid ArrayBuffer');\n }\n dracoMeshDecoder = new DracoMeshDecoder(\n new Int8Array(arrayBuffer, bufferView.byteOffset ?? 0, bufferView.byteLength),\n gltf._dracoModule!\n );\n }\n for (const attrib in attributes) {\n this._loadVertexBuffer(\n gltf,\n attrib,\n attributes[attrib],\n primitive,\n subMeshData,\n dracoExtension,\n dracoMeshDecoder!\n );\n }\n if (p.targets) {\n if (getDevice().type === 'webgl') {\n // Emulate vertexID for WebGL1 device\n if (attributes['TEXCOORD_7'] !== undefined) {\n console.error(`Could not load morph target animation`);\n p.targets = undefined;\n } else {\n const positionInfo = primitive.vertices['position'];\n const numVertices = positionInfo\n ? (positionInfo.data.length / getVertexFormatComponentCount(positionInfo.format)) >> 0\n : 0;\n const vertexIndices = new Float32Array(numVertices);\n for (let i = 0; i < vertexIndices.length; i++) {\n vertexIndices[i] = i;\n }\n primitive.vertices['texCoord7'] = { format: 'tex7_f32', data: vertexIndices };\n }\n }\n }\n if (p.targets) {\n const targets: AssetSubMeshData['targets'] = {};\n const targetBox: AssetSubMeshData['targetBox'] = [];\n const targetMap = {\n POSITION: MORPH_TARGET_POSITION,\n NORMAL: MORPH_TARGET_NORMAL,\n TANGENT: MORPH_TARGET_TANGENT,\n TEXCOORD_0: MORPH_TARGET_TEX0,\n TEXCOORD_1: MORPH_TARGET_TEX1,\n TEXCOORD_2: MORPH_TARGET_TEX2,\n TEXCOORD_3: MORPH_TARGET_TEX3,\n COLOR_0: MORPH_TARGET_COLOR\n };\n const morphAttribSet = new Set<number>();\n for (const target of p.targets) {\n for (const k in target) {\n const t = targetMap[k as keyof typeof targetMap];\n if (t !== undefined) {\n targets[t] = targets[t] ?? { numComponents: 0, data: [] };\n const accessorIndex = target[k] as number;\n const accessor = gltf._accessors[accessorIndex];\n targets[t].numComponents = accessor.getComponentCount(accessor.type);\n targets[t].data.push(accessor.getNormalizedDeinterlacedView(gltf) as Float32Array);\n if (k === 'POSITION') {\n const min = accessor.min\n ? new Vector3(accessor.min[0], accessor.min[1], accessor.min[2])\n : Vector3.zero();\n const max = accessor.max\n ? new Vector3(accessor.max[0], accessor.max[1], accessor.max[2])\n : Vector3.zero();\n targetBox.push(new BoundingBox(min, max));\n }\n morphAttribSet.add(t);\n }\n }\n }\n subMeshData.numTargets = p.targets.length;\n subMeshData.targets = targets;\n subMeshData.targetBox = targetBox;\n subMeshData.morphAttribCount = morphAttribSet.size;\n }\n const indices = p.indices;\n if (typeof indices === 'number') {\n this._loadIndexBuffer(gltf, indices, primitive, subMeshData, dracoExtension, dracoMeshDecoder!);\n }\n let primitiveType = p.mode;\n if (typeof primitiveType !== 'number') {\n primitiveType = 4;\n }\n primitive.type = this._primitiveType(primitiveType)!;\n const materialInfo = p.material !== undefined ? gltf.materials![p.material] : null;\n const outlineUsesTangentNormals = this._shouldGenerateMToonOutlineNormals(\n materialInfo,\n p,\n primitive\n );\n loadedPrimitives.push({\n source: p,\n primitive,\n subMeshData,\n materialInfo,\n outlineUsesTangentNormals\n });\n }\n this._generateMToonOutlineNormals(loadedPrimitives);\n for (const loaded of loadedPrimitives) {\n const { source: p, primitive, subMeshData, materialInfo, outlineUsesTangentNormals } = loaded;\n const hasVertexNormal = !!primitive.vertices['normal'];\n const hasVertexColor = !!primitive.vertices['diffuse'];\n const hasVertexTangent = !!primitive.vertices['tangent'];\n const flagsHash = [\n hasVertexNormal ? 'N' : '',\n hasVertexColor ? 'C' : '',\n hasVertexTangent ? 'T' : '',\n outlineUsesTangentNormals ? 'OTN' : ''\n ]\n .filter((v) => !!v)\n .join('');\n const materialHash = [p.material ?? 'default', flagsHash].filter((v) => !!v).join('.');\n let material = model.getMaterial(materialHash);\n if (!material) {\n material = await this._loadMaterial(\n model,\n gltf,\n materialInfo!,\n hasVertexColor,\n hasVertexNormal,\n hasVertexTangent,\n outlineUsesTangentNormals,\n vfs\n );\n model.setMaterial(materialHash, material);\n } else if (outlineUsesTangentNormals && material.type === 'mtoon') {\n (material as GLTFMToonAssetMaterial).outlineUsesTangentNormals = true;\n }\n subMeshData.primitive = primitive;\n subMeshData.material = material;\n mesh.subMeshes.push(subMeshData);\n model.addPrimitive(primitive);\n }\n }\n }\n return mesh;\n }\n private _shouldGenerateMToonOutlineNormals(\n materialInfo: Nullable<Material>,\n primitiveInfo: MeshPrimitive,\n primitive: AssetPrimitiveInfo\n ) {\n if (!materialInfo?.extensions?.VRMC_materials_mtoon) {\n return false;\n }\n if (materialInfo.normalTexture) {\n return false;\n }\n if (primitiveInfo.targets?.some((target) => target.TANGENT !== undefined)) {\n return false;\n }\n return (\n primitive.type === 'triangle-list' && !!primitive.vertices['position'] && !!primitive.vertices['normal']\n );\n }\n private _generateMToonOutlineNormals(primitives: GLTFLoadedMeshPrimitive[]) {\n const targets = primitives.filter((p) => p.outlineUsesTangentNormals);\n if (targets.length === 0) {\n return;\n }\n const sums = new Map<string, [number, number, number]>();\n for (const { primitive } of targets) {\n const positionInfo = primitive.vertices['position'];\n if (!positionInfo) {\n continue;\n }\n const positions = positionInfo.data as Float32Array;\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\n const vertexCount = (positions.length / positionStride) >> 0;\n const indices = this._getTriangleIndices(primitive, vertexCount);\n if (!indices) {\n continue;\n }\n for (let i = 0; i + 2 < indices.length; i += 3) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n const i2 = indices[i + 2];\n const p0 = i0 * positionStride;\n const p1 = i1 * positionStride;\n const p2 = i2 * positionStride;\n const ax = positions[p1] - positions[p0];\n const ay = positions[p1 + 1] - positions[p0 + 1];\n const az = positions[p1 + 2] - positions[p0 + 2];\n const bx = positions[p2] - positions[p0];\n const by = positions[p2 + 1] - positions[p0 + 1];\n const bz = positions[p2 + 2] - positions[p0 + 2];\n const nx = ay * bz - az * by;\n const ny = az * bx - ax * bz;\n const nz = ax * by - ay * bx;\n if (nx * nx + ny * ny + nz * nz <= 1e-20) {\n continue;\n }\n this._accumulateOutlineNormal(sums, positions, positionStride, i0, nx, ny, nz);\n this._accumulateOutlineNormal(sums, positions, positionStride, i1, nx, ny, nz);\n this._accumulateOutlineNormal(sums, positions, positionStride, i2, nx, ny, nz);\n }\n }\n for (const { primitive } of targets) {\n const positionInfo = primitive.vertices['position'];\n const normalInfo = primitive.vertices['normal'];\n if (!positionInfo || !normalInfo) {\n continue;\n }\n const positions = positionInfo.data as Float32Array;\n const normals = normalInfo.data as Float32Array;\n const positionStride = getVertexFormatComponentCount(positionInfo.format);\n const normalStride = getVertexFormatComponentCount(normalInfo.format);\n const vertexCount = (positions.length / positionStride) >> 0;\n const tangents = new Float32Array(vertexCount * 4);\n for (let i = 0; i < vertexCount; i++) {\n const key = this._outlinePositionKey(\n positions[i * positionStride],\n positions[i * positionStride + 1],\n positions[i * positionStride + 2]\n );\n const sum = sums.get(key);\n let nx = sum?.[0] ?? normals[i * normalStride];\n let ny = sum?.[1] ?? normals[i * normalStride + 1];\n let nz = sum?.[2] ?? normals[i * normalStride + 2];\n const len = Math.hypot(nx, ny, nz);\n if (len > 1e-10) {\n nx /= len;\n ny /= len;\n nz /= len;\n } else {\n nx = normals[i * normalStride];\n ny = normals[i * normalStride + 1];\n nz = normals[i * normalStride + 2];\n const fallbackLen = Math.hypot(nx, ny, nz);\n if (fallbackLen > 1e-10) {\n nx /= fallbackLen;\n ny /= fallbackLen;\n nz /= fallbackLen;\n } else {\n nx = 0;\n ny = 1;\n nz = 0;\n }\n }\n tangents[i * 4] = nx;\n tangents[i * 4 + 1] = ny;\n tangents[i * 4 + 2] = nz;\n tangents[i * 4 + 3] = 1;\n }\n primitive.vertices['tangent'] = { format: 'tangent_f32x4', data: tangents };\n }\n }\n private _accumulateOutlineNormal(\n sums: Map<string, [number, number, number]>,\n positions: Float32Array,\n stride: number,\n index: number,\n x: number,\n y: number,\n z: number\n ) {\n const offset = index * stride;\n const key = this._outlinePositionKey(positions[offset], positions[offset + 1], positions[offset + 2]);\n const sum = sums.get(key);\n if (sum) {\n sum[0] += x;\n sum[1] += y;\n sum[2] += z;\n } else {\n sums.set(key, [x, y, z]);\n }\n }\n private _getTriangleIndices(primitive: AssetPrimitiveInfo, vertexCount: number) {\n if (primitive.indices) {\n return primitive.indices;\n }\n const indices = new Uint32Array(vertexCount);\n for (let i = 0; i < vertexCount; i++) {\n indices[i] = i;\n }\n return indices;\n }\n private _outlinePositionKey(x: number, y: number, z: number) {\n return `${Math.round(x * 100000)},${Math.round(y * 100000)},${Math.round(z * 100000)}`;\n }\n /** @internal */\n private async _loadMaterial(\n model: SharedModel,\n gltf: GLTFContent,\n materialInfo: Material,\n vertexColor: boolean,\n vertexNormal: boolean,\n useTangent: boolean,\n outlineUsesTangentNormals: boolean,\n vfs: VFS\n ): Promise<AssetMaterial> {\n const materialName = materialInfo?.name || 'material';\n let assetMaterial: Nullable<AssetMaterial> = null;\n let pbrMetallicRoughness: Nullable<AssetPBRMaterialMR> = null;\n let pbrSpecularGlossness: Nullable<AssetPBRMaterialSG> = null;\n const pbrCommon: AssetMaterialCommon = {\n useTangent,\n vertexColor,\n vertexNormal,\n bumpScale: 1,\n emissiveColor: Vector3.zero(),\n emissiveStrength: 1,\n occlusionStrength: 1\n };\n switch (materialInfo?.alphaMode) {\n case 'BLEND': {\n pbrCommon.alphaMode = 'blend';\n break;\n }\n case 'MASK': {\n pbrCommon.alphaMode = 'mask';\n pbrCommon.alphaCutoff = materialInfo.alphaCutoff ?? 0.5;\n break;\n }\n }\n if (materialInfo?.doubleSided) {\n pbrCommon.doubleSided = true;\n }\n const mtoonExtension = materialInfo?.extensions?.VRMC_materials_mtoon as\n | VRMCMToonMaterialInfo\n | undefined;\n if (\n materialInfo?.pbrMetallicRoughness ||\n materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness ||\n mtoonExtension\n ) {\n pbrCommon.normalMap = materialInfo.normalTexture\n ? await this._loadTexture(model, gltf, materialInfo.normalTexture, false, vfs)\n : undefined;\n pbrCommon.bumpScale = materialInfo.normalTexture?.scale ?? 1;\n pbrCommon.occlusionMap = materialInfo.occlusionTexture\n ? await this._loadTexture(model, gltf, materialInfo.occlusionTexture, false, vfs)\n : undefined;\n pbrCommon.occlusionStrength = materialInfo.occlusionTexture?.strength ?? 1;\n pbrCommon.emissiveMap = materialInfo.emissiveTexture\n ? await this._loadTexture(model, gltf, materialInfo.emissiveTexture, false, vfs)\n : undefined;\n pbrCommon.emissiveStrength =\n materialInfo?.extensions?.KHR_materials_emissive_strength?.emissiveStrength ?? 1;\n pbrCommon.emissiveColor = materialInfo.emissiveFactor\n ? new Vector3(materialInfo.emissiveFactor)\n : Vector3.zero();\n }\n if (materialInfo?.pbrMetallicRoughness) {\n pbrMetallicRoughness = {\n name: materialName,\n type: 'pbrMetallicRoughness',\n ior: 1.5,\n common: pbrCommon\n };\n pbrMetallicRoughness.diffuse = new Vector4(\n materialInfo.pbrMetallicRoughness.baseColorFactor ?? [1, 1, 1, 1]\n );\n pbrMetallicRoughness.metallic = materialInfo.pbrMetallicRoughness.metallicFactor ?? 1;\n pbrMetallicRoughness.roughness = materialInfo.pbrMetallicRoughness.roughnessFactor ?? 1;\n pbrMetallicRoughness.diffuseMap = materialInfo.pbrMetallicRoughness.baseColorTexture\n ? await this._loadTexture(model, gltf, materialInfo.pbrMetallicRoughness.baseColorTexture, true, vfs)\n : undefined;\n pbrMetallicRoughness.metallicMap = materialInfo.pbrMetallicRoughness.metallicRoughnessTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.pbrMetallicRoughness.metallicRoughnessTexture,\n false,\n vfs\n )\n : undefined;\n pbrMetallicRoughness.metallicIndex = 2;\n pbrMetallicRoughness.roughnessIndex = 1;\n }\n if (mtoonExtension) {\n return this._loadMToonMaterial(\n model,\n gltf,\n materialName,\n materialInfo,\n pbrCommon,\n mtoonExtension,\n outlineUsesTangentNormals,\n vfs\n );\n }\n if (materialInfo?.extensions?.KHR_materials_pbrSpecularGlossiness) {\n const sg = materialInfo.extensions?.KHR_materials_pbrSpecularGlossiness;\n pbrSpecularGlossness = {\n name: materialName,\n type: 'pbrSpecularGlossiness',\n ior: 1.5,\n common: pbrCommon\n };\n pbrSpecularGlossness.diffuse = new Vector4(sg.diffuseFactor ?? [1, 1, 1, 1]);\n pbrSpecularGlossness.specular = new Vector3(sg.specularFactor ?? [1, 1, 1]);\n pbrSpecularGlossness.glossness = sg.glossnessFactor ?? 1;\n pbrSpecularGlossness.diffuseMap = sg.diffuseTexture\n ? await this._loadTexture(model, gltf, sg.diffuseTexture, true, vfs)\n : undefined;\n pbrSpecularGlossness.specularGlossnessMap = sg.specularGlossinessTexture\n ? await this._loadTexture(model, gltf, sg.specularGlossinessTexture, true, vfs)\n : undefined;\n }\n assetMaterial = pbrSpecularGlossness || pbrMetallicRoughness;\n if (!assetMaterial || materialInfo?.extensions?.KHR_materials_unlit) {\n if (materialInfo?.extensions?.KHR_materials_unlit) {\n assetMaterial = {\n name: materialName,\n type: 'unlit',\n common: pbrCommon,\n diffuse: pbrMetallicRoughness?.diffuse ?? Vector4.one(),\n diffuseMap: pbrMetallicRoughness?.diffuseMap ?? null\n } as AssetUnlitMaterial;\n } else {\n assetMaterial = {\n name: materialName,\n type: 'pbrMetallicRoughness',\n common: pbrCommon,\n diffuse: Vector4.one(),\n metallic: 1,\n roughness: 1,\n diffuseMap: undefined,\n metallicMap: undefined,\n metallicIndex: 2,\n roughnessIndex: 1\n } as AssetPBRMaterialMR;\n }\n }\n if (assetMaterial.type !== 'unlit' && materialInfo?.extensions?.KHR_materials_ior) {\n (assetMaterial as AssetPBRMaterialCommon).ior = materialInfo.extensions.KHR_materials_ior.ior ?? 1.5;\n }\n if (assetMaterial.type === 'pbrMetallicRoughness') {\n pbrMetallicRoughness = assetMaterial;\n // KHR_materials_specular extension\n const specularColorFactor = (materialInfo?.extensions?.KHR_materials_specular?.specularColorFactor ?? [\n 1, 1, 1\n ]) as [number, number, number];\n pbrMetallicRoughness.specularFactor = new Vector4(\n ...specularColorFactor,\n materialInfo?.extensions?.KHR_materials_specular?.specularFactor ?? 1\n );\n pbrMetallicRoughness.specularMap = materialInfo?.extensions?.KHR_materials_specular?.specularTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.extensions.KHR_materials_specular.specularTexture,\n false,\n vfs\n )\n : undefined;\n pbrMetallicRoughness.specularColorMap = materialInfo?.extensions?.KHR_materials_specular\n ?.specularColorTexture\n ? await this._loadTexture(\n model,\n gltf,\n materialInfo.extensions.KHR_materials_specular.specularColorTexture,\n true,\n vfs\n )\n : undefined;\n // KHR_materials_iridescence\n const iridescence = materialInfo?.extensions?.KHR_materials_iridescence;\n if (iridescence) {\n pbrMetallicRoughness.iridescence = {\n iridescenceFactor: iridescence.iridescenceFactor ?? 0,\n iridescenceMap: iridescence.iridescenceTexture\n ? await this._loadTexture(model, gltf, iridescence.iridescenceTexture, false, vfs)\n : undefined,\n iridescenceIor: iridescence.iridescenceIor ?? 1.3,\n iridescenceThicknessMinimum: iridescence.iridescenceThicknessMinimum ?? 100,\n iridescenceThicknessMaximum: iridescence.iridescenceThicknessMaximum ?? 400,\n iridescenceThicknessMap: iridescence.iridescenceThicknessTexture\n ? await this._loadTexture(model, gltf, iridescence.iridescenceThicknessTexture, false, vfs)\n : undefined\n };\n }\n // KHR_materials_transmission\n const transmission = materialInfo?.extensions?.KHR_materials_transmission;\n if (transmission) {\n pbrMetallicRoughness.transmission = {\n transmissionFactor: transmission.transmissionFactor ?? 0,\n transmissionMap: transmission.transmissionTexture\n ? await this._loadTexture(model, gltf, transmission.transmissionTexture, false, vfs)\n : undefined,\n thicknessFactor: 0,\n thicknessMap: undefined,\n attenuationDistance: 99999,\n attenuationColor: Vector3.one()\n };\n const volume = materialInfo?.extensions?.KHR_materials_volume;\n if (volume) {\n pbrMetallicRoughness.transmission.thicknessFactor = volume.thicknessFactor ?? 0;\n pbrMetallicRoughness.transmission.thicknessMap = volume.thicknessTexture\n ? await this._loadTexture(model, gltf, volume.thicknessTexture, false, vfs)\n : undefined;\n pbrMetallicRoughness.transmission.attenuationDistance = volume.attenuationDistance ?? 99999;\n const attenuationColor = (volume.attenuationColor ?? [1, 1, 1]) as [number, number, number];\n pbrMetallicRoughness.transmission.attenuationColor = new Vector3(...attenuationColor);\n }\n }\n // KHR_materials_sheen\n const sheen = materialInfo?.extensions?.KHR_materials_sheen;\n if (sheen) {\n pbrMetallicRoughness.sheen = {\n sheenColorFactor: new Vector3(sheen.sheenColorFactor ?? [0, 0, 0]),\n sheenColorMap: sheen.sheenColorTexture\n ? await this._loadTexture(model, gltf, sheen.sheenColorTexture, true, vfs)\n : undefined,\n sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,\n sheenRoughnessMap: sheen.sheenRoughnessTexture\n ? await this._loadTexture(model, gltf, sheen.sheenRoughnessTexture, true, vfs)\n : undefined\n };\n }\n // KHR_materials_clearcoat\n const cc = materialInfo?.extensions?.KHR_materials_clearcoat;\n if (cc) {\n pbrMetallicRoughness.clearcoat = {\n clearCoatFactor: cc.clearcoatFactor ?? 0,\n clearCoatIntensityMap: cc.clearcoatTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatTexture, false, vfs)\n : undefined,\n clearCoatRoughnessFactor: cc.clearcoatRoughnessFactor ?? 0,\n clearCoatRoughnessMap: cc.clearcoatRoughnessTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatRoughnessTexture, false, vfs)\n : undefined,\n clearCoatNormalMap: cc.clearcoatNormalTexture\n ? await this._loadTexture(model, gltf, cc.clearcoatNormalTexture, false, vfs)\n : undefined\n };\n }\n }\n return assetMaterial;\n }\n /** @internal */\n private async _loadMToonMaterial(\n model: SharedModel,\n gltf: GLTFContent,\n materialName: string,\n materialInfo: Material,\n common: AssetMaterialCommon,\n mtoon: VRMCMToonMaterialInfo,\n outlineUsesTangentNormals: boolean,\n vfs: VFS\n ): Promise<GLTFMToonAssetMaterial> {\n const pbr = materialInfo?.pbrMetallicRoughness;\n const mtoonMaterial: GLTFMToonAssetMaterial = {\n name: materialName,\n type: 'mtoon',\n common,\n diffuse: new Vector4(pbr?.baseColorFactor ?? [1, 1, 1, 1]),\n diffuseMap: pbr?.baseColorTexture\n ? await this._loadTexture(model, gltf, pbr.baseColorTexture, true, vfs)\n : undefined,\n shadeColorFactor: mtoon.shadeColorFactor ? new Vector3(mtoon.shadeColorFactor) : undefined,\n shadeMultiplyMap: mtoon.shadeMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.shadeMultiplyTexture, true, vfs)\n : undefined,\n shadingShiftFactor: mtoon.shadingShiftFactor,\n shadingShiftMap: mtoon.shadingShiftTexture\n ? await this._loadTexture(model, gltf, mtoon.shadingShiftTexture, false, vfs)\n : undefined,\n shadingShiftTextureScale: mtoon.shadingShiftTexture?.scale,\n shadingToonyFactor: mtoon.shadingToonyFactor,\n giEqualizationFactor: mtoon.giEqualizationFactor,\n matcapFactor: mtoon.matcapFactor ? new Vector3(mtoon.matcapFactor) : undefined,\n matcapMap: mtoon.matcapTexture\n ? await this._loadTexture(model, gltf, mtoon.matcapTexture, true, vfs)\n : undefined,\n parametricRimColorFactor: mtoon.parametricRimColorFactor\n ? new Vector3(mtoon.parametricRimColorFactor)\n : undefined,\n parametricRimFresnelPowerFactor: mtoon.parametricRimFresnelPowerFactor,\n parametricRimLiftFactor: mtoon.parametricRimLiftFactor,\n rimMultiplyMap: mtoon.rimMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.rimMultiplyTexture, true, vfs)\n : undefined,\n rimLightingMixFactor: mtoon.rimLightingMixFactor,\n outlineWidthMode: mtoon.outlineWidthMode,\n outlineWidthFactor: mtoon.outlineWidthFactor,\n outlineWidthMultiplyMap: mtoon.outlineWidthMultiplyTexture\n ? await this._loadTexture(model, gltf, mtoon.outlineWidthMultiplyTexture, false, vfs)\n : undefined,\n outlineColorFactor: mtoon.outlineColorFactor ? new Vector3(mtoon.outlineColorFactor) : undefined,\n outlineLightingMixFactor: mtoon.outlineLightingMixFactor,\n outlineUsesTangentNormals,\n uvAnimationMaskMap: mtoon.uvAnimationMaskTexture\n ? await this._loadTexture(model, gltf, mtoon.uvAnimationMaskTexture, false, vfs)\n : undefined,\n uvAnimationScrollXSpeedFactor: mtoon.uvAnimationScrollXSpeedFactor,\n uvAnimationScrollYSpeedFactor: mtoon.uvAnimationScrollYSpeedFactor,\n uvAnimationRotationSpeedFactor: mtoon.uvAnimationRotationSpeedFactor,\n transparentWithZWrite: mtoon.transparentWithZWrite,\n renderQueueOffsetNumber: mtoon.renderQueueOffsetNumber\n };\n return mtoonMaterial;\n }\n /** @internal */\n private async _loadTexture(\n model: SharedModel,\n gltf: GLTFContent,\n info: Partial<TextureInfo>,\n sRGB: boolean,\n vfs: VFS\n ): Promise<AssetTextureInfo> {\n const mt: AssetTextureInfo = {\n image: null,\n sampler: null,\n texCoord: info.texCoord ?? 0,\n transform: null\n };\n const textureInfo = gltf.textures![info.index!];\n if (textureInfo) {\n if (info.extensions?.KHR_texture_transform) {\n const uvTransform = info.extensions.KHR_texture_transform;\n if (uvTransform.texCoord !== undefined) {\n mt.texCoord = uvTransform.texCoord;\n }\n const rotation =\n uvTransform.rotation !== undefined\n ? Matrix4x4.rotationZ(-uvTransform.rotation)\n : Matrix4x4.identity();\n const scale =\n uvTransform.scale !== undefined\n ? new Vector3(uvTransform.scale[0], uvTransform.scale[1], 1)\n : Vector3.one();\n const translation =\n uvTransform.offset !== undefined\n ? new Vector3(uvTransform.offset[0], uvTransform.offset[1], 0)\n : Vector3.zero();\n mt.transform = Matrix4x4.scaling(scale).multiplyLeft(rotation).translateLeft(translation);\n }\n mt.name = textureInfo.name || undefined;\n let wrapS: TextureAddressMode = 'repeat';\n let wrapT: TextureAddressMode = 'repeat';\n let magFilter: TextureFilterMode = 'linear';\n let minFilter: TextureFilterMode = 'linear';\n let mipFilter: TextureFilterMode = 'linear';\n const samplerIndex: number = textureInfo.sampler!;\n const sampler = gltf.samplers && gltf.samplers[samplerIndex];\n if (sampler) {\n switch (sampler.wrapS) {\n case 0x2901: // gl.REPEAT\n wrapS = 'repeat';\n break;\n case 0x8370: // gl.MIRRORED_REPEAT\n wrapS = 'mirrored-repeat';\n break;\n case 0x812f: // gl.CLAMP_TO_EDGE\n wrapS = 'clamp';\n break;\n }\n switch (sampler.wrapT) {\n case 0x2901: // gl.REPEAT\n wrapT = 'repeat';\n break;\n case 0x8370: // gl.MIRRORED_REPEAT\n wrapT = 'mirrored-repeat';\n break;\n case 0x812f: // gl.CLAMP_TO_EDGE\n wrapT = 'clamp';\n break;\n }\n switch (sampler.magFilter) {\n case 0x2600: // gl.NEAREST\n magFilter = 'nearest';\n break;\n case 0x2601: // gl.LINEAR\n magFilter = 'linear';\n break;\n }\n switch (sampler.minFilter) {\n case 0x2600: // gl.NEAREST\n minFilter = 'nearest';\n mipFilter = 'none';\n break;\n case 0x2601: // gl.LINEAR\n minFilter = 'linear';\n mipFilter = 'none';\n break;\n case 0x2700: // gl.NEAREST_MIPMAP_NEAREST\n minFilter = 'nearest';\n mipFilter = 'nearest';\n break;\n case 0x2701: // gl.LINEAR_MIPMAP_NEAREST\n minFilter = 'linear';\n mipFilter = 'nearest';\n break;\n case 0x2702: // gl.NEAREST_MIPMAP_LINEAR\n minFilter = 'nearest';\n mipFilter = 'linear';\n break;\n case 0x2703: // gl.LINEAR_MIPMAP_LINEAR\n minFilter = 'linear';\n mipFilter = 'linear';\n break;\n }\n }\n const imageIndex: number = textureInfo.source!;\n mt.image = model.getImage(imageIndex);\n if (!mt.image) {\n const image = gltf.images![imageIndex];\n if (image) {\n if (image.uri) {\n const imageUrl = vfs.normalizePath(vfs.join(gltf._baseURI, image.uri));\n mt.image = {\n name: image.name || textureInfo.name || undefined,\n uri: imageUrl\n };\n } else if (typeof image.bufferView === 'number' && image.mimeType) {\n const bufferView = gltf.bufferViews && gltf.bufferViews[image.bufferView];\n if (bufferView) {\n const arrayBuffer = gltf._loadedBuffers && gltf._loadedBuffers[bufferView.buffer];\n if (arrayBuffer) {\n const view = new Uint8Array(arrayBuffer, bufferView.byteOffset || 0, bufferView.byteLength);\n const mimeType = image.mimeType;\n mt.image = {\n name: image.name || textureInfo.name || undefined,\n data: view,\n mimeType\n };\n }\n }\n }\n }\n if (mt.image) {\n model.setImage(imageIndex, mt.image);\n }\n }\n if (mt.image) {\n mt.sRGB = !!sRGB;\n mt.sampler = {\n wrapS,\n wrapT,\n magFilter,\n minFilter,\n mipFilter\n };\n }\n }\n return mt;\n }\n /** @internal */\n private _primitiveType(type: number) {\n switch (type) {\n case 0: // GL_POINTS\n return 'point-list';\n case 1: // GL_LINES\n return 'line-list';\n /* FIXME:\n case 2: // GL_LINE_LOOP\n return PrimitiveType.LineLoop;\n */\n case 3: // GL_LINE_STRIP\n return 'line-strip';\n case 4: // GL_TRIANGLES\n return 'triangle-list';\n case 5: // GL_TRIANGLE_STRIP\n return 'triangle-strip';\n case 6: // GL_TRIANGLE_FAN\n return 'triangle-fan';\n default:\n return null;\n }\n }\n /** @internal */\n private _loadIndexBuffer(\n gltf: GLTFContent,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n meshData: AssetSubMeshData,\n dracoExtension?: any,\n dracoMeshDecoder?: DracoMeshDecoder\n ) {\n const accessor = gltf._accessors[accessorIndex];\n if (dracoMeshDecoder) {\n const indices = dracoMeshDecoder.getIndexBuffer();\n if (!indices || indices.length !== accessor.count) {\n throw new Error(`Decode index buffer failed`);\n }\n if (indices.length !== accessor.count) {\n throw new Error(`Decode index buffer failed`);\n }\n gltf._loadedBuffers!.push(indices.buffer);\n if (!gltf.bufferViews) {\n gltf.bufferViews = [];\n }\n gltf.bufferViews.push({\n buffer: gltf._loadedBuffers!.length - 1,\n byteOffset: 0,\n byteLength: indices.byteLength\n });\n accessor.componentType = ComponentType.UINT;\n accessor.bufferView = gltf.bufferViews.length - 1;\n }\n this._setBuffer(gltf, accessorIndex, primitive, null, meshData);\n }\n /** @internal */\n private _loadVertexBuffer(\n gltf: GLTFContent,\n attribName: string,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n subMeshData: AssetSubMeshData,\n dracoExtension?: any,\n dracoMeshDecoder?: DracoMeshDecoder\n ) {\n const dracoId = dracoExtension?.attributes?.[attribName];\n if (dracoId !== undefined) {\n const accessor = gltf._accessors[accessorIndex];\n let buffer: Nullable<TypedArray> = null;\n const numElements = accessor.count * accessor.getComponentCount(accessor.type);\n switch (accessor.componentType) {\n case ComponentType.FLOAT:\n buffer = new Float32Array(numElements);\n break;\n case ComponentType.BYTE:\n buffer = new Int8Array(numElements);\n break;\n case ComponentType.SHORT:\n buffer = new Int16Array(numElements);\n break;\n case ComponentType.INT:\n buffer = new Int32Array(numElements);\n break;\n case ComponentType.UBYTE:\n buffer = new Uint8Array(numElements);\n break;\n case ComponentType.USHORT:\n buffer = new Uint16Array(numElements);\n break;\n case ComponentType.UINT:\n buffer = new Uint32Array(numElements);\n break;\n default:\n throw new Error(`Invalid component type: ${accessor.componentType}`);\n }\n if (!dracoMeshDecoder!.getAttributeBuffer(dracoId, buffer)) {\n throw new Error(`Decode draco mesh failed`);\n }\n gltf._loadedBuffers!.push(buffer.buffer);\n if (!gltf.bufferViews) {\n gltf.bufferViews = [];\n }\n gltf.bufferViews.push({\n buffer: gltf._loadedBuffers!.length - 1,\n byteOffset: 0,\n byteLength: buffer.byteLength\n });\n accessor.bufferView = gltf.bufferViews.length - 1;\n }\n let semantic: Nullable<VertexSemantic> = null;\n switch (attribName) {\n case 'POSITION':\n semantic = 'position';\n break;\n case 'NORMAL':\n semantic = 'normal';\n break;\n case 'TANGENT':\n semantic = 'tangent';\n break;\n case 'TEXCOORD_0':\n semantic = 'texCoord0';\n break;\n case 'TEXCOORD_1':\n semantic = 'texCoord1';\n break;\n case 'TEXCOORD_2':\n semantic = 'texCoord2';\n break;\n case 'TEXCOORD_3':\n semantic = 'texCoord3';\n break;\n case 'TEXCOORD_4':\n semantic = 'texCoord4';\n break;\n case 'TEXCOORD_5':\n semantic = 'texCoord5';\n break;\n case 'TEXCOORD_6':\n semantic = 'texCoord6';\n break;\n case 'TEXCOORD_7':\n semantic = 'texCoord7';\n break;\n case 'COLOR_0':\n semantic = 'diffuse';\n break;\n case 'JOINTS_0':\n semantic = 'blendIndices';\n break;\n case 'WEIGHTS_0':\n semantic = 'blendWeights';\n break;\n default:\n return;\n }\n\n this._setBuffer(gltf, accessorIndex, primitive, semantic, subMeshData);\n }\n /** @internal */\n private _setBuffer(\n gltf: GLTFContent,\n accessorIndex: number,\n primitive: AssetPrimitiveInfo,\n semantic: Nullable<VertexSemantic>,\n subMeshData: AssetSubMeshData\n ) {\n const device = getDevice();\n const accessor = gltf._accessors[accessorIndex];\n const componentCount = accessor.getComponentCount(accessor.type);\n let data = accessor.getNormalizedDeinterlacedView(gltf);\n let buffer: Nullable<TypedArray> = null;\n let attribFormat: Nullable<VertexAttribFormat> = null;\n if (semantic && !(data instanceof Float32Array)) {\n const floatData = new Float32Array(data.length);\n floatData.set(data);\n data = floatData;\n }\n if (!semantic) {\n if (!(data instanceof Uint8Array) && !(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\n console.error('Invalid index buffer component type');\n return;\n }\n if (data instanceof Uint32Array && !device.getDeviceCaps().miscCaps.support32BitIndex) {\n console.error('Device does not support 32bit vertex index');\n return;\n }\n if (data instanceof Uint8Array) {\n const uint16Data = new Uint16Array(data.length);\n uint16Data.set(data);\n data = uint16Data;\n }\n }\n if (!semantic) {\n buffer = data as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\n } else {\n attribFormat = device.getVertexAttribFormat(semantic, 'f32', componentCount);\n buffer = data;\n }\n if (buffer) {\n if (!semantic) {\n primitive.indices = buffer as Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\n primitive.indexCount = buffer.length;\n } else {\n const semantic = getVertexAttribName(getVertexAttributeIndex(attribFormat!));\n primitive.vertices[semantic] = { format: attribFormat!, data: buffer };\n if (semantic === 'position') {\n if (!primitive.indices) {\n primitive.indexCount = Math.floor(buffer.byteLength / 12);\n }\n const data = accessor.getNormalizedDeinterlacedView(gltf);\n subMeshData.rawPositions = data as Float32Array;\n const min = accessor.min;\n const max = accessor.max;\n if (min && max) {\n primitive.boxMin.set(min);\n primitive.boxMax.set(max);\n } else {\n const bbox = new BoundingBox();\n bbox.beginExtend();\n for (let i = 0; i < data.length; i++) {\n const v = new Vector3(\n data[i * componentCount],\n data[i * componentCount + 1],\n data[i * componentCount + 2]\n );\n bbox.extend(v);\n }\n if (bbox.isValid()) {\n primitive.boxMin.set(bbox.minPoint);\n primitive.boxMax.set(bbox.maxPoint);\n }\n }\n } else if (semantic === 'blendIndices') {\n subMeshData.rawBlendIndices = accessor.getNormalizedDeinterlacedView(gltf);\n } else if (semantic === 'blendWeights') {\n subMeshData.rawJointWeights = accessor.getNormalizedDeinterlacedView(gltf);\n }\n }\n }\n return buffer;\n }\n /** @internal */\n private isGLB(data: ArrayBuffer): boolean {\n if (data.byteLength > 12) {\n const p = new Uint32Array(data, 0, 3);\n if (p[0] === 0x46546c67 && p[1] === 2 && p[2] === data.byteLength) {\n return true;\n }\n }\n return false;\n }\n /** @internal */\n private getGLBChunkInfo(\n data: ArrayBuffer,\n offset: number\n ): { start: number; length: number; type: number } {\n const header = new Uint32Array(data, offset, 2);\n const start = offset + 8;\n const length = header[0];\n const type = header[1];\n return { start, length, type };\n }\n /** @internal */\n private getGLBChunkInfos(data: ArrayBuffer): { start: number; length: number; type: number }[] {\n const infos: { start: number; length: number; type: number }[] = [];\n let offset = 12;\n while (offset < data.byteLength) {\n const info = this.getGLBChunkInfo(data, offset);\n infos.push(info);\n offset += info.length + 8;\n }\n return infos;\n }\n}\n"],"names":["VRM_SPRING_BONE_SUBSTEPS","VRM_GRAVITY_ACCELERATION_SCALE","VRM_GRAVITY_POWER_TO_ACCELERATION","VRM_STIFFNESS_TO_FRAME_HARDNESS","VRM_DRAGFORCE_SCALE","GLTFImporter","AbstractModelImporter","initDraco3d","gltf","Promise","resolve","dracoDecoderModule","window","DracoDecoderModule","onModuleLoaded","module","_dracoModule","import","data","model","basePath","vfs","buffer","arrayBuffer","isGLB","loadBinary","Response","json","_loadedBuffers","loadJson","jsonChunkType","binaryChunkType","buffers","chunkInfos","getGLBChunkInfos","info","type","jsonSlice","Uint8Array","length","stringBuffer","TextDecoder","decode","JSON","parse","push","slice","start","ASSERT","getEngine","VFS","extensionsRequired","indexOf","_accessors","_nodes","_meshes","asset","gltfVersion","version","_baseURI","uri","parseDataURI","isAbsoluteURL","normalizePath","join","buf","readFile","encoding","byteLength","accessors","accessor","GLTFAccessor","scenes","sharedModel","_loadMeshes","_loadNodes","_loadSkins","_loadMorphTargetGroups","i","nodes","skin","skeleton","skeletons","_loadSpringBones","_loadAnimations","scene","assetScene","AssetScene","name","node","rootNodes","activeScene","_loadVRMC0SpringBones","_loadVRMC1SpringBones","_buildJointDynamicsSpringBones","clearMorphTargetGroups","hasVRMC1","extensions","VRMC_vrm","hasVRMC0","VRM","_loadVRMC1MorphTargetGroups","_loadVRMC0MorphTargetGroups","buildMorphTargetGroupsByName","groups","blendShapeMaster","blendShapeGroups","Array","isArray","value","groupInfo","_getVRMC0BlendShapeGroupName","bindings","binds","bindValue","bindInfo","meshIndex","mesh","targetIndex","index","targetName","_getMorphTargetName","weight","addMorphTargetGroup","expressions","_loadVRMC1ExpressionMap","preset","custom","expressionMap","expressionInfo","Object","entries","expression","morphTargetBinds","nodeIndex","isBinary","presetName","toLowerCase","count","subMesh","subMeshes","Math","max","numTargets","morphNames","ext","VRMC_springBone","colliders","colliderInfo","_getNode","extendedShape","VRMC_springBone_extended_collider","shape","sphere","capsule","extendedSphere","extendedCapsule","extendedPlane","plane","collider","offset","_arrayToVector3","Vector3","zero","radius","inside","tail","normal","axisPY","springBoneColliders","colliderGroups","group","map","ref","_getIndex","filter","springBoneColliderGroups","springInfo","springs","joints","jointRef","jointInfo","_getSpringBoneJointInfo","hitRadius","stiffness","gravityPower","gravityDir","dragForce","springBones","center","secondaryAnimation","boneGroupInfo","boneGroups","rootBones","bones","stiffiness","comment","fallback","x","y","z","obj","clone","keys","Number","isInteger","key","directIndex","jointIndex","colliderMap","Map","flatPlaneMap","nodeKeys","forEach","set","converted","_toJointDynamicsCollider","jointDynamicsColliders","flatPlane","_toJointDynamicsFlatPlane","spring","chains","_collectJointDynamicsChainsFromRoots","_collectJointDynamicsChains","flatPlanes","colliderKeys","Set","flatPlaneKeys","get","colliderKey","_getJointDynamicsColliderKey","has","add","flatPlaneKey","_getJointDynamicsFlatPlaneKey","jointDynamicsSpringBones","controllerConfig","_mapSpringJointsToControllerConfig","chainStart","chainEnd","isParentOf","_pushJointDynamicsChain","end","_findSingleChildChainEnd","inferredEnd","current","children","loop","gravity","joint","magnitudeSq","normalize","scale","invCount","frameHardness","min","frameResistance","enableBroadPhase","enableSurfaceCollision","subSteps","curves","hardness","InterpolatorScalar","constant","_frameRatioToSubstepRatio","resistance","_frameRateToSubstepRate","pointRadius","structuralShrinkVertical","structuralStretchVertical","structuralShrinkHorizontal","structuralStretchHorizontal","shearShrink","shearStretch","bendingShrinkVertical","bendingStretchVertical","bendingShrinkHorizontal","bendingStretchHorizontal","constraintOptions","structuralVertical","structuralHorizontal","shear","bendingVertical","collideStructuralVertical","collideStructuralHorizontal","collideShear","isLoop","frameRatio","ratio","pow","frameRate","rate","r","_getAssetNodeKey","_vector3Key","localPosition","_quaternionKey","localRotation","_numberKey","radiusTailScale","height","friction","isInverseCollider","forceType","position","up","undefined","size","component","w","is","Quaternion","identity","ColliderForce","Off","localDirection","sub","magnitude","unitVectorToUnitVector","_loadNode","parent","computeTransforms","skins","skinInfo","AssetSkeleton","pivot","inverseBindMatrices","componentType","ComponentType","FLOAT","Error","matrices","getDeinterlacedView","m","addJoint","Matrix4x4","subarray","addSkeleton","_loadVRMAHumanoidSkeleton","VRMC_vrm_animation","humanBones","humanoid","mapping","_getVRMAHumanoidMapping","hips","body","HumanoidBodyRig","Hips","humanBoneNodes","_getVRMAHumanoidNodes","existingSkeleton","find","every","_setAssetSkeletonHumanoidMapping","root","_findCommonRoot","jointSet","_sortSkeletonJoints","humanoidJointMapping","leftHand","rightHand","setBody","vrmaName","rig","_getVRMAHumanBoneNode","setHand","side","Spine","Chest","UpperChest","Neck","Head","LeftShoulder","LeftUpperArm","LeftLowerArm","LeftHand","RightShoulder","RightUpperArm","RightLowerArm","RightHand","LeftUpperLeg","LeftLowerLeg","LeftFoot","LeftToes","RightUpperLeg","RightLowerLeg","RightFoot","RightToes","HumanoidHandRig","ThumbProximal","ThumbIntermediate","ThumbDistal","IndexProximal","IndexIntermediate","IndexDistal","MiddleProximal","MiddleIntermediate","MiddleDistal","RingProximal","RingIntermediate","RingDistal","PinkyProximal","PinkyIntermediate","PinkyDistal","result","boneName","addMappedNodes","mapped","values","sorted","visit","child","animations","animation","_loadAnimation","addAnimation","collectNodes","collect","translate","rotation","scaling","one","worldTransform","getAnimationInfo","animationInfo","channels","samplers","interpolators","interpolatorTypes","maxTime","channel","sampler","input","getNormalizedDeinterlacedView","output","Float32Array","console","error","mode","interpolation","interpolator","interpolatorType","target","path","Interpolator","animationData","tracks","targetNodeIndex","targetNode","track","defaultMorphWeights","weights","skeletonAttached","addChild","nodeInfo","AssetHierarchyNode","subMeshCount","primitive","extras","targetNames","instancing","attributes","accessorTranslation","TRANSLATION","accessorScale","SCALE","accessorRotation","ROTATION","translationValues","scaleValues","rotationValues","t","s","instances","matrix","decompose","translation","childIndex","meshes","_loadMesh","meshInfo","morphWeights","primitives","meshName","loadedPrimitives","p","subMeshName","subMeshData","material","rawPositions","rawBlendIndices","rawJointWeights","vertices","indexCount","indices","boxMax","boxMin","dracoExtension","dracoMeshDecoder","bufferView","bufferViews","DracoMeshDecoder","Int8Array","byteOffset","attrib","_loadVertexBuffer","targets","getDevice","positionInfo","numVertices","getVertexFormatComponentCount","format","vertexIndices","targetBox","targetMap","POSITION","MORPH_TARGET_POSITION","NORMAL","MORPH_TARGET_NORMAL","TANGENT","MORPH_TARGET_TANGENT","TEXCOORD_0","MORPH_TARGET_TEX0","TEXCOORD_1","MORPH_TARGET_TEX1","TEXCOORD_2","MORPH_TARGET_TEX2","TEXCOORD_3","MORPH_TARGET_TEX3","COLOR_0","MORPH_TARGET_COLOR","morphAttribSet","k","numComponents","accessorIndex","getComponentCount","BoundingBox","morphAttribCount","_loadIndexBuffer","primitiveType","_primitiveType","materialInfo","materials","outlineUsesTangentNormals","_shouldGenerateMToonOutlineNormals","source","_generateMToonOutlineNormals","loaded","hasVertexNormal","hasVertexColor","hasVertexTangent","flagsHash","v","materialHash","getMaterial","_loadMaterial","setMaterial","addPrimitive","primitiveInfo","VRMC_materials_mtoon","normalTexture","some","sums","positions","positionStride","vertexCount","_getTriangleIndices","i0","i1","i2","p0","p1","p2","ax","ay","az","bx","by","bz","nx","ny","nz","_accumulateOutlineNormal","normalInfo","normals","normalStride","tangents","_outlinePositionKey","sum","len","hypot","fallbackLen","stride","Uint32Array","round","vertexColor","vertexNormal","useTangent","materialName","assetMaterial","pbrMetallicRoughness","pbrSpecularGlossness","pbrCommon","bumpScale","emissiveColor","emissiveStrength","occlusionStrength","alphaMode","alphaCutoff","doubleSided","mtoonExtension","KHR_materials_pbrSpecularGlossiness","normalMap","_loadTexture","occlusionMap","occlusionTexture","strength","emissiveMap","emissiveTexture","KHR_materials_emissive_strength","emissiveFactor","ior","common","diffuse","Vector4","baseColorFactor","metallic","metallicFactor","roughness","roughnessFactor","diffuseMap","baseColorTexture","metallicMap","metallicRoughnessTexture","metallicIndex","roughnessIndex","_loadMToonMaterial","sg","diffuseFactor","specular","specularFactor","glossness","glossnessFactor","diffuseTexture","specularGlossnessMap","specularGlossinessTexture","KHR_materials_unlit","KHR_materials_ior","specularColorFactor","KHR_materials_specular","specularMap","specularTexture","specularColorMap","specularColorTexture","iridescence","KHR_materials_iridescence","iridescenceFactor","iridescenceMap","iridescenceTexture","iridescenceIor","iridescenceThicknessMinimum","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","transmission","KHR_materials_transmission","transmissionFactor","transmissionMap","transmissionTexture","thicknessFactor","thicknessMap","attenuationDistance","attenuationColor","volume","KHR_materials_volume","thicknessTexture","sheen","KHR_materials_sheen","sheenColorFactor","sheenColorMap","sheenColorTexture","sheenRoughnessFactor","sheenRoughnessMap","sheenRoughnessTexture","cc","KHR_materials_clearcoat","clearcoat","clearCoatFactor","clearcoatFactor","clearCoatIntensityMap","clearcoatTexture","clearCoatRoughnessFactor","clearcoatRoughnessFactor","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearCoatNormalMap","clearcoatNormalTexture","mtoon","pbr","mtoonMaterial","shadeColorFactor","shadeMultiplyMap","shadeMultiplyTexture","shadingShiftFactor","shadingShiftMap","shadingShiftTexture","shadingShiftTextureScale","shadingToonyFactor","giEqualizationFactor","matcapFactor","matcapMap","matcapTexture","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimMultiplyMap","rimMultiplyTexture","rimLightingMixFactor","outlineWidthMode","outlineWidthFactor","outlineWidthMultiplyMap","outlineWidthMultiplyTexture","outlineColorFactor","outlineLightingMixFactor","uvAnimationMaskMap","uvAnimationMaskTexture","uvAnimationScrollXSpeedFactor","uvAnimationScrollYSpeedFactor","uvAnimationRotationSpeedFactor","transparentWithZWrite","renderQueueOffsetNumber","sRGB","mt","image","texCoord","transform","textureInfo","textures","KHR_texture_transform","uvTransform","rotationZ","multiplyLeft","translateLeft","wrapS","wrapT","magFilter","minFilter","mipFilter","samplerIndex","imageIndex","getImage","images","imageUrl","mimeType","view","setImage","meshData","getIndexBuffer","UINT","_setBuffer","attribName","dracoId","numElements","BYTE","SHORT","Int16Array","INT","Int32Array","UBYTE","USHORT","Uint16Array","getAttributeBuffer","semantic","device","componentCount","attribFormat","floatData","getDeviceCaps","miscCaps","support32BitIndex","uint16Data","getVertexAttribFormat","getVertexAttribName","getVertexAttributeIndex","floor","bbox","beginExtend","extend","isValid","minPoint","maxPoint","getGLBChunkInfo","header","infos"],"mappings":"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"}
|