@holoscript/std 2.1.0 → 6.0.3
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/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +197 -0
- package/dist/__tests__/EconomicPrimitives.test.d.ts +2 -0
- package/dist/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
- package/dist/__tests__/EconomicTraits.test.d.ts +2 -0
- package/dist/__tests__/EconomicTraits.test.d.ts.map +1 -0
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts +2 -0
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +1 -0
- package/dist/__tests__/collections.test.d.ts +2 -0
- package/dist/__tests__/collections.test.d.ts.map +1 -0
- package/dist/__tests__/events.test.d.ts +2 -0
- package/dist/__tests__/events.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/materials.test.d.ts +2 -0
- package/dist/__tests__/materials.test.d.ts.map +1 -0
- package/dist/__tests__/math.test.d.ts +2 -0
- package/dist/__tests__/math.test.d.ts.map +1 -0
- package/dist/__tests__/physics.test.d.ts +2 -0
- package/dist/__tests__/physics.test.d.ts.map +1 -0
- package/dist/__tests__/spatial.test.d.ts +2 -0
- package/dist/__tests__/spatial.test.d.ts.map +1 -0
- package/dist/__tests__/standard-library-fundamentals.test.d.ts +2 -0
- package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +1 -0
- package/dist/__tests__/string-and-time-utilities.test.d.ts +2 -0
- package/dist/__tests__/string-and-time-utilities.test.d.ts.map +1 -0
- package/dist/__tests__/string-decoupled.test.d.ts +2 -0
- package/dist/__tests__/string-decoupled.test.d.ts.map +1 -0
- package/dist/__tests__/string.test.d.ts +2 -0
- package/dist/__tests__/string.test.d.ts.map +1 -0
- package/dist/__tests__/time.test.d.ts +2 -0
- package/dist/__tests__/time.test.d.ts.map +1 -0
- package/dist/chunk-7HVUYGPS.js +679 -0
- package/dist/chunk-7HVUYGPS.js.map +1 -0
- package/dist/chunk-P4O3WNG2.js +287 -0
- package/dist/chunk-P4O3WNG2.js.map +1 -0
- package/dist/chunk-PFX2JM4X.js +683 -0
- package/dist/chunk-PFX2JM4X.js.map +1 -0
- package/dist/chunk-W2Q3LUCM.js +348 -0
- package/dist/chunk-W2Q3LUCM.js.map +1 -0
- package/dist/chunk-WS6W35YC.js +443 -0
- package/dist/chunk-WS6W35YC.js.map +1 -0
- package/dist/chunk-ZXVZAQCZ.js +470 -0
- package/dist/chunk-ZXVZAQCZ.js.map +1 -0
- package/dist/collections.cjs +715 -0
- package/dist/collections.cjs.map +1 -0
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +16 -719
- package/dist/collections.js.map +1 -1
- package/dist/events.d.ts +32 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/index.cjs +4101 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +21 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1270 -157
- package/dist/index.js.map +1 -1
- package/dist/materials.d.ts +50 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/math.cjs +591 -0
- package/dist/math.cjs.map +1 -0
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +51 -537
- package/dist/math.js.map +1 -1
- package/dist/physics.d.ts +59 -0
- package/dist/physics.d.ts.map +1 -0
- package/dist/spatial.d.ts +82 -0
- package/dist/spatial.d.ts.map +1 -0
- package/dist/string.basic.test.d.ts +5 -0
- package/dist/string.basic.test.d.ts.map +1 -0
- package/dist/string.cjs +422 -0
- package/dist/string.cjs.map +1 -0
- package/dist/string.d.ts +5 -1
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +106 -442
- package/dist/string.js.map +1 -1
- package/dist/string.test.d.ts +5 -0
- package/dist/string.test.d.ts.map +1 -0
- package/dist/time.cjs +512 -0
- package/dist/time.cjs.map +1 -0
- package/dist/time.d.ts.map +1 -1
- package/dist/time.js +41 -528
- package/dist/time.js.map +1 -1
- package/dist/traits/ARTraits.d.ts +14 -0
- package/dist/traits/ARTraits.d.ts.map +1 -0
- package/dist/traits/EconomicPrimitives.cjs +335 -0
- package/dist/traits/EconomicPrimitives.cjs.map +1 -0
- package/dist/traits/EconomicPrimitives.d.ts +345 -0
- package/dist/traits/EconomicPrimitives.d.ts.map +1 -0
- package/dist/traits/EconomicPrimitives.js +55 -0
- package/dist/traits/EconomicPrimitives.js.map +1 -0
- package/dist/traits/EconomicTraits.cjs +471 -0
- package/dist/traits/EconomicTraits.cjs.map +1 -0
- package/dist/traits/EconomicTraits.d.ts +71 -0
- package/dist/traits/EconomicTraits.d.ts.map +1 -0
- package/dist/traits/EconomicTraits.js +17 -0
- package/dist/traits/EconomicTraits.js.map +1 -0
- package/dist/traits/IoTTraits.d.ts +14 -0
- package/dist/traits/IoTTraits.d.ts.map +1 -0
- package/dist/traits/SimulationLabPrimitives.d.ts +187 -0
- package/dist/traits/SimulationLabPrimitives.d.ts.map +1 -0
- package/dist/traits/SimulationLabTraits.d.ts +42 -0
- package/dist/traits/SimulationLabTraits.d.ts.map +1 -0
- package/dist/traits/VRRTraits.d.ts +150 -0
- package/dist/traits/VRRTraits.d.ts.map +1 -0
- package/dist/traits/__tests__/ARTraits.test.d.ts +2 -0
- package/dist/traits/__tests__/ARTraits.test.d.ts.map +1 -0
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +2 -0
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
- package/dist/traits/__tests__/EconomicTraits.test.d.ts +2 -0
- package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/error-utf8.log +6 -0
- package/error.log +0 -0
- package/package.json +42 -19
- package/src/__tests__/EconomicPrimitives.test.ts +690 -0
- package/src/__tests__/EconomicTraits.test.ts +425 -0
- package/src/__tests__/SimulationLabPrimitives.test.ts +415 -0
- package/src/__tests__/collections.test.ts +182 -0
- package/src/__tests__/events.test.ts +135 -0
- package/src/__tests__/index.test.ts +14 -0
- package/src/__tests__/materials.test.ts +84 -0
- package/src/__tests__/math.test.ts +246 -0
- package/src/__tests__/physics.test.ts +83 -0
- package/src/__tests__/spatial.test.ts +333 -0
- package/src/__tests__/standard-library-fundamentals.test.ts +1301 -0
- package/src/__tests__/string-and-time-utilities.test.ts +1070 -0
- package/src/__tests__/string-decoupled.test.ts +14 -0
- package/src/__tests__/string.test.ts +164 -0
- package/src/__tests__/time.test.ts +110 -0
- package/src/collections.ts +8 -2
- package/src/events.ts +88 -0
- package/src/index.ts +161 -11
- package/src/materials.ts +109 -0
- package/src/math.ts +30 -14
- package/src/physics.ts +141 -0
- package/src/spatial.ts +320 -0
- package/src/string.basic.test.ts +14 -0
- package/src/string.test.ts +335 -0
- package/src/string.ts +45 -13
- package/src/time.ts +10 -11
- package/src/traits/ARTraits.ts +103 -0
- package/src/traits/EconomicPrimitives.ts +755 -0
- package/src/traits/EconomicTraits.ts +552 -0
- package/src/traits/IoTTraits.ts +102 -0
- package/src/traits/SimulationLabPrimitives.ts +650 -0
- package/src/traits/SimulationLabTraits.ts +191 -0
- package/src/traits/VRRTraits.ts +326 -0
- package/src/traits/__tests__/ARTraits.test.ts +14 -0
- package/src/traits/__tests__/EconomicPrimitives.test.ts +14 -0
- package/src/traits/__tests__/EconomicTraits.test.ts +14 -0
- package/src/types.ts +47 -12
- package/std_error.log +5 -0
- package/tsup.config.ts +17 -0
- package/vitest.config.ts +10 -0
- package/dist/types.js +0 -198
- package/dist/types.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/spatial.ts","../src/physics.ts","../src/materials.ts","../src/events.ts","../src/traits/SimulationLabPrimitives.ts","../src/traits/SimulationLabTraits.ts","../src/index.ts"],"sourcesContent":["/**\n * @holoscript/std — Spatial Module\n *\n * Provides spatial math utilities: Vec3, Quaternion, Transform, Ray, AABB, distance.\n * Used by the HoloScript runtime for spatial computing operations.\n *\n * @version 0.2.0\n * @module @holoscript/std/spatial\n */\n\n// =============================================================================\n// Vec3\n// =============================================================================\n\nexport class Vec3 {\n constructor(\n public x: number = 0,\n public y: number = 0,\n public z: number = 0\n ) {}\n\n static zero(): Vec3 {\n return new Vec3(0, 0, 0);\n }\n static one(): Vec3 {\n return new Vec3(1, 1, 1);\n }\n static up(): Vec3 {\n return new Vec3(0, 1, 0);\n }\n static down(): Vec3 {\n return new Vec3(0, -1, 0);\n }\n static forward(): Vec3 {\n return new Vec3(0, 0, -1);\n }\n static right(): Vec3 {\n return new Vec3(1, 0, 0);\n }\n\n add(other: Vec3): Vec3 {\n return new Vec3(this.x + other.x, this.y + other.y, this.z + other.z);\n }\n sub(other: Vec3): Vec3 {\n return new Vec3(this.x - other.x, this.y - other.y, this.z - other.z);\n }\n mul(s: number): Vec3 {\n return new Vec3(this.x * s, this.y * s, this.z * s);\n }\n div(s: number): Vec3 {\n return new Vec3(this.x / s, this.y / s, this.z / s);\n }\n\n dot(other: Vec3): number {\n return this.x * other.x + this.y * other.y + this.z * other.z;\n }\n cross(other: Vec3): Vec3 {\n return new Vec3(\n this.y * other.z - this.z * other.y,\n this.z * other.x - this.x * other.z,\n this.x * other.y - this.y * other.x\n );\n }\n\n length(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n lengthSquared(): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n normalize(): Vec3 {\n const l = this.length();\n return l > 0 ? this.div(l) : Vec3.zero();\n }\n\n distanceTo(other: Vec3): number {\n return this.sub(other).length();\n }\n lerp(other: Vec3, t: number): Vec3 {\n return this.add(other.sub(this).mul(t));\n }\n\n toArray(): [number, number, number] {\n return [this.x, this.y, this.z];\n }\n static fromArray(arr: number[]): Vec3 {\n return new Vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);\n }\n\n equals(other: Vec3, epsilon = 1e-6): boolean {\n return (\n Math.abs(this.x - other.x) < epsilon &&\n Math.abs(this.y - other.y) < epsilon &&\n Math.abs(this.z - other.z) < epsilon\n );\n }\n\n toString(): string {\n return `Vec3(${this.x}, ${this.y}, ${this.z})`;\n }\n}\n\n// =============================================================================\n// Quaternion\n// =============================================================================\n\nexport class Quaternion {\n constructor(\n public x = 0,\n public y = 0,\n public z = 0,\n public w = 1\n ) {}\n\n static identity(): Quaternion {\n return new Quaternion(0, 0, 0, 1);\n }\n\n static fromEuler(x: number, y: number, z: number): Quaternion {\n const cx = Math.cos(x * 0.5),\n sx = Math.sin(x * 0.5);\n const cy = Math.cos(y * 0.5),\n sy = Math.sin(y * 0.5);\n const cz = Math.cos(z * 0.5),\n sz = Math.sin(z * 0.5);\n return new Quaternion(\n sx * cy * cz - cx * sy * sz,\n cx * sy * cz + sx * cy * sz,\n cx * cy * sz - sx * sy * cz,\n cx * cy * cz + sx * sy * sz\n );\n }\n\n static fromAxisAngle(axis: Vec3, angle: number): Quaternion {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const n = axis.normalize();\n return new Quaternion(n.x * s, n.y * s, n.z * s, Math.cos(half));\n }\n\n multiply(other: Quaternion): Quaternion {\n return new Quaternion(\n this.w * other.x + this.x * other.w + this.y * other.z - this.z * other.y,\n this.w * other.y - this.x * other.z + this.y * other.w + this.z * other.x,\n this.w * other.z + this.x * other.y - this.y * other.x + this.z * other.w,\n this.w * other.w - this.x * other.x - this.y * other.y - this.z * other.z\n );\n }\n\n rotateVec3(v: Vec3): Vec3 {\n const u = new Vec3(this.x, this.y, this.z);\n const s = this.w;\n return u\n .mul(2 * u.dot(v))\n .add(v.mul(s * s - u.dot(u)))\n .add(u.cross(v).mul(2 * s));\n }\n\n slerp(other: Quaternion, t: number): Quaternion {\n let dot = this.x * other.x + this.y * other.y + this.z * other.z + this.w * other.w;\n const neg = dot < 0;\n if (neg) dot = -dot;\n if (dot > 0.9995) {\n // Linear interpolation for very close quaternions\n const r = new Quaternion(\n this.x + t * ((neg ? -other.x : other.x) - this.x),\n this.y + t * ((neg ? -other.y : other.y) - this.y),\n this.z + t * ((neg ? -other.z : other.z) - this.z),\n this.w + t * ((neg ? -other.w : other.w) - this.w)\n );\n const len = Math.sqrt(r.x * r.x + r.y * r.y + r.z * r.z + r.w * r.w);\n return new Quaternion(r.x / len, r.y / len, r.z / len, r.w / len);\n }\n const theta = Math.acos(dot);\n const sinTheta = Math.sin(theta);\n const a = Math.sin((1 - t) * theta) / sinTheta;\n const b = (Math.sin(t * theta) / sinTheta) * (neg ? -1 : 1);\n return new Quaternion(\n a * this.x + b * other.x,\n a * this.y + b * other.y,\n a * this.z + b * other.z,\n a * this.w + b * other.w\n );\n }\n\n normalize(): Quaternion {\n const len = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n return new Quaternion(this.x / len, this.y / len, this.z / len, this.w / len);\n }\n\n toEuler(): Vec3 {\n const sinr = 2 * (this.w * this.x + this.y * this.z);\n const cosr = 1 - 2 * (this.x * this.x + this.y * this.y);\n const sinp = 2 * (this.w * this.y - this.z * this.x);\n const siny = 2 * (this.w * this.z + this.x * this.y);\n const cosy = 1 - 2 * (this.y * this.y + this.z * this.z);\n return new Vec3(\n Math.atan2(sinr, cosr),\n Math.abs(sinp) >= 1 ? (Math.sign(sinp) * Math.PI) / 2 : Math.asin(sinp),\n Math.atan2(siny, cosy)\n );\n }\n}\n\n// =============================================================================\n// Transform\n// =============================================================================\n\nexport class Transform {\n constructor(\n public position: Vec3 = Vec3.zero(),\n public rotation: Quaternion = Quaternion.identity(),\n public scale: Vec3 = Vec3.one()\n ) {}\n\n static identity(): Transform {\n return new Transform();\n }\n\n transformPoint(point: Vec3): Vec3 {\n const scaled = new Vec3(point.x * this.scale.x, point.y * this.scale.y, point.z * this.scale.z);\n return this.rotation.rotateVec3(scaled).add(this.position);\n }\n\n transformDirection(dir: Vec3): Vec3 {\n return this.rotation.rotateVec3(dir);\n }\n}\n\n// =============================================================================\n// Ray & AABB\n// =============================================================================\n\nexport class Ray {\n constructor(\n public origin: Vec3,\n public direction: Vec3\n ) {}\n\n pointAt(t: number): Vec3 {\n return this.origin.add(this.direction.mul(t));\n }\n}\n\nexport class AABB {\n constructor(\n public min: Vec3,\n public max: Vec3\n ) {}\n\n contains(point: Vec3): boolean {\n return (\n point.x >= this.min.x &&\n point.x <= this.max.x &&\n point.y >= this.min.y &&\n point.y <= this.max.y &&\n point.z >= this.min.z &&\n point.z <= this.max.z\n );\n }\n\n intersects(other: AABB): boolean {\n return (\n this.min.x <= other.max.x &&\n this.max.x >= other.min.x &&\n this.min.y <= other.max.y &&\n this.max.y >= other.min.y &&\n this.min.z <= other.max.z &&\n this.max.z >= other.min.z\n );\n }\n\n center(): Vec3 {\n return this.min.add(this.max).div(2);\n }\n size(): Vec3 {\n return this.max.sub(this.min);\n }\n\n intersectsRay(ray: Ray): number | null {\n let tmin = (this.min.x - ray.origin.x) / ray.direction.x;\n let tmax = (this.max.x - ray.origin.x) / ray.direction.x;\n if (tmin > tmax) [tmin, tmax] = [tmax, tmin];\n\n let tymin = (this.min.y - ray.origin.y) / ray.direction.y;\n let tymax = (this.max.y - ray.origin.y) / ray.direction.y;\n if (tymin > tymax) [tymin, tymax] = [tymax, tymin];\n\n if (tmin > tymax || tymin > tmax) return null;\n tmin = Math.max(tmin, tymin);\n tmax = Math.min(tmax, tymax);\n\n let tzmin = (this.min.z - ray.origin.z) / ray.direction.z;\n let tzmax = (this.max.z - ray.origin.z) / ray.direction.z;\n if (tzmin > tzmax) [tzmin, tzmax] = [tzmax, tzmin];\n\n if (tmin > tzmax || tzmin > tmax) return null;\n return Math.max(tmin, tzmin);\n }\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nexport function distance(a: Vec3, b: Vec3): number {\n return a.distanceTo(b);\n}\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\nexport function clamp(v: number, min: number, max: number): number {\n return Math.min(Math.max(v, min), max);\n}\nexport function degToRad(deg: number): number {\n return deg * (Math.PI / 180);\n}\nexport function radToDeg(rad: number): number {\n return rad * (180 / Math.PI);\n}\n","/**\n * @holoscript/std — Physics Module\n *\n * Provides physics primitives: ColliderShape, RigidbodyConfig, ForceField, Joint.\n * Runtime representations for HoloScript physics blocks.\n *\n * @version 0.2.0\n * @module @holoscript/std/physics\n */\n\nimport type { Vec3 } from './spatial.js';\n\n// =============================================================================\n// Collider Shapes\n// =============================================================================\n\nexport type ColliderShapeType =\n | 'box'\n | 'sphere'\n | 'capsule'\n | 'mesh'\n | 'convex'\n | 'cylinder'\n | 'heightfield';\n\nexport interface ColliderConfig {\n shape: ColliderShapeType;\n isTrigger: boolean;\n friction: number;\n restitution: number;\n // Shape-specific\n radius?: number;\n halfExtents?: Vec3;\n height?: number;\n meshAsset?: string;\n}\n\nexport function createBoxCollider(\n halfExtents: Vec3,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'box',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n halfExtents,\n ...options,\n };\n}\n\nexport function createSphereCollider(\n radius: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return { shape: 'sphere', isTrigger: false, friction: 0.5, restitution: 0.0, radius, ...options };\n}\n\nexport function createCapsuleCollider(\n radius: number,\n height: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'capsule',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n radius,\n height,\n ...options,\n };\n}\n\n// =============================================================================\n// Rigidbody\n// =============================================================================\n\nexport interface RigidbodyConfig {\n mass: number;\n useGravity: boolean;\n linearDamping: number;\n angularDamping: number;\n freezePosition: [boolean, boolean, boolean];\n freezeRotation: [boolean, boolean, boolean];\n isKinematic: boolean;\n}\n\nexport function createRigidbody(mass: number, options?: Partial<RigidbodyConfig>): RigidbodyConfig {\n return {\n mass,\n useGravity: true,\n linearDamping: 0.0,\n angularDamping: 0.05,\n freezePosition: [false, false, false],\n freezeRotation: [false, false, false],\n isKinematic: false,\n ...options,\n };\n}\n\n// =============================================================================\n// Force Fields\n// =============================================================================\n\nexport type ForceFieldType = 'directional' | 'radial' | 'vortex' | 'buoyancy';\n\nexport interface ForceFieldConfig {\n type: ForceFieldType;\n strength: number;\n direction?: Vec3;\n falloff: 'none' | 'linear' | 'quadratic';\n turbulence: number;\n}\n\n// =============================================================================\n// Joints\n// =============================================================================\n\nexport type JointType = 'hinge' | 'slider' | 'ball_socket' | 'fixed' | 'd6' | 'spring';\n\nexport interface JointConfig {\n type: JointType;\n connectedBody?: string;\n axis?: Vec3;\n limits?: [number, number];\n damping: number;\n springForce?: number;\n breakForce?: number;\n}\n\n// =============================================================================\n// Raycast Utility\n// =============================================================================\n\nexport interface RaycastHit {\n point: Vec3;\n normal: Vec3;\n distance: number;\n objectName: string;\n}\n","/**\n * @holoscript/std — Materials Module\n *\n * Provides PBR material types, texture map definitions, and material presets.\n * Maps directly to HoloScript material_block grammar constructs.\n *\n * @version 0.2.0\n * @module @holoscript/std/materials\n */\n\n// =============================================================================\n// PBR Material\n// =============================================================================\n\nexport interface PBRMaterial {\n name: string;\n baseColor: string; // hex color\n roughness: number; // 0.0 - 1.0\n metallic: number; // 0.0 - 1.0\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number; // 0.0 - 1.0\n ior?: number; // Index of refraction (glass ~1.5, water ~1.33)\n subsurface?: number;\n clearcoat?: number;\n clearcoatRoughness?: number;\n // Texture maps\n albedoMap?: string;\n normalMap?: string;\n roughnessMap?: string;\n metallicMap?: string;\n emissionMap?: string;\n aoMap?: string;\n heightMap?: string;\n opacityMap?: string;\n displacementMap?: string;\n}\n\nexport interface UnlitMaterial {\n name: string;\n color: string;\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number;\n texture?: string;\n}\n\n// =============================================================================\n// Material Presets\n// =============================================================================\n\nexport const MATERIAL_PRESETS: Record<string, Partial<PBRMaterial>> = {\n metal: { roughness: 0.2, metallic: 1.0 },\n wood: { roughness: 0.85, metallic: 0.0, baseColor: '#8B6914' },\n glass: { roughness: 0.05, metallic: 0.0, opacity: 0.3, ior: 1.5 },\n plastic: { roughness: 0.4, metallic: 0.0 },\n concrete: { roughness: 0.95, metallic: 0.0, baseColor: '#808080' },\n fabric: { roughness: 0.9, metallic: 0.0, subsurface: 0.2 },\n water: { roughness: 0.05, metallic: 0.0, opacity: 0.7, ior: 1.33 },\n rubber: { roughness: 0.95, metallic: 0.0, baseColor: '#222222' },\n marble: { roughness: 0.3, metallic: 0.0, baseColor: '#f0f0f0' },\n skin: { roughness: 0.6, metallic: 0.0, subsurface: 0.5 },\n foliage: { roughness: 0.8, metallic: 0.0, baseColor: '#2d5a27', subsurface: 0.3 },\n chrome: { roughness: 0.05, metallic: 1.0, baseColor: '#cccccc' },\n gold: { roughness: 0.2, metallic: 1.0, baseColor: '#ffd700' },\n copper: { roughness: 0.3, metallic: 1.0, baseColor: '#b87333' },\n ice: { roughness: 0.1, metallic: 0.0, opacity: 0.8, ior: 1.31 },\n};\n\nexport function createPBRMaterial(\n name: string,\n preset?: keyof typeof MATERIAL_PRESETS,\n overrides?: Partial<PBRMaterial>\n): PBRMaterial {\n const base = preset ? MATERIAL_PRESETS[preset] : {};\n return {\n name,\n baseColor: '#ffffff',\n roughness: 0.5,\n metallic: 0.0,\n ...base,\n ...overrides,\n };\n}\n\n// =============================================================================\n// Texture Map Types\n// =============================================================================\n\nexport type TextureMapType =\n | 'albedo_map'\n | 'normal_map'\n | 'roughness_map'\n | 'metallic_map'\n | 'emission_map'\n | 'ao_map'\n | 'height_map'\n | 'opacity_map'\n | 'displacement_map'\n | 'specular_map'\n | 'clearcoat_map';\n\nexport interface TextureConfig {\n source: string;\n tiling?: [number, number];\n offset?: [number, number];\n filter?: 'linear' | 'nearest';\n wrap?: 'repeat' | 'clamp' | 'mirror';\n}\n","/**\n * @holoscript/std — Events Module\n *\n * Provides a typed event bus for HoloScript compositions.\n * Supports emit, on, once, off, and wildcard listeners.\n *\n * @version 0.2.0\n * @module @holoscript/std/events\n */\n\nexport type EventHandler<T = any> = (data: T) => void;\n\ninterface Listener {\n handler: EventHandler;\n once: boolean;\n}\n\nexport class EventBus {\n private listeners: Map<string, Listener[]> = new Map();\n private wildcardListeners: Listener[] = [];\n\n /** Register an event listener. */\n on<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: false };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Register a one-time event listener. */\n once<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: true };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Remove an event listener. */\n off(event: string, handler: EventHandler): void {\n const list = this.listeners.get(event);\n if (!list) return;\n this.listeners.set(\n event,\n list.filter((l) => l.handler !== handler)\n );\n }\n\n /** Emit an event to all registered listeners. */\n emit<T = any>(event: string, data?: T): void {\n // Fire specific listeners\n const list = this.listeners.get(event);\n if (list) {\n const remaining: Listener[] = [];\n for (const l of list) {\n l.handler(data);\n if (!l.once) remaining.push(l);\n }\n this.listeners.set(event, remaining);\n }\n // Fire wildcard listeners\n for (const l of this.wildcardListeners) {\n l.handler({ event, data });\n }\n }\n\n /** Listen to all events. */\n onAny(handler: EventHandler<{ event: string; data: any }>): () => void {\n const listener: Listener = { handler, once: false };\n this.wildcardListeners.push(listener);\n return () => {\n this.wildcardListeners = this.wildcardListeners.filter((l) => l !== listener);\n };\n }\n\n /** Remove all listeners. */\n clear(): void {\n this.listeners.clear();\n this.wildcardListeners = [];\n }\n\n /** Get count of listeners for an event (or all events). */\n listenerCount(event?: string): number {\n if (event) return (this.listeners.get(event) || []).length;\n let total = this.wildcardListeners.length;\n for (const [, list] of this.listeners) total += list.length;\n return total;\n }\n}\n","/**\n * @fileoverview SimulationLab Primitives - Runtime math and types for hypothesis testing\n * @module @holoscript/std/simulation\n *\n * Provides the mathematical building blocks for scientific hypothesis testing\n * in HoloScript simulations. Run N epochs with parameter sweeps, collect metrics,\n * and perform statistical analysis to prove or disprove hypotheses.\n *\n * The universe gets one sample. HoloScript gives you infinite.\n *\n * @version 1.0.0\n * @category simulation\n */\n\n// =============================================================================\n// CORE TYPES\n// =============================================================================\n\n/**\n * Direction of expected effect in a hypothesis.\n */\nexport type HypothesisDirection = 'greater' | 'less' | 'different' | 'equal';\n\n/**\n * Status of a simulation run.\n */\nexport type SimulationStatus = 'pending' | 'running' | 'completed' | 'failed';\n\n/**\n * A scientific hypothesis to test.\n */\nexport interface Hypothesis {\n /** Human-readable description */\n description: string;\n /** The null hypothesis (what we're trying to reject) */\n null_hypothesis: string;\n /** The alternative hypothesis (what we're testing for) */\n alternative_hypothesis: string;\n /** Expected direction of effect */\n direction: HypothesisDirection;\n /** Significance threshold (default: 0.05) */\n alpha: number;\n}\n\n/**\n * A range of parameter values to sweep.\n */\nexport interface ParameterRange {\n /** Parameter name */\n name: string;\n /** Start value */\n min: number;\n /** End value */\n max: number;\n /** Step size */\n step: number;\n}\n\n/**\n * A set of discrete parameter values to sweep.\n */\nexport interface ParameterSet {\n /** Parameter name */\n name: string;\n /** Discrete values to test */\n values: number[];\n}\n\n/**\n * Either a range or discrete set of parameter values.\n */\nexport type ParameterSweep = ParameterRange | ParameterSet;\n\n/**\n * Metrics collected from a single simulation run.\n */\nexport interface SimulationMetrics {\n /** Named metric values */\n values: Record<string, number>;\n /** Seed used for this run */\n seed: number;\n /** Parameter values used */\n params: Record<string, number>;\n /** Wall-clock time in ms */\n durationMs: number;\n}\n\n/**\n * Result of a statistical test.\n */\nexport interface StatisticalResult {\n /** Test statistic value */\n statistic: number;\n /** p-value (probability of observing result under null hypothesis) */\n pValue: number;\n /** Whether the null hypothesis is rejected at the given alpha */\n significant: boolean;\n /** Confidence interval [lower, upper] */\n confidenceInterval: [number, number];\n /** Effect size (Cohen's d for t-test) */\n effectSize: number;\n /** Name of the test used */\n testName: string;\n /** Number of samples */\n sampleSize: number;\n}\n\n/**\n * Complete simulation experiment result.\n */\nexport interface ExperimentResult {\n /** The hypothesis tested */\n hypothesis: Hypothesis;\n /** Statistical results per metric */\n results: Record<string, StatisticalResult>;\n /** All collected metrics */\n metrics: SimulationMetrics[];\n /** Total epochs run */\n totalEpochs: number;\n /** Total wall-clock time */\n totalDurationMs: number;\n /** Status */\n status: SimulationStatus;\n /** Composition hash for reproducibility */\n compositionHash: string;\n}\n\n// =============================================================================\n// PARAMETER SWEEP GENERATION\n// =============================================================================\n\n/**\n * Check if a parameter sweep is a range (vs discrete set).\n */\nexport function isParameterRange(sweep: ParameterSweep): sweep is ParameterRange {\n return 'min' in sweep && 'max' in sweep && 'step' in sweep;\n}\n\n/**\n * Generate all values from a parameter sweep.\n */\nexport function expandSweep(sweep: ParameterSweep): number[] {\n if (!isParameterRange(sweep)) {\n return (sweep as ParameterSet).values.slice();\n }\n\n const range = sweep as ParameterRange;\n if (range.step <= 0) return [range.min];\n if (range.min > range.max) return [];\n\n const values: number[] = [];\n for (let v = range.min; v <= range.max + range.step * 0.001; v += range.step) {\n values.push(Math.round(v * 1e10) / 1e10); // Avoid floating point drift\n }\n return values;\n}\n\n/**\n * Generate all parameter combinations from multiple sweeps.\n * Returns an array of parameter maps.\n */\nexport function generateSweepCombinations(sweeps: ParameterSweep[]): Record<string, number>[] {\n if (sweeps.length === 0) return [{}];\n\n const expanded = sweeps.map((s) => ({\n name: s.name,\n values: expandSweep(s),\n }));\n\n // Cartesian product\n let combinations: Record<string, number>[] = [{}];\n\n for (const { name, values } of expanded) {\n const newCombinations: Record<string, number>[] = [];\n for (const combo of combinations) {\n for (const val of values) {\n newCombinations.push({ ...combo, [name]: val });\n }\n }\n combinations = newCombinations;\n }\n\n return combinations;\n}\n\n// =============================================================================\n// STATISTICAL FUNCTIONS\n// =============================================================================\n\n/**\n * Calculate the arithmetic mean of an array of numbers.\n */\nexport function mean(data: number[]): number {\n if (data.length === 0) return 0;\n return data.reduce((sum, v) => sum + v, 0) / data.length;\n}\n\n/**\n * Calculate the sample variance (Bessel's correction).\n */\nexport function variance(data: number[]): number {\n if (data.length < 2) return 0;\n const m = mean(data);\n const squaredDiffs = data.reduce((sum, v) => sum + (v - m) ** 2, 0);\n return squaredDiffs / (data.length - 1);\n}\n\n/**\n * Calculate the sample standard deviation.\n */\nexport function standardDeviation(data: number[]): number {\n return Math.sqrt(variance(data));\n}\n\n/**\n * Calculate the standard error of the mean.\n */\nexport function standardError(data: number[]): number {\n if (data.length === 0) return 0;\n return standardDeviation(data) / Math.sqrt(data.length);\n}\n\n/**\n * Calculate Cohen's d effect size between two groups.\n * d = (mean1 - mean2) / pooled_std\n */\nexport function cohensD(group1: number[], group2: number[]): number {\n if (group1.length < 2 || group2.length < 2) return 0;\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n\n // Pooled standard deviation\n const n1 = group1.length;\n const n2 = group2.length;\n const pooledVar = ((n1 - 1) * v1 + (n2 - 1) * v2) / (n1 + n2 - 2);\n const pooledStd = Math.sqrt(pooledVar);\n\n if (pooledStd === 0) return 0;\n return (m1 - m2) / pooledStd;\n}\n\n/**\n * Two-sample independent t-test.\n *\n * Tests whether two groups have significantly different means.\n * Uses Welch's t-test (does not assume equal variances).\n */\nexport function tTest(\n group1: number[],\n group2: number[],\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 < 2 || n2 < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n const se = Math.sqrt(v1 / n1 + v2 / n2);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m1 === m2 ? 1 : 0,\n significant: m1 !== m2,\n confidenceInterval: [m1 - m2, m1 - m2],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const t = (m1 - m2) / se;\n\n // Welch–Satterthwaite degrees of freedom\n const num = (v1 / n1 + v2 / n2) ** 2;\n const den = (v1 / n1) ** 2 / (n1 - 1) + (v2 / n2) ** 2 / (n2 - 1);\n const df = num / den;\n\n // Approximate p-value using the t-distribution CDF approximation\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'equal':\n pValue = 1 - pTwoTailed;\n break;\n default: // 'different'\n pValue = pTwoTailed;\n }\n\n // Confidence interval for the difference in means\n const tCrit = tDistCritical(alpha, df);\n const diff = m1 - m2;\n const ci: [number, number] = [diff - tCrit * se, diff + tCrit * se];\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize: cohensD(group1, group2),\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * One-sample t-test against a known value.\n */\nexport function oneSampleTTest(\n data: number[],\n populationMean: number,\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n = data.length;\n\n if (n < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const m = mean(data);\n const se = standardError(data);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m === populationMean ? 1 : 0,\n significant: m !== populationMean,\n confidenceInterval: [m, m],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const t = (m - populationMean) / se;\n const df = n - 1;\n\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n default:\n pValue = pTwoTailed;\n }\n\n const tCrit = tDistCritical(alpha, df);\n const ci: [number, number] = [m - tCrit * se, m + tCrit * se];\n\n const sd = standardDeviation(data);\n const effectSize = sd > 0 ? (m - populationMean) / sd : 0;\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n}\n\n/**\n * Mann-Whitney U test (non-parametric alternative to t-test).\n * Tests whether one group tends to have larger values than the other.\n */\nexport function mannWhitneyU(\n group1: number[],\n group2: number[],\n alpha: number = 0.05\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 === 0 || n2 === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n // Count how many times group1 values exceed group2 values\n let u1 = 0;\n for (const a of group1) {\n for (const b of group2) {\n if (a > b) u1++;\n else if (a === b) u1 += 0.5;\n }\n }\n\n const u2 = n1 * n2 - u1;\n const u = Math.min(u1, u2);\n\n // Normal approximation for larger samples\n const meanU = (n1 * n2) / 2;\n const sigmaU = Math.sqrt((n1 * n2 * (n1 + n2 + 1)) / 12);\n\n if (sigmaU === 0) {\n return {\n statistic: u,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n const z = (u - meanU) / sigmaU;\n const pValue = 2 * normalCDF(-Math.abs(z)); // Two-tailed\n\n // Effect size: rank-biserial correlation r = 1 - 2U/(n1*n2)\n const effectSize = 1 - (2 * u) / (n1 * n2);\n\n return {\n statistic: u,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0], // CI not standard for U-test\n effectSize,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * Chi-squared goodness-of-fit test.\n * Tests whether observed frequencies match expected frequencies.\n */\nexport function chiSquaredTest(\n observed: number[],\n expected: number[],\n alpha: number = 0.05\n): StatisticalResult {\n if (observed.length !== expected.length || observed.length === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: 0,\n };\n }\n\n let chiSq = 0;\n let totalObserved = 0;\n\n for (let i = 0; i < observed.length; i++) {\n if (expected[i] <= 0) continue;\n chiSq += (observed[i] - expected[i]) ** 2 / expected[i];\n totalObserved += observed[i];\n }\n\n const df = observed.length - 1;\n if (df <= 0) {\n return {\n statistic: chiSq,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n }\n\n // Approximate p-value using Wilson-Hilferty approximation\n const pValue = chiSquaredPValue(chiSq, df);\n\n // Cramér's V effect size\n const k = observed.length;\n const effectSize = totalObserved > 0 ? Math.sqrt(chiSq / (totalObserved * (k - 1))) : 0;\n\n return {\n statistic: chiSq,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0],\n effectSize,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n}\n\n// =============================================================================\n// METRIC AGGREGATION\n// =============================================================================\n\n/**\n * Extract a named metric from an array of simulation results.\n */\nexport function extractMetric(results: SimulationMetrics[], metricName: string): number[] {\n return results.filter((r) => metricName in r.values).map((r) => r.values[metricName]);\n}\n\n/**\n * Group simulation results by a parameter value.\n */\nexport function groupByParameter(\n results: SimulationMetrics[],\n paramName: string\n): Map<number, SimulationMetrics[]> {\n const groups = new Map<number, SimulationMetrics[]>();\n for (const r of results) {\n const val = r.params[paramName];\n if (val === undefined) continue;\n if (!groups.has(val)) groups.set(val, []);\n groups.get(val)!.push(r);\n }\n return groups;\n}\n\n/**\n * Generate a summary of metrics across all runs.\n */\nexport function summarizeMetrics(\n results: SimulationMetrics[],\n metricName: string\n): { mean: number; std: number; min: number; max: number; n: number } {\n const values = extractMetric(results, metricName);\n if (values.length === 0) {\n return { mean: 0, std: 0, min: 0, max: 0, n: 0 };\n }\n return {\n mean: mean(values),\n std: standardDeviation(values),\n min: Math.min(...values),\n max: Math.max(...values),\n n: values.length,\n };\n}\n\n// =============================================================================\n// INTERNAL MATH HELPERS\n// =============================================================================\n\n/**\n * Standard normal CDF approximation (Abramowitz and Stegun 26.2.17).\n * Accurate to ~1.5e-7.\n */\nfunction normalCDF(x: number): number {\n if (x < -8) return 0;\n if (x > 8) return 1;\n\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n const absX = Math.abs(x);\n const t = 1.0 / (1.0 + p * absX);\n const y = 1.0 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp((-absX * absX) / 2);\n\n return 0.5 * (1.0 + sign * y);\n}\n\n/**\n * Approximate two-tailed p-value from t-distribution.\n * Uses the Inamdar-Griessammer approximation for large df.\n */\nfunction tDistPValue(absT: number, df: number): number {\n if (df <= 0) return 1;\n // Convert t to approximately normal z for large df\n const z = (absT * (1 - 1 / (4 * df))) / Math.sqrt(1 + (absT * absT) / (2 * df));\n return 2 * (1 - normalCDF(z));\n}\n\n/**\n * Approximate critical t-value for a given alpha and df.\n */\nfunction tDistCritical(alpha: number, df: number): number {\n // Approximate using normal quantile adjusted for df\n const p = 1 - alpha / 2;\n // Rational approximation of the normal quantile (Beasley-Springer-Moro)\n const a = p - 0.5;\n const r = a * a;\n let z =\n (a * (2.50662823884 + r * (-18.61500062529 + r * (41.39119773534 + r * -25.44106049637)))) /\n (1 + r * (-8.4735109309 + r * (23.08336743743 + r * (-21.06224101826 + r * 3.13082909833))));\n\n // Cornish-Fisher expansion for t-distribution\n const g1 = (z ** 3 + z) / (4 * df);\n const g2 = (5 * z ** 5 + 16 * z ** 3 + 3 * z) / (96 * df * df);\n z = z + g1 + g2;\n\n return Math.abs(z);\n}\n\n/**\n * Approximate chi-squared p-value using Wilson-Hilferty.\n */\nfunction chiSquaredPValue(chiSq: number, df: number): number {\n if (df <= 0) return 1;\n if (chiSq <= 0) return 1;\n // Wilson-Hilferty transformation to normal\n const z = Math.pow(chiSq / df, 1 / 3) - (1 - 2 / (9 * df));\n const denom = Math.sqrt(2 / (9 * df));\n return 1 - normalCDF(z / denom);\n}\n","/**\n * @fileoverview SimulationLab Trait Definition for HoloScript\n * @module @holoscript/std/traits\n *\n * Defines the @simulation_lab trait that enables hypothesis testing\n * on any HoloScript composition. Attach this trait to run parameter sweeps,\n * collect metrics across N epochs, and produce statistical results.\n *\n * Composes with all economic traits for economy stress testing.\n *\n * @version 1.0.0\n * @category simulation\n */\n\nimport type { TraitDefinition } from '../types.js';\n\n/**\n * Extended trait definition with simulation-specific metadata.\n */\nexport interface SimulationTraitDefinition extends TraitDefinition {\n /** Compiler hints for batch execution */\n compiler_hints?: {\n requires_runtime?: string[];\n thread_safety?: 'main_thread' | 'worker_thread' | 'any';\n performance_budget_ms?: number;\n batch_mode?: boolean;\n };\n /** Which economic/VR traits this composes with */\n composesWith: string[];\n}\n\n// =============================================================================\n// TRAIT DEFINITION\n// =============================================================================\n\n/**\n * The SimulationLab trait.\n */\nexport const SimulationLabTraits: Record<string, SimulationTraitDefinition> = {\n simulation_lab: {\n name: '@simulation_lab',\n description:\n 'Attaches scientific hypothesis testing to any HoloScript composition. ' +\n 'Enables parameter sweeps, multi-epoch execution, statistical analysis, ' +\n 'and exportable results. The universe gets one sample — HoloScript gives ' +\n 'you infinite. Results are marketplace-sellable as verified simulation data.',\n params: {\n hypothesis: {\n type: 'string',\n required: true,\n description: 'Human-readable hypothesis description.',\n },\n null_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal null hypothesis (H0). Auto-generated if empty.',\n },\n alternative_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal alternative hypothesis (H1). Auto-generated if empty.',\n },\n direction: {\n type: 'string',\n required: false,\n default: 'different',\n description: 'Expected direction of effect: greater | less | different | equal.',\n },\n epochs: {\n type: 'number',\n required: false,\n default: 1000,\n description: 'Number of simulation runs per parameter combination. More = higher power.',\n },\n seed_start: {\n type: 'number',\n required: false,\n default: 0,\n description: 'Starting seed for reproducibility. Seeds increment per epoch.',\n },\n confidence_level: {\n type: 'number',\n required: false,\n default: 0.95,\n description: 'Confidence level for statistical tests (0.0 - 1.0). Default 0.95 = α=0.05.',\n },\n metrics: {\n type: 'string[]',\n required: true,\n description:\n 'List of metric names to collect each epoch. Must match emitted metric events.',\n },\n statistical_test: {\n type: 'string',\n required: false,\n default: 'auto',\n description:\n 'Statistical test to use: t_test | mann_whitney_u | chi_squared | auto. ' +\n 'Auto selects based on data distribution.',\n },\n export_training_data: {\n type: 'boolean',\n required: false,\n default: false,\n description: 'Whether to export results as training data for DataForge pipeline.',\n },\n marketplace_publishable: {\n type: 'boolean',\n required: false,\n default: false,\n description:\n 'Whether to package results for marketplace listing as verified simulation data.',\n },\n max_duration_ms: {\n type: 'number',\n required: false,\n default: 300000,\n description:\n 'Maximum wall-clock time for the entire experiment (5 min default). ' +\n 'Prevents runaway simulations.',\n },\n worker_count: {\n type: 'number',\n required: false,\n default: 4,\n description: 'Number of parallel workers for epoch execution.',\n },\n },\n validator: (params) => {\n if (!params.hypothesis || typeof params.hypothesis !== 'string') return false;\n if (!params.metrics || !Array.isArray(params.metrics) || params.metrics.length === 0)\n return false;\n if (params.epochs !== undefined && (params.epochs < 1 || params.epochs > 1000000))\n return false;\n if (\n params.confidence_level !== undefined &&\n (params.confidence_level <= 0 || params.confidence_level >= 1)\n )\n return false;\n if (params.direction !== undefined) {\n if (!['greater', 'less', 'different', 'equal'].includes(params.direction)) return false;\n }\n if (params.statistical_test !== undefined) {\n if (!['t_test', 'mann_whitney_u', 'chi_squared', 'auto'].includes(params.statistical_test))\n return false;\n }\n return true;\n },\n composesWith: [\n '@tradeable',\n '@depreciating',\n '@bonding_curved',\n '@taxable_wealth',\n '@pid_controlled',\n ],\n compiler_hints: {\n requires_runtime: [\n 'SimulationRuntime.runExperiment',\n 'SimulationRuntime.collectMetrics',\n 'SimulationRuntime.runStatisticalTest',\n 'SimulationRuntime.exportResults',\n ],\n thread_safety: 'worker_thread',\n performance_budget_ms: 300000, // Experiment budget, not per-frame\n batch_mode: true,\n },\n },\n};\n\n// =============================================================================\n// TRAIT UTILITIES\n// =============================================================================\n\n/**\n * Get all simulation trait names.\n */\nexport function getSimulationTraitNames(): string[] {\n return Object.keys(SimulationLabTraits).map((k) => SimulationLabTraits[k].name);\n}\n\n/**\n * Look up a simulation trait definition by name.\n */\nexport function getSimulationTrait(name: string): SimulationTraitDefinition | undefined {\n const key = name.startsWith('@') ? name.slice(1) : name;\n return SimulationLabTraits[key];\n}\n\nexport default SimulationLabTraits;\n","/**\n * @holoscript/std - Standard Library for HoloScript Plus\n *\n * Provides core types, math utilities, collections, string operations,\n * time management, spatial math, physics primitives, materials, and events\n * for HoloScript Plus programs.\n *\n * @example\n * ```hsplus\n * import { Vec3, createPBRMaterial, EventBus } from \"@holoscript/std\";\n *\n * let position = Vec3(0, 1, 0);\n * let steel = createPBRMaterial(\"Steel\", \"metal\");\n * let bus = new EventBus();\n * ```\n */\n\n// Re-export everything from types.js\nexport * from './types.js';\n\n// Spatial math (v4.2)\nexport {\n Vec3,\n Quaternion,\n Transform,\n Ray,\n AABB,\n distance,\n lerp as spatialLerp,\n clamp as spatialClamp,\n degToRad as spatialDegToRad,\n radToDeg as spatialRadToDeg,\n} from './spatial.js';\n\n// Physics primitives (v4.2)\nexport {\n createBoxCollider,\n createSphereCollider,\n createCapsuleCollider,\n createRigidbody,\n} from './physics.js';\nexport type {\n ColliderConfig,\n ColliderShapeType,\n RigidbodyConfig,\n ForceFieldConfig,\n ForceFieldType,\n JointConfig,\n JointType,\n RaycastHit,\n} from './physics.js';\n\n// Materials (v4.2)\nexport { MATERIAL_PRESETS, createPBRMaterial } from './materials.js';\nexport type { PBRMaterial, UnlitMaterial, TextureMapType, TextureConfig } from './materials.js';\n\n// Events (v4.2)\nexport { EventBus } from './events.js';\nexport type { EventHandler } from './events.js';\n\n// Math utilities - export objects from math.ts\nexport {\n // Constants\n PI,\n TAU,\n HALF_PI,\n EPSILON,\n DEG_TO_RAD,\n RAD_TO_DEG,\n\n // Basic math functions\n clamp,\n lerp,\n inverseLerp,\n remap,\n smoothstep,\n smootherstep,\n sign,\n fract,\n mod,\n step,\n degToRad,\n radToDeg,\n\n // Math utility objects (access methods like vec2Math.add(), vec3Math.cross(), etc.)\n vec2Math,\n vec3Math,\n quatMath,\n aabbMath,\n noise,\n random,\n} from './math.js';\n\n// Re-export with alternate names for convenience\nexport { degToRad as toRadians, radToDeg as toDegrees } from './math.js';\n\n// Collections\nexport {\n List,\n HoloMap,\n HoloSet,\n HoloMap as Map,\n HoloSet as Set,\n SpatialGrid,\n PriorityQueue,\n} from './collections.js';\n\n// String utilities\nexport {\n isBlank,\n isNotBlank,\n capitalize,\n titleCase,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n constantCase,\n padLeft,\n padRight,\n center,\n truncate,\n truncateMiddle,\n repeat,\n reverse,\n count,\n containsIgnoreCase,\n startsWithIgnoreCase,\n endsWithIgnoreCase,\n removeWhitespace,\n collapseWhitespace,\n removePrefix,\n removeSuffix,\n wrap as wrapString,\n unwrap,\n lines,\n words,\n chars,\n join,\n format,\n formatNumber,\n numberWithCommas,\n formatBytes,\n formatDuration,\n escapeHtml,\n unescapeHtml,\n escapeRegex,\n slugify,\n isValidIdentifier,\n isNumeric,\n isAlphanumeric,\n isAlpha,\n randomString,\n uuid,\n indent,\n dedent,\n wordWrap,\n levenshtein,\n similarity,\n extractTraits,\n} from './string.js';\n\n// Economic primitives (v4.3)\nexport {\n // Tradeable\n generateTxHash,\n executeTrade,\n // Depreciation\n calculateDepreciation,\n depreciatedValue,\n isDestroyed,\n calculateRepairCost,\n DEFAULT_DEPRECIATION,\n // Bonding curves\n bondingCurvePrice,\n bondingCurveBuyCost,\n bondingCurveSellRefund,\n spatialPrice,\n DEFAULT_BONDING_CURVE,\n // Wealth taxation\n calculateTaxRate,\n calculateTaxAmount,\n calculateRedistribution,\n DEFAULT_WEALTH_TAX,\n // PID control\n createPIDState,\n updatePID,\n createDualLoopPIDState,\n updateDualLoopPID,\n DEFAULT_PID,\n // Faucet-sink tracking\n createFaucetSinkMetrics,\n recordFaucet,\n recordSink,\n resetMetricsPeriod,\n} from './traits/EconomicPrimitives.js';\nexport type {\n Currency,\n AgentID,\n EconomicResult,\n EconomicError,\n EconomicPermission,\n OwnershipRecord,\n TransferRecord,\n DepreciationConfig,\n BondingCurveType,\n BondingCurveConfig,\n WealthTaxConfig,\n PIDConfig,\n PIDState,\n DualLoopPIDConfig,\n DualLoopPIDState,\n FaucetSinkMetrics,\n} from './traits/EconomicPrimitives.js';\n\n// Economic traits (v4.3)\nexport {\n EconomicTraits,\n getEconomicTraitNames,\n getEconomicTrait,\n validateTraitComposition,\n getRequiredPermissions,\n} from './traits/EconomicTraits.js';\nexport type { EconomicTraitDefinition } from './traits/EconomicTraits.js';\n\n// SimulationLab primitives (v4.3)\nexport {\n // Statistics\n mean,\n variance,\n standardDeviation,\n standardError,\n cohensD,\n // Statistical tests\n tTest,\n oneSampleTTest,\n mannWhitneyU,\n chiSquaredTest,\n // Parameter sweeps\n expandSweep,\n generateSweepCombinations,\n isParameterRange,\n // Metric aggregation\n extractMetric,\n groupByParameter,\n summarizeMetrics,\n} from './traits/SimulationLabPrimitives.js';\nexport type {\n Hypothesis,\n HypothesisDirection,\n SimulationStatus,\n ParameterRange,\n ParameterSet,\n ParameterSweep,\n SimulationMetrics,\n StatisticalResult,\n ExperimentResult,\n} from './traits/SimulationLabPrimitives.js';\n\n// SimulationLab traits (v4.3)\nexport {\n SimulationLabTraits,\n getSimulationTraitNames,\n getSimulationTrait,\n} from './traits/SimulationLabTraits.js';\nexport type { SimulationTraitDefinition } from './traits/SimulationLabTraits.js';\n\n// Time utilities\nexport {\n now,\n hrTime,\n sleep,\n waitUntil,\n withTimeout,\n retry,\n debounce,\n throttle,\n measure,\n timed,\n Stopwatch,\n IntervalTimer,\n CountdownTimer,\n FrameTimer,\n schedule,\n scheduleInterval,\n scheduleFrame,\n createTicker,\n DateTime,\n} from './time.js';\n\n/**\n * Print to console (HoloScript standard output)\n */\nexport function print(...args: unknown[]): void {\n console.log(...args);\n}\n\n/**\n * Print error to console\n */\nexport function printError(...args: unknown[]): void {\n console.error(...args);\n}\n\n/**\n * Print warning to console\n */\nexport function printWarn(...args: unknown[]): void {\n console.warn(...args);\n}\n\n/**\n * Assert a condition is true\n */\nexport function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message ?? 'Assertion failed');\n }\n}\n\n/**\n * Assert a value is not null or undefined\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value is null or undefined');\n }\n}\n\n/**\n * Unreachable code marker (for exhaustiveness checking)\n */\nexport function unreachable(message?: string): never {\n throw new Error(message ?? 'Unreachable code reached');\n}\n\n/**\n * Todo marker (throws at runtime)\n */\nexport function todo(message?: string): never {\n throw new Error(`TODO: ${message ?? 'Not implemented'}`);\n}\n\n/**\n * Deep clone an object\n */\nexport function clone<T>(value: T): T {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(clone) as T;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n\n if (value instanceof Map) {\n return new Map([...value].map(([k, v]) => [clone(k), clone(v)])) as T;\n }\n\n if (value instanceof Set) {\n return new Set([...value].map(clone)) as T;\n }\n\n const result: Record<string, unknown> = {};\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = clone((value as Record<string, unknown>)[key]);\n }\n }\n return result as T;\n}\n\n/**\n * Deep equality check\n */\nexport function equals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n\n if (typeof a !== 'object') return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => equals(item, b[i]));\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !equals(value, b.get(key))) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) =>\n equals((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n}\n\n/**\n * Pipe a value through a series of functions\n */\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: (a: A) => B): B;\nexport function pipe<A, B, C>(value: A, fn1: (a: A) => B, fn2: (b: B) => C): C;\nexport function pipe<A, B, C, D>(value: A, fn1: (a: A) => B, fn2: (b: B) => C, fn3: (c: C) => D): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E\n): E;\nexport function pipe(value: unknown, ...fns: ((x: unknown) => unknown)[]): unknown {\n return fns.reduce((acc, fn) => fn(acc), value);\n}\n\n/**\n * Compose functions right to left\n */\nexport function compose<A>(): (a: A) => A;\nexport function compose<A, B>(fn1: (a: A) => B): (a: A) => B;\nexport function compose<A, B, C>(fn2: (b: B) => C, fn1: (a: A) => B): (a: A) => C;\nexport function compose<A, B, C, D>(\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => D;\nexport function compose(...fns: ((x: unknown) => unknown)[]): (x: unknown) => unknown {\n return (value: unknown) => fns.reduceRight((acc, fn) => fn(acc), value);\n}\n\n/**\n * Identity function\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n\n/**\n * No-operation function\n */\nexport function noop(): void {}\n\n/**\n * Create a constant function\n */\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,IAAM,OAAN,MAAM,MAAK;AAAA,EAChB,YACS,IAAY,GACZ,IAAY,GACZ,IAAY,GACnB;AAHO;AACA;AACA;AAAA,EACN;AAAA,EAEH,OAAO,OAAa;AAClB,WAAO,IAAI,MAAK,GAAG,GAAG,CAAC;AAAA,EACzB;AAAA,EACA,OAAO,MAAY;AACjB,WAAO,IAAI,MAAK,GAAG,GAAG,CAAC;AAAA,EACzB;AAAA,EACA,OAAO,KAAW;AAChB,WAAO,IAAI,MAAK,GAAG,GAAG,CAAC;AAAA,EACzB;AAAA,EACA,OAAO,OAAa;AAClB,WAAO,IAAI,MAAK,GAAG,IAAI,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO,UAAgB;AACrB,WAAO,IAAI,MAAK,GAAG,GAAG,EAAE;AAAA,EAC1B;AAAA,EACA,OAAO,QAAc;AACnB,WAAO,IAAI,MAAK,GAAG,GAAG,CAAC;AAAA,EACzB;AAAA,EAEA,IAAI,OAAmB;AACrB,WAAO,IAAI,MAAK,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC;AAAA,EACtE;AAAA,EACA,IAAI,OAAmB;AACrB,WAAO,IAAI,MAAK,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC;AAAA,EACtE;AAAA,EACA,IAAI,GAAiB;AACnB,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EACpD;AAAA,EACA,IAAI,GAAiB;AACnB,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EACpD;AAAA,EAEA,IAAI,OAAqB;AACvB,WAAO,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,EAC9D;AAAA,EACA,MAAM,OAAmB;AACvB,WAAO,IAAI;AAAA,MACT,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,MAClC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,MAClC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,EACtE;AAAA,EACA,gBAAwB;AACtB,WAAO,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,EAC3D;AAAA,EACA,YAAkB;AAChB,UAAM,IAAI,KAAK,OAAO;AACtB,WAAO,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,MAAK,KAAK;AAAA,EACzC;AAAA,EAEA,WAAW,OAAqB;AAC9B,WAAO,KAAK,IAAI,KAAK,EAAE,OAAO;AAAA,EAChC;AAAA,EACA,KAAK,OAAa,GAAiB;AACjC,WAAO,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;AAAA,EACxC;AAAA,EAEA,UAAoC;AAClC,WAAO,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAAA,EAChC;AAAA,EACA,OAAO,UAAU,KAAqB;AACpC,WAAO,IAAI,MAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAAA,EACvD;AAAA,EAEA,OAAO,OAAa,UAAU,MAAe;AAC3C,WACE,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,WAC7B,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,WAC7B,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI;AAAA,EAEjC;AAAA,EAEA,WAAmB;AACjB,WAAO,QAAQ,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,EAC7C;AACF;AAMO,IAAM,aAAN,MAAM,YAAW;AAAA,EACtB,YACS,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACX;AAJO;AACA;AACA;AACA;AAAA,EACN;AAAA,EAEH,OAAO,WAAuB;AAC5B,WAAO,IAAI,YAAW,GAAG,GAAG,GAAG,CAAC;AAAA,EAClC;AAAA,EAEA,OAAO,UAAU,GAAW,GAAW,GAAuB;AAC5D,UAAM,KAAK,KAAK,IAAI,IAAI,GAAG,GACzB,KAAK,KAAK,IAAI,IAAI,GAAG;AACvB,UAAM,KAAK,KAAK,IAAI,IAAI,GAAG,GACzB,KAAK,KAAK,IAAI,IAAI,GAAG;AACvB,UAAM,KAAK,KAAK,IAAI,IAAI,GAAG,GACzB,KAAK,KAAK,IAAI,IAAI,GAAG;AACvB,WAAO,IAAI;AAAA,MACT,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACzB,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACzB,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MACzB,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,MAAY,OAA2B;AAC1D,UAAM,OAAO,QAAQ;AACrB,UAAM,IAAI,KAAK,IAAI,IAAI;AACvB,UAAM,IAAI,KAAK,UAAU;AACzB,WAAO,IAAI,YAAW,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC;AAAA,EACjE;AAAA,EAEA,SAAS,OAA+B;AACtC,WAAO,IAAI;AAAA,MACT,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,MACxE,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,MACxE,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,MACxE,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,WAAW,GAAe;AACxB,UAAM,IAAI,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACzC,UAAM,IAAI,KAAK;AACf,WAAO,EACJ,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,EAChB,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAC3B,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAmB,GAAuB;AAC9C,QAAI,MAAM,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM;AAClF,UAAM,MAAM,MAAM;AAClB,QAAI,IAAK,OAAM,CAAC;AAChB,QAAI,MAAM,QAAQ;AAEhB,YAAM,IAAI,IAAI;AAAA,QACZ,KAAK,IAAI,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAAA,QAChD,KAAK,IAAI,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAAA,QAChD,KAAK,IAAI,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAAA,QAChD,KAAK,IAAI,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAAA,MAClD;AACA,YAAM,MAAM,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE,aAAO,IAAI,YAAW,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,GAAG;AAAA,IAClE;AACA,UAAM,QAAQ,KAAK,KAAK,GAAG;AAC3B,UAAM,WAAW,KAAK,IAAI,KAAK;AAC/B,UAAM,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AACtC,UAAM,IAAK,KAAK,IAAI,IAAI,KAAK,IAAI,YAAa,MAAM,KAAK;AACzD,WAAO,IAAI;AAAA,MACT,IAAI,KAAK,IAAI,IAAI,MAAM;AAAA,MACvB,IAAI,KAAK,IAAI,IAAI,MAAM;AAAA,MACvB,IAAI,KAAK,IAAI,IAAI,MAAM;AAAA,MACvB,IAAI,KAAK,IAAI,IAAI,MAAM;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,YAAwB;AACtB,UAAM,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAC3F,WAAO,IAAI,YAAW,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG;AAAA,EAC9E;AAAA,EAEA,UAAgB;AACd,UAAM,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAClD,UAAM,OAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACtD,UAAM,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAClD,UAAM,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAClD,UAAM,OAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACtD,WAAO,IAAI;AAAA,MACT,KAAK,MAAM,MAAM,IAAI;AAAA,MACrB,KAAK,IAAI,IAAI,KAAK,IAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAM,IAAI,KAAK,KAAK,IAAI;AAAA,MACtE,KAAK,MAAM,MAAM,IAAI;AAAA,IACvB;AAAA,EACF;AACF;AAMO,IAAM,YAAN,MAAM,WAAU;AAAA,EACrB,YACS,WAAiB,KAAK,KAAK,GAC3B,WAAuB,WAAW,SAAS,GAC3C,QAAc,KAAK,IAAI,GAC9B;AAHO;AACA;AACA;AAAA,EACN;AAAA,EAEH,OAAO,WAAsB;AAC3B,WAAO,IAAI,WAAU;AAAA,EACvB;AAAA,EAEA,eAAe,OAAmB;AAChC,UAAM,SAAS,IAAI,KAAK,MAAM,IAAI,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,CAAC;AAC9F,WAAO,KAAK,SAAS,WAAW,MAAM,EAAE,IAAI,KAAK,QAAQ;AAAA,EAC3D;AAAA,EAEA,mBAAmB,KAAiB;AAClC,WAAO,KAAK,SAAS,WAAW,GAAG;AAAA,EACrC;AACF;AAMO,IAAM,MAAN,MAAU;AAAA,EACf,YACS,QACA,WACP;AAFO;AACA;AAAA,EACN;AAAA,EAEH,QAAQ,GAAiB;AACvB,WAAO,KAAK,OAAO,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC;AAAA,EAC9C;AACF;AAEO,IAAM,OAAN,MAAW;AAAA,EAChB,YACS,KACA,KACP;AAFO;AACA;AAAA,EACN;AAAA,EAEH,SAAS,OAAsB;AAC7B,WACE,MAAM,KAAK,KAAK,IAAI,KACpB,MAAM,KAAK,KAAK,IAAI,KACpB,MAAM,KAAK,KAAK,IAAI,KACpB,MAAM,KAAK,KAAK,IAAI,KACpB,MAAM,KAAK,KAAK,IAAI,KACpB,MAAM,KAAK,KAAK,IAAI;AAAA,EAExB;AAAA,EAEA,WAAW,OAAsB;AAC/B,WACE,KAAK,IAAI,KAAK,MAAM,IAAI,KACxB,KAAK,IAAI,KAAK,MAAM,IAAI,KACxB,KAAK,IAAI,KAAK,MAAM,IAAI,KACxB,KAAK,IAAI,KAAK,MAAM,IAAI,KACxB,KAAK,IAAI,KAAK,MAAM,IAAI,KACxB,KAAK,IAAI,KAAK,MAAM,IAAI;AAAA,EAE5B;AAAA,EAEA,SAAe;AACb,WAAO,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC;AAAA,EACrC;AAAA,EACA,OAAa;AACX,WAAO,KAAK,IAAI,IAAI,KAAK,GAAG;AAAA,EAC9B;AAAA,EAEA,cAAcA,MAAyB;AACrC,QAAI,QAAQ,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACvD,QAAI,QAAQ,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACvD,QAAI,OAAO,KAAM,EAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI;AAE3C,QAAI,SAAS,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACxD,QAAI,SAAS,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACxD,QAAI,QAAQ,MAAO,EAAC,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK;AAEjD,QAAI,OAAO,SAAS,QAAQ,KAAM,QAAO;AACzC,WAAO,KAAK,IAAI,MAAM,KAAK;AAC3B,WAAO,KAAK,IAAI,MAAM,KAAK;AAE3B,QAAI,SAAS,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACxD,QAAI,SAAS,KAAK,IAAI,IAAIA,KAAI,OAAO,KAAKA,KAAI,UAAU;AACxD,QAAI,QAAQ,MAAO,EAAC,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK;AAEjD,QAAI,OAAO,SAAS,QAAQ,KAAM,QAAO;AACzC,WAAO,KAAK,IAAI,MAAM,KAAK;AAAA,EAC7B;AACF;AAMO,SAAS,SAAS,GAAS,GAAiB;AACjD,SAAO,EAAE,WAAW,CAAC;AACvB;AACO,SAASC,MAAK,GAAW,GAAW,GAAmB;AAC5D,SAAO,KAAK,IAAI,KAAK;AACvB;AACO,SAASC,OAAM,GAAW,KAAa,KAAqB;AACjE,SAAO,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG;AACvC;AACO,SAASC,UAAS,KAAqB;AAC5C,SAAO,OAAO,KAAK,KAAK;AAC1B;AACO,SAASC,UAAS,KAAqB;AAC5C,SAAO,OAAO,MAAM,KAAK;AAC3B;;;AC1RO,SAAS,kBACd,aACA,SACgB;AAChB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEO,SAAS,qBACd,QACA,SACgB;AAChB,SAAO,EAAE,OAAO,UAAU,WAAW,OAAO,UAAU,KAAK,aAAa,GAAK,QAAQ,GAAG,QAAQ;AAClG;AAEO,SAAS,sBACd,QACA,QACA,SACgB;AAChB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAgBO,SAAS,gBAAgB,MAAc,SAAqD;AACjG,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,gBAAgB,CAAC,OAAO,OAAO,KAAK;AAAA,IACpC,gBAAgB,CAAC,OAAO,OAAO,KAAK;AAAA,IACpC,aAAa;AAAA,IACb,GAAG;AAAA,EACL;AACF;;;AChDO,IAAM,mBAAyD;AAAA,EACpE,OAAO,EAAE,WAAW,KAAK,UAAU,EAAI;AAAA,EACvC,MAAM,EAAE,WAAW,MAAM,UAAU,GAAK,WAAW,UAAU;AAAA,EAC7D,OAAO,EAAE,WAAW,MAAM,UAAU,GAAK,SAAS,KAAK,KAAK,IAAI;AAAA,EAChE,SAAS,EAAE,WAAW,KAAK,UAAU,EAAI;AAAA,EACzC,UAAU,EAAE,WAAW,MAAM,UAAU,GAAK,WAAW,UAAU;AAAA,EACjE,QAAQ,EAAE,WAAW,KAAK,UAAU,GAAK,YAAY,IAAI;AAAA,EACzD,OAAO,EAAE,WAAW,MAAM,UAAU,GAAK,SAAS,KAAK,KAAK,KAAK;AAAA,EACjE,QAAQ,EAAE,WAAW,MAAM,UAAU,GAAK,WAAW,UAAU;AAAA,EAC/D,QAAQ,EAAE,WAAW,KAAK,UAAU,GAAK,WAAW,UAAU;AAAA,EAC9D,MAAM,EAAE,WAAW,KAAK,UAAU,GAAK,YAAY,IAAI;AAAA,EACvD,SAAS,EAAE,WAAW,KAAK,UAAU,GAAK,WAAW,WAAW,YAAY,IAAI;AAAA,EAChF,QAAQ,EAAE,WAAW,MAAM,UAAU,GAAK,WAAW,UAAU;AAAA,EAC/D,MAAM,EAAE,WAAW,KAAK,UAAU,GAAK,WAAW,UAAU;AAAA,EAC5D,QAAQ,EAAE,WAAW,KAAK,UAAU,GAAK,WAAW,UAAU;AAAA,EAC9D,KAAK,EAAE,WAAW,KAAK,UAAU,GAAK,SAAS,KAAK,KAAK,KAAK;AAChE;AAEO,SAAS,kBACd,MACA,QACA,WACa;AACb,QAAM,OAAO,SAAS,iBAAiB,MAAM,IAAI,CAAC;AAClD,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;;;AClEO,IAAM,WAAN,MAAe;AAAA,EACZ,YAAqC,oBAAI,IAAI;AAAA,EAC7C,oBAAgC,CAAC;AAAA;AAAA,EAGzC,GAAY,OAAe,SAAsC;AAC/D,QAAI,CAAC,KAAK,UAAU,IAAI,KAAK,EAAG,MAAK,UAAU,IAAI,OAAO,CAAC,CAAC;AAC5D,UAAM,WAAqB,EAAE,SAAS,MAAM,MAAM;AAClD,SAAK,UAAU,IAAI,KAAK,EAAG,KAAK,QAAQ;AACxC,WAAO,MAAM,KAAK,IAAI,OAAO,OAAO;AAAA,EACtC;AAAA;AAAA,EAGA,KAAc,OAAe,SAAsC;AACjE,QAAI,CAAC,KAAK,UAAU,IAAI,KAAK,EAAG,MAAK,UAAU,IAAI,OAAO,CAAC,CAAC;AAC5D,UAAM,WAAqB,EAAE,SAAS,MAAM,KAAK;AACjD,SAAK,UAAU,IAAI,KAAK,EAAG,KAAK,QAAQ;AACxC,WAAO,MAAM,KAAK,IAAI,OAAO,OAAO;AAAA,EACtC;AAAA;AAAA,EAGA,IAAI,OAAe,SAA6B;AAC9C,UAAM,OAAO,KAAK,UAAU,IAAI,KAAK;AACrC,QAAI,CAAC,KAAM;AACX,SAAK,UAAU;AAAA,MACb;AAAA,MACA,KAAK,OAAO,CAAC,MAAM,EAAE,YAAY,OAAO;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA,EAGA,KAAc,OAAe,MAAgB;AAE3C,UAAM,OAAO,KAAK,UAAU,IAAI,KAAK;AACrC,QAAI,MAAM;AACR,YAAM,YAAwB,CAAC;AAC/B,iBAAW,KAAK,MAAM;AACpB,UAAE,QAAQ,IAAI;AACd,YAAI,CAAC,EAAE,KAAM,WAAU,KAAK,CAAC;AAAA,MAC/B;AACA,WAAK,UAAU,IAAI,OAAO,SAAS;AAAA,IACrC;AAEA,eAAW,KAAK,KAAK,mBAAmB;AACtC,QAAE,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAiE;AACrE,UAAM,WAAqB,EAAE,SAAS,MAAM,MAAM;AAClD,SAAK,kBAAkB,KAAK,QAAQ;AACpC,WAAO,MAAM;AACX,WAAK,oBAAoB,KAAK,kBAAkB,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,UAAU,MAAM;AACrB,SAAK,oBAAoB,CAAC;AAAA,EAC5B;AAAA;AAAA,EAGA,cAAc,OAAwB;AACpC,QAAI,MAAO,SAAQ,KAAK,UAAU,IAAI,KAAK,KAAK,CAAC,GAAG;AACpD,QAAI,QAAQ,KAAK,kBAAkB;AACnC,eAAW,CAAC,EAAE,IAAI,KAAK,KAAK,UAAW,UAAS,KAAK;AACrD,WAAO;AAAA,EACT;AACF;;;AC+CO,SAAS,iBAAiB,OAAgD;AAC/E,SAAO,SAAS,SAAS,SAAS,SAAS,UAAU;AACvD;AAKO,SAAS,YAAY,OAAiC;AAC3D,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAQ,MAAuB,OAAO,MAAM;AAAA,EAC9C;AAEA,QAAM,QAAQ;AACd,MAAI,MAAM,QAAQ,EAAG,QAAO,CAAC,MAAM,GAAG;AACtC,MAAI,MAAM,MAAM,MAAM,IAAK,QAAO,CAAC;AAEnC,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,OAAO,MAAO,KAAK,MAAM,MAAM;AAC5E,WAAO,KAAK,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI;AAAA,EACzC;AACA,SAAO;AACT;AAMO,SAAS,0BAA0B,QAAoD;AAC5F,MAAI,OAAO,WAAW,EAAG,QAAO,CAAC,CAAC,CAAC;AAEnC,QAAM,WAAW,OAAO,IAAI,CAAC,OAAO;AAAA,IAClC,MAAM,EAAE;AAAA,IACR,QAAQ,YAAY,CAAC;AAAA,EACvB,EAAE;AAGF,MAAI,eAAyC,CAAC,CAAC,CAAC;AAEhD,aAAW,EAAE,MAAM,OAAO,KAAK,UAAU;AACvC,UAAM,kBAA4C,CAAC;AACnD,eAAW,SAAS,cAAc;AAChC,iBAAW,OAAO,QAAQ;AACxB,wBAAgB,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAAA,MAChD;AAAA,IACF;AACA,mBAAe;AAAA,EACjB;AAEA,SAAO;AACT;AASO,SAAS,KAAK,MAAwB;AAC3C,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,KAAK,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK;AACpD;AAKO,SAAS,SAAS,MAAwB;AAC/C,MAAI,KAAK,SAAS,EAAG,QAAO;AAC5B,QAAM,IAAI,KAAK,IAAI;AACnB,QAAM,eAAe,KAAK,OAAO,CAAC,KAAK,MAAM,OAAO,IAAI,MAAM,GAAG,CAAC;AAClE,SAAO,gBAAgB,KAAK,SAAS;AACvC;AAKO,SAAS,kBAAkB,MAAwB;AACxD,SAAO,KAAK,KAAK,SAAS,IAAI,CAAC;AACjC;AAKO,SAAS,cAAc,MAAwB;AACpD,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,kBAAkB,IAAI,IAAI,KAAK,KAAK,KAAK,MAAM;AACxD;AAMO,SAAS,QAAQ,QAAkB,QAA0B;AAClE,MAAI,OAAO,SAAS,KAAK,OAAO,SAAS,EAAG,QAAO;AAEnD,QAAM,KAAK,KAAK,MAAM;AACtB,QAAM,KAAK,KAAK,MAAM;AACtB,QAAM,KAAK,SAAS,MAAM;AAC1B,QAAM,KAAK,SAAS,MAAM;AAG1B,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,QAAM,cAAc,KAAK,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AAC/D,QAAM,YAAY,KAAK,KAAK,SAAS;AAErC,MAAI,cAAc,EAAG,QAAO;AAC5B,UAAQ,KAAK,MAAM;AACrB;AAQO,SAAS,MACd,QACA,QACA,QAAgB,MAChB,YAAiC,aACd;AACnB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAElB,MAAI,KAAK,KAAK,KAAK,GAAG;AACpB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,KAAK,KAAK,MAAM;AACtB,QAAM,KAAK,KAAK,MAAM;AACtB,QAAM,KAAK,SAAS,MAAM;AAC1B,QAAM,KAAK,SAAS,MAAM;AAC1B,QAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAEtC,MAAI,OAAO,GAAG;AACZ,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ,OAAO,KAAK,IAAI;AAAA,MACxB,aAAa,OAAO;AAAA,MACpB,oBAAoB,CAAC,KAAK,IAAI,KAAK,EAAE;AAAA,MACrC,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,KAAK,KAAK,MAAM;AAGtB,QAAM,OAAO,KAAK,KAAK,KAAK,OAAO;AACnC,QAAM,OAAO,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK;AAC/D,QAAM,KAAK,MAAM;AAGjB,QAAM,aAAa,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE;AAC9C,MAAI;AAEJ,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,eAAS,IAAI,IAAI,aAAa,IAAI,IAAI,aAAa;AACnD;AAAA,IACF,KAAK;AACH,eAAS,IAAI,IAAI,aAAa,IAAI,IAAI,aAAa;AACnD;AAAA,IACF,KAAK;AACH,eAAS,IAAI;AACb;AAAA,IACF;AACE,eAAS;AAAA,EACb;AAGA,QAAM,QAAQ,cAAc,OAAO,EAAE;AACrC,QAAM,OAAO,KAAK;AAClB,QAAM,KAAuB,CAAC,OAAO,QAAQ,IAAI,OAAO,QAAQ,EAAE;AAElE,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,aAAa,SAAS;AAAA,IACtB,oBAAoB;AAAA,IACpB,YAAY,QAAQ,QAAQ,MAAM;AAAA,IAClC,UAAU;AAAA,IACV,YAAY,KAAK;AAAA,EACnB;AACF;AAKO,SAAS,eACd,MACA,gBACA,QAAgB,MAChB,YAAiC,aACd;AACnB,QAAM,IAAI,KAAK;AAEf,MAAI,IAAI,GAAG;AACT,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,IAAI,KAAK,IAAI;AACnB,QAAM,KAAK,cAAc,IAAI;AAE7B,MAAI,OAAO,GAAG;AACZ,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ,MAAM,iBAAiB,IAAI;AAAA,MACnC,aAAa,MAAM;AAAA,MACnB,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,KAAK,IAAI,kBAAkB;AACjC,QAAM,KAAK,IAAI;AAEf,QAAM,aAAa,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE;AAC9C,MAAI;AAEJ,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,eAAS,IAAI,IAAI,aAAa,IAAI,IAAI,aAAa;AACnD;AAAA,IACF,KAAK;AACH,eAAS,IAAI,IAAI,aAAa,IAAI,IAAI,aAAa;AACnD;AAAA,IACF;AACE,eAAS;AAAA,EACb;AAEA,QAAM,QAAQ,cAAc,OAAO,EAAE;AACrC,QAAM,KAAuB,CAAC,IAAI,QAAQ,IAAI,IAAI,QAAQ,EAAE;AAE5D,QAAM,KAAK,kBAAkB,IAAI;AACjC,QAAM,aAAa,KAAK,KAAK,IAAI,kBAAkB,KAAK;AAExD,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,aAAa,SAAS;AAAA,IACtB,oBAAoB;AAAA,IACpB;AAAA,IACA,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF;AAMO,SAAS,aACd,QACA,QACA,QAAgB,MACG;AACnB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAElB,MAAI,OAAO,KAAK,OAAO,GAAG;AACxB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAGA,MAAI,KAAK;AACT,aAAW,KAAK,QAAQ;AACtB,eAAW,KAAK,QAAQ;AACtB,UAAI,IAAI,EAAG;AAAA,eACF,MAAM,EAAG,OAAM;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,KAAK,KAAK,KAAK;AACrB,QAAM,IAAI,KAAK,IAAI,IAAI,EAAE;AAGzB,QAAM,QAAS,KAAK,KAAM;AAC1B,QAAM,SAAS,KAAK,KAAM,KAAK,MAAM,KAAK,KAAK,KAAM,EAAE;AAEvD,MAAI,WAAW,GAAG;AAChB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,KAAK,IAAI,SAAS;AACxB,QAAM,SAAS,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AAGzC,QAAM,aAAa,IAAK,IAAI,KAAM,KAAK;AAEvC,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,aAAa,SAAS;AAAA,IACtB,oBAAoB,CAAC,GAAG,CAAC;AAAA;AAAA,IACzB;AAAA,IACA,UAAU;AAAA,IACV,YAAY,KAAK;AAAA,EACnB;AACF;AAMO,SAAS,eACd,UACA,UACA,QAAgB,MACG;AACnB,MAAI,SAAS,WAAW,SAAS,UAAU,SAAS,WAAW,GAAG;AAChE,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AAEA,MAAI,QAAQ;AACZ,MAAI,gBAAgB;AAEpB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,SAAS,CAAC,KAAK,EAAG;AACtB,cAAU,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC;AACtD,qBAAiB,SAAS,CAAC;AAAA,EAC7B;AAEA,QAAM,KAAK,SAAS,SAAS;AAC7B,MAAI,MAAM,GAAG;AACX,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,oBAAoB,CAAC,GAAG,CAAC;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AAGA,QAAM,SAAS,iBAAiB,OAAO,EAAE;AAGzC,QAAM,IAAI,SAAS;AACnB,QAAM,aAAa,gBAAgB,IAAI,KAAK,KAAK,SAAS,iBAAiB,IAAI,GAAG,IAAI;AAEtF,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,aAAa,SAAS;AAAA,IACtB,oBAAoB,CAAC,GAAG,CAAC;AAAA,IACzB;AAAA,IACA,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF;AASO,SAAS,cAAc,SAA8B,YAA8B;AACxF,SAAO,QAAQ,OAAO,CAAC,MAAM,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC;AACtF;AAKO,SAAS,iBACd,SACA,WACkC;AAClC,QAAM,SAAS,oBAAI,IAAiC;AACpD,aAAW,KAAK,SAAS;AACvB,UAAM,MAAM,EAAE,OAAO,SAAS;AAC9B,QAAI,QAAQ,OAAW;AACvB,QAAI,CAAC,OAAO,IAAI,GAAG,EAAG,QAAO,IAAI,KAAK,CAAC,CAAC;AACxC,WAAO,IAAI,GAAG,EAAG,KAAK,CAAC;AAAA,EACzB;AACA,SAAO;AACT;AAKO,SAAS,iBACd,SACA,YACoE;AACpE,QAAM,SAAS,cAAc,SAAS,UAAU;AAChD,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE;AAAA,EACjD;AACA,SAAO;AAAA,IACL,MAAM,KAAK,MAAM;AAAA,IACjB,KAAK,kBAAkB,MAAM;AAAA,IAC7B,KAAK,KAAK,IAAI,GAAG,MAAM;AAAA,IACvB,KAAK,KAAK,IAAI,GAAG,MAAM;AAAA,IACvB,GAAG,OAAO;AAAA,EACZ;AACF;AAUA,SAAS,UAAU,GAAmB;AACpC,MAAI,IAAI,GAAI,QAAO;AACnB,MAAI,IAAI,EAAG,QAAO;AAElB,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,IAAI;AAEV,QAAMC,QAAO,IAAI,IAAI,KAAK;AAC1B,QAAM,OAAO,KAAK,IAAI,CAAC;AACvB,QAAM,IAAI,KAAO,IAAM,IAAI;AAC3B,QAAM,IAAI,QAAU,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAK,CAAC,OAAO,OAAQ,CAAC;AAEhG,SAAO,OAAO,IAAMA,QAAO;AAC7B;AAMA,SAAS,YAAY,MAAc,IAAoB;AACrD,MAAI,MAAM,EAAG,QAAO;AAEpB,QAAM,IAAK,QAAQ,IAAI,KAAK,IAAI,OAAQ,KAAK,KAAK,IAAK,OAAO,QAAS,IAAI,GAAG;AAC9E,SAAO,KAAK,IAAI,UAAU,CAAC;AAC7B;AAKA,SAAS,cAAc,OAAe,IAAoB;AAExD,QAAM,IAAI,IAAI,QAAQ;AAEtB,QAAM,IAAI,IAAI;AACd,QAAM,IAAI,IAAI;AACd,MAAI,IACD,KAAK,gBAAgB,KAAK,kBAAkB,KAAK,iBAAiB,IAAI,sBACtE,IAAI,KAAK,gBAAgB,KAAK,iBAAiB,KAAK,kBAAkB,IAAI;AAG7E,QAAM,MAAM,KAAK,IAAI,MAAM,IAAI;AAC/B,QAAM,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK;AAC3D,MAAI,IAAI,KAAK;AAEb,SAAO,KAAK,IAAI,CAAC;AACnB;AAKA,SAAS,iBAAiB,OAAe,IAAoB;AAC3D,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,SAAS,EAAG,QAAO;AAEvB,QAAM,IAAI,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI;AACtD,QAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,GAAG;AACpC,SAAO,IAAI,UAAU,IAAI,KAAK;AAChC;;;ACnmBO,IAAM,sBAAiE;AAAA,EAC5E,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,aACE;AAAA,IAIF,QAAQ;AAAA,MACN,YAAY;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,wBAAwB;AAAA,QACtB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,WAAW;AAAA,QACT,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,YAAY;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,kBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aACE;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aACE;AAAA,MAEJ;AAAA,MACA,sBAAsB;AAAA,QACpB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,MACA,yBAAyB;AAAA,QACvB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aACE;AAAA,MACJ;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aACE;AAAA,MAEJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,WAAW,CAAC,WAAW;AACrB,UAAI,CAAC,OAAO,cAAc,OAAO,OAAO,eAAe,SAAU,QAAO;AACxE,UAAI,CAAC,OAAO,WAAW,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,OAAO,QAAQ,WAAW;AACjF,eAAO;AACT,UAAI,OAAO,WAAW,WAAc,OAAO,SAAS,KAAK,OAAO,SAAS;AACvE,eAAO;AACT,UACE,OAAO,qBAAqB,WAC3B,OAAO,oBAAoB,KAAK,OAAO,oBAAoB;AAE5D,eAAO;AACT,UAAI,OAAO,cAAc,QAAW;AAClC,YAAI,CAAC,CAAC,WAAW,QAAQ,aAAa,OAAO,EAAE,SAAS,OAAO,SAAS,EAAG,QAAO;AAAA,MACpF;AACA,UAAI,OAAO,qBAAqB,QAAW;AACzC,YAAI,CAAC,CAAC,UAAU,kBAAkB,eAAe,MAAM,EAAE,SAAS,OAAO,gBAAgB;AACvF,iBAAO;AAAA,MACX;AACA,aAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,MACd,kBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,eAAe;AAAA,MACf,uBAAuB;AAAA;AAAA,MACvB,YAAY;AAAA,IACd;AAAA,EACF;AACF;AASO,SAAS,0BAAoC;AAClD,SAAO,OAAO,KAAK,mBAAmB,EAAE,IAAI,CAAC,MAAM,oBAAoB,CAAC,EAAE,IAAI;AAChF;AAKO,SAAS,mBAAmB,MAAqD;AACtF,QAAM,MAAM,KAAK,WAAW,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI;AACnD,SAAO,oBAAoB,GAAG;AAChC;;;ACyGO,SAAS,SAAS,MAAuB;AAC9C,UAAQ,IAAI,GAAG,IAAI;AACrB;AAKO,SAAS,cAAc,MAAuB;AACnD,UAAQ,MAAM,GAAG,IAAI;AACvB;AAKO,SAAS,aAAa,MAAuB;AAClD,UAAQ,KAAK,GAAG,IAAI;AACtB;AAKO,SAAS,OAAO,WAAoB,SAAqC;AAC9E,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,WAAW,kBAAkB;AAAA,EAC/C;AACF;AAKO,SAAS,cACd,OACA,SACoB;AACpB,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,UAAM,IAAI,MAAM,WAAW,4BAA4B;AAAA,EACzD;AACF;AAKO,SAAS,YAAY,SAAyB;AACnD,QAAM,IAAI,MAAM,WAAW,0BAA0B;AACvD;AAKO,SAAS,KAAK,SAAyB;AAC5C,QAAM,IAAI,MAAM,SAAS,WAAW,iBAAiB,EAAE;AACzD;AAKO,SAAS,MAAS,OAAa;AACpC,MAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB;AAEA,MAAI,iBAAiB,MAAM;AACzB,WAAO,IAAI,KAAK,MAAM,QAAQ,CAAC;AAAA,EACjC;AAEA,MAAI,iBAAiB,KAAK;AACxB,WAAO,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAAA,EACjE;AAEA,MAAI,iBAAiB,KAAK;AACxB,WAAO,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,KAAK,CAAC;AAAA,EACtC;AAEA,QAAM,SAAkC,CAAC;AACzC,aAAW,OAAO,OAAO;AACvB,QAAI,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,GAAG;AACpD,aAAO,GAAG,IAAI,MAAO,MAAkC,GAAG,CAAC;AAAA,IAC7D;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,OAAO,GAAY,GAAqB;AACtD,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,MAAM,QAAQ,MAAM,KAAM,QAAO;AACrC,MAAI,OAAO,MAAM,OAAO,EAAG,QAAO;AAElC,MAAI,OAAO,MAAM,SAAU,QAAO;AAElC,MAAI,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,GAAG;AACxC,QAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,WAAO,EAAE,MAAM,CAAC,MAAM,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC;AAAA,EAChD;AAEA,MAAI,aAAa,QAAQ,aAAa,MAAM;AAC1C,WAAO,EAAE,QAAQ,MAAM,EAAE,QAAQ;AAAA,EACnC;AAEA,MAAI,aAAa,OAAO,aAAa,KAAK;AACxC,QAAI,EAAE,SAAS,EAAE,KAAM,QAAO;AAC9B,eAAW,CAAC,KAAK,KAAK,KAAK,GAAG;AAC5B,UAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,OAAO,OAAO,EAAE,IAAI,GAAG,CAAC,EAAG,QAAO;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO,aAAa,KAAK;AACxC,QAAI,EAAE,SAAS,EAAE,KAAM,QAAO;AAC9B,eAAW,SAAS,GAAG;AACrB,UAAI,CAAC,EAAE,IAAI,KAAK,EAAG,QAAO;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,QAAM,QAAQ,OAAO,KAAK,CAAW;AACrC,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,SAAO,MAAM;AAAA,IAAM,CAAC,QAClB,OAAQ,EAA8B,GAAG,GAAI,EAA8B,GAAG,CAAC;AAAA,EACjF;AACF;AAgBO,SAAS,KAAK,UAAmB,KAA2C;AACjF,SAAO,IAAI,OAAO,CAAC,KAAK,OAAO,GAAG,GAAG,GAAG,KAAK;AAC/C;AAaO,SAAS,WAAW,KAA2D;AACpF,SAAO,CAAC,UAAmB,IAAI,YAAY,CAAC,KAAK,OAAO,GAAG,GAAG,GAAG,KAAK;AACxE;AAKO,SAAS,SAAY,OAAa;AACvC,SAAO;AACT;AAKO,SAAS,OAAa;AAAC;AAKvB,SAAS,SAAY,OAAmB;AAC7C,SAAO,MAAM;AACf;","names":["ray","lerp","clamp","degToRad","radToDeg","sign"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @holoscript/std — Materials Module
|
|
3
|
+
*
|
|
4
|
+
* Provides PBR material types, texture map definitions, and material presets.
|
|
5
|
+
* Maps directly to HoloScript material_block grammar constructs.
|
|
6
|
+
*
|
|
7
|
+
* @version 0.2.0
|
|
8
|
+
* @module @holoscript/std/materials
|
|
9
|
+
*/
|
|
10
|
+
export interface PBRMaterial {
|
|
11
|
+
name: string;
|
|
12
|
+
baseColor: string;
|
|
13
|
+
roughness: number;
|
|
14
|
+
metallic: number;
|
|
15
|
+
emissiveColor?: string;
|
|
16
|
+
emissiveIntensity?: number;
|
|
17
|
+
opacity?: number;
|
|
18
|
+
ior?: number;
|
|
19
|
+
subsurface?: number;
|
|
20
|
+
clearcoat?: number;
|
|
21
|
+
clearcoatRoughness?: number;
|
|
22
|
+
albedoMap?: string;
|
|
23
|
+
normalMap?: string;
|
|
24
|
+
roughnessMap?: string;
|
|
25
|
+
metallicMap?: string;
|
|
26
|
+
emissionMap?: string;
|
|
27
|
+
aoMap?: string;
|
|
28
|
+
heightMap?: string;
|
|
29
|
+
opacityMap?: string;
|
|
30
|
+
displacementMap?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface UnlitMaterial {
|
|
33
|
+
name: string;
|
|
34
|
+
color: string;
|
|
35
|
+
emissiveColor?: string;
|
|
36
|
+
emissiveIntensity?: number;
|
|
37
|
+
opacity?: number;
|
|
38
|
+
texture?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const MATERIAL_PRESETS: Record<string, Partial<PBRMaterial>>;
|
|
41
|
+
export declare function createPBRMaterial(name: string, preset?: keyof typeof MATERIAL_PRESETS, overrides?: Partial<PBRMaterial>): PBRMaterial;
|
|
42
|
+
export type TextureMapType = 'albedo_map' | 'normal_map' | 'roughness_map' | 'metallic_map' | 'emission_map' | 'ao_map' | 'height_map' | 'opacity_map' | 'displacement_map' | 'specular_map' | 'clearcoat_map';
|
|
43
|
+
export interface TextureConfig {
|
|
44
|
+
source: string;
|
|
45
|
+
tiling?: [number, number];
|
|
46
|
+
offset?: [number, number];
|
|
47
|
+
filter?: 'linear' | 'nearest';
|
|
48
|
+
wrap?: 'repeat' | 'clamp' | 'mirror';
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=materials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../src/materials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAgBjE,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,OAAO,gBAAgB,EACtC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC/B,WAAW,CAUb;AAMD,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,cAAc,GACd,cAAc,GACd,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;CACtC"}
|