@motionscript/renderer 0.1.0-alpha.9 → 0.1.1-alpha.0
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 +27 -0
- package/README.md +4 -1
- package/dist/browser/index.js +10 -10
- package/dist/browser/index.js.map +4 -4
- package/dist/browser/manifest.json +1 -1
- package/dist/index.d.ts +33 -0
- package/dist/index.js +9487 -8634
- package/dist/index.js.map +1 -1
- package/dist/ms_renderer_bg.wasm +0 -0
- package/package.json +5 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../web/src/r3d/encode.ts","../web/pkg/ms_renderer.js","../web/src/doc.ts","../web/src/protocol.ts","../web/src/effects/_pack.ts","../web/src/effects/alpha.ts","../web/src/effects/ascii.ts","../web/src/effects/bitCrush.ts","../web/src/effects/blockDisplace.ts","../web/src/effects/bloom.ts","../web/src/effects/blur.ts","../web/src/effects/bulge.ts","../web/src/effects/chromaticAberration.ts","../web/src/effects/colorAdjustment.ts","../web/src/effects/colorMatrix.ts","../web/src/effects/curves.ts","../web/src/effects/directionalBlur.ts","../web/src/effects/dither.ts","../web/src/effects/dropShadow.ts","../web/src/effects/duotone.ts","../web/src/effects/edges.ts","../web/src/effects/exposure.ts","../web/src/effects/glass.ts","../web/src/effects/glow.ts","../web/src/effects/grain.ts","../web/src/effects/grayscale.ts","../web/src/effects/halftone.ts","../web/src/effects/invert.ts","../web/src/effects/kaleidoscope.ts","../web/src/effects/lut.ts","../web/src/effects/magnify.ts","../web/src/effects/oilPaint.ts","../web/src/effects/outline.ts","../web/src/effects/pixelate.ts","../web/src/effects/posterize.ts","../web/src/effects/progressiveBlur.ts","../web/src/effects/radialBlur.ts","../web/src/effects/rgbShift.ts","../web/src/effects/scanlines.ts","../web/src/effects/scatter.ts","../web/src/effects/sharpen.ts","../web/src/effects/streak.ts","../web/src/effects/threshold.ts","../web/src/effects/twirl.ts","../web/src/effects/vignette.ts","../web/src/effects/vintage.ts","../web/src/effects/wave.ts","../web/src/effects/_port.ts","../web/src/user-shaders.ts","../web/src/backend-wgpu.ts","../web/src/adapter/driver.ts","../web/src/engine/storage.ts","../web/src/adapter/geometry/image-matrix.ts","../web/src/adapter/paint.ts","../web/src/adapter/shader-params.ts","../web/src/adapter/path-measure.ts","../web/src/adapter/geometry/base.ts","../web/src/adapter/geometry/ellipse.ts","../web/src/adapter/geometry/line.ts","../web/src/adapter/geometry/path.ts","../web/src/adapter/geometry/polygon.ts","../web/src/adapter/geometry/rect.ts","../web/src/adapter/svg-path.ts","../web/src/adapter/shapes.ts","../web/src/adapter/geometry/motion-blur.ts","../web/src/adapter/geometry/markers.ts","../web/src/adapter/stroke-ends.ts","../web/src/adapter/context.ts","../web/src/engine/text.ts","../web/src/engine/faults.ts","../web/src/engine/surface.ts","../web/src/engine/shader-preview.ts","../web/src/engine/index.ts"],"sourcesContent":["// Encodes core's Scene3D into the word stream ms-render3d decodes\n// (crates/render3d/src/scene.rs; format in docs-3d-renderer.md).\n//\n// The encoder stays thin: it writes the descriptors' own values (NaN for an\n// unset number, so the renderer applies three's defaults), parses colours\n// with core's parseColor (gamma-encoded sRGB; the renderer linearizes), and\n// calls core's own helpers where core already owns the answer: camera\n// placement, cylinder radii, rounded boxes and parametric surfaces (both\n// evaluate to buffers here).\n\nimport {\n resolveTexture3D, type Texture3D, type ImageTexture3D, type DataTexture3D, type SurfaceTexture3D,\n cylinderRadii, evaluateParametric, evaluateRoundedBox, parseColor,\n resolveCameraPlacement, resolveShadowOptions3D, segmentsOf,\n type BufferGeometry3D, type CameraData3D, type Color, type Geometry3D,\n type LightData3D, type Material3D, type Scene3D, type Transform3D,\n} from \"@motionscript/core\";\n\nexport const MAGIC = 0x52334431;\nexport const VERSION = 3;\n\ntype Vec = { x: number; y: number; z: number };\ntype VecIn = Vec | readonly number[] | number | undefined;\n\nfunction vec(v: VecIn): Vec {\n if (v === undefined) return { x: 0, y: 0, z: 0 };\n if (typeof v === \"number\") return { x: v, y: v, z: v };\n if (Array.isArray(v)) return { x: v[0] ?? 0, y: v[1] ?? 0, z: v[2] ?? 0 };\n const o = v as Vec;\n return { x: o.x ?? 0, y: o.y ?? 0, z: o.z ?? 0 };\n}\n\nconst EULER: Record<string, number> = { XYZ: 0, YXZ: 1, ZXY: 2, ZYX: 3, YZX: 4, XZY: 5 };\nconst TONE: Record<string, number> = { none: 0, linear: 1, reinhard: 2, cineon: 3, aces: 4, agx: 5, neutral: 6 };\nconst GEOMETRY: Record<string, number> = {\n box: 0, sphere: 1, plane: 2, cylinder: 3, cone: 4, torus: 5, torusKnot: 6, circle: 7, ring: 8, buffer: 9,\n capsule: 10, polyhedron: 11, lathe: 12, tube: 13, edges: 14, wireframe: 15,\n};\nconst POLYHEDRON: Record<string, number> = { tetrahedron: 0, octahedron: 1, icosahedron: 2, dodecahedron: 3 };\nconst MATERIAL: Record<string, number> = {\n basic: 0, standard: 1, physical: 2, lambert: 3, phong: 4, normal: 5, points: 6, lineBasic: 7,\n lineDashed: 8, sprite: 9, shadow: 10, toon: 11, matcap: 12, depth: 13, shader: 14,\n};\nconst LIGHT: Record<string, number> = { ambient: 0, hemisphere: 1, directional: 2, point: 3, spot: 4, area: 5 };\nconst FACES: Record<string, number> = { front: 0, back: 1, both: 2 };\nconst BLEND: Record<string, number> = { normal: 0, additive: 1, subtractive: 2, multiply: 3, none: 4 };\nconst MAP_KEYS = [\"map\", \"gradientMap\", \"alphaMap\", \"aoMap\", \"normalMap\", \"roughnessMap\", \"metalnessMap\", \"emissionMap\", \"envMap\", \"lightMap\", \"displacementMap\"];\n\n/** What a scene recorded that this encoder or the renderer does not draw yet. */\nexport interface EncodeReport {\n unsupported: Set<string>;\n}\n\n/** A texture the host must provide to the renderer under `id`. */\nexport interface TextureRequest {\n id: number;\n srgb: boolean;\n texture: ImageTexture3D | DataTexture3D | SurfaceTexture3D;\n}\n\n/**\n * Texture identity across frames: an image by `src`, data and surfaces by descriptor object. The host uploads\n * every request in `pending` (pixels for images and data, the 2D raster for\n * surfaces) and clears it.\n */\nexport class TextureTable {\n private byKey = new Map<unknown, Map<boolean, number>>();\n private next = 1;\n readonly pending: TextureRequest[] = [];\n readonly all = new Map<number, TextureRequest>();\n\n id(texture: Texture3D, srgb: boolean): number {\n const resolved = resolveTexture3D(texture);\n const key = \"src\" in resolved ? resolved.src : resolved;\n let slot = this.byKey.get(key);\n if (!slot) this.byKey.set(key, (slot = new Map()));\n let id = slot.get(srgb);\n if (id === undefined) {\n id = this.next++;\n slot.set(srgb, id);\n const req = { id, srgb, texture: resolved };\n this.pending.push(req);\n this.all.set(id, req);\n }\n return id;\n }\n}\n\nclass Writer {\n private buf = new ArrayBuffer(1 << 16);\n private u32 = new Uint32Array(this.buf);\n private f32 = new Float32Array(this.buf);\n n = 0;\n\n private room(k: number): void {\n if (this.n + k <= this.u32.length) return;\n let size = this.buf.byteLength * 2;\n while (size / 4 < this.n + k) size *= 2;\n const next = new ArrayBuffer(size);\n new Uint32Array(next).set(this.u32.subarray(0, this.n));\n this.buf = next;\n this.u32 = new Uint32Array(next);\n this.f32 = new Float32Array(next);\n }\n u(v: number): void { this.room(1); this.u32[this.n++] = v >>> 0; }\n f(v: number | undefined): void { this.room(1); this.f32[this.n++] = v === undefined ? NaN : v; }\n v3(v: Vec): void { this.f(v.x); this.f(v.y); this.f(v.z); }\n floats(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.f32[this.n++] = a[i];\n }\n words(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.u32[this.n++] = a[i] >>> 0;\n }\n color(c: Color | undefined): void {\n if (c === undefined) { this.u(0); this.f(0); this.f(0); this.f(0); this.f(0); return; }\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n this.u(1); this.f(r); this.f(g); this.f(b); this.f(a ?? 1);\n }\n segments(s: number | readonly number[] | undefined): void {\n if (s === undefined) { this.u(0); this.f(NaN); this.f(NaN); this.f(NaN); return; }\n if (typeof s === \"number\") { this.u(1); this.f(s); this.f(NaN); this.f(NaN); return; }\n this.u(2); this.f(s[0]); this.f(s[1]); this.f(s[2]);\n }\n result(): Uint32Array { return this.u32.slice(0, this.n); }\n /** Words `from..n` as a map key. */\n key(from: number): string { return Array.prototype.join.call(this.u32.subarray(from, this.n), \",\"); }\n copy(from: number): Uint32Array { return this.u32.slice(from, this.n); }\n same(from: number, words: Uint32Array): boolean {\n if (this.n - from !== words.length) return false;\n const u = this.u32;\n for (let i = 0; i < words.length; i++) if (u[from + i] !== words[i]) return false;\n return true;\n }\n set(i: number, v: number): void { this.u32[i] = v >>> 0; }\n append(other: Writer): void {\n this.room(other.n);\n this.u32.set(other.u32.subarray(0, other.n), this.n);\n this.n += other.n;\n }\n}\n\nfunction writeTransform(w: Writer, t: Transform3D | undefined): void {\n if (!t) { w.u(0); return; }\n let flags = 0;\n if (t.position !== undefined) flags |= 1;\n if (t.rotation !== undefined) flags |= 2;\n if (t.quaternion !== undefined) flags |= 4;\n if (t.scale !== undefined) flags |= 8;\n if (t.lookAt !== undefined) flags |= 16;\n if (t.visible === false) flags |= 32;\n if (t.shadow !== undefined) flags |= 64;\n if (t.renderOrder !== undefined) flags |= 128;\n w.u(flags);\n if (flags & 1) w.v3(vec(t.position as VecIn));\n if (flags & 2) {\n w.v3(vec(t.rotation as VecIn));\n w.u(EULER[(t.rotation as { order?: string }).order ?? \"XYZ\"] ?? 0);\n }\n if (flags & 4) { const q = t.quaternion!; w.f(q.x); w.f(q.y); w.f(q.z); w.f(q.w); }\n if (flags & 8) w.v3(vec(t.scale as VecIn));\n if (flags & 16) w.v3(vec(t.lookAt as VecIn));\n if (flags & 64) {\n const s = t.shadow;\n w.u(s === false ? 0 : s === true ? 1 : s === \"cast\" ? 2 : s === \"receive\" ? 3 : 4);\n }\n if (flags & 128) w.f(t.renderOrder);\n}\n\nfunction writeBuffer(w: Writer, b: BufferGeometry3D): void {\n const n = Math.floor(b.position.length / 3);\n const flags = (b.normal ? 1 : 0) | (b.uv ? 2 : 0) | (b.color ? 4 : 0) | (b.index ? 8 : 0)\n | (b.computeNormals ? 16 : 0);\n w.u(GEOMETRY.buffer);\n w.u(flags);\n w.u(n);\n w.u(b.index?.length ?? 0);\n w.floats(b.position);\n if (b.normal) w.floats(b.normal);\n if (b.uv) w.floats(b.uv);\n if (b.color) w.floats(b.color);\n if (b.index) w.words(b.index);\n}\n\nfunction writeGeometry(w: Writer, g: Geometry3D, report: EncodeReport): void {\n switch (g.type) {\n case \"box\": {\n if ((g.cornerRadius ?? 0) > 0) {\n const [sx, sy, sz] = segmentsOf(g.segments, [1, 1, 1]);\n writeBuffer(w, evaluateRoundedBox({\n width: g.width ?? 1, height: g.height ?? 1, depth: g.depth ?? 1,\n radius: g.cornerRadius!, segments: [sx, sy, sz],\n }));\n return;\n }\n w.u(GEOMETRY.box); w.f(g.width); w.f(g.height); w.f(g.depth); w.segments(g.segments);\n return;\n }\n case \"sphere\":\n w.u(GEOMETRY.sphere); w.f(g.radius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep); w.f(g.startLatitude); w.f(g.latitudeSweep);\n return;\n case \"plane\":\n w.u(GEOMETRY.plane); w.f(g.width); w.f(g.height); w.segments(g.segments);\n return;\n case \"cylinder\": {\n const [top, bottom] = cylinderRadii(g.radius);\n w.u(GEOMETRY.cylinder); w.f(top); w.f(bottom); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n }\n case \"cone\":\n w.u(GEOMETRY.cone); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torus\":\n w.u(GEOMETRY.torus); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torusKnot\":\n w.u(GEOMETRY.torusKnot); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.windings?.[0]); w.f(g.windings?.[1]);\n return;\n case \"circle\":\n w.u(GEOMETRY.circle); w.f(g.radius); w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"ring\":\n w.u(GEOMETRY.ring); w.f(g.radius); w.f(g.innerRadius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"buffer\":\n writeBuffer(w, g);\n return;\n case \"parametric\":\n writeBuffer(w, evaluateParametric(g));\n return;\n case \"capsule\":\n w.u(GEOMETRY.capsule); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n return;\n case \"polyhedron\": {\n // A polyhedron's segments are a detail count where 0 (unset) is\n // the plain solid.\n w.u(GEOMETRY.polyhedron); w.u(POLYHEDRON[g.shape ?? \"icosahedron\"] ?? 2); w.f(g.radius);\n w.f(g.segments === undefined ? 0 : segmentsOf(g.segments, [1])[0]);\n return;\n }\n case \"lathe\":\n w.u(GEOMETRY.lathe); w.u(g.points.length);\n for (const p of g.points) { const v = vec(p as VecIn); w.f(v.x); w.f(v.y); }\n w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"tube\":\n w.u(GEOMETRY.tube); w.u(g.points.length);\n for (const p of g.points) w.v3(vec(p as VecIn));\n w.u(g.closed ? 1 : 0); w.f(g.radius); w.segments(g.segments);\n return;\n case \"edges\":\n w.u(GEOMETRY.edges); w.f(g.thresholdAngle);\n writeGeometry(w, g.source, report);\n return;\n case \"wireframe\":\n w.u(GEOMETRY.wireframe);\n writeGeometry(w, g.source, report);\n return;\n default:\n report.unsupported.add(`geometry:${g.type}`);\n w.u(255);\n }\n}\n\n/** Fixed: keyed by its own words. Rounded: a box evaluated to a buffer, keyed\n * by its parameters. Slot: buffer data, keyed by where it is drawn. */\nfunction classify(g: Geometry3D): \"fixed\" | \"rounded\" | \"slot\" {\n switch (g.type) {\n case \"buffer\": case \"parametric\": return \"slot\";\n case \"box\": return (g.cornerRadius ?? 0) > 0 ? \"rounded\" : \"fixed\";\n case \"edges\": case \"wireframe\": return classify(g.source) === \"fixed\" ? \"fixed\" : \"slot\";\n default: return \"fixed\";\n }\n}\n\n/** A geometry's structure without its data, as the reconciler's `geometrySignature`. */\nfunction signature(g: Geometry3D): string {\n const bag = g as unknown as Record<string, unknown>;\n let out: string = g.type;\n for (const k of Object.keys(bag).sort()) {\n const v = bag[k];\n if (k === \"type\" || k === \"revision\" || k === \"staticData\" || v === undefined || typeof v === \"function\") continue;\n if (k === \"source\") out += `|source=${signature(v as Geometry3D)}`;\n else if (ArrayBuffer.isView(v) || (Array.isArray(v) && v.length > 3)) out += `|${k}#${(v as ArrayLike<number>).length}`;\n else out += `|${k}=${typeof v === \"object\" ? JSON.stringify(v) : String(v)}`;\n }\n return out;\n}\n\ninterface Slot {\n id: number;\n revision: number | undefined;\n /** A buffer's arrays, compared by identity when a revision or `staticData` vouches for them. */\n arrays: readonly unknown[];\n words: Uint32Array;\n}\n\nfunction arraysOf(g: Geometry3D): readonly unknown[] {\n if (g.type !== \"buffer\") return [];\n return [g.position, g.normal, g.uv, g.color, g.index, g.computeNormals];\n}\n\n/**\n * Geometry the renderer keeps across frames (stream v3). A geometry is sent\n * once as a def (id and geometry) and drawn by reference (geometry type 16).\n * An id's content never changes: new content takes a new id, and an id no\n * draw refers to in a frame is dropped, here and by the renderer, at that\n * frame. One table per renderer scene, beside its {@link TextureTable}.\n *\n * Fixed-shape geometry is keyed by its words. A buffer or parametric surface\n * is keyed by its slot, as the reconciler keys a drawable\n * (`<node>|<kind>|<signature>|<nth>`): an unchanged `revision` (and, for a\n * buffer, the same arrays) reuses the def without evaluating or copying it;\n * otherwise its fresh words are compared with the slot's last ones.\n */\nexport class GeometryTable {\n private next = 1;\n private byKey = new Map<string, number>();\n private slots = new Map<string, Slot>();\n private live = new Set<number>();\n private nth = new Map<string, number>();\n private defs = new Writer();\n private count = 0;\n\n /** Starts a frame. */\n begin(): void {\n this.live.clear();\n this.nth.clear();\n this.defs.n = 0;\n this.count = 0;\n }\n\n /** Ends a frame: writes its new defs and forgets what it didn't draw. */\n end(w: Writer): void {\n w.u(this.count);\n w.append(this.defs);\n for (const [k, id] of this.byKey) if (!this.live.has(id)) this.byKey.delete(k);\n for (const [k, s] of this.slots) if (!this.live.has(s.id)) this.slots.delete(k);\n }\n\n /** The def id for `g`, drawn by an op of `kind` in node scope `scope`. */\n ref(g: Geometry3D, scope: string, kind: string, report: EncodeReport): number {\n const d = this.defs;\n const shape = classify(g);\n if (shape !== \"slot\") {\n let key: string | undefined;\n if (shape === \"rounded\") {\n const b = g as Extract<Geometry3D, { type: \"box\" }>;\n key = `rounded|${b.width}|${b.height}|${b.depth}|${b.cornerRadius}|${JSON.stringify(b.segments)}`;\n const known = this.byKey.get(key);\n if (known !== undefined) return this.use(known);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n key ??= d.key(start + 1);\n const known = this.byKey.get(key);\n if (known !== undefined) {\n d.n = start;\n return this.use(known);\n }\n const id = this.add(start);\n this.byKey.set(key, id);\n return id;\n }\n const base = `${scope}|${kind}|${signature(g)}`;\n const n = this.nth.get(base) ?? 0;\n this.nth.set(base, n + 1);\n const key = `${base}|${n}`;\n const slot = this.slots.get(key);\n const revision = (g as { revision?: number }).revision;\n const arrays = arraysOf(g);\n if (slot && slot.revision === revision) {\n if (g.type === \"parametric\" && revision !== undefined) return this.use(slot.id);\n if (g.type === \"buffer\" && (revision !== undefined || g.staticData === true)\n && arrays.every((a, i) => a === slot.arrays[i])) return this.use(slot.id);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n if (slot && d.same(start + 1, slot.words)) {\n d.n = start;\n slot.revision = revision;\n slot.arrays = arrays;\n return this.use(slot.id);\n }\n const id = this.add(start);\n this.slots.set(key, { id, revision, arrays, words: d.copy(start + 1) });\n return id;\n }\n\n private use(id: number): number {\n this.live.add(id);\n return id;\n }\n\n /** The def written at `start` (its id word first) becomes a new id. */\n private add(start: number): number {\n const id = this.next++;\n this.defs.set(start, id);\n this.count++;\n return this.use(id);\n }\n}\n\nconst WRAP: Record<string, number> = { clamp: 0, repeat: 1, mirror: 2 };\n\nfunction pair(v: unknown, d: number): [number, number] {\n if (v === undefined) return [d, d];\n if (Array.isArray(v)) return [v[0] ?? d, v[1] ?? d];\n const o = v as { x?: number; y?: number };\n return [o.x ?? d, o.y ?? d];\n}\n\n/** The map slot: id, three's `Texture.matrix` (setUvTransform), sampler flags. */\nfunction writeMap(w: Writer, map: Texture3D | undefined, textures: TextureTable | undefined, report: EncodeReport): void {\n if (map === undefined || !textures) {\n if (map !== undefined) report.unsupported.add(\"texture:map\");\n w.u(0); w.u(0); w.f(1); w.f(0); w.f(0); w.f(0); w.f(1); w.f(0); w.u(0);\n return;\n }\n const t = resolveTexture3D(map);\n const srgb = t.colorSpace !== \"linear\";\n w.u(1);\n w.u(textures.id(map, srgb));\n const [tx, ty] = pair(t.offset, 0);\n const [sx, sy] = pair(t.repeat, 1);\n const [cx, cy] = pair(t.center, 0);\n const r = ((t.rotation ?? 0) * Math.PI) / 180;\n const c = Math.cos(r), s = Math.sin(r);\n w.f(sx * c); w.f(sx * s); w.f(-sx * (c * cx + s * cy) + cx + tx);\n w.f(-sy * s); w.f(sy * c); w.f(-sy * (-s * cx + c * cy) + cy + ty);\n // Images and surfaces are DataTextures with flipY (true unless stated);\n // plain data textures keep three's DataTexture default, false.\n const flip = t.flipY ?? !(\"data\" in t);\n w.u((WRAP[t.wrapS ?? \"clamp\"] ?? 0) | ((WRAP[t.wrapT ?? \"clamp\"] ?? 0) << 2) | (flip ? 16 : 0)\n | (t.magFilter === \"nearest\" ? 32 : 0) | (t.minFilter === \"nearest\" ? 64 : 0));\n}\n\nfunction writeMaterial(w: Writer, m: Material3D, report: EncodeReport, textures?: TextureTable): void {\n const bag = m as unknown as Record<string, unknown>;\n w.u(MATERIAL[m.type] ?? 1);\n if (![\"basic\", \"standard\", \"physical\", \"lambert\", \"phong\", \"normal\", \"lineBasic\", \"lineDashed\", \"sprite\", \"shadow\", \"points\", \"toon\", \"depth\"].includes(m.type)) {\n report.unsupported.add(`material:${m.type}`);\n }\n for (const k of MAP_KEYS) if (k !== \"map\" && k !== \"gradientMap\" && bag[k] !== undefined) report.unsupported.add(`texture:${k}`);\n if (bag.gradientMap !== undefined && m.type !== \"toon\") report.unsupported.add(\"texture:gradientMap\");\n // Physical draws as standard plus clearcoat and transmission; the other lobes are unsupported.\n for (const k of [\"sheen\", \"iridescence\", \"anisotropy\", \"dispersion\"]) {\n if (typeof bag[k] === \"number\" && (bag[k] as number) > 0) report.unsupported.add(`physical:${k}`);\n }\n w.color(bag.color as Color | undefined);\n w.f(bag.opacity as number | undefined);\n w.f(bag.roughness as number | undefined);\n w.f(bag.metalness as number | undefined);\n w.color(bag.emission as Color | undefined);\n w.f(bag.emissionStrength as number | undefined);\n w.f(bag.envMapIntensity as number | undefined);\n let flags = 0;\n if (bag.transparent === true) flags |= 1;\n if (bag.wireframe === true) flags |= 4;\n if (bag.vertexColors === true) flags |= 8;\n if (bag.shading === \"flat\") flags |= 16;\n if (bag.toneMapped === false) flags |= 32;\n if (bag.visible === false) flags |= 64;\n if (bag.depthTest === false) flags |= 128;\n if (bag.depthWrite !== undefined) flags |= 256 | (bag.depthWrite ? 512 : 0);\n if (bag.sizeAttenuation === false) flags |= 1024;\n w.u(flags);\n w.u(FACES[(bag.faces as string) ?? \"front\"] ?? 0);\n w.u(BLEND[(bag.blend as string) ?? \"normal\"] ?? 0);\n w.f(bag.alphaTest as number | undefined);\n w.f(bag.size as number | undefined);\n w.color(bag.specular as Color | undefined);\n w.f(bag.shininess as number | undefined);\n writeMap(w, bag.map as Texture3D | undefined, textures, report);\n // v2: physical layers, dashes, the toon gradient.\n w.f(bag.clearcoat as number | undefined);\n w.f(bag.clearcoatRoughness as number | undefined);\n w.f(bag.transmission as number | undefined);\n w.f(bag.thickness as number | undefined);\n w.f(bag.ior as number | undefined);\n w.f(bag.attenuationDistance as number | undefined);\n w.color(bag.attenuationColor as Color | undefined);\n w.f(bag.dashSize as number | undefined);\n w.f(bag.gapSize as number | undefined);\n w.f(bag.scale as number | undefined);\n writeMap(w, m.type === \"toon\" ? bag.gradientMap as Texture3D | undefined : undefined, textures, report);\n}\n\nfunction writeLight(w: Writer, l: LightData3D, t: Transform3D | undefined): void {\n const bag = l as unknown as Record<string, unknown>;\n w.u(LIGHT[l.type] ?? 0);\n w.color(bag.color as Color | undefined);\n w.f(l.intensity);\n w.color(bag.sky as Color | undefined);\n w.color(bag.ground as Color | undefined);\n w.f(bag.distance as number | undefined);\n w.f(bag.decay as number | undefined);\n w.f(bag.angle as number | undefined);\n w.f(bag.penumbra as number | undefined);\n const target = bag.target as VecIn;\n w.u(target === undefined ? 0 : 1);\n w.v3(vec(target));\n const declared = bag.shadow as Parameters<typeof resolveShadowOptions3D>[0];\n const options = declared === undefined ? null : resolveShadowOptions3D(declared);\n w.u(options ? 1 : 0);\n w.f(options?.softness);\n w.f(options?.extent);\n w.f(bag.width as number | undefined);\n w.f(bag.height as number | undefined);\n writeTransform(w, t);\n}\n\nfunction writeCamera(w: Writer, c: CameraData3D): void {\n w.u(c.type === \"orthographic\" ? 1 : 0);\n const placement = resolveCameraPlacement(c);\n writeTransform(w, { ...c, position: placement.position, lookAt: placement.lookAt });\n w.f(c.type === \"perspective\" ? c.fov : undefined);\n w.f(c.zoom);\n w.f(c.type === \"orthographic\" ? c.frustumHeight : undefined);\n w.f(c.near);\n w.f(c.far);\n w.f(c.distance);\n}\n\n/**\n * Encodes a recorded scene. `report` collects what will not draw. With\n * `geometries`, geometry goes by reference to defs the renderer keeps (pass\n * the same table every frame of one renderer scene); without, inline.\n */\nexport function encodeScene3D(\n scene: Scene3D,\n report: EncodeReport = { unsupported: new Set() },\n textures?: TextureTable,\n geometries?: GeometryTable,\n): Uint32Array {\n const w = new Writer();\n geometries?.begin();\n // The node scopes the ops sit in (core puts the node id on a push's `key`).\n const scopes: string[] = [\"\"];\n const geometry = (g: Geometry3D, kind: string) => {\n if (!geometries) return writeGeometry(w, g, report);\n w.u(16);\n w.u(geometries.ref(g, scopes[scopes.length - 1], kind, report));\n };\n w.u(MAGIC);\n w.u(VERSION);\n\n const tone = scene.toneSettings();\n w.u(TONE[tone?.mapping ?? \"aces\"] ?? 4);\n w.f(tone?.exposure);\n const shadows = scene.shadowSettings();\n w.u(shadows?.enabled === true ? 1 : 0);\n w.u(shadows?.quality === \"low\" ? 0 : shadows?.quality === \"high\" ? 2 : 1);\n const fog = scene.fogDescriptor();\n w.u(!fog ? 0 : fog.density !== undefined ? 2 : 1);\n w.color(fog?.color);\n w.f(fog?.near);\n w.f(fog?.far);\n w.f(fog?.density);\n const env = scene.environmentDescriptor();\n w.u(env?.preset === \"studio\" ? 1 : 0);\n w.f(env?.intensity);\n w.u(env?.background ? 1 : 0);\n w.f(env?.blur);\n if (scene.postEffects().length > 0) report.unsupported.add(\"post\");\n\n const ops = scene.ops();\n w.u(ops.length);\n for (const op of ops) {\n switch (op.kind) {\n case \"push\": {\n const key = (op.transform as { key?: unknown } | undefined)?.key;\n scopes.push(key === undefined ? `${scopes[scopes.length - 1]}/${scopes.length}` : String(key));\n w.u(1); writeTransform(w, op.transform);\n break;\n }\n case \"pop\": if (scopes.length > 1) scopes.pop(); w.u(2); break;\n case \"light\":\n w.u(3); writeLight(w, op.light, op.transform);\n break;\n case \"camera\": w.u(4); writeCamera(w, op.camera); break;\n case \"mesh\": {\n w.u(5);\n geometry(op.geometry, op.kind);\n const list = Array.isArray(op.material) ? (op.material as readonly Material3D[]) : [op.material as Material3D];\n w.u(Array.isArray(op.material) ? list.length : 1);\n for (const m of list) writeMaterial(w, m, report, textures);\n writeTransform(w, op.transform);\n break;\n }\n case \"instances\": {\n w.u(6);\n geometry(op.geometry, op.kind);\n writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n w.u(op.instances.length);\n for (const t of op.instances) writeTransform(w, t);\n const colors = op.colors ?? [];\n w.u(colors.length);\n for (const c of colors) {\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n w.f(r); w.f(g); w.f(b); w.f(a ?? 1);\n }\n break;\n }\n case \"points\":\n w.u(7); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n break;\n case \"line\":\n w.u(8); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n w.u(op.mode === \"segments\" ? 1 : op.mode === \"loop\" ? 2 : 0);\n writeTransform(w, op.transform);\n break;\n case \"sprite\":\n w.u(9); writeMaterial(w, op.material, report, textures); writeTransform(w, op.transform);\n break;\n case \"model\":\n report.unsupported.add(\"model\");\n w.u(10); writeTransform(w, op.transform);\n break;\n }\n }\n if (geometries) geometries.end(w);\n else w.u(0);\n return w.result();\n}\n","/* @ts-self-types=\"./ms_renderer.d.ts\" */\n\nexport class MsText {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n MsTextFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_mstext_free(ptr, 0);\n }\n /**\n * Glyph outline → `[verbCount, verbs…, x0, y0, x1, y1, …]` in px, y down.\n * @param {number} font\n * @param {number} glyph\n * @param {number} size\n * @param {number} weight\n * @returns {Float32Array}\n */\n glyph_path(font, glyph, size, weight) {\n const ret = wasm.mstext_glyph_path(this.__wbg_ptr, font, glyph, size, weight);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Paragraph layout in paragraph space; see [`encode`]. `align`: 0 left,\n * 1 right, 2 center, 3 justify, 4 start, 5 end. `max_width <= 0` = no wrap.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {number} max_width\n * @param {number} box_width\n * @returns {Float32Array}\n */\n layout(text, runs, families, line_height, align, max_width, box_width) {\n const val4 = +line_height;\n const val5 = +align;\n const val6 = +max_width;\n const val7 = +box_width;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_layout(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7);\n var v8 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v8;\n }\n /**\n * `measureText` → `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n constructor() {\n const ret = wasm.mstext_new();\n this.__wbg_ptr = ret;\n MsTextFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Registers font bytes under `family`; returns the font id, or -1.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * @param {Uint32Array | number[]} ids\n */\n set_default_fallbacks(ids) {\n const ptr0 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.mstext_set_default_fallbacks(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * @param {string} family\n * @param {Uint32Array | number[]} ids\n */\n set_family_fallbacks(family, ids) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n wasm.mstext_set_family_fallbacks(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n }\n /**\n * `layoutTextBlock` → `[width, height, lineCount, per line: start, end,\n * top, bottom, caretCount, carets…]`, or empty for no layout.\n * `font_size` NaN = autofit. `valign`: 0 top, 1 center, 2 bottom.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} font_size\n * @param {number} min_font_size\n * @param {number} line_height\n * @param {number} align\n * @param {number} valign\n * @param {boolean} wrap\n * @param {number} width\n * @param {number} height\n * @returns {Float32Array}\n */\n text_block(text, runs, families, font_size, min_font_size, line_height, align, valign, wrap, width, height) {\n const val4 = +font_size;\n const val5 = +min_font_size;\n const val6 = +line_height;\n const val7 = +align;\n const val8 = +valign;\n const val9 = +wrap;\n const val10 = +width;\n const val11 = +height;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_block(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7, val8, val9, val10, val11);\n var v12 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v12;\n }\n /**\n * Text on a path: shapes one unwrapped left-aligned line and places it\n * along `points` (a polyline, `[x0, y0, x1, y1, …]`) per `align`.\n * Returns 7 numbers per glyph: the glyph id, then its affine matrix\n * `[a, b, c, d, e, f]` (see `PlacedGlyph::matrix`). Newlines become\n * spaces; the whitespace around them is collapsed by the caller, since it\n * changes run lengths.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {Float32Array | number[]} points\n * @returns {Float32Array}\n */\n text_on_path(text, runs, families, line_height, align, points) {\n const val5 = +line_height;\n const val6 = +align;\n let ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n ptr3 = passArrayF32ToWasm0(points, wasm.__wbindgen_malloc);\n len3 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr3) { wasm.__wbindgen_free(ptr3, len3 * 4, 4); }\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_on_path(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val5, val6, ptr3, len3);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n}\nif (Symbol.dispose) MsText.prototype[Symbol.dispose] = MsText.prototype.free;\n\nexport class Renderer {\n static __wrap(ptr) {\n const obj = Object.create(Renderer.prototype);\n obj.__wbg_ptr = ptr;\n RendererFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n RendererFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_renderer_free(ptr, 0);\n }\n /**\n * @returns {string}\n */\n adapter_info() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.renderer_adapter_info(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * Applies the first `words` words of the delta buffer to the scene.\n * @param {number} words\n */\n apply(words) {\n const ret = wasm.renderer_apply(this.__wbg_ptr, words);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Creates a renderer drawing into an `HTMLCanvasElement` or `OffscreenCanvas`.\n * @param {any} canvas\n * @param {number} width\n * @param {number} height\n * @returns {Promise<Renderer>}\n */\n static create(canvas, width, height) {\n const ret = wasm.renderer_create(canvas, width, height);\n return ret;\n }\n /**\n * Pointer (byte offset into WASM memory) of a word buffer holding at least\n * `min_words` words. May reallocate, so callers re-read the pointer and\n * refresh their views after calling it.\n * @param {number} min_words\n * @returns {number}\n */\n delta_buffer(min_words) {\n const ret = wasm.renderer_delta_buffer(this.__wbg_ptr, min_words);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n delta_capacity() {\n const ret = wasm.renderer_delta_capacity(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Names of the built-in effects, in `OP_EFFECTS` index order.\n * @returns {string[]}\n */\n effect_names() {\n const ret = wasm.renderer_effect_names(this.__wbg_ptr);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Drops the shared device and its pipelines, so the next `prewarm` or\n * `create` asks for a new one. For a host that learnt of a lost device\n * before wgpu's own callback ran.\n */\n static forget_device() {\n wasm.renderer_forget_device();\n }\n /**\n * @param {number} id\n */\n free_image(id) {\n wasm.renderer_free_image(this.__wbg_ptr, id);\n }\n /**\n * The `GPUDevice` this renderer draws with.\n * @returns {any}\n */\n gpu_device() {\n const ret = wasm.renderer_gpu_device(this.__wbg_ptr);\n return ret;\n }\n /**\n * Forces the next render to rebuild the frame program even if no delta\n * arrived, to measure the full CPU path.\n */\n invalidate() {\n wasm.renderer_invalidate(this.__wbg_ptr);\n }\n /**\n * core's `measureText`: `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n /**\n * Gets the GPU device every renderer on the page shares ready, ahead of the first `create`.\n * @returns {Promise<void>}\n */\n static prewarm() {\n const ret = wasm.renderer_prewarm();\n return ret;\n }\n /**\n * Renders the scene offscreen and resolves to RGBA8 pixels (row-major,\n * tightly packed). The promise yields a `Uint8Array`.\n * @returns {Promise<any>}\n */\n read_pixels() {\n const ret = wasm.renderer_read_pixels(this.__wbg_ptr);\n return ret;\n }\n /**\n * Registers font bytes under a family name; returns the font id, or\n * -1 if the bytes aren't a font.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * Renders the current scene to the canvas.\n */\n render() {\n const ret = wasm.renderer_render(this.__wbg_ptr);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {number} width\n * @param {number} height\n */\n resize(width, height) {\n wasm.renderer_resize(this.__wbg_ptr, width, height);\n }\n /**\n * Scene `scene`'s texture `tex` (an encoder texture id) is image\n * `image`: an uploaded image or a surface.\n * @param {number} scene\n * @param {number} tex\n * @param {number} image\n * @param {boolean} srgb\n */\n scene3d_bind(scene, tex, image, srgb) {\n wasm.renderer_scene3d_bind(this.__wbg_ptr, scene, tex, image, srgb);\n }\n /**\n * Scene `scene`'s texture `tex` from straight RGBA8 rows (a data texture).\n * @param {number} scene\n * @param {number} tex\n * @param {Uint8Array | number[]} rgba\n * @param {number} width\n * @param {number} height\n * @param {boolean} srgb\n */\n scene3d_pixels(scene, tex, rgba, width, height, srgb) {\n const val2 = +scene;\n const val3 = +tex;\n const val4 = +width;\n const val5 = +height;\n const val6 = +srgb;\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.renderer_scene3d_pixels(this.__wbg_ptr, val2, val3, ptr0, len0, val4, val5, val6);\n }\n /**\n * What the last 3D scenes recorded that `ms-render3d` doesn't draw.\n * @param {number} id\n * @returns {string[]}\n */\n scene3d_skipped(id) {\n const ret = wasm.renderer_scene3d_skipped(this.__wbg_ptr, id);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {boolean} linear\n * @param {boolean} dither\n */\n set_options(linear, dither) {\n wasm.renderer_set_options(this.__wbg_ptr, linear, dither);\n }\n /**\n * A 3D scene (the word stream `web/src/r3d/encode.ts` writes from\n * core's `Scene3D`) as image `id`, drawn at `width`×`height` px on\n * this renderer's device and sampled by image paints like any image.\n * @param {number} id\n * @param {number} width\n * @param {number} height\n * @param {Uint32Array | number[]} words\n */\n set_scene3d(id, width, height, words) {\n const val2 = +id;\n const val3 = +width;\n const val4 = +height;\n const ptr0 = passArray32ToWasm0(words, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_set_scene3d(this.__wbg_ptr, val2, val3, val4, ptr0, len0);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Image `id` is the 2D subtree under node `root` (a detached group),\n * drawn at `width`×`height` px whenever the scene changes: a\n * `Tex.surface` source for 3D maps, and an image for image paints.\n * @param {number} id\n * @param {number} root\n * @param {number} width\n * @param {number} height\n */\n set_surface(id, root, width, height) {\n wasm.renderer_set_surface(this.__wbg_ptr, id, root, width, height);\n }\n /**\n * Validates user shader `source` (`kind` 0 = fill, 1 = effect) and,\n * when valid, adds it as program `id` on this device. Its draws are\n * skipped until `shader_build`; the caller compiles the pipelines\n * asynchronously first (see `web/src/user-shaders.ts`). Returns the\n * report `validate_shader` does, as JSON.\n * @param {number} id\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\n shader_add(id, kind, source) {\n let deferred4_0;\n let deferred4_1;\n try {\n const val2 = +id;\n const val3 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_shader_add(this.__wbg_ptr, val2, val3, ptr0, len0);\n deferred4_0 = ret[0];\n deferred4_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * Creates program `id`'s pipelines; from the next render it draws.\n * @param {number} id\n */\n shader_build(id) {\n wasm.renderer_shader_build(this.__wbg_ptr, id);\n }\n /**\n * The output formats of a user program's pipelines, in order (WebGPU names).\n * @param {number} kind\n * @returns {string[]}\n */\n shader_formats(kind) {\n const ret = wasm.renderer_shader_formats(this.__wbg_ptr, kind);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {number} id\n */\n shader_remove(id) {\n wasm.renderer_shader_remove(this.__wbg_ptr, id);\n }\n /**\n * [build ms, encode+submit ms, apply ms, prims, ops, layers, passes,\n * draws, culled, outlines built this frame, pool textures, pool MiB,\n * cached outline segments, prims reused from recorded subtrees,\n * prims left on the GPU from the previous build, 3D decode + set ms,\n * 3D draw CPU ms, 3D map refresh ms, surfaces redrawn, surfaces]\n * @returns {Float64Array}\n */\n stats() {\n const ret = wasm.renderer_stats(this.__wbg_ptr);\n var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v1;\n }\n /**\n * core's `layoutTextBlock` for a text node already in the scene, flat:\n * `[width, height, lineCount, then per line: start, end, top,\n * bottom, caretCount, carets…]`; empty when there is none.\n * @param {number} id\n * @returns {Float32Array}\n */\n text_block_layout(id) {\n const ret = wasm.renderer_text_block_layout(this.__wbg_ptr, id);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Uploads image `id` from an `ImageBitmap`, `VideoFrame`,\n * `HTMLImageElement`, `HTMLVideoElement`, `HTMLCanvasElement` or\n * `OffscreenCanvas` (a GPU copy). Call again with each new video\n * frame; the texture is reused. `mipmaps` for still images.\n * @param {number} id\n * @param {any} source\n * @param {boolean} mipmaps\n */\n upload_image(id, source, mipmaps) {\n const ret = wasm.renderer_upload_image(this.__wbg_ptr, id, source, mipmaps);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Resolves once the GPU has finished all submitted work.\n * @returns {Promise<any>}\n */\n wait_gpu() {\n const ret = wasm.renderer_wait_gpu(this.__wbg_ptr);\n return ret;\n }\n}\nif (Symbol.dispose) Renderer.prototype[Symbol.dispose] = Renderer.prototype.free;\n\n/**\n * Called with the message when the renderer panics, just before the trap.\n * @param {Function | null} [listener]\n */\nexport function set_panic_listener(listener) {\n wasm.set_panic_listener(isLikeNone(listener) ? 0 : addToExternrefTable0(listener));\n}\n\n/**\n * `panic = \"abort\"` traps, and the instance is not safe to call again\n * (a `RefCell` may be left borrowed), so the host is told what happened\n * before the trap unwinds into whichever call it was. Unwinding on\n * wasm32 needs a nightly std.\n */\nexport function start() {\n wasm.start();\n}\n\n/**\n * Validates a user shader without a device: `kind` 0 = fill, 1 = effect.\n * JSON `{ ok, diagnostics: [{ line, column, length, message }], fields:\n * [{ name, offset, scalar, components, elements, stride, type }], size, wgsl }`;\n * `line` is 1-based in `source`, 0 for a problem outside it.\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\nexport function validate_shader(kind, source) {\n let deferred3_0;\n let deferred3_1;\n try {\n const val2 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.validate_shader(val2, ptr0, len0);\n deferred3_0 = ret[0];\n deferred3_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_208446807d0d1e30: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Window_2805651c516cb7aa: function(arg0) {\n const ret = arg0.Window;\n return ret;\n },\n __wbg_WorkerGlobalScope_174390815d0a4893: function(arg0) {\n const ret = arg0.WorkerGlobalScope;\n return ret;\n },\n __wbg___wbindgen_debug_string_f249a2a76caa9a55: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_is_function_741ff2bb612836f5: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_c22311b1cc228e3a: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_string_fc456fee5d3317de: function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_be5b34249ff1fc15: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_throw_4c88d8bf264fd984: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg__wbg_cb_unref_09736879a3f67559: function(arg0) {\n arg0._wbg_cb_unref();\n },\n __wbg_beginRenderPass_597e3973321fd369: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.beginRenderPass(arg1);\n return ret;\n }, arguments); },\n __wbg_call_40b008ba32f73991: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_call_a410eb4b59ed5965: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_clearBuffer_3d5a3057c3c8a9bf: function(arg0, arg1, arg2, arg3) {\n arg0.clearBuffer(arg1, arg2, arg3);\n },\n __wbg_clearBuffer_82ba999c294f42fb: function(arg0, arg1, arg2) {\n arg0.clearBuffer(arg1, arg2);\n },\n __wbg_configure_8e04ab1a867d31e1: function() { return handleError(function (arg0, arg1) {\n arg0.configure(arg1);\n }, arguments); },\n __wbg_copyExternalImageToTexture_9d1383f644366eae: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyExternalImageToTexture(arg1, arg2, arg3);\n }, arguments); },\n __wbg_copyTextureToBuffer_2a1eda98bb347f8c: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyTextureToBuffer(arg1, arg2, arg3);\n }, arguments); },\n __wbg_createBindGroupLayout_5699617270d84042: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBindGroupLayout(arg1);\n return ret;\n }, arguments); },\n __wbg_createBindGroup_f539b26ca341308f: function(arg0, arg1) {\n const ret = arg0.createBindGroup(arg1);\n return ret;\n },\n __wbg_createBuffer_b8c5b520d2c822b8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBuffer(arg1);\n return ret;\n }, arguments); },\n __wbg_createCommandEncoder_3352d1ffc36c6fc0: function(arg0, arg1) {\n const ret = arg0.createCommandEncoder(arg1);\n return ret;\n },\n __wbg_createPipelineLayout_6eab52c327118937: function(arg0, arg1) {\n const ret = arg0.createPipelineLayout(arg1);\n return ret;\n },\n __wbg_createRenderPipeline_58390ba302107691: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createRenderPipeline(arg1);\n return ret;\n }, arguments); },\n __wbg_createSampler_9bd91d7e928c0060: function(arg0, arg1) {\n const ret = arg0.createSampler(arg1);\n return ret;\n },\n __wbg_createShaderModule_cefa51336cb288ae: function(arg0, arg1) {\n const ret = arg0.createShaderModule(arg1);\n return ret;\n },\n __wbg_createTexture_2c95e64f50008aea: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createTexture(arg1);\n return ret;\n }, arguments); },\n __wbg_createView_96e5e405cc3c01e8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createView(arg1);\n return ret;\n }, arguments); },\n __wbg_description_7a568e202a00293f: function(arg0, arg1) {\n const ret = arg1.description;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_destroy_249478e98a7943d5: function(arg0) {\n arg0.destroy();\n },\n __wbg_destroy_637537007d9eaa44: function(arg0) {\n arg0.destroy();\n },\n __wbg_displayHeight_fb2700c23cca6739: function(arg0) {\n const ret = arg0.displayHeight;\n return ret;\n },\n __wbg_displayWidth_9e9d6031a3036613: function(arg0) {\n const ret = arg0.displayWidth;\n return ret;\n },\n __wbg_document_3b5c3071b43e97ee: function(arg0) {\n const ret = arg0.document;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_drawIndexed_638959aae942557c: function(arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.drawIndexed(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4, arg5 >>> 0);\n },\n __wbg_draw_086a9578fc9898c2: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.draw(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_end_b57473834b877409: function(arg0) {\n arg0.end();\n },\n __wbg_error_757e9472f8410341: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_finish_09ec094c10f41e7b: function(arg0) {\n const ret = arg0.finish();\n return ret;\n },\n __wbg_finish_ec1c191f66a895b1: function(arg0, arg1) {\n const ret = arg0.finish(arg1);\n return ret;\n },\n __wbg_getContext_1938edb9a972f63d: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getContext_d93f904b714852ae: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getCurrentTexture_c3b1727224d7f6e6: function() { return handleError(function (arg0) {\n const ret = arg0.getCurrentTexture();\n return ret;\n }, arguments); },\n __wbg_getMappedRange_28e816a763520e01: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getMappedRange(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_getPreferredCanvasFormat_0ef5034c8902201b: function(arg0) {\n const ret = arg0.getPreferredCanvasFormat();\n return (__wbindgen_enum_GpuTextureFormat.indexOf(ret) + 1 || 102) - 1;\n },\n __wbg_get_0c55869fe53c7d14: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_gpu_514705c6dd1f0dab: function(arg0) {\n const ret = arg0.gpu;\n return ret;\n },\n __wbg_height_a587c99454238459: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_a6466ebf29036658: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_ac6f1c3f49c13fe2: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_info_8554cb7af37427b6: function(arg0) {\n const ret = arg0.info;\n return ret;\n },\n __wbg_instanceof_HtmlCanvasElement_89f280683e987b9e: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLCanvasElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlImageElement_f22acd64d72ae23a: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLImageElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlVideoElement_64f13b58baf30810: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLVideoElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_ImageBitmap_536fdba57df2c6ac: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ImageBitmap;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_OffscreenCanvas_fcf6ec01367f54ec: function(arg0) {\n let result;\n try {\n result = arg0 instanceof OffscreenCanvas;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_VideoFrame_cd5d3aac6098cfc2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof VideoFrame;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Window_5cf453f5639aa1a2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isFallbackAdapter_6a4fa7356d18310b: function(arg0) {\n const ret = arg0.isFallbackAdapter;\n return ret;\n },\n __wbg_label_fceb40a43a358e62: function(arg0, arg1) {\n const ret = arg1.label;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_length_186163212ffe79c3: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_limits_4e444eb8c2e61c45: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_limits_98515cc885d709ef: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_lost_25273dba897db03c: function(arg0) {\n const ret = arg0.lost;\n return ret;\n },\n __wbg_mapAsync_b0597127f5037286: function(arg0, arg1, arg2, arg3) {\n const ret = arg0.mapAsync(arg1 >>> 0, arg2, arg3);\n return ret;\n },\n __wbg_maxBindGroupsPlusVertexBuffers_1face4afb5363937: function(arg0) {\n const ret = arg0.maxBindGroupsPlusVertexBuffers;\n return ret;\n },\n __wbg_maxBindGroups_a0b7e55762f095b9: function(arg0) {\n const ret = arg0.maxBindGroups;\n return ret;\n },\n __wbg_maxBindingsPerBindGroup_ec9067be38d6ec72: function(arg0) {\n const ret = arg0.maxBindingsPerBindGroup;\n return ret;\n },\n __wbg_maxBufferSize_a9ce15e541c64cd2: function(arg0) {\n const ret = arg0.maxBufferSize;\n return ret;\n },\n __wbg_maxColorAttachmentBytesPerSample_44089e129e1a2a1d: function(arg0) {\n const ret = arg0.maxColorAttachmentBytesPerSample;\n return ret;\n },\n __wbg_maxColorAttachments_6bd8156394ba618c: function(arg0) {\n const ret = arg0.maxColorAttachments;\n return ret;\n },\n __wbg_maxComputeInvocationsPerWorkgroup_7b086f15ef868934: function(arg0) {\n const ret = arg0.maxComputeInvocationsPerWorkgroup;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeX_8bbe505e0ac8dc18: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeX;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeY_7228ed3935eecc31: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeY;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeZ_6092b56a967f6f8d: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeZ;\n return ret;\n },\n __wbg_maxComputeWorkgroupStorageSize_4773e3bd3936df36: function(arg0) {\n const ret = arg0.maxComputeWorkgroupStorageSize;\n return ret;\n },\n __wbg_maxComputeWorkgroupsPerDimension_79222bf8e8a90fbd: function(arg0) {\n const ret = arg0.maxComputeWorkgroupsPerDimension;\n return ret;\n },\n __wbg_maxDynamicStorageBuffersPerPipelineLayout_3ab5762b1b2c7fc2: function(arg0) {\n const ret = arg0.maxDynamicStorageBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxDynamicUniformBuffersPerPipelineLayout_722da31d0de1c256: function(arg0) {\n const ret = arg0.maxDynamicUniformBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxInterStageShaderVariables_821096d4b3020715: function(arg0) {\n const ret = arg0.maxInterStageShaderVariables;\n return ret;\n },\n __wbg_maxSampledTexturesPerShaderStage_c6aea9e05c0a02ca: function(arg0) {\n const ret = arg0.maxSampledTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxSamplersPerShaderStage_3aa30f6c002d3a99: function(arg0) {\n const ret = arg0.maxSamplersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageBufferBindingSize_84a2c2433627fca2: function(arg0) {\n const ret = arg0.maxStorageBufferBindingSize;\n return ret;\n },\n __wbg_maxStorageBuffersPerShaderStage_25b96748df28dc20: function(arg0) {\n const ret = arg0.maxStorageBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageTexturesPerShaderStage_53ed734f26e6c1ad: function(arg0) {\n const ret = arg0.maxStorageTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxTextureArrayLayers_9ec487f1ce102992: function(arg0) {\n const ret = arg0.maxTextureArrayLayers;\n return ret;\n },\n __wbg_maxTextureDimension1D_faef91b2e9fa6740: function(arg0) {\n const ret = arg0.maxTextureDimension1D;\n return ret;\n },\n __wbg_maxTextureDimension2D_3a923eb2df4d9124: function(arg0) {\n const ret = arg0.maxTextureDimension2D;\n return ret;\n },\n __wbg_maxTextureDimension3D_943321fe5945464e: function(arg0) {\n const ret = arg0.maxTextureDimension3D;\n return ret;\n },\n __wbg_maxUniformBufferBindingSize_21e89ff761d576db: function(arg0) {\n const ret = arg0.maxUniformBufferBindingSize;\n return ret;\n },\n __wbg_maxUniformBuffersPerShaderStage_19a0bfb0189f7254: function(arg0) {\n const ret = arg0.maxUniformBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxVertexAttributes_49aef6c51d07a280: function(arg0) {\n const ret = arg0.maxVertexAttributes;\n return ret;\n },\n __wbg_maxVertexBufferArrayStride_f68c4029e6f047ec: function(arg0) {\n const ret = arg0.maxVertexBufferArrayStride;\n return ret;\n },\n __wbg_maxVertexBuffers_ce9f15a623f9aac7: function(arg0) {\n const ret = arg0.maxVertexBuffers;\n return ret;\n },\n __wbg_message_5223ba7df7256eac: function(arg0, arg1) {\n const ret = arg1.message;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_minStorageBufferOffsetAlignment_529f1f52e61188fc: function(arg0) {\n const ret = arg0.minStorageBufferOffsetAlignment;\n return ret;\n },\n __wbg_minUniformBufferOffsetAlignment_519e26287e1996a3: function(arg0) {\n const ret = arg0.minUniformBufferOffsetAlignment;\n return ret;\n },\n __wbg_naturalHeight_fb7d27a9642e796c: function(arg0) {\n const ret = arg0.naturalHeight;\n return ret;\n },\n __wbg_naturalWidth_c3b5a9ac32cd185e: function(arg0) {\n const ret = arg0.naturalWidth;\n return ret;\n },\n __wbg_navigator_9641ab32fa612dd1: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_navigator_c17f443a6fe5d38d: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_new_2bfd0f45e60518b1: function() { return handleError(function (arg0, arg1) {\n const ret = new OffscreenCanvas(arg0 >>> 0, arg1 >>> 0);\n return ret;\n }, arguments); },\n __wbg_new_ba40181b3f24ac80: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_bb74001155cb8ca8: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_cd4348290afae586: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_6b60b99917da27d6: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_e09da9dae6ee5935: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_with_byte_offset_and_length_3cd32055a417f095: function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n },\n __wbg_new_with_length_01b143a7e5dd5a3e: function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n },\n __wbg_now_84237b99fa85a391: function() {\n const ret = performance.now();\n return ret;\n },\n __wbg_onSubmittedWorkDone_1190213cee1ecf7e: function(arg0) {\n const ret = arg0.onSubmittedWorkDone();\n return ret;\n },\n __wbg_prototypesetcall_13162965d1fe7aa3: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_querySelectorAll_6c1bd81d448fb480: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.querySelectorAll(getStringFromWasm0(arg1, arg2));\n return ret;\n }, arguments); },\n __wbg_queueMicrotask_1e8503a8a690f0a3: function(arg0) {\n const ret = arg0.queueMicrotask;\n return ret;\n },\n __wbg_queueMicrotask_4a1a4d8dd332373b: function(arg0) {\n queueMicrotask(arg0);\n },\n __wbg_queue_e250e2ebc49b39e0: function(arg0) {\n const ret = arg0.queue;\n return ret;\n },\n __wbg_reason_53e762e714b67b72: function(arg0) {\n const ret = arg0.reason;\n return (__wbindgen_enum_GpuDeviceLostReason.indexOf(ret) + 1 || 3) - 1;\n },\n __wbg_renderer_new: function(arg0) {\n const ret = Renderer.__wrap(arg0);\n return ret;\n },\n __wbg_requestAdapter_a539af006419f2e9: function(arg0, arg1) {\n const ret = arg0.requestAdapter(arg1);\n return ret;\n },\n __wbg_requestDevice_5cb8a582e55d08cb: function(arg0, arg1) {\n const ret = arg0.requestDevice(arg1);\n return ret;\n },\n __wbg_resolve_dbf78ab4942478b0: function(arg0) {\n const ret = Promise.resolve(arg0);\n return ret;\n },\n __wbg_setBindGroup_418c3e0eb6943ce0: function(arg0, arg1, arg2) {\n arg0.setBindGroup(arg1 >>> 0, arg2);\n },\n __wbg_setBindGroup_82d014e8f799f053: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setBindGroup(arg1 >>> 0, arg2, getArrayU32FromWasm0(arg3, arg4), arg5, arg6 >>> 0);\n }, arguments); },\n __wbg_setIndexBuffer_241097e303986c14: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setIndexBuffer(arg1, __wbindgen_enum_GpuIndexFormat[arg2], arg3, arg4);\n },\n __wbg_setPipeline_b6f981027e02cd16: function(arg0, arg1) {\n arg0.setPipeline(arg1);\n },\n __wbg_setScissorRect_889235eeb784732b: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setScissorRect(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_setVertexBuffer_6db3b60e99280744: function(arg0, arg1, arg2, arg3) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3);\n },\n __wbg_setVertexBuffer_cbf4ca1627c02f4c: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3, arg4);\n },\n __wbg_setViewport_c0be08dcc8965ccf: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setViewport(arg1, arg2, arg3, arg4, arg5, arg6);\n },\n __wbg_set_118fefd528ab0a79: function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n },\n __wbg_set_2793479888329cb6: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_set_a_1c94f1413a06c773: function(arg0, arg1) {\n arg0.a = arg1;\n },\n __wbg_set_access_b0a6fbebfbe53242: function(arg0, arg1) {\n arg0.access = __wbindgen_enum_GpuStorageTextureAccess[arg1];\n },\n __wbg_set_address_mode_u_a39aefdf030758ae: function(arg0, arg1) {\n arg0.addressModeU = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_v_999ec6ed4d587e8c: function(arg0, arg1) {\n arg0.addressModeV = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_w_a936c884ccf08234: function(arg0, arg1) {\n arg0.addressModeW = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_alpha_84214d12347c6647: function(arg0, arg1) {\n arg0.alpha = arg1;\n },\n __wbg_set_alpha_mode_278c6649365aff36: function(arg0, arg1) {\n arg0.alphaMode = __wbindgen_enum_GpuCanvasAlphaMode[arg1];\n },\n __wbg_set_alpha_to_coverage_enabled_1e879520cab4bb05: function(arg0, arg1) {\n arg0.alphaToCoverageEnabled = arg1 !== 0;\n },\n __wbg_set_array_layer_count_bd7a074559a0abaa: function(arg0, arg1) {\n arg0.arrayLayerCount = arg1 >>> 0;\n },\n __wbg_set_array_stride_f64_b132c6a79afeae43: function(arg0, arg1) {\n arg0.arrayStride = arg1;\n },\n __wbg_set_aspect_1db857832468d61f: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_3b0dceed92671cc1: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_8c866a3891032753: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_attributes_67bbc44b08e038d6: function(arg0, arg1, arg2) {\n arg0.attributes = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_b_a93bcfdd1c29a0bd: function(arg0, arg1) {\n arg0.b = arg1;\n },\n __wbg_set_base_array_layer_e745f84c2e5437e2: function(arg0, arg1) {\n arg0.baseArrayLayer = arg1 >>> 0;\n },\n __wbg_set_base_mip_level_fe08854fab09de85: function(arg0, arg1) {\n arg0.baseMipLevel = arg1 >>> 0;\n },\n __wbg_set_beginning_of_pass_write_index_a13b608f19d6a2f0: function(arg0, arg1) {\n arg0.beginningOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_bind_group_layouts_383f681565a30d8a: function(arg0, arg1, arg2) {\n arg0.bindGroupLayouts = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_binding_bd7d6b01bb08823a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_binding_dbed4a234264971a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_blend_1f3e5b36f9c246cb: function(arg0, arg1) {\n arg0.blend = arg1;\n },\n __wbg_set_buffer_292fb3c30928dc50: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_76841cdbff393f1d: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_91f4e8e05066c37a: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffers_47665c552e27672c: function(arg0, arg1, arg2) {\n arg0.buffers = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_bytes_per_row_4ef9c2c51932b041: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_bytes_per_row_75441352f606ebc8: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_clear_value_gpu_color_dict_303e0009591e5d26: function(arg0, arg1) {\n arg0.clearValue = arg1;\n },\n __wbg_set_code_130aebc49c4cadd3: function(arg0, arg1, arg2) {\n arg0.code = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_color_6d2de56a2224ec57: function(arg0, arg1) {\n arg0.color = arg1;\n },\n __wbg_set_color_attachments_e83f79badceda8b4: function(arg0, arg1, arg2) {\n arg0.colorAttachments = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_compare_159af15eb77dbcd2: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_compare_4db27ced1edc0322: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_count_4d1e9559a7f1b993: function(arg0, arg1) {\n arg0.count = arg1 >>> 0;\n },\n __wbg_set_cull_mode_31293d13bc064271: function(arg0, arg1) {\n arg0.cullMode = __wbindgen_enum_GpuCullMode[arg1];\n },\n __wbg_set_depth_bias_b30728f3ab3f643e: function(arg0, arg1) {\n arg0.depthBias = arg1;\n },\n __wbg_set_depth_bias_clamp_5b58fd4819283038: function(arg0, arg1) {\n arg0.depthBiasClamp = arg1;\n },\n __wbg_set_depth_bias_slope_scale_8b8b20db6b43c43b: function(arg0, arg1) {\n arg0.depthBiasSlopeScale = arg1;\n },\n __wbg_set_depth_clear_value_1165941523836019: function(arg0, arg1) {\n arg0.depthClearValue = arg1;\n },\n __wbg_set_depth_compare_81dd71de7e433cc2: function(arg0, arg1) {\n arg0.depthCompare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_depth_fail_op_ddf822c573cdf0c1: function(arg0, arg1) {\n arg0.depthFailOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_depth_load_op_ca270acab0c1ca69: function(arg0, arg1) {\n arg0.depthLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_depth_or_array_layers_e59f3988a095ccac: function(arg0, arg1) {\n arg0.depthOrArrayLayers = arg1 >>> 0;\n },\n __wbg_set_depth_read_only_49ca399f98b97955: function(arg0, arg1) {\n arg0.depthReadOnly = arg1 !== 0;\n },\n __wbg_set_depth_stencil_41e94739225cb2c3: function(arg0, arg1) {\n arg0.depthStencil = arg1;\n },\n __wbg_set_depth_stencil_attachment_36ce3695dfcb6b85: function(arg0, arg1) {\n arg0.depthStencilAttachment = arg1;\n },\n __wbg_set_depth_store_op_6cd6bdde49f9050d: function(arg0, arg1) {\n arg0.depthStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_depth_write_enabled_4b5da11c77fbdab7: function(arg0, arg1) {\n arg0.depthWriteEnabled = arg1 !== 0;\n },\n __wbg_set_device_1940fd5f9e2a7fee: function(arg0, arg1) {\n arg0.device = arg1;\n },\n __wbg_set_dimension_88d0c9f16bb079fb: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureDimension[arg1];\n },\n __wbg_set_dimension_bab9530fa3e311d8: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_dst_factor_80c13f29a3e117cb: function(arg0, arg1) {\n arg0.dstFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_end_of_pass_write_index_793fcfe3141dc357: function(arg0, arg1) {\n arg0.endOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_entries_552f52b2aa3b346d: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entries_d9929dbfa2aaa9a7: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_0eacf7b26b3637b0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_bb3692db4a6065d0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_external_texture_1bef5ba626275d0a: function(arg0, arg1) {\n arg0.externalTexture = arg1;\n },\n __wbg_set_fail_op_739cc3815d38c95f: function(arg0, arg1) {\n arg0.failOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_feb3714f475485ba: function(arg0, arg1, arg2) {\n arg0.set(getArrayU8FromWasm0(arg1, arg2));\n },\n __wbg_set_flip_y_ab62f34abbe69be1: function(arg0, arg1) {\n arg0.flipY = arg1 !== 0;\n },\n __wbg_set_format_1119b9930bd324e1: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_443ea19e2d25a1e2: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_459792306baadae5: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_46b1c6b3acc10b24: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_5a62f31a4690f935: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuVertexFormat[arg1];\n },\n __wbg_set_format_efec4f7d9471ddbb: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_fd579d96fa4e468c: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_fragment_bea523f8973c326e: function(arg0, arg1) {\n arg0.fragment = arg1;\n },\n __wbg_set_front_face_30951d0404e9e6d4: function(arg0, arg1) {\n arg0.frontFace = __wbindgen_enum_GpuFrontFace[arg1];\n },\n __wbg_set_g_90eacc6608e549f8: function(arg0, arg1) {\n arg0.g = arg1;\n },\n __wbg_set_has_dynamic_offset_6e5f3385eb579529: function(arg0, arg1) {\n arg0.hasDynamicOffset = arg1 !== 0;\n },\n __wbg_set_height_3f64e19acf29f5fb: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae0610d318c3428c: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae24c2f7d580ae0a: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_label_08745022b1ec7b66: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_11c9eb57693a8459: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_20c42b4ebeb250d5: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_22e3966c8d513ba6: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_5347fc976d15e94c: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_644bc1b32c7917b0: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_73c99dab6708c962: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_85a21b5fdd57fd91: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_89d2ffaf598df6a4: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_9e68078b9533426b: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_a80ced9a51c33d0f: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_cba03ffef7ae90a3: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_f654bcb731d4d9ca: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_layout_200fc3b143da0a9e: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_3f0cb99635c33123: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_gpu_auto_layout_mode_2e8a53f8643b4f69: function(arg0, arg1) {\n arg0.layout = __wbindgen_enum_GpuAutoLayoutMode[arg1];\n },\n __wbg_set_load_op_e8c33d4bdd2772aa: function(arg0, arg1) {\n arg0.loadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_lod_max_clamp_fcbef26e87120fac: function(arg0, arg1) {\n arg0.lodMaxClamp = arg1;\n },\n __wbg_set_lod_min_clamp_f5b6ddca1e4d813f: function(arg0, arg1) {\n arg0.lodMinClamp = arg1;\n },\n __wbg_set_mag_filter_ba0a2f25ad41eea8: function(arg0, arg1) {\n arg0.magFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mapped_at_creation_8af5b87ccb898bbe: function(arg0, arg1) {\n arg0.mappedAtCreation = arg1 !== 0;\n },\n __wbg_set_mask_0de0e782abec3c25: function(arg0, arg1) {\n arg0.mask = arg1 >>> 0;\n },\n __wbg_set_max_anisotropy_8361213d3df93532: function(arg0, arg1) {\n arg0.maxAnisotropy = arg1;\n },\n __wbg_set_min_binding_size_f64_c6d68d773b7051d3: function(arg0, arg1) {\n arg0.minBindingSize = arg1;\n },\n __wbg_set_min_filter_8aa8b0f7523a0281: function(arg0, arg1) {\n arg0.minFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mip_level_102afeb158e4f728: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_c0ac46de264d83ec: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_cd650972803ed9eb: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_f0c5ed95eedda453: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mipmap_filter_1cbdec28d1b54d9d: function(arg0, arg1) {\n arg0.mipmapFilter = __wbindgen_enum_GpuMipmapFilterMode[arg1];\n },\n __wbg_set_mode_51d2c5a5ac0f7ac9: function(arg0, arg1) {\n arg0.mode = __wbindgen_enum_GpuCanvasToneMappingMode[arg1];\n },\n __wbg_set_module_3dec1a50bca7870a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_module_b42baf3925e2a94a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_multisample_6af76792fae6efb1: function(arg0, arg1) {\n arg0.multisample = arg1;\n },\n __wbg_set_multisampled_ae3f9f01a324f57c: function(arg0, arg1) {\n arg0.multisampled = arg1 !== 0;\n },\n __wbg_set_offset_f64_15176b737de7dde0: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_18de9c771f307302: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_52f728fc5c98a52c: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_9374d9e912985773: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_operation_e103287df7ac9cf6: function(arg0, arg1) {\n arg0.operation = __wbindgen_enum_GpuBlendOperation[arg1];\n },\n __wbg_set_origin_gpu_origin_2d_dict_0e541bd50713ae04: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_26016670147a706c: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_4e6802818d9d43c7: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_pass_op_4d08c3105f64a17a: function(arg0, arg1) {\n arg0.passOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_power_preference_6bc1d2697a0e7374: function(arg0, arg1) {\n arg0.powerPreference = __wbindgen_enum_GpuPowerPreference[arg1];\n },\n __wbg_set_premultiplied_alpha_3625f78af5f2fed6: function(arg0, arg1) {\n arg0.premultipliedAlpha = arg1 !== 0;\n },\n __wbg_set_primitive_ef867d733c4efb1c: function(arg0, arg1) {\n arg0.primitive = arg1;\n },\n __wbg_set_query_set_765c4c9ab99342cb: function(arg0, arg1) {\n arg0.querySet = arg1;\n },\n __wbg_set_r_1116d6a5f656263d: function(arg0, arg1) {\n arg0.r = arg1;\n },\n __wbg_set_required_features_5bda1420e19461b2: function(arg0, arg1, arg2) {\n arg0.requiredFeatures = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_required_limits_e78b923d73f9b596: function(arg0, arg1) {\n arg0.requiredLimits = arg1;\n },\n __wbg_set_resolve_target_gpu_texture_view_a7a97a7c04d84698: function(arg0, arg1) {\n arg0.resolveTarget = arg1;\n },\n __wbg_set_resource_0f960a4279e7e400: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_buffer_binding_53a2189a77dd38be: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_texture_view_9153a2356b958667: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_rows_per_image_11e9552fb5c5c5ab: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_rows_per_image_df6af33a5492c1cf: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_sample_count_8262aacc91878e4d: function(arg0, arg1) {\n arg0.sampleCount = arg1 >>> 0;\n },\n __wbg_set_sample_type_563589178fc892fe: function(arg0, arg1) {\n arg0.sampleType = __wbindgen_enum_GpuTextureSampleType[arg1];\n },\n __wbg_set_sampler_ccdca76ef8e642ca: function(arg0, arg1) {\n arg0.sampler = arg1;\n },\n __wbg_set_shader_location_31dc427c303a32aa: function(arg0, arg1) {\n arg0.shaderLocation = arg1 >>> 0;\n },\n __wbg_set_size_f64_3ff72c0d736c42a1: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_f64_9b65e4916b2eb111: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_gpu_extent_3d_dict_bba6669c79c26190: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_source_b5f82926b86ec9d9: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_canvas_element_a9840c24a328a44e: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_image_element_b2803013cdaaa4f6: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_video_element_9fd22376f74c9aff: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_image_data_2d6a4979315db9d8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_offscreen_canvas_ef8e002b1f9c1fd8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_video_frame_e98ea9a6467ae147: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_src_factor_7e90d4b7d8227fc5: function(arg0, arg1) {\n arg0.srcFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_stencil_back_6b5aeefbb90ae3ae: function(arg0, arg1) {\n arg0.stencilBack = arg1;\n },\n __wbg_set_stencil_clear_value_56fa848198a9b430: function(arg0, arg1) {\n arg0.stencilClearValue = arg1 >>> 0;\n },\n __wbg_set_stencil_front_4ffeca9473bca095: function(arg0, arg1) {\n arg0.stencilFront = arg1;\n },\n __wbg_set_stencil_load_op_b7a9fe3ad789b6c6: function(arg0, arg1) {\n arg0.stencilLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_stencil_read_mask_7cfe0945679de134: function(arg0, arg1) {\n arg0.stencilReadMask = arg1 >>> 0;\n },\n __wbg_set_stencil_read_only_0dde0c073192b5fa: function(arg0, arg1) {\n arg0.stencilReadOnly = arg1 !== 0;\n },\n __wbg_set_stencil_store_op_d320bcbb72456a4c: function(arg0, arg1) {\n arg0.stencilStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_stencil_write_mask_765017d5830ee98a: function(arg0, arg1) {\n arg0.stencilWriteMask = arg1 >>> 0;\n },\n __wbg_set_step_mode_2b1318f00e2ddc02: function(arg0, arg1) {\n arg0.stepMode = __wbindgen_enum_GpuVertexStepMode[arg1];\n },\n __wbg_set_storage_texture_b9e95e260c9d49a3: function(arg0, arg1) {\n arg0.storageTexture = arg1;\n },\n __wbg_set_store_op_e2b740eddfd2713f: function(arg0, arg1) {\n arg0.storeOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_strip_index_format_22ddab1b8f352c1d: function(arg0, arg1) {\n arg0.stripIndexFormat = __wbindgen_enum_GpuIndexFormat[arg1];\n },\n __wbg_set_targets_07e15f3cca640faf: function(arg0, arg1, arg2) {\n arg0.targets = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_texture_7b9ace323bfe7938: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_84a5f84f0f451291: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_b35a4d6a35c491fa: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_timestamp_writes_1d304b9eb09ff227: function(arg0, arg1) {\n arg0.timestampWrites = arg1;\n },\n __wbg_set_tone_mapping_23fcd4f846a61048: function(arg0, arg1) {\n arg0.toneMapping = arg1;\n },\n __wbg_set_topology_b29804e5549370f5: function(arg0, arg1) {\n arg0.topology = __wbindgen_enum_GpuPrimitiveTopology[arg1];\n },\n __wbg_set_type_ac87cc570da17000: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuBufferBindingType[arg1];\n },\n __wbg_set_type_f3d1ad35dc7889f9: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuSamplerBindingType[arg1];\n },\n __wbg_set_unclipped_depth_59155eb615f193fe: function(arg0, arg1) {\n arg0.unclippedDepth = arg1 !== 0;\n },\n __wbg_set_usage_5ba672bf81ba9859: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_b0070c2ce47149a6: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_bac3cabe90090275: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_f3e1a48118ff483a: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_vertex_00b1e17dc3fe7fb3: function(arg0, arg1) {\n arg0.vertex = arg1;\n },\n __wbg_set_view_dimension_e9e9cd07d7ad686d: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_dimension_eb197c35c45e572c: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_formats_2540cdb8dde31055: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_formats_845b425c1d19e1af: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_gpu_texture_view_9a3c34ba4d1969b8: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_view_gpu_texture_view_efa644c1ce3c4deb: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_visibility_65413465e7b24eb6: function(arg0, arg1) {\n arg0.visibility = arg1 >>> 0;\n },\n __wbg_set_width_5f89a551b5472887: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_a2410cafbdefeb5a: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_eb3001e1dcabb909: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_write_mask_39ce121635fd4296: function(arg0, arg1) {\n arg0.writeMask = arg1 >>> 0;\n },\n __wbg_set_x_b078c58009aa57bd: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_x_d851b2611b154969: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_y_3df92c4bcff23616: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_y_76a6f85fc60d74e5: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_z_3633c53887a9ff5e: function(arg0, arg1) {\n arg0.z = arg1 >>> 0;\n },\n __wbg_stack_575c4e0918581b9c: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_static_accessor_GLOBAL_THIS_003ee833af9699fc: function() {\n const ret = typeof globalThis === 'undefined' ? undefined : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_GLOBAL_e4293fb22cbe77da: function() {\n const ret = typeof global === 'undefined' ? undefined : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_SELF_53bb20457401453d: function() {\n const ret = typeof self === 'undefined' ? undefined : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_WINDOW_b5e0810bfecb7feb: function() {\n const ret = typeof window === 'undefined' ? undefined : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_subgroupMaxSize_3586e822dc3603f6: function(arg0) {\n const ret = arg0.subgroupMaxSize;\n return ret;\n },\n __wbg_subgroupMinSize_17f758985cdd1dab: function(arg0) {\n const ret = arg0.subgroupMinSize;\n return ret;\n },\n __wbg_submit_077c85cc28e36892: function(arg0, arg1, arg2) {\n arg0.submit(getArrayJsValueViewFromWasm0(arg1, arg2));\n },\n __wbg_then_3a4f899454bcf8c9: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_then_656f253a5dd7d8ea: function(arg0, arg1, arg2) {\n const ret = arg0.then(arg1, arg2);\n return ret;\n },\n __wbg_then_e3f7f2d365708be8: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_unconfigure_835307f58dc68d80: function(arg0) {\n arg0.unconfigure();\n },\n __wbg_unmap_6a96b14c9ef5f7f5: function(arg0) {\n arg0.unmap();\n },\n __wbg_videoHeight_0d108b7f03cde4ef: function(arg0) {\n const ret = arg0.videoHeight;\n return ret;\n },\n __wbg_videoWidth_34b4e257cb35c6ca: function(arg0) {\n const ret = arg0.videoWidth;\n return ret;\n },\n __wbg_width_000813f5f73b7341: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_babc5dc7654771b1: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_f84552448726a9a9: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_writeBuffer_d7640e64ceb69371: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.writeBuffer(arg1, arg2, getArrayU8FromWasm0(arg3, arg4), arg5, arg6);\n }, arguments); },\n __wbg_writeTexture_dba1e801af087dfd: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.writeTexture(arg1, getArrayU8FromWasm0(arg2, arg3), arg4, arg5);\n }, arguments); },\n __wbindgen_generic_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 586, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDevice\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDeviceLostInfo\")], shim_idx: 539, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_);\n return ret;\n },\n __wbindgen_generic_0000000000000004: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"any\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46);\n return ret;\n },\n __wbindgen_generic_0000000000000005: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"undefined\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47);\n return ret;\n },\n __wbindgen_generic_0000000000000006: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_generic_0000000000000007: function(arg0, arg1) {\n // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref(\"Uint8Array\")`.\n const ret = getArrayU8FromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_generic_0000000000000008: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n table.set(0, undefined);\n table.set(1024, undefined);\n table.set(1025, null);\n table.set(1026, true);\n table.set(1027, false);\n },\n };\n return {\n __proto__: null,\n \"./ms_renderer_bg.js\": import0,\n };\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2);\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3);\n}\n\n\nconst __wbindgen_enum_GpuAddressMode = [\"clamp-to-edge\", \"repeat\", \"mirror-repeat\"];\n\n\nconst __wbindgen_enum_GpuAutoLayoutMode = [\"auto\"];\n\n\nconst __wbindgen_enum_GpuBlendFactor = [\"zero\", \"one\", \"src\", \"one-minus-src\", \"src-alpha\", \"one-minus-src-alpha\", \"dst\", \"one-minus-dst\", \"dst-alpha\", \"one-minus-dst-alpha\", \"src-alpha-saturated\", \"constant\", \"one-minus-constant\", \"src1\", \"one-minus-src1\", \"src1-alpha\", \"one-minus-src1-alpha\"];\n\n\nconst __wbindgen_enum_GpuBlendOperation = [\"add\", \"subtract\", \"reverse-subtract\", \"min\", \"max\"];\n\n\nconst __wbindgen_enum_GpuBufferBindingType = [\"uniform\", \"storage\", \"read-only-storage\"];\n\n\nconst __wbindgen_enum_GpuCanvasAlphaMode = [\"opaque\", \"premultiplied\"];\n\n\nconst __wbindgen_enum_GpuCanvasToneMappingMode = [\"standard\", \"extended\"];\n\n\nconst __wbindgen_enum_GpuCompareFunction = [\"never\", \"less\", \"equal\", \"less-equal\", \"greater\", \"not-equal\", \"greater-equal\", \"always\"];\n\n\nconst __wbindgen_enum_GpuCullMode = [\"none\", \"front\", \"back\"];\n\n\nconst __wbindgen_enum_GpuDeviceLostReason = [\"unknown\", \"destroyed\"];\n\n\nconst __wbindgen_enum_GpuFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuFrontFace = [\"ccw\", \"cw\"];\n\n\nconst __wbindgen_enum_GpuIndexFormat = [\"uint16\", \"uint32\"];\n\n\nconst __wbindgen_enum_GpuLoadOp = [\"load\", \"clear\"];\n\n\nconst __wbindgen_enum_GpuMipmapFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuPowerPreference = [\"low-power\", \"high-performance\"];\n\n\nconst __wbindgen_enum_GpuPrimitiveTopology = [\"point-list\", \"line-list\", \"line-strip\", \"triangle-list\", \"triangle-strip\"];\n\n\nconst __wbindgen_enum_GpuSamplerBindingType = [\"filtering\", \"non-filtering\", \"comparison\"];\n\n\nconst __wbindgen_enum_GpuStencilOperation = [\"keep\", \"zero\", \"replace\", \"invert\", \"increment-clamp\", \"decrement-clamp\", \"increment-wrap\", \"decrement-wrap\"];\n\n\nconst __wbindgen_enum_GpuStorageTextureAccess = [\"write-only\", \"read-only\", \"read-write\"];\n\n\nconst __wbindgen_enum_GpuStoreOp = [\"store\", \"discard\"];\n\n\nconst __wbindgen_enum_GpuTextureAspect = [\"all\", \"stencil-only\", \"depth-only\"];\n\n\nconst __wbindgen_enum_GpuTextureDimension = [\"1d\", \"2d\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuTextureFormat = [\"r8unorm\", \"r8snorm\", \"r8uint\", \"r8sint\", \"r16unorm\", \"r16snorm\", \"r16uint\", \"r16sint\", \"r16float\", \"rg8unorm\", \"rg8snorm\", \"rg8uint\", \"rg8sint\", \"r32uint\", \"r32sint\", \"r32float\", \"rg16unorm\", \"rg16snorm\", \"rg16uint\", \"rg16sint\", \"rg16float\", \"rgba8unorm\", \"rgba8unorm-srgb\", \"rgba8snorm\", \"rgba8uint\", \"rgba8sint\", \"bgra8unorm\", \"bgra8unorm-srgb\", \"rgb9e5ufloat\", \"rgb10a2uint\", \"rgb10a2unorm\", \"rg11b10ufloat\", \"rg32uint\", \"rg32sint\", \"rg32float\", \"rgba16unorm\", \"rgba16snorm\", \"rgba16uint\", \"rgba16sint\", \"rgba16float\", \"rgba32uint\", \"rgba32sint\", \"rgba32float\", \"stencil8\", \"depth16unorm\", \"depth24plus\", \"depth24plus-stencil8\", \"depth32float\", \"depth32float-stencil8\", \"bc1-rgba-unorm\", \"bc1-rgba-unorm-srgb\", \"bc2-rgba-unorm\", \"bc2-rgba-unorm-srgb\", \"bc3-rgba-unorm\", \"bc3-rgba-unorm-srgb\", \"bc4-r-unorm\", \"bc4-r-snorm\", \"bc5-rg-unorm\", \"bc5-rg-snorm\", \"bc6h-rgb-ufloat\", \"bc6h-rgb-float\", \"bc7-rgba-unorm\", \"bc7-rgba-unorm-srgb\", \"etc2-rgb8unorm\", \"etc2-rgb8unorm-srgb\", \"etc2-rgb8a1unorm\", \"etc2-rgb8a1unorm-srgb\", \"etc2-rgba8unorm\", \"etc2-rgba8unorm-srgb\", \"eac-r11unorm\", \"eac-r11snorm\", \"eac-rg11unorm\", \"eac-rg11snorm\", \"astc-4x4-unorm\", \"astc-4x4-unorm-srgb\", \"astc-5x4-unorm\", \"astc-5x4-unorm-srgb\", \"astc-5x5-unorm\", \"astc-5x5-unorm-srgb\", \"astc-6x5-unorm\", \"astc-6x5-unorm-srgb\", \"astc-6x6-unorm\", \"astc-6x6-unorm-srgb\", \"astc-8x5-unorm\", \"astc-8x5-unorm-srgb\", \"astc-8x6-unorm\", \"astc-8x6-unorm-srgb\", \"astc-8x8-unorm\", \"astc-8x8-unorm-srgb\", \"astc-10x5-unorm\", \"astc-10x5-unorm-srgb\", \"astc-10x6-unorm\", \"astc-10x6-unorm-srgb\", \"astc-10x8-unorm\", \"astc-10x8-unorm-srgb\", \"astc-10x10-unorm\", \"astc-10x10-unorm-srgb\", \"astc-12x10-unorm\", \"astc-12x10-unorm-srgb\", \"astc-12x12-unorm\", \"astc-12x12-unorm-srgb\"];\n\n\nconst __wbindgen_enum_GpuTextureSampleType = [\"float\", \"unfilterable-float\", \"depth\", \"sint\", \"uint\"];\n\n\nconst __wbindgen_enum_GpuTextureViewDimension = [\"1d\", \"2d\", \"2d-array\", \"cube\", \"cube-array\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuVertexFormat = [\"uint8\", \"uint8x2\", \"uint8x4\", \"sint8\", \"sint8x2\", \"sint8x4\", \"unorm8\", \"unorm8x2\", \"unorm8x4\", \"snorm8\", \"snorm8x2\", \"snorm8x4\", \"uint16\", \"uint16x2\", \"uint16x4\", \"sint16\", \"sint16x2\", \"sint16x4\", \"unorm16\", \"unorm16x2\", \"unorm16x4\", \"snorm16\", \"snorm16x2\", \"snorm16x4\", \"float16\", \"float16x2\", \"float16x4\", \"float32\", \"float32x2\", \"float32x3\", \"float32x4\", \"uint32\", \"uint32x2\", \"uint32x3\", \"uint32x4\", \"sint32\", \"sint32x2\", \"sint32x3\", \"sint32x4\", \"unorm10-10-10-2\", \"unorm8x4-bgra\"];\n\n\nconst __wbindgen_enum_GpuVertexStepMode = [\"vertex\", \"instance\"];\nconst MsTextFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_mstext_free(ptr, 1));\nconst RendererFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_renderer_free(ptr, 1));\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => wasm.__wbindgen_destroy_closure(state.a, state.b));\n\nfunction debugString(val) {\n switch (typeof val) {\n // primitive types\n case 'number':\n case 'boolean':\n case 'undefined':\n return `${val}`;\n case 'string':\n return JSON.stringify(val);\n case 'bigint':\n return `${val}n`;\n case 'symbol':\n return val.description !== undefined\n ? `Symbol(${val.description})`\n : 'Symbol';\n case 'function':\n return typeof val.name === 'string' && val.name !== ''\n ? `Function(${val.name})`\n : 'Function';\n case 'object': {\n if (val === null) {\n return 'null';\n }\n // objects\n if (Array.isArray(val)) {\n return '[' + Array.from(val, debugString).join(', ') + ']';\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n\n const toStringOutput = toString.call(val);\n // Test for built-in\n const className = /\\[object ([^\\]]+)\\]/.exec(toStringOutput)?.[1];\n\n // Failed to match the standard '[object ClassName]'\n if (className === undefined) {\n return toStringOutput;\n }\n if (className === 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n }\n // Per MDN: 'This list of values is exhaustive.'\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#description\n }\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayF64FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);\n}\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n wasm.__externref_drop_slice(ptr, len);\n return result;\n}\n\nfunction getArrayJsValueViewFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n return result;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nlet cachedFloat32ArrayMemory0 = null;\nfunction getFloat32ArrayMemory0() {\n if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {\n cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);\n }\n return cachedFloat32ArrayMemory0;\n}\n\nlet cachedFloat64ArrayMemory0 = null;\nfunction getFloat64ArrayMemory0() {\n if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {\n cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction makeMutClosure(arg0, arg1, f) {\n const state = { a: arg0, b: arg1, cnt: 1 };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n state.a = a;\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n wasm.__wbindgen_destroy_closure(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArrayF32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getFloat32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(bytes) {\n numBytesDecoded += bytes.length;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\n cachedTextDecoder.decode();\n numBytesDecoded = bytes.length;\n }\n return cachedTextDecoder.decode(bytes);\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedFloat32ArrayMemory0 = null;\n cachedFloat64ArrayMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (!module.ok) {\n throw new Error(`failed to fetch Wasm: ${module.status} ${module.statusText} fetching '${module.url}'`);\n }\n\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nlet __wbg_init_promise;\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n if (__wbg_init_promise === undefined) {\n __wbg_init_promise = __wbg_init_once(module_or_path);\n __wbg_init_promise.catch(() => { __wbg_init_promise = undefined; });\n }\n return __wbg_init_promise;\n}\n\nasync function __wbg_init_once(module_or_path) {\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('ms_renderer_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","import type { DotGridFillResolved, FractalNoiseFillResolved, GridFillResolved, NoiseFillResolved, Scene3D, StripeFillResolved } from \"@motionscript/core\";\n// The document both backends draw: a small Figma-like node tree. It stands in\n// for what core's evaluator hands a renderer each frame (transforms, sizes,\n// paints, the Graphics2D op lists of component renders).\n//\n// Mutations go through `touch`, which records a per-node dirty mask. Only the\n// retained backend reads the masks.\n\nexport type RGBA = [number, number, number, number];\nexport type Mat = [number, number, number, number, number, number];\n/**\n * A projective transform: `Mat`'s a b c d e f plus the perspective row g h i,\n * mapping (x, y) to ((a·x + c·y + e) / w, (b·x + d·y + f) / w) with\n * w = g·x + h·y + i — the engine's Matrix2D [a c e / b d f / g h i].\n */\nexport type Mat3 = [number, number, number, number, number, number, number, number, number];\n/** A node transform: affine (the fast path) or projective. */\nexport type Xform = Mat | Mat3;\n\nexport interface Stop {\n offset: number;\n color: RGBA;\n}\n\nexport type TileMode = \"clamp\" | \"repeat\" | \"mirror\" | \"decal\";\n\n/** An image or video frame the backend samples; `version` bumps when a video frame changes. */\nexport interface ImageAsset {\n id: number;\n width: number;\n height: number;\n /** Null for a 3D scene, which the renderer draws itself. */\n source: ImageBitmap | VideoFrame | HTMLCanvasElement | OffscreenCanvas | null;\n /** A core `Scene3D` drawn into this image at width × height logical px\n * (× the viewport scale): the shape's device size. */\n scene3d?: Scene3D;\n /** Device px per logical px a 3D scene renders at (default: the viewport's). */\n scale3d?: number;\n /** What the 3D scene's textures come from: images by their `src`, and\n * `Tex.surface` textures by descriptor (each a surface asset). */\n links3d?: { images?: Record<string, ImageAsset>; surfaces?: Map<object, ImageAsset> };\n /** A `Tex.surface` source: this detached subtree drawn at width × height\n * px (pixel ratio 1, as the engine's default), origin top-left. */\n surface?: Node;\n mipmaps: boolean;\n version: number;\n}\n\n/** Media fit modes: fill = cover, fit = contain. */\nexport type ImageFit = \"fill\" | \"fit\" | \"stretch\" | \"tile\";\n\nexport type Paint =\n | { kind: \"solid\"; color: RGBA }\n | { kind: \"linear\"; from: [number, number]; to: [number, number]; stops: Stop[]; tile?: TileMode }\n | { kind: \"radial\"; center: [number, number]; radius: number; stops: Stop[]; tile?: TileMode }\n /** Angles in degrees, clockwise from +x (y-down). */\n | { kind: \"sweep\"; center: [number, number]; startAngle: number; endAngle: number; stops: Stop[]; tile?: TileMode }\n /** An image placed in `box` (x, y, w, h, local units) by `fit`. */\n | { kind: \"image\"; image: ImageAsset; fit?: ImageFit; box: [number, number, number, number];\n /** Image px → local, overriding fit/box (adapter/geometry/image-matrix.ts). */\n matrix?: Mat; tile?: TileMode }\n /** One of the engine's procedural fills, resolved by @motionscript/core,\n * over the shape's bounds `box` (x, y, w, h, local units). */\n | { kind: \"procedural\"; fill: ProceduralFill; box: [number, number, number, number] }\n /** A user WGSL fill (DESIGN.md §6.1) over `box` (x, y, w, h, local units):\n * its source, `Params` values by name, the node's elapsed seconds, and the\n * image `sample_texture` reads. */\n | { kind: \"shader\"; source: string; uniforms: Record<string, number | number[]>; box: [number, number, number, number]; time: number; texture?: ImageAsset };\n\nexport type ProceduralFill =\n | DotGridFillResolved | GridFillResolved | StripeFillResolved | NoiseFillResolved | FractalNoiseFillResolved;\n\nexport interface StrokeStyle {\n paint: Paint;\n width: number;\n join?: \"miter\" | \"round\" | \"bevel\";\n cap?: \"butt\" | \"round\" | \"square\";\n miter?: number;\n dash?: number[];\n dashPhase?: number;\n}\n\nexport interface Shadow {\n dx: number;\n dy: number;\n sigma: number;\n spread: number;\n color: RGBA;\n}\n\nexport type Filter =\n | { kind: \"blur\"; sigma: number }\n | { kind: \"dropShadow\"; dx: number; dy: number; sigma: number; color: RGBA };\n\nexport const BLEND_MODES = [\n \"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"colorDodge\", \"colorBurn\",\n \"hardLight\", \"softLight\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\", \"plus\",\n] as const;\nexport type BlendMode = (typeof BLEND_MODES)[number];\n\nexport const VERB = { move: 0, line: 1, quad: 2, cubic: 3, close: 4 } as const;\n\nexport interface PathData {\n verbs: Uint8Array;\n points: Float32Array;\n}\n\nexport type Kind = \"group\" | \"rect\" | \"ellipse\" | \"path\" | \"compound\" | \"text\";\nexport const KIND_CODE: Record<Kind, number> = { group: 0, rect: 1, ellipse: 2, path: 3, compound: 4, text: 5 };\n\nexport interface TextRunSpec {\n text: string;\n family: string;\n size: number;\n weight?: number;\n italic?: boolean;\n letterSpacing?: number;\n decoration?: \"underline\" | \"lineThrough\";\n /** This run's own fill (rich text spans); default: the node's fill. */\n paint?: Paint;\n}\n\n/**\n * A text block, as core's TextState/RichTextState reaches the renderer. The\n * node's local space is block-local: the block is centred on the origin.\n */\nexport interface TextSpec {\n runs: TextRunSpec[];\n align?: \"left\" | \"right\" | \"center\" | \"justify\";\n verticalAlign?: \"top\" | \"center\" | \"bottom\";\n /** Wrap at `width` (when > 0); otherwise `width` only anchors alignment. */\n wrap?: boolean;\n width?: number;\n height?: number;\n /** 0 = the font's own line height, else a multiple of each run's size. */\n lineHeight?: number;\n /** Single-run text: fit the box (`width` × `height`), wrapping at `minFontSize` when `wrap`. */\n fontSize?: \"autofit\";\n minFontSize?: number;\n /** Text on a path (path space = the node's local space; one line). */\n path?: PathData;\n}\n\n/** How a compound member combines with the members before it. */\nexport type MemberOp = \"union\" | \"cut\" | \"intersect\" | \"exclude\";\nexport const MEMBER_OP: Record<MemberOp, number> = { union: 0, cut: 1, intersect: 2, exclude: 3 };\n\n/**\n * One member of a compound shape (core's Graphics2D shape union, a boolean\n * group). Members apply in order: unioned with the result so far, cut out of\n * it, intersected with it or excluded (xor) from it.\n */\nexport interface Member {\n kind: \"rect\" | \"ellipse\" | \"path\";\n /** Shorthand for `op: \"cut\"`. */\n cut?: boolean;\n op?: MemberOp;\n transform?: Mat;\n w?: number;\n h?: number;\n radii?: [number, number, number, number];\n path?: PathData;\n evenOdd?: boolean;\n}\n\n/** `invertAlphaEroded` / `alphaDilated`: the mask shrunk / grown by one device px first. */\nexport type MaskMode = \"alpha\" | \"luminance\" | \"invertAlpha\" | \"invertLuminance\" | \"invertAlphaEroded\" | \"alphaDilated\";\nexport const MASK_CODE: Record<MaskMode, number> = { alpha: 1, luminance: 2, invertAlpha: 3, invertLuminance: 4, invertAlphaEroded: 5, alphaDilated: 6 };\n\nexport const D = {\n CREATE: 1 << 0,\n CHILDREN: 1 << 1,\n TRANSFORM: 1 << 2,\n SIZE: 1 << 3,\n RADII: 1 << 4,\n FILL: 1 << 5,\n STROKE: 1 << 6,\n SHADOWS: 1 << 7,\n OPACITY: 1 << 8,\n BLEND: 1 << 9,\n CLIP: 1 << 10,\n FILTER: 1 << 11,\n PATH: 1 << 12,\n MEMBERS: 1 << 13,\n MASK: 1 << 14,\n TEXT: 1 << 15,\n EFFECTS: 1 << 16,\n ALL: (1 << 17) - 1,\n} as const;\n\nexport class Node {\n children: Node[] = [];\n transform: Xform = [1, 0, 0, 1, 0, 0];\n opacity = 1;\n blend: BlendMode = \"normal\";\n w = 0;\n h = 0;\n radii: [number, number, number, number] = [0, 0, 0, 0];\n fill?: Paint;\n stroke?: StrokeStyle;\n shadows: Shadow[] = [];\n /** Rounded-rect clip, or a path clip when `path` is set (x/y/w/h/r ignored). */\n clip?: { x: number; y: number; w: number; h: number; r: number; path?: PathData; evenOdd?: boolean };\n /** Group mask: the first child masks the rest. */\n mask?: MaskMode;\n members?: Member[];\n text?: TextSpec;\n /** core NodeEffects (built with core's `Effects`), in authored order. */\n effects?: object[];\n /** Seconds the node's effects animate with (its elapsed time). */\n effectTime?: number;\n /** The box effects measure against (local x, y, w, h); default: the content bounds. */\n effectBox?: [number, number, number, number];\n filter?: Filter;\n path?: PathData;\n evenOdd = false;\n dirty = D.ALL;\n\n constructor(readonly id: number, readonly kind: Kind) {}\n}\n\ntype Props = Partial<Omit<Node, \"id\" | \"kind\" | \"children\" | \"dirty\">>;\n\nexport class Doc {\n readonly root: Node;\n readonly nodes: Node[] = [];\n readonly images: ImageAsset[] = [];\n readonly dirty = new Set<Node>();\n private nextId = 0;\n\n constructor(readonly width: number, readonly height: number, readonly background: RGBA) {\n this.root = this.make(\"group\", {});\n }\n\n private make(kind: Kind, props: Props): Node {\n const n = new Node(this.nextId++, kind);\n Object.assign(n, props);\n this.nodes.push(n);\n this.dirty.add(n);\n return n;\n }\n\n add(parent: Node, kind: Kind, props: Props): Node {\n const n = this.make(kind, props);\n parent.children.push(n);\n this.touch(parent, D.CHILDREN);\n return n;\n }\n\n group(parent: Node, props: Props = {}) {\n return this.add(parent, \"group\", props);\n }\n rect(parent: Node, props: Props) {\n return this.add(parent, \"rect\", props);\n }\n ellipse(parent: Node, props: Props) {\n return this.add(parent, \"ellipse\", props);\n }\n pathNode(parent: Node, props: Props) {\n return this.add(parent, \"path\", props);\n }\n compound(parent: Node, props: Props) {\n return this.add(parent, \"compound\", props);\n }\n textNode(parent: Node, props: Props) {\n return this.add(parent, \"text\", props);\n }\n\n addImage(source: ImageAsset[\"source\"], width: number, height: number, opts: { mipmaps?: boolean } = {}): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source, mipmaps: opts.mipmaps ?? true, version: 1 };\n this.images.push(asset);\n return asset;\n }\n\n addScene3D(scene: Scene3D, width: number, height: number, links3d?: ImageAsset[\"links3d\"]): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, scene3d: scene, links3d };\n this.images.push(asset);\n return asset;\n }\n\n /** A group outside the drawn tree, for a surface's content. */\n detached(props: Props = {}): Node {\n return this.make(\"group\", props);\n }\n\n addSurface(root: Node, width: number, height: number): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, surface: root };\n this.images.push(asset);\n return asset;\n }\n\n touch(n: Node, bits: number) {\n n.dirty |= bits;\n this.dirty.add(n);\n }\n\n /** Marks every node fully dirty (a backend attached after the fact). */\n touchAll() {\n for (const n of this.nodes) this.touch(n, D.ALL);\n }\n}\n\n// ── matrices ─────────────────────────────────────────────────────────────────\n\nexport function mat(tx: number, ty: number, rot = 0, scale = 1, px = 0, py = 0): Mat {\n // translate(tx,ty) · rotate(rot) · scale(scale) · translate(-px,-py)\n const c = Math.cos(rot) * scale;\n const s = Math.sin(rot) * scale;\n return [c, s, -s, c, tx - (c * px - s * py), ty - (s * px + c * py)];\n}\n\nexport function translate(x: number, y: number): Mat {\n return [1, 0, 0, 1, x, y];\n}\n\n/** True when `m` carries a perspective row (not 0 0 1). */\nexport function isProjective(m: Xform): m is Mat3 {\n return m.length === 9 && (m[6] !== 0 || m[7] !== 0 || m[8] !== 1);\n}\n\n/** `m` as a row-major 3×3 [a c e / b d f / g h i]. */\nfunction rowMajor(m: Xform): number[] {\n return m.length === 9 ? [m[0], m[2], m[4], m[1], m[3], m[5], m[6], m[7], m[8]] : [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];\n}\n\n/** `p · c` (apply `c` first), projective. */\nexport function mul3(p: Xform, c: Xform): Mat3 {\n const P = rowMajor(p), C = rowMajor(c);\n const r = new Array<number>(9);\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = P[i * 3] * C[j] + P[i * 3 + 1] * C[3 + j] + P[i * 3 + 2] * C[6 + j];\n return [r[0], r[3], r[1], r[4], r[2], r[5], r[6], r[7], r[8]];\n}\n\n/** `p · c`, staying affine (six numbers) when both are. */\nexport function mulX(p: Xform, c: Xform): Xform {\n if (p.length === 9 || c.length === 9) return mul3(p, c);\n return [\n p[0] * c[0] + p[2] * c[1], p[1] * c[0] + p[3] * c[1],\n p[0] * c[2] + p[2] * c[3], p[1] * c[2] + p[3] * c[3],\n p[0] * c[4] + p[2] * c[5] + p[4], p[1] * c[4] + p[3] * c[5] + p[5],\n ];\n}\n\n// ── paths ────────────────────────────────────────────────────────────────────\n\nexport class PathBuilder {\n private verbs: number[] = [];\n private pts: number[] = [];\n moveTo(x: number, y: number) {\n this.verbs.push(VERB.move);\n this.pts.push(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.verbs.push(VERB.line);\n this.pts.push(x, y);\n return this;\n }\n quadTo(x1: number, y1: number, x: number, y: number) {\n this.verbs.push(VERB.quad);\n this.pts.push(x1, y1, x, y);\n return this;\n }\n cubicTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number) {\n this.verbs.push(VERB.cubic);\n this.pts.push(x1, y1, x2, y2, x, y);\n return this;\n }\n close() {\n this.verbs.push(VERB.close);\n return this;\n }\n build(): PathData {\n return { verbs: Uint8Array.from(this.verbs), points: Float32Array.from(this.pts) };\n }\n}\n\n/** Path data mapped through an affine transform (Béziers map control point by control point). */\nexport function transformPath(d: PathData, m: Mat): PathData {\n const pts = new Float32Array(d.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = d.points[i], y = d.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { verbs: d.verbs, points: pts };\n}\n\n/** Control-point bounds of a path: x0 y0 x1 y1. */\nexport function pathBounds(d: PathData): [number, number, number, number] {\n let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity;\n for (let i = 0; i < d.points.length; i += 2) {\n x0 = Math.min(x0, d.points[i]); x1 = Math.max(x1, d.points[i]);\n y0 = Math.min(y0, d.points[i + 1]); y1 = Math.max(y1, d.points[i + 1]);\n }\n return Number.isFinite(x0) ? [x0, y0, x1, y1] : [0, 0, 0, 0];\n}\n\nexport function memberOp(m: Member): MemberOp {\n return m.op ?? (m.cut ? \"cut\" : \"union\");\n}\n\n/**\n * Where an image paint puts the image: image pixel (u, v) lands at local\n * (ox + u·sx, oy + v·sy). Same rules as `computeImageMatrix` for the plain\n * cases: fill covers the box (centred), fit is contained\n * (centred, transparent outside), stretch maps the image onto the box, tile\n * repeats it at its natural size from the box origin.\n */\n/** Image px → local, and the tile mode, for an image paint. */\nexport function imageMatrix(p: Extract<Paint, { kind: \"image\" }>): { m: Mat; tile: TileMode } {\n if (p.matrix) return { m: p.matrix, tile: p.tile ?? \"clamp\" };\n const { sx, sy, ox, oy, tile } = imagePlacement(p);\n return { m: [sx, 0, 0, sy, ox, oy], tile };\n}\n\nexport function imagePlacement(p: Extract<Paint, { kind: \"image\" }>): { sx: number; sy: number; ox: number; oy: number; tile: TileMode } {\n const [x, y, w, h] = p.box;\n const iw = p.image.width, ih = p.image.height;\n const fit = p.fit ?? \"fill\";\n if (fit === \"stretch\") return { sx: w / iw, sy: h / ih, ox: x, oy: y, tile: \"clamp\" };\n if (fit === \"tile\") return { sx: 1, sy: 1, ox: x, oy: y, tile: \"repeat\" };\n const s = fit === \"fill\" ? Math.max(w / iw, h / ih) : Math.min(w / iw, h / ih);\n return { sx: s, sy: s, ox: x + (w - iw * s) / 2, oy: y + (h - ih * s) / 2, tile: fit === \"fill\" ? \"clamp\" : \"decal\" };\n}\n","// Writer for the delta protocol (crates/renderer/src/protocol.rs). Words go\n// straight into the renderer's buffer inside WASM linear memory: no\n// intermediate JS array, one `apply` call per flush.\n\nexport const OP = {\n CREATE: 1,\n DESTROY: 2,\n CHILDREN: 3,\n TRANSFORM: 4,\n SIZE: 5,\n RADII: 6,\n FILL: 7,\n STROKE: 8,\n SHADOWS: 9,\n OPACITY: 10,\n BLEND: 11,\n CLIP: 12,\n FILTER: 13,\n PATH: 14,\n MEMBERS: 15,\n MASK: 16,\n TEXT: 17,\n EFFECTS: 18,\n TRANSFORM3: 19,\n DEF_PAINT: 20,\n DEF_PATH: 21,\n DEF_DASH: 22,\n FREE_PATH: 24,\n ROOT: 30,\n VIEWPORT: 31,\n} as const;\n\nexport const NONE = 0xffffffff;\n\ninterface DeltaSink {\n delta_buffer(minWords: number): number;\n delta_capacity(): number;\n apply(words: number): void;\n}\n\nexport class DeltaWriter {\n private u32!: Uint32Array;\n private f32!: Float32Array;\n private pos = 0;\n private cap = 0;\n /** Words written since the last `takeCount`. */\n written = 0;\n\n constructor(private readonly sink: DeltaSink, private readonly memory: WebAssembly.Memory) {\n this.refresh(0);\n }\n\n private refresh(minWords: number) {\n const ptr = this.sink.delta_buffer(minWords);\n this.cap = this.sink.delta_capacity();\n this.u32 = new Uint32Array(this.memory.buffer, ptr, this.cap);\n this.f32 = new Float32Array(this.memory.buffer, ptr, this.cap);\n }\n\n /** Reserve room for a record of `n` words. */\n begin(n: number) {\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n if (this.pos + n > this.cap) {\n this.flush();\n if (n > this.cap) this.refresh(n);\n }\n }\n\n u(v: number) {\n this.u32[this.pos++] = v >>> 0;\n }\n\n f(v: number) {\n this.f32[this.pos++] = v;\n }\n\n flush() {\n if (this.pos > 0) {\n this.written += this.pos;\n this.sink.apply(this.pos);\n this.pos = 0;\n }\n // `apply` may grow WASM memory, which detaches our views.\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n }\n\n takeCount() {\n const n = this.written;\n this.written = 0;\n return n;\n }\n}\n","// The generic packer: a port names its pass's parameters, and this lays them\n// out, encodes them and writes them, by name. scripts/gen-effect-params.mjs\n// generates the matching WGSL accessors (`param_<name>()`) from the same\n// layout, so the TS and WGSL sides never agree by position.\nimport { describeEffect, resolveEffectAxis, resolveEffectColor, type EffectParamDescriptor } from \"@motionscript/core\";\nimport type { EffectPort, Packed } from \"./_port\";\n\n/** Floats a pass can take (`EffectU.p` in _header.wgsl). */\nexport const MAX_PARAMS = 64;\n\nexport type ScalarType = \"f32\" | \"vec2f\" | \"vec3f\" | \"vec4f\";\n/** A WGSL-side type: a scalar/vector, or a fixed-length array of them. */\nexport type FieldType = ScalarType | { array: number; of: ScalarType };\n\n/**\n * One parameter of a pass.\n *\n * `\"param\"` is the core spec's parameter of the same name, encoded by its kind\n * (a number as is, a colour as straight RGBA, a point or axis as a vec2, a\n * boolean as 0/1, an enum as its index in the spec's options). A derived field\n * computes its value and names the spec parameters it reads in `uses`.\n */\nexport type Field<E, C> =\n | \"param\"\n | { type: FieldType; uses?: readonly string[]; value(effect: E, ctx: C): number | readonly number[] };\n\nexport interface PortSpec<E, C> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n surface: \"shader\" | \"filter\";\n backdropOnly?: boolean;\n /** The pass's parameters, in layout order. */\n params: Record<string, Field<E, C>>;\n /** Spec parameters read on the host side only (a no-op check, `reach`, `blur`, an atlas). */\n uses?: readonly string[];\n /** Per-effect work shared by the fields and `extras`, or null for a no-op. Defaults to `{}`. */\n prepare?(effect: E): C | null;\n /** Everything a pass takes besides its parameters. */\n extras?(effect: E, ctx: C): Omit<Packed, \"params\">;\n cases(): object[];\n}\n\nexport interface LaidOutField {\n name: string;\n type: FieldType;\n /** Offset into the pass's floats. */\n offset: number;\n floats: number;\n}\n\nconst WIDTH: Record<ScalarType, number> = { f32: 1, vec2f: 2, vec3f: 3, vec4f: 4 };\n\nexport const fieldFloats = (type: FieldType) => (typeof type === \"string\" ? WIDTH[type] : type.array * WIDTH[type.of]);\n\nconst KIND_TYPE: Partial<Record<EffectParamDescriptor[\"kind\"], ScalarType>> = {\n number: \"f32\",\n boolean: \"f32\",\n enum: \"f32\",\n color: \"vec4f\",\n vec2: \"vec2f\",\n axis: \"vec2f\",\n};\n\nfunction encode(p: EffectParamDescriptor, value: unknown): number | readonly number[] {\n switch (p.kind) {\n case \"number\": return value as number;\n case \"boolean\": return value ? 1 : 0;\n case \"enum\": return Math.max(0, p.options!.indexOf(value as string | number));\n case \"color\": return resolveEffectColor(value as Parameters<typeof resolveEffectColor>[0]);\n case \"vec2\": { const v = value as { x: number; y: number }; return [v.x, v.y]; }\n case \"axis\": { const v = resolveEffectAxis(value as Parameters<typeof resolveEffectAxis>[0]); return [v.x, v.y]; }\n default: throw new Error(`effect param \"${p.name}\" (${p.kind}) has no default encoding; give it a value()`);\n }\n}\n\n/** The spec parameter a `\"param\"` field names, or a thrown error naming what is wrong. */\nfunction specParam(type: string, name: string): EffectParamDescriptor {\n const p = describeEffect(type)?.params.find((q) => q.name === name);\n if (!p) throw new Error(`effect \"${type}\": \"${name}\" is not a parameter of its core spec`);\n if (!KIND_TYPE[p.kind]) throw new Error(`effect \"${type}\": \"${name}\" (${p.kind}) has no default encoding`);\n return p;\n}\n\n/** The pass's parameters with their WGSL types and offsets. Throws past {@link MAX_PARAMS}. */\nexport function layout(spec: Pick<PortSpec<any, any>, \"type\" | \"params\">): LaidOutField[] {\n let offset = 0;\n const out = Object.entries(spec.params).map(([name, field]) => {\n const type = field === \"param\" ? KIND_TYPE[specParam(spec.type, name).kind]! : field.type;\n const floats = fieldFloats(type);\n const f = { name, type, offset, floats };\n offset += floats;\n return f;\n });\n if (offset > MAX_PARAMS) throw new Error(`effect \"${spec.type}\" lays out ${offset} params; a pass takes ${MAX_PARAMS}`);\n return out;\n}\n\n/** An {@link EffectPort} whose `pack` writes `spec.params` by name. */\nexport function definePort<E, C = Record<string, never>>(spec: PortSpec<E, C>): EffectPort<E> & { spec: PortSpec<E, C> } {\n const fields = layout(spec);\n const total = fields.reduce((n, f) => n + f.floats, 0);\n const encoders = fields.map((f) => {\n const field = spec.params[f.name];\n if (field !== \"param\") return field.value;\n const p = specParam(spec.type, f.name);\n return (e: E) => encode(p, (e as Record<string, unknown>)[f.name]);\n });\n return {\n type: spec.type,\n surface: spec.surface,\n backdropOnly: spec.backdropOnly,\n spec,\n cases: spec.cases,\n pack(effect) {\n const ctx = spec.prepare ? spec.prepare(effect) : ({} as C);\n if (ctx === null) return null;\n const params = new Array<number>(total).fill(0);\n fields.forEach((f, i) => {\n const v = encoders[i](effect, ctx);\n const n = typeof v === \"number\" ? 1 : v.length;\n if (n > f.floats) throw new Error(`effect \"${spec.type}\": \"${f.name}\" is ${n} floats, laid out as ${f.floats}`);\n if (typeof v === \"number\") params[f.offset] = v;\n else for (let k = 0; k < n; k++) params[f.offset + k] = v[k];\n });\n return { params, ...(spec.extras ? spec.extras(effect, ctx) : {}) };\n },\n };\n}\n","import { definePort } from \"./_pack.ts\";\n\n// Scale alpha by `amount` (clamped to 0-1).\nexport default definePort<{ type: \"alpha\"; amount: number }>({\n type: \"alpha\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, Math.max(0, Math.min(1, e.amount)), 0] },\n },\n cases: () => [],\n});\n","import { Effects, resolveAsciiCharset, type AsciiEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The atlas is baked with the 2D canvas, in a face the page has loaded into\n// document.fonts. The module neither fetches faces nor awaits at top level: a\n// published module that did would request URLs from the host's origin, and an\n// IIFE bundle of it would not build.\nconst FALLBACK_FAMILY = \"Inter\";\nconst available = (family: string) => typeof document !== \"undefined\" && document.fonts.check(`12px \"${family}\"`);\n\n// glyph-atlas.ts: cell = clamp(round(max(8, size * 2)), 4, 64); at most 256 glyphs.\nconst bakedCell = (size: number) => Math.max(4, Math.min(64, Math.round(Math.max(8, size * 2))));\n\n// Supersampling factor for the bake. 1 draws at the atlas size; larger values were tried\n// (unsnapped baseline, box-filtered) and rendered the glyphs too thin.\nconst SS = 1;\n\nfunction bake(charset: string, family: string, cell: number) {\n const glyphs = [...charset].slice(0, 256);\n const big = cell * SS;\n const canvas = new OffscreenCanvas(big * glyphs.length, big);\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true })!;\n ctx.fillStyle = \"#000\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#fff\";\n ctx.font = `${cell * 0.8 * SS}px \"${family}\"`;\n ctx.textBaseline = \"alphabetic\";\n ctx.textAlign = \"left\";\n ctx.fontKerning = \"none\";\n glyphs.forEach((g, i) => {\n const advance = ctx.measureText(g).width;\n ctx.fillText(g, i * big + (big - advance) / 2, big * 0.78);\n });\n const src = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n const width = cell * glyphs.length;\n const pixels = new Uint8ClampedArray(width * cell * 4);\n for (let y = 0; y < cell; y++) {\n for (let x = 0; x < width; x++) {\n let sum = 0;\n for (let dy = 0; dy < SS; dy++) for (let dx = 0; dx < SS; dx++) sum += src[((y * SS + dy) * canvas.width + x * SS + dx) * 4];\n const v = sum / (SS * SS);\n const o = (y * width + x) * 4;\n pixels[o] = pixels[o + 1] = pixels[o + 2] = v;\n pixels[o + 3] = 255;\n }\n }\n return { glyphs: glyphs.length, pixels, width };\n}\n\nexport default definePort<AsciiEffect, { family: string; cell: number; charset: string; atlas: ReturnType<typeof bake> }>({\n type: \"ascii\",\n surface: \"shader\",\n params: {\n size: \"param\",\n glyphs: { type: \"f32\", uses: [\"charset\", \"fontFamily\"], value: (_e, c) => c.atlas.glyphs },\n cell: { type: \"f32\", value: (_e, c) => c.cell },\n ink: \"param\",\n background: \"param\",\n colored: \"param\",\n },\n prepare(e) {\n const charset = resolveAsciiCharset(e.charset);\n if (charset.length === 0) return null;\n // The engine falls back to the first registered family for one it lacks (\"monospace\").\n const family = available(e.fontFamily) ? e.fontFamily : FALLBACK_FAMILY;\n const cell = bakedCell(e.size);\n return { family, cell, charset, atlas: bake(charset, family, cell) };\n },\n extras: (_e, c) => ({\n aux: { key: `ascii|${c.family}|${c.cell}|${c.charset}`, width: c.atlas.width, height: c.cell, pixels: c.atlas.pixels },\n }),\n cases: () => [\n Effects.ascii().list[0],\n Effects.ascii({ size: 10, charset: \"hex\", fontFamily: \"Fira Mono\", ink: \"#6f6\", background: \"#001\", colored: false }).list[0],\n Effects.ascii({ size: 14, colored: true, background: \"transparent\", ink: \"white\" }).list[0],\n Effects.ascii({ size: 8, ink: \"black\", background: \"white\", charset: \" .oO@\" }).list[0],\n ],\n});\n","import { Effects, type BitCrushEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's hardware palettes.\nconst PALETTES: Record<string, readonly string[]> = {\n gameboy: [\"#0f380f\", \"#306230\", \"#8bac0f\", \"#9bbc0f\"],\n cga: [\"#000000\", \"#55ffff\", \"#ff55ff\", \"#ffffff\"],\n nes: [\n \"#000000\", \"#fcfcfc\", \"#bcbcbc\", \"#7c7c7c\",\n \"#0000fc\", \"#0078f8\", \"#3cbcfc\", \"#a4e4fc\",\n \"#b8f818\", \"#00b800\", \"#005800\", \"#f83800\",\n \"#e40058\", \"#f878f8\", \"#f8b800\", \"#503000\",\n ],\n};\n\n// The engine bakes each channel as a 4-decimal literal.\nconst channels = (hex: string) => {\n const n = parseInt(hex.slice(1), 16);\n return [16, 8, 0].map((s) => Number((((n >> s) & 0xff) / 255).toFixed(4)));\n};\n\nexport default definePort<BitCrushEffect, { palette: readonly string[] }>({\n type: \"bitCrush\",\n surface: \"shader\",\n params: {\n bits: \"param\",\n amount: \"param\",\n count: { type: \"f32\", uses: [\"palette\"], value: (_e, c) => c.palette.length },\n palette: { type: { array: 16, of: \"vec3f\" }, value: (_e, c) => c.palette.flatMap(channels) },\n },\n prepare(e) {\n if (!(e.amount > 0)) return null;\n if (e.palette === \"none\" && e.bits >= 8) return null;\n return { palette: e.palette === \"none\" ? [] : PALETTES[e.palette] };\n },\n cases: () => [\n Effects.bitCrush().list[0],\n Effects.bitCrush({ palette: \"gameboy\" }).list[0],\n Effects.bitCrush({ palette: \"nes\", amount: 0.7 }).list[0],\n Effects.bitCrush({ palette: \"cga\" }).list[0],\n ],\n});\n","import { Effects, resolveEffectAxis, type BlockDisplaceEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlockDisplaceEffect>({\n type: \"blockDisplace\",\n surface: \"shader\",\n params: { amount: \"param\", size: \"param\", density: \"param\", seed: \"param\", axis: \"param\" },\n prepare(e) {\n if (!(e.amount > 0) || !(e.density > 0)) return null;\n const axis = resolveEffectAxis(e.axis);\n return axis.x === 0 && axis.y === 0 ? null : {};\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.amount * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.blockDisplace().list[0],\n Effects.blockDisplace({ amount: 40, size: 10, density: 0.6, seed: 3 }).list[0],\n Effects.blockDisplace({ amount: 30, size: 24, axis: \"y\", seed: 1 }).list[0],\n ],\n});\n","import { Effects, type BloomEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BloomEffect, { t: number; scale: number; sigma: number }>({\n type: \"bloom\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n },\n uses: [\"radius\"],\n prepare(e) {\n if (e.radius <= 0 || e.intensity <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.radius / 2 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, c.sigma, 0], reach: 3 * c.sigma }),\n cases: () => [\n Effects.bloom().list[0],\n Effects.bloom({ threshold: 0.4, radius: 24, intensity: 1.5 }).list[0],\n Effects.bloom({ threshold: 0, radius: 6, intensity: 0.6 }).list[0],\n ],\n});\n","import { Effects, type BlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlurEffect>({\n type: \"blur\",\n surface: \"filter\",\n params: {},\n uses: [\"radius\"],\n // A zero-sigma blur is the identity.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras(e) {\n // Sigma is half the authored radius.\n const sigma = e.radius / 2;\n return { blur: [sigma, sigma, 0], reach: 3 * sigma };\n },\n cases: () => [Effects.blur(8).list[0], Effects.blur(24).list[0], Effects.blur(2).list[0]],\n});\n","import { Effects, type BulgeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BulgeEffect>({\n type: \"bulge\",\n surface: \"shader\",\n params: { strength: \"param\", center: \"param\" },\n prepare: (e) => (e.strength === 0 ? null : {}),\n extras(e) {\n // A pinch (k < 0) folds the far field back into the box: it draws out to\n // where f(r) = r(1 + k r²)/(1 + k) falls back to -1. The packer doesn't\n // know the box, so reach assumes a ~360 px half extent.\n // An off-centre lens also draws past the box on its far side.\n let reach = 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5) * 360;\n if (e.strength < 0) {\n const k = e.strength * 0.8;\n let r = 1;\n while (r < 4 && (r * (1 + k * r * r)) / (1 + k) > -1) r += 0.01;\n reach = Math.min((r - 1 + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800);\n }\n return { reach };\n },\n cases: () => [\n Effects.bulge(0.6).list[0],\n Effects.bulge(-0.7).list[0],\n Effects.bulge({ strength: 0.9, center: { x: 0.3, y: 0.6 } }).list[0],\n ],\n});\n","import { Effects, type ChromaticAberrationEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's ghost matrices.\nconst RED = [1.4, -0.2, -0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0];\nconst BLUE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.2, -0.2, 1.4, 0, 0, 0, 0, 0, 1, 0];\n\nexport default definePort<ChromaticAberrationEffect>({\n type: \"chromaticAberration\",\n surface: \"filter\",\n params: {\n red: { type: { array: 20, of: \"f32\" }, value: () => RED },\n blue: { type: { array: 20, of: \"f32\" }, value: () => BLUE },\n offset: {\n type: \"vec2f\",\n uses: [\"amount\", \"angle\"],\n value(e) {\n const rad = (e.angle * Math.PI) / 180;\n return [Math.cos(rad) * e.amount, Math.sin(rad) * e.amount];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n extras: (e) => ({ reach: e.amount }),\n cases: () => [\n Effects.chromaticAberration().list[0],\n Effects.chromaticAberration({ amount: 8, angle: 45 }).list[0],\n Effects.chromaticAberration({ amount: 2.5, angle: 200 }).list[0],\n ],\n});\n","import { Effects, type ColorAdjustmentEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's composition.\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\n// outer × inner, both 4×5 with an implicit last row [0,0,0,0,1].\nfunction multiply(outer: number[], inner: number[]): number[] {\n const out = new Array(20).fill(0);\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 5; j++) {\n let sum = 0;\n for (let k = 0; k < 4; k++) sum += outer[i * 5 + k] * inner[k * 5 + j];\n if (j === 4) sum += outer[i * 5 + 4];\n out[i * 5 + j] = sum;\n }\n }\n return out;\n}\n\nconst diag = (s: number, o: number) => [s, 0, 0, 0, o, 0, s, 0, 0, o, 0, 0, s, 0, o, 0, 0, 0, 1, 0];\nconst offsets = (r: number, g: number, b: number) => [1, 0, 0, 0, r, 0, 1, 0, 0, g, 0, 0, 1, 0, b, 0, 0, 0, 1, 0];\n\nfunction saturation(s: number): number[] {\n const i = 1 - s;\n return [\n s + i * LR, i * LG, i * LB, 0, 0,\n i * LR, s + i * LG, i * LB, 0, 0,\n i * LR, i * LG, s + i * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nfunction hue(deg: number): number[] {\n const rad = (deg * Math.PI) / 180;\n const c = Math.cos(rad), s = Math.sin(rad);\n return [\n LR + c * (1 - LR) + s * -LR, LG + c * -LG + s * -LG, LB + c * -LB + s * (1 - LB), 0, 0,\n LR + c * -LR + s * 0.143, LG + c * (1 - LG) + s * 0.140, LB + c * -LB + s * -0.283, 0, 0,\n LR + c * -LR + s * -(1 - LR), LG + c * -LG + s * LG, LB + c * (1 - LB) + s * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nexport default definePort<ColorAdjustmentEffect, { matrix: number[] }>({\n type: \"colorAdjustment\",\n surface: \"filter\",\n params: {\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"brightness\", \"contrast\", \"saturation\", \"hue\", \"vibrance\", \"temperature\", \"tint\", \"shadows\", \"highlights\"],\n value: (_e, c) => c.matrix,\n },\n },\n prepare(e) {\n let mat = diag(1, 0);\n let any = false;\n const apply = (m: number[]) => { mat = multiply(m, mat); any = true; };\n const b = e.brightness ?? 0;\n if (b !== 0) apply(diag(1, b));\n const c = e.contrast ?? 1;\n if (c !== 1) apply(diag(c, 0.5 * (1 - c)));\n const s = e.saturation ?? 1;\n if (s !== 1) apply(saturation(s));\n const h = ((e.hue ?? 0) % 360 + 360) % 360;\n if (h !== 0) apply(hue(h));\n const v = e.vibrance ?? 0;\n if (v !== 0) apply(saturation(1 + v * 0.7));\n const t = e.temperature ?? 0;\n if (t !== 0) apply(offsets(t * 0.1, 0, -t * 0.1));\n const ti = e.tint ?? 0;\n if (ti !== 0) apply(offsets(ti * 0.05, -ti * 0.1, ti * 0.05));\n const sh = e.shadows ?? 0;\n if (sh !== 0) apply(diag(1 - 0.2 * sh, 0.2 * sh));\n const hi = e.highlights ?? 0;\n if (hi !== 0) apply(diag(1 + 0.2 * hi, -0.1 * hi));\n return any ? { matrix: mat } : null;\n },\n cases: () => [\n Effects.colorAdjustment({ brightness: 0.1, contrast: 1.3, saturation: 1.4 }).list[0],\n Effects.colorAdjustment({ hue: 120, vibrance: 0.5 }).list[0],\n Effects.colorAdjustment({ temperature: 0.6, tint: -0.4, shadows: 0.5, highlights: -0.5 }).list[0],\n Effects.colorAdjustment({ contrast: 0.6, saturation: 0 }).list[0],\n ],\n});\n","import { definePort } from \"./_pack.ts\";\n\n// The authored 4×5 matrix as is.\nexport default definePort<{ type: \"colorMatrix\"; matrix: ArrayLike<number> }>({\n type: \"colorMatrix\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => Array.from(e.matrix).slice(0, 20) },\n },\n cases: () => [],\n});\n","import { Effects, type CurvesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's resampling: the curve as\n// 33 evenly spaced outputs over 0–1.\nconst SEGMENTS = 32;\n\nfunction evalCurve(points: [number, number][], x: number): number {\n if (points.length === 0) return x;\n if (x <= points[0][0]) return points[0][1];\n const last = points[points.length - 1];\n if (x >= last[0]) return last[1];\n for (let i = 0; i < points.length - 1; i++) {\n const [x0, y0] = points[i];\n const [x1, y1] = points[i + 1];\n if (x >= x0 && x <= x1) return y0 + (y1 - y0) * (x1 === x0 ? 0 : (x - x0) / (x1 - x0));\n }\n return x;\n}\n\nfunction ramp(points: [number, number][]): number[] {\n const sorted = [...points].sort((a, b) => a[0] - b[0]);\n const out: number[] = [];\n for (let i = 0; i <= SEGMENTS; i++) {\n const y = evalCurve(sorted, i / SEGMENTS);\n out.push(Number.isFinite(y) ? Math.max(0, Math.min(1, y)) : i / SEGMENTS);\n }\n return out;\n}\n\nconst MASKS: Record<string, number[]> = { r: [1, 0, 0, 0], g: [0, 1, 0, 0], b: [0, 0, 1, 0], a: [0, 0, 0, 1] };\n\nexport default definePort<CurvesEffect, { values: number[] }>({\n type: \"curves\",\n surface: \"shader\",\n params: {\n mask: { type: \"vec4f\", uses: [\"channel\"], value: (e) => MASKS[e.channel ?? \"rgb\"] ?? [1, 1, 1, 0] },\n curve: { type: { array: SEGMENTS + 1, of: \"f32\" }, uses: [\"points\"], value: (_e, c) => c.values },\n },\n prepare(e) {\n const values = ramp(e.points ?? []);\n return values.every((y, i) => Math.abs(y - i / SEGMENTS) < 1e-4) ? null : { values };\n },\n cases: () => [\n Effects.curves({ points: [[0, 0], [0.25, 0.15], [0.75, 0.88], [1, 1]] }).list[0],\n Effects.curves({ points: [[0, 0.2], [0.5, 0.7], [1, 1]], channel: \"r\" }).list[0],\n Effects.curves({ points: [[0, 0], [0.6, 0.3], [1, 0.8]], channel: \"a\" }).list[0],\n ],\n});\n","import { Effects, type DirectionalBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DirectionalBlurEffect, { sigma: number; rad: number }>({\n type: \"directionalBlur\",\n surface: \"filter\",\n params: {\n sigma: { type: \"f32\", uses: [\"radius\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare: (e) => (e.radius <= 0 ? null : { sigma: e.radius / 2, rad: (e.angle * Math.PI) / 180 }),\n extras: (_e, c) => ({ blur: [c.sigma, 0, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.directionalBlur(20).list[0],\n Effects.directionalBlur({ radius: 30, angle: 45 }).list[0],\n Effects.directionalBlur({ radius: 12, angle: 100 }).list[0],\n Effects.directionalBlur({ radius: 120, angle: -20 }).list[0],\n ],\n});\n","import { Effects, type DitherEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's 64x64 void-and-cluster table, verbatim.\nconst BLUE_NOISE_BASE64 =\n \"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\";\n\nconst ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst SIZE = 64;\n\nlet table: Uint8ClampedArray | null = null;\nfunction blueNoiseRgba(): Uint8ClampedArray {\n if (table) return table;\n const text = BLUE_NOISE_BASE64.replace(/[^A-Za-z0-9+/]/g, \"\");\n const bytes = new Uint8Array((text.length * 3) >> 2);\n let acc = 0, bits = 0, written = 0;\n for (let i = 0; i < text.length; i++) {\n acc = (acc << 6) | ALPHABET.indexOf(text[i]);\n bits += 6;\n if (bits >= 8) { bits -= 8; bytes[written++] = (acc >> bits) & 0xff; }\n }\n const out = new Uint8ClampedArray(SIZE * SIZE * 4);\n for (let i = 0; i < SIZE * SIZE; i++) out.fill(bytes[i], i * 4, i * 4 + 3), (out[i * 4 + 3] = 255);\n return (table = out);\n}\n\nexport default definePort<DitherEffect>({\n type: \"dither\",\n surface: \"shader\",\n params: {\n levels: \"param\",\n scale: \"param\",\n monochrome: \"param\",\n noise: \"param\",\n matrix: { type: \"f32\", value: (e) => e.matrix },\n },\n prepare: (e) => (e.levels >= 256 ? null : {}),\n extras: (e) => ({\n aux: e.noise === \"blue\" ? { key: \"dither-blue-noise\", width: SIZE, height: SIZE, pixels: blueNoiseRgba() } : undefined,\n }),\n cases: () => [\n Effects.dither().list[0],\n Effects.dither({ levels: 4, matrix: 8, scale: 2, monochrome: true }).list[0],\n Effects.dither({ noise: \"blue\", levels: 3 }).list[0],\n Effects.dither({ matrix: 2, levels: 6, scale: 3 }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type DropShadowEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DropShadowEffect, { ox: number; oy: number; sigma: number; spread: number }>({\n type: \"dropShadow\",\n surface: \"shader\",\n params: {\n offset: { type: \"vec2f\", uses: [\"offsetX\", \"offsetY\"], value: (_e, c) => [c.ox, c.oy] },\n sigma: { type: \"f32\", uses: [\"blur\"], value: (_e, c) => c.sigma },\n color: \"param\",\n spread: { type: \"f32\", value: (_e, c) => c.spread },\n },\n prepare(e) {\n if (resolveEffectColor(e.color)[3] <= 0) return null;\n const ox = e.offsetX;\n const oy = -e.offsetY; // scene is y-up, the pass y-down\n const sigma = Math.max(0, e.blur) / 2;\n const spread = Math.max(0, e.spread);\n if (ox === 0 && oy === 0 && sigma === 0 && spread === 0) return null;\n return { ox, oy, sigma, spread };\n },\n extras: (_e, c) => ({ reach: Math.hypot(c.ox, c.oy) + 3 * c.sigma + c.spread }),\n cases: () => [\n Effects.dropShadow().list[0],\n Effects.dropShadow({ offsetX: 10, offsetY: 10, blur: 24, color: \"#0008\" }).list[0],\n Effects.dropShadow({ offsetX: 0, offsetY: 0, blur: 0, spread: 6, color: \"#f40\" }).list[0],\n Effects.dropShadow({ offsetX: -12, offsetY: -6, blur: 40, spread: 4, color: \"#04f\" }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type DuotoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<DuotoneEffect>({\n type: \"duotone\",\n surface: \"filter\",\n params: {\n // The engine's duotone matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"shadows\", \"highlights\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const shadows = resolveEffectColor(e.shadows);\n const highlights = resolveEffectColor(e.highlights);\n const row = (i: number) => {\n const d = (highlights[i] - shadows[i]) * a;\n const r = [d * LR, d * LG, d * LB, 0, shadows[i] * a];\n r[i] += 1 - a;\n return r;\n };\n return [...row(0), ...row(1), ...row(2), 0, 0, 0, 1, 0];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n cases: () => [\n Effects.duotone().list[0],\n Effects.duotone({ shadows: \"#1a0b3d\", highlights: \"#ffcc66\" }).list[0],\n Effects.duotone({ amount: 0.5, shadows: \"#003344\", highlights: \"#ff6699\" }).list[0],\n ],\n});\n","import { Effects, type EdgesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<EdgesEffect>({\n type: \"edges\",\n surface: \"shader\",\n params: { strength: \"param\", kernel: \"param\", colored: \"param\" },\n prepare: (e) => (e.strength > 0 ? {} : null),\n // Edges light up one tap (a device px) past the silhouette.\n extras: () => ({ reach: 1 }),\n cases: () => [\n Effects.edges().list[0],\n Effects.edges({ strength: 2, kernel: \"prewitt\", colored: true }).list[0],\n Effects.edges({ strength: 1.5, kernel: \"laplacian\" }).list[0],\n ],\n});\n","import { definePort } from \"./_pack.ts\";\n\n// Scale rgb by `amount`.\nexport default definePort<{ type: \"exposure\"; amount: number }>({\n type: \"exposure\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, 1, 0] },\n },\n cases: () => [],\n});\n","import { Effects, type GlassEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst clamp01 = (v: number) => Math.min(1, Math.max(0, v));\n\n// The engine's constants.\nconst DISPERSION_SPAN = 0.35;\nconst LIGHT_GAIN = 1;\nconst SHADE_NEAR = 0.1;\nconst SHADE_FAR = 0.06;\nconst SHADE_REACH = 0.7;\nconst SPLAY_REACH = 0.3;\nconst SPLAY_THINNING = 0.25;\n\nexport default definePort<GlassEffect, { light: number; splay: number; frost: number }>({\n type: \"glass\",\n surface: \"shader\",\n // The engine's handler only answers for the backdrop.\n backdropOnly: true,\n params: {\n depth: \"param\",\n refraction: { type: \"f32\", value: (e) => Math.max(0, e.refraction / 100) },\n spread: { type: \"f32\", uses: [\"dispersion\"], value: (e) => clamp01(e.dispersion / 100) * DISPERSION_SPAN },\n light: {\n type: \"vec2f\",\n uses: [\"lightAngle\"],\n value(e) {\n const radians = (e.lightAngle * Math.PI) / 180;\n return [Math.sin(radians), -Math.cos(radians)];\n },\n },\n rim: { type: \"f32\", uses: [\"lightIntensity\"], value: (_e, c) => c.light * LIGHT_GAIN },\n shade_near: { type: \"f32\", uses: [\"splay\"], value: (_e, c) => c.light * SHADE_NEAR * (1 - SPLAY_THINNING * c.splay) },\n shade_far: { type: \"f32\", value: (_e, c) => c.light * SHADE_FAR * (1 - SPLAY_THINNING * c.splay) },\n shade_reach: { type: \"f32\", value: (_e, c) => SHADE_REACH + SPLAY_REACH * c.splay },\n frost: { type: \"f32\", value: (_e, c) => c.frost },\n },\n prepare(e) {\n if (!(e.depth > 0)) return null;\n return {\n light: Math.max(0, e.lightIntensity / 100),\n splay: clamp01(e.splay / 100),\n // Figma's frost is a blur radius, twice the sigma.\n frost: Math.max(0, e.frost) * 0.5,\n };\n },\n extras: (_e, c) => ({\n // The frost blur reads past the outline; refraction pulls inward.\n reach: 3 * c.frost + 2,\n blur: c.frost > 0 ? [c.frost, c.frost, 0] : undefined,\n field: true,\n }),\n cases: () => [\n Effects.glass().list[0],\n Effects.glass({ dispersion: 0, frost: 0, depth: 30 }).list[0],\n ],\n});\n","import { Effects, type GlowEffect, resolveEffectAxis, resolveEffectColor, type Color } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// core's blend names, in blend_mode's index order (_header.wgsl).\nconst BLEND = [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\",\n \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"];\n\nexport default definePort<GlowEffect, { colors: Color[] }>({\n type: \"glow\",\n surface: \"shader\",\n params: {\n channel: \"param\",\n threshold: \"param\",\n spread: { type: \"f32\", value: (e) => Math.max(0, e.spread) },\n intensity: \"param\",\n tint: \"param\",\n original: \"param\",\n blend: { type: \"f32\", value: (e) => Math.max(0, BLEND.indexOf(e.blend)) },\n count: { type: \"f32\", value: (_e, c) => c.colors.length },\n cycles: \"param\",\n phase: { type: \"f32\", value: (e) => e.phase / 360 },\n mirror: { type: \"f32\", uses: [\"loopStyle\"], value: (e) => (e.loopStyle === \"mirror\" ? 1 : 0) },\n stops: {\n type: { array: 8, of: \"f32\" },\n value(e, c) {\n const out: number[] = [];\n let previous = 0;\n for (let i = 0; i < c.colors.length; i++) {\n previous = Math.max(previous, Math.min(1, e.stops[i] ?? i / Math.max(1, c.colors.length - 1)));\n out.push(previous);\n }\n return out;\n },\n },\n colors: { type: { array: 8, of: \"vec4f\" }, uses: [\"color\"], value: (_e, c) => c.colors.flatMap((x) => resolveEffectColor(x)) },\n },\n uses: [\"radius\", \"axis\"],\n prepare(e) {\n // The engine's renderInputs declines these (the node paints untouched).\n if ((e.radius <= 0 && e.spread <= 0) || e.intensity <= 0) return null;\n return { colors: (e.tint === \"solid\" ? [e.color] : e.colors).slice(0, 8) };\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n const sigma = Math.max(0, e.radius) / 2;\n // Glow spreads past the content by its blur and spread.\n return { blur: [sigma * axis.x, sigma * axis.y, 0], reach: 3 * sigma + Math.max(0, e.spread) };\n },\n cases: () => [\n Effects.glow().list[0],\n Effects.glow({ radius: 12, threshold: 0.3, intensity: 1.5, original: \"front\" }).list[0],\n Effects.glow({ channel: \"alpha\", radius: 20, spread: 4, tint: \"solid\", color: \"#4cf\" }).list[0],\n Effects.glow({ radius: 30, tint: \"ramp\", colors: [\"#ff3\", \"#f0f\", \"#0ff\"], stops: [0, 0.5, 1], blend: \"lighten\" }).list[0],\n ],\n});\n","import { Effects, type GrainEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<GrainEffect>({\n type: \"grain\",\n surface: \"shader\",\n // `animated` folds floor(time * 1000) into the seed; the harness renders at t = 0.\n params: { amount: \"param\", size: \"param\", seed: \"param\", colored: \"param\", animated: \"param\" },\n prepare: (e) => (e.amount > 0 ? {} : null),\n cases: () => [\n Effects.grain().list[0],\n Effects.grain({ amount: 0.5, size: 3, seed: 7, colored: true }).list[0],\n Effects.grain({ amount: 0.15, size: 2 }).list[0],\n ],\n});\n","import { Effects, type GrayscaleEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<GrayscaleEffect>({\n type: \"grayscale\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n return [\n 1 - a + a * LR, a * LG, a * LB, 0, 0,\n a * LR, 1 - a + a * LG, a * LB, 0, 0,\n a * LR, a * LG, 1 - a + a * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n cases: () => [Effects.grayscale(1).list[0], Effects.grayscale(0.5).list[0]],\n});\n","import { Effects, type HalftoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<HalftoneEffect>({\n type: \"halftone\",\n surface: \"shader\",\n params: {\n size: \"param\",\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n shape: \"param\",\n separation: \"param\",\n },\n // A sub-pixel pitch is a no-op in the engine; the pass checks it (needs the scale).\n // A cell whose centre is inside the node draws its dot across the edge: up to a pitch.\n extras: (e) => ({ reach: e.size }),\n cases: () => [\n Effects.halftone().list[0],\n Effects.halftone({ size: 10, angle: 20, shape: \"line\", separation: \"rgb\" }).list[0],\n Effects.halftone({ size: 12, shape: \"cross\", separation: \"cmyk\" }).list[0],\n ],\n});\n","import { Effects, type InvertEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\nconst IDENTITY = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n\n// The engine's fully inverted matrix per channel.\nfunction fullMatrix(channel: InvertEffect[\"channel\"]): number[] {\n switch (channel) {\n case \"red\": return [-1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"green\": return [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"blue\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n case \"alpha\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 1];\n case \"hue\": return [\n 2 * LR - 1, 2 * LG, 2 * LB, 0, 0,\n 2 * LR, 2 * LG - 1, 2 * LB, 0, 0,\n 2 * LR, 2 * LG, 2 * LB - 1, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n case \"luminance\": return [\n 1 - 2 * LR, -2 * LG, -2 * LB, 0, 1,\n -2 * LR, 1 - 2 * LG, -2 * LB, 0, 1,\n -2 * LR, -2 * LG, 1 - 2 * LB, 0, 1,\n 0, 0, 0, 1, 0,\n ];\n default: return [-1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n }\n}\n\nexport default definePort<InvertEffect, { matrix: number[] }>({\n type: \"invert\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, uses: [\"channel\", \"strength\"], value: (_e, c) => c.matrix },\n },\n prepare(e) {\n const s = Math.max(0, Math.min(1, e.strength));\n if (s === 0) return null;\n const target = fullMatrix(e.channel);\n return { matrix: IDENTITY.map((v, i) => v + (target[i] - v) * s) };\n },\n // An alpha invert turns transparent black opaque everywhere it is drawn,\n // not just over the content: reach\n // far enough to cover the canvas.\n extras: (_e, c) => (c.matrix[19] > 0 ? { reach: 4096 } : {}),\n cases: () => [\n Effects.invert().list[0],\n Effects.invert({ channel: \"hue\", strength: 0.7 }).list[0],\n Effects.invert({ channel: \"luminance\" }).list[0],\n Effects.invert({ channel: \"alpha\", strength: 0.5 }).list[0],\n ],\n});\n","import { Effects, type KaleidoscopeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<KaleidoscopeEffect, { segments: number }>({\n type: \"kaleidoscope\",\n surface: \"shader\",\n params: {\n wedge: { type: \"f32\", uses: [\"segments\"], value: (_e, c) => (2 * Math.PI) / c.segments },\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n offset: \"param\",\n amount: { type: \"f32\", value: (e) => Math.max(0, Math.min(1, e.amount)) },\n center: \"param\",\n },\n prepare(e) {\n const segments = Math.round(e.segments);\n return segments < 2 || e.amount <= 0 ? null : { segments };\n },\n // The fold keeps r (shifted by offset), so it draws out to ≤ √2\n // normalised. Reach assumes a ~360 px half extent.\n extras: (e) => ({\n reach: Math.min((Math.SQRT2 - 1 + Math.abs(e.offset) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800),\n }),\n cases: () => [\n Effects.kaleidoscope().list[0],\n Effects.kaleidoscope({ segments: 8, angle: 20, offset: 0.15 }).list[0],\n Effects.kaleidoscope({ segments: 3, amount: 0.6, center: { x: 0.4, y: 0.55 } }).list[0],\n ],\n});\n","import { Effects, type LutEffect } from \"@motionscript/core\";\nimport type { AuxTexture } from \"./_port\";\nimport { definePort } from \"./_pack.ts\";\n\n// Baked per table identity.\nconst baked = new WeakMap<Float32Array, AuxTexture>();\nlet serial = 0;\n\nconst toByte = (v: number) => (Number.isFinite(v) ? Math.max(0, Math.min(255, Math.round(v * 255))) : 0);\n\n// The cube unrolled into an N²×N strip: texel (r + b·N, g) holds (r, g, b).\n// Entries past the table's end stay black, as the engine leaves them.\nfunction bake(table: Float32Array, n: number): AuxTexture {\n const hit = baked.get(table);\n if (hit && hit.height === n) return hit;\n const width = n * n;\n const pixels = new Uint8ClampedArray(width * n * 4);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const s = ((b * n + g) * n + r) * 3;\n const d = (g * width + b * n + r) * 4;\n pixels[d + 3] = 255;\n if (s + 2 >= table.length) continue;\n pixels[d] = toByte(table[s]);\n pixels[d + 1] = toByte(table[s + 1]);\n pixels[d + 2] = toByte(table[s + 2]);\n }\n }\n }\n const aux = { key: `lut-${serial++}`, width, height: n, pixels };\n baked.set(table, aux);\n return aux;\n}\n\n// A test look: a lifted, teal-and-orange grade with channel crosstalk.\nfunction look(n: number): Float32Array {\n const t = new Float32Array(n * n * n * 3);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const [R, G, B] = [r / (n - 1), g / (n - 1), b / (n - 1)];\n const i = ((b * n + g) * n + r) * 3;\n t[i] = 0.05 + 0.95 * Math.pow(R, 0.8);\n t[i + 1] = 0.85 * G + 0.1 * B + 0.03;\n t[i + 2] = 1 - Math.pow(1 - B, 1.4) * 0.9 - 0.08 * R;\n }\n }\n }\n return t;\n}\n\nlet tables: [Float32Array, Float32Array] | null = null;\n\nexport default definePort<LutEffect>({\n type: \"lut\",\n surface: \"shader\",\n params: { size: \"param\", amount: \"param\" },\n uses: [\"table\"],\n prepare: (e) => (e.amount <= 0 || !Number.isInteger(e.size) || e.size < 2 ? null : {}),\n extras: (e) => ({ aux: bake(e.table, e.size) }),\n cases: () => {\n tables ??= [look(17), look(33)];\n return [\n Effects.lut({ table: tables[1], size: 33 }).list[0],\n Effects.lut({ table: tables[0], size: 17, amount: 0.6 }).list[0],\n ];\n },\n});\n","import { Effects, type MagnifyEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<MagnifyEffect>({\n type: \"magnify\",\n surface: \"shader\",\n // magnify draws nothing.\n backdropOnly: true,\n params: { scale: \"param\", center: \"param\" },\n prepare: (e) => (e.scale === 1 || e.scale <= 0 ? null : {}),\n // Magnifying samples inside the box; shrinking samples outside it, by\n // up to (1/scale − 1) of the half extent (assumed ~360 px, as bulge).\n extras: (e) => ({ reach: e.scale < 1 ? Math.min((1 / e.scale - 1) * 360, 800) : 0 }),\n cases: () => [\n Effects.magnify({ scale: 2 }).list[0],\n Effects.magnify({ scale: 1.6, center: { x: 0.3, y: 0.7 } }).list[0],\n ],\n});\n","import { Effects, type OilPaintEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<OilPaintEffect>({\n type: \"oilPaint\",\n surface: \"shader\",\n params: { radius: \"param\" },\n // The engine returns null when the radius rounds below 1 device px; the\n // scale isn't known here, so sub-pixel radii fall through to a no-op in WGSL.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras: (e) => ({ reach: e.radius }),\n cases: () => [\n Effects.oilPaint().list[0],\n Effects.oilPaint({ radius: 5 }).list[0],\n Effects.oilPaint({ radius: 1.5 }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type OutlineEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst POSITION = { outside: 0, inside: 1, center: 2 };\n\nexport default definePort<OutlineEffect, { position: number }>({\n type: \"outline\",\n surface: \"shader\",\n params: {\n width: \"param\",\n position: { type: \"f32\", value: (_e, c) => c.position },\n color: \"param\",\n },\n prepare(e) {\n if (!(e.width > 0) || resolveEffectColor(e.color)[3] <= 0) return null;\n return { position: POSITION[e.position] ?? 0 };\n },\n extras: (e, c) => ({ reach: c.position === 1 ? 0 : c.position === 2 ? e.width / 2 : e.width }),\n cases: () => [\n Effects.outline().list[0],\n Effects.outline({ width: 8, color: \"#f80\", position: \"inside\" }).list[0],\n Effects.outline({ width: 6, color: \"#0cf\", position: \"center\" }).list[0],\n ],\n});\n","import { Effects, type PixelateEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PixelateEffect>({\n type: \"pixelate\",\n surface: \"filter\",\n params: { blocks: \"param\", sharpColors: \"param\" },\n // Blended blocks fade out over half a block past the grid's edge (the\n // engine's linear upsample of a decal grid). A block's size depends on\n // the box, which the packer doesn't see: reach a generous fixed amount.\n // The grid is anchored at the box's top-left, as the engine's is for a\n // node laid out around its own centre.\n extras: (e) => ({ reach: e.sharpColors ? 0 : 100 }),\n cases: () => [\n Effects.pixelate(40).list[0],\n Effects.pixelate({ blocks: { x: 40, y: 24 }, sharpColors: false }).list[0],\n Effects.pixelate({ blocks: { x: 12.5, y: 40 / 3 } }).list[0],\n ],\n});\n","import { Effects, type PosterizeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PosterizeEffect>({\n type: \"posterize\",\n surface: \"shader\",\n params: { levels: \"param\" },\n prepare: (e) => (e.levels < 2 ? null : {}),\n cases: () => [Effects.posterize().list[0], Effects.posterize(2).list[0], Effects.posterize(7).list[0]],\n});\n","import { Effects, type ProgressiveBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ProgressiveBlurEffect, { start0: number }>({\n type: \"progressiveBlur\",\n surface: \"shader\",\n params: {\n center: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const a = (e.angle * Math.PI) / 180;\n return [Math.cos(a), Math.sin(a)];\n },\n },\n radius: \"param\",\n start_radius: { type: \"f32\", uses: [\"startRadius\"], value: (_e, c) => c.start0 },\n start: \"param\",\n end: \"param\",\n shape: \"param\",\n samples: { type: \"f32\", value: (e) => Math.max(2, Math.min(32, Math.round(e.samples))) },\n },\n prepare(e) {\n const start0 = e.startRadius ?? 0;\n return e.radius <= 0 && start0 <= 0 ? null : { start0 };\n },\n extras: (e, c) => ({ reach: Math.max(e.radius, c.start0, 0) }),\n cases: () => [\n Effects.progressiveBlur().list[0],\n Effects.progressiveBlur({ radius: 30, angle: 0, start: 0.3, end: 0.9, samples: 28 }).list[0],\n Effects.progressiveBlur({ radius: 28, startRadius: 4, shape: \"radial\", center: { x: 0.4, y: 0.5 } }).list[0],\n ],\n});\n","import { Effects, type RadialBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RadialBlurEffect>({\n type: \"radialBlur\",\n surface: \"shader\",\n params: {\n amount: \"param\",\n style: \"param\",\n center: \"param\",\n samples: { type: \"f32\", value: (e) => Math.round(Math.max(2, Math.min(32, e.samples))) },\n },\n prepare: (e) => (e.amount > 0 ? {} : null),\n extras(e) {\n // Taps pull in material from farther in (zoom: out to 1/(1 - amount/2) of\n // the box; spin: round to the corners), so the smear spills past the box.\n // Reach assumes a ~360 px half extent (the packer doesn't see the box).\n const spill = e.style === \"spin\" ? Math.SQRT2 - 1 : 1 / Math.max(1 - e.amount / 2, 0.25) - 1;\n return { reach: Math.min((spill + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.radialBlur().list[0],\n Effects.radialBlur({ amount: 0.8, style: \"spin\", samples: 24 }).list[0],\n Effects.radialBlur({ amount: 0.3, center: { x: 0.3, y: 0.4 }, samples: 8 }).list[0],\n ],\n});\n","import { Effects, type RgbShiftEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RgbShiftEffect>({\n type: \"rgbShift\",\n surface: \"shader\",\n params: { red: \"param\", green: \"param\", blue: \"param\" },\n prepare(e) {\n const { red, green, blue } = e;\n return !red.x && !red.y && !green.x && !green.y && !blue.x && !blue.y ? null : {};\n },\n extras: ({ red, green, blue }) => ({\n reach: Math.max(Math.abs(red.x), Math.abs(red.y), Math.abs(green.x), Math.abs(green.y), Math.abs(blue.x), Math.abs(blue.y)),\n }),\n cases: () => [\n Effects.rgbShift().list[0],\n Effects.rgbShift({ amount: 12 }).list[0],\n Effects.rgbShift({ red: { x: 6, y: -4 }, green: { x: -3, y: 5 }, blue: { x: 0, y: 9 } }).list[0],\n ],\n});\n","import { Effects, type ScanlinesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScanlinesEffect>({\n type: \"scanlines\",\n surface: \"shader\",\n params: {\n spacing: \"param\",\n thickness: \"param\",\n darkness: \"param\",\n offset: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const r = (e.angle * Math.PI) / 180;\n return [Math.cos(r), Math.sin(r)];\n },\n },\n },\n prepare: (e) => (e.darkness > 0 ? {} : null),\n cases: () => [\n Effects.scanlines().list[0],\n Effects.scanlines({ spacing: 7, thickness: 0.3, darkness: 0.8, offset: 2, angle: 30 }).list[0],\n Effects.scanlines({ spacing: 5, thickness: 0.7, angle: 90 }).list[0],\n ],\n});\n","import { Effects, resolveEffectAxis, type ScatterEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScatterEffect>({\n type: \"scatter\",\n surface: \"shader\",\n params: {\n offset: {\n type: \"vec2f\",\n uses: [\"strength\", \"axis\"],\n value(e) {\n const axis = resolveEffectAxis(e.axis);\n return [e.strength * axis.x, e.strength * axis.y];\n },\n },\n },\n prepare: (e) => (e.strength > 0 ? {} : null),\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.strength * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.scatter().list[0],\n Effects.scatter({ strength: 24, axis: \"x\" }).list[0],\n Effects.scatter({ strength: 6, axis: \"y\" }).list[0],\n ],\n});\n","import { Effects, type SharpenEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<SharpenEffect>({\n type: \"sharpen\",\n surface: \"shader\",\n params: { amount: \"param\", radius: { type: \"f32\", value: (e) => Math.max(e.radius, 0) } },\n prepare: (e) => (e.amount === 0 ? null : {}),\n cases: () => [\n Effects.sharpen().list[0],\n Effects.sharpen({ amount: 2.5, radius: 3 }).list[0],\n ],\n});\n","import { Effects, type StreakEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<StreakEffect, { t: number; scale: number; sigma: number; rad: number }>({\n type: \"streak\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n sigma: { type: \"f32\", uses: [\"length\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare(e) {\n if (e.intensity <= 0 || e.length <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.length / 2, rad: (e.angle * Math.PI) / 180 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, 0.01, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.streak().list[0],\n Effects.streak({ angle: 30, length: 80, threshold: 0.5, intensity: 1.5 }).list[0],\n Effects.streak({ angle: 90, length: 60, threshold: 0.3, intensity: 0.7 }).list[0],\n ],\n});\n","import { Effects, type ThresholdEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ThresholdEffect>({\n type: \"threshold\",\n surface: \"shader\",\n params: { level: \"param\", smoothness: \"param\" },\n cases: () => [\n Effects.threshold().list[0],\n Effects.threshold({ level: 0.3, smoothness: 0 }).list[0],\n Effects.threshold({ level: 0.6, smoothness: 0.4 }).list[0],\n ],\n});\n","import { Effects, type TwirlEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<TwirlEffect>({\n type: \"twirl\",\n surface: \"shader\",\n params: {\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n radius: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.angle === 0 || e.radius <= 0 ? null : {}),\n extras(e) {\n // Rotation keeps r, so the swirl draws out to where a rotated point still\n // lands in the box (≤ √2 normalised). Reach assumes a ~360 px half extent.\n const r = Math.min(e.radius, Math.SQRT2);\n return { reach: Math.min((Math.max(r - 1, 0) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.twirl().list[0],\n Effects.twirl({ angle: -120, radius: 0.6 }).list[0],\n Effects.twirl({ angle: 300, radius: 1.4, center: { x: 0.35, y: 0.55 } }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type VignetteEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VignetteEffect>({\n type: \"vignette\",\n surface: \"shader\",\n params: { color: \"param\", amount: \"param\", radius: \"param\", softness: \"param\" },\n prepare: (e) => (e.amount <= 0 || resolveEffectColor(e.color)[3] <= 0 ? null : {}),\n cases: () => [\n Effects.vignette().list[0],\n Effects.vignette({ amount: 0.9, radius: 0.4, softness: 0.3 }).list[0],\n Effects.vignette({ amount: 0.7, color: \"#ff8800\", radius: 0.6, softness: 0.8 }).list[0],\n ],\n});\n","import { Effects, type VintageEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VintageEffect>({\n type: \"vintage\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"warmth\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const w = Math.max(-1, Math.min(1, e.warmth));\n const lerp = (identity: number, sepia: number) => identity + (sepia - identity) * a;\n const warmR = w > 0 ? w * 0.15 : 0;\n const warmB = w < 0 ? -w * 0.15 : 0;\n const coolR = w < 0 ? -w * 0.05 : 0;\n const coolB = w > 0 ? w * 0.05 : 0;\n return [\n lerp(1, 0.393), lerp(0, 0.769), lerp(0, 0.189), 0, warmR - coolR,\n lerp(0, 0.349), lerp(1, 0.686), lerp(0, 0.168), 0, 0,\n lerp(0, 0.272), lerp(0, 0.534), lerp(1, 0.131), 0, -warmB + coolB,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 && e.warmth === 0 ? null : {}),\n cases: () => [\n Effects.vintage().list[0],\n Effects.vintage({ amount: 0.5, warmth: -0.8 }).list[0],\n Effects.vintage({ amount: 0, warmth: 1 }).list[0],\n ],\n});\n","import { Effects, type WaveEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<WaveEffect>({\n type: \"wave\",\n surface: \"shader\",\n params: {\n amplitude: \"param\",\n wavelength: { type: \"f32\", value: (e) => Math.max(e.wavelength, 0.01) },\n phase: { type: \"f32\", value: (e) => (((e.phase % 360) + 360) % 360) * Math.PI / 180 },\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const radians = (e.angle * Math.PI) / 180;\n return [Math.cos(radians), Math.sin(radians)];\n },\n },\n shape: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.amplitude.x === 0 && e.amplitude.y === 0 ? null : {}),\n extras: (e) => ({ reach: Math.max(Math.abs(e.amplitude.x), Math.abs(e.amplitude.y)) }),\n cases: () => [\n Effects.wave().list[0],\n Effects.wave({ amplitude: { x: 8, y: 14 }, wavelength: 60, phase: 70, angle: 35 }).list[0],\n Effects.wave({ amplitude: 16, shape: \"radial\", wavelength: 80, center: { x: 0.4, y: 0.6 } }).list[0],\n ],\n});\n","// The contract every effect port implements: one WGSL file in\n// crates/renderer/src/effects/<type>.wgsl plus one file here, both named after\n// core's effect `type`, the latter a `definePort` (_pack.ts) naming the pass's\n// parameters. Both sides are discovered automatically (build.rs and\n// `import.meta.glob`), so adding an effect never touches a shared file.\n\n/** An extra texture an effect samples via `aux_texel` (a LUT, noise, an atlas). */\nexport interface AuxTexture {\n /** Cache key: the same key reuses the uploaded texture. */\n key: string;\n width: number;\n height: number;\n /** RGBA8, straight (unpremultiplied) alpha, row-major. */\n pixels: Uint8ClampedArray;\n}\n\nexport interface Packed {\n /** Up to `MAX_PARAMS` (64) floats, laid out by `definePort` and read in WGSL through the generated `param_<name>()`. */\n params: number[];\n /** Logical px the effect can draw past its input (the layer grows by it). */\n reach?: number;\n /** Blur feeding `blurred()`: sigma along `angle`, sigma across it (logical px), angle in radians. */\n blur?: [number, number, number];\n aux?: AuxTexture;\n /** Read the node outline's inside distance field (`field(p)`, `max_distance()` in WGSL). */\n field?: boolean;\n}\n\nexport interface EffectPort<E = any> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n /**\n * The engine's path for this effect (core's `surface`). The engine applies\n * every shader-surface effect (in order) before every filter-surface one,\n * whatever the authored order; the adapter reproduces that.\n */\n surface: \"shader\" | \"filter\";\n /** The engine runs it only as a backdrop effect (`mode: \"backdrop\"`). */\n backdropOnly?: boolean;\n /** Authored effect (with core's defaults filled in) → WGSL inputs, or null for a no-op. */\n pack(effect: E): Packed | null;\n /** Effects for the parity harness, built with core's `Effects` builder. */\n cases(): object[];\n}\n\nexport const PORTS: Map<string, EffectPort> = new Map(\n Object.entries(import.meta.glob<{ default: EffectPort }>(\"./*.ts\", { eager: true }))\n .filter(([path]) => !path.includes(\"/_\"))\n .map(([, m]) => [m.default.type, m.default]),\n);\n","// User shaders: WGSL fills and effects written against the contract in\n// DESIGN.md §6.3. naga (in the WASM) validates and reflects a source at once;\n// the browser then compiles its pipelines asynchronously, and only when they\n// are ready does the renderer draw with them. A frame never waits: until then\n// the fill draws nothing and the effect passes its input through.\n\nimport { validate_shader } from \"../pkg/ms_renderer.js\";\nimport type { Renderer } from \"../pkg/ms_renderer.js\";\n\nexport type ShaderScope = \"fill\" | \"effect\";\n\n/** One problem in an author's source. `line`/`column` are 1-based; 0 = not in the source. */\nexport interface ShaderDiagnostic {\n line: number;\n column: number;\n length: number;\n message: string;\n /** `naga`: the renderer's validation; `browser`: the GPU's own compile. */\n source: \"naga\" | \"browser\";\n}\n\n/** One member of the source's `struct Params`, as WGSL's uniform layout places it. */\nexport interface ShaderField {\n name: string;\n /** Byte offset in `Params`. */\n offset: number;\n /** 0 f32, 1 i32, 2 u32. */\n scalar: number;\n /** Components per element (1–4). */\n components: number;\n /** Elements (array length or matrix columns), `stride` bytes apart. */\n elements: number;\n stride: number;\n /** The WGSL type (`vec3<f32>`, `array<vec4<f32>, 4>`). */\n type: string;\n}\n\nexport interface ShaderReport {\n ok: boolean;\n diagnostics: ShaderDiagnostic[];\n fields: ShaderField[];\n /** Size of `Params` in bytes. */\n size: number;\n /** The assembled module (header, renderer code, the author's). */\n wgsl?: string;\n}\n\nconst KIND = { fill: 0, effect: 1 } as const;\n\nfunction parse(json: string): ShaderReport {\n const r = JSON.parse(json) as ShaderReport;\n for (const d of r.diagnostics) d.source = \"naga\";\n return r;\n}\n\n/** Validates a source with naga; needs the renderer's WASM loaded (`loadRendererWasm`). */\nexport function validateShader(scope: ShaderScope, source: string): ShaderReport {\n return parse(validate_shader(KIND[scope], source));\n}\n\ntype Values = Record<string, number | readonly number[]>;\n\n/**\n * Named values as `Params` bytes (as u32 words, so integer bit patterns cross\n * intact). A field without a value reads as 0; a value with no field is ignored.\n */\nexport function packParams(fields: readonly ShaderField[], size: number, values: Values): Uint32Array {\n const words = new Uint32Array(Math.ceil(size / 4));\n const f32 = new Float32Array(words.buffer);\n const i32 = new Int32Array(words.buffer);\n for (const f of fields) {\n const v = values[f.name];\n if (v === undefined) continue;\n const flat = typeof v === \"number\" ? [v] : v.flat(Infinity as 1) as number[];\n for (let e = 0; e < f.elements; e++) {\n for (let c = 0; c < f.components; c++) {\n const x = flat[e * f.components + c];\n if (x === undefined) continue;\n const at = (f.offset + e * f.stride + c * 4) >> 2;\n if (at >= words.length) continue;\n if (f.scalar === 0) f32[at] = x;\n else if (f.scalar === 1) i32[at] = Math.round(x);\n else words[at] = Math.max(0, Math.round(x));\n }\n }\n }\n return words;\n}\n\nexport type ProgramState = \"compiling\" | \"ready\" | \"failed\";\n\nexport interface UserProgram {\n id: number;\n scope: ShaderScope;\n report: ShaderReport;\n state: ProgramState;\n /** The browser's own messages (`getCompilationInfo`), once compiled. */\n browser: ShaderDiagnostic[];\n /** Settles when the program is ready or has failed. */\n settled: Promise<void>;\n}\n\n/** Max programs kept per device before the least recently used go. */\nconst MAX_PROGRAMS = 64;\n\n/**\n * How long the browser may take to compile a program and its pipelines. A\n * compile that never settles would hold an export waiting on it forever.\n */\nexport const COMPILE_TIMEOUT_MS = 10_000;\n\nfunction withinTimeout<T>(work: Promise<T>, what: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`the browser took over ${COMPILE_TIMEOUT_MS / 1000} s to ${what}`)), COMPILE_TIMEOUT_MS);\n });\n return Promise.race([work, timeout]).finally(() => clearTimeout(timer));\n}\n\n/** One device's user programs, by scope and source. */\nexport class UserShaders {\n private programs = new Map<string, UserProgram>();\n private nextId = 0;\n private pending = new Set<Promise<void>>();\n\n /** `onReady` runs when a program becomes drawable, so its host can draw again. */\n constructor(private readonly r: Renderer, private readonly onReady: () => void) {}\n\n /** The program for `source`, added (and compiling) on first use. */\n program(scope: ShaderScope, source: string): UserProgram {\n const key = `${scope}\\n${source}`;\n const known = this.programs.get(key);\n if (known) {\n // Most recently used last.\n this.programs.delete(key);\n this.programs.set(key, known);\n return known;\n }\n if (this.programs.size >= MAX_PROGRAMS) {\n const [oldKey, old] = this.programs.entries().next().value!;\n this.programs.delete(oldKey);\n if (old.state !== \"compiling\") this.r.shader_remove(old.id);\n }\n const id = this.nextId++;\n const report = parse(this.r.shader_add(id, KIND[scope], source));\n const p: UserProgram = { id, scope, report, state: report.ok ? \"compiling\" : \"failed\", browser: [], settled: Promise.resolve() };\n if (report.ok) {\n const settled = this.compile(p).finally(() => this.pending.delete(settled));\n this.pending.add(settled);\n p.settled = settled;\n }\n this.programs.set(key, p);\n return p;\n }\n\n /** Whether a program is still compiling. */\n hasPending(): boolean {\n return this.pending.size > 0;\n }\n\n /** Settles once every program added so far is ready or has failed (export waits on this). */\n async whenReady(): Promise<void> {\n while (this.pending.size) await Promise.all([...this.pending]);\n }\n\n /**\n * The browser's compile of the module, then its pipelines, asynchronously\n * (`createRenderPipelineAsync`, descriptors mirroring gpu.rs). The\n * renderer's own pipelines are created after, from the same descriptors,\n * which the browser serves from its cache.\n */\n private async compile(p: UserProgram): Promise<void> {\n const device = this.r.gpu_device() as any;\n const wgsl = p.report.wgsl!;\n try {\n if (device) {\n const module = device.createShaderModule({ code: wgsl });\n const info = await withinTimeout<{ messages: any[] }>(module.getCompilationInfo(), \"compile it\");\n p.browser = browserDiagnostics(info.messages, wgsl);\n if (info.messages.some((m: { type: string }) => m.type === \"error\")) {\n p.state = \"failed\";\n this.r.shader_remove(p.id);\n return;\n }\n const formats = this.r.shader_formats(KIND[p.scope]);\n const warm = await withinTimeout(Promise.all(formats.map((f) => device.createRenderPipelineAsync(pipelineDesc(device, module, p.scope, f)).catch(() => null))), \"build its pipelines\");\n this.r.shader_build(p.id);\n void warm;\n } else {\n this.r.shader_build(p.id);\n }\n p.state = \"ready\";\n this.onReady();\n } catch (e) {\n p.state = \"failed\";\n p.browser.push({ line: 0, column: 0, length: 0, message: `error: ${String((e as Error)?.message ?? e)}`, source: \"browser\" });\n }\n }\n}\n\n/** `GPUCompilationMessage`s located in the author's code (after the marker line). */\nfunction browserDiagnostics(messages: readonly any[], wgsl: string): ShaderDiagnostic[] {\n const marker = wgsl.indexOf(\"// ── the author's code ──\\n\");\n const userLine = marker < 0 ? 0 : wgsl.slice(0, marker).split(\"\\n\").length + 1;\n return messages.map((m) => {\n const line = m.lineNum >= userLine && userLine > 0 ? m.lineNum - userLine + 1 : 0;\n return { line, column: line ? m.linePos : 0, length: m.length ?? 0, message: `${m.type}: ${m.message}`, source: \"browser\" as const };\n });\n}\n\nconst VIS = 3; // VERTEX | FRAGMENT\n\n/**\n * gpu.rs's bind group layouts for user pipelines, by group, one entry per\n * binding from 0. `layout_parity_test.rs` holds them equal to gpu.rs's.\n */\nexport const USER_LAYOUTS = {\n fill: [\n [\"uniform\", \"storage\", \"storage\", \"storage\", \"storage\", \"storage\", \"unfilterable-2d-array\", \"storage\"],\n [\"texture\", \"sampler\"],\n [\"uniform\"],\n ],\n effect: [\n [\"texture\", \"texture\", \"texture\", \"sampler\", \"sampler\", \"uniform\", \"texture\"],\n [\"uniform\"],\n ],\n} as const;\n\nconst ENTRY: Record<string, object> = {\n uniform: { buffer: { type: \"uniform\", hasDynamicOffset: true } },\n storage: { buffer: { type: \"read-only-storage\" } },\n texture: { texture: { sampleType: \"float\", viewDimension: \"2d\" } },\n sampler: { sampler: { type: \"filtering\" } },\n \"unfilterable-2d-array\": { texture: { sampleType: \"unfilterable-float\", viewDimension: \"2d-array\" } },\n};\n\nfunction layouts(device: any, scope: ShaderScope): any[] {\n return USER_LAYOUTS[scope].map((group) => device.createBindGroupLayout({ entries: group.map((kind, binding) => ({ binding, visibility: VIS, ...ENTRY[kind] })) }));\n}\n\nfunction pipelineDesc(device: any, module: any, scope: ShaderScope, format: string): object {\n const over = { srcFactor: \"one\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" };\n const fill = scope === \"fill\";\n return {\n layout: device.createPipelineLayout({ bindGroupLayouts: layouts(device, scope) }),\n vertex: { module, entryPoint: fill ? \"ms_vs_quad\" : \"ms_vs_effect\", buffers: [] },\n primitive: { topology: \"triangle-list\", cullMode: \"none\" },\n multisample: { count: 1 },\n fragment: {\n module,\n entryPoint: fill ? \"ms_fs_prim\" : \"ms_fs_effect\",\n targets: [{ format, ...(fill ? { blend: { color: over, alpha: over } } : {}), writeMask: 0xf }],\n },\n };\n}\n\n/** Core's blend names → the effect header's `blend_mode` index (+1 on the wire; 0 = replace). */\nexport const EFFECT_BLEND: Record<string, number> = {\n normal: 0, multiply: 1, screen: 2, overlay: 3, darken: 4, lighten: 5, \"color-dodge\": 6, \"color-burn\": 7,\n \"hard-light\": 8, \"soft-light\": 9, difference: 10, exclusion: 11, hue: 12, saturation: 13, color: 14, luminosity: 15,\n};\n\n/** What a host is told about a shader stored with `language: \"sksl\"` from before Motion Script ran only WGSL. */\nexport const SKSL_FILL = \"A shader fill is written in SkSL, which Motion Script no longer runs, so it draws nothing. Port it to WGSL (fn fill(in: FillIn) -> vec4f).\";\nexport const SKSL_EFFECT = \"A shader effect is written in SkSL, which Motion Script no longer runs, so it is skipped. Port it to WGSL (fn effect(in: EffectIn) -> vec4f).\";\n","// Backend adapter for the Rust/wgpu renderer: turns document changes into\n// deltas. Paints, paths and dash patterns are interned so each distinct value\n// crosses into WASM once.\n\nimport { encodeScene3D, GeometryTable, TextureTable } from \"./r3d/encode\";\nimport init, { Renderer } from \"../pkg/ms_renderer.js\";\nimport { BLEND_MODES, D, Doc, type ImageAsset, imageMatrix, isProjective, KIND_CODE, MASK_CODE, MEMBER_OP, memberOp, Node, type Paint, type PathData, pathBounds } from \"./doc\";\nimport { DeltaWriter, NONE, OP } from \"./protocol\";\nimport { type AuxTexture, type Packed, PORTS } from \"./effects/_port\";\nimport { isWgslShader, normalizeUniforms } from \"@motionscript/core\";\nimport { EFFECT_BLEND, packParams, SKSL_EFFECT, type UserProgram, UserShaders } from \"./user-shaders\";\n\n/** An `OP_EFFECTS` index at or above this is a user program (gpu.rs `USER_EFFECT`). */\nconst USER_EFFECT = 0x4000_0000;\n\n/** A core `shader` effect as the backend reads it. */\ninterface UserEffect { source: string; language?: string; reach?: number; uniforms?: unknown; mode?: string; blendMode?: string; clip?: boolean }\n\nlet wasm: Promise<{ memory: WebAssembly.Memory }> | null = null;\n\n/** Loads the renderer's WASM once; `url` overrides where it is served from. The first call wins. */\nexport function loadRendererWasm(url?: string | URL): Promise<{ memory: WebAssembly.Memory }> {\n wasm ??= init(url ? { module_or_path: url } : undefined) as unknown as Promise<{ memory: WebAssembly.Memory }>;\n return wasm;\n}\n\nlet device: Promise<void> | null = null;\n\n/**\n * Gets the GPU device every renderer on the page shares (gpu.rs `prewarm`).\n * Every `init` waits on it, so two surfaces mounting together ask once; a\n * failure is forgotten, so the next mount asks again.\n */\nexport function prewarmDevice(): Promise<void> {\n device ??= loadRendererWasm().then(() => Renderer.prewarm()).catch((e) => {\n device = null;\n throw e;\n });\n return device;\n}\n\n/** Forgets the shared device (lost), so the next `prewarmDevice` or mount asks for a new one. */\nexport function forgetDevice(): void {\n device = null;\n if (wasm) Renderer.forget_device();\n}\n\nconst JOIN = { miter: 0, round: 1, bevel: 2 } as const;\nconst CAP = { butt: 0, round: 1, square: 2 } as const;\nconst TILE = { clamp: 0, repeat: 1, mirror: 2, decal: 3 } as const;\nconst MEMBER_KIND = { rect: 1, ellipse: 2, path: 3 } as const;\nconst ALIGN = { left: 0, right: 1, center: 2, justify: 3 } as const;\nconst VALIGN = { top: 0, center: 1, bottom: 2 } as const;\nconst utf8 = new TextEncoder();\n/** Syncs an unused path or paint is kept before its id is freed for reuse. */\nconst KEEP_UNUSED = 120;\n\n/** A path or paint definition and the sync that last used it. */\ninterface Interned { id: number; used: number; live: boolean }\n\nfunction hashWords(words: ArrayLike<number>): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < words.length; i++) h = Math.imul(h ^ words[i], 0x01000193);\n return h >>> 0;\n}\n\n/** FNV-1a over a path's verbs and point bits, twice with different seeds. */\nfunction pathKey(d: PathData): string {\n const bits = new Uint32Array(d.points.buffer, d.points.byteOffset, d.points.length);\n let a = 0x811c9dc5, b = 0x01000193 ^ d.points.length;\n for (let i = 0; i < d.verbs.length; i++) {\n a = Math.imul(a ^ d.verbs[i], 0x01000193);\n b = Math.imul(b ^ d.verbs[i], 0x5bd1e995);\n }\n for (let i = 0; i < bits.length; i++) {\n a = Math.imul(a ^ bits[i], 0x01000193);\n b = Math.imul(b ^ bits[i], 0x5bd1e995);\n }\n return `${d.verbs.length}:${bits.length}:${a >>> 0}:${b >>> 0}`;\n}\n\nexport class WgpuBackend {\n readonly name = \"wgpu\";\n private r!: Renderer;\n private w!: DeltaWriter;\n private paintIds = new WeakMap<Paint, Interned>();\n private paintByKey = new Map<string, Interned>();\n private freePaints: number[] = [];\n private pathIds = new WeakMap<PathData, Interned>();\n private pathByKey = new Map<string, Interned>();\n private freePaths: number[] = [];\n /** Counts syncs; what a definition's `used` is measured against. */\n private generation = 0;\n /**\n * Free paths and reuse paint ids nothing has used for a while. Only for a\n * caller that hands over a new document every frame (every node rewritten,\n * so every live definition is marked used); a retained document's\n * untouched nodes would lose theirs.\n */\n collectUnused = false;\n private dashIds = new Map<string, number>();\n private nextPaint = 0;\n private nextPath = 0;\n private nextDash = 0;\n private synced = false;\n private viewport = { w: 0, h: 0 };\n lastDeltaWords = 0;\n\n async init(canvas: HTMLCanvasElement, width: number, height: number) {\n const exports = await loadRendererWasm();\n // A failure surfaces from `create`, which asks again.\n await prewarmDevice().catch(() => {});\n this.r = await Renderer.create(canvas, width, height);\n this.w = new DeltaWriter(this.r, exports.memory);\n this.effectIndex = new Map(this.r.effect_names().map((n, i) => [n, i]));\n this.viewport = { w: width, h: height };\n this.shaders = new UserShaders(this.r, () => this.onShaderReady?.());\n }\n\n /** User WGSL programs on this device. */\n shaders!: UserShaders;\n /** Called when a user shader finishes compiling, so the host can draw again. */\n onShaderReady?: () => void;\n /** User shader problems seen while syncing, by message; drained by the host. */\n readonly shaderIssues = new Set<string>();\n\n /** Settles once every user shader seen so far is ready or failed (an export waits on this). */\n whenShadersReady(): Promise<void> {\n return this.shaders.whenReady();\n }\n\n private userProgram(scope: \"fill\" | \"effect\", source: string): UserProgram {\n const p = this.shaders.program(scope, source);\n const d = p.report.diagnostics[0] ?? p.browser.find((m) => m.message.startsWith(\"error\"));\n if (p.state === \"failed\" && d) {\n this.shaderIssues.add(`A WGSL shader ${scope} does not compile${d.line ? ` (line ${d.line}:${d.column})` : \"\"}: ${d.message}`);\n }\n return p;\n }\n\n adapterInfo() {\n return this.r.adapter_info();\n }\n\n /** The `GPUDevice` this backend draws with (the page's shared one). */\n gpuDevice(): unknown {\n return this.r.gpu_device();\n }\n\n setOptions(linear: boolean, dither: boolean) {\n this.r.set_options(linear, dither);\n }\n\n resize(width: number, height: number) {\n this.r.resize(width, height);\n this.viewport = { w: width, h: height };\n this.synced = false;\n }\n\n private paint(p: Paint | undefined): number {\n if (!p) return NONE;\n const known = this.paintIds.get(p);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // Image paints key on the asset id, not its bytes or source.\n const key = p.kind === \"image\" ? `image:${p.image.id}:${p.fit ?? \"fill\"}:${p.box.join(\",\")}:${p.matrix?.join(\",\") ?? \"\"}:${p.tile ?? \"\"}`\n : p.kind === \"shader\" ? `shader:${this.userProgram(\"fill\", p.source).id}:${p.box.join(\",\")}:${p.time}:${p.texture?.id ?? \"\"}:${JSON.stringify(p.uniforms)}`\n : JSON.stringify(p);\n let entry = this.paintByKey.get(key);\n if (entry) entry.used = this.generation;\n else {\n entry = { id: this.freePaints.pop() ?? this.nextPaint++, used: this.generation, live: true };\n this.paintByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n if (p.kind === \"procedural\") {\n this.procedural(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n if (p.kind === \"shader\") {\n this.shaderPaint(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n const stops = p.kind === \"solid\" || p.kind === \"image\" ? [] : p.stops;\n w.begin(12 + stops.length * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n if (p.kind === \"solid\") {\n w.u(0);\n for (let i = 0; i < 4; i++) w.f(0);\n for (const c of p.color) w.f(c);\n } else if (p.kind === \"image\") {\n // Local → normalized uv (the inverse of image px → local, over\n // the image size): geom = a b c d, color = e f id 0.\n const { m, tile } = imageMatrix(p);\n const det = m[0] * m[3] - m[1] * m[2] || 1;\n const W = p.image.width, H = p.image.height;\n const ia = m[3] / det, ib = -m[1] / det, ic = -m[2] / det, id = m[0] / det;\n const ie = (m[2] * m[5] - m[3] * m[4]) / det, iff = (m[1] * m[4] - m[0] * m[5]) / det;\n w.u(4 | (TILE[tile] << 8));\n w.f(ia / W); w.f(ib / H); w.f(ic / W); w.f(id / H);\n w.f(ie / W); w.f(iff / H); w.f(p.image.id); w.f(0);\n } else {\n const kind = p.kind === \"linear\" ? 1 : p.kind === \"radial\" ? 2 : 3;\n w.u(kind | (TILE[p.tile ?? \"clamp\"] << 8));\n if (p.kind === \"linear\") {\n w.f(p.from[0]); w.f(p.from[1]); w.f(p.to[0]); w.f(p.to[1]);\n } else if (p.kind === \"radial\") {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.radius); w.f(0);\n } else {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.startAngle); w.f(p.endAngle);\n }\n for (const c of stops[0].color) w.f(c);\n }\n w.u(stops.length);\n for (const s of stops) {\n w.f(s.offset);\n for (const c of s.color) w.f(c);\n }\n }\n this.paintIds.set(p, entry);\n return entry.id;\n }\n\n /** The engine's procedural fills as paint kinds 5–9: geom/color plus raw\n * vec4 parameter slots carried as stops (see prim.wgsl). */\n /** Paint kind 10: geom = box, color = time, texture image (−1 = none), program; stops = `Params` words. */\n private shaderPaint(id: number, p: Extract<Paint, { kind: \"shader\" }>) {\n const prog = this.userProgram(\"fill\", p.source);\n const words = prog.report.ok ? packParams(prog.report.fields, prog.report.size, p.uniforms) : new Uint32Array(0);\n const stops = Math.ceil(words.length / 4);\n const w = this.w;\n w.begin(12 + stops * 5);\n w.u(OP.DEF_PAINT); w.u(id); w.u(10);\n for (const v of p.box) w.f(v);\n w.f(p.time); w.f(p.texture ? p.texture.id : -1); w.f(prog.id); w.f(0);\n w.u(stops);\n for (let s = 0; s < stops; s++) {\n w.f(0);\n for (let k = 0; k < 4; k++) w.u(words[s * 4 + k] ?? 0);\n }\n }\n\n private procedural(id: number, p: Extract<Paint, { kind: \"procedural\" }>) {\n const f = p.fill;\n const [bx, by, bw, bh] = p.box;\n let kind: number, geom: number[], color: number[];\n const slots: number[][] = [];\n const ramp: { offset: number; color: number[] }[] = [];\n const q8 = (c: readonly number[]) => [Math.round(c[0] * 255) / 255, Math.round(c[1] * 255) / 255, Math.round(c[2] * 255) / 255, c[3]];\n if (f.type === \"dotGrid\") {\n kind = 5;\n geom = [bx + f.offset.x, by + f.offset.y, Math.max(0.01, f.spacing), Math.max(0, f.radius)];\n color = [...f.color];\n } else if (f.type === \"grid\") {\n kind = 6;\n geom = [bx + f.offset.x, by + f.offset.y, bw, bh];\n color = [...f.color];\n slots.push([Math.max(0.0001, f.divisions), Math.max(1, Math.round(f.subdivisions)), Math.max(0, f.strokeWidth) * 0.5, Math.max(0, f.subdivisionWidth) * 0.5]);\n } else if (f.type === \"stripe\") {\n kind = 7;\n const rad = ((f.angle ?? -45) * Math.PI) / 180;\n geom = [bx, by, Math.max(1, Math.round(f.gap ?? 8)), f.strokeWidth ?? 1];\n color = q8(f.color ?? [0, 0, 0, 1]);\n slots.push([Math.cos(rad), Math.sin(rad), bx, 0]);\n } else if (f.type === \"noise\") {\n kind = 8;\n geom = [bx, by, Math.ceil(bw), Math.ceil(bh)];\n const c = q8(f.color);\n color = [c[0], c[1], c[2], Math.round(f.color[3] * 255) / 255];\n slots.push([Math.max(1, Math.round(f.size.x)), Math.max(1, Math.round(f.size.y)), Math.min(1, Math.max(0, f.density)), Math.round(f.seed)]);\n } else {\n kind = 9;\n geom = [bx, by, bw, bh];\n const rad = (f.angle * Math.PI) / 180;\n const basis = { value: 0, simplex: 1, ridged: 2, worley: 3 }[f.basis] ?? 1;\n slots.push([f.frequency.x, f.frequency.y, f.offset.x, f.offset.y]);\n slots.push([f.lacunarity, f.gain, f.seed, f.contrast]);\n slots.push([Math.cos(rad), Math.sin(rad), basis, f.octaves]);\n const n = Math.max(2, Math.min(8, f.colors.length));\n for (let i = 0; i < n; i++) {\n ramp.push({ offset: f.stops[Math.min(i, f.stops.length - 1)] ?? i / (n - 1), color: [...f.colors[Math.min(i, f.colors.length - 1)]] });\n }\n color = ramp[0].color;\n }\n const n = slots.length + ramp.length;\n const w = this.w;\n w.begin(12 + n * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n w.u(kind);\n for (const v of geom) w.f(v);\n for (const v of color) w.f(v);\n w.u(n);\n for (const s of slots) { w.f(0); for (const v of s) w.f(v); }\n for (const s of ramp) { w.f(s.offset); for (const v of s.color) w.f(v); }\n }\n\n private pathId(d: PathData): number {\n const known = this.pathIds.get(d);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // By content, so a shape rebuilt unchanged keeps its id, and with it\n // every cache keyed on the path (outline, bands, distance field).\n const key = pathKey(d);\n const same = this.pathByKey.get(key);\n if (same) {\n same.used = this.generation;\n this.pathIds.set(d, same);\n return same.id;\n }\n const entry: Interned = { id: this.freePaths.pop() ?? this.nextPath++, used: this.generation, live: true };\n this.pathByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n const vw = Math.ceil(d.verbs.length / 4);\n w.begin(4 + vw + d.points.length);\n w.u(OP.DEF_PATH);\n w.u(id);\n w.u(d.verbs.length);\n w.u(d.points.length / 2);\n for (let i = 0; i < vw; i++) {\n const v = d.verbs;\n const b = i * 4;\n w.u((v[b] ?? 0) | ((v[b + 1] ?? 0) << 8) | ((v[b + 2] ?? 0) << 16) | ((v[b + 3] ?? 0) << 24));\n }\n for (let i = 0; i < d.points.length; i++) w.f(d.points[i]);\n this.pathIds.set(d, entry);\n return id;\n }\n\n /** Frees the paths and paint ids `collectUnused` says nothing uses any more. */\n private sweep() {\n const before = this.generation - KEEP_UNUSED;\n for (const [key, e] of this.pathByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.pathByKey.delete(key);\n this.w.begin(2);\n this.w.u(OP.FREE_PATH); this.w.u(e.id);\n this.freePaths.push(e.id);\n }\n for (const [key, e] of this.paintByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.paintByKey.delete(key);\n this.freePaints.push(e.id);\n }\n }\n\n private dash(intervals: number[] | undefined, phase = 0): number {\n if (!intervals || intervals.length === 0) return NONE;\n const key = intervals.join(\",\") + \"@\" + phase;\n let id = this.dashIds.get(key);\n if (id === undefined) {\n id = this.nextDash++;\n this.dashIds.set(key, id);\n const w = this.w;\n w.begin(4 + intervals.length);\n w.u(OP.DEF_DASH);\n w.u(id);\n w.u(intervals.length);\n w.f(phase);\n for (const v of intervals) w.f(v);\n }\n return id;\n }\n\n private writeNode(n: Node, bits: number) {\n const w = this.w;\n const id = n.id;\n if (bits & D.CREATE) {\n w.begin(3);\n w.u(OP.CREATE); w.u(id); w.u(KIND_CODE[n.kind]);\n }\n if (bits & D.TRANSFORM) {\n const t = n.transform;\n if (isProjective(t)) {\n w.begin(11);\n w.u(OP.TRANSFORM3); w.u(id);\n for (const v of t) w.f(v);\n } else {\n // Affine (or a 3×3 with a trivial last row): six numbers.\n w.begin(8);\n w.u(OP.TRANSFORM); w.u(id);\n for (let k = 0; k < 6; k++) w.f(t[k]);\n }\n }\n if (bits & D.EFFECTS && (n.effects?.length || !(bits & D.CREATE))) this.writeEffects(n);\n if (bits & D.OPACITY && (n.opacity !== 1 || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.OPACITY); w.u(id); w.f(n.opacity);\n }\n if (bits & D.BLEND && (n.blend !== \"normal\" || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.BLEND); w.u(id); w.u(BLEND_MODES.indexOf(n.blend));\n }\n if (n.kind === \"group\") {\n if (bits & D.CLIP && (n.clip || !(bits & D.CREATE))) {\n const c = n.clip;\n const pid = c?.path ? this.pathId(c.path) : NONE;\n const r = c?.path ? pathBounds(c.path) : [c?.x ?? 0, c?.y ?? 0, (c?.x ?? 0) + (c?.w ?? 0), (c?.y ?? 0) + (c?.h ?? 0)];\n w.begin(10);\n w.u(OP.CLIP); w.u(id); w.u(c ? 1 : 0);\n for (const v of r) w.f(v);\n w.f(c?.r ?? 0); w.u(pid); w.u(c?.evenOdd ? 1 : 0);\n }\n if (bits & D.MASK && (n.mask || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.MASK); w.u(id); w.u(n.mask ? MASK_CODE[n.mask] : 0);\n }\n if (bits & D.FILTER && (n.filter || !(bits & D.CREATE))) {\n const f = n.filter;\n w.begin(10);\n w.u(OP.FILTER); w.u(id);\n if (!f) {\n w.u(0); for (let i = 0; i < 7; i++) w.f(0);\n } else if (f.kind === \"blur\") {\n w.u(1); w.f(f.sigma); for (let i = 0; i < 6; i++) w.f(0);\n } else {\n w.u(2); w.f(f.sigma); w.f(f.dx); w.f(f.dy); for (const c of f.color) w.f(c);\n }\n }\n if (bits & D.CHILDREN) {\n w.begin(3 + n.children.length);\n w.u(OP.CHILDREN); w.u(id); w.u(n.children.length);\n for (const c of n.children) w.u(c.id);\n }\n return;\n }\n if (bits & D.SIZE) {\n w.begin(4);\n w.u(OP.SIZE); w.u(id); w.f(n.w); w.f(n.h);\n }\n if (bits & D.RADII && n.kind === \"rect\") {\n w.begin(6);\n w.u(OP.RADII); w.u(id);\n for (const v of n.radii) w.f(v);\n }\n if (bits & D.MEMBERS && n.members) {\n const ms = n.members;\n const pids = ms.map((m) => (m.kind === \"path\" && m.path ? this.pathId(m.path) : NONE));\n w.begin(3 + ms.length * 16);\n w.u(OP.MEMBERS); w.u(id); w.u(ms.length);\n ms.forEach((m, k) => {\n w.u(MEMBER_KIND[m.kind]); w.u(MEMBER_OP[memberOp(m)]);\n for (const v of m.transform ?? [1, 0, 0, 1, 0, 0]) w.f(v);\n w.f(m.w ?? 0); w.f(m.h ?? 0);\n for (const v of m.radii ?? [0, 0, 0, 0]) w.f(v);\n w.u(pids[k]); w.u(m.evenOdd ? 1 : 0);\n });\n }\n if (bits & D.TEXT && n.text) {\n const t = n.text;\n const strings = t.runs.map((r) => [utf8.encode(r.family), utf8.encode(r.text)] as const);\n const words = strings.reduce((a, [f, s]) => a + 2 + Math.ceil(f.length / 4) + Math.ceil(s.length / 4) + 6, 0);\n const pathId = t.path ? this.pathId(t.path) : NONE;\n const runPaints = t.runs.map((r) => this.paint(r.paint));\n w.begin(12 + words);\n w.u(OP.TEXT); w.u(id);\n w.u(ALIGN[t.align ?? \"center\"]); w.u(VALIGN[t.verticalAlign ?? \"center\"]); w.u(t.wrap ? 1 : 0);\n w.f(t.fontSize === \"autofit\" ? 0 : t.runs.length === 1 ? t.runs[0].size : 0); w.f(t.minFontSize ?? 0);\n w.f(t.lineHeight ?? 0); w.f(t.width ?? 0); w.f(t.height ?? 0);\n w.u(t.runs.length);\n t.runs.forEach((r, k) => {\n w.u(r.decoration === \"underline\" ? 1 : r.decoration === \"lineThrough\" ? 2 : 0);\n w.u(runPaints[k]);\n w.f(r.size); w.f(r.weight ?? 400); w.u(r.italic ? 1 : 0); w.f(r.letterSpacing ?? 0);\n for (const bytes of strings[k]) {\n w.u(bytes.length);\n for (let i = 0; i < bytes.length; i += 4) {\n w.u((bytes[i] ?? 0) | ((bytes[i + 1] ?? 0) << 8) | ((bytes[i + 2] ?? 0) << 16) | ((bytes[i + 3] ?? 0) << 24));\n }\n }\n });\n w.u(pathId);\n }\n if (bits & D.PATH && n.path) {\n const pid = this.pathId(n.path);\n w.begin(4);\n w.u(OP.PATH); w.u(id); w.u(pid); w.u(n.evenOdd ? 1 : 0);\n }\n if (bits & D.FILL) {\n const p = this.paint(n.fill);\n w.begin(3);\n w.u(OP.FILL); w.u(id); w.u(p);\n }\n if (bits & D.STROKE && (n.stroke || !(bits & D.CREATE))) {\n const s = n.stroke;\n const p = this.paint(s?.paint);\n const dash = this.dash(s?.dash, s?.dashPhase);\n w.begin(8);\n w.u(OP.STROKE); w.u(id); w.u(p);\n w.f(s?.width ?? 0); w.u(JOIN[s?.join ?? \"miter\"]); w.u(CAP[s?.cap ?? \"butt\"]); w.f(s?.miter ?? 4); w.u(dash);\n }\n if (bits & D.SHADOWS && (n.shadows.length || !(bits & D.CREATE))) {\n w.begin(3 + n.shadows.length * 8);\n w.u(OP.SHADOWS); w.u(id); w.u(n.shadows.length);\n for (const s of n.shadows) {\n w.f(s.dx); w.f(s.dy); w.f(s.sigma); w.f(s.spread);\n for (const c of s.color) w.f(c);\n }\n }\n }\n\n private uploaded = new Map<number, number>();\n /** What 3D scenes recorded that the encoder doesn't carry yet. */\n readonly missing3d = new Set<string>();\n /** Per 3D scene asset, its texture ids (stable across versions). */\n private textures3d = new Map<number, TextureTable>();\n /** Per 3D scene asset, the geometry its renderer keeps. */\n private geometries3d = new Map<number, GeometryTable>();\n\n /** Answers a scene's new texture requests: images and surfaces from the\n * image store (converted on the GPU), data textures as pixels. */\n private bindTextures3d(img: ImageAsset, table: TextureTable) {\n for (const req of table.pending.splice(0)) {\n const t = req.texture;\n if (\"data\" in t) {\n this.r.scene3d_pixels(img.id, req.id, Uint8Array.from(t.data as ArrayLike<number>), t.width, t.height, req.srgb);\n continue;\n }\n const source = \"src\" in t ? img.links3d?.images?.[t.src] : img.links3d?.surfaces?.get(t);\n if (source) this.r.scene3d_bind(img.id, req.id, source.id, req.srgb);\n else this.missing3d.add(\"src\" in t ? `image:${t.src}` : \"surface\");\n }\n }\n private scene3dSigs = new Map<number, string>();\n /** The last sync's 3D encode (and signature) time and words. */\n private encode3dMs = 0;\n private words3d = 0;\n private effectIndex = new Map<string, number>();\n private auxIds = new Map<string, number>();\n /** Effect types with no WGSL port, as met. */\n readonly missing = new Set<string>();\n\n /** Effect `type`s this renderer has a WGSL port for. */\n effectTypes(): string[] {\n return [...this.effectIndex.keys()].filter((t) => PORTS.has(t));\n }\n\n private auxId(aux: AuxTexture | undefined): number {\n if (!aux) return NONE;\n let id = this.auxIds.get(aux.key);\n if (id === undefined) {\n id = 1_000_000 + this.auxIds.size;\n const c = new OffscreenCanvas(aux.width, aux.height);\n c.getContext(\"2d\")!.putImageData(new ImageData(new Uint8ClampedArray(aux.pixels), aux.width, aux.height), 0, 0);\n this.r.upload_image(id, c, false);\n this.auxIds.set(aux.key, id);\n }\n return id;\n }\n\n /** OP_EFFECTS: shader-surface effects first, then filter-surface ones (the engine's order). */\n private writeEffects(n: Node) {\n type E = { type: string; clip?: boolean; mode?: string };\n const list = (n.effects ?? []) as E[];\n const packed: { index: number; flags: number; aux: number; p: Packed; words?: Uint32Array }[] = [];\n // Foreground: shader effects, then filters (the engine's order). Backdrop\n // (flag bit 1): the composed filter layer first, then shader effects.\n const passes = [[\"shader\", false], [\"filter\", false], [\"filter\", true], [\"shader\", true]] as const;\n for (const [surface, backdrop] of passes) {\n for (const e of list) {\n if (e.type === \"shader\") {\n // Core's surface: a backdrop shader is a shader-surface effect, a foreground one a filter.\n if ((e.mode === \"backdrop\") !== backdrop || (backdrop ? \"shader\" : \"filter\") !== surface) continue;\n const fx = this.userEffect(e as unknown as UserEffect);\n if (fx) packed.push({ ...fx, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) });\n continue;\n }\n const port = PORTS.get(e.type);\n const index = this.effectIndex.get(e.type);\n if (!port || index === undefined) {\n if (!this.missing.has(e.type)) console.info(`effect \"${e.type}\" has no WGSL port yet; skipped`);\n this.missing.add(e.type);\n continue;\n }\n if (port.surface !== surface || (e.mode === \"backdrop\") !== backdrop) continue;\n if (port.backdropOnly && !backdrop) continue;\n const p = port.pack(e);\n if (!p) continue;\n packed.push({ index, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) | (backdrop && surface === \"filter\" ? 4 : 0) | (p.field ? 8 : 0), aux: this.auxId(p.aux), p });\n }\n }\n const w = this.w;\n const box = n.effectBox ?? [0, 0, 0, 0];\n w.begin(8 + packed.reduce((a, x) => a + 8 + x.p.params.length + (x.words?.length ?? 0), 0));\n w.u(OP.EFFECTS); w.u(n.id);\n for (const v of box) w.f(v);\n w.f(n.effectTime ?? 0);\n w.u(packed.length);\n for (const x of packed) {\n w.u(x.index); w.u(x.flags); w.u(x.aux); w.f(x.p.reach ?? 0);\n const b = x.p.blur ?? [0, 0, 0];\n w.f(b[0]); w.f(b[1]); w.f(b[2]);\n w.u(x.p.params.length + (x.words?.length ?? 0));\n for (const v of x.p.params) w.f(v);\n if (x.words) for (const v of x.words) w.u(v);\n }\n }\n\n /** A user WGSL effect: params = [blend + 1 (0 = replace)], then its `Params` words. */\n private userEffect(e: UserEffect): { index: number; aux: number; p: Packed; words: Uint32Array } | null {\n if (!e.source?.trim()) return null;\n if (!isWgslShader(e)) {\n this.shaderIssues.add(SKSL_EFFECT);\n return null;\n }\n const prog = this.userProgram(\"effect\", e.source);\n if (!prog.report.ok) return null;\n const uniforms = normalizeUniforms(e.uniforms as Parameters<typeof normalizeUniforms>[0]);\n const blend = e.mode !== \"backdrop\" && e.blendMode ? (EFFECT_BLEND[e.blendMode] ?? -1) + 1 : 0;\n return { index: USER_EFFECT + prog.id, aux: NONE, p: { params: [blend], reach: Math.max(0, e.reach ?? 0) }, words: packParams(prog.report.fields, prog.report.size, uniforms) };\n }\n private frameCanvases = new Map<number, OffscreenCanvas>();\n\n /**\n * Video frames go through a (GPU-backed) 2D canvas first. Chrome's WebGPU\n * external-image copy also converts the BT.709 transfer curve to sRGB,\n * lifting darks and mids by up to 10/255; canvas 2D, players and the\n * engine's current video path apply the YUV matrix only. Still a GPU path,\n * no readback.\n */\n private colorCorrect(img: Doc[\"images\"][number]): Doc[\"images\"][number][\"source\"] {\n if (typeof VideoFrame === \"undefined\" || !(img.source instanceof VideoFrame)) return img.source;\n let c = this.frameCanvases.get(img.id);\n if (!c || c.width !== img.width || c.height !== img.height) {\n c = new OffscreenCanvas(img.width, img.height);\n this.frameCanvases.set(img.id, c);\n }\n c.getContext(\"2d\")!.drawImage(img.source, 0, 0);\n return c;\n }\n\n sync(doc: Doc) {\n this.generation++;\n this.encode3dMs = 0;\n this.words3d = 0;\n // Images first: a GPU copy per new asset or video frame version.\n for (const img of doc.images) {\n if (this.uploaded.get(img.id) === img.version) continue;\n if (img.surface) {\n this.r.set_surface(img.id, img.surface.id, img.width, img.height);\n } else if (img.scene3d) {\n const k = this.viewport.w / doc.width;\n const report = { unsupported: new Set<string>() };\n let table = this.textures3d.get(img.id);\n if (!table) this.textures3d.set(img.id, (table = new TextureTable()));\n const [pw, ph] = img.scale3d ? [Math.ceil(img.width * img.scale3d), Math.ceil(img.height * img.scale3d)] : [Math.round(img.width * k), Math.round(img.height * k)];\n const t0 = performance.now();\n let geometries = this.geometries3d.get(img.id);\n if (!geometries) this.geometries3d.set(img.id, (geometries = new GeometryTable()));\n const words = encodeScene3D(img.scene3d, report, table, geometries);\n // A scene handed over again unchanged (every frame, when the\n // caller rebuilds its document) keeps what is already drawn.\n const sig = `${pw}x${ph}:${words.length}:${hashWords(words)}`;\n this.encode3dMs += performance.now() - t0;\n this.words3d += words.length;\n if (this.scene3dSigs.get(img.id) !== sig) {\n try {\n this.r.set_scene3d(img.id, pw, ph, words);\n } catch (e) {\n // The renderer didn't take this frame's defs: start over.\n this.geometries3d.delete(img.id);\n this.scene3dSigs.delete(img.id);\n throw e;\n }\n this.scene3dSigs.set(img.id, sig);\n }\n for (const u of report.unsupported) this.missing3d.add(u);\n this.bindTextures3d(img, table);\n } else this.r.upload_image(img.id, this.colorCorrect(img), img.mipmaps);\n this.uploaded.set(img.id, img.version);\n }\n const w = this.w;\n if (!this.synced) {\n // Full upload: create every node first so CHILDREN can refer to them.\n for (const n of doc.nodes) this.writeNode(n, D.ALL);\n w.begin(2);\n w.u(OP.ROOT); w.u(doc.root.id);\n w.begin(8);\n w.u(OP.VIEWPORT); w.u(this.viewport.w); w.u(this.viewport.h); w.f(this.viewport.w / doc.width);\n for (const c of doc.background) w.f(c);\n this.synced = true;\n } else {\n for (const n of doc.dirty) this.writeNode(n, n.dirty);\n }\n for (const n of doc.dirty) n.dirty = 0;\n doc.dirty.clear();\n if (this.collectUnused && this.generation % 30 === 0) this.sweep();\n w.flush();\n this.lastDeltaWords = w.takeCount();\n }\n\n render() {\n this.r.render();\n }\n\n invalidate() {\n this.r.invalidate();\n }\n\n waitGpu(): Promise<void> {\n return this.r.wait_gpu();\n }\n\n async readPixels(): Promise<Uint8Array> {\n return (await this.r.read_pixels()) as Uint8Array;\n }\n\n stats(): Record<string, number> {\n const s = this.r.stats();\n return {\n buildMs: s[0], encodeMs: s[1], applyMs: s[2], prims: s[3], ops: s[4], layers: s[5],\n passes: s[6], draws: s[7], culled: s[8], tessellated: s[9], poolTextures: s[10],\n poolMiB: s[11], geomVertices: s[12], reusedPrims: s[13], cleanPrims: s[14], deltaWords: this.lastDeltaWords,\n scene3dEncodeMs: this.encode3dMs, scene3dWords: this.words3d, scene3dSetMs: s[15], scene3dDrawMs: s[16], scene3dMapsMs: s[17], surfacesDrawn: s[18], surfaces: s[19],\n };\n }\n\n registerFont(bytes: Uint8Array, family: string) {\n this.r.register_font(bytes, family);\n }\n\n destroy() {\n this.r.free();\n }\n}\n","// Draws a frame from core's own pieces around the adapter's render context: build the clips, evaluate state\n// at the frame, lay out, and render until no decode is pending.\n\nimport {\n AssetManager, AudioSink, ClipStore, AssetTimeline, ManifestAssetCatalog, type ProjectDocument, type Registry,\n renderSettled, setTheme, StateEvaluator, StorageAdapter,\n} from \"@motionscript/core\";\nimport type { WgpuRenderContext } from \"./context\";\n\nclass SilentAudio extends AudioSink {\n override get schedulesAudio(): boolean { return false; }\n has(): boolean { return true; }\n async append(): Promise<void> {}\n retain(): void {}\n schedule(): void {}\n syncTo(): void {}\n play(): void {}\n stop(): void {}\n}\n\n/** Asset keys as scenes write them (\"./cat.jpg\") and as the manifest lists them (\"cat.jpg\"). */\nexport const assetKey = (src: string) => src.replace(/^\\.?\\//, \"\");\n\n/** A decoded image the doc can paint with. */\nexport interface Decoded { bitmap: ImageBitmap; bytes: Uint8Array; width: number; height: number }\n\n/** Media for the harness: decoded images by asset key (video and fonts later). */\nexport class AdapterStorage extends StorageAdapter {\n constructor(catalog: never, viewport: never, private urls: Record<string, string>, readonly images: Map<string, Decoded>, private videoUrls: Record<string, string> = {}) {\n super(catalog, viewport);\n }\n async loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return;\n const url = this.urls[key];\n if (!url) return;\n const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());\n let bitmap: ImageBitmap;\n if (key.endsWith(\".svg\")) {\n // createImageBitmap can't decode SVG; an <img> can (at its natural size).\n const img = new Image();\n img.src = URL.createObjectURL(new Blob([bytes as BlobPart], { type: \"image/svg+xml\" }));\n await img.decode();\n bitmap = await createImageBitmap(img);\n } else bitmap = await createImageBitmap(new Blob([bytes as BlobPart]));\n this.images.set(key, { bitmap, bytes, width: bitmap.width, height: bitmap.height });\n }\n /** Open videos by asset key, and their decoded frames by key@time. */\n readonly videos = new Map<string, HTMLVideoElement>();\n readonly frames = new Map<string, ImageBitmap>();\n private pending = new Map<string, { key: string; time: number }>();\n\n async loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key) || !this.videoUrls[key]) return;\n const v = document.createElement(\"video\");\n v.muted = true;\n v.preload = \"auto\";\n v.src = this.videoUrls[key];\n await new Promise<void>((resolve, reject) => {\n v.onloadeddata = () => resolve();\n v.onerror = () => reject(new Error(`video ${key} failed to load`));\n });\n this.videos.set(key, v);\n }\n\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const id = `${key}@${time.toFixed(6)}`;\n const f = this.frames.get(id);\n if (f) return f;\n if (this.videos.has(key)) this.pending.set(id, { key, time });\n return null;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n if (this.pending.size === 0) return false;\n for (const [id, { key, time }] of [...this.pending]) {\n const v = this.videos.get(key)!;\n await new Promise<void>((resolve) => {\n v.onseeked = () => resolve();\n v.currentTime = time;\n });\n this.frames.set(id, await createImageBitmap(v));\n this.pending.delete(id);\n }\n return true;\n }\n async loadAudio(): Promise<void> {}\n async fetchAudioData(): Promise<ArrayBuffer> { return new ArrayBuffer(0); }\n async loadFont(): Promise<boolean> { return true; }\n}\n\n/** Media the scenes may reference: asset key → URL; videos with their duration (s). */\nexport interface Media { images: Record<string, string>; videos?: Record<string, { url: string; duration: number }> }\n\nexport async function drawFrameAt(project: ProjectDocument, registry: Registry, ctx: WgpuRenderContext, frame: number | \"last\", media: Media = { images: {} }) {\n const { fps, viewport } = project as Required<ProjectDocument>;\n setTheme(project.theme as never);\n const image = Object.fromEntries(Object.entries(media.images).map(([key, src]) => [key, { src, width: 0, height: 0, sizeBytes: 0 }]));\n const videos = media.videos ?? {};\n const video = Object.fromEntries(Object.entries(videos).map(([key, v]) => [key, { src: v.url, width: 0, height: 0, duration: v.duration, sizeBytes: 0 }]));\n const assets = new ManifestAssetCatalog({ image, video, audio: {}, font: {} });\n const storage = new AdapterStorage(assets as never, viewport as never, media.images, ctx.images, Object.fromEntries(Object.entries(videos).map(([k, v]) => [k, v.url])));\n ctx.storage = storage;\n const scope = { registry, viewport, fps, assets, measurer: ctx };\n const loads: { manager?: AssetManager } = {};\n const store = new ClipStore(project, scope as never, { isReady: (key: string) => loads.manager?.isReady(key) ?? false });\n const precomper = new AssetTimeline(project, scope as never, { store });\n const evaluator = new StateEvaluator(project, scope as never, store);\n const { totalFrames } = precomper.result();\n const target = Math.max(0, Math.min(totalFrames - 1, frame === \"last\" ? totalFrames - 1 : Math.floor(frame)));\n const precomp = precomper.ensureCovering(target);\n const manager = (loads.manager = new AssetManager(precomp, storage, new SilentAudio()));\n await manager.loadAt(target);\n evaluator.stateAt(target);\n evaluator.layout(ctx);\n await renderSettled(() => ctx.execute(() => evaluator.render(ctx)), storage, () => true);\n return { frame: target, totalFrames, buildErrors: precomp.buildErrors };\n}\n","// The engine's StorageAdapter for the wgpu renderer: assets decoded into what\n// the adapter's render context paints with (ImageBitmaps by asset key, video\n// frames by source and time) and font bytes for ms-text. Bytes come through\n// the host's `loadBytes` (a plain fetch by default), so a local store is honoured.\n\nimport { type AssetCatalog, type Size2D, StorageAdapter } from \"@motionscript/core\";\nimport { ALL_FORMATS, BlobSource, Input, VideoSampleSink } from \"mediabunny\";\nimport type { VideoFrames } from \"../adapter/context\";\nimport { assetKey, type Decoded } from \"../adapter/driver\";\n\n/** WebGPU's guaranteed texture edge; larger images are downscaled to fit. */\nconst MAX_TEXTURE_EDGE = 8192;\n/** Decoded frames kept per video (scrubbing back and forth reuses them). */\nconst FRAMES_PER_VIDEO = 12;\n\ninterface VideoTrack {\n duration: number;\n sink: VideoSampleSink;\n input: Input;\n /** Decoded frames by time key, oldest first. */\n frames: Map<string, ImageBitmap>;\n last: ImageBitmap | null;\n}\n\nexport interface FontFile {\n bytes: Uint8Array;\n family: string;\n}\n\nconst timeKey = (time: number) => time.toFixed(4);\n\nasync function fetchBytes(src: string): Promise<Blob> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`${src}: HTTP ${res.status}`);\n return res.blob();\n}\n\nexport class WgpuStorageAdapter extends StorageAdapter implements VideoFrames {\n readonly images = new Map<string, Decoded>();\n readonly videos = new Map<string, VideoTrack>();\n /** Every font file registered so far, in order; renderers replay them. */\n readonly fonts: FontFile[] = [];\n private fontListeners = new Set<(font: FontFile) => void>();\n private registeredFamilies = new Set<string>();\n private pending = new Map<string, { src: string; time: number }>();\n /** SVGs by asset key, kept to rasterize again at the edge a draw needs. */\n private vectors = new Map<string, { img: HTMLImageElement; edge: number }>();\n /** Vector keys a draw wants sharper, and the long edge (px) it wants. */\n private upgrades = new Map<string, number>();\n /** Other work a settled frame waits for (a surface's shader compiles): a promise while there is some. */\n private settlers = new Set<() => Promise<void> | null>();\n private audioData = new Map<string, Promise<ArrayBuffer>>();\n\n constructor(catalog: AssetCatalog, viewport: Size2D, readonly fps: number, private readonly loadBytes: (src: string) => Promise<Blob> = fetchBytes) {\n super(catalog, viewport);\n }\n\n /** The session's viewport, in scene units. */\n get size(): Size2D {\n return this.viewport;\n }\n\n /** Has `renderSettled` (exports, settled seeks) also wait for what `settler` reports pending. */\n addSettler(settler: () => Promise<void> | null): () => void {\n this.settlers.add(settler);\n return () => this.settlers.delete(settler);\n }\n\n /** Calls `listener` for each font registered from now on. */\n onFont(listener: (font: FontFile) => void): () => void {\n this.fontListeners.add(listener);\n return () => this.fontListeners.delete(listener);\n }\n\n async loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return;\n const url = this.url(src, (c) => c.getImageMeta(src));\n const blob = await this.loadBytes(url);\n let bitmap: ImageBitmap;\n if (blob.type === \"image/svg+xml\" || /\\.svg(\\?|#|$)/i.test(url)) {\n // createImageBitmap can't decode SVG; an <img> can.\n const img = new Image();\n img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(await blob.text())}`;\n await img.decode();\n bitmap = await createImageBitmap(img);\n this.vectors.set(key, { img, edge: Math.max(bitmap.width, bitmap.height) });\n } else {\n bitmap = await createImageBitmap(blob, { colorSpaceConversion: \"none\" });\n }\n const edge = Math.max(bitmap.width, bitmap.height);\n if (edge > MAX_TEXTURE_EDGE) {\n const k = MAX_TEXTURE_EDGE / edge;\n const scaled = await createImageBitmap(bitmap, {\n resizeWidth: Math.max(1, Math.round(bitmap.width * k)),\n resizeHeight: Math.max(1, Math.round(bitmap.height * k)),\n resizeQuality: \"high\",\n });\n bitmap.close();\n bitmap = scaled;\n }\n this.images.set(key, { bitmap, bytes: new Uint8Array(0), width: bitmap.width, height: bitmap.height });\n }\n\n async loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key)) return;\n const url = this.url(src, (c) => c.getVideoMeta(src));\n const input = new Input({ source: new BlobSource(await this.loadBytes(url)), formats: ALL_FORMATS });\n const track = await input.getPrimaryVideoTrack();\n if (!track) {\n input.dispose();\n throw new Error(`loadVideo(${src}): no video track`);\n }\n const duration = await input.computeDuration();\n this.videos.set(key, { duration, sink: new VideoSampleSink(track), input, frames: new Map(), last: null });\n }\n\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const video = this.videos.get(key);\n if (!video) return null;\n const exact = video.frames.get(timeKey(time));\n if (exact) return exact;\n // By time as well: an echo asks for several frames of one clip at once.\n this.pending.set(`${key}@${timeKey(time)}`, { src: key, time });\n // The nearest earlier answer keeps playback from flashing empty while\n // the exact frame decodes; a settled render waits for it.\n return video.last;\n }\n\n /**\n * A draw of `src` covering `edge` device px along its long side. An SVG\n * has no resolution of its own, so one drawn larger than its raster is\n * rasterized again, at the next power-of-two multiple of its natural size.\n */\n wantImageEdge(src: string, edge: number): void {\n const key = assetKey(src);\n const vector = this.vectors.get(key);\n const image = this.images.get(key);\n if (!vector || !image || edge <= vector.edge) return;\n const natural = Math.max(image.width, image.height);\n const level = Math.min(MAX_TEXTURE_EDGE, natural * 2 ** Math.ceil(Math.log2(edge / natural)));\n if (level > vector.edge && level > (this.upgrades.get(key) ?? 0)) this.upgrades.set(key, level);\n }\n\n override hasPendingUpgrades(): boolean {\n return this.upgrades.size > 0;\n }\n\n override async warmPendingUpgrades(): Promise<boolean> {\n if (this.upgrades.size === 0) return false;\n const jobs = [...this.upgrades];\n this.upgrades.clear();\n for (const [key, edge] of jobs) {\n const vector = this.vectors.get(key), image = this.images.get(key);\n if (!vector || !image) continue;\n const k = edge / Math.max(image.width, image.height);\n const canvas = new OffscreenCanvas(Math.max(1, Math.round(image.width * k)), Math.max(1, Math.round(image.height * k)));\n canvas.getContext(\"2d\")!.drawImage(vector.img, 0, 0, canvas.width, canvas.height);\n const old = image.bitmap;\n // The natural size stays what places it; only the raster grows.\n image.bitmap = await createImageBitmap(canvas);\n vector.edge = edge;\n // Still painted by a doc until the next frame replaces it.\n queueMicrotask(() => old.close());\n }\n return true;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n const other = [...this.settlers].map((s) => s()).filter((p) => p !== null);\n if (this.pending.size === 0 && other.length === 0) return false;\n const jobs = [...this.pending.values()];\n this.pending.clear();\n await Promise.all([...jobs.map(({ src, time }) => this.decodeFrame(src, time)), ...other]);\n return true;\n }\n\n private async decodeFrame(src: string, time: number): Promise<void> {\n const video = this.videos.get(src);\n if (!video) return;\n const sample = await video.sink.getSample(time);\n if (!sample) return;\n const frame = sample.toVideoFrame();\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(frame);\n } finally {\n frame.close();\n sample.close();\n }\n video.frames.set(timeKey(time), bitmap);\n video.last = bitmap;\n while (video.frames.size > FRAMES_PER_VIDEO) {\n const [oldest, old] = video.frames.entries().next().value!;\n video.frames.delete(oldest);\n // Still painted by a doc until the next frame replaces it.\n if (old !== video.last) queueMicrotask(() => old.close());\n }\n }\n\n async loadAudio(): Promise<void> {}\n\n fetchAudioData(src: string): Promise<ArrayBuffer> {\n let data = this.audioData.get(src);\n if (!data) {\n // A video's own soundtrack is asked for under the video's key.\n const url = this.url(src, (c) => {\n try {\n return c.getAudioMeta(src);\n } catch {\n return c.getVideoMeta(src);\n }\n });\n data = (async () => (await this.loadBytes(url)).arrayBuffer())();\n this.audioData.set(src, data);\n data.catch(() => this.audioData.delete(src));\n }\n return data.then((b) => b.slice(0));\n }\n\n async loadFont(key: string, fontFamily: string): Promise<boolean> {\n if (this.registeredFamilies.has(fontFamily)) return true;\n const metas = this.catalog.getFontFamilyMetas(fontFamily);\n if (metas.length === 0) {\n if (this.getDecodePolicy() === \"interactive\") console.warn(`[WgpuStorageAdapter] No font manifest entry for \"${key}\".`);\n return false;\n }\n const sources = [...new Set(metas.map((m) => m.src))];\n const files = await Promise.all(sources.map(async (s) => new Uint8Array(await (await this.loadBytes(s)).arrayBuffer())));\n if (this.registeredFamilies.has(fontFamily)) return true;\n for (const bytes of files) {\n const font = { bytes, family: fontFamily };\n this.fonts.push(font);\n for (const listener of this.fontListeners) listener(font);\n }\n this.registeredFamilies.add(fontFamily);\n return true;\n }\n\n override dispose(): void {\n for (const image of this.images.values()) image.bitmap.close();\n this.images.clear();\n for (const video of this.videos.values()) {\n for (const frame of video.frames.values()) frame.close();\n video.input.dispose();\n }\n this.videos.clear();\n this.pending.clear();\n this.vectors.clear();\n this.upgrades.clear();\n this.fontListeners.clear();\n super.dispose();\n }\n\n /** The address a source's bytes live at: the manifest's, else the source itself. */\n private url(src: string, meta: (catalog: AssetCatalog) => { src?: string }): string {\n try {\n return meta(this.catalog).src || src;\n } catch {\n return src;\n }\n }\n}\n","import type { Bounds } from \"./base\";\n\n/** The placement fields `computeImageMatrix` reads off an image or video fill. */\nexport interface MediaPlacement {\n fit?: string;\n crop?: { left: number; right: number; top: number; bottom: number };\n zoom?: number;\n anchor?: { x: number; y: number };\n matrix?: Float32Array | number[][];\n}\n\n/**\n * The image→shape matrix (row-major 3×3 as 9 numbers) from intrinsic source\n * pixels, the space `tile`, `crop` and a raw `matrix` are authored in. Four\n * stages compose in order: crop picks a window treated as the whole image, fit\n * sets the base scale for it, zoom multiplies that, and anchor is both the zoom\n * focal point and the alignment where the image doesn't cover.\n */\nexport function computeImageMatrix(imgW: number, imgH: number, fill: MediaPlacement, bounds: Bounds | null): number[] {\n if (fill.matrix) {\n if (fill.matrix instanceof Float32Array) return Array.from(fill.matrix);\n return (fill.matrix as number[][]).flat();\n }\n const zoom = fill.zoom ?? 1;\n if (!bounds) return [zoom, 0, 0, 0, zoom, 0, 0, 0, 1];\n\n const mode = fill.fit ?? \"fill\";\n const boxW = bounds.right - bounds.left;\n const boxH = bounds.bottom - bounds.top;\n // A repeating texture repeats the whole image, so a tile ignores the crop.\n const crop = mode === \"tile\" ? undefined : fill.crop;\n const srcX = crop ? crop.left * imgW : 0;\n const srcY = crop ? crop.top * imgH : 0;\n const srcW = crop ? imgW * (1 - crop.left - crop.right) : imgW;\n const srcH = crop ? imgH * (1 - crop.top - crop.bottom) : imgH;\n if (srcW <= 0 || srcH <= 0) return [zoom, 0, bounds.left, 0, zoom, bounds.top, 0, 0, 1];\n\n let sx: number, sy: number;\n if (mode === \"fit\") {\n sx = sy = Math.min(boxW / srcW, boxH / srcH);\n } else if (mode === \"stretch\") {\n sx = boxW / srcW; sy = boxH / srcH;\n } else if (mode === \"tile\") {\n sx = sy = 1;\n } else {\n sx = sy = Math.max(boxW / srcW, boxH / srcH);\n }\n sx *= zoom; sy *= zoom;\n // A repeating texture has no corner to pin, so a tile keeps its origin.\n if (mode === \"tile\") return [sx, 0, bounds.left, 0, sy, bounds.top, 0, 0, 1];\n\n // The anchor is [-1, 1] y-up (the pivot space); texture space is [0, 1] y-down.\n const anchor = fill.anchor ?? { x: 0, y: 0 };\n const ax = (anchor.x + 1) / 2;\n const ay = (1 - anchor.y) / 2;\n const tx = bounds.left + ax * (boxW - srcW * sx) - srcX * sx;\n const ty = bounds.top + ay * (boxH - srcH * sy) - srcY * sy;\n return [sx, 0, tx, 0, sy, ty, 0, 0, 1];\n}\n","// core's resolved fills, strokes and shadows to the doc's paints, resolved\n// against a shape's bounds.\n\nimport type { FillResolved, ShadowResolved } from \"@motionscript/core\";\nimport { isWgslShader } from \"@motionscript/core\";\nimport { computeImageMatrix } from \"./geometry/image-matrix\";\nimport type { ImageAsset, Mat, Paint, Shadow, Stop } from \"../doc\";\n\ntype Bounds = [number, number, number, number];\n\n/** A normalized point to pixels: −1..1, y up (+1 = top). */\nfunction norm(nx: number, ny: number, b: Bounds): [number, number] {\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n return [cx + nx * ((b[2] - b[0]) / 2), cy - ny * ((b[3] - b[1]) / 2)];\n}\n\nfunction stops(colors: readonly (readonly number[])[], at: readonly number[]): Stop[] {\n return colors.map((c, i) => ({ offset: at[i] ?? i / Math.max(1, colors.length - 1), color: [c[0], c[1], c[2], c[3]] }));\n}\n\n/** A fill layer as a doc paint, or null when this adapter doesn't map it yet. */\n/** What a fill may need from the frame's doc. */\nexport interface PaintAssets {\n image(src: string): ImageAsset | null;\n /** A 3D scene rendered at `ratio` device px per logical px over `w`×`h`. */\n scene3d(scene: unknown, w: number, h: number, ratio: number): ImageAsset;\n /** The current device scale (canvas3d sizes its buffer by it). */\n deviceScale(): number;\n /** An image drawn `edge` device px along its long side (a vector may rasterize sharper). */\n imageEdge?(src: string, edge: number): void;\n /** A video fill's frame at the node's elapsed time (or at `time` s), or null while it decodes. */\n video(fill: unknown, time?: number): ImageAsset | null;\n /** The current node's elapsed seconds (a shader fill's `time`). */\n time?(): number;\n /** Sees each WGSL shader fill drawn, to check its uniforms against its `Params`. */\n checkShader?(fill: unknown): void;\n}\n\nexport function fillPaint(f: FillResolved, bounds: Bounds, missing: Set<string>, assets?: PaintAssets): Paint | null {\n const any = f as any;\n const image = assets ? (src: string) => assets.image(src) : undefined;\n switch (any.type) {\n case \"video\": {\n const asset = assets?.video(any);\n if (!asset) {\n missing.add(\"fill:video-not-decoded\");\n return null;\n }\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: [r[0], r[3], r[1], r[4], r[2], r[5]], tile };\n }\n case \"canvas3D\": {\n if (!assets) return null;\n const w = bounds[2] - bounds[0], h = bounds[3] - bounds[1];\n if (!(w > 0) || !(h > 0)) return null;\n // canvas3d.ts: min(maxPixelRatio ?? 2, max(deviceScale, 1)), stretched over the box.\n const ratio = Math.min(any.maxPixelRatio ?? 2, Math.max(assets.deviceScale(), 1));\n const asset = assets.scene3d(any.scene, w, h, ratio);\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], w, h], fit: \"stretch\" };\n }\n case \"image\": {\n const asset = image?.(any.src);\n if (!asset) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n // makeImageShader: computeImageMatrix places it; tile repeats, a\n // covering fit clamps, anything that may leave a gap is decal.\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const m: Mat = [r[0], r[3], r[1], r[4], r[2], r[5]];\n if (assets?.imageEdge) {\n const scale = assets.deviceScale();\n assets.imageEdge(any.src, Math.max(asset.width * Math.hypot(m[0], m[1]), asset.height * Math.hypot(m[2], m[3])) * scale);\n }\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: m, tile };\n }\n case \"solid\":\n return { kind: \"solid\", color: [any.color[0], any.color[1], any.color[2], any.color[3]] };\n case \"linear-gradient\":\n return { kind: \"linear\", from: norm(any.start.x, any.start.y, bounds), to: norm(any.end.x, any.end.y, bounds), stops: stops(any.colors, any.stops) };\n case \"conic-gradient\": {\n // A sweep from startAngle over a full turn, clamped.\n const start = any.startAngle ?? 0;\n const even = any.stops.length === any.colors.length ? any.stops : [];\n return { kind: \"sweep\", center: norm(any.center.x, any.center.y, bounds), startAngle: start, endAngle: start + 360, stops: stops(any.colors, even) };\n }\n case \"radial-gradient\":\n return { kind: \"radial\", center: norm(any.center.x, any.center.y, bounds), radius: any.radius, stops: stops(any.colors, any.stops) };\n case \"shader\": {\n // Nothing to draw yet (a host's picker before a shader is chosen).\n if (!any.source?.trim()) return null;\n // WGSL only: a stored SkSL fill draws nothing (reported as fill:shader-sksl).\n if (!isWgslShader(any)) break;\n assets?.checkShader?.(any);\n const texture = any.textures?.[0] ? image?.(any.textures[0].src) : undefined;\n if (any.textures?.[0] && !texture) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n return {\n kind: \"shader\", source: any.source, uniforms: any.uniforms ?? {}, time: assets?.time?.() ?? 0,\n box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], ...(texture ? { texture } : {}),\n };\n }\n case \"dotGrid\": case \"grid\": case \"stripe\": case \"noise\": case \"fractalNoise\":\n return { kind: \"procedural\", fill: any, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]] };\n }\n missing.add(any.type === \"shader\" ? \"fill:shader-sksl\" : `fill:${any.type}`);\n return null;\n}\n\n/** A drop shadow with one solid fill, as the doc's leaf shadows carry it. */\nexport function shadowOf(s: ShadowResolved, missing: Set<string>): Shadow | null {\n const f = s.fill[0] as any;\n const c = f?.type === \"solid\" ? f.color : [0, 0, 0, 1];\n // sigma = blur / 2; offset in y-up author space.\n return { dx: s.offset?.x ?? 0, dy: -(s.offset?.y ?? 0), sigma: s.blur / 2, spread: s.spread, color: [c[0], c[1], c[2], c[3] * (f?.opacity ?? 1)] };\n}\n","// A WGSL shader's uniforms are bound to its `struct Params` by name, so a\n// value naming no member is dropped and a member with no value reads 0: a\n// renamed member silently zeroes. Both are reported as `params` issues.\n\nimport { normalizeUniforms, shaderContractOf, WGSL_CONTRACT, type RenderIssue } from \"@motionscript/core\";\nimport { type ShaderScope, validateShader } from \"../user-shaders\";\n\n/** Member names per scope and source (null: the source does not compile, reported elsewhere). */\nconst members = new Map<string, readonly string[] | null>();\nconst MAX_SOURCES = 64;\n\nfunction membersOf(scope: ShaderScope, source: string): readonly string[] | null {\n const key = `${scope}\\n${source}`;\n let known = members.get(key);\n if (known === undefined) {\n try {\n const report = validateShader(scope, source);\n known = report.ok ? report.fields.map((f) => f.name) : null;\n } catch {\n // The WASM is not loaded.\n return null;\n }\n if (members.size >= MAX_SOURCES) members.delete(members.keys().next().value!);\n } else {\n members.delete(key);\n }\n members.set(key, known);\n return known;\n}\n\n/** What a WGSL fill or effect's uniforms and its `Params` disagree on, and a contract newer than this renderer's. */\nexport function shaderParamIssues(scope: ShaderScope, shader: { source?: string; language?: string; contract?: number; uniforms?: unknown }): RenderIssue[] {\n const source = shader.source ?? \"\";\n const contract = shaderContractOf(shader);\n if (!source.trim() || contract === undefined) return [];\n const out: RenderIssue[] = [];\n if (contract > WGSL_CONTRACT) {\n out.push({\n kind: \"shader\", feature: `${scope}:contract-${contract}`,\n message: `A WGSL shader ${scope} is written for shader contract ${contract}; this renderer implements ${WGSL_CONTRACT}, so it may not draw as intended.`,\n });\n }\n const names = membersOf(scope, source);\n if (!names) return out;\n const values = normalizeUniforms((shader.uniforms ?? {}) as Parameters<typeof normalizeUniforms>[0]);\n for (const name of Object.keys(values)) {\n if (!names.includes(name)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope} is given \"${name}\", which names no member of its struct Params, so the value is ignored.` });\n }\n }\n for (const name of names) {\n if (!(name in values)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope}'s Params.${name} is given no value, so it reads 0.` });\n }\n }\n return out;\n}\n","// Contour measurement on PathData, and what is built with it: trimPath keeps\n// the [start, end] fraction of the contours' total length, each cut exactly\n// (curves split at the parameter whose arc length matches; a segment is never\n// closed), and dash fitting cuts a pattern's \"on\" runs out of them.\n\nimport { pathOps } from \"@motionscript/core\";\nimport { type PathData, PathBuilder, VERB } from \"../doc\";\n\ntype Seg = { kind: \"line\" | \"quad\" | \"cubic\"; p: number[]; len: number; table: number[] };\n\nconst SAMPLES = 32;\n\nfunction at(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[0] + (p[2] - p[0]) * t, p[1] + (p[3] - p[1]) * t];\n if (s.kind === \"quad\") return [u * u * p[0] + 2 * u * t * p[2] + t * t * p[4], u * u * p[1] + 2 * u * t * p[3] + t * t * p[5]];\n return [\n u * u * u * p[0] + 3 * u * u * t * p[2] + 3 * u * t * t * p[4] + t * t * t * p[6],\n u * u * u * p[1] + 3 * u * u * t * p[3] + 3 * u * t * t * p[5] + t * t * t * p[7],\n ];\n}\n\nfunction measure(kind: Seg[\"kind\"], p: number[]): Seg {\n const table = [0];\n const n = kind === \"line\" ? 1 : SAMPLES;\n const s: Seg = { kind, p, len: 0, table };\n let prev = at(s, 0);\n for (let i = 1; i <= n; i++) {\n const q = at(s, i / n);\n table.push(table[i - 1] + Math.hypot(q[0] - prev[0], q[1] - prev[1]));\n prev = q;\n }\n s.len = table[n];\n return s;\n}\n\n/** Parameter at arc length d along the segment. */\nfunction tAt(s: Seg, d: number): number {\n const n = s.table.length - 1;\n if (d <= 0) return 0;\n if (d >= s.len) return 1;\n let i = 1;\n while (s.table[i] < d) i++;\n const a = s.table[i - 1], b = s.table[i];\n return (i - 1 + (b > a ? (d - a) / (b - a) : 0)) / n;\n}\n\n/** The part of a segment between parameters t0 < t1, as control points. */\nfunction slice(s: Seg, t0: number, t1: number): number[] {\n const p = s.p;\n if (s.kind === \"line\") return [...at(s, t0), ...at(s, t1)];\n // de Casteljau split at t1, then the left part at t0 / t1.\n const split = (pts: number[], t: number): [number[], number[]] => {\n const k = pts.length / 2;\n const rows: number[][] = [pts];\n for (let r = 1; r < k; r++) {\n const prev = rows[r - 1], row: number[] = [];\n for (let j = 0; j < prev.length - 2; j += 2) row.push(prev[j] + (prev[j + 2] - prev[j]) * t, prev[j + 1] + (prev[j + 3] - prev[j + 1]) * t);\n rows.push(row);\n }\n const left: number[] = [], right: number[] = [];\n for (let r = 0; r < k; r++) left.push(rows[r][0], rows[r][1]);\n for (let r = k - 1; r >= 0; r--) right.push(rows[r][rows[r].length - 2], rows[r][rows[r].length - 1]);\n return [left, right];\n };\n const [left] = t1 < 1 ? split(p, t1) : [p];\n if (t0 <= 0) return left;\n return split(left, t0 / t1)[1];\n}\n\nfunction contours(path: PathData): { segs: Seg[]; closed: boolean }[] {\n const out: { segs: Seg[]; closed: boolean }[] = [];\n let cur: { segs: Seg[]; closed: boolean } | null = null;\n let x = 0, y = 0, sx = 0, sy = 0, k = 0;\n const pts = path.points;\n for (const v of path.verbs) {\n if (v === VERB.move) {\n x = sx = pts[k++]; y = sy = pts[k++];\n cur = { segs: [], closed: false };\n out.push(cur);\n } else if (v === VERB.line) {\n const nx = pts[k++], ny = pts[k++];\n cur!.segs.push(measure(\"line\", [x, y, nx, ny])); x = nx; y = ny;\n } else if (v === VERB.quad) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3]]; k += 4;\n cur!.segs.push(measure(\"quad\", p)); x = p[4]; y = p[5];\n } else if (v === VERB.cubic) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3], pts[k + 4], pts[k + 5]]; k += 6;\n cur!.segs.push(measure(\"cubic\", p)); x = p[6]; y = p[7];\n } else if (v === VERB.close) {\n if (cur) {\n if (x !== sx || y !== sy) cur.segs.push(measure(\"line\", [x, y, sx, sy]));\n cur.closed = true;\n }\n x = sx; y = sy;\n }\n }\n return out.filter((c) => c.segs.length > 0);\n}\n\n/** The path's signed area over its control polygons (> 0: clockwise, y down). */\nexport function signedArea(path: PathData): number {\n let area = 0, k = 0, sx = 0, sy = 0, px = 0, py = 0;\n const pts = path.points;\n const to = (x: number, y: number) => {\n area += px * y - x * py;\n px = x; py = y;\n };\n for (const v of path.verbs) {\n if (v === VERB.move) {\n to(sx, sy);\n sx = px = pts[k++]; sy = py = pts[k++];\n } else if (v !== VERB.close) {\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n for (let i = 0; i < n; i++, k += 2) to(pts[k], pts[k + 1]);\n }\n }\n to(sx, sy);\n return area / 2;\n}\n\n/** The path traced backwards, contour by contour. */\nexport function reversePath(path: PathData): PathData {\n const b = new PathBuilder();\n const pts = path.points;\n let k = 0, i = 0;\n const verbs = path.verbs;\n while (i < verbs.length) {\n if (verbs[i] !== VERB.move) { i++; continue; }\n // One contour: its segments as [verb, points from its start].\n let x = pts[k++], y = pts[k++];\n const segs: { v: number; p: number[] }[] = [];\n let closed = false;\n for (i++; i < verbs.length && verbs[i] !== VERB.move; i++) {\n const v = verbs[i];\n if (v === VERB.close) { closed = true; continue; }\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n const p = [x, y];\n for (let j = 0; j < n; j++, k += 2) p.push(pts[k], pts[k + 1]);\n x = p[p.length - 2]; y = p[p.length - 1];\n segs.push({ v, p });\n }\n b.moveTo(x, y);\n for (let s = segs.length - 1; s >= 0; s--) {\n const { v, p } = segs[s];\n if (v === VERB.line) b.lineTo(p[0], p[1]);\n else if (v === VERB.quad) b.quadTo(p[2], p[3], p[0], p[1]);\n else b.cubicTo(p[4], p[5], p[2], p[3], p[0], p[1]);\n }\n if (closed) b.close();\n }\n return b.build();\n}\n\n/** Every contour closed (the shape has an interior to align a stroke against). */\nexport function isClosed(path: PathData): boolean {\n const cs = contours(path);\n return cs.length > 0 && cs.every((c) => c.closed);\n}\n\n/** getSegment(a, z, startWithMoveTo = true) of one contour, appended to `b`; false when nothing was. */\nfunction segment(segs: Seg[], a: number, z: number, b: PathBuilder): boolean {\n let pos = 0, moved = false;\n for (const s of segs) {\n const s0 = pos, s1 = pos + s.len;\n pos = s1;\n if (s1 <= a || s0 >= z) continue;\n const t0 = tAt(s, a - s0), t1 = tAt(s, z - s0);\n const q = slice(s, t0, t1);\n if (!moved) { b.moveTo(q[0], q[1]); moved = true; }\n if (s.kind === \"line\") b.lineTo(q[2], q[3]);\n else if (s.kind === \"quad\") b.quadTo(q[2], q[3], q[4], q[5]);\n else b.cubicTo(q[2], q[3], q[4], q[5], q[6], q[7]);\n }\n return moved;\n}\n\nexport function trimPath(path: PathData, start: number, end: number): PathData {\n const cs = contours(path);\n const total = cs.reduce((n, c) => n + c.segs.reduce((m, s) => m + s.len, 0), 0);\n if (total <= 0) return path;\n const d0 = start * total, d1 = end * total;\n const b = new PathBuilder();\n let acc = 0;\n let any = false;\n for (const c of cs) {\n const len = c.segs.reduce((m, s) => m + s.len, 0);\n const cs0 = acc, ce = acc + len;\n acc = ce;\n if (!(ce > d0 && cs0 < d1)) continue;\n any = segment(c.segs, Math.max(0, d0 - cs0), Math.min(len, d1 - cs0), b) || any;\n }\n return any ? b.build() : { verbs: new Uint8Array(0), points: new Float32Array(0) };\n}\n\n/** Position and unit tangent: x, y, tx, ty. */\nexport type PosTan = [number, number, number, number];\n\n/** One contour, measured. */\nexport interface Contour {\n length: number;\n closed: boolean;\n posTan(d: number): PosTan;\n /** The stretch between two arc lengths, appended to `b` as an open contour. */\n segment(from: number, to: number, b: PathBuilder): boolean;\n}\n\nfunction derivative(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[2] - p[0], p[3] - p[1]];\n if (s.kind === \"quad\") return [2 * (u * (p[2] - p[0]) + t * (p[4] - p[2])), 2 * (u * (p[3] - p[1]) + t * (p[5] - p[3]))];\n return [\n 3 * (u * u * (p[2] - p[0]) + 2 * u * t * (p[4] - p[2]) + t * t * (p[6] - p[4])),\n 3 * (u * u * (p[3] - p[1]) + 2 * u * t * (p[5] - p[3]) + t * t * (p[7] - p[5])),\n ];\n}\n\n/** The path's contours of non-zero length (ContourMeasureIter, forceClosed = false). */\nexport function measureContours(path: PathData): Contour[] {\n return contours(path).map((c): Contour => {\n const segs = c.segs.filter((s) => s.len > 0);\n const length = segs.reduce((m, s) => m + s.len, 0);\n return {\n length,\n closed: c.closed,\n posTan(d: number): PosTan {\n d = Math.max(0, Math.min(length, d));\n let pos = 0, s = segs[segs.length - 1];\n for (const seg of segs) {\n if (pos + seg.len >= d) { s = seg; break; }\n pos += seg.len;\n }\n const t = tAt(s, d - pos);\n const [x, y] = at(s, t);\n let [tx, ty] = derivative(s, t);\n // A control point on the end leaves no derivative there: step inward.\n if (Math.hypot(tx, ty) < 1e-9) {\n const a = at(s, Math.max(0, t - 1e-3)), b = at(s, Math.min(1, t + 1e-3));\n tx = b[0] - a[0]; ty = b[1] - a[1];\n }\n const n = Math.hypot(tx, ty) || 1;\n return [x, y, tx / n, ty / n];\n },\n segment: (from, to, b) => segment(segs, from, to, b),\n };\n }).filter((c) => c.length > 0);\n}\n\n/** The shortest dash worth cutting from its contour; anything shorter is a dot. */\nconst DOT_LENGTH = 1e-3;\n\n/** One stretch of the dash pattern for the whole path (core's dashScale). */\nexport function dashFit(cs: Contour[], dash: number[]): { scale: number; total: number; open: boolean } | null {\n let total = 0, open = false;\n for (const c of cs) {\n total += c.length;\n if (!c.closed) open = true;\n }\n const scale = pathOps.dashScale(dash, { length: total, closed: true }, total);\n return scale === null ? null : { scale, total, open };\n}\n\n/** The dash pattern's stretch for one contour: closed ones share the path's, open ones fit their own. */\nexport function contourDashScale(c: Contour, dash: number[], fit: { scale: number; total: number }): number {\n return c.closed ? fit.scale : pathOps.dashScale(dash, { length: c.length, closed: false }, fit.total) ?? fit.scale;\n}\n\n/** The dash pattern's \"on\" runs along a contour, [from, to] pairs (StrokeHandler.buildDashedPath). */\nexport function dashRuns(c: Contour, dash: number[], offset: number, scale: number): [number, number][] {\n const scaled = dash.map((d) => d * scale);\n const cycle = scaled.reduce((a, b) => a + b, 0);\n const runs: [number, number][] = [];\n if (!(cycle > 0)) return runs;\n const startOffset = (((offset * scale) % cycle) + cycle) % cycle;\n let i = 0, segStart = 0;\n while (segStart + scaled[i] <= startOffset && i < scaled.length) {\n if (scaled[i] <= DOT_LENGTH && Math.abs(startOffset - segStart) < 1e-6) break;\n segStart += scaled[i];\n i = (i + 1) % scaled.length;\n if (i === 0) break;\n }\n let remaining = scaled[i] - (startOffset - segStart);\n let drawing = i % 2 === 0;\n let t = 0;\n while (t < c.length - 1e-6) {\n const len = Math.min(remaining, c.length - t);\n if (drawing) runs.push([t, t + len]);\n t += len;\n remaining -= len;\n if (remaining <= 1e-6) {\n i = (i + 1) % scaled.length;\n remaining = scaled[i];\n drawing = !drawing;\n }\n }\n // An open contour fit to end on a dot has it exactly at its end.\n if (drawing && remaining <= 1e-6 && !c.closed) runs.push([c.length, c.length]);\n return runs;\n}\n\n/** The dashes as open contours; a dash too short to cut is a dot when `dots` (the dash cap has a shape). */\nexport function dashedPath(cs: Contour[], dash: number[], offset: number, dots: boolean, fit: { scale: number; total: number }): PathData | null {\n const b = new PathBuilder();\n let any = false;\n for (const c of cs) {\n for (const [from, to] of dashRuns(c, dash, offset, contourDashScale(c, dash, fit))) {\n if (to - from > DOT_LENGTH) any = c.segment(from, to, b) || any;\n else if (dots) {\n const [x, y, tx, ty] = c.posTan(from);\n const along = from > c.length - DOT_LENGTH ? -DOT_LENGTH : DOT_LENGTH;\n b.moveTo(x, y).lineTo(x + tx * along, y + ty * along);\n any = true;\n }\n }\n }\n return any ? b.build() : null;\n}\n","// A shape's outline as SVG path strings: its state resolved once, its geometry\n// computed lazily. Shapes bake x/y into the SVG; rotation, scale, trim and the\n// y flip are left to adapter/shapes.ts.\n\nimport type { CornerStyle } from \"@motionscript/core\";\n\nexport interface Bounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport abstract class ShapeGeometry<S extends { start: number; end: number }, G> {\n readonly fullState: S;\n private geo: G | undefined;\n\n constructor(state: Partial<S>) {\n this.fullState = this.resolveState(state);\n }\n\n protected abstract resolveState(state: Partial<S>): S;\n protected abstract computeGeometry(): G;\n abstract buildSVGPath(geo: G): string;\n\n get geometry(): G {\n return (this.geo ??= this.computeGeometry());\n }\n\n needsTrim(): boolean {\n return this.fullState.start !== 0 || this.fullState.end !== 1;\n }\n\n getTrimRange(): { start: number; end: number } {\n return { start: this.fullState.start, end: this.fullState.end };\n }\n\n /**\n * The closed region an aligned (inside/outside) stroke clips against when\n * the stroked outline is open, as an arc's wedge is; null when the shape\n * defines none of its own.\n */\n buildSVGAlignInterior(_geo: G): string | null {\n return null;\n }\n\n /** Whether the silhouette resizes cleanly for a shadow's spread (rects and ellipses). */\n supportsSpread(): boolean {\n return false;\n }\n\n /** The silhouette grown (positive) or shrunk by `spread` px; null where it collapses or isn't supported. */\n buildSpreadSVGPath(_geo: G, _spread: number): string | null {\n return null;\n }\n\n computeBounds(_geo: G): Bounds | undefined {\n return undefined;\n }\n}\n\n/** Per-corner geometry inputs shared by every shape that rounds its corners. */\nexport interface CornerSpec {\n /** Corner radius in pixels (already clamped/scaled by the caller). */\n radius: number;\n style: CornerStyle;\n}\n\n/**\n * How far from a right-angle corner's apex, along each edge, its curve begins:\n * the radius, for an arc and a chamfer alike.\n */\nexport function cornerReach(c: CornerSpec): number {\n return c.radius > 0 ? c.radius : 0;\n}\n\n/**\n * SVG commands for a right-angle (rect) corner, the pen already at its entry\n * point `apex + d0·radius`; they leave it at `apex + d1·radius`. `d0` points\n * from the apex back along the incoming edge, `d1` along the outgoing one.\n * Empty for a zero radius (the edge runs on to a sharp apex).\n */\nexport function cornerCommands(ax: number, ay: number, d0x: number, d0y: number, d1x: number, d1y: number, c: CornerSpec): string {\n if (c.radius <= 0) return \"\";\n return cornerCommandsFromCut(ax, ay, d0x, d0y, d1x, d1y, c.radius, c.radius, c.style);\n}\n\n/**\n * SVG commands for a corner of any angle, given the cut-back distance `cut`\n * along each edge and the arc `radius` (they differ off a right angle). The pen\n * is at `apex + d0·cut`; the commands leave it at `apex + d1·cut`.\n */\nexport function cornerCommandsFromCut(\n ax: number, ay: number,\n d0x: number, d0y: number,\n d1x: number, d1y: number,\n cut: number, radius: number,\n style: CornerStyle,\n): string {\n const ex = ax + d1x * cut, ey = ay + d1y * cut;\n if (style === \"angled\") return `L ${ex} ${ey}`;\n // The turn direction picks the sweep flag: a clockwise turn is sweep 1.\n const cross = d0x * d1y - d0y * d1x;\n const sweep = cross < 0 ? 1 : 0;\n return `A ${radius} ${radius} 0 0 ${sweep} ${ex} ${ey}`;\n}\n","import { type EllipseState, withEllipseDescriptor } from \"@motionscript/core\";\nimport { type Bounds, ShapeGeometry } from \"./base\";\n\ntype EllipseGeo = {\n cx: number; cy: number;\n halfWidth: number; halfHeight: number;\n sweep: number; isFullShape: boolean;\n startAngle: number;\n /** Inner radius as a fraction (0..1) of the outer. */\n ratio: number;\n};\n\nconst TO_RAD = Math.PI / 180;\n\n/**\n * An ellipse, optionally a partial arc (`sweep` < 360°) and/or with a hole\n * (`ratio` > 0): 0 is a disc or pie wedge, 0.5 a donut or annular sector, and 1\n * leaves nothing to fill, the stroke riding the bare outline or arc.\n */\nexport class EllipseGeometry extends ShapeGeometry<EllipseState, EllipseGeo> {\n protected resolveState(state: Partial<EllipseState>): EllipseState {\n return withEllipseDescriptor(state);\n }\n\n protected computeGeometry(): EllipseGeo {\n const s = this.fullState;\n const sweep = s.sweep ?? 360;\n return {\n cx: s.x, cy: s.y,\n halfWidth: s.width / 2, halfHeight: s.height / 2,\n sweep,\n isFullShape: Math.abs(sweep) >= 360,\n startAngle: s.startAngle ?? 0,\n ratio: Math.max(0, Math.min(1, s.ratio ?? 0)),\n };\n }\n\n // Empty at ratio 1 rather than solid again, so a ratio tween stays\n // continuous at that end; its stroke is `ringOutline`.\n buildSVGPath(geo: EllipseGeo): string {\n const { cx, cy, halfWidth, halfHeight, ratio } = geo;\n if (ratio >= 1) return \"\";\n if (!geo.isFullShape) return ratio <= 0 ? wedge(geo) : annularSector(geo);\n const outer = fullEllipse(cx, cy, halfWidth, halfHeight, 0);\n if (ratio <= 0) return outer;\n // Wound the other way, so the fill leaves a hole.\n return `${outer} ${fullEllipse(cx, cy, halfWidth * ratio, halfHeight * ratio, 1)}`;\n }\n\n /** What a ratio-1 ellipse strokes, once: the bare outline or open arc. Null below ratio 1. */\n ringOutline(geo: EllipseGeo): string | null {\n if (geo.ratio < 1) return null;\n return geo.isFullShape ? fullEllipse(geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0) : openArc(geo);\n }\n\n // At ratio 1 the region is empty, so the band aligns against the whole\n // ellipse or wedge instead.\n override buildSVGAlignInterior(geo: EllipseGeo): string | null {\n if (geo.isFullShape) return geo.ratio >= 1 ? fullEllipse(geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0) : null;\n return geo.ratio >= 1 || geo.ratio <= 0 ? wedge(geo) : annularSector(geo);\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each half-axis moves by `spread`; only a full ellipse with something to\n // fill bounds a region to grow.\n override buildSpreadSVGPath(geo: EllipseGeo, spread: number): string | null {\n if (!geo.isFullShape || geo.ratio >= 1) return null;\n const halfWidth = geo.halfWidth + spread, halfHeight = geo.halfHeight + spread;\n if (halfWidth <= 0 || halfHeight <= 0) return null;\n return fullEllipse(geo.cx, geo.cy, halfWidth, halfHeight, 0);\n }\n\n override computeBounds(geo: EllipseGeo): Bounds {\n const { cx, cy, halfWidth, halfHeight } = geo;\n return { left: cx - halfWidth, top: cy - halfHeight, right: cx + halfWidth, bottom: cy + halfHeight };\n }\n}\n\nfunction fullEllipse(cx: number, cy: number, rx: number, ry: number, sweepFlag: 0 | 1): string {\n const left = cx - rx, right = cx + rx;\n return `M ${left} ${cy} A ${rx} ${ry} 0 1 ${sweepFlag} ${right} ${cy} A ${rx} ${ry} 0 1 ${sweepFlag} ${left} ${cy} Z`;\n}\n\n/** A partial sweep's outer curve: its start point, and the `A` that runs it round. */\nfunction outerArc(geo: EllipseGeo): { start: string; arc: string } {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep } = geo;\n const endAngle = startAngle + sweep;\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const sweepFlag = sweep > 0 ? 1 : 0;\n const sx = cx + halfWidth * Math.cos(startAngle * TO_RAD), sy = cy + halfHeight * Math.sin(startAngle * TO_RAD);\n const ex = cx + halfWidth * Math.cos(endAngle * TO_RAD), ey = cy + halfHeight * Math.sin(endAngle * TO_RAD);\n return { start: `${sx} ${sy}`, arc: `A ${halfWidth} ${halfHeight} 0 ${largeArc} ${sweepFlag} ${ex} ${ey}` };\n}\n\nfunction openArc(geo: EllipseGeo): string {\n const { start, arc } = outerArc(geo);\n return `M ${start} ${arc}`;\n}\n\nfunction wedge(geo: EllipseGeo): string {\n const { start, arc } = outerArc(geo);\n return `M ${geo.cx} ${geo.cy} L ${start} ${arc} Z`;\n}\n\n/** Out along the outer arc, in to the inner edge, back along the inner arc, closed along the start radius. */\nfunction annularSector(geo: EllipseGeo): string {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep, ratio } = geo;\n const { start, arc } = outerArc(geo);\n const endAngle = startAngle + sweep;\n const innerW = halfWidth * ratio, innerH = halfHeight * ratio;\n const isx = cx + innerW * Math.cos(startAngle * TO_RAD), isy = cy + innerH * Math.sin(startAngle * TO_RAD);\n const iex = cx + innerW * Math.cos(endAngle * TO_RAD), iey = cy + innerH * Math.sin(endAngle * TO_RAD);\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const innerSweepFlag = sweep > 0 ? 0 : 1;\n return `M ${start} ${arc} L ${iex} ${iey} A ${innerW} ${innerH} 0 ${largeArc} ${innerSweepFlag} ${isx} ${isy} Z`;\n}\n","import { type LineState, type Vector2, withLineDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\ntype LineGeo = { points: Vector2[]; radius: number; closed: boolean };\n\nfunction buildLineSvg(points: Vector2[], radius: number, closed: boolean): string {\n if (points.length === 0) return \"M 0 0\";\n if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;\n const r = Math.max(0, radius);\n const parts: string[] = [];\n const count = points.length;\n const dir = (a: Vector2, b: Vector2) => {\n const dx = b.x - a.x, dy = b.y - a.y;\n const len = Math.sqrt(dx * dx + dy * dy);\n return len > 0 ? { dx: dx / len, dy: dy / len, len } : { dx: 0, dy: 0, len: 0 };\n };\n if (r === 0) {\n parts.push(`M ${points[0].x} ${points[0].y}`);\n for (let i = 1; i < count; i++) parts.push(`L ${points[i].x} ${points[i].y}`);\n } else {\n const endIdx = closed ? count : count - 1;\n for (let i = 0; i <= endIdx; i++) {\n const prev = points[(i - 1 + count) % count];\n const curr = points[i % count];\n const next = points[(i + 1) % count];\n if (!closed && i === 0) {\n parts.push(`M ${curr.x} ${curr.y}`);\n continue;\n }\n if (!closed && i === count - 1) {\n parts.push(`L ${curr.x} ${curr.y}`);\n continue;\n }\n const dIn = dir(prev, curr), dOut = dir(curr, next);\n const cutIn = Math.min(r, dIn.len / 2), cutOut = Math.min(r, dOut.len / 2);\n const inX = curr.x - dIn.dx * cutIn, inY = curr.y - dIn.dy * cutIn;\n const outX = curr.x + dOut.dx * cutOut, outY = curr.y + dOut.dy * cutOut;\n parts.push(`${i === 0 && closed ? \"M\" : \"L\"} ${inX} ${inY}`);\n parts.push(`Q ${curr.x} ${curr.y} ${outX} ${outY}`);\n }\n }\n if (closed) parts.push(\"Z\");\n return parts.join(\" \");\n}\n\n/**\n * A polyline (open or closed) through `points`, each corner optionally rounded\n * by cutting back along both edges and joining with a quadratic (the cut\n * clamped to half the edge, so it never overshoots).\n */\nexport class LineGeometry extends ShapeGeometry<LineState, LineGeo> {\n protected resolveState(state: Partial<LineState>): LineState {\n return withLineDescriptor(state);\n }\n\n protected computeGeometry(): LineGeo {\n const { points, radius, closed } = this.fullState;\n return { points, radius, closed };\n }\n\n buildSVGPath(geo: LineGeo): string {\n return buildLineSvg(geo.points, geo.radius, geo.closed);\n }\n}\n","import { type PathData, type PathState, toPathString, withPathDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\n/** An arbitrary SVG path; adapter/shapes.ts centres it and strokes the contour it fills, `Z` included. */\nexport class PathGeometry extends ShapeGeometry<PathState, { data: PathData }> {\n protected resolveState(state: Partial<PathState>): PathState {\n return withPathDescriptor(state);\n }\n\n protected computeGeometry(): { data: PathData } {\n return { data: this.fullState.data };\n }\n\n buildSVGPath(geo: { data: PathData }): string {\n return toPathString(geo.data);\n }\n}\n","import { type CornerStyle, type PolygonState, type PolygramState, withPolygonDescriptor, withPolygramDescriptor } from \"@motionscript/core\";\nimport { type Bounds, cornerCommandsFromCut, ShapeGeometry } from \"./base\";\n\ntype PolygonGeo = {\n cx: number; cy: number;\n rx: number; ry: number;\n sides: number;\n /** Polygram only: the inner vertices' radius, as a fraction of the outer. */\n ratio: number;\n cornerRadius: number;\n cornerStyle: CornerStyle;\n};\n\n/**\n * Vertices on an ellipse from the top, clockwise. `rounded(i)` says which\n * vertices `cornerRadius` rounds; each is cut back along both edges, clamped\n * so neighbouring corners never overrun half the edge they share.\n */\nfunction buildSvg(verts: [number, number][], g: PolygonGeo, rounded: (i: number) => boolean): string {\n if (g.cornerRadius <= 0) {\n const parts = verts.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"} ${x} ${y}`);\n parts.push(\"Z\");\n return parts.join(\" \");\n }\n const n = verts.length;\n const parts: string[] = [];\n for (let i = 0; i < n; i++) {\n const curr = verts[i];\n if (!rounded(i)) {\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0]} ${curr[1]}`);\n continue;\n }\n const prev = verts[(i - 1 + n) % n], next = verts[(i + 1) % n];\n const a0x = prev[0] - curr[0], a0y = prev[1] - curr[1];\n const len0 = Math.hypot(a0x, a0y);\n const u0x = a0x / len0, u0y = a0y / len0;\n const a1x = next[0] - curr[0], a1y = next[1] - curr[1];\n const len1 = Math.hypot(a1x, a1y);\n const u1x = a1x / len1, u1y = a1y / len1;\n const cosAngle = Math.max(-1, Math.min(1, u0x * u1x + u0y * u1y));\n const tanHalf = Math.tan(Math.acos(cosAngle) / 2);\n const t = Math.min(g.cornerRadius / tanHalf, Math.min(len0, len1) / 2);\n const r = t * tanHalf;\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0] + u0x * t} ${curr[1] + u0y * t}`);\n parts.push(cornerCommandsFromCut(curr[0], curr[1], u0x, u0y, u1x, u1y, t, r, g.cornerStyle));\n }\n parts.push(\"Z\");\n return parts.join(\" \");\n}\n\nconst bounds = (g: PolygonGeo): Bounds => ({ left: g.cx - g.rx, top: g.cy - g.ry, right: g.cx + g.rx, bottom: g.cy + g.ry });\n\n/** A regular polygon inscribed in the box's ellipse, starting at the top vertex. */\nexport class PolygonGeometry extends ShapeGeometry<PolygonState, PolygonGeo> {\n protected resolveState(state: Partial<PolygonState>): PolygonState {\n return withPolygonDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: 1,\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = (2 * Math.PI) / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides; i++) {\n const a = -Math.PI / 2 + i * step;\n verts.push([g.cx + g.rx * Math.cos(a), g.cy + g.ry * Math.sin(a)]);\n }\n return buildSvg(verts, g, () => true);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n\n/** A star: outer vertices alternating with inner ones at `ratio`; only the outer (convex) ones are rounded. */\nexport class PolygramGeometry extends ShapeGeometry<PolygramState, PolygonGeo> {\n protected resolveState(state: Partial<PolygramState>): PolygramState {\n return withPolygramDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: Math.max(0, Math.min(1, s.ratio)),\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = Math.PI / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides * 2; i++) {\n const a = -Math.PI / 2 + i * step;\n const r = i % 2 === 0 ? 1 : g.ratio;\n verts.push([g.cx + g.rx * r * Math.cos(a), g.cy + g.ry * r * Math.sin(a)]);\n }\n return buildSvg(verts, g, (i) => i % 2 === 0);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n","import { type CornerRadiusResolved, type CornerStyleResolved, type RectState, cornerRadiusOps, cornerStyleOps, withRectDescriptor } from \"@motionscript/core\";\nimport { type Bounds, cornerCommands, cornerReach, type CornerSpec, ShapeGeometry } from \"./base\";\n\ntype RectGeo = {\n left: number; top: number; right: number; bottom: number;\n tl: CornerSpec; tr: CornerSpec; br: CornerSpec; bl: CornerSpec;\n isZero: boolean;\n};\n\n/** The outline clockwise, each corner its own arc or chamfer `radius` px from the apex. */\nfunction rectToSvg(l: number, t: number, r: number, b: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): string {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n return [\n `M ${l + rTL} ${t}`,\n `L ${r - rTR} ${t}`,\n cornerCommands(r, t, -1, 0, 0, 1, tr),\n `L ${r} ${b - rBR}`,\n cornerCommands(r, b, 0, -1, -1, 0, br),\n `L ${l + rBL} ${b}`,\n cornerCommands(l, b, 1, 0, 0, -1, bl),\n `L ${l} ${t + rTL}`,\n cornerCommands(l, t, 0, 1, 1, 0, tl),\n \"Z\",\n ].filter(Boolean).join(\" \");\n}\n\nconst plainRect = (l: number, t: number, r: number, b: number) => `M ${l} ${t} L ${r} ${t} L ${r} ${b} L ${l} ${b} Z`;\n\n/** Per-corner radii and styles, scaled down together where adjacent corners would overrun a side. */\nexport class RectGeometry extends ShapeGeometry<RectState, RectGeo> {\n protected resolveState(state: Partial<RectState>): RectState {\n return withRectDescriptor(state);\n }\n\n protected computeGeometry(): RectGeo {\n const s = this.fullState;\n const left = s.x - s.width / 2, top = s.y - s.height / 2;\n const right = s.x + s.width / 2, bottom = s.y + s.height / 2;\n const radius: CornerRadiusResolved = cornerRadiusOps.resolve(s.cornerRadius);\n const style: CornerStyleResolved = cornerStyleOps.resolve(s.cornerStyle);\n const tl: CornerSpec = { radius: Math.max(0, radius.topLeft), style: style.topLeft };\n const tr: CornerSpec = { radius: Math.max(0, radius.topRight), style: style.topRight };\n const br: CornerSpec = { radius: Math.max(0, radius.bottomRight), style: style.bottomRight };\n const bl: CornerSpec = { radius: Math.max(0, radius.bottomLeft), style: style.bottomLeft };\n const scale = cornerScale(s.width, s.height, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n const isZero = cornerRadiusOps.isZero({ topLeft: tl.radius, topRight: tr.radius, bottomRight: br.radius, bottomLeft: bl.radius });\n return { left, top, right, bottom, tl, tr, br, bl, isZero };\n }\n\n buildSVGPath(geo: RectGeo): string {\n const { left, top, right, bottom, tl, tr, br, bl, isZero } = geo;\n return isZero ? plainRect(left, top, right, bottom) : rectToSvg(left, top, right, bottom, tl, tr, br, bl);\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each edge moves out by `spread` and each radius grows by it (clamped at\n // 0), as CSS box-shadow spread does, then re-clamped against the new size.\n override buildSpreadSVGPath(geo: RectGeo, spread: number): string | null {\n const left = geo.left - spread, top = geo.top - spread;\n const right = geo.right + spread, bottom = geo.bottom + spread;\n const w = right - left, h = bottom - top;\n if (w <= 0 || h <= 0) return null;\n const tl: CornerSpec = { ...geo.tl, radius: Math.max(0, geo.tl.radius + spread) };\n const tr: CornerSpec = { ...geo.tr, radius: Math.max(0, geo.tr.radius + spread) };\n const br: CornerSpec = { ...geo.br, radius: Math.max(0, geo.br.radius + spread) };\n const bl: CornerSpec = { ...geo.bl, radius: Math.max(0, geo.bl.radius + spread) };\n const scale = cornerScale(w, h, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n if (tl.radius === 0 && tr.radius === 0 && br.radius === 0 && bl.radius === 0) return plainRect(left, top, right, bottom);\n return rectToSvg(left, top, right, bottom, tl, tr, br, bl);\n }\n\n override computeBounds(geo: RectGeo): Bounds {\n return { left: geo.left, top: geo.top, right: geo.right, bottom: geo.bottom };\n }\n}\n\n/** The uniform scale that keeps every pair of adjacent radii within the side they share. */\nfunction cornerScale(w: number, h: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): number {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n const top = rTL + rTR > 0 ? Math.min(1, w / (rTL + rTR)) : 1;\n const bottom = rBL + rBR > 0 ? Math.min(1, w / (rBL + rBR)) : 1;\n const left = rTL + rBL > 0 ? Math.min(1, h / (rTL + rBL)) : 1;\n const right = rTR + rBR > 0 ? Math.min(1, h / (rTR + rBR)) : 1;\n return Math.min(top, bottom, left, right);\n}\n","// SVG path data (the strings ./geometry emits) into the doc's PathData. Arcs become cubics.\n\nimport { type PathData, PathBuilder } from \"../doc\";\n\n/** Endpoint-parameterised arc → cubic segments (SVG implementation notes F.6). */\nfunction arcTo(b: PathBuilder, x1: number, y1: number, rx: number, ry: number, phi: number, large: boolean, sweep: boolean, x2: number, y2: number) {\n if (rx === 0 || ry === 0) {\n b.lineTo(x2, y2);\n return;\n }\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const c = Math.cos(phi), s = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = c * dx + s * dy, yp = -s * dx + c * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) {\n rx *= Math.sqrt(lam);\n ry *= Math.sqrt(lam);\n }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let k = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) k = -k;\n const cxp = (k * rx * yp) / ry, cyp = (-k * ry * xp) / rx;\n const cx = c * cxp - s * cyp + (x1 + x2) / 2, cy = s * cxp + c * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n else if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.ceil(Math.abs(dt) / (Math.PI / 2) - 1e-9);\n const seg = dt / n;\n const alpha = (4 / 3) * Math.tan(seg / 4);\n const pt = (t: number) => [cx + rx * Math.cos(t) * c - ry * Math.sin(t) * s, cy + rx * Math.cos(t) * s + ry * Math.sin(t) * c];\n const dpt = (t: number) => [-rx * Math.sin(t) * c - ry * Math.cos(t) * s, -rx * Math.sin(t) * s + ry * Math.cos(t) * c];\n for (let i = 0; i < n; i++) {\n const ta = t1 + i * seg, tb = ta + seg;\n const [ax, ay] = pt(ta), [bx, by] = pt(tb), [dax, day] = dpt(ta), [dbx, dby] = dpt(tb);\n b.cubicTo(ax + alpha * dax, ay + alpha * day, bx - alpha * dbx, by - alpha * dby, i === n - 1 ? x2 : bx, i === n - 1 ? y2 : by);\n }\n}\n\nexport function parseSvgPath(d: string): PathData {\n const b = new PathBuilder();\n const tokens = d.match(/[a-zA-Z]|-?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/g) ?? [];\n let i = 0;\n let cmd = \"\";\n let x = 0, y = 0, sx = 0, sy = 0;\n let lcx = 0, lcy = 0, lqx = 0, lqy = 0;\n let prev = \"\";\n const num = () => Number(tokens[i++]);\n const more = () => i < tokens.length && !/[a-zA-Z]/.test(tokens[i]);\n while (i < tokens.length) {\n if (/[a-zA-Z]/.test(tokens[i])) cmd = tokens[i++];\n const rel = cmd === cmd.toLowerCase();\n const C = cmd.toUpperCase();\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case \"M\": {\n x = ox + num(); y = oy + num();\n b.moveTo(x, y);\n sx = x; sy = y;\n cmd = rel ? \"l\" : \"L\";\n break;\n }\n case \"L\": x = ox + num(); y = oy + num(); b.lineTo(x, y); break;\n case \"H\": x = (rel ? x : 0) + num(); b.lineTo(x, y); break;\n case \"V\": y = (rel ? y : 0) + num(); b.lineTo(x, y); break;\n case \"C\": {\n const x1 = ox + num(), y1 = oy + num(), x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"S\": {\n const r = prev === \"C\" || prev === \"S\";\n const x1 = r ? 2 * x - lcx : x, y1 = r ? 2 * y - lcy : y;\n const x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"Q\": {\n lqx = ox + num(); lqy = oy + num();\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"T\": {\n const r = prev === \"Q\" || prev === \"T\";\n lqx = r ? 2 * x - lqx : x; lqy = r ? 2 * y - lqy : y;\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"A\": {\n const rx = num(), ry = num(), phi = (num() * Math.PI) / 180, large = num() !== 0, sweep = num() !== 0;\n const nx = ox + num(), ny = oy + num();\n arcTo(b, x, y, rx, ry, phi, large, sweep, nx, ny);\n x = nx; y = ny;\n break;\n }\n case \"Z\": b.close(); x = sx; y = sy; break;\n default: i++;\n }\n prev = C;\n if (C === \"Z\" && more()) cmd = \"L\";\n }\n return b.build();\n}\n","// Shape ops to PathData: each shape's geometry (./geometry) emits an SVG path\n// string that is parsed here. Shapes are authored y-up, so their position (and\n// an ellipse's angles) flip into the node's y-down space first; a shape's own\n// rotation/scale then turns its outline about its (x, y) plus pivot.\n\nimport { resolvePivotPosition, resolveShapeAlignment, resolveShapePivot, stripShapeAlignmentKeys, toPathString, withTextDescriptor } from \"@motionscript/core\";\nimport type { ShapeGeometry } from \"./geometry/base\";\nimport { EllipseGeometry } from \"./geometry/ellipse\";\nimport { LineGeometry } from \"./geometry/line\";\nimport { PathGeometry } from \"./geometry/path\";\nimport { PolygonGeometry, PolygramGeometry } from \"./geometry/polygon\";\nimport { RectGeometry } from \"./geometry/rect\";\nimport { type Mat, type Member, type PathData, pathBounds, type TextSpec } from \"../doc\";\nimport { trimPath } from \"./path-measure\";\nimport { parseSvgPath } from \"./svg-path\";\n\ntype Any = Record<string, any>;\n\nfunction flipPositionY(state: Any, width: number, height: number): Any {\n const withPivotOffset = resolvePivotPosition(state as never, width, height);\n const { x, y, pivot } = resolveShapeAlignment(withPivotOffset as never, width, height);\n return { ...stripShapeAlignmentKeys(withPivotOffset as never), x, y: -y, pivot };\n}\n\nconst negY = (y: number | undefined) => (y == null ? y : -y);\n\nfunction transformPath(p: PathData, m: [number, number, number, number, number, number]): PathData {\n const pts = new Float32Array(p.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = p.points[i], y = p.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { ...p, points: pts as never };\n}\n\n/** Rotate/scale about the shape's (x, y) + pivot. */\nfunction shapeTransform(full: Any, p: PathData): PathData {\n const rotation = full.rotation ?? 0, scale = full.scale ?? 1;\n if (rotation === 0 && scale === 1) return p;\n const pivot = full.pivot ?? { x: 0, y: 0 };\n const px = (full.x ?? 0) + pivot.x * ((full.width ?? 0) / 2);\n const py = (full.y ?? 0) - pivot.y * ((full.height ?? 0) / 2);\n const r = (rotation * Math.PI) / 180, c = Math.cos(r) * scale, s = Math.sin(r) * scale;\n // Row-major [a b e; c d f] = column form [a, c, b, d, e, f].\n const a = c, b = -s, cc = s, d = c;\n return transformPath(p, [a, cc, b, d, px - a * px - b * py, py - cc * px - d * py]);\n}\n\n/** A text op as a doc text node: its spec and placement (shapes/text.ts). */\nexport interface TextOut {\n spec: TextSpec;\n transform: Mat;\n /** Box for gradient space: the declared box, or the measured block. */\n size: [number, number];\n}\n\nconst ALIGN: Record<string, TextSpec[\"align\"]> = { left: \"left\", right: \"right\", center: \"center\", justify: \"justify\", start: \"left\", end: \"right\" };\n\n/** buildText's placement: the block laid out about the origin, drawn at\n * (px, py) — shifted by the pivot when there is no declared box — and turned\n * and scaled about the pivot point. */\nexport function textOf(state: Any, measure: (spec: TextSpec) => [number, number]): TextOut | null {\n const f = withTextDescriptor(flipPositionY(state, state.width ?? 0, state.height ?? 0) as never) as Any;\n // Text on a path follows the path verbatim in the node's space (buildText\n // returns before placement: no y flip, no x/y).\n const onPath = f.path != null ? parseSvgPath(toPathString(f.path)) : undefined;\n const autofit = f.fontSize === \"autofit\";\n const spec: TextSpec = {\n runs: [{\n text: f.text, family: f.fontFamily, size: autofit ? 100 : f.fontSize, weight: f.fontWeight,\n italic: f.fontStyle === \"italic\" || f.fontStyle === \"oblique\", letterSpacing: f.letterSpacing,\n decoration: f.textDecoration === \"underline\" ? \"underline\" : f.textDecoration === \"line-through\" ? \"lineThrough\" : undefined,\n }],\n align: ALIGN[f.textAlign] ?? \"left\",\n verticalAlign: f.verticalAlign,\n wrap: f.wrap && f.width > 0,\n width: f.width,\n height: f.height,\n lineHeight: f.lineHeight,\n fontSize: autofit ? \"autofit\" : undefined,\n minFontSize: f.minFontSize,\n path: onPath,\n };\n if (onPath) return { spec, transform: [1, 0, 0, 1, 0, 0], size: [f.width, f.height] };\n const [lw, lh] = measure(spec);\n const pivot = resolveShapePivot(f.pivot) as { x: number; y: number };\n const declared = f.width > 0 && f.height > 0;\n const bw = declared ? f.width : lw, bh = declared ? f.height : lh;\n const px = !declared && pivot.x !== 0 ? f.x - pivot.x * (lw / 2) : f.x;\n const py = !declared && pivot.y !== 0 ? f.y + pivot.y * (lh / 2) : f.y;\n let m: Mat = [1, 0, 0, 1, px, py];\n if ((f.rotation ?? 0) !== 0 || (f.scale ?? 1) !== 1) {\n const cx = px + pivot.x * (bw / 2), cy = py - pivot.y * (bh / 2);\n const r = ((f.rotation ?? 0) * Math.PI) / 180, k = f.scale ?? 1;\n const c = Math.cos(r) * k, sn = Math.sin(r) * k;\n // T(c)·R·S·T(−c)·T(p)\n m = [c, sn, -sn, c, cx + c * (px - cx) - sn * (py - cy), cy + sn * (px - cx) + c * (py - cy)];\n }\n return { spec, transform: m, size: [bw, bh] };\n}\n\n/** What a shape op hands the paint ops. */\nexport interface ShapeOut {\n /** The filled outline (trimmed when the shape is). */\n fill: PathData | null;\n /** What strokes follow: the fill outline unless the shape overrides it. */\n stroke: PathData | null;\n /** The closed region aligned strokes clip against. */\n interior: PathData | null;\n /** The shape's own bounds (gradient space), l t r b. */\n bounds: [number, number, number, number] | null;\n /** Set for a text op: drawn as a text node, not a path. */\n text?: TextOut;\n /** Set for a boolean result or a cut: drawn as one compound node. */\n members?: Member[];\n /** The closed region an aligned stroke clips to when `interior` isn't it (a union's). */\n alignInterior?: Member[];\n /** Trimmed: its outline is a stretch of the shape's. */\n trimmed?: boolean;\n /** The silhouette grown (or shrunk) by a shadow's spread; unset where the\n * shape ignores spread (only rects and ellipses resize cleanly). */\n spread?: (spread: number) => PathData | null;\n}\n\nfunction parse(svg: string | null | undefined, full: Any): PathData | null {\n if (!svg) return null;\n return shapeTransform(full, parseSvgPath(svg));\n}\n\nfunction viaGeometry(Shape: new (state: Any) => ShapeGeometry<any, any>, state: Any): ShapeOut {\n const shape = new Shape(state);\n const full = shape.fullState as Any, geo = shape.geometry;\n const base = parse(shape.buildSVGPath(geo), full);\n const trims = shape.needsTrim();\n const range = trims ? shape.getTrimRange() : null;\n const fill = base && range ? trimPath(base, range.start, range.end) : base;\n let stroke = fill;\n // A ratio-1 ellipse fills nothing; it strokes its bare outline or arc.\n const ring = shape instanceof EllipseGeometry ? shape.ringOutline(geo) : null;\n if (ring != null) {\n const outline = parse(ring, full);\n stroke = outline && range ? trimPath(outline, range.start, range.end) : outline;\n }\n const interiorSvg = shape.buildSVGAlignInterior(geo);\n const interior = interiorSvg != null ? parse(interiorSvg, full) : (trims ? base : fill);\n const b = shape.computeBounds(geo);\n const spread = shape.supportsSpread() ? (s: number) => parse(shape.buildSpreadSVGPath(geo, s), full) : undefined;\n return { fill, stroke, interior, bounds: b ? [b.left, b.top, b.right, b.bottom] : null, spread, trimmed: !!range };\n}\n\n/** A path: data centred on its control-point bounds (or centerBounds), turned about the origin. */\nfunction pathShape(state: Any): ShapeOut {\n const shape = new PathGeometry(state as never);\n const full = shape.fullState as Any;\n const raw = parseSvgPath(shape.buildSVGPath(shape.geometry));\n const [x0, y0, x1, y1] = full.centerBounds ?? pathBounds(raw);\n const ox = -(x0 + (x1 - x0) / 2), oy = -(y0 + (y1 - y0) / 2);\n const centred = transformPath(raw, [1, 0, 0, 1, ox, oy]);\n const base = shapeTransform({ ...full, x: 0, y: 0 }, centred);\n const range = shape.needsTrim() ? shape.getTrimRange() : null;\n const fill = range ? trimPath(base, range.start, range.end) : base;\n return { fill, stroke: fill, interior: range ? base : fill, bounds: null, trimmed: !!range };\n}\n\nconst negPathY = (state: Any): Any => {\n const out: Any = { ...state, y: negY(state.y) };\n if (Array.isArray(state.data)) {\n out.data = state.data.map((c: Any) => {\n switch (c.type) {\n case \"M\": case \"m\": case \"L\": case \"l\": case \"T\": case \"t\": case \"V\": case \"v\": return { ...c, y: -c.y };\n case \"C\": case \"c\": return { ...c, y1: -c.y1, y2: -c.y2, y: -c.y };\n case \"S\": case \"s\": return { ...c, y2: -c.y2, y: -c.y };\n case \"Q\": case \"q\": return { ...c, y1: -c.y1, y: -c.y };\n case \"A\": case \"a\": return { ...c, y: -c.y, sweep: c.sweep === 1 ? 0 : 1 };\n default: return c;\n }\n });\n if (state.centerBounds) {\n const [a, b2, c2, d] = state.centerBounds;\n out.centerBounds = [a, -d, c2, -b2];\n }\n }\n return out;\n};\n\n/** The op's paths in the node's y-down space, or null when unsupported. */\nexport function shapeOf(op: { kind: string; state: Any }): ShapeOut | null {\n const s = op.state;\n switch (op.kind) {\n case \"rect\": return viaGeometry(RectGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"ellipse\": {\n const f = flipPositionY(s, s.width ?? 0, s.height ?? 0);\n if (s.startAngle != null) f.startAngle = -s.startAngle;\n if (s.sweep != null) f.sweep = -s.sweep;\n return viaGeometry(EllipseGeometry, f);\n }\n case \"polygon\": return viaGeometry(PolygonGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"polygram\": return viaGeometry(PolygramGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"line\": {\n const points = s.points ? s.points.map((p: { x: number; y: number }) => ({ x: p.x, y: -p.y })) : s.points;\n return viaGeometry(LineGeometry, { ...s, y: negY(s.y), points });\n }\n case \"path\": return pathShape(negPathY(s));\n }\n return null;\n}\n","import { type MotionBlurEffect, type Vector2, resolveEffectAxis, resolveMotionBlurAlignment } from \"@motionscript/core\";\n\n/** A motion blur resolved against a node's velocity into a directional smear. */\nexport interface MotionBlurResolved {\n /** Smear axis in degrees (0 = horizontal), as a directional blur's `angle`. */\n angle: number;\n /** Smear length in px along `angle`. */\n radius: number;\n /** Shutter phase in −1…1: offsets the smear's centre from the node's position. */\n phase: number;\n samples: number;\n}\n\n/** Above this `samples` count a shutter steps the smear into discrete taps rather than blurring it continuously. */\nexport const SAMPLE_THRESHOLD = 32;\n\n/**\n * `velocity · dt` is the node's displacement this frame; `length / 100` the\n * shutter fraction (100% = the whole displacement), scaled per axis by `axis`\n * and by `strength`. Null when the smear would be empty.\n */\nexport function resolveMotionBlur(effect: MotionBlurEffect, velocity: Vector2, dt: number): MotionBlurResolved | null {\n if (dt <= 0 || effect.strength <= 0 || effect.length <= 0) return null;\n const axis = resolveEffectAxis(effect.axis);\n const shutter = effect.length / 100;\n const sx = velocity.x * dt * axis.x * shutter * effect.strength;\n const sy = velocity.y * dt * axis.y * shutter * effect.strength;\n const radius = Math.hypot(sx, sy);\n if (radius < 0.01) return null;\n return {\n angle: (Math.atan2(sy, sx) * 180) / Math.PI,\n radius,\n phase: resolveMotionBlurAlignment(effect.alignment),\n samples: effect.samples,\n };\n}\n","// End-marker outlines, in the frame of the end they sit on: `u` runs the way the\n// stroke leaves, `v` to its left, and the origin is the path's end. `size` is\n// the marker's length and `weight` the stroke's.\n\nimport type { StrokeMarker } from \"@motionscript/core\";\n\n/** Half-width over length of a pointed head: as wide as it is long. */\nconst SPREAD = 0.5;\nconst SPREAD_LENGTH = Math.hypot(1, SPREAD);\nconst SPREAD_SIN = SPREAD / SPREAD_LENGTH;\nconst SPREAD_COS = 1 / SPREAD_LENGTH;\n\n/** How far up a stealth head its notch reaches, as a share of its length. */\nconst STEALTH_NOTCH = 0.35;\n\n/** A head with its tip on the end, turned by the stretch of path it covers. */\nexport function markerIsPointed(marker: StrokeMarker): boolean {\n return marker === \"arrow\" || marker === \"triangle\" || marker === \"stealth\";\n}\n\n/**\n * How far behind the end the stroke's own band has to stop: a pointed head is\n * narrower than the band near its tip, so the band's square end would show\n * either side of it.\n */\nexport function markerInset(marker: StrokeMarker, size: number, weight: number): number {\n return markerIsPointed(marker) ? Math.min(size, weight / (2 * SPREAD)) : 0;\n}\n\n/** The outline as a flat `[u, v, …]` polygon, or `null` for a disc `size` across centred on the end. */\nexport function markerPolygon(marker: StrokeMarker, size: number, weight: number): number[] | null {\n const half = size / 2;\n switch (marker) {\n case \"dot\":\n return null;\n case \"triangle\":\n return [0, 0, -size, size * SPREAD, -size, -size * SPREAD];\n case \"stealth\":\n return [0, 0, -size, size * SPREAD, -size * (1 - STEALTH_NOTCH), 0, -size, -size * SPREAD];\n case \"arrow\":\n return chevron(size, weight);\n case \"box\":\n return [-half, -half, half, -half, half, half, -half, half];\n case \"diamond\":\n return [half, 0, 0, half, -half, 0, 0, -half];\n case \"bar\":\n return [-weight / 2, -half, weight / 2, -half, weight / 2, half, -weight / 2, half];\n }\n}\n\n// Two limbs `weight` thick meeting in a mitre whose point is the origin. Short\n// of room for a gap between them it is the solid triangle.\nfunction chevron(size: number, weight: number): number[] {\n const outerV = size * SPREAD;\n const innerU = -size - weight * SPREAD_SIN;\n const innerV = outerV - weight * SPREAD_COS;\n if (innerV <= 0) return [0, 0, -size, outerV, -size, -outerV];\n const crotch = -weight / SPREAD_SIN;\n return [0, 0, -size, outerV, innerU, innerV, crotch, 0, innerU, -innerV, -size, -outerV];\n}\n","// Stroke cap planning and dash fitting on PathData: which path ends want a\n// cap other than the stroker's, where each sits and which way it faces, and\n// the dash pattern stretched to fit the path (dashes cut here as open\n// contours when the band needs its ends fixed up).\n\nimport { isStrokeMarker, type StrokeEnd, type StrokeMarker, type StrokeResolved } from \"@motionscript/core\";\nimport { markerIsPointed, markerPolygon } from \"./geometry/markers\";\nimport { type PathData, PathBuilder } from \"../doc\";\nimport { type Contour, dashedPath, dashFit, contourDashScale, dashRuns, measureContours, type PosTan } from \"./path-measure\";\n\nexport { markerInset } from \"./geometry/markers\";\n\ntype Cap = StrokeResolved[\"cap\"];\n\n/** One end of an open contour, with the unit direction pointing out past it. */\nexport interface PathEnd {\n x: number;\n y: number;\n dx: number;\n dy: number;\n cap: StrokeEnd;\n /** A marker's length, already fitted to its contour. */\n size: number;\n weight: number;\n /** Whether the band reaches the end (a dash gap can leave it bare). */\n reached: boolean;\n}\n\nexport interface StrokePlan {\n /** The cap the stroker draws: the dash cap, or for an undashed stroke the end cap. */\n cap: Cap;\n /** The ends that want another, fixed up after. */\n ends: PathEnd[];\n /** What to stroke instead of the shape's own contour (its cut dashes). */\n source?: PathData;\n /** The fitted pattern the renderer dashes with (unset when `source` carries the dashes). */\n dash?: number[];\n dashPhase?: number;\n}\n\n/** The plan for stroking `path` `width` wide; null when its dashes leave nothing. */\nexport function strokePlan(st: StrokeResolved, path: PathData, width: number, thin: boolean): StrokePlan | null {\n const dashed = !!st.dash?.length;\n const start = st.startCap ?? st.cap, end = st.endCap ?? st.cap;\n const cap: Cap = dashed ? st.cap : isStrokeMarker(end) ? \"butt\" : (end as Cap);\n const differs = start !== cap || end !== cap;\n if (!dashed && !differs) return { cap, ends: [] };\n const cs = measureContours(path);\n const fit = dashed ? dashFit(cs, st.dash!) : null;\n // A degenerate pattern draws the plain stroke (makeUniformDashEffect returns null).\n if (dashed && !fit) return { cap, ends: differs ? capEnds(cs, st, start, end, cap, width, null) : [] };\n if (!fit) return { cap, ends: capEnds(cs, st, start, end, cap, width, null) };\n const runs = (c: Contour) => dashRuns(c, st.dash!, st.dashOffset ?? 0, contourDashScale(c, st.dash!, fit));\n const ends = differs ? capEnds(cs, st, start, end, cap, width, runs) : [];\n // An end capped unlike the rest needs the band, and so do dashes along an\n // open contour (fit per contour) and thin ones; otherwise the renderer\n // dashes with the fitted pattern.\n if (thin || ends.length || fit.open) {\n const source = dashedPath(cs, st.dash!, st.dashOffset ?? 0, st.cap !== \"butt\", fit);\n return source ? { cap, ends, source } : null;\n }\n return { cap, ends, dash: st.dash!.map((d) => d * fit.scale), dashPhase: (st.dashOffset ?? 0) * fit.scale };\n}\n\nfunction capEnds(cs: Contour[], st: StrokeResolved, start: StrokeEnd, end: StrokeEnd, cap: Cap, width: number, runs: ((c: Contour) => [number, number][]) | null): PathEnd[] {\n const ends: PathEnd[] = [];\n const marked = (isStrokeMarker(start) ? 1 : 0) + (isStrokeMarker(end) ? 1 : 0);\n const half = width / 2;\n // band.contains(end − dir·inset): a dash covers the end, or its cap does.\n const inset = Math.min(half, 1) / 2;\n const ext = st.cap !== \"butt\" ? half : 0;\n for (const c of cs) {\n if (c.closed) continue;\n // Two heads share a contour too short for both.\n const size = Math.min(st.capScale * width, c.length / Math.max(1, marked));\n const on = runs?.(c);\n const reached = (d: number) => !on || on.some(([a, b]) => d >= a - ext - 1e-6 && d <= b + ext + 1e-6);\n if (start !== cap) pushEnd(ends, c.posTan(0), c.posTan(size), -1, start, size, width, reached(inset));\n if (end !== cap) pushEnd(ends, c.posTan(c.length), c.posTan(c.length - size), 1, end, size, width, reached(c.length - inset));\n }\n return ends;\n}\n\n// `inner` is the point a marker's length back along the contour: a pointed\n// head is turned by the chord to it, so its base sits on a curved path.\nfunction pushEnd(ends: PathEnd[], [x, y, tx, ty]: PosTan, inner: PosTan, outward: 1 | -1, cap: StrokeEnd, size: number, weight: number, reached: boolean) {\n let dx = outward * tx, dy = outward * ty;\n if (isStrokeMarker(cap) && markerIsPointed(cap) && Math.hypot(x - inner[0], y - inner[1]) > 1e-6) {\n dx = x - inner[0];\n dy = y - inner[1];\n }\n const length = Math.hypot(dx, dy);\n if (length < 1e-9) return;\n ends.push({ x, y, dx: dx / length, dy: dy / length, cap, size, weight, reached });\n}\n\n// Every end shape winds the same way, so several merged into one path union\n// under the non-zero rule instead of cancelling where they overlap.\n\n/** The rectangle past `end`: `depth` along its outward direction, `half` to either side. */\nexport function endBox({ x, y, dx, dy }: PathEnd, depth: number, half: number): PathData {\n const nx = -dy * half, ny = dx * half, ex = dx * depth, ey = dy * depth;\n return new PathBuilder().moveTo(x - nx, y - ny).lineTo(x - nx + ex, y - ny + ey).lineTo(x + nx + ex, y + ny + ey).lineTo(x + nx, y + ny).close().build();\n}\n\n/** The half disc past `end`, from one side of the band through the outward direction to the other. */\nexport function endDisc({ x, y, dx, dy }: PathEnd, r: number): PathData {\n const b = new PathBuilder();\n const n = 32;\n for (let i = 0; i <= n; i++) {\n const a = -Math.PI / 2 + (Math.PI * i) / n, c = Math.cos(a) * r, s = Math.sin(a) * r;\n const px = x + c * dx - s * dy, py = y + c * dy + s * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n\n/** A marker's outline on its end (addMarker): its polygon in the end's frame, or a disc `size` across. */\nexport function markerPath(e: PathEnd, marker: StrokeMarker): PathData {\n const { x, y, dx, dy, size, weight } = e;\n const polygon = markerPolygon(marker, size, weight);\n const b = new PathBuilder();\n if (!polygon) {\n const r = size / 2, k = 0.5522848 * r;\n b.moveTo(x + r, y).cubicTo(x + r, y + k, x + k, y + r, x, y + r).cubicTo(x - k, y + r, x - r, y + k, x - r, y)\n .cubicTo(x - r, y - k, x - k, y - r, x, y - r).cubicTo(x + k, y - r, x + r, y - k, x + r, y);\n return b.close().build();\n }\n for (let i = 0; i < polygon.length; i += 2) {\n const px = x + polygon[i] * dx - polygon[i + 1] * dy, py = y + polygon[i] * dy + polygon[i + 1] * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n","// The engine's RenderContext2D, recorded into a retained Doc each frame. A\n// canvas state machine: begin/end = save/restore around a node, transform() concatenates into the\n// node's group, a non pass-through blend isolates a layer, and opacity is\n// otherwise a world alpha multiplied into every paint.\n\nimport {\n alignmentOps, forEachTexture3D, isStrokeMarker, isSurfaceTexture3D, resolveSurfaceSource, resolveVideoTimestamp, withRichTextDescriptor,\n type Alignment, type BooleanOperation, CanvasRenderContext2D, type Clip, fillOps, type FontStyle, type Graphics2D,\n type MaskOptions, type NodeRenderState, type RenderContext2D, type RenderIssue, type ShadowResolved, shadowOps, type Size2D, strokeOps,\n type TransformState, type Vector2,\n} from \"@motionscript/core\";\nimport { BLEND_MODES, type BlendMode, Doc, type ImageAsset, isProjective, type Mat, type Member, type MemberOp, mulX, type Node, type Paint, PathBuilder, type PathData, pathBounds, type Shadow, type TextRunSpec, type TextSpec, transformPath, type Xform } from \"../doc\";\nimport { assetKey } from \"./driver\";\nimport { fillPaint, shadowOf } from \"./paint\";\nimport { shaderParamIssues } from \"./shader-params\";\nimport { isClosed, reversePath, signedArea } from \"./path-measure\";\nimport { shapeOf, type ShapeOut, textOf } from \"./shapes\";\nimport { resolveMotionBlur, SAMPLE_THRESHOLD } from \"./geometry/motion-blur\";\nimport { endBox, endDisc, markerInset, markerPath, type PathEnd, strokePlan, type StrokePlan } from \"./stroke-ends\";\n\ntype Measure = (text: string, size: number, family: string, weight: number, letterSpacing: number, style: FontStyle | undefined) => Size2D;\n\nfunction merge(paths: PathData[]): PathData {\n if (paths.length === 1) return paths[0];\n const verbs = new Uint8Array(paths.reduce((n, p) => n + p.verbs.length, 0));\n const points = new Float32Array(paths.reduce((n, p) => n + p.points.length, 0));\n let v = 0, q = 0;\n for (const p of paths) {\n verbs.set(p.verbs, v); v += p.verbs.length;\n points.set(p.points, q); q += p.points.length;\n }\n return { verbs, points };\n}\n\ntype Bounds = [number, number, number, number];\n\n/** The kinds the adapter could not draw this frame, and the nodes each was found on. */\nexport class MissingKinds extends Set<string> {\n readonly nodes = new Map<string, Set<string>>();\n\n constructor(private readonly node: () => string | undefined) {\n super();\n }\n\n override add(kind: string): this {\n super.add(kind);\n const id = this.node?.();\n if (id !== undefined) {\n let at = this.nodes.get(kind);\n if (!at) this.nodes.set(kind, (at = new Set()));\n at.add(id);\n }\n return this;\n }\n\n override clear(): void {\n super.clear();\n this.nodes.clear();\n }\n}\n\nconst SHAPE_OPS = new Set([\"rect\", \"ellipse\", \"path\", \"line\", \"polygon\", \"polygram\", \"text\", \"richText\"]);\ntype LeafProps = Parameters<Doc[\"pathNode\"]>[1];\n\n/** What a paint covers: one path, or a compound's members (a boolean result). */\ntype Geom = { path: PathData } | { members: Member[] };\n\nconst BLACK: Paint = { kind: \"solid\", color: [0, 0, 0, 1] };\nconst BOOLEAN_OP: Record<BooleanOperation, MemberOp> = { union: \"union\", subtract: \"cut\", intersect: \"intersect\", exclude: \"exclude\" };\n\n/** A compound's result bounds, as its members fold: unions grow, intersections shrink, cuts keep. */\nfunction membersBounds(members: Member[]): Bounds | null {\n let acc: Bounds | null = null;\n for (const m of members) {\n const b = pathBounds(m.path!);\n const op = m.op ?? \"union\";\n if (!acc) {\n if (op === \"union\" || op === \"exclude\") acc = b;\n } else if (op === \"union\" || op === \"exclude\") {\n acc = [Math.min(acc[0], b[0]), Math.min(acc[1], b[1]), Math.max(acc[2], b[2]), Math.max(acc[3], b[3])];\n } else if (op === \"intersect\") {\n acc = [Math.max(acc[0], b[0]), Math.max(acc[1], b[1]), Math.min(acc[2], b[2]), Math.min(acc[3], b[3])];\n if (acc[2] < acc[0] || acc[3] < acc[1]) acc = [acc[0], acc[1], acc[0], acc[1]];\n }\n }\n return acc;\n}\n\nfunction invert(m: Xform): Mat | null {\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return null;\n const a = m[3] / det, b = -m[1] / det, c = -m[2] / det, d = m[0] / det;\n return [a, b, c, d, -(a * m[4] + c * m[5]), -(b * m[4] + d * m[5])];\n}\n\nlet sceneVersion = 1 << 20;\n\n/** core's kebab-case blend names to the doc's (\"color-dodge\" → \"colorDodge\"). */\nfunction docBlend(b: string): BlendMode | null {\n const camel = (b === \"plus-lighter\" ? \"plus\" : b).replace(/-(\\w)/g, (_, c: string) => c.toUpperCase());\n return BLEND_MODES.includes(camel as BlendMode) ? (camel as BlendMode) : null;\n}\n// An image's version is its bitmap's: what the storage hands back for a source\n// can change (a video's nearest decoded frame, then the exact one; an SVG\n// rasterized again at a larger size).\nconst frameVersions = new WeakMap<object, number>();\nlet nextFrameVersion = 1 << 24;\nfunction frameVersion(frame: object): number {\n let v = frameVersions.get(frame);\n if (v === undefined) frameVersions.set(frame, (v = nextFrameVersion++));\n return v;\n}\n\n/** Decoded video frames by source and time (a storage adapter's). */\nexport interface VideoFrames {\n videos: Map<string, { duration: number }>;\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null;\n /** A draw of image `src` `edge` device px along its long side. */\n wantImageEdge?(src: string, edge: number): void;\n}\n\ninterface Scope {\n /** Groups this node opened (popped on end). */\n groups: number;\n worldAlpha: number;\n}\n\nexport class WgpuRenderContext extends CanvasRenderContext2D {\n override readonly readsSpaceRects = true;\n override readonly drawsVisibleOnly = true;\n pixelRatio = 1;\n doc!: Doc;\n /** What scenes asked for that the adapter doesn't draw yet (by kind, and the nodes it was on). */\n readonly missing = new MissingKinds(() => this.currentNodeStack[this.currentNodeStack.length - 1]);\n /** This frame's WGSL shaders whose uniforms and `Params` disagree, on their nodes. */\n readonly shaderIssues: RenderIssue[] = [];\n /** The frame's storage adapter (video frames). */\n storage: VideoFrames | null = null;\n /** Decoded images by asset key (the storage adapter fills it). */\n images = new Map<string, import(\"./driver\").Decoded>();\n private frameImages = new Map<string, import(\"../doc\").ImageAsset>();\n private assets = {\n image: (src: string) => this.image(src),\n scene3d: (scene: unknown, w: number, h: number, ratio: number) => {\n // Its textures: images from the frame's image assets (resolved as the\n // backend asks), surfaces drawn by this context into detached subtrees.\n const surfaces = new Map<object, ImageAsset>();\n forEachTexture3D(scene as never, (t: any) => {\n if (isSurfaceTexture3D(t) && !surfaces.has(t)) {\n const asset = this.surfaceOf(t);\n if (asset) surfaces.set(t, asset);\n }\n });\n const images = new Proxy({} as Record<string, ImageAsset>, { get: (_, src) => (typeof src === \"string\" ? this.image(src) ?? undefined : undefined) });\n const a = this.doc.addScene3D(scene as never, w, h, { images, surfaces });\n a.scale3d = ratio;\n // A scene is redrawn whenever it is handed over (it may animate).\n a.version = ++sceneVersion;\n return a;\n },\n video: (fill: any, at?: number) => {\n const storage = this.storage;\n const time = at ?? this.videoTime(fill);\n if (!storage || time === null) return null;\n const frame = storage.videoFrame(fill.src, time);\n if (!frame) return null;\n const key = `${assetKey(fill.src)}@${time.toFixed(6)}`;\n let a = this.frameImages.get(key);\n if (!a) {\n a = this.doc.addImage(frame, frame.width, frame.height, { mipmaps: false });\n a.version = frameVersion(frame);\n this.frameImages.set(key, a);\n }\n return a;\n },\n imageEdge: (src: string, edge: number) => this.storage?.wantImageEdge?.(src, edge),\n deviceScale: () => {\n const m = this.device();\n return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2]));\n },\n time: () => this.elapsed(),\n checkShader: (fill: unknown) => this.checkShader(\"fill\", fill),\n };\n private image = (raw: string) => {\n const src = assetKey(raw);\n let a = this.frameImages.get(src);\n if (a) return a;\n const d = this.images.get(src);\n if (!d) return null;\n a = this.doc.addImage(d.bitmap, d.width, d.height);\n // Ids restart with every frame's doc; a version unique to the bitmap\n // keeps the backend from reusing another image's upload under an id,\n // or an image's earlier raster (a vector rasterized again, sharper).\n a.version = frameVersion(d.bitmap);\n this.frameImages.set(src, a);\n return a;\n };\n private stack: Node[] = [];\n private scopes: Scope[] = [];\n private worldAlpha = 1;\n // The current surface: shapes chained before a paint, as ShapeHandler.\n private shapes: ShapeOut[] = [];\n private painted = false;\n private shadows: ShadowResolved[] = [];\n\n constructor(protected width: number, protected height: number, private measure: Measure) {\n super();\n }\n\n private get cur(): Node {\n return this.stack[this.stack.length - 1];\n }\n\n measureText(text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n return this.measure(text, fontSize, fontFamily, fontWeight, letterSpacing, fontStyle);\n }\n\n execute(callback: () => void): void {\n // executePass: cleared black, origin at the centre (the backend applies\n // the pixel ratio by scaling the doc to the canvas).\n this.doc = new Doc(this.width, this.height, this.clearColor());\n this.frameImages.clear();\n // Only the settled pass counts (earlier passes wait on decodes).\n this.missing.clear();\n this.shaderIssues.length = 0;\n const root = this.doc.group(this.doc.root, { transform: this.rootTransform() });\n const frame = this.frameGroup(root);\n this.stack = frame === root ? [root] : [root, frame];\n this.scopes = [];\n this.worldAlpha = 1;\n this.masks = [];\n this.cameras = [];\n this.clips = [];\n this.booleans = [];\n this.resetSurface();\n callback();\n }\n\n /** Where the scene's origin sits in the doc: its centre, as executePass. */\n protected rootTransform(): Xform {\n return [1, 0, 0, 1, this.width / 2, this.height / 2];\n }\n\n protected clearColor(): [number, number, number, number] {\n return [0, 0, 0, 1];\n }\n\n /** The group the scene draws into under the root (a host's frame clip). */\n protected frameGroup(root: Node): Node {\n return root;\n }\n\n screenshot(): string | undefined {\n return undefined;\n }\n\n unmount(): void {}\n\n override begin(state: NodeRenderState): void {\n super.begin(state);\n this.scopes.push({ groups: 1, worldAlpha: this.worldAlpha });\n this.stack.push(this.doc.group(this.cur));\n this.resetSurface();\n }\n\n override end(): void {\n const s = this.scopes.pop();\n if (s) {\n for (let i = 0; i < s.groups; i++) this.stack.pop();\n this.worldAlpha = s.worldAlpha;\n }\n super.end();\n }\n\n transform(state: Partial<TransformState>): RenderContext2D {\n const x = state.x ?? 0, y = state.y ?? 0, w = state.width ?? 0, h = state.height ?? 0;\n const opacity = state.opacity ?? 1;\n const blend = state.blend ?? \"pass-through\";\n let m: Xform;\n const matrix = state.matrix;\n // A 2.5D node's matrix can carry a perspective row (g h i).\n if (matrix) m = [matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f, matrix.g ?? 0, matrix.h ?? 0, matrix.i ?? 1];\n else {\n const pivot = state.pivot ?? { x: 0, y: 0 };\n const px = pivot.x * (w / 2), py = -pivot.y * (h / 2);\n const r = ((state.rotation ?? 0) * Math.PI) / 180, s = state.scale ?? 1;\n const c = Math.cos(r) * s, sn = Math.sin(r) * s;\n m = [c, sn, -sn, c, x + px - (c * px - sn * py), y + py - (sn * px + c * py)];\n }\n const g = this.cur;\n g.transform = mulX(g.transform, isProjective(m) ? m : m.slice(0, 6) as Mat);\n // Node effects ride the node's layer (transform composes the filters,\n // beginEffects(\"foreground\") captures for the shader ones); the doc's\n // group takes both, shader effects first, as the engine orders them.\n // Backdrop ones arrive through beginEffects(\"backdrop\").\n const fx = this.motionBlur((state.effects ?? []).filter((e) => e.mode !== \"backdrop\"));\n for (const e of fx) if (e.type === \"shader\") this.checkShader(\"effect\", e);\n if (fx.length) {\n g.effects = fx;\n g.effectBox = [-w / 2, -h / 2, w, h];\n g.effectTime = this.elapsed();\n }\n if (blend !== \"pass-through\") {\n const mode = docBlend(blend);\n if (!mode) this.missing.add(`blend:${blend}`);\n this.stack.push(this.doc.group(g, { opacity: this.worldAlpha * (opacity < 1 ? opacity : 1), blend: mode ?? \"normal\" }));\n this.scopes[this.scopes.length - 1].groups++;\n this.worldAlpha = 1;\n } else if (opacity < 1) this.worldAlpha *= opacity;\n return this;\n }\n\n private resetSurface() {\n this.shapes = [];\n this.painted = false;\n this.shadows = [];\n }\n\n protected drawGraphics(graphics: Graphics2D): void {\n const prevAlpha = this.worldAlpha;\n const g = graphics as any;\n if (g.needsGroupLayer?.()) {\n const o = g.groupOpacity();\n if (o < 1) this.worldAlpha *= o;\n }\n // Graphics-level rotation/scale turns the whole union about its pivot\n // (default: the union's centre), wrapping the replay.\n const turn = g.groupTransform?.();\n let turned: Node | null = null;\n if (turn) {\n const { x: cx, y: cy } = this.groupCenter(graphics, turn.center);\n const r = (turn.rotation * Math.PI) / 180, c = Math.cos(r) * turn.scale, s = Math.sin(r) * turn.scale;\n turned = this.doc.group(this.cur, { transform: [c, s, -s, c, cx - (c * cx - s * cy), cy - (s * cx + c * cy)] });\n this.stack.push(turned);\n }\n const ops = graphics.ops() as any[];\n const segments = this.effectSegments(ops);\n let segment: Node | null = null;\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n // An effects op filters its shape group: a layer opened at the\n // group's first op, closed at the effects op.\n const fx = segments.get(i);\n if (fx) {\n segment = this.doc.group(this.cur, { effects: fx, effectBox: this.viewportBox(), effectTime: this.elapsed() });\n this.stack.push(segment);\n }\n switch (op.kind) {\n case \"rect\": case \"ellipse\": case \"polygon\": case \"polygram\": case \"line\": case \"path\": {\n if (this.painted) this.resetSurface();\n const shape = shapeOf(op);\n if (!shape) break;\n if (this.booleans.length) this.collect(shape);\n else this.shapes.push(shape);\n break;\n }\n case \"cut\": this.cut(); break;\n case \"richText\": {\n if (this.painted) this.resetSurface();\n this.richText(op.state);\n break;\n }\n case \"text\": {\n if (this.painted) this.resetSurface();\n const text = textOf(op.state, (spec) => {\n const r = spec.runs[0];\n const m = this.measureText(r.text, r.size, r.family, r.weight, r.letterSpacing, r.italic ? \"italic\" : \"normal\");\n return [m.width, m.height];\n });\n if (text) {\n const [w, h] = text.size, x = text.transform[4], y = text.transform[5];\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: [x - w / 2, y - h / 2, x + w / 2, y + h / 2], text });\n } else this.missing.add(\"text:path\");\n break;\n }\n case \"fill\": this.fill(fillOps.resolve(op.fills)); break;\n case \"stroke\": this.stroke(strokeOps.resolve(op.strokes)); break;\n case \"shadow\": this.shadows = shadowOps.resolve(op.shadows); break;\n case \"effects\":\n if (segment) {\n this.stack.splice(this.stack.lastIndexOf(segment));\n segment = null;\n }\n this.resetSurface();\n break;\n case \"mask\": this.beginMask(op.options); break;\n case \"applyMask\": this.applyMask(); break;\n case \"endMask\": this.endMask(); break;\n default: this.missing.add(`op:${op.kind}`);\n }\n }\n // Unwound to where this draw began (an unterminated segment included).\n const first = turned ?? segment;\n if (first) this.stack.splice(this.stack.lastIndexOf(first));\n this.worldAlpha = prevAlpha;\n }\n\n /** RenderContext's buildEffectSegments: each effects op's foreground effects\n * by the index of the first op of the shape group it filters. */\n private effectSegments(ops: any[]): Map<number, object[]> {\n const segments = new Map<number, object[]>();\n let groupStart = 0, painted = false;\n ops.forEach((op, i) => {\n if (SHAPE_OPS.has(op.kind)) {\n if (painted) {\n groupStart = i;\n painted = false;\n }\n } else if (op.kind === \"fill\" || op.kind === \"stroke\" || op.kind === \"shadow\") {\n painted = true;\n } else if (op.kind === \"effects\") {\n const fx = this.motionBlur((op.effects as any[]).filter((e) => e.mode !== \"backdrop\"));\n if (fx.length) segments.set(groupStart, fx);\n groupStart = i + 1;\n painted = false;\n }\n });\n return segments;\n }\n\n /** Motion blur resolved against the node's velocity into a directional blur. */\n private motionBlur<E extends { type: string }>(effects: E[]): E[] {\n if (!effects.some((e) => e.type === \"motionBlur\")) return effects;\n const rs = this.currentRenderState();\n return effects.flatMap((e) => {\n if (e.type !== \"motionBlur\") return [e];\n const r = rs ? resolveMotionBlur(e as never, rs.velocity, rs.dt) : null;\n if (!r) return [];\n // An off-centre shutter shifts the smear; many samples step it.\n if (r.phase !== 0 || Math.round(r.samples) > SAMPLE_THRESHOLD) this.missing.add(\"effect:motionBlur-shutter\");\n return [{ type: \"directionalBlur\", radius: r.radius, angle: r.angle } as unknown as E];\n });\n }\n\n /** resolveGroupCenter: an explicit point as is, else a point of the shapes' union box. */\n private groupCenter(graphics: Graphics2D, center: Alignment | undefined): Vector2 {\n if (center !== undefined && typeof center !== \"string\") return { x: center.x, y: center.y };\n let b: Bounds | null = null;\n for (const op of graphics.ops() as any[]) {\n const p = SHAPE_OPS.has(op.kind) && op.kind !== \"text\" && op.kind !== \"richText\" ? shapeOf(op)?.fill : null;\n if (!p || !p.verbs.length) continue;\n const pb = pathBounds(p);\n b = b ? [Math.min(b[0], pb[0]), Math.min(b[1], pb[1]), Math.max(b[2], pb[2]), Math.max(b[3], pb[3])] : pb;\n }\n if (!b) return { x: 0, y: 0 };\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n if (center === undefined) return { x: cx, y: cy };\n const a = alignmentOps.resolve(center);\n return { x: cx + a.x * ((b[2] - b[0]) / 2), y: cy - a.y * ((b[3] - b[1]) / 2) };\n }\n\n /** The viewport in local units (x, y, w, h): what effects on a graphics\n * group measure against. */\n private viewportBox(): [number, number, number, number] {\n const [l, t, r, b] = this.spaceBounds({ space: \"global\" }, [0, 0, 0, 0]);\n return [l, t, r - l, b - t];\n }\n\n /** The surface's paths of one kind, merged; its gradient bounds. */\n private surface(kind: \"fill\" | \"stroke\" | \"interior\"): PathData | null {\n let paths = this.shapes.map((s) => s[kind]).filter((p): p is PathData => !!p && p.verbs.length > 0);\n // Shapes fill one by one; one non-zero path of them all needs them\n // wound alike, or an overlap where they turn opposite ways cancels.\n if (kind === \"fill\" && paths.length > 1) paths = paths.map((p) => (signedArea(p) < 0 ? reversePath(p) : p));\n return paths.length ? merge(paths) : null;\n }\n\n private bounds(path: PathData | null): Bounds {\n const own = this.shapes.map((s) => s.bounds).filter((b) => b !== null);\n if (path && own.length !== this.shapes.length) return pathBounds(path);\n if (!own.length) return [0, 0, 0, 0];\n return own.reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]);\n }\n\n /** A leaf drawing `g`: a path node, or a compound for a boolean result. */\n private leaf(parent: Node, g: Geom, props: LeafProps): Node {\n return \"members\" in g ? this.doc.compound(parent, { ...props, members: g.members }) : this.doc.pathNode(parent, { ...props, path: g.path });\n }\n\n private geomBounds(g: Geom): Bounds {\n return \"members\" in g ? membersBounds(g.members) ?? [0, 0, 0, 0] : pathBounds(g.path);\n }\n\n /** The surface's outline grown by `spread`, shape by shape (a shape that\n * can't spread casts its own outline). A shrink can collapse a\n * shape: an `inset` one then casts nothing, null when none is left. */\n private spreadGeom(geom: Geom, spread: number, inset: boolean): Geom | null {\n if (!spread || \"members\" in geom) return geom;\n const paths: PathData[] = [];\n for (const s of this.shapes) {\n if (s.members || !s.fill || !s.fill.verbs.length) continue;\n const p = s.spread ? s.spread(spread) : s.fill;\n if (p && p.verbs.length) paths.push(p);\n else if (!inset) paths.push(s.fill);\n }\n return paths.length ? { path: merge(paths) } : null;\n }\n\n /** A group whose children are clipped to `g` (a compound clips as an alpha mask). */\n private clipTo(parent: Node, g: Geom): Node {\n if (\"path\" in g) {\n const [x0, y0, x1, y1] = pathBounds(g.path);\n return this.doc.group(parent, { clip: { x: x0, y: y0, w: x1 - x0, h: y1 - y0, r: 0, path: g.path } });\n }\n const m = this.doc.group(parent, { mask: \"alpha\" });\n this.doc.compound(m, { members: g.members, fill: BLACK });\n return m;\n }\n\n /** A group whose children show only outside `g`. */\n private clipOutside(parent: Node, g: Geom): Node {\n const m = this.doc.group(parent, { mask: \"invertAlpha\" });\n this.leaf(m, g, { fill: BLACK });\n return m;\n }\n\n private fill(layers: ReturnType<typeof fillOps.resolve>) {\n this.painted = true;\n // A boolean scope only collects outlines; its result is painted after.\n if (this.booleans.length) return;\n this.deferring(\"fill\", () => this.paintFill(layers));\n }\n\n /** Runs `paint` into the innermost mask's after-group when that mask's\n * `apply` leaves `kind` out: drawn after endMask, over the masked composite. */\n private deferring(kind: \"fill\" | \"stroke\", paint: () => void) {\n const m = this.masks[this.masks.length - 1];\n const after = m?.apply && !m.apply.has(kind) && !this.inVectorMask ? m.after : null;\n if (!after) return paint();\n this.stack.push(after);\n try {\n paint();\n } finally {\n this.stack.splice(this.stack.lastIndexOf(after));\n }\n }\n\n private paintFill(layers: ReturnType<typeof fillOps.resolve>) {\n this.paintText(layers, null);\n if (!layers.length) return;\n const path = this.surface(\"fill\");\n const geoms: Geom[] = path ? [{ path }] : [];\n for (const s of this.shapes) if (s.members) geoms.push({ members: s.members });\n if (!geoms.length) return;\n const bounds = this.bounds(path);\n const all = this.shadows;\n this.shadows = [];\n for (const g of geoms) this.fillGeom(g, bounds, layers, all);\n }\n\n private fillGeom(geom: Geom, bounds: Bounds, layers: ReturnType<typeof fillOps.resolve>, all: ShadowResolved[]) {\n if (this.inVectorMask) {\n this.leaf(this.cur, geom, { fill: BLACK });\n return;\n }\n // Drop shadows with one solid fill ride the leaf (the renderer's\n // shadow paths); others are an offset, blurred copy painted with the\n // shadow's own fill, under the fill.\n const solid: Shadow[] = [];\n for (const sh of all) {\n if (sh.inner) continue;\n const one = sh.fill.length === 1 && (sh.fill[0] as any).type === \"solid\";\n if (one) {\n const s2 = shadowOf(sh, this.missing);\n if (s2) solid.push(s2);\n continue;\n }\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const g = this.doc.group(this.cur, { transform: [1, 0, 0, 1, dx, dy], filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const cast = this.spreadGeom(geom, sh.spread ?? 0, false)!;\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (paint) this.leaf(g, cast, { fill: paint, opacity: this.worldAlpha * ((f as any).opacity ?? 1) });\n }\n }\n layers.forEach((f, i) => {\n const space = this.spaceBounds(f, bounds);\n const paint = fillPaint(f, space, this.missing, this.assets);\n if (!paint) return;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n const shadows = i === 0 ? solid : [];\n const echo = (f as any).type === \"video\" ? (f as any).preset?.adjustments?.find((a: any) => a.type === \"echo\") : undefined;\n if (echo && echo.echoes > 0 && echo.delay > 0) {\n this.echoStack(geom, f, space, bounds, paint, opacity, shadows, echo);\n return;\n }\n const intensity = (f as any).preset?.intensity ?? 1;\n if (intensity > 0 && intensity < 1 && this.pixelAdjustments(f).length) {\n // applyMediaFilters' mix and fade: a lerp of the graded and the\n // ungraded fill where the content is opaque. Here the ungraded\n // one goes over the graded at 1 - intensity, since the renderer\n // folds a leaf's opacity into what its effects read.\n const g = this.doc.group(this.cur, { opacity, blend: this.blendOf(f) });\n this.mediaPreset(this.leaf(g, geom, { fill: paint, shadows }), f, bounds);\n this.leaf(g, geom, { fill: paint, opacity: 1 - intensity });\n return;\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, shadows, blend: this.blendOf(f) }), f, bounds);\n });\n // applyInnerShadows: a padded rect minus the offset contour, filled with\n // the shadow's fill, blurred, clipped to the shape — after the fill.\n for (const sh of all) {\n if (!sh.inner) continue;\n // An inset shadow's spread shrinks the contour it is cast from; one\n // shrunk to nothing leaves no hole, so the shadow fills the shape.\n const hole = this.spreadGeom(geom, -(sh.spread ?? 0), true);\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const [x0, y0, x1, y1] = this.geomBounds(geom);\n const pad = Math.abs(dx) + Math.abs(dy) + sh.blur * 2 + 2;\n const clip = this.clipTo(this.cur, geom);\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const blurred = this.doc.group(clip, { opacity: this.worldAlpha * ((f as any).opacity ?? 1), filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const region = this.doc.group(blurred, hole ? { mask: \"invertAlpha\" } : {});\n if (hole) this.leaf(region, hole, { transform: [1, 0, 0, 1, dx, dy], fill: BLACK });\n this.doc.rect(region, { transform: [1, 0, 0, 1, x0 - pad, y0 - pad], w: x1 - x0 + 2 * pad, h: y1 - y0 + 2 * pad, fill: paint });\n }\n }\n }\n\n /** _richText: spans laid out as one paragraph about the origin (no x/y,\n * wrapped at a positive width) and painted eagerly with each span's own\n * fill — runs carry their paints — and strokes. */\n private richText(state: any) {\n const f = withRichTextDescriptor(state);\n const spans = f.spans as any[];\n if (!spans.length) return;\n const local: [number, number, number, number] = [-f.width / 2, -f.height / 2, f.width / 2, f.height / 2];\n const clear: Paint = { kind: \"solid\", color: [0, 0, 0, 0] };\n const layerPaint = (layers: any[]): Paint => (layers[0] ? fillPaint(layers[0], local, this.missing, this.assets) : null) ?? clear;\n const runs: TextRunSpec[] = spans.map((sp) => ({\n text: sp.text, family: sp.fontFamily, size: sp.fontSize, weight: sp.fontWeight,\n italic: sp.fontStyle === \"italic\" || sp.fontStyle === \"oblique\", letterSpacing: sp.letterSpacing,\n }));\n const align = ({ start: \"left\", end: \"right\" } as Record<string, TextSpec[\"align\"]>)[f.textAlign] ?? (f.textAlign as TextSpec[\"align\"]);\n const spec: TextSpec = { runs, align, wrap: f.width > 0, width: f.width, lineHeight: f.lineHeight };\n // One text node per fill layer, each span's k-th layer on its runs (clear\n // where a span has fewer), then one per distinct stroke. Painting run by\n // run would differ only where runs overlap.\n const fills = Math.max(1, ...spans.map((sp) => sp.fill.length));\n for (let k = 0; k < fills; k++) {\n const layerRuns = runs.map((r, j) => ({ ...r, paint: layerPaint(spans[j].fill.slice(k, k + 1)) }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: layerRuns }, fill: clear, opacity: this.worldAlpha });\n }\n const strokes = new Map<string, { k: number; st: any; paints: Paint[] }>();\n spans.forEach((sp, j) => sp.stroke.forEach((st: any, k: number) => {\n const key = `${k}|${st.weight}|${st.join}|${st.cap}|${st.miterLimit}`;\n let s = strokes.get(key);\n if (!s) strokes.set(key, (s = { k, st, paints: spans.map(() => clear) }));\n s.paints[j] = layerPaint(st.fill);\n }));\n for (const { st, paints } of [...strokes.values()].sort((a, b) => a.k - b.k)) {\n const strokeRuns = runs.map((r, j) => ({ ...r, paint: paints[j] }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: strokeRuns }, opacity: this.worldAlpha, stroke: { paint: clear, width: st.weight, join: st.join, cap: st.cap, miter: st.miterLimit } });\n }\n }\n\n /** Text shapes of the surface as text nodes, filled or stroked. */\n private paintText(layers: ReturnType<typeof fillOps.resolve>, stroke: ReturnType<typeof strokeOps.resolve>[number] | null) {\n for (const shape of this.shapes) {\n const t = shape.text;\n if (!t) continue;\n const b = shape.bounds!;\n // The text block is centred on its node's origin.\n const local: [number, number, number, number] = [b[0] - t.transform[4], b[1] - t.transform[5], b[2] - t.transform[4], b[3] - t.transform[5]];\n for (const f of layers) {\n const paint = fillPaint(f, local, this.missing, this.assets);\n if (!paint) continue;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n if (stroke) {\n const st = (width: number) => ({ paint, width, join: stroke.join as never, cap: stroke.cap as never, miter: stroke.miterLimit, dash: stroke.dash, dashPhase: stroke.dashOffset });\n const al = Math.max(-1, Math.min(1, stroke.align ?? 0));\n if (al === 0) {\n this.doc.textNode(this.cur, { transform: t.transform, text: t.spec, opacity, stroke: st(stroke.weight) });\n continue;\n }\n // drawTextUnionStroke: glyphs have no single path, so the band\n // is one stroke under a mask made of the filled glyphs and a\n // ring stroked along them.\n const glyphs = (parent: Node) => this.doc.textNode(parent, { transform: t.transform, text: t.spec, fill: BLACK });\n const ring = (parent: Node, width: number) =>\n this.doc.textNode(parent, { transform: t.transform, text: t.spec, stroke: { paint: BLACK, width, join: stroke.join as never, miter: stroke.miterLimit } });\n // Erase what lies inside (a > 0) or outside (a < 0) the\n // glyphs, less a ring `keep` wide either side of the outline.\n const masked = (keep: number) => {\n if (al > 0) {\n const g = this.doc.group(this.cur, { mask: \"invertAlpha\" });\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n ring(m, keep);\n glyphs(m);\n return g;\n }\n const g = this.doc.group(this.cur, { mask: \"alpha\" });\n const m = this.doc.group(g);\n glyphs(m);\n ring(m, keep);\n return g;\n };\n if (Math.abs(al) >= 1) {\n // A band on one side only: twice as wide, its mask moved one\n // device px past the outline (applyTextAlignMask's seam\n // bridge, an erode or dilate, which a ring along every\n // glyph's outline is not), so band and fill overlap.\n const g = this.doc.group(this.cur, { mask: al > 0 ? \"invertAlphaEroded\" : \"alphaDilated\" });\n glyphs(g);\n this.doc.textNode(g, { transform: t.transform, text: t.spec, opacity, stroke: st(2 * stroke.weight) });\n } else {\n // drawTextPartiallyAlignedStroke: the band reaches (1 + a)·w/2\n // outside and (1 − a)·w/2 inside; stroked as wide as the\n // longer reach, the surplus erased past the shorter one.\n const out = ((1 + al) * stroke.weight) / 2, inside = ((1 - al) * stroke.weight) / 2;\n this.doc.textNode(masked(2 * (al > 0 ? inside : out)), { transform: t.transform, text: t.spec, opacity, stroke: st(2 * Math.max(out, inside)) });\n }\n } else {\n this.doc.textNode(this.cur, { transform: t.transform, text: t.spec, opacity, fill: paint });\n }\n }\n }\n }\n\n /** A Tex.surface source recorded into a detached subtree and rasterized\n * at width×height × its pixel ratio, origin at the\n * centre. The outer draw's surface state is set aside meanwhile. */\n private surfaceOf(t: any): ImageAsset | null {\n const ratio = Math.max(1, Math.min(t.maxPixelRatio ?? 1, 4)); // MAX_RASTER_PIXEL_RATIO\n const w = t.width ?? 512, h = t.height ?? 512;\n const pw = Math.max(1, Math.ceil(w * ratio)), ph = Math.max(1, Math.ceil(h * ratio));\n const root = this.doc.detached({ transform: [ratio, 0, 0, ratio, (w * ratio) / 2, (h * ratio) / 2] });\n const saved = { stack: this.stack, scopes: this.scopes, alpha: this.worldAlpha, shapes: this.shapes, painted: this.painted, shadows: this.shadows, masks: this.masks, clips: this.clips, cameras: this.cameras };\n this.stack = [root]; this.scopes = []; this.worldAlpha = 1; this.masks = []; this.clips = []; this.cameras = [];\n this.resetSurface();\n try {\n const src = resolveSurfaceSource(t.source) as any;\n if (src.kind === \"graphics\") this.draw(src.graphics);\n else {\n src.node.layout({ x: 0, y: 0, width: w, height: h }, this);\n src.node.render(this);\n }\n } catch (e) {\n this.missing.add(`surface:error`);\n console.warn(e);\n } finally {\n Object.assign(this, { stack: saved.stack, scopes: saved.scopes, worldAlpha: saved.alpha, shapes: saved.shapes, painted: saved.painted, shadows: saved.shadows, masks: saved.masks, clips: saved.clips, cameras: saved.cameras });\n }\n const a = this.doc.addSurface(root, pw, ph);\n a.version = ++sceneVersion;\n return a;\n }\n\n /** applyMediaFilters: a media fill's pixel adjustments run over the fill in\n * the shape's box and are clipped back to the shape — here, effects on\n * that fill's leaf with clip-to-input. */\n private mediaPreset(node: Node, f: unknown, bounds: [number, number, number, number]) {\n const pixel = this.pixelAdjustments(f);\n if (!pixel.length || ((f as any).preset.intensity ?? 1) <= 0) return;\n node.effects = pixel.map((a: any) => ({ ...a, clip: true }));\n node.effectBox = [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]];\n node.effectTime = this.elapsed();\n }\n\n /** A media fill's pixel adjustments: the video-only ones are not (posterizeTime\n * is in resolveVideoTimestamp, echo is echoStack). */\n private pixelAdjustments(f: unknown): object[] {\n const any = f as any;\n if ((any.type !== \"image\" && any.type !== \"video\") || !any.preset) return [];\n return (any.preset.adjustments ?? []).filter((a: any) => a.type !== \"echo\" && a.type !== \"posterizeTime\");\n }\n\n /** VideoFillRenderer.drawEchoStack: the past taps oldest first, each at\n * decay^n, then the current frame with its grade, all with the echo's blend. */\n private echoStack(geom: Geom, f: any, space: Bounds, bounds: Bounds, paint: Paint, opacity: number, shadows: Shadow[], echo: any) {\n const blend = docBlend(echo.blend ?? \"screen\") ?? \"screen\";\n const decay = echo.decay ?? 0.5;\n const taps = Math.min(Math.max(0, Math.floor(echo.echoes)), 32); // MAX_ECHOES\n const time = this.videoTime(f);\n if (shadows.length) this.leaf(this.cur, geom, { fill: { kind: \"solid\", color: [0, 0, 0, 0] }, opacity, shadows });\n for (let n = taps; n >= 1 && time !== null; n--) {\n const ts = time - n * echo.delay;\n if (ts < 0) continue;\n const tap = fillPaint(f, space, this.missing, { ...this.assets, video: (fill) => this.assets.video(fill, ts) });\n if (tap) this.leaf(this.cur, geom, { fill: tap, opacity: opacity * Math.pow(decay, n), blend });\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, blend }), f, bounds);\n }\n\n /** The source time a video fill shows now, or null before its clip loads. */\n private videoTime(fill: any): number | null {\n const v = this.storage?.videos.get(assetKey(fill.src));\n return v ? resolveVideoTimestamp(fill, this.currentRenderState()?.elapsed ?? 0, v.duration) : null;\n }\n\n /** The current node's elapsed time (s), the `time` its effects get. */\n private elapsed(): number {\n return this.currentRenderState()?.elapsed ?? 0;\n }\n\n /** FillHandler.boundsForSpace: local = the shape's bounds; parent = the\n * parent's layout rect; global = the viewport mapped back to local space. */\n private spaceBounds(f: unknown, local: [number, number, number, number]): [number, number, number, number] {\n const space = (f as { space?: string }).space ?? \"local\";\n if (space === \"parent\") {\n const p = this.currentSpaceRects().parent;\n return p ? [p.left, p.top, p.right, p.bottom] : local;\n }\n if (space === \"global\") {\n const m = this.device();\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return local;\n const inv = (x: number, y: number): [number, number] => {\n const dx = x - m[4], dy = y - m[5];\n return [(m[3] * dx - m[2] * dy) / det, (-m[1] * dx + m[0] * dy) / det];\n };\n const W = this.width * this.pixelRatio, H = this.height * this.pixelRatio;\n const a = inv(0, 0), b = inv(W, H);\n return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[0], b[0]), Math.max(a[1], b[1])];\n }\n return local;\n }\n\n /** A fill layer's blend mode as a leaf's (the leaf blends as a unit). */\n private blendOf(f: unknown): BlendMode {\n const b = (f as { blend?: string }).blend;\n if (!b || b === \"normal\") return \"normal\";\n const mode = docBlend(b);\n if (!mode) this.missing.add(`fill:blend:${b}`);\n return mode ?? \"normal\";\n }\n\n /** Device matrix of the current group: pixel ratio × the group chain. */\n private device(): Xform {\n let m: Xform = [this.pixelRatio, 0, 0, this.pixelRatio, 0, 0];\n for (const g of this.stack) m = mulX(m, g.transform);\n return m;\n }\n\n /** StrokeHandler.snapPath: an axis-aligned thin stroke's shape scaled and\n * moved so its device bounds sit on pixel edges (centres for odd widths). */\n private snap(path: PathData, intWidth: number, m: Xform): Mat | null {\n if (intWidth <= 0 || Math.abs(m[1]) > 1e-6 || Math.abs(m[2]) > 1e-6 || m[0] === 0 || m[3] === 0) return null;\n const [bx0, by0, bx1, by1] = pathBounds(path);\n if (bx1 - bx0 <= 0 || by1 - by0 <= 0) return null;\n const sx = m[0], sy = m[3], tx = m[4], ty = m[5];\n const l = tx + sx * bx0, t = ty + sy * by0, r = tx + sx * bx1, b = ty + sy * by1;\n const off = intWidth % 2 === 0 ? 0 : 0.5;\n const tl = Math.round(l - off) + off, tt = Math.round(t - off) + off;\n const tr = Math.round(r - off) + off, tb = Math.round(b - off) + off;\n if (tr - tl < 1 || tb - tt < 1) return null;\n const kx = (tr - tl) / (r - l), ky = (tb - tt) / (b - t);\n if (Math.abs(kx - 1) < 1e-4 && Math.abs(ky - 1) < 1e-4 && Math.abs(tl - l) < 1e-4 && Math.abs(tt - t) < 1e-4) return null;\n return [kx, 0, 0, ky, (tl - tx) / sx - kx * bx0, (tt - ty) / sy - ky * by0];\n }\n\n private stroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n this.painted = true;\n if (this.booleans.length) return;\n this.deferring(\"stroke\", () => this.paintStroke(strokes));\n }\n\n private paintStroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n for (const st of strokes) this.paintText(st.fill, st);\n const fillAll = this.surface(\"fill\");\n const dev = this.device();\n const scale = Math.sqrt(Math.abs(dev[0] * dev[3] - dev[1] * dev[2]));\n const rotated = isProjective(dev) || Math.abs(dev[1]) > 1e-6 || Math.abs(dev[2]) > 1e-6;\n for (const st of strokes) {\n // resolveStrokeWidth: under 2.5 device px (axis-aligned), a whole\n // number of device px.\n let weight = st.weight, intWidth = -1;\n if (!rotated && weight > 0 && scale > 0 && weight * scale < 2.5) {\n intWidth = Math.max(1, Math.round(weight * scale));\n weight = intWidth / scale;\n }\n for (const shape of this.strokeShapes()) {\n let geom: Geom, interior: Geom | null;\n let plan: StrokePlan = { cap: st.cap, ends: [], dash: st.dash, dashPhase: st.dashOffset };\n if (shape.members) {\n geom = interior = { members: shape.members };\n } else {\n if (!shape.stroke || !shape.stroke.verbs.length) continue;\n const p = strokePlan(st, shape.stroke, weight, intWidth > 0);\n if (!p) continue;\n plan = p;\n geom = { path: p.source ?? shape.stroke };\n interior = shape.alignInterior ? { members: shape.alignInterior } : shape.interior && isClosed(shape.interior) ? { path: shape.interior } : null;\n }\n const bounds = this.bounds(fillAll ?? (\"path\" in geom ? geom.path : null));\n // alignedStrokeBand: outside (1 + a)·w, inside (1 − a)·w, each\n // clipped to its side. A marked stroke is centred: half a head means nothing.\n const a = Math.max(-1, Math.min(1, st.align ?? 0));\n const aligned = a !== 0 && interior !== null && !plan.ends.some((e) => isStrokeMarker(e.cap));\n const halves: [number, \"in\" | \"out\" | \"both\"][] = aligned\n ? [[(1 + a) * weight, \"out\"], [(1 - a) * weight, \"in\"]]\n : [[weight, \"both\"]];\n const snapM = shape.fill ? this.snap(shape.fill, intWidth, dev) : null;\n const parent = snapM ? this.doc.group(this.cur, { transform: snapM }) : this.cur;\n for (const f of st.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n for (const [width, side] of halves) {\n if (width <= 0) continue;\n const stroke = { paint, width, join: st.join as never, cap: plan.cap as never, miter: st.miterLimit, dash: plan.dash, dashPhase: plan.dashPhase };\n if (side === \"both\") this.strokeLeaf(parent, geom, { opacity, stroke, blend: this.blendOf(f) }, plan.ends);\n else this.strokeLeaf(side === \"in\" ? this.clipTo(parent, interior!) : this.clipOutside(parent, interior!), geom, { opacity, stroke }, plan.ends);\n }\n }\n }\n }\n }\n\n /** strokeShapesForSpace: two or more shapes stroke as one figure, so\n * overlaps show no seams: their union outline when every one is closed and\n * whole, else their contours together (a union would close open ones),\n * aligned against the union. Text keeps each shape apart. */\n private strokeShapes(): ShapeOut[] {\n if (this.shapes.some((s) => s.text)) return this.shapes;\n // A boolean result first: the union folds in after its own ops.\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length)).sort((a, b) => (b.members ? 1 : 0) - (a.members ? 1 : 0));\n if (withPaths.length < 2) return this.shapes;\n const members: Member[] = [];\n for (const s of withPaths) {\n if (s.members) s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? \"union\" : m.op }));\n else members.push({ kind: \"path\", path: s.fill!, op: \"union\" });\n }\n if (withPaths.filter((s) => s.members).length > 1) this.missing.add(\"stroke:union-of-booleans\");\n const bounds = withPaths.every((s) => s.bounds) ? withPaths.map((s) => s.bounds!).reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]) : null;\n const open = withPaths.some((s) => !s.members && (s.stroke !== s.fill || s.trimmed || !isClosed(s.fill!)));\n if (!open) return [{ fill: null, stroke: null, interior: null, bounds, members }];\n // A boolean result has no contour of its own to add.\n if (withPaths.some((s) => s.members)) return this.shapes;\n return [{ fill: merge(withPaths.map((s) => s.fill!)), stroke: merge(withPaths.map((s) => s.stroke ?? s.fill!)), interior: null, alignInterior: members, bounds }];\n }\n\n /** A stroke leaf with its plan's ends re-capped (StrokeHandler.strokeBand):\n * what the stroker put past each end masked away, then the end's own cap\n * or marker filled with the stroke's paint, all in one group so the\n * opacity and blend apply once. */\n private strokeLeaf(parent: Node, geom: Geom, props: LeafProps & { stroke: NonNullable<LeafProps[\"stroke\"]> }, ends: PathEnd[]): Node {\n if (!ends.length) return this.leaf(parent, geom, props);\n const half = props.stroke.width / 2;\n // A little past the stroker's own cap, which reaches `half` beyond the end.\n const reach = half * 1.01 + 0.5;\n const capped = props.stroke.cap !== \"butt\";\n const cuts: PathData[] = [], adds: PathData[] = [];\n for (const e of ends) {\n if (isStrokeMarker(e.cap)) {\n // addMarker: the band cut back to where the marker takes over.\n const inset = markerInset(e.cap, e.size, e.weight);\n if (inset > 0 || capped) cuts.push(endBox({ ...e, x: e.x - e.dx * inset, y: e.y - e.dy * inset }, inset + reach, reach));\n adds.push(markerPath(e, e.cap));\n continue;\n }\n if (capped) cuts.push(endBox(e, reach, reach));\n if (e.reached && e.cap !== \"butt\") adds.push(e.cap === \"round\" ? endDisc(e, half) : endBox(e, half, half));\n }\n const g = this.doc.group(parent, { opacity: props.opacity ?? 1, blend: props.blend ?? \"normal\" });\n const inner = { ...props, opacity: 1, blend: \"normal\" as const };\n if (cuts.length) {\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n this.doc.pathNode(m, { path: merge(cuts), fill: BLACK });\n this.leaf(m, geom, inner);\n } else this.leaf(g, geom, inner);\n if (adds.length) this.doc.pathNode(g, { path: merge(adds), fill: props.stroke.paint });\n return g;\n }\n\n // Boolean groups: the outlines drawn in scope (in the space at beginBoolean) and folds them left to right\n // with the op, as one compound node's members.\n private booleans: { op: BooleanOperation; base: Mat | null; members: Member[] }[] = [];\n\n beginBoolean(op: BooleanOperation): void {\n this.booleans.push({ op, base: invert(this.device()), members: [] });\n this.resetSurface();\n }\n\n endBoolean(): void {\n const b = this.booleans.pop();\n this.resetSurface();\n if (!b || !b.members.length) return;\n const outer = this.booleans[this.booleans.length - 1];\n if (!outer) {\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(b.members), members: b.members });\n return;\n }\n // Nested: the result joins the outer fold. Folding the inner members\n // straight in is exact when the outer op distributes over the inner one\n // (a − (b ∪ c) = a − b − c, a ∩ (b ∩ c) = a ∩ b ∩ c, …) or it comes first.\n // The space here is the inner scope's, so this maps its members out.\n const into = this.relative(outer.base);\n const op = BOOLEAN_OP[outer.op];\n const start = !outer.members.length;\n if (!start && !b.members.slice(1).every((m) => m.op === (op === \"cut\" ? \"union\" : op))) this.missing.add(\"boolean:nested\");\n b.members.forEach((m, k) => {\n const own = m.op ?? \"union\";\n const mop = start ? own : k === 0 || op === \"cut\" ? op : own;\n outer.members.push({ kind: \"path\", path: into ? transformPath(m.path!, into) : m.path!, op: mop });\n });\n }\n\n /** inv(base) · device: the current space in a boolean scope's space. */\n private relative(base: Mat | null): Mat | null {\n const m = this.device();\n if (!base || isProjective(m)) return null;\n return mulX(base, m) as Mat;\n }\n\n /** A shape drawn in a boolean scope: its outline as the next member. */\n private collect(shape: ShapeOut) {\n const b = this.booleans[this.booleans.length - 1];\n const path = shape.fill;\n if (!path || !path.verbs.length) return;\n const rel = this.relative(b.base);\n if (!rel) this.missing.add(\"boolean:projective\");\n b.members.push({ kind: \"path\", path: rel ? transformPath(path, rel) : path, op: b.members.length ? BOOLEAN_OP[b.op] : \"union\" });\n }\n\n /** ShapeHandler.cut: the shapes before the last one unioned, minus the last. */\n private cut() {\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length));\n this.resetSurface();\n if (!withPaths.length) return;\n const members: Member[] = [];\n withPaths.forEach((s, k) => {\n const op: MemberOp = k > 0 && k === withPaths.length - 1 ? \"cut\" : \"union\";\n if (!s.members) {\n members.push({ kind: \"path\", path: s.fill!, op });\n return;\n }\n if (k > 0) this.missing.add(\"cut:compound\");\n s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? op : m.op }));\n });\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(members), members });\n }\n\n // Masks: the doc's group mask (its first child is the mask layer). Vector\n // masks clip to the mask's outline, so their paint is opaque here.\n private masks: { vector: boolean; open: boolean; apply: Set<string> | null; after: Node | null }[] = [];\n private get inVectorMask(): boolean {\n const m = this.masks[this.masks.length - 1];\n return !!m && m.open && m.vector;\n }\n\n beginMask(options?: MaskOptions): void {\n const mode = options?.mode ?? \"alpha\";\n const lum = mode === \"luminance\";\n const docMode = options?.inverted ? (lum ? \"invertLuminance\" : \"invertAlpha\") : (lum ? \"luminance\" : \"alpha\");\n const g = this.doc.group(this.cur, { mask: docMode as never });\n // The paints `apply` leaves out land after the masked group.\n const apply = options?.apply ? new Set<string>(Array.isArray(options.apply) ? options.apply : [options.apply]) : null;\n const after = apply ? this.doc.group(this.cur) : null;\n this.stack.push(g, this.doc.group(g));\n this.masks.push({ vector: mode === \"vector\", open: true, apply, after });\n this.resetSurface();\n }\n\n applyMask(): void {\n const m = this.masks[this.masks.length - 1];\n if (!m?.open) return;\n m.open = false;\n this.stack.pop();\n this.resetSurface();\n }\n\n endMask(): void {\n const m = this.masks.pop();\n if (!m) return;\n if (m.open) this.stack.pop();\n this.stack.pop();\n this.resetSurface();\n }\n private clips: { pushed: number; geom: Geom | null }[] = [];\n\n /** A Clip's outline: its shapes unioned, each cut subtracting the shape before it. */\n private clipGeom(clip: Clip): Geom | null {\n const members: Member[] = [];\n for (const op of clip.ops() as any[]) {\n if (op.kind === \"cut\") {\n if (members.length > 1) members[members.length - 1].op = \"cut\";\n continue;\n }\n const p = shapeOf(op)?.fill;\n if (p && p.verbs.length) members.push({ kind: \"path\", path: p, op: \"union\" });\n }\n if (!members.length) return null;\n return members.some((m) => m.op === \"cut\") ? { members } : { path: merge(members.map((m) => m.path!)) };\n }\n\n beginClip(clip: Clip): void {\n const geom = this.clipGeom(clip);\n if (!geom) {\n this.clips.push({ pushed: 0, geom: null });\n return;\n }\n const g = this.clipTo(this.cur, geom);\n // A compound clips as a mask: the content goes after the mask layer.\n if (\"members\" in geom) this.stack.push(g, this.doc.group(g));\n else this.stack.push(g);\n this.clips.push({ pushed: \"members\" in geom ? 2 : 1, geom });\n }\n\n endClip(): void {\n const n = this.clips.pop()?.pushed ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n private cameras: number[] = [];\n\n /** beginCamera: clip to the viewport, then translate·rotate(−heading)·scale(zoom)·translate(−lookAt.x, +lookAt.y). */\n beginCamera(v: { x: number; y: number; width: number; height: number }, lookAt: Vector2, zoom: number, heading: number): void {\n const clipped = this.doc.group(this.cur, { clip: { x: v.x - v.width / 2, y: v.y - v.height / 2, w: v.width, h: v.height, r: 0 } });\n const r = (-heading * Math.PI) / 180, c = Math.cos(r) * zoom, sn = Math.sin(r) * zoom;\n const tx = -lookAt.x, ty = lookAt.y;\n const lens = this.doc.group(clipped, { transform: [c, sn, -sn, c, v.x + c * tx - sn * ty, v.y + sn * tx + c * ty] });\n this.stack.push(clipped, lens);\n this.cameras.push(2);\n }\n\n endCamera(): void {\n const n = this.cameras.pop() ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n override beginEffects(effects: any[], target: \"foreground\" | \"backdrop\", width: number, height: number): void {\n // Foreground effects are already on the node's group (see transform).\n if (target !== \"backdrop\") return;\n for (const e of effects) if (e?.type === \"shader\") this.checkShader(\"effect\", e);\n // Backdrop: a paint-less silhouette carrying the effects; the renderer\n // re-renders what lies beneath it through that shape (Layer::backdrop).\n // With no clip of its own the layer is bounded by the clips around it,\n // the viewport at most.\n let silhouette = this.clips[this.clips.length - 1]?.geom;\n if (!silhouette) {\n const [x, y, w, h] = this.viewportBox();\n silhouette = { path: new PathBuilder().moveTo(x, y).lineTo(x + w, y).lineTo(x + w, y + h).lineTo(x, y + h).close().build() };\n }\n this.leaf(this.cur, silhouette, { effects, effectBox: [-width / 2, -height / 2, width, height], effectTime: this.elapsed() });\n }\n override endEffects(): void {}\n\n private checkShader(scope: \"fill\" | \"effect\", shader: unknown): void {\n const nodeId = this.currentNodeStack[this.currentNodeStack.length - 1];\n for (const issue of shaderParamIssues(scope, shader as Parameters<typeof shaderParamIssues>[1])) {\n this.shaderIssues.push(nodeId === undefined ? issue : { ...issue, nodeId });\n }\n }\n override rasterize(): null { this.missing.add(\"rasterize\"); return null; }\n}\n","// core's two text questions (measureText, layoutTextBlock) answered by ms-text,\n// the same shaper the renderer draws with, on the main thread.\n\nimport { type FontStyle, type Size2D, type TextBlockLayout, type TextState, withTextDescriptor } from \"@motionscript/core\";\nimport { MsText } from \"../../pkg/ms_renderer.js\";\nimport type { WgpuStorageAdapter } from \"./storage\";\n\nconst SLANT: Record<string, number> = { normal: 0, italic: 1, oblique: 2 };\nconst ALIGN: Record<string, number> = { left: 0, right: 1, center: 2, justify: 3, start: 4, end: 5 };\nconst VALIGN: Record<string, number> = { top: 0, center: 1, bottom: 2 };\n\n/** One ms-text engine per storage adapter, fed the same fonts its renderers get. */\nconst shapers = new WeakMap<WgpuStorageAdapter, MsText>();\n\nexport function shaperFor(storage: WgpuStorageAdapter): MsText {\n let ms = shapers.get(storage);\n if (!ms) {\n const shaper = (ms = new MsText());\n for (const f of storage.fonts) shaper.register_font(f.bytes, f.family);\n storage.onFont((f) => shaper.register_font(f.bytes, f.family));\n shapers.set(storage, shaper);\n }\n return ms;\n}\n\nexport function measureText(ms: MsText, text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n const [width, height] = ms.measure_text(text, fontSize, fontFamily, fontWeight, letterSpacing, SLANT[fontStyle ?? \"normal\"] ?? 0);\n return { width, height };\n}\n\ntype Any = Record<string, any>;\n\n/** layoutTextBlock: null for text on a path and for segments with a transform. */\nexport function layoutTextBlock(ms: MsText, state: Partial<TextState>): TextBlockLayout | null {\n const f = withTextDescriptor(state as never) as Any;\n if (f.path != null) return null;\n const autofit = f.fontSize === \"autofit\";\n const base = { text: String(f.text ?? \"\"), fontFamily: f.fontFamily, fontSize: autofit ? 100 : f.fontSize, fontWeight: f.fontWeight, fontStyle: f.fontStyle, letterSpacing: f.letterSpacing };\n const segments: Any[] = Array.isArray(f.segments) && f.segments.length ? f.segments : [base];\n if (segments.some((s) => (s.x ?? 0) !== 0 || (s.y ?? 0) !== 0 || (s.rotation ?? 0) !== 0 || (s.scale ?? 1) !== 1)) return null;\n const families: string[] = [];\n const runs: number[] = [];\n let text = \"\";\n for (const s of segments) {\n const family = s.fontFamily ?? base.fontFamily ?? \"\";\n let fi = families.indexOf(family);\n if (fi < 0) fi = families.push(family) - 1;\n const t = String(s.text ?? \"\");\n text += t;\n runs.push(t.length, s.fontSize ?? base.fontSize, s.fontWeight ?? base.fontWeight ?? 400, SLANT[s.fontStyle ?? base.fontStyle ?? \"normal\"] ?? 0, s.letterSpacing ?? base.letterSpacing ?? 0, fi);\n }\n const width = f.width ?? 0, height = f.height ?? 0;\n const flat = ms.text_block(\n text, new Float32Array(runs), families.join(\"\\n\"),\n autofit ? NaN : base.fontSize, f.minFontSize ?? 0, f.lineHeight ?? 0,\n ALIGN[f.textAlign ?? \"center\"] ?? 2, VALIGN[f.verticalAlign ?? \"center\"] ?? 1,\n !!f.wrap && width > 0, width, height,\n );\n if (!flat.length) return null;\n const lines: TextBlockLayout[\"lines\"] = [];\n let k = 3;\n for (let i = 0; i < flat[2]; i++) {\n const [start, end, top, bottom, n] = flat.subarray(k, k + 5);\n lines.push({ start, end, top, bottom, carets: Array.from(flat.subarray(k + 5, k + 5 + n)) });\n k += 5 + n;\n }\n return { lines, width: flat[0], height: flat[1] };\n}\n","// Page-wide GPU faults. Every surface shares one device (gpu.rs), so a lost\n// device, a WebGPU error or a panic is news for all of them: each live\n// surface queues the issue for its own takeRenderIssues(), and a lost device\n// is replaced and every surface remounted on the new one.\n\nimport type { RenderIssue } from \"@motionscript/core\";\nimport { set_panic_listener } from \"../../pkg/ms_renderer.js\";\nimport { forgetDevice, prewarmDevice } from \"../backend-wgpu\";\n\n/** What a host hears through {@link onWgpuEvent}. */\nexport type WgpuEvent =\n | { type: \"device-lost\"; reason: string; message: string }\n | { type: \"device-restored\" }\n | { type: \"gpu-error\"; error: \"validation\" | \"out-of-memory\" | \"internal\"; message: string }\n | { type: \"crashed\"; message: string };\n\n/** A live surface, as faults reach it. */\nexport interface FaultTarget {\n queueIssue(issue: RenderIssue): void;\n /** Drop the dead backend and mount the canvas again on a new device. */\n remount(): void;\n /** The renderer can no longer draw: draw nothing more. */\n halt(): void;\n}\n\n/** Recoveries allowed in {@link RECOVERY_WINDOW_MS} before a device that keeps dying is given up on. */\nconst MAX_RECOVERIES = 3;\nconst RECOVERY_WINDOW_MS = 60_000;\n/** WebGPU errors reported per page before the rest are only counted (a broken frame repeats every frame). */\nconst MAX_GPU_ERRORS = 32;\n\nconst listeners = new Set<(event: WgpuEvent) => void>();\nconst targets = new Set<FaultTarget>();\nconst watched = new WeakSet<object>();\nconst recoveries: number[] = [];\nlet gpuErrors = 0;\nlet crashed: string | null = null;\nlet panicHooked = false;\n\n/** Calls `listener` on every GPU fault on the page; returns the unsubscribe. */\nexport function onWgpuEvent(listener: (event: WgpuEvent) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\n/** The panic message once the renderer's WASM has panicked; it draws nothing after. */\nexport function crashMessage(): string | null {\n return crashed;\n}\n\nexport function addFaultTarget(target: FaultTarget): () => void {\n hookPanics();\n targets.add(target);\n if (crashed !== null) {\n target.queueIssue(crashIssue(crashed));\n target.halt();\n }\n return () => targets.delete(target);\n}\n\n/** Watches a device the renderer drew with, once: its errors and its loss. */\nexport function watchDevice(device: unknown): void {\n const d = device as GPUDeviceLike | null;\n if (!d || watched.has(d)) return;\n watched.add(d);\n d.addEventListener?.(\"uncapturederror\", (e: Event) => reportGpuError((e as Event & { error: { message: string; constructor: { name: string } } }).error));\n d.lost.then((info) => deviceLost(info.reason ?? \"unknown\", info.message ?? \"\"));\n}\n\ninterface GPUDeviceLike {\n lost: Promise<{ reason?: string; message?: string }>;\n addEventListener?(type: string, listener: (e: Event) => void): void;\n}\n\nfunction emit(event: WgpuEvent): void {\n for (const l of [...listeners]) {\n try {\n l(event);\n } catch (e) {\n console.error(\"[wgpu] a fault listener threw:\", e);\n }\n }\n}\n\nfunction broadcast(issue: RenderIssue): void {\n for (const t of targets) t.queueIssue(issue);\n}\n\nfunction reportGpuError(error: { message: string; constructor: { name: string } }): void {\n if (++gpuErrors > MAX_GPU_ERRORS) return;\n const name = error?.constructor?.name ?? \"\";\n const kind = name === \"GPUOutOfMemoryError\" ? \"out-of-memory\" : name === \"GPUInternalError\" ? \"internal\" : \"validation\";\n const message = `WebGPU ${kind} error: ${error?.message ?? String(error)}`;\n broadcast({ kind: \"gpu\", feature: `gpu:${kind}`, message });\n emit({ type: \"gpu-error\", error: kind, message });\n}\n\nfunction deviceLost(reason: string, detail: string): void {\n if (crashed !== null) return;\n forgetDevice();\n const now = performance.now();\n while (recoveries.length && now - recoveries[0] > RECOVERY_WINDOW_MS) recoveries.shift();\n const message = `The GPU device was lost (${reason}${detail ? `: ${detail}` : \"\"}); the renderer is drawing on a new one.`;\n emit({ type: \"device-lost\", reason, message });\n if (recoveries.length >= MAX_RECOVERIES) {\n crash(`The GPU device was lost ${MAX_RECOVERIES + 1} times within a minute; the renderer stopped asking for a new one.`);\n return;\n }\n recoveries.push(now);\n broadcast({ kind: \"device-lost\", message });\n for (const t of [...targets]) t.remount();\n prewarmDevice().then(() => emit({ type: \"device-restored\" }), (e) => crash(`No GPU device after a loss: ${String((e as Error)?.message ?? e)}`));\n}\n\nfunction crashIssue(message: string): RenderIssue {\n return { kind: \"crashed\", message };\n}\n\n/**\n * Marks the renderer dead at once, so nothing calls into it again, and tells\n * the surfaces and the host after: a panic arrives from inside a WASM call,\n * which must not be re-entered.\n */\nfunction crash(message: string): void {\n if (crashed !== null) return;\n crashed = message;\n queueMicrotask(() => {\n broadcast(crashIssue(message));\n for (const t of [...targets]) t.halt();\n emit({ type: \"crashed\", message });\n });\n}\n\nfunction hookPanics(): void {\n if (panicHooked) return;\n panicHooked = true;\n set_panic_listener((message: string) => crash(`The renderer panicked and draws nothing more on this page (reload to recover): ${message}`));\n}\n","// A session's render surface on the wgpu renderer: the adapter's render\n// context mounted on a <canvas>, with the preview knobs a host sets (pixel\n// ratio, view, frame, clipToFrame, frameBackground).\n\nimport { renderIssueKey, type RenderIssue, type Size2D, type TextBlockLayout, type TextState } from \"@motionscript/core\";\nimport { WgpuRenderContext } from \"../adapter/context\";\nimport { WgpuBackend } from \"../backend-wgpu\";\nimport type { Doc, Node, Xform } from \"../doc\";\nimport type { WgpuStorageAdapter } from \"./storage\";\nimport { layoutTextBlock, measureText, shaperFor } from \"./text\";\nimport { SKSL_EFFECT, SKSL_FILL } from \"../user-shaders\";\nimport { addFaultTarget, crashMessage, watchDevice } from \"./faults\";\n\ntype Shaper = ReturnType<typeof shaperFor>;\n\n/** What the adapter could not draw, logged once per kind per page. */\nconst reported = new Set<string>();\n\n/** Kinds that mean \"not loaded yet\", which a settled frame waits out. */\nconst TRANSIENT = /-not-(?:decoded|loaded)$/;\n\n/** What a feature the adapter does not draw is called, by its exact kind or by its kind's prefix. */\nconst FEATURE_NAMES: Record<string, string> = {\n \"text:path\": \"Text on a path\",\n rasterize: \"rasterize()\",\n \"boolean:nested\": \"A boolean nested in one of another kind\",\n \"boolean:projective\": \"A boolean under a 3D (projective) transform\",\n \"cut:compound\": \"A cut through a compound shape\",\n \"stroke:union-of-booleans\": \"One stroke around several booleans\",\n \"effect:motionBlur-shutter\": \"Motion blur with an off-centre shutter or over 32 samples\",\n \"surface:error\": \"A surface texture that failed to draw\",\n \"blend:\": \"The blend mode\",\n \"fill:blend:\": \"The fill blend mode\",\n \"op:\": \"The drawing op\",\n \"fill:\": \"The fill\",\n \"effect:\": \"The effect\",\n \"3d:\": \"In 3D,\",\n};\n\nfunction missingMessage(kind: string): string {\n if (FEATURE_NAMES[kind]) return `${FEATURE_NAMES[kind]} is not drawn by the WebGPU renderer.`;\n const prefix = Object.keys(FEATURE_NAMES).filter((p) => p.endsWith(\":\") && kind.startsWith(p)).sort((a, b) => b.length - a.length)[0];\n return prefix ? `${FEATURE_NAMES[prefix]} \"${kind.slice(prefix.length)}\" is not drawn by the WebGPU renderer.` : `Not drawn by the WebGPU renderer: ${kind}.`;\n}\n\nexport class WgpuSurfaceContext extends WgpuRenderContext {\n view: { zoom: number; x: number; y: number } = { zoom: 1, x: 0, y: 0 };\n frame: Size2D | null = null;\n clipToFrame = true;\n frameBackground: \"black\" | \"transparent\" = \"black\";\n\n private canvas: HTMLCanvasElement | null = null;\n /**\n * The drawing-buffer size the host gave the canvas when it last mounted.\n * wgpu writes the canvas's width and height whenever it configures, so a\n * device that finishes starting after the host resized the canvas would\n * shrink it back; this, not the canvas, is the size to draw at.\n */\n private size = { width: 1, height: 1 };\n private backend: WgpuBackend | null = null;\n private starting: Promise<void> | null = null;\n /** The last mount rejected: a settled frame has nothing to wait for. */\n private startFailed = false;\n private startToken: object | null = null;\n private lastDoc: Doc | null = null;\n private viewportKey = \"\";\n private readonly shaper: Shaper;\n private readonly stopFonts: () => void;\n private readonly stopSettle: () => void;\n private readonly stopFaults: () => void;\n /** Page-wide faults (a lost device, a WebGPU error, a panic) since the last takeRenderIssues. */\n private faults: RenderIssue[] = [];\n /** The renderer panicked: nothing calls into it again. */\n private halted = false;\n\n constructor(private readonly store: WgpuStorageAdapter, viewport: Size2D) {\n const shaper = shaperFor(store);\n super(viewport.width, viewport.height, (text, size, family, weight, spacing, style) => measureText(shaper, text, size, family, weight, spacing, style));\n this.shaper = shaper;\n this.storage = store;\n this.images = store.images;\n this.stopFonts = store.onFont((f) => this.backend?.registerFont(f.bytes, f.family));\n // A settled frame (an export's, a seek's) is drawn again once its shaders\n // compile, or once a surface remounting after a lost device can draw.\n this.stopSettle = store.addSettler(() => {\n if (this.starting && !this.startFailed) return this.starting.catch(() => {});\n return this.backend?.shaders.hasPending() ? this.backend.whenShadersReady() : null;\n });\n this.stopFaults = addFaultTarget({\n queueIssue: (issue) => this.faults.push(issue),\n remount: () => this.remount(),\n halt: () => this.halt(),\n });\n }\n\n /** Renderer stats of the last frame (build/encode ms, draws, passes, …). */\n stats(): Record<string, number> | null {\n return this.backend?.stats() ?? null;\n }\n\n mount(target: unknown): void {\n const canvas = target as HTMLCanvasElement;\n this.size = { width: Math.max(1, canvas.width), height: Math.max(1, canvas.height) };\n if (canvas === this.canvas && (this.backend || this.starting)) {\n // A resize: the next present reconfigures to the new size.\n this.present();\n return;\n }\n this.releaseBackend();\n this.canvas = canvas;\n if (this.halted || crashMessage() !== null) return;\n const token = {};\n this.startToken = token;\n this.startFailed = false;\n const starting = (this.starting = (async () => {\n const backend = new WgpuBackend();\n await backend.init(canvas, this.size.width, this.size.height);\n if (this.startToken !== token) {\n if (!this.halted) backend.destroy();\n return;\n }\n watchDevice(backend.gpuDevice());\n // sRGB blending without dither: the engine's own look, and the canvas\n // pass draws straight into the output with no intermediate or blit.\n backend.setOptions(false, false);\n // Every frame is a new document, so unused definitions can go.\n backend.collectUnused = true;\n // A user shader that finishes compiling shows on the next draw.\n backend.onShaderReady = () => this.present();\n for (const f of this.store.fonts) backend.registerFont(f.bytes, f.family);\n this.backend = backend;\n this.starting = null;\n this.present();\n })());\n starting.catch((e) => {\n if (this.starting === starting) this.startFailed = true;\n console.error(\"[wgpu] the renderer failed to start:\", e);\n });\n }\n\n /** Settles once the mounted canvas has a device to draw with; rejects if it can't get one. */\n whenMounted(): Promise<void> {\n return this.starting ?? Promise.resolve();\n }\n\n unmount(): void {\n this.releaseBackend();\n this.canvas = null;\n }\n\n execute(callback: () => void): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed()) return;\n this.width = this.size.width / this.pixelRatio;\n this.height = this.size.height / this.pixelRatio;\n try {\n super.execute(callback);\n } finally {\n this.lastDoc = this.doc;\n this.present();\n for (const kind of this.missing) {\n if (reported.has(kind) || kind.endsWith(\"-not-decoded\")) continue;\n reported.add(kind);\n console.warn(`[wgpu] not drawn yet: ${kind}`);\n }\n }\n }\n\n /**\n * Since the last call: page-wide faults, user shaders that do not compile\n * or whose uniforms miss their `Params`, and every feature the last frame\n * asked for that this renderer does not draw, once per kind and node.\n */\n override takeRenderIssues(): RenderIssue[] {\n const out = new Map<string, RenderIssue>();\n const add = (issue: RenderIssue) => out.set(renderIssueKey(issue), issue);\n for (const issue of this.faults.splice(0)) add(issue);\n const backend = this.halted ? null : this.backend;\n for (const message of backend?.shaderIssues ?? []) {\n add({ kind: \"shader\", ...(message === SKSL_EFFECT && { feature: \"effect:shader-sksl\" }), message });\n }\n backend?.shaderIssues.clear();\n for (const issue of this.shaderIssues) add(issue);\n for (const kind of this.missing) {\n if (TRANSIENT.test(kind)) continue;\n const issue: RenderIssue = kind === \"fill:shader-sksl\"\n ? { kind: \"shader\", feature: kind, message: SKSL_FILL }\n : { kind: \"missing\", feature: kind, message: missingMessage(kind) };\n const nodes = this.missing.nodes.get(kind);\n if (!nodes?.size) add(issue);\n else for (const nodeId of nodes) add({ ...issue, nodeId });\n }\n for (const type of backend?.missing ?? []) add({ kind: \"missing\", feature: `effect:${type}`, message: missingMessage(`effect:${type}`) });\n for (const what of backend?.missing3d ?? []) add({ kind: \"missing\", feature: `3d:${what}`, message: missingMessage(`3d:${what}`) });\n return [...out.values()];\n }\n\n /** Settles once every user shader the last frames used has compiled (or failed); an export waits on it. */\n whenShadersReady(): Promise<void> {\n return this.backend?.whenShadersReady() ?? Promise.resolve();\n }\n\n override layoutTextBlock(state: Partial<TextState>): TextBlockLayout | null {\n return layoutTextBlock(this.shaper, state);\n }\n\n /** The frame (or the whole surface) as an image data URL. */\n screenshot(mime = \"image/png\", quality?: number): string | undefined {\n return this.snapshotCanvas()?.toDataURL(mime, quality);\n }\n\n /**\n * The frame (or the whole surface) copied into a fresh 2D canvas. A WebGPU\n * canvas is only readable in the task that drew it, so this draws it again first.\n */\n snapshotCanvas(): HTMLCanvasElement | undefined {\n const canvas = this.canvas;\n if (!canvas || !this.backend || !this.lastDoc) return undefined;\n this.present();\n let [x, y, w, h] = [0, 0, canvas.width, canvas.height];\n if (this.frame) {\n const pr = this.pixelRatio, z = this.view.zoom;\n const cx = canvas.width / 2 + this.view.x * pr, cy = canvas.height / 2 + this.view.y * pr;\n const fw = this.frame.width * z * pr, fh = this.frame.height * z * pr;\n x = Math.max(0, Math.round(cx - fw / 2));\n y = Math.max(0, Math.round(cy - fh / 2));\n w = Math.max(1, Math.min(canvas.width - x, Math.round(fw)));\n h = Math.max(1, Math.min(canvas.height - y, Math.round(fh)));\n }\n const out = document.createElement(\"canvas\");\n out.width = w;\n out.height = h;\n const ctx = out.getContext(\"2d\");\n if (!ctx) return undefined;\n ctx.drawImage(canvas, x, y, w, h, 0, 0, w, h);\n return out;\n }\n\n override dispose(): void {\n this.releaseBackend();\n this.stopFonts();\n this.stopSettle();\n this.stopFaults();\n this.canvas = null;\n this.lastDoc = null;\n this.store.dispose();\n super.dispose();\n }\n\n protected override rootTransform(): Xform {\n const z = this.view.zoom;\n return [z, 0, 0, z, this.width / 2 + this.view.x, this.height / 2 + this.view.y];\n }\n\n protected override clearColor(): [number, number, number, number] {\n // Transparent around a frame, so the host's panel shows there.\n return this.frame ? [0, 0, 0, 0] : [0, 0, 0, 1];\n }\n\n protected override frameGroup(root: Node): Node {\n const frame = this.frame;\n if (!frame) return root;\n const box = { x: -frame.width / 2, y: -frame.height / 2, w: frame.width, h: frame.height };\n if (this.frameBackground === \"black\") {\n this.doc.rect(root, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, fill: { kind: \"solid\", color: [0, 0, 0, 1] } });\n }\n return this.clipToFrame ? this.doc.group(root, { clip: { ...box, r: 0 } }) : root;\n }\n\n /** Hands the last recorded frame to the renderer, once it has started. */\n private present(): void {\n const backend = this.backend, canvas = this.canvas, doc = this.lastDoc;\n if (!backend || !canvas || !doc || this.halted) return;\n const { width, height } = this.size;\n // The viewport (size, scale, clear colour) is written on a full upload,\n // which a resize asks for. A canvas left at another size (see `size`)\n // is configured back.\n const key = `${width}x${height}/${doc.width}/${doc.background.join(\",\")}`;\n if (key !== this.viewportKey || canvas.width !== width || canvas.height !== height) {\n backend.resize(width, height);\n this.viewportKey = key;\n }\n try {\n backend.sync(doc);\n backend.render();\n } catch (e) {\n console.error(\"[wgpu] frame failed:\", e);\n }\n }\n\n private releaseBackend(): void {\n this.starting = null;\n this.startToken = null;\n if (!this.halted) this.backend?.destroy();\n this.backend = null;\n this.viewportKey = \"\";\n }\n\n /** The device was lost: the same canvas, mounted again on the new one (fonts, pipelines and shaders rebuilt). */\n private remount(): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed() || this.halted) return;\n this.releaseBackend();\n this.mount(canvas);\n }\n\n /** The renderer panicked: its WASM is not called again, so the backend is dropped, not freed. */\n private halt(): void {\n this.halted = true;\n this.releaseBackend();\n }\n}\n","// A user shader drawn outside any scene, by this renderer: a shader editor's\n// live preview, a library's thumbnails, an assistant's preview frames. The\n// same compile path and draw as a session's, so what an author sees here is\n// what the canvas and an export show.\n\nimport { loadRendererWasm, WgpuBackend } from \"../backend-wgpu\";\nimport { Doc, type Node, type Paint } from \"../doc\";\nimport { type ShaderDiagnostic, type ShaderReport, type ShaderScope, validateShader as validate } from \"../user-shaders\";\n\nexport type { ShaderDiagnostic, ShaderField, ShaderReport, ShaderScope } from \"../user-shaders\";\n\n/**\n * Validates a WGSL fill or effect with naga (loading the renderer's WASM on\n * first use): diagnostics located in `source`, and the reflected `Params`.\n */\nexport async function validateShader(scope: ShaderScope, source: string, wasmUrl?: string | URL): Promise<ShaderReport> {\n await loadRendererWasm(wasmUrl);\n return validate(scope, source);\n}\n\n/**\n * What the renderer puts in front of an author's code, for an editor to show\n * (the real header also holds the renderer's own, `ms_`-prefixed, code).\n */\nexport const WGSL_PRELUDE: Record<ShaderScope, string> = {\n fill: `// Provided to every WGSL fill:\nstruct FillIn {\n uv: vec2f, // 0–1 across the fill's box, y down\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_texture(uv: vec2f) -> vec4f // the fill's first texture, premultiplied\n\n// You write:\nfn fill(in: FillIn) -> vec4f // premultiplied rgba, opacity not folded in\n`,\n effect: `// Provided to every WGSL effect:\nstruct EffectIn {\n uv: vec2f, // 0–1 across the node's box, y down\n px: vec2f, // device px (what sample_src_px takes)\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n node: vec2f, // 0–1 across the node's own box: turns and scales with it\n node_size: vec2f, // the node's own box, px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_src(uv: vec2f) -> vec4f // the input at box uv: the node's layer, or the backdrop\nfn sample_src_px(px: vec2f) -> vec4f // the same at device px; clamped at the input's edge\n\n// You write:\nfn effect(in: EffectIn) -> vec4f // premultiplied rgba\n`,\n};\n\nexport interface ShaderPreviewInput {\n scope: ShaderScope;\n source: string;\n /** `Params` values by member name. */\n uniforms: Record<string, number | readonly number[]>;\n /** Seconds (`in.time`). */\n time: number;\n /** Effects: run over what is beneath the shape (`mode: \"backdrop\"`) rather than the shape's own content. */\n backdrop?: boolean;\n /** Effects: how the output composites onto the input (core blend name); absent = replaces it. */\n blendMode?: string;\n /** Effects: px the effect may draw or read past the shape. */\n reach?: number;\n /** Effects: the whole frame (default), or an inset rounded rect so the untouched content shows around it. */\n frame?: \"full\" | \"inset\";\n /** The content underneath, cover-fitted, in place of the test pattern (or of nothing, under a fill). */\n image?: ImageBitmap | null;\n /** Before/after: left of `split × width` shows the content without the shader. */\n split?: number | null;\n /** A fill's texture (`sample_texture`). */\n texture?: ImageBitmap | null;\n}\n\nexport interface ShaderStatus {\n state: \"compiling\" | \"ready\" | \"failed\" | \"empty\";\n /** naga's, then the browser's (`getCompilationInfo`). */\n diagnostics: ShaderDiagnostic[];\n}\n\nconst INSET = 0.14;\nconst RADIUS = 0.06;\n/** Coral, green and sky: far apart in hue, so a channel split reads at every edge. */\nconst DISCS: [number, number, number][] = [[0.98, 0.45, 0.4], [0.35, 0.8, 0.5], [0.35, 0.65, 0.98]];\n\n/**\n * One preview surface on its own WebGPU device. `draw` never waits: a program\n * still compiling draws what lies beneath, and the last input is drawn again\n * when it is ready (`onDraw` says so).\n */\nexport class ShaderPreview {\n /** Called after a redraw the preview made by itself (a program became ready). */\n onDraw: (() => void) | null = null;\n private last: ShaderPreviewInput | null = null;\n private images = new WeakMap<ImageBitmap, number>();\n private version = 0;\n private size = \"\";\n\n private constructor(private readonly backend: WgpuBackend, private readonly canvas: HTMLCanvasElement | OffscreenCanvas) {}\n\n static async create(canvas: HTMLCanvasElement | OffscreenCanvas, wasmUrl?: string | URL): Promise<ShaderPreview> {\n await loadRendererWasm(wasmUrl);\n const backend = new WgpuBackend();\n await backend.init(canvas as HTMLCanvasElement, Math.max(1, canvas.width), Math.max(1, canvas.height));\n backend.setOptions(false, false);\n backend.collectUnused = true;\n const preview = new ShaderPreview(backend, canvas);\n backend.onShaderReady = () => {\n if (!preview.last) return;\n preview.draw(preview.last);\n preview.onDraw?.();\n };\n return preview;\n }\n\n /** Draws `input` at the canvas's current size. */\n draw(input: ShaderPreviewInput): ShaderStatus {\n this.last = input;\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n if (this.size !== `${w}x${h}`) {\n this.backend.resize(w, h);\n this.size = `${w}x${h}`;\n }\n const doc = this.build(input, w, h);\n this.backend.sync(doc);\n this.backend.render();\n return this.status(input.scope, input.source);\n }\n\n /** Draws `input` once its program has compiled, and resolves to the frame (straight alpha). */\n async pixels(input: ShaderPreviewInput): Promise<ImageData> {\n this.draw(input);\n await this.whenReady();\n this.draw(input);\n const px = await this.backend.readPixels();\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n const out = Uint8ClampedArray.from(px.subarray(0, w * h * 4));\n for (let i = 0; i < out.length; i += 4) {\n const a = out[i + 3];\n if (a === 0 || a === 255) continue;\n out[i] = (out[i] * 255) / a;\n out[i + 1] = (out[i + 1] * 255) / a;\n out[i + 2] = (out[i + 2] * 255) / a;\n }\n return new ImageData(out, w, h);\n }\n\n /** {@link pixels}, encoded. */\n async snapshot(input: ShaderPreviewInput, type = \"image/png\", quality?: number): Promise<Blob> {\n const image = await this.pixels(input);\n const out = new OffscreenCanvas(image.width, image.height);\n out.getContext(\"2d\")!.putImageData(image, 0, 0);\n return out.convertToBlob({ type, quality });\n }\n\n /** Settles once every program drawn so far is ready or failed. */\n whenReady(): Promise<void> {\n return this.backend.whenShadersReady();\n }\n\n /** A program's state and diagnostics (compiling it if it is new). */\n status(scope: ShaderScope, source: string): ShaderStatus {\n if (!source.trim()) return { state: \"empty\", diagnostics: [] };\n const p = this.backend.shaders.program(scope, source);\n return { state: p.state, diagnostics: [...p.report.diagnostics, ...p.browser] };\n }\n\n destroy(): void {\n this.backend.onShaderReady = undefined;\n this.backend.destroy();\n this.last = null;\n }\n\n private build(input: ShaderPreviewInput, w: number, h: number): Doc {\n const doc = new Doc(w, h, [0, 0, 0, 0]);\n const root = doc.root;\n const content = (parent: Node) => (input.image ? this.cover(doc, parent, input.image, w, h) : pattern(doc, parent, w, h));\n const split = input.split == null ? 0 : Math.min(1, Math.max(0, input.split)) * w;\n if (input.scope === \"fill\") {\n if (input.image) content(root);\n const paint: Paint = {\n kind: \"shader\", source: input.source, uniforms: input.uniforms as Record<string, number | number[]>,\n box: [0, 0, w, h], time: input.time, ...(input.texture ? { texture: this.asset(doc, input.texture) } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n doc.rect(host, { w, h, fill: paint });\n return doc;\n }\n content(root);\n const short = Math.min(w, h);\n const inset = input.frame === \"inset\";\n const m = inset ? short * INSET : 0;\n const box = { x: m, y: m, w: w - 2 * m, h: h - 2 * m, r: inset ? short * RADIUS : 0 };\n const effect = {\n type: \"shader\", language: \"wgsl\", source: input.source, uniforms: input.uniforms,\n mode: input.backdrop ? \"backdrop\" : \"foreground\",\n ...(input.blendMode && !input.backdrop ? { blendMode: input.blendMode } : {}),\n ...(input.reach ? { reach: input.reach } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n const effectBox: [number, number, number, number] = [box.x, box.y, box.w, box.h];\n if (input.backdrop) {\n doc.rect(host, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, radii: [box.r, box.r, box.r, box.r], effects: [effect], effectBox: [0, 0, box.w, box.h], effectTime: input.time });\n } else {\n const g = doc.group(host, { clip: box, effects: [effect], effectBox, effectTime: input.time });\n content(g);\n }\n return doc;\n }\n\n private asset(doc: Doc, bitmap: ImageBitmap) {\n const a = doc.addImage(bitmap, bitmap.width, bitmap.height, { mipmaps: false });\n let v = this.images.get(bitmap);\n if (v === undefined) this.images.set(bitmap, (v = ++this.version));\n a.version = v;\n return a;\n }\n\n private cover(doc: Doc, parent: Node, bitmap: ImageBitmap, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"image\", image: this.asset(doc, bitmap), fit: \"fill\", box: [0, 0, w, h] } });\n }\n}\n\n/**\n * The ruled test pattern an effect is previewed over: a wash with a grid and\n * three saturated discs inside a white ring, because an effect is invisible on\n * a smooth field.\n */\nfunction pattern(doc: Doc, parent: Node, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"linear\", from: [0, 0], to: [w, h], stops: [{ offset: 0, color: [0.16, 0.2, 0.42, 1] }, { offset: 1, color: [0.55, 0.25, 0.45, 1] }] } });\n const short = Math.min(w, h);\n const step = Math.max(12, Math.round(short / 12));\n const line = { kind: \"solid\" as const, color: [1, 1, 1, 0.3] as [number, number, number, number] };\n for (let x = step; x < w; x += step) doc.rect(parent, { transform: [1, 0, 0, 1, x - 0.5, 0], w: 1, h, fill: line });\n for (let y = step; y < h; y += step) doc.rect(parent, { transform: [1, 0, 0, 1, 0, y - 0.5], w, h: 1, fill: line });\n const cx = w / 2, cy = h / 2, r = short * 0.1;\n DISCS.forEach((c, i) => {\n const a = -Math.PI / 2 + (i * 2 * Math.PI) / DISCS.length;\n const x = cx + Math.cos(a) * short * 0.17, y = cy + Math.sin(a) * short * 0.17;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, x - r, y - r], w: 2 * r, h: 2 * r, fill: { kind: \"solid\", color: [...c, 1] } });\n });\n const ring = short * 0.3;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, cx - ring, cy - ring], w: 2 * ring, h: 2 * ring, stroke: { paint: { kind: \"solid\", color: [1, 1, 1, 0.85] }, width: Math.max(1.5, short / 90) } });\n}\n","// @motionscript/renderer: the wgpu renderer that @motionscript/browser's\n// createBrowserEngine() draws with. Hosts use that entry; this one is for it.\n\nimport type { MeasureContext2D, PlatformDeps } from \"@motionscript/core\";\nimport { loadRendererWasm, prewarmDevice } from \"../backend-wgpu\";\nimport { WgpuStorageAdapter } from \"./storage\";\nimport { WgpuSurfaceContext } from \"./surface\";\nimport { measureText, shaperFor } from \"./text\";\n\nexport { onWgpuEvent } from \"./faults\";\nexport type { WgpuEvent } from \"./faults\";\nexport { ShaderPreview, validateShader, WGSL_PRELUDE } from \"./shader-preview\";\nexport type { ShaderDiagnostic, ShaderField, ShaderPreviewInput, ShaderReport, ShaderScope, ShaderStatus } from \"./shader-preview\";\nexport type { WgpuStorageAdapter, WgpuSurfaceContext };\n\nexport interface WgpuRendererOptions {\n /** Where `ms_renderer_bg.wasm` is served; defaults to beside this module. */\n wasmUrl?: string | URL;\n /** Fetches an asset's bytes (images, video, audio, fonts); defaults to `fetch`, rejecting on a failed response. */\n loadBytes?: (src: string) => Promise<Blob>;\n}\n\n/** What a platform draws a session's frames with, and the storage and measurement they read from. */\nexport interface WgpuRenderer {\n createStorageAdapter(deps: PlatformDeps): WgpuStorageAdapter;\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext;\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D;\n dispose?(): void;\n}\n\n/** Whether this browser can run the renderer (WebGPU with an adapter). */\nexport async function isWgpuSupported(): Promise<boolean> {\n const gpu = (navigator as Navigator & { gpu?: { requestAdapter(): Promise<unknown> } }).gpu;\n if (!gpu) return false;\n try {\n return (await gpu.requestAdapter()) != null;\n } catch {\n return false;\n }\n}\n\n/**\n * Loads the renderer's WASM. Rejects where WebGPU is unavailable only once a\n * surface mounts; check {@link isWgpuSupported} first.\n */\nexport async function createWgpuRenderer(options: WgpuRendererOptions = {}): Promise<WgpuRenderer> {\n await loadRendererWasm(options.wasmUrl);\n // Started, not awaited: the device comes up while the host loads fonts and\n // builds its document, and the first mount waits for what is left.\n prewarmDevice().catch(() => {});\n const { loadBytes } = options;\n return {\n createStorageAdapter({ catalog, viewport, fps }: PlatformDeps): WgpuStorageAdapter {\n return new WgpuStorageAdapter(catalog, viewport, fps, loadBytes);\n },\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext {\n return new WgpuSurfaceContext(storage, storage.size);\n },\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D {\n const shaper = shaperFor(storage);\n return { measureText: (...args) => measureText(shaper, ...args) };\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAa,QAAQ;AAMrB,SAAS,IAAI,GAAe;CACxB,IAAI,MAAM,KAAA,GAAW,OAAO;EAAE,GAAG;EAAG,GAAG;EAAG,GAAG;CAAE;CAC/C,IAAI,OAAO,MAAM,UAAU,OAAO;EAAE,GAAG;EAAG,GAAG;EAAG,GAAG;CAAE;CACrD,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO;EAAE,GAAG,EAAE,MAAM;EAAG,GAAG,EAAE,MAAM;EAAG,GAAG,EAAE,MAAM;CAAE;CACxE,MAAM,IAAI;CACV,OAAO;EAAE,GAAG,EAAE,KAAK;EAAG,GAAG,EAAE,KAAK;EAAG,GAAG,EAAE,KAAK;CAAE;AACnD;AAEA,IAAM,QAAgC;CAAE,KAAK;CAAG,KAAK;CAAG,KAAK;CAAG,KAAK;CAAG,KAAK;CAAG,KAAK;AAAE;AACvF,IAAM,OAA+B;CAAE,MAAM;CAAG,QAAQ;CAAG,UAAU;CAAG,QAAQ;CAAG,MAAM;CAAG,KAAK;CAAG,SAAS;AAAE;AAC/G,IAAM,WAAmC;CACrC,KAAK;CAAG,QAAQ;CAAG,OAAO;CAAG,UAAU;CAAG,MAAM;CAAG,OAAO;CAAG,WAAW;CAAG,QAAQ;CAAG,MAAM;CAAG,QAAQ;CACvG,SAAS;CAAI,YAAY;CAAI,OAAO;CAAI,MAAM;CAAI,OAAO;CAAI,WAAW;AAC5E;AACA,IAAM,aAAqC;CAAE,aAAa;CAAG,YAAY;CAAG,aAAa;CAAG,cAAc;AAAE;AAC5G,IAAM,WAAmC;CACrC,OAAO;CAAG,UAAU;CAAG,UAAU;CAAG,SAAS;CAAG,OAAO;CAAG,QAAQ;CAAG,QAAQ;CAAG,WAAW;CAC3F,YAAY;CAAG,QAAQ;CAAG,QAAQ;CAAI,MAAM;CAAI,QAAQ;CAAI,OAAO;CAAI,QAAQ;AACnF;AACA,IAAM,QAAgC;CAAE,SAAS;CAAG,YAAY;CAAG,aAAa;CAAG,OAAO;CAAG,MAAM;CAAG,MAAM;AAAE;AAC9G,IAAM,QAAgC;CAAE,OAAO;CAAG,MAAM;CAAG,MAAM;AAAE;AACnE,IAAM,UAAgC;CAAE,QAAQ;CAAG,UAAU;CAAG,aAAa;CAAG,UAAU;CAAG,MAAM;AAAE;AACrG,IAAM,WAAW;CAAC;CAAO;CAAe;CAAY;CAAS;CAAa;CAAgB;CAAgB;CAAe;CAAU;CAAY;AAAiB;;;;;;AAmBhK,IAAa,eAAb,MAA0B;CACtB,wBAAgB,IAAI,IAAmC;CACvD,OAAe;CACf,UAAqC,CAAC;CACtC,sBAAe,IAAI,IAA4B;CAE/C,GAAG,SAAoB,MAAuB;EAC1C,MAAM,WAAW,iBAAiB,OAAO;EACzC,MAAM,MAAM,SAAS,WAAW,SAAS,MAAM;EAC/C,IAAI,OAAO,KAAK,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,KAAM,uBAAO,IAAI,IAAI,CAAE;EACjD,IAAI,KAAK,KAAK,IAAI,IAAI;EACtB,IAAI,OAAO,KAAA,GAAW;GAClB,KAAK,KAAK;GACV,KAAK,IAAI,MAAM,EAAE;GACjB,MAAM,MAAM;IAAE;IAAI;IAAM,SAAS;GAAS;GAC1C,KAAK,QAAQ,KAAK,GAAG;GACrB,KAAK,IAAI,IAAI,IAAI,GAAG;EACxB;EACA,OAAO;CACX;AACJ;AAEA,IAAM,SAAN,MAAa;CACT,sBAAc,IAAI,YAAY,KAAO;CACrC,MAAc,IAAI,YAAY,KAAK,GAAG;CACtC,MAAc,IAAI,aAAa,KAAK,GAAG;CACvC,IAAI;CAEJ,KAAa,GAAiB;EAC1B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,QAAQ;EACnC,IAAI,OAAO,KAAK,IAAI,aAAa;EACjC,OAAO,OAAO,IAAI,KAAK,IAAI,GAAG,QAAQ;EACtC,MAAM,OAAO,IAAI,YAAY,IAAI;EACjC,IAAI,YAAY,IAAI,EAAE,IAAI,KAAK,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC;EACtD,KAAK,MAAM;EACX,KAAK,MAAM,IAAI,YAAY,IAAI;EAC/B,KAAK,MAAM,IAAI,aAAa,IAAI;CACpC;CACA,EAAE,GAAiB;EAAE,KAAK,KAAK,CAAC;EAAG,KAAK,IAAI,KAAK,OAAO,MAAM;CAAG;CACjE,EAAE,GAA6B;EAAE,KAAK,KAAK,CAAC;EAAG,KAAK,IAAI,KAAK,OAAO,MAAM,KAAA,IAAY,MAAM;CAAG;CAC/F,GAAG,GAAc;EAAE,KAAK,EAAE,EAAE,CAAC;EAAG,KAAK,EAAE,EAAE,CAAC;EAAG,KAAK,EAAE,EAAE,CAAC;CAAG;CAC1D,OAAO,GAA4B;EAC/B,KAAK,KAAK,EAAE,MAAM;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,KAAK,IAAI,KAAK,OAAO,EAAE;CAC9D;CACA,MAAM,GAA4B;EAC9B,KAAK,KAAK,EAAE,MAAM;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,KAAK,IAAI,KAAK,OAAO,EAAE,OAAO;CACrE;CACA,MAAM,GAA4B;EAC9B,IAAI,MAAM,KAAA,GAAW;GAAE,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,CAAC;GAAG;EAAQ;EACtF,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,OAAO,MAAM,WAAW,WAAW,CAAC,IAAK;EAC9D,KAAK,EAAE,CAAC;EAAG,KAAK,EAAE,CAAC;EAAG,KAAK,EAAE,CAAC;EAAG,KAAK,EAAE,CAAC;EAAG,KAAK,EAAE,KAAK,CAAC;CAC7D;CACA,SAAS,GAAiD;EACtD,IAAI,MAAM,KAAA,GAAW;GAAE,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,GAAG;GAAG,KAAK,EAAE,GAAG;GAAG,KAAK,EAAE,GAAG;GAAG;EAAQ;EACjF,IAAI,OAAO,MAAM,UAAU;GAAE,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,CAAC;GAAG,KAAK,EAAE,GAAG;GAAG,KAAK,EAAE,GAAG;GAAG;EAAQ;EACrF,KAAK,EAAE,CAAC;EAAG,KAAK,EAAE,EAAE,EAAE;EAAG,KAAK,EAAE,EAAE,EAAE;EAAG,KAAK,EAAE,EAAE,EAAE;CACtD;CACA,SAAsB;EAAE,OAAO,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC;CAAG;;CAE1D,IAAI,MAAsB;EAAE,OAAO,MAAM,UAAU,KAAK,KAAK,KAAK,IAAI,SAAS,MAAM,KAAK,CAAC,GAAG,GAAG;CAAG;CACpG,KAAK,MAA2B;EAAE,OAAO,KAAK,IAAI,MAAM,MAAM,KAAK,CAAC;CAAG;CACvE,KAAK,MAAc,OAA6B;EAC5C,IAAI,KAAK,IAAI,SAAS,MAAM,QAAQ,OAAO;EAC3C,MAAM,IAAI,KAAK;EACf,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,IAAI,EAAE,OAAO,OAAO,MAAM,IAAI,OAAO;EAC5E,OAAO;CACX;CACA,IAAI,GAAW,GAAiB;EAAE,KAAK,IAAI,KAAK,MAAM;CAAG;CACzD,OAAO,OAAqB;EACxB,KAAK,KAAK,MAAM,CAAC;EACjB,KAAK,IAAI,IAAI,MAAM,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;EACnD,KAAK,KAAK,MAAM;CACpB;AACJ;AAEA,SAAS,eAAe,GAAW,GAAkC;CACjE,IAAI,CAAC,GAAG;EAAE,EAAE,EAAE,CAAC;EAAG;CAAQ;CAC1B,IAAI,QAAQ;CACZ,IAAI,EAAE,aAAa,KAAA,GAAW,SAAS;CACvC,IAAI,EAAE,aAAa,KAAA,GAAW,SAAS;CACvC,IAAI,EAAE,eAAe,KAAA,GAAW,SAAS;CACzC,IAAI,EAAE,UAAU,KAAA,GAAW,SAAS;CACpC,IAAI,EAAE,WAAW,KAAA,GAAW,SAAS;CACrC,IAAI,EAAE,YAAY,OAAO,SAAS;CAClC,IAAI,EAAE,WAAW,KAAA,GAAW,SAAS;CACrC,IAAI,EAAE,gBAAgB,KAAA,GAAW,SAAS;CAC1C,EAAE,EAAE,KAAK;CACT,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,QAAiB,CAAC;CAC5C,IAAI,QAAQ,GAAG;EACX,EAAE,GAAG,IAAI,EAAE,QAAiB,CAAC;EAC7B,EAAE,EAAE,MAAO,EAAE,SAAgC,SAAS,UAAU,CAAC;CACrE;CACA,IAAI,QAAQ,GAAG;EAAE,MAAM,IAAI,EAAE;EAAa,EAAE,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,EAAE,CAAC;CAAG;CAClF,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,KAAc,CAAC;CACzC,IAAI,QAAQ,IAAI,EAAE,GAAG,IAAI,EAAE,MAAe,CAAC;CAC3C,IAAI,QAAQ,IAAI;EACZ,MAAM,IAAI,EAAE;EACZ,EAAE,EAAE,MAAM,QAAQ,IAAI,MAAM,OAAO,IAAI,MAAM,SAAS,IAAI,MAAM,YAAY,IAAI,CAAC;CACrF;CACA,IAAI,QAAQ,KAAK,EAAE,EAAE,EAAE,WAAW;AACtC;AAEA,SAAS,YAAY,GAAW,GAA2B;CACvD,MAAM,IAAI,KAAK,MAAM,EAAE,SAAS,SAAS,CAAC;CAC1C,MAAM,SAAS,EAAE,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,QAAQ,IAAI,MAAM,EAAE,QAAQ,IAAI,MAChF,EAAE,iBAAiB,KAAK;CAC/B,EAAE,EAAE,SAAS,MAAM;CACnB,EAAE,EAAE,KAAK;CACT,EAAE,EAAE,CAAC;CACL,EAAE,EAAE,EAAE,OAAO,UAAU,CAAC;CACxB,EAAE,OAAO,EAAE,QAAQ;CACnB,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;CAC/B,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;CACvB,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK;CAC7B,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;AAChC;AAEA,SAAS,cAAc,GAAW,GAAe,QAA4B;CACzE,QAAQ,EAAE,MAAV;EACI,KAAK;GACD,KAAK,EAAE,gBAAgB,KAAK,GAAG;IAC3B,MAAM,CAAC,IAAI,IAAI,MAAM,WAAW,EAAE,UAAU;KAAC;KAAG;KAAG;IAAC,CAAC;IACrD,YAAY,GAAG,mBAAmB;KAC9B,OAAO,EAAE,SAAS;KAAG,QAAQ,EAAE,UAAU;KAAG,OAAO,EAAE,SAAS;KAC9D,QAAQ,EAAE;KAAe,UAAU;MAAC;MAAI;MAAI;KAAE;IAClD,CAAC,CAAC;IACF;GACJ;GACA,EAAE,EAAE,SAAS,GAAG;GAAG,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,SAAS,EAAE,QAAQ;GACnF;EAEJ,KAAK;GACD,EAAE,EAAE,SAAS,MAAM;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC1D,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,EAAE,EAAE,aAAa;GAAG,EAAE,EAAE,EAAE,aAAa;GAC1E;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,KAAK;GAAG,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GACvE;EACJ,KAAK,YAAY;GACb,MAAM,CAAC,KAAK,UAAU,cAAc,EAAE,MAAM;GAC5C,EAAE,EAAE,SAAS,QAAQ;GAAG,EAAE,EAAE,GAAG;GAAG,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GACnF,EAAE,EAAE,EAAE,WAAW,QAAQ,IAAI,CAAC;GAAG,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAC/D;EACJ;EACA,KAAK;GACD,EAAE,EAAE,SAAS,IAAI;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GACvE,EAAE,EAAE,EAAE,WAAW,QAAQ,IAAI,CAAC;GAAG,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAC/D;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,KAAK;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,SAAS;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC3E,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAC9B;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,SAAS;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,SAAS;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC/E,EAAE,EAAE,EAAE,WAAW,EAAE;GAAG,EAAE,EAAE,EAAE,WAAW,EAAE;GACzC;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,MAAM;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GAAG,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAC3F;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,IAAI;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,WAAW;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC5E,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GAC9B;EACJ,KAAK;GACD,YAAY,GAAG,CAAC;GAChB;EACJ,KAAK;GACD,YAAY,GAAG,mBAAmB,CAAC,CAAC;GACpC;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,OAAO;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC1E;EACJ,KAAK;GAGD,EAAE,EAAE,SAAS,UAAU;GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,kBAAkB,CAAC;GAAG,EAAE,EAAE,EAAE,MAAM;GACtF,EAAE,EAAE,EAAE,aAAa,KAAA,IAAY,IAAI,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;GACjE;EAEJ,KAAK;GACD,EAAE,EAAE,SAAS,KAAK;GAAG,EAAE,EAAE,EAAE,OAAO,MAAM;GACxC,KAAK,MAAM,KAAK,EAAE,QAAQ;IAAE,MAAM,IAAI,IAAI,CAAU;IAAG,EAAE,EAAE,EAAE,CAAC;IAAG,EAAE,EAAE,EAAE,CAAC;GAAG;GAC3E,EAAE,SAAS,EAAE,QAAQ;GAAG,EAAE,EAAE,EAAE,UAAU;GAAG,EAAE,EAAE,EAAE,KAAK;GACtD;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,IAAI;GAAG,EAAE,EAAE,EAAE,OAAO,MAAM;GACvC,KAAK,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAU,CAAC;GAC9C,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC;GAAG,EAAE,EAAE,EAAE,MAAM;GAAG,EAAE,SAAS,EAAE,QAAQ;GAC3D;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,KAAK;GAAG,EAAE,EAAE,EAAE,cAAc;GACzC,cAAc,GAAG,EAAE,QAAQ,MAAM;GACjC;EACJ,KAAK;GACD,EAAE,EAAE,SAAS,SAAS;GACtB,cAAc,GAAG,EAAE,QAAQ,MAAM;GACjC;EACJ;GACI,OAAO,YAAY,IAAI,YAAY,EAAE,MAAM;GAC3C,EAAE,EAAE,GAAG;CACf;AACJ;;;AAIA,SAAS,SAAS,GAA6C;CAC3D,QAAQ,EAAE,MAAV;EACI,KAAK;EAAU,KAAK,cAAc,OAAO;EACzC,KAAK,OAAO,QAAQ,EAAE,gBAAgB,KAAK,IAAI,YAAY;EAC3D,KAAK;EAAS,KAAK,aAAa,OAAO,SAAS,EAAE,MAAM,MAAM,UAAU,UAAU;EAClF,SAAS,OAAO;CACpB;AACJ;;AAGA,SAAS,UAAU,GAAuB;CACtC,MAAM,MAAM;CACZ,IAAI,MAAc,EAAE;CACpB,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,EAAE,KAAK,GAAG;EACrC,MAAM,IAAI,IAAI;EACd,IAAI,MAAM,UAAU,MAAM,cAAc,MAAM,gBAAgB,MAAM,KAAA,KAAa,OAAO,MAAM,YAAY;EAC1G,IAAI,MAAM,UAAU,OAAO,WAAW,UAAU,CAAe;OAC1D,IAAI,YAAY,OAAO,CAAC,KAAM,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAI,OAAO,IAAI,EAAE,GAAI,EAAwB;OAC1G,OAAO,IAAI,EAAE,GAAG,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC;CAC7E;CACA,OAAO;AACX;AAUA,SAAS,SAAS,GAAmC;CACjD,IAAI,EAAE,SAAS,UAAU,OAAO,CAAC;CACjC,OAAO;EAAC,EAAE;EAAU,EAAE;EAAQ,EAAE;EAAI,EAAE;EAAO,EAAE;EAAO,EAAE;CAAc;AAC1E;;;;;;;;;;;;;;AAeA,IAAa,gBAAb,MAA2B;CACvB,OAAe;CACf,wBAAgB,IAAI,IAAoB;CACxC,wBAAgB,IAAI,IAAkB;CACtC,uBAAe,IAAI,IAAY;CAC/B,sBAAc,IAAI,IAAoB;CACtC,OAAe,IAAI,OAAO;CAC1B,QAAgB;;CAGhB,QAAc;EACV,KAAK,KAAK,MAAM;EAChB,KAAK,IAAI,MAAM;EACf,KAAK,KAAK,IAAI;EACd,KAAK,QAAQ;CACjB;;CAGA,IAAI,GAAiB;EACjB,EAAE,EAAE,KAAK,KAAK;EACd,EAAE,OAAO,KAAK,IAAI;EAClB,KAAK,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,GAAG,KAAK,MAAM,OAAO,CAAC;EAC7E,KAAK,MAAM,CAAC,GAAG,MAAM,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,EAAE,GAAG,KAAK,MAAM,OAAO,CAAC;CAClF;;CAGA,IAAI,GAAe,OAAe,MAAc,QAA8B;EAC1E,MAAM,IAAI,KAAK;EACf,MAAM,QAAQ,SAAS,CAAC;EACxB,IAAI,UAAU,QAAQ;GAClB,IAAI;GACJ,IAAI,UAAU,WAAW;IACrB,MAAM,IAAI;IACV,MAAM,WAAW,EAAE,MAAM,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,aAAa,GAAG,KAAK,UAAU,EAAE,QAAQ;IAC9F,MAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;IAChC,IAAI,UAAU,KAAA,GAAW,OAAO,KAAK,IAAI,KAAK;GAClD;GACA,MAAM,QAAQ,EAAE;GAChB,EAAE,EAAE,CAAC;GACL,cAAc,GAAG,GAAG,MAAM;GAC1B,QAAQ,EAAE,IAAI,QAAQ,CAAC;GACvB,MAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;GAChC,IAAI,UAAU,KAAA,GAAW;IACrB,EAAE,IAAI;IACN,OAAO,KAAK,IAAI,KAAK;GACzB;GACA,MAAM,KAAK,KAAK,IAAI,KAAK;GACzB,KAAK,MAAM,IAAI,KAAK,EAAE;GACtB,OAAO;EACX;EACA,MAAM,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;EAC5C,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK;EAChC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC;EACxB,MAAM,MAAM,GAAG,KAAK,GAAG;EACvB,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG;EAC/B,MAAM,WAAY,EAA4B;EAC9C,MAAM,SAAS,SAAS,CAAC;EACzB,IAAI,QAAQ,KAAK,aAAa,UAAU;GACpC,IAAI,EAAE,SAAS,gBAAgB,aAAa,KAAA,GAAW,OAAO,KAAK,IAAI,KAAK,EAAE;GAC9E,IAAI,EAAE,SAAS,aAAa,aAAa,KAAA,KAAa,EAAE,eAAe,SAChE,OAAO,OAAO,GAAG,MAAM,MAAM,KAAK,OAAO,EAAE,GAAG,OAAO,KAAK,IAAI,KAAK,EAAE;EAChF;EACA,MAAM,QAAQ,EAAE;EAChB,EAAE,EAAE,CAAC;EACL,cAAc,GAAG,GAAG,MAAM;EAC1B,IAAI,QAAQ,EAAE,KAAK,QAAQ,GAAG,KAAK,KAAK,GAAG;GACvC,EAAE,IAAI;GACN,KAAK,WAAW;GAChB,KAAK,SAAS;GACd,OAAO,KAAK,IAAI,KAAK,EAAE;EAC3B;EACA,MAAM,KAAK,KAAK,IAAI,KAAK;EACzB,KAAK,MAAM,IAAI,KAAK;GAAE;GAAI;GAAU;GAAQ,OAAO,EAAE,KAAK,QAAQ,CAAC;EAAE,CAAC;EACtE,OAAO;CACX;CAEA,IAAY,IAAoB;EAC5B,KAAK,KAAK,IAAI,EAAE;EAChB,OAAO;CACX;;CAGA,IAAY,OAAuB;EAC/B,MAAM,KAAK,KAAK;EAChB,KAAK,KAAK,IAAI,OAAO,EAAE;EACvB,KAAK;EACL,OAAO,KAAK,IAAI,EAAE;CACtB;AACJ;AAEA,IAAM,OAA+B;CAAE,OAAO;CAAG,QAAQ;CAAG,QAAQ;AAAE;AAEtE,SAAS,KAAK,GAAY,GAA6B;CACnD,IAAI,MAAM,KAAA,GAAW,OAAO,CAAC,GAAG,CAAC;CACjC,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,CAAC;CAClD,MAAM,IAAI;CACV,OAAO,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC;AAC9B;;AAGA,SAAS,SAAS,GAAW,KAA4B,UAAoC,QAA4B;CACrH,IAAI,QAAQ,KAAA,KAAa,CAAC,UAAU;EAChC,IAAI,QAAQ,KAAA,GAAW,OAAO,YAAY,IAAI,aAAa;EAC3D,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EAAG,EAAE,EAAE,CAAC;EACrE;CACJ;CACA,MAAM,IAAI,iBAAiB,GAAG;CAC9B,MAAM,OAAO,EAAE,eAAe;CAC9B,EAAE,EAAE,CAAC;CACL,EAAE,EAAE,SAAS,GAAG,KAAK,IAAI,CAAC;CAC1B,MAAM,CAAC,IAAI,MAAM,KAAK,EAAE,QAAQ,CAAC;CACjC,MAAM,CAAC,IAAI,MAAM,KAAK,EAAE,QAAQ,CAAC;CACjC,MAAM,CAAC,IAAI,MAAM,KAAK,EAAE,QAAQ,CAAC;CACjC,MAAM,KAAM,EAAE,YAAY,KAAK,KAAK,KAAM;CAC1C,MAAM,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACrC,EAAE,EAAE,KAAK,CAAC;CAAG,EAAE,EAAE,KAAK,CAAC;CAAG,EAAE,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,EAAE;CAC/D,EAAE,EAAE,CAAC,KAAK,CAAC;CAAG,EAAE,EAAE,KAAK,CAAC;CAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,MAAM,KAAK,EAAE;CAGjE,MAAM,OAAO,EAAE,SAAS,EAAE,UAAU;CACpC,EAAE,GAAG,KAAK,EAAE,SAAS,YAAY,MAAO,KAAK,EAAE,SAAS,YAAY,MAAM,KAAM,OAAO,KAAK,MACrF,EAAE,cAAc,YAAY,KAAK,MAAM,EAAE,cAAc,YAAY,KAAK,EAAE;AACrF;AAEA,SAAS,cAAc,GAAW,GAAe,QAAsB,UAA+B;CAClG,MAAM,MAAM;CACZ,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC;CACzB,IAAI,CAAC;EAAC;EAAS;EAAY;EAAY;EAAW;EAAS;EAAU;EAAa;EAAc;EAAU;EAAU;EAAU;EAAQ;CAAO,EAAE,SAAS,EAAE,IAAI,GAC1J,OAAO,YAAY,IAAI,YAAY,EAAE,MAAM;CAE/C,KAAK,MAAM,KAAK,UAAU,IAAI,MAAM,SAAS,MAAM,iBAAiB,IAAI,OAAO,KAAA,GAAW,OAAO,YAAY,IAAI,WAAW,GAAG;CAC/H,IAAI,IAAI,gBAAgB,KAAA,KAAa,EAAE,SAAS,QAAQ,OAAO,YAAY,IAAI,qBAAqB;CAEpG,KAAK,MAAM,KAAK;EAAC;EAAS;EAAe;EAAc;CAAY,GAC/D,IAAI,OAAO,IAAI,OAAO,YAAa,IAAI,KAAgB,GAAG,OAAO,YAAY,IAAI,YAAY,GAAG;CAEpG,EAAE,MAAM,IAAI,KAA0B;CACtC,EAAE,EAAE,IAAI,OAA6B;CACrC,EAAE,EAAE,IAAI,SAA+B;CACvC,EAAE,EAAE,IAAI,SAA+B;CACvC,EAAE,MAAM,IAAI,QAA6B;CACzC,EAAE,EAAE,IAAI,gBAAsC;CAC9C,EAAE,EAAE,IAAI,eAAqC;CAC7C,IAAI,QAAQ;CACZ,IAAI,IAAI,gBAAgB,MAAM,SAAS;CACvC,IAAI,IAAI,cAAc,MAAM,SAAS;CACrC,IAAI,IAAI,iBAAiB,MAAM,SAAS;CACxC,IAAI,IAAI,YAAY,QAAQ,SAAS;CACrC,IAAI,IAAI,eAAe,OAAO,SAAS;CACvC,IAAI,IAAI,YAAY,OAAO,SAAS;CACpC,IAAI,IAAI,cAAc,OAAO,SAAS;CACtC,IAAI,IAAI,eAAe,KAAA,GAAW,SAAS,OAAO,IAAI,aAAa,MAAM;CACzE,IAAI,IAAI,oBAAoB,OAAO,SAAS;CAC5C,EAAE,EAAE,KAAK;CACT,EAAE,EAAE,MAAO,IAAI,SAAoB,YAAY,CAAC;CAChD,EAAE,EAAE,QAAO,IAAI,SAAoB,aAAa,CAAC;CACjD,EAAE,EAAE,IAAI,SAA+B;CACvC,EAAE,EAAE,IAAI,IAA0B;CAClC,EAAE,MAAM,IAAI,QAA6B;CACzC,EAAE,EAAE,IAAI,SAA+B;CACvC,SAAS,GAAG,IAAI,KAA8B,UAAU,MAAM;CAE9D,EAAE,EAAE,IAAI,SAA+B;CACvC,EAAE,EAAE,IAAI,kBAAwC;CAChD,EAAE,EAAE,IAAI,YAAkC;CAC1C,EAAE,EAAE,IAAI,SAA+B;CACvC,EAAE,EAAE,IAAI,GAAyB;CACjC,EAAE,EAAE,IAAI,mBAAyC;CACjD,EAAE,MAAM,IAAI,gBAAqC;CACjD,EAAE,EAAE,IAAI,QAA8B;CACtC,EAAE,EAAE,IAAI,OAA6B;CACrC,EAAE,EAAE,IAAI,KAA2B;CACnC,SAAS,GAAG,EAAE,SAAS,SAAS,IAAI,cAAuC,KAAA,GAAW,UAAU,MAAM;AAC1G;AAEA,SAAS,WAAW,GAAW,GAAgB,GAAkC;CAC7E,MAAM,MAAM;CACZ,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC;CACtB,EAAE,MAAM,IAAI,KAA0B;CACtC,EAAE,EAAE,EAAE,SAAS;CACf,EAAE,MAAM,IAAI,GAAwB;CACpC,EAAE,MAAM,IAAI,MAA2B;CACvC,EAAE,EAAE,IAAI,QAA8B;CACtC,EAAE,EAAE,IAAI,KAA2B;CACnC,EAAE,EAAE,IAAI,KAA2B;CACnC,EAAE,EAAE,IAAI,QAA8B;CACtC,MAAM,SAAS,IAAI;CACnB,EAAE,EAAE,WAAW,KAAA,IAAY,IAAI,CAAC;CAChC,EAAE,GAAG,IAAI,MAAM,CAAC;CAChB,MAAM,WAAW,IAAI;CACrB,MAAM,UAAU,aAAa,KAAA,IAAY,OAAO,uBAAuB,QAAQ;CAC/E,EAAE,EAAE,UAAU,IAAI,CAAC;CACnB,EAAE,EAAE,SAAS,QAAQ;CACrB,EAAE,EAAE,SAAS,MAAM;CACnB,EAAE,EAAE,IAAI,KAA2B;CACnC,EAAE,EAAE,IAAI,MAA4B;CACpC,eAAe,GAAG,CAAC;AACvB;AAEA,SAAS,YAAY,GAAW,GAAuB;CACnD,EAAE,EAAE,EAAE,SAAS,iBAAiB,IAAI,CAAC;CACrC,MAAM,YAAY,uBAAuB,CAAC;CAC1C,eAAe,GAAG;EAAE,GAAG;EAAG,UAAU,UAAU;EAAU,QAAQ,UAAU;CAAO,CAAC;CAClF,EAAE,EAAE,EAAE,SAAS,gBAAgB,EAAE,MAAM,KAAA,CAAS;CAChD,EAAE,EAAE,EAAE,IAAI;CACV,EAAE,EAAE,EAAE,SAAS,iBAAiB,EAAE,gBAAgB,KAAA,CAAS;CAC3D,EAAE,EAAE,EAAE,IAAI;CACV,EAAE,EAAE,EAAE,GAAG;CACT,EAAE,EAAE,EAAE,QAAQ;AAClB;;;;;;AAOA,SAAgB,cACZ,OACA,SAAuB,EAAE,6BAAa,IAAI,IAAI,EAAE,GAChD,UACA,YACW;CACX,MAAM,IAAI,IAAI,OAAO;CACrB,YAAY,MAAM;CAElB,MAAM,SAAmB,CAAC,EAAE;CAC5B,MAAM,YAAY,GAAe,SAAiB;EAC9C,IAAI,CAAC,YAAY,OAAO,cAAc,GAAG,GAAG,MAAM;EAClD,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,WAAW,IAAI,GAAG,OAAO,OAAO,SAAS,IAAI,MAAM,MAAM,CAAC;CAClE;CACA,EAAE,EAAE,KAAK;CACT,EAAE,EAAA,CAAS;CAEX,MAAM,OAAO,MAAM,aAAa;CAChC,EAAE,EAAE,KAAK,MAAM,WAAW,WAAW,CAAC;CACtC,EAAE,EAAE,MAAM,QAAQ;CAClB,MAAM,UAAU,MAAM,eAAe;CACrC,EAAE,EAAE,SAAS,YAAY,OAAO,IAAI,CAAC;CACrC,EAAE,EAAE,SAAS,YAAY,QAAQ,IAAI,SAAS,YAAY,SAAS,IAAI,CAAC;CACxE,MAAM,MAAM,MAAM,cAAc;CAChC,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,YAAY,KAAA,IAAY,IAAI,CAAC;CAChD,EAAE,MAAM,KAAK,KAAK;CAClB,EAAE,EAAE,KAAK,IAAI;CACb,EAAE,EAAE,KAAK,GAAG;CACZ,EAAE,EAAE,KAAK,OAAO;CAChB,MAAM,MAAM,MAAM,sBAAsB;CACxC,EAAE,EAAE,KAAK,WAAW,WAAW,IAAI,CAAC;CACpC,EAAE,EAAE,KAAK,SAAS;CAClB,EAAE,EAAE,KAAK,aAAa,IAAI,CAAC;CAC3B,EAAE,EAAE,KAAK,IAAI;CACb,IAAI,MAAM,YAAY,EAAE,SAAS,GAAG,OAAO,YAAY,IAAI,MAAM;CAEjE,MAAM,MAAM,MAAM,IAAI;CACtB,EAAE,EAAE,IAAI,MAAM;CACd,KAAK,MAAM,MAAM,KACb,QAAQ,GAAG,MAAX;EACI,KAAK,QAAQ;GACT,MAAM,MAAO,GAAG,WAA6C;GAC7D,OAAO,KAAK,QAAQ,KAAA,IAAY,GAAG,OAAO,OAAO,SAAS,GAAG,GAAG,OAAO,WAAW,OAAO,GAAG,CAAC;GAC7F,EAAE,EAAE,CAAC;GAAG,eAAe,GAAG,GAAG,SAAS;GACtC;EACJ;EACA,KAAK;GAAO,IAAI,OAAO,SAAS,GAAG,OAAO,IAAI;GAAG,EAAE,EAAE,CAAC;GAAG;EACzD,KAAK;GACD,EAAE,EAAE,CAAC;GAAG,WAAW,GAAG,GAAG,OAAO,GAAG,SAAS;GAC5C;EACJ,KAAK;GAAU,EAAE,EAAE,CAAC;GAAG,YAAY,GAAG,GAAG,MAAM;GAAG;EAClD,KAAK,QAAQ;GACT,EAAE,EAAE,CAAC;GACL,SAAS,GAAG,UAAU,GAAG,IAAI;GAC7B,MAAM,OAAO,MAAM,QAAQ,GAAG,QAAQ,IAAK,GAAG,WAAqC,CAAC,GAAG,QAAsB;GAC7G,EAAE,EAAE,MAAM,QAAQ,GAAG,QAAQ,IAAI,KAAK,SAAS,CAAC;GAChD,KAAK,MAAM,KAAK,MAAM,cAAc,GAAG,GAAG,QAAQ,QAAQ;GAC1D,eAAe,GAAG,GAAG,SAAS;GAC9B;EACJ;EACA,KAAK,aAAa;GACd,EAAE,EAAE,CAAC;GACL,SAAS,GAAG,UAAU,GAAG,IAAI;GAC7B,cAAc,GAAG,GAAG,UAAU,QAAQ,QAAQ;GAC9C,eAAe,GAAG,GAAG,SAAS;GAC9B,EAAE,EAAE,GAAG,UAAU,MAAM;GACvB,KAAK,MAAM,KAAK,GAAG,WAAW,eAAe,GAAG,CAAC;GACjD,MAAM,SAAS,GAAG,UAAU,CAAC;GAC7B,EAAE,EAAE,OAAO,MAAM;GACjB,KAAK,MAAM,KAAK,QAAQ;IACpB,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,OAAO,MAAM,WAAW,WAAW,CAAC,IAAK;IAC9D,EAAE,EAAE,CAAC;IAAG,EAAE,EAAE,CAAC;IAAG,EAAE,EAAE,CAAC;IAAG,EAAE,EAAE,KAAK,CAAC;GACtC;GACA;EACJ;EACA,KAAK;GACD,EAAE,EAAE,CAAC;GAAG,SAAS,GAAG,UAAU,GAAG,IAAI;GAAG,cAAc,GAAG,GAAG,UAAU,QAAQ,QAAQ;GACtF,eAAe,GAAG,GAAG,SAAS;GAC9B;EACJ,KAAK;GACD,EAAE,EAAE,CAAC;GAAG,SAAS,GAAG,UAAU,GAAG,IAAI;GAAG,cAAc,GAAG,GAAG,UAAU,QAAQ,QAAQ;GACtF,EAAE,EAAE,GAAG,SAAS,aAAa,IAAI,GAAG,SAAS,SAAS,IAAI,CAAC;GAC3D,eAAe,GAAG,GAAG,SAAS;GAC9B;EACJ,KAAK;GACD,EAAE,EAAE,CAAC;GAAG,cAAc,GAAG,GAAG,UAAU,QAAQ,QAAQ;GAAG,eAAe,GAAG,GAAG,SAAS;GACvF;EACJ,KAAK;GACD,OAAO,YAAY,IAAI,OAAO;GAC9B,EAAE,EAAE,EAAE;GAAG,eAAe,GAAG,GAAG,SAAS;GACvC;CACR;CAEJ,IAAI,YAAY,WAAW,IAAI,CAAC;MAC3B,EAAE,EAAE,CAAC;CACV,OAAO,EAAE,OAAO;AACpB;;;ACznBA,IAAa,SAAb,MAAoB;CAChB,qBAAqB;EACjB,MAAM,MAAM,KAAK;EACjB,KAAK,YAAY;EACjB,mBAAmB,WAAW,IAAI;EAClC,OAAO;CACX;CACA,OAAO;EACH,MAAM,MAAM,KAAK,mBAAmB;EACpC,OAAK,kBAAkB,KAAK,CAAC;CACjC;;;;;;;;;CASA,WAAW,MAAM,OAAO,MAAM,QAAQ;EAClC,MAAM,MAAM,OAAK,kBAAkB,KAAK,WAAW,MAAM,OAAO,MAAM,MAAM;EAC5E,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;;;;;;;;CAaA,OAAO,MAAM,MAAM,UAAU,aAAa,OAAO,WAAW,WAAW;EACnE,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM;EAClC,IAAI;GACA,OAAO,kBAAkB,MAAM,OAAK,mBAAmB,OAAK,kBAAkB;GAC9E,OAAO;GACP,OAAO,oBAAoB,MAAM,OAAK,iBAAiB;GACvD,OAAO;GACP,OAAO,kBAAkB,UAAU,OAAK,mBAAmB,OAAK,kBAAkB;GAClF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,MAAM,MAAM,OAAK,cAAc,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EACzG,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;;;;;;CAWA,aAAa,MAAM,MAAM,QAAQ,QAAQ,gBAAgB,OAAO;EAC5D,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,IAAI,MAAM,MAAM,MAAM;EACtB,IAAI;GACA,OAAO,kBAAkB,MAAM,OAAK,mBAAmB,OAAK,kBAAkB;GAC9E,OAAO;GACP,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GAChF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,MAAM,MAAM,OAAK,oBAAoB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EACnG,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;CACA,cAAc;EACV,MAAM,MAAM,OAAK,WAAW;EAC5B,KAAK,YAAY;EACjB,mBAAmB,SAAS,MAAM,KAAK,WAAW,IAAI;EACtD,OAAO;CACX;;;;;;;CAOA,cAAc,OAAO,QAAQ;EACzB,IAAI,MAAM,MAAM,MAAM;EACtB,IAAI;GACA,OAAO,kBAAkB,OAAO,OAAK,iBAAiB;GACtD,OAAO;GACP,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GAChF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EAEA,OADY,OAAK,qBAAqB,KAAK,WAAW,MAAM,MAAM,MAAM,IACjE;CACX;;;;CAIA,sBAAsB,KAAK;EACvB,MAAM,OAAO,mBAAmB,KAAK,OAAK,iBAAiB;EAC3D,MAAM,OAAO;EACb,OAAK,6BAA6B,KAAK,WAAW,MAAM,IAAI;CAChE;;;;;CAKA,qBAAqB,QAAQ,KAAK;EAC9B,IAAI,MAAM,MAAM,MAAM;EACtB,IAAI;GACA,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GAChF,OAAO;GACP,OAAO,mBAAmB,KAAK,OAAK,iBAAiB;GACrD,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,OAAK,4BAA4B,KAAK,WAAW,MAAM,MAAM,MAAM,IAAI;CAC3E;;;;;;;;;;;;;;;;;;CAkBA,WAAW,MAAM,MAAM,UAAU,WAAW,eAAe,aAAa,OAAO,QAAQ,MAAM,OAAO,QAAQ;EACxG,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,QAAQ,CAAC;EACf,MAAM,QAAQ,CAAC;EACf,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM;EAClC,IAAI;GACA,OAAO,kBAAkB,MAAM,OAAK,mBAAmB,OAAK,kBAAkB;GAC9E,OAAO;GACP,OAAO,oBAAoB,MAAM,OAAK,iBAAiB;GACvD,OAAO;GACP,OAAO,kBAAkB,UAAU,OAAK,mBAAmB,OAAK,kBAAkB;GAClF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,MAAM,MAAM,OAAK,kBAAkB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,KAAK;EACvI,IAAI,MAAM,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACrD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;;;;;;;;;;;CAgBA,aAAa,MAAM,MAAM,UAAU,aAAa,OAAO,QAAQ;EAC3D,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;EAC9C,IAAI;GACA,OAAO,kBAAkB,MAAM,OAAK,mBAAmB,OAAK,kBAAkB;GAC9E,OAAO;GACP,OAAO,oBAAoB,MAAM,OAAK,iBAAiB;GACvD,OAAO;GACP,OAAO,kBAAkB,UAAU,OAAK,mBAAmB,OAAK,kBAAkB;GAClF,OAAO;GACP,OAAO,oBAAoB,QAAQ,OAAK,iBAAiB;GACzD,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,MAAM,MAAM,OAAK,oBAAoB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EAC/G,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;AACJ;AACA,IAAI,OAAO,SAAS,OAAO,UAAU,OAAO,WAAW,OAAO,UAAU;AAExE,IAAa,WAAb,MAAa,SAAS;CAClB,OAAO,OAAO,KAAK;EACf,MAAM,MAAM,OAAO,OAAO,SAAS,SAAS;EAC5C,IAAI,YAAY;EAChB,qBAAqB,SAAS,KAAK,IAAI,WAAW,GAAG;EACrD,OAAO;CACX;CACA,qBAAqB;EACjB,MAAM,MAAM,KAAK;EACjB,KAAK,YAAY;EACjB,qBAAqB,WAAW,IAAI;EACpC,OAAO;CACX;CACA,OAAO;EACH,MAAM,MAAM,KAAK,mBAAmB;EACpC,OAAK,oBAAoB,KAAK,CAAC;CACnC;;;;CAIA,eAAe;EACX,IAAI;EACJ,IAAI;EACJ,IAAI;GACA,MAAM,MAAM,OAAK,sBAAsB,KAAK,SAAS;GACrD,cAAc,IAAI;GAClB,cAAc,IAAI;GAClB,OAAO,mBAAmB,IAAI,IAAI,IAAI,EAAE;EAC5C,UAAU;GACN,OAAK,gBAAgB,aAAa,aAAa,CAAC;EACpD;CACJ;;;;;CAKA,MAAM,OAAO;EACT,MAAM,MAAM,OAAK,eAAe,KAAK,WAAW,KAAK;EACrD,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;CAE5C;;;;;;;;CAQA,OAAO,OAAO,QAAQ,OAAO,QAAQ;EAEjC,OADY,OAAK,gBAAgB,QAAQ,OAAO,MACzC;CACX;;;;;;;;CAQA,aAAa,WAAW;EAEpB,OADY,OAAK,sBAAsB,KAAK,WAAW,SAChD,MAAQ;CACnB;;;;CAIA,iBAAiB;EAEb,OADY,OAAK,wBAAwB,KAAK,SACvC,MAAQ;CACnB;;;;;CAKA,eAAe;EACX,MAAM,MAAM,OAAK,sBAAsB,KAAK,SAAS;EACrD,IAAI,KAAK,yBAAyB,IAAI,IAAI,IAAI,EAAE;EAChD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;CAMA,OAAO,gBAAgB;EACnB,OAAK,uBAAuB;CAChC;;;;CAIA,WAAW,IAAI;EACX,OAAK,oBAAoB,KAAK,WAAW,EAAE;CAC/C;;;;;CAKA,aAAa;EAET,OADY,OAAK,oBAAoB,KAAK,SACnC;CACX;;;;;CAKA,aAAa;EACT,OAAK,oBAAoB,KAAK,SAAS;CAC3C;;;;;;;;;;;CAWA,aAAa,MAAM,MAAM,QAAQ,QAAQ,gBAAgB,OAAO;EAC5D,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,IAAI,MAAM,MAAM,MAAM;EACtB,IAAI;GACA,OAAO,kBAAkB,MAAM,OAAK,mBAAmB,OAAK,kBAAkB;GAC9E,OAAO;GACP,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GAChF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EACA,MAAM,MAAM,OAAK,sBAAsB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;EACrG,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;CAKA,OAAO,UAAU;EAEb,OADY,OAAK,iBACV;CACX;;;;;;CAMA,cAAc;EAEV,OADY,OAAK,qBAAqB,KAAK,SACpC;CACX;;;;;;;;CAQA,cAAc,OAAO,QAAQ;EACzB,IAAI,MAAM,MAAM,MAAM;EACtB,IAAI;GACA,OAAO,kBAAkB,OAAO,OAAK,iBAAiB;GACtD,OAAO;GACP,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GAChF,OAAO;EACX,SAAS,GAAG;GACR,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,IAAI,MAAQ,OAAK,gBAAgB,MAAM,OAAO,GAAG,CAAC;GAClD,MAAM;EACV;EAEA,OADY,OAAK,uBAAuB,KAAK,WAAW,MAAM,MAAM,MAAM,IACnE;CACX;;;;CAIA,SAAS;EACL,MAAM,MAAM,OAAK,gBAAgB,KAAK,SAAS;EAC/C,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;CAE5C;;;;;CAKA,OAAO,OAAO,QAAQ;EAClB,OAAK,gBAAgB,KAAK,WAAW,OAAO,MAAM;CACtD;;;;;;;;;CASA,aAAa,OAAO,KAAK,OAAO,MAAM;EAClC,OAAK,sBAAsB,KAAK,WAAW,OAAO,KAAK,OAAO,IAAI;CACtE;;;;;;;;;;CAUA,eAAe,OAAO,KAAK,MAAM,OAAO,QAAQ,MAAM;EAClD,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,kBAAkB,MAAM,OAAK,iBAAiB;EAC3D,MAAM,OAAO;EACb,OAAK,wBAAwB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;CACzF;;;;;;CAMA,gBAAgB,IAAI;EAChB,MAAM,MAAM,OAAK,yBAAyB,KAAK,WAAW,EAAE;EAC5D,IAAI,KAAK,yBAAyB,IAAI,IAAI,IAAI,EAAE;EAChD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;CAKA,YAAY,QAAQ,QAAQ;EACxB,OAAK,qBAAqB,KAAK,WAAW,QAAQ,MAAM;CAC5D;;;;;;;;;;CAUA,YAAY,IAAI,OAAO,QAAQ,OAAO;EAClC,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,mBAAmB,OAAO,OAAK,iBAAiB;EAC7D,MAAM,OAAO;EACb,MAAM,MAAM,OAAK,qBAAqB,KAAK,WAAW,MAAM,MAAM,MAAM,MAAM,IAAI;EAClF,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;CAE5C;;;;;;;;;;CAUA,YAAY,IAAI,MAAM,OAAO,QAAQ;EACjC,OAAK,qBAAqB,KAAK,WAAW,IAAI,MAAM,OAAO,MAAM;CACrE;;;;;;;;;;;;CAYA,WAAW,IAAI,MAAM,QAAQ;EACzB,IAAI;EACJ,IAAI;EACJ,IAAI;GACA,MAAM,OAAO,CAAC;GACd,MAAM,OAAO,CAAC;GACd,MAAM,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;GACtF,MAAM,OAAO;GACb,MAAM,MAAM,OAAK,oBAAoB,KAAK,WAAW,MAAM,MAAM,MAAM,IAAI;GAC3E,cAAc,IAAI;GAClB,cAAc,IAAI;GAClB,OAAO,mBAAmB,IAAI,IAAI,IAAI,EAAE;EAC5C,UAAU;GACN,OAAK,gBAAgB,aAAa,aAAa,CAAC;EACpD;CACJ;;;;;CAKA,aAAa,IAAI;EACb,OAAK,sBAAsB,KAAK,WAAW,EAAE;CACjD;;;;;;CAMA,eAAe,MAAM;EACjB,MAAM,MAAM,OAAK,wBAAwB,KAAK,WAAW,IAAI;EAC7D,IAAI,KAAK,yBAAyB,IAAI,IAAI,IAAI,EAAE;EAChD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;CAIA,cAAc,IAAI;EACd,OAAK,uBAAuB,KAAK,WAAW,EAAE;CAClD;;;;;;;;;CASA,QAAQ;EACJ,MAAM,MAAM,OAAK,eAAe,KAAK,SAAS;EAC9C,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;;;CAQA,kBAAkB,IAAI;EAClB,MAAM,MAAM,OAAK,2BAA2B,KAAK,WAAW,EAAE;EAC9D,IAAI,KAAK,qBAAqB,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM;EACpD,OAAK,gBAAgB,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC;EAC1C,OAAO;CACX;;;;;;;;;;CAUA,aAAa,IAAI,QAAQ,SAAS;EAC9B,MAAM,MAAM,OAAK,sBAAsB,KAAK,WAAW,IAAI,QAAQ,OAAO;EAC1E,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;CAE5C;;;;;CAKA,WAAW;EAEP,OADY,OAAK,kBAAkB,KAAK,SACjC;CACX;AACJ;AACA,IAAI,OAAO,SAAS,SAAS,UAAU,OAAO,WAAW,SAAS,UAAU;;;;;AAM5E,SAAgB,mBAAmB,UAAU;CACzC,OAAK,mBAAmB,WAAW,QAAQ,IAAI,IAAI,qBAAqB,QAAQ,CAAC;AACrF;;;;;;;;;;AAqBA,SAAgB,gBAAgB,MAAM,QAAQ;CAC1C,IAAI;CACJ,IAAI;CACJ,IAAI;EACA,MAAM,OAAO,CAAC;EACd,MAAM,OAAO,kBAAkB,QAAQ,OAAK,mBAAmB,OAAK,kBAAkB;EACtF,MAAM,OAAO;EACb,MAAM,MAAM,OAAK,gBAAgB,MAAM,MAAM,IAAI;EACjD,cAAc,IAAI;EAClB,cAAc,IAAI;EAClB,OAAO,mBAAmB,IAAI,IAAI,IAAI,EAAE;CAC5C,UAAU;EACN,OAAK,gBAAgB,aAAa,aAAa,CAAC;CACpD;AACJ;AACA,SAAS,oBAAoB;CA6wCzB,OAAO;EACH,WAAW;EACX,uBAAuB;GA7wCvB,WAAW;GACX,8BAA8B,SAAS,MAAM,MAAM;IAE/C,OADY,MAAM,mBAAmB,MAAM,IAAI,CACxC;GACX;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,0CAA0C,SAAS,MAAM;IAErD,OADY,KAAK;GAErB;GACA,gDAAgD,SAAS,MAAM,MAAM;IAEjE,MAAM,OAAO,kBADD,YAAY,IACO,GAAK,OAAK,mBAAmB,OAAK,kBAAkB;IACnF,MAAM,OAAO;IACb,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;IAC9D,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;GAClE;GACA,+CAA+C,SAAS,MAAM;IAE1D,OADY,OAAO,SAAU;GAEjC;GACA,2CAA2C,SAAS,MAAM;IAEtD,OADY,SAAS;GAEzB;GACA,6CAA6C,SAAS,MAAM;IAExD,OADY,OAAO,SAAU;GAEjC;GACA,gDAAgD,SAAS,MAAM;IAE3D,OADY,SAAS,KAAA;GAEzB;GACA,yCAAyC,SAAS,MAAM,MAAM;IAC1D,MAAM,IAAI,MAAM,mBAAmB,MAAM,IAAI,CAAC;GAClD;GACA,sCAAsC,SAAS,MAAM;IACjD,KAAK,cAAc;GACvB;GACA,wCAAwC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAE1F,OADY,KAAK,gBAAgB,IAC1B;IACX,GAAG,SAAS;GAAG;GACf,6BAA6B,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAE/E,OADY,KAAK,KAAK,IACf;IACX,GAAG,SAAS;GAAG;GACf,6BAA6B,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAErF,OADY,KAAK,KAAK,MAAM,IACrB;IACX,GAAG,SAAS;GAAG;GACf,oCAAoC,SAAS,MAAM,MAAM,MAAM,MAAM;IACjE,KAAK,YAAY,MAAM,MAAM,IAAI;GACrC;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM;IAC3D,KAAK,YAAY,MAAM,IAAI;GAC/B;GACA,kCAAkC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KACpF,KAAK,UAAU,IAAI;IACvB,GAAG,SAAS;GAAG;GACf,mDAAmD,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM,MAAM;KACjH,KAAK,2BAA2B,MAAM,MAAM,IAAI;IACpD,GAAG,SAAS;GAAG;GACf,4CAA4C,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM,MAAM;KAC1G,KAAK,oBAAoB,MAAM,MAAM,IAAI;IAC7C,GAAG,SAAS;GAAG;GACf,8CAA8C,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAEhG,OADY,KAAK,sBAAsB,IAChC;IACX,GAAG,SAAS;GAAG;GACf,wCAAwC,SAAS,MAAM,MAAM;IAEzD,OADY,KAAK,gBAAgB,IAC1B;GACX;GACA,qCAAqC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAEvF,OADY,KAAK,aAAa,IACvB;IACX,GAAG,SAAS;GAAG;GACf,6CAA6C,SAAS,MAAM,MAAM;IAE9D,OADY,KAAK,qBAAqB,IAC/B;GACX;GACA,6CAA6C,SAAS,MAAM,MAAM;IAE9D,OADY,KAAK,qBAAqB,IAC/B;GACX;GACA,6CAA6C,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAE/F,OADY,KAAK,qBAAqB,IAC/B;IACX,GAAG,SAAS;GAAG;GACf,sCAAsC,SAAS,MAAM,MAAM;IAEvD,OADY,KAAK,cAAc,IACxB;GACX;GACA,2CAA2C,SAAS,MAAM,MAAM;IAE5D,OADY,KAAK,mBAAmB,IAC7B;GACX;GACA,sCAAsC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAExF,OADY,KAAK,cAAc,IACxB;IACX,GAAG,SAAS;GAAG;GACf,mCAAmC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAErF,OADY,KAAK,WAAW,IACrB;IACX,GAAG,SAAS;GAAG;GACf,oCAAoC,SAAS,MAAM,MAAM;IACrD,MAAM,MAAM,KAAK;IACjB,MAAM,OAAO,kBAAkB,KAAK,OAAK,mBAAmB,OAAK,kBAAkB;IACnF,MAAM,OAAO;IACb,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;IAC9D,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;GAClE;GACA,gCAAgC,SAAS,MAAM;IAC3C,KAAK,QAAQ;GACjB;GACA,gCAAgC,SAAS,MAAM;IAC3C,KAAK,QAAQ;GACjB;GACA,sCAAsC,SAAS,MAAM;IAEjD,OADY,KAAK;GAErB;GACA,qCAAqC,SAAS,MAAM;IAEhD,OADY,KAAK;GAErB;GACA,iCAAiC,SAAS,MAAM;IAC5C,MAAM,MAAM,KAAK;IACjB,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;IAC7E,KAAK,YAAY,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,SAAS,CAAC;GACzE;GACA,6BAA6B,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM;IAChE,KAAK,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;GAC5D;GACA,4BAA4B,SAAS,MAAM;IACvC,KAAK,IAAI;GACb;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,IAAI;IACJ,IAAI;IACJ,IAAI;KACA,cAAc;KACd,cAAc;KACd,QAAQ,MAAM,mBAAmB,MAAM,IAAI,CAAC;IAChD,UAAU;KACN,OAAK,gBAAgB,aAAa,aAAa,CAAC;IACpD;GACJ;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK,OACV;GACX;GACA,+BAA+B,SAAS,MAAM,MAAM;IAEhD,OADY,KAAK,OAAO,IACjB;GACX;GACA,mCAAmC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAC3F,MAAM,MAAM,KAAK,WAAW,mBAAmB,MAAM,IAAI,CAAC;KAC1D,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;IACzD,GAAG,SAAS;GAAG;GACf,mCAAmC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAC3F,MAAM,MAAM,KAAK,WAAW,mBAAmB,MAAM,IAAI,CAAC;KAC1D,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;IACzD,GAAG,SAAS;GAAG;GACf,0CAA0C,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM;KAEtF,OADY,KAAK,kBACV;IACX,GAAG,SAAS;GAAG;GACf,uCAAuC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAE/F,OADY,KAAK,eAAe,MAAM,IAC/B;IACX,GAAG,SAAS;GAAG;GACf,iDAAiD,SAAS,MAAM;IAC5D,MAAM,MAAM,KAAK,yBAAyB;IAC1C,QAAQ,iCAAiC,QAAQ,GAAG,IAAI,KAAK,OAAO;GACxE;GACA,4BAA4B,SAAS,MAAM,MAAM;IAC7C,MAAM,MAAM,KAAK,SAAS;IAC1B,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,4BAA4B,SAAS,MAAM;IAEvC,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,6BAA6B,SAAS,MAAM;IAExC,OADY,KAAK;GAErB;GACA,qDAAqD,SAAS,MAAM;IAChE,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,oDAAoD,SAAS,MAAM;IAC/D,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,oDAAoD,SAAS,MAAM;IAC/D,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,+CAA+C,SAAS,MAAM;IAC1D,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,mDAAmD,SAAS,MAAM;IAC9D,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,8CAA8C,SAAS,MAAM;IACzD,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,0CAA0C,SAAS,MAAM;IACrD,IAAI;IACJ,IAAI;KACA,SAAS,gBAAgB;IAC7B,SAAS,GAAG;KACR,SAAS;IACb;IAEA,OAAO;GACX;GACA,0CAA0C,SAAS,MAAM;IAErD,OADY,KAAK;GAErB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,MAAM,MAAM,KAAK;IACjB,MAAM,OAAO,kBAAkB,KAAK,OAAK,mBAAmB,OAAK,kBAAkB;IACnF,MAAM,OAAO;IACb,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;IAC9D,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;GAClE;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAE1C,OADY,KAAK;GAErB;GACA,6BAA6B,SAAS,MAAM;IAExC,OADY,KAAK;GAErB;GACA,iCAAiC,SAAS,MAAM,MAAM,MAAM,MAAM;IAE9D,OADY,KAAK,SAAS,SAAS,GAAG,MAAM,IACrC;GACX;GACA,uDAAuD,SAAS,MAAM;IAElE,OADY,KAAK;GAErB;GACA,sCAAsC,SAAS,MAAM;IAEjD,OADY,KAAK;GAErB;GACA,gDAAgD,SAAS,MAAM;IAE3D,OADY,KAAK;GAErB;GACA,sCAAsC,SAAS,MAAM;IAEjD,OADY,KAAK;GAErB;GACA,yDAAyD,SAAS,MAAM;IAEpE,OADY,KAAK;GAErB;GACA,4CAA4C,SAAS,MAAM;IAEvD,OADY,KAAK;GAErB;GACA,0DAA0D,SAAS,MAAM;IAErE,OADY,KAAK;GAErB;GACA,iDAAiD,SAAS,MAAM;IAE5D,OADY,KAAK;GAErB;GACA,iDAAiD,SAAS,MAAM;IAE5D,OADY,KAAK;GAErB;GACA,iDAAiD,SAAS,MAAM;IAE5D,OADY,KAAK;GAErB;GACA,uDAAuD,SAAS,MAAM;IAElE,OADY,KAAK;GAErB;GACA,yDAAyD,SAAS,MAAM;IAEpE,OADY,KAAK;GAErB;GACA,kEAAkE,SAAS,MAAM;IAE7E,OADY,KAAK;GAErB;GACA,kEAAkE,SAAS,MAAM;IAE7E,OADY,KAAK;GAErB;GACA,qDAAqD,SAAS,MAAM;IAEhE,OADY,KAAK;GAErB;GACA,yDAAyD,SAAS,MAAM;IAEpE,OADY,KAAK;GAErB;GACA,kDAAkD,SAAS,MAAM;IAE7D,OADY,KAAK;GAErB;GACA,oDAAoD,SAAS,MAAM;IAE/D,OADY,KAAK;GAErB;GACA,wDAAwD,SAAS,MAAM;IAEnE,OADY,KAAK;GAErB;GACA,yDAAyD,SAAS,MAAM;IAEpE,OADY,KAAK;GAErB;GACA,8CAA8C,SAAS,MAAM;IAEzD,OADY,KAAK;GAErB;GACA,8CAA8C,SAAS,MAAM;IAEzD,OADY,KAAK;GAErB;GACA,8CAA8C,SAAS,MAAM;IAEzD,OADY,KAAK;GAErB;GACA,8CAA8C,SAAS,MAAM;IAEzD,OADY,KAAK;GAErB;GACA,oDAAoD,SAAS,MAAM;IAE/D,OADY,KAAK;GAErB;GACA,wDAAwD,SAAS,MAAM;IAEnE,OADY,KAAK;GAErB;GACA,4CAA4C,SAAS,MAAM;IAEvD,OADY,KAAK;GAErB;GACA,mDAAmD,SAAS,MAAM;IAE9D,OADY,KAAK;GAErB;GACA,yCAAyC,SAAS,MAAM;IAEpD,OADY,KAAK;GAErB;GACA,gCAAgC,SAAS,MAAM,MAAM;IACjD,MAAM,MAAM,KAAK;IACjB,MAAM,OAAO,kBAAkB,KAAK,OAAK,mBAAmB,OAAK,kBAAkB;IACnF,MAAM,OAAO;IACb,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;IAC9D,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;GAClE;GACA,wDAAwD,SAAS,MAAM;IAEnE,OADY,KAAK;GAErB;GACA,wDAAwD,SAAS,MAAM;IAEnE,OADY,KAAK;GAErB;GACA,sCAAsC,SAAS,MAAM;IAEjD,OADY,KAAK;GAErB;GACA,qCAAqC,SAAS,MAAM;IAEhD,OADY,KAAK;GAErB;GACA,kCAAkC,SAAS,MAAM;IAE7C,OADY,KAAK;GAErB;GACA,kCAAkC,SAAS,MAAM;IAE7C,OADY,KAAK;GAErB;GACA,4BAA4B,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM;KAE9E,OAAO,IADS,gBAAgB,SAAS,GAAG,SAAS,CAC9C;IACX,GAAG,SAAS;GAAG;GACf,4BAA4B,SAAS,MAAM,MAAM;IAC7C,IAAI;KACA,IAAI,SAAS;MAAC,GAAG;MAAM,GAAG;KAAI;KAC9B,IAAI,OAAO,MAAM,SAAS;MACtB,MAAM,IAAI,OAAO;MACjB,OAAO,IAAI;MACX,IAAI;OACA,OAAO,+UAA+U,GAAG,OAAO,GAAG,MAAM,IAAI;MACjX,UAAU;OACN,OAAO,IAAI;MACf;KACJ;KAEA,OAAO,IADS,QAAQ,GACjB;IACX,UAAU;KACN,OAAO,IAAI;IACf;GACJ;GACA,4BAA4B,WAAW;IAEnC,uBAAO,IADS,MACT;GACX;GACA,4BAA4B,WAAW;IAEnC,uBAAO,IADS,OACT;GACX;GACA,kCAAkC,WAAW;IAEzC,uBAAO,IADS,OACT;GACX;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,IAAI;KACA,IAAI,SAAS;MAAC,GAAG;MAAM,GAAG;KAAI;KAC9B,IAAI,OAAO,MAAM,SAAS;MACtB,MAAM,IAAI,OAAO;MACjB,OAAO,IAAI;MACX,IAAI;OACA,OAAO,+UAA+U,GAAG,OAAO,GAAG,MAAM,IAAI;MACjX,UAAU;OACN,OAAO,IAAI;MACf;KACJ;KAEA,OAAO,IADS,QAAQ,GACjB;IACX,UAAU;KACN,OAAO,IAAI;IACf;GACJ;GACA,wDAAwD,SAAS,MAAM,MAAM,MAAM;IAE/E,OAAO,IADS,WAAW,MAAM,SAAS,GAAG,SAAS,CAC/C;GACX;GACA,wCAAwC,SAAS,MAAM;IAEnD,OAAO,IADS,WAAW,SAAS,CAC7B;GACX;GACA,4BAA4B,WAAW;IAEnC,OADY,YAAY,IACjB;GACX;GACA,4CAA4C,SAAS,MAAM;IAEvD,OADY,KAAK,oBACV;GACX;GACA,yCAAyC,SAAS,MAAM,MAAM,MAAM;IAChE,WAAW,UAAU,IAAI,KAAK,oBAAoB,MAAM,IAAI,GAAG,IAAI;GACvE;GACA,yCAAyC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAEjG,OADY,KAAK,iBAAiB,mBAAmB,MAAM,IAAI,CACxD;IACX,GAAG,SAAS;GAAG;GACf,uCAAuC,SAAS,MAAM;IAElD,OADY,KAAK;GAErB;GACA,uCAAuC,SAAS,MAAM;IAClD,eAAe,IAAI;GACvB;GACA,8BAA8B,SAAS,MAAM;IAEzC,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM;IAC1C,MAAM,MAAM,KAAK;IACjB,QAAQ,oCAAoC,QAAQ,GAAG,IAAI,KAAK,KAAK;GACzE;GACA,oBAAoB,SAAS,MAAM;IAE/B,OADY,SAAS,OAAO,IACrB;GACX;GACA,uCAAuC,SAAS,MAAM,MAAM;IAExD,OADY,KAAK,eAAe,IACzB;GACX;GACA,sCAAsC,SAAS,MAAM,MAAM;IAEvD,OADY,KAAK,cAAc,IACxB;GACX;GACA,gCAAgC,SAAS,MAAM;IAE3C,OADY,QAAQ,QAAQ,IACrB;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM,MAAM;IAC5D,KAAK,aAAa,SAAS,GAAG,IAAI;GACtC;GACA,qCAAqC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;KACrH,KAAK,aAAa,SAAS,GAAG,MAAM,qBAAqB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC;IAC1F,GAAG,SAAS;GAAG;GACf,uCAAuC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM;IAC1E,KAAK,eAAe,MAAM,+BAA+B,OAAO,MAAM,IAAI;GAC9E;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,YAAY,IAAI;GACzB;GACA,uCAAuC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM;IAC1E,KAAK,eAAe,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;GACtE;GACA,wCAAwC,SAAS,MAAM,MAAM,MAAM,MAAM;IACrE,KAAK,gBAAgB,SAAS,GAAG,MAAM,IAAI;GAC/C;GACA,wCAAwC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM;IAC3E,KAAK,gBAAgB,SAAS,GAAG,MAAM,MAAM,IAAI;GACrD;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;IACnF,KAAK,YAAY,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;GACvD;GACA,4BAA4B,SAAS,MAAM,MAAM,MAAM;IACnD,KAAK,IAAI,MAAM,SAAS,CAAC;GAC7B;GACA,4BAA4B,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM;KAEpF,OADY,QAAQ,IAAI,MAAM,MAAM,IAC7B;IACX,GAAG,SAAS;GAAG;GACf,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI;GACb;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,wCAAwC;GAC1D;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,+BAA+B;GACvD;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,+BAA+B;GACvD;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,+BAA+B;GACvD;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ;GACjB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,mCAAmC;GACxD;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,yBAAyB,SAAS;GAC3C;GACA,8CAA8C,SAAS,MAAM,MAAM;IAC/D,KAAK,kBAAkB,SAAS;GACpC;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,cAAc;GACvB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,uCAAuC,SAAS,MAAM,MAAM,MAAM;IAC9D,KAAK,aAAa,6BAA6B,MAAM,IAAI;GAC7D;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI;GACb;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,iBAAiB,SAAS;GACnC;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,SAAS;GACjC;GACA,0DAA0D,SAAS,MAAM,MAAM;IAC3E,KAAK,4BAA4B,SAAS;GAC9C;GACA,+CAA+C,SAAS,MAAM,MAAM,MAAM;IACtE,KAAK,mBAAmB,6BAA6B,MAAM,IAAI;GACnE;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU,SAAS;GAC5B;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU,SAAS;GAC5B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ;GACjB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM;IAC3D,KAAK,UAAU,6BAA6B,MAAM,IAAI;GAC1D;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc,SAAS;GAChC;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc,SAAS;GAChC;GACA,uDAAuD,SAAS,MAAM,MAAM;IACxE,KAAK,aAAa;GACtB;GACA,iCAAiC,SAAS,MAAM,MAAM,MAAM;IACxD,KAAK,OAAO,mBAAmB,MAAM,IAAI;GAC7C;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ;GACjB;GACA,8CAA8C,SAAS,MAAM,MAAM,MAAM;IACrE,KAAK,mBAAmB,6BAA6B,MAAM,IAAI;GACnE;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU,mCAAmC;GACtD;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU,mCAAmC;GACtD;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,WAAW,4BAA4B;GAChD;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY;GACrB;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,iBAAiB;GAC1B;GACA,mDAAmD,SAAS,MAAM,MAAM;IACpE,KAAK,sBAAsB;GAC/B;GACA,8CAA8C,SAAS,MAAM,MAAM;IAC/D,KAAK,kBAAkB;GAC3B;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,eAAe,mCAAmC;GAC3D;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc,oCAAoC;GAC3D;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc,0BAA0B;GACjD;GACA,kDAAkD,SAAS,MAAM,MAAM;IACnE,KAAK,qBAAqB,SAAS;GACvC;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,gBAAgB,SAAS;GAClC;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,eAAe;GACxB;GACA,qDAAqD,SAAS,MAAM,MAAM;IACtE,KAAK,yBAAyB;GAClC;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,2BAA2B;GACnD;GACA,gDAAgD,SAAS,MAAM,MAAM;IACjE,KAAK,oBAAoB,SAAS;GACtC;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,YAAY,oCAAoC;GACzD;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,YAAY,wCAAwC;GAC7D;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,+BAA+B;GACpD;GACA,oDAAoD,SAAS,MAAM,MAAM;IACrE,KAAK,sBAAsB,SAAS;GACxC;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM;IAC3D,KAAK,UAAU,6BAA6B,MAAM,IAAI;GAC1D;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM;IAC3D,KAAK,UAAU,6BAA6B,MAAM,IAAI;GAC1D;GACA,wCAAwC,SAAS,MAAM,MAAM,MAAM;IAC/D,KAAK,aAAa,mBAAmB,MAAM,IAAI;GACnD;GACA,wCAAwC,SAAS,MAAM,MAAM,MAAM;IAC/D,KAAK,aAAa,mBAAmB,MAAM,IAAI;GACnD;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,kBAAkB;GAC3B;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,SAAS,oCAAoC;GACtD;GACA,4BAA4B,SAAS,MAAM,MAAM,MAAM;IACnD,KAAK,IAAI,oBAAoB,MAAM,IAAI,CAAC;GAC5C;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,QAAQ,SAAS;GAC1B;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,gCAAgC;GAClD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,iCAAiC;GACnD;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,WAAW;GACpB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,6BAA6B;GAClD;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI;GACb;GACA,+CAA+C,SAAS,MAAM,MAAM;IAChE,KAAK,mBAAmB,SAAS;GACrC;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,SAAS;GAC3B;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,SAAS;GAC3B;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS,SAAS;GAC3B;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,kCAAkC,SAAS,MAAM,MAAM,MAAM;IACzD,KAAK,QAAQ,mBAAmB,MAAM,IAAI;GAC9C;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,wDAAwD,SAAS,MAAM,MAAM;IACzE,KAAK,SAAS,kCAAkC;GACpD;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,SAAS,0BAA0B;GAC5C;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc;GACvB;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,cAAc;GACvB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,8BAA8B;GACnD;GACA,+CAA+C,SAAS,MAAM,MAAM;IAChE,KAAK,mBAAmB,SAAS;GACrC;GACA,iCAAiC,SAAS,MAAM,MAAM;IAClD,KAAK,OAAO,SAAS;GACzB;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,gBAAgB;GACzB;GACA,iDAAiD,SAAS,MAAM,MAAM;IAClE,KAAK,iBAAiB;GAC1B;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,8BAA8B;GACnD;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,WAAW,SAAS;GAC7B;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,gBAAgB,SAAS;GAClC;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,gBAAgB,SAAS;GAClC;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,WAAW,SAAS;GAC7B;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,eAAe,oCAAoC;GAC5D;GACA,iCAAiC,SAAS,MAAM,MAAM;IAClD,KAAK,OAAO,yCAAyC;GACzD;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,wCAAwC,SAAS,MAAM,MAAM;IACzD,KAAK,cAAc;GACvB;GACA,yCAAyC,SAAS,MAAM,MAAM;IAC1D,KAAK,eAAe,SAAS;GACjC;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,SAAS;GAClB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,SAAS;GAClB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,SAAS;GAClB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,SAAS;GAClB;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,YAAY,kCAAkC;GACvD;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,SAAS;GAClB;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,SAAS;GAClB;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,SAAS;GAClB;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,SAAS,oCAAoC;GACtD;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,kBAAkB,mCAAmC;GAC9D;GACA,gDAAgD,SAAS,MAAM,MAAM;IACjE,KAAK,qBAAqB,SAAS;GACvC;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,YAAY;GACrB;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,WAAW;GACpB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI;GACb;GACA,8CAA8C,SAAS,MAAM,MAAM,MAAM;IACrE,KAAK,mBAAmB,6BAA6B,MAAM,IAAI;GACnE;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,iBAAiB;GAC1B;GACA,4DAA4D,SAAS,MAAM,MAAM;IAC7E,KAAK,gBAAgB;GACzB;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,WAAW;GACpB;GACA,wDAAwD,SAAS,MAAM,MAAM;IACzE,KAAK,WAAW;GACpB;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,WAAW;GACpB;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,SAAS;GACjC;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,eAAe,SAAS;GACjC;GACA,yCAAyC,SAAS,MAAM,MAAM;IAC1D,KAAK,cAAc,SAAS;GAChC;GACA,wCAAwC,SAAS,MAAM,MAAM;IACzD,KAAK,aAAa,qCAAqC;GAC3D;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU;GACnB;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,iBAAiB,SAAS;GACnC;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,OAAO;GAChB;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,OAAO;GAChB;GACA,oDAAoD,SAAS,MAAM,MAAM;IACrE,KAAK,OAAO;GAChB;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,uDAAuD,SAAS,MAAM,MAAM;IACxE,KAAK,SAAS;GAClB;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,SAAS;GAClB;GACA,sDAAsD,SAAS,MAAM,MAAM;IACvE,KAAK,SAAS;GAClB;GACA,8CAA8C,SAAS,MAAM,MAAM;IAC/D,KAAK,SAAS;GAClB;GACA,oDAAoD,SAAS,MAAM,MAAM;IACrE,KAAK,SAAS;GAClB;GACA,+CAA+C,SAAS,MAAM,MAAM;IAChE,KAAK,SAAS;GAClB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,+BAA+B;GACpD;GACA,yCAAyC,SAAS,MAAM,MAAM;IAC1D,KAAK,cAAc;GACvB;GACA,gDAAgD,SAAS,MAAM,MAAM;IACjE,KAAK,oBAAoB,SAAS;GACtC;GACA,0CAA0C,SAAS,MAAM,MAAM;IAC3D,KAAK,eAAe;GACxB;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,gBAAgB,0BAA0B;GACnD;GACA,8CAA8C,SAAS,MAAM,MAAM;IAC/D,KAAK,kBAAkB,SAAS;GACpC;GACA,8CAA8C,SAAS,MAAM,MAAM;IAC/D,KAAK,kBAAkB,SAAS;GACpC;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,iBAAiB,2BAA2B;GACrD;GACA,+CAA+C,SAAS,MAAM,MAAM;IAChE,KAAK,mBAAmB,SAAS;GACrC;GACA,sCAAsC,SAAS,MAAM,MAAM;IACvD,KAAK,WAAW,kCAAkC;GACtD;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,iBAAiB;GAC1B;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,UAAU,2BAA2B;GAC9C;GACA,+CAA+C,SAAS,MAAM,MAAM;IAChE,KAAK,mBAAmB,+BAA+B;GAC3D;GACA,oCAAoC,SAAS,MAAM,MAAM,MAAM;IAC3D,KAAK,UAAU,6BAA6B,MAAM,IAAI;GAC1D;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU;GACnB;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU;GACnB;GACA,oCAAoC,SAAS,MAAM,MAAM;IACrD,KAAK,UAAU;GACnB;GACA,6CAA6C,SAAS,MAAM,MAAM;IAC9D,KAAK,kBAAkB;GAC3B;GACA,yCAAyC,SAAS,MAAM,MAAM;IAC1D,KAAK,cAAc;GACvB;GACA,qCAAqC,SAAS,MAAM,MAAM;IACtD,KAAK,WAAW,qCAAqC;GACzD;GACA,iCAAiC,SAAS,MAAM,MAAM;IAClD,KAAK,OAAO,qCAAqC;GACrD;GACA,iCAAiC,SAAS,MAAM,MAAM;IAClD,KAAK,OAAO,sCAAsC;GACtD;GACA,4CAA4C,SAAS,MAAM,MAAM;IAC7D,KAAK,iBAAiB,SAAS;GACnC;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,mCAAmC,SAAS,MAAM,MAAM;IACpD,KAAK,SAAS;GAClB;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,gBAAgB,wCAAwC;GACjE;GACA,2CAA2C,SAAS,MAAM,MAAM;IAC5D,KAAK,gBAAgB,wCAAwC;GACjE;GACA,yCAAyC,SAAS,MAAM,MAAM,MAAM;IAChE,KAAK,cAAc,6BAA6B,MAAM,IAAI;GAC9D;GACA,yCAAyC,SAAS,MAAM,MAAM,MAAM;IAChE,KAAK,cAAc,6BAA6B,MAAM,IAAI;GAC9D;GACA,kDAAkD,SAAS,MAAM,MAAM;IACnE,KAAK,OAAO;GAChB;GACA,kDAAkD,SAAS,MAAM,MAAM;IACnE,KAAK,OAAO;GAChB;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,aAAa,SAAS;GAC/B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,kCAAkC,SAAS,MAAM,MAAM;IACnD,KAAK,QAAQ,SAAS;GAC1B;GACA,uCAAuC,SAAS,MAAM,MAAM;IACxD,KAAK,YAAY,SAAS;GAC9B;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI,SAAS;GACtB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI,SAAS;GACtB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI,SAAS;GACtB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI,SAAS;GACtB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,KAAK,IAAI,SAAS;GACtB;GACA,8BAA8B,SAAS,MAAM,MAAM;IAC/C,MAAM,MAAM,KAAK;IACjB,MAAM,OAAO,kBAAkB,KAAK,OAAK,mBAAmB,OAAK,kBAAkB;IACnF,MAAM,OAAO;IACb,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;IAC9D,mBAAmB,EAAE,UAAU,SAAS,KAAK,GAAO,MAAM,IAAI;GAClE;GACA,oDAAoD,WAAW;IAC3D,MAAM,MAAM,OAAO,eAAe,cAAc,KAAA,IAAY;IAC5D,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,+CAA+C,WAAW;IACtD,MAAM,MAAM,OAAO,WAAW,cAAc,KAAA,IAAY;IACxD,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,6CAA6C,WAAW;IACpD,MAAM,MAAM,OAAO,SAAS,cAAc,KAAA,IAAY;IACtD,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,+CAA+C,WAAW;IACtD,MAAM,MAAM,OAAO,WAAW,cAAc,KAAA,IAAY;IACxD,OAAO,WAAW,GAAG,IAAI,IAAI,qBAAqB,GAAG;GACzD;GACA,wCAAwC,SAAS,MAAM;IAEnD,OADY,KAAK;GAErB;GACA,wCAAwC,SAAS,MAAM;IAEnD,OADY,KAAK;GAErB;GACA,+BAA+B,SAAS,MAAM,MAAM,MAAM;IACtD,KAAK,OAAO,6BAA6B,MAAM,IAAI,CAAC;GACxD;GACA,6BAA6B,SAAS,MAAM,MAAM;IAE9C,OADY,KAAK,KAAK,IACf;GACX;GACA,6BAA6B,SAAS,MAAM,MAAM,MAAM;IAEpD,OADY,KAAK,KAAK,MAAM,IACrB;GACX;GACA,6BAA6B,SAAS,MAAM,MAAM;IAE9C,OADY,KAAK,KAAK,IACf;GACX;GACA,oCAAoC,SAAS,MAAM;IAC/C,KAAK,YAAY;GACrB;GACA,8BAA8B,SAAS,MAAM;IACzC,KAAK,MAAM;GACf;GACA,oCAAoC,SAAS,MAAM;IAE/C,OADY,KAAK;GAErB;GACA,mCAAmC,SAAS,MAAM;IAE9C,OADY,KAAK;GAErB;GACA,8BAA8B,SAAS,MAAM;IAEzC,OADY,KAAK;GAErB;GACA,8BAA8B,SAAS,MAAM;IAEzC,OADY,KAAK;GAErB;GACA,8BAA8B,SAAS,MAAM;IAEzC,OADY,KAAK;GAErB;GACA,oCAAoC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;KACpH,KAAK,YAAY,MAAM,MAAM,oBAAoB,MAAM,IAAI,GAAG,MAAM,IAAI;IAC5E,GAAG,SAAS;GAAG;GACf,qCAAqC,WAAW;IAAE,OAAO,YAAY,SAAU,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;KAC/G,KAAK,aAAa,MAAM,oBAAoB,MAAM,IAAI,GAAG,MAAM,IAAI;IACvE,GAAG,SAAS;GAAG;GACf,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,eAAe,MAAM,MAAM,kMAChC;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,eAAe,MAAM,MAAM,uRAChC;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,eAAe,MAAM,MAAM,uKAChC;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,eAAe,MAAM,MAAM,0RAChC;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,eAAe,MAAM,MAAM,0RAChC;GACX;GACA,qCAAqC,SAAS,MAAM;IAGhD,OAAO;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,oBAAoB,MAAM,IAC/B;GACX;GACA,qCAAqC,SAAS,MAAM,MAAM;IAGtD,OADY,mBAAmB,MAAM,IAC9B;GACX;GACA,iCAAiC,WAAW;IACxC,MAAM,QAAQ,OAAK;IACnB,MAAM,IAAI,GAAG,KAAA,CAAS;IACtB,MAAM,IAAI,MAAM,KAAA,CAAS;IACzB,MAAM,IAAI,MAAM,IAAI;IACpB,MAAM,IAAI,MAAM,IAAI;IACpB,MAAM,IAAI,MAAM,KAAK;GACzB;EAIuB;CAC3B;AACJ;AAEA,SAAS,wKAAwK,MAAM,MAAM,MAAM;CAC/L,OAAK,wKAAwK,MAAM,MAAM,IAAI;AACjM;AAEA,SAAS,mMAAmM,MAAM,MAAM,MAAM;CAC1N,MAAM,MAAM,OAAK,mMAAmM,MAAM,MAAM,IAAI;CACpO,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;AAE5C;AAEA,SAAS,wRAAwR,MAAM,MAAM,MAAM;CAC/S,MAAM,MAAM,OAAK,wRAAwR,MAAM,MAAM,IAAI;CACzT,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;AAE5C;AAEA,SAAS,2RAA2R,MAAM,MAAM,MAAM;CAClT,MAAM,MAAM,OAAK,2RAA2R,MAAM,MAAM,IAAI;CAC5T,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;AAE5C;AAEA,SAAS,2RAA2R,MAAM,MAAM,MAAM;CAClT,MAAM,MAAM,OAAK,2RAA2R,MAAM,MAAM,IAAI;CAC5T,IAAI,IAAI,IACJ,MAAM,wBAAwB,IAAI,EAAE;AAE5C;AAEA,SAAS,+UAA+U,MAAM,MAAM,MAAM,MAAM;CAC5W,OAAK,+UAA+U,MAAM,MAAM,MAAM,IAAI;AAC9W;AAGA,IAAM,iCAAiC;CAAC;CAAiB;CAAU;AAAe;AAGlF,IAAM,oCAAoC,CAAC,MAAM;AAGjD,IAAM,iCAAiC;CAAC;CAAQ;CAAO;CAAO;CAAiB;CAAa;CAAuB;CAAO;CAAiB;CAAa;CAAuB;CAAuB;CAAY;CAAsB;CAAQ;CAAkB;CAAc;AAAsB;AAGtS,IAAM,oCAAoC;CAAC;CAAO;CAAY;CAAoB;CAAO;AAAK;AAG9F,IAAM,uCAAuC;CAAC;CAAW;CAAW;AAAmB;AAGvF,IAAM,qCAAqC,CAAC,UAAU,eAAe;AAGrE,IAAM,2CAA2C,CAAC,YAAY,UAAU;AAGxE,IAAM,qCAAqC;CAAC;CAAS;CAAQ;CAAS;CAAc;CAAW;CAAa;CAAiB;AAAQ;AAGrI,IAAM,8BAA8B;CAAC;CAAQ;CAAS;AAAM;AAG5D,IAAM,sCAAsC,CAAC,WAAW,WAAW;AAGnE,IAAM,gCAAgC,CAAC,WAAW,QAAQ;AAG1D,IAAM,+BAA+B,CAAC,OAAO,IAAI;AAGjD,IAAM,iCAAiC,CAAC,UAAU,QAAQ;AAG1D,IAAM,4BAA4B,CAAC,QAAQ,OAAO;AAGlD,IAAM,sCAAsC,CAAC,WAAW,QAAQ;AAGhE,IAAM,qCAAqC,CAAC,aAAa,kBAAkB;AAG3E,IAAM,uCAAuC;CAAC;CAAc;CAAa;CAAc;CAAiB;AAAgB;AAGxH,IAAM,wCAAwC;CAAC;CAAa;CAAiB;AAAY;AAGzF,IAAM,sCAAsC;CAAC;CAAQ;CAAQ;CAAW;CAAU;CAAmB;CAAmB;CAAkB;AAAgB;AAG1J,IAAM,0CAA0C;CAAC;CAAc;CAAa;AAAY;AAGxF,IAAM,6BAA6B,CAAC,SAAS,SAAS;AAGtD,IAAM,mCAAmC;CAAC;CAAO;CAAgB;AAAY;AAG7E,IAAM,sCAAsC;CAAC;CAAM;CAAM;AAAI;AAG7D,IAAM,mCAAmC;CAAC;CAAW;CAAW;CAAU;CAAU;CAAY;CAAY;CAAW;CAAW;CAAY;CAAY;CAAY;CAAW;CAAW;CAAW;CAAW;CAAY;CAAa;CAAa;CAAY;CAAY;CAAa;CAAc;CAAmB;CAAc;CAAa;CAAa;CAAc;CAAmB;CAAgB;CAAe;CAAgB;CAAiB;CAAY;CAAY;CAAa;CAAe;CAAe;CAAc;CAAc;CAAe;CAAc;CAAc;CAAe;CAAY;CAAgB;CAAe;CAAwB;CAAgB;CAAyB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAe;CAAe;CAAgB;CAAgB;CAAmB;CAAkB;CAAkB;CAAuB;CAAkB;CAAuB;CAAoB;CAAyB;CAAmB;CAAwB;CAAgB;CAAgB;CAAiB;CAAiB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAkB;CAAuB;CAAmB;CAAwB;CAAmB;CAAwB;CAAmB;CAAwB;CAAoB;CAAyB;CAAoB;CAAyB;CAAoB;AAAuB;AAGpuD,IAAM,uCAAuC;CAAC;CAAS;CAAsB;CAAS;CAAQ;AAAM;AAGpG,IAAM,0CAA0C;CAAC;CAAM;CAAM;CAAY;CAAQ;CAAc;AAAI;AAGnG,IAAM,kCAAkC;CAAC;CAAS;CAAW;CAAW;CAAS;CAAW;CAAW;CAAU;CAAY;CAAY;CAAU;CAAY;CAAY;CAAU;CAAY;CAAY;CAAU;CAAY;CAAY;CAAW;CAAa;CAAa;CAAW;CAAa;CAAa;CAAW;CAAa;CAAa;CAAW;CAAa;CAAa;CAAa;CAAU;CAAY;CAAY;CAAY;CAAU;CAAY;CAAY;CAAY;CAAmB;AAAe;AAG9gB,IAAM,oCAAoC,CAAC,UAAU,UAAU;AAC/D,IAAM,qBAAsB,OAAO,yBAAyB,cACtD;CAAE,gBAAgB,CAAC;CAAG,kBAAkB,CAAC;AAAE,IAC3C,IAAI,sBAAqB,QAAO,OAAK,kBAAkB,KAAK,CAAC,CAAC;AACpE,IAAM,uBAAwB,OAAO,yBAAyB,cACxD;CAAE,gBAAgB,CAAC;CAAG,kBAAkB,CAAC;AAAE,IAC3C,IAAI,sBAAqB,QAAO,OAAK,oBAAoB,KAAK,CAAC,CAAC;AAEtE,SAAS,qBAAqB,KAAK;CAC/B,MAAM,MAAM,OAAK,wBAAwB;CACzC,OAAK,sBAAsB,IAAI,KAAK,GAAG;CACvC,OAAO;AACX;AAEA,IAAM,gBAAiB,OAAO,yBAAyB,cACjD;CAAE,gBAAgB,CAAC;CAAG,kBAAkB,CAAC;AAAE,IAC3C,IAAI,sBAAqB,UAAS,OAAK,2BAA2B,MAAM,GAAG,MAAM,CAAC,CAAC;AAEzF,SAAS,YAAY,KAAK;CACtB,QAAQ,OAAO,KAAf;EAEI,KAAK;EACL,KAAK;EACL,KAAK,aACL,OAAO,GAAG;EACV,KAAK,UACL,OAAO,KAAK,UAAU,GAAG;EACzB,KAAK,UACL,OAAO,GAAG,IAAI;EACd,KAAK,UACL,OAAO,IAAI,gBAAgB,KAAA,IACrB,UAAU,IAAI,YAAY,KAC1B;EACN,KAAK,YACL,OAAO,OAAO,IAAI,SAAS,YAAY,IAAI,SAAS,KAC9C,YAAY,IAAI,KAAK,KACrB;EACN,KAAK,UAAU;GACX,IAAI,QAAQ,MACR,OAAO;GAGX,IAAI,MAAM,QAAQ,GAAG,GACjB,OAAO,MAAM,MAAM,KAAK,KAAK,WAAW,EAAE,KAAK,IAAI,IAAI;GAG3D,IAAI,eAAe,OACf,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI;GAG/C,MAAM,iBAAiB,SAAS,KAAK,GAAG;GAExC,MAAM,YAAY,sBAAsB,KAAK,cAAc,IAAI;GAG/D,IAAI,cAAc,KAAA,GACd,OAAO;GAEX,IAAI,cAAc,UAId,IAAI;IACA,OAAO,YAAY,KAAK,UAAU,GAAG,IAAI;GAC7C,SAAS,GAAG;IACR,OAAO;GACX;GAGJ,OAAO;EACX;CAGJ;AACJ;AAEA,SAAS,qBAAqB,KAAK,KAAK;CACpC,MAAM,QAAQ;CACd,OAAO,uBAAuB,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG;AACnE;AAEA,SAAS,qBAAqB,KAAK,KAAK;CACpC,MAAM,QAAQ;CACd,OAAO,uBAAuB,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG;AACnE;AAEA,SAAS,yBAAyB,KAAK,KAAK;CACxC,MAAM,QAAQ;CACd,MAAM,MAAM,mBAAmB;CAC/B,MAAM,SAAS,CAAC;CAChB,KAAK,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,KAAK,GACtC,OAAO,KAAK,OAAK,sBAAsB,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC;CAEtE,OAAK,uBAAuB,KAAK,GAAG;CACpC,OAAO;AACX;AAEA,SAAS,6BAA6B,KAAK,KAAK;CAC5C,MAAM,QAAQ;CACd,MAAM,MAAM,mBAAmB;CAC/B,MAAM,SAAS,CAAC;CAChB,KAAK,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,KAAK,GACtC,OAAO,KAAK,OAAK,sBAAsB,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC;CAEtE,OAAO;AACX;AAEA,SAAS,qBAAqB,KAAK,KAAK;CACpC,MAAM,QAAQ;CACd,OAAO,sBAAsB,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG;AAClE;AAEA,SAAS,oBAAoB,KAAK,KAAK;CACnC,MAAM,QAAQ;CACd,OAAO,qBAAqB,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,GAAG;AACjE;AAEA,IAAI,wBAAwB;AAC5B,SAAS,qBAAqB;CAC1B,IAAI,0BAA0B,QAAQ,sBAAsB,OAAO,aAAa,QAAS,sBAAsB,OAAO,aAAa,KAAA,KAAa,sBAAsB,WAAW,OAAK,OAAO,QACzL,wBAAwB,IAAI,SAAS,OAAK,OAAO,MAAM;CAE3D,OAAO;AACX;AAEA,IAAI,4BAA4B;AAChC,SAAS,yBAAyB;CAC9B,IAAI,8BAA8B,QAAQ,0BAA0B,eAAe,GAC/E,4BAA4B,IAAI,aAAa,OAAK,OAAO,MAAM;CAEnE,OAAO;AACX;AAEA,IAAI,4BAA4B;AAChC,SAAS,yBAAyB;CAC9B,IAAI,8BAA8B,QAAQ,0BAA0B,eAAe,GAC/E,4BAA4B,IAAI,aAAa,OAAK,OAAO,MAAM;CAEnE,OAAO;AACX;AAEA,SAAS,mBAAmB,KAAK,KAAK;CAClC,MAAM,QAAQ;CACd,OAAO,WAAW,qBAAqB,EAAE,SAAS,KAAK,MAAM,GAAG,CAAC;AACrE;AAEA,IAAI,2BAA2B;AAC/B,SAAS,wBAAwB;CAC7B,IAAI,6BAA6B,QAAQ,yBAAyB,eAAe,GAC7E,2BAA2B,IAAI,YAAY,OAAK,OAAO,MAAM;CAEjE,OAAO;AACX;AAEA,IAAI,0BAA0B;AAC9B,SAAS,uBAAuB;CAC5B,IAAI,4BAA4B,QAAQ,wBAAwB,eAAe,GAC3E,0BAA0B,IAAI,WAAW,OAAK,OAAO,MAAM;CAE/D,OAAO;AACX;AAEA,SAAS,YAAY,GAAG,MAAM;CAC1B,IAAI;EACA,OAAO,EAAE,MAAM,MAAM,IAAI;CAC7B,SAAS,GAAG;EACR,MAAM,MAAM,qBAAqB,CAAC;EAClC,OAAK,qBAAqB,GAAG;CACjC;AACJ;AAEA,SAAS,WAAW,GAAG;CACnB,OAAO,MAAM,KAAA,KAAa,MAAM;AACpC;AAEA,SAAS,eAAe,MAAM,MAAM,GAAG;CACnC,MAAM,QAAQ;EAAE,GAAG;EAAM,GAAG;EAAM,KAAK;CAAE;CACzC,MAAM,QAAQ,GAAG,SAAS;EAKtB,MAAM;EACN,MAAM,IAAI,MAAM;EAChB,MAAM,IAAI;EACV,IAAI;GACA,OAAO,EAAE,GAAG,MAAM,GAAG,GAAG,IAAI;EAChC,UAAU;GACN,MAAM,IAAI;GACV,KAAK,cAAc;EACvB;CACJ;CACA,KAAK,sBAAsB;EACvB,IAAI,EAAE,MAAM,QAAQ,GAAG;GACnB,OAAK,2BAA2B,MAAM,GAAG,MAAM,CAAC;GAChD,MAAM,IAAI;GACV,cAAc,WAAW,KAAK;EAClC;CACJ;CACA,cAAc,SAAS,MAAM,OAAO,KAAK;CACzC,OAAO;AACX;AAEA,SAAS,mBAAmB,KAAK,QAAQ;CACrC,MAAM,MAAM,OAAO,IAAI,SAAS,GAAG,CAAC,MAAM;CAC1C,sBAAsB,EAAE,IAAI,KAAK,MAAM,CAAC;CACxC,kBAAkB,IAAI;CACtB,OAAO;AACX;AAEA,SAAS,kBAAkB,KAAK,QAAQ;CACpC,MAAM,MAAM,OAAO,IAAI,SAAS,GAAG,CAAC,MAAM;CAC1C,qBAAqB,EAAE,IAAI,KAAK,MAAM,CAAC;CACvC,kBAAkB,IAAI;CACtB,OAAO;AACX;AAEA,SAAS,oBAAoB,KAAK,QAAQ;CACtC,MAAM,MAAM,OAAO,IAAI,SAAS,GAAG,CAAC,MAAM;CAC1C,uBAAuB,EAAE,IAAI,KAAK,MAAM,CAAC;CACzC,kBAAkB,IAAI;CACtB,OAAO;AACX;AAEA,SAAS,kBAAkB,KAAK,QAAQ,SAAS;CAC7C,IAAI,YAAY,KAAA,GAAW;EACvB,MAAM,MAAM,kBAAkB,OAAO,GAAG;EACxC,MAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM;EACtC,qBAAqB,EAAE,SAAS,KAAK,MAAM,IAAI,MAAM,EAAE,IAAI,GAAG;EAC9D,kBAAkB,IAAI;EACtB,OAAO;CACX;CAEA,IAAI,MAAM,IAAI;CACd,IAAI,MAAM,OAAO,KAAK,CAAC,MAAM;CAE7B,MAAM,MAAM,qBAAqB;CAEjC,IAAI,SAAS;CAEb,OAAO,SAAS,KAAK,UAAU;EAC3B,MAAM,OAAO,IAAI,WAAW,MAAM;EAClC,IAAI,OAAO,KAAM;EACjB,IAAI,MAAM,UAAU;CACxB;CACA,IAAI,WAAW,KAAK;EAChB,IAAI,WAAW,GACX,MAAM,IAAI,MAAM,MAAM;EAE1B,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,IAAI,SAAS,GAAG,CAAC,MAAM;EAC9D,MAAM,OAAO,qBAAqB,EAAE,SAAS,MAAM,QAAQ,MAAM,GAAG;EACpE,MAAM,MAAM,kBAAkB,WAAW,KAAK,IAAI;EAElD,UAAU,IAAI;EACd,MAAM,QAAQ,KAAK,KAAK,QAAQ,CAAC,MAAM;CAC3C;CAEA,kBAAkB;CAClB,OAAO;AACX;AAEA,SAAS,wBAAwB,KAAK;CAClC,MAAM,QAAQ,OAAK,sBAAsB,IAAI,GAAG;CAChD,OAAK,0BAA0B,GAAG;CAClC,OAAO;AACX;AAEA,IAAI,oBAAoB,IAAI,YAAY,SAAS,EAAE,WAAW,KAAK,CAAC;AACpE,kBAAkB,OAAO;AACzB,IAAM,0BAA0B;AAChC,IAAI,kBAAkB;AACtB,SAAS,WAAW,OAAO;CACvB,mBAAmB,MAAM;CACzB,IAAI,mBAAmB,yBAAyB;EAC5C,oBAAoB,IAAI,YAAY,SAAS,EAAE,WAAW,KAAK,CAAC;EAChE,kBAAkB,OAAO;EACzB,kBAAkB,MAAM;CAC5B;CACA,OAAO,kBAAkB,OAAO,KAAK;AACzC;AAEA,IAAM,oBAAoB,IAAI,YAAY;AAE1C,IAAI,EAAE,gBAAgB,oBAClB,kBAAkB,aAAa,SAAU,KAAK,MAAM;CAChD,MAAM,MAAM,kBAAkB,OAAO,GAAG;CACxC,KAAK,IAAI,GAAG;CACZ,OAAO;EACH,MAAM,IAAI;EACV,SAAS,IAAI;CACjB;AACJ;AAGJ,IAAI,kBAAkB,GAEQ;AAC9B,SAAS,oBAAoB,UAAU,QAAQ;CAE3C,SAAO,SAAS;CAEhB,wBAAwB;CACxB,4BAA4B;CAC5B,4BAA4B;CAC5B,2BAA2B;CAC3B,0BAA0B;CAC1B,OAAK,iBAAiB;CACtB,OAAO;AACX;AAEA,eAAe,WAAW,QAAQ,SAAS;CACvC,IAAI,OAAO,aAAa,cAAc,kBAAkB,UAAU;EAC9D,IAAI,CAAC,OAAO,IACR,MAAM,IAAI,MAAM,yBAAyB,OAAO,OAAO,GAAG,OAAO,WAAW,aAAa,OAAO,IAAI,EAAE;EAG1G,IAAI,OAAO,YAAY,yBAAyB,YAC5C,IAAI;GACA,OAAO,MAAM,YAAY,qBAAqB,QAAQ,OAAO;EACjE,SAAS,GAAG;GAGR,IAFsB,qBAAqB,OAAO,IAE9C,KAAiB,OAAO,QAAQ,IAAI,cAAc,MAAM,oBACxD,QAAQ,KAAK,qMAAqM,CAAC;QAE9M,MAAM;EACnB;EAGJ,MAAM,QAAQ,MAAM,OAAO,YAAY;EACvC,OAAO,MAAM,YAAY,YAAY,OAAO,OAAO;CACvD,OAAO;EACH,MAAM,WAAW,MAAM,YAAY,YAAY,QAAQ,OAAO;EAE9D,IAAI,oBAAoB,YAAY,UAChC,OAAO;GAAE;GAAU;EAAO;OAE1B,OAAO;CAEf;CAEA,SAAS,qBAAqB,MAAM;EAChC,QAAQ,MAAR;GACI,KAAK;GAAS,KAAK;GAAQ,KAAK,WAAW,OAAO;EACtD;EACA,OAAO;CACX;AACJ;AAsBA,IAAI;AACJ,eAAe,WAAW,gBAAgB;CACtC,IAAI,WAAS,KAAA,GAAW,OAAO;CAC/B,IAAI,uBAAuB,KAAA,GAAW;EAClC,qBAAqB,gBAAgB,cAAc;EACnD,mBAAmB,YAAY;GAAE,qBAAqB,KAAA;EAAW,CAAC;CACtE;CACA,OAAO;AACX;AAEA,eAAe,gBAAgB,gBAAgB;CAE3C,IAAI,mBAAmB,KAAA,GACnB,IAAI,OAAO,eAAe,cAAc,MAAM,OAAO,WACjD,CAAC,CAAC,kBAAkB;MAEpB,QAAQ,KAAK,2FAA2F;CAIhH,IAAI,mBAAmB,KAAA,GACnB,iBAAiB,IAAI,IAAI,uBAAuB,OAAY,KAAI,GAAA;CAEpE,MAAM,UAAU,kBAAkB;CAElC,IAAI,OAAO,mBAAmB,YAAa,OAAO,YAAY,cAAc,0BAA0B,WAAa,OAAO,QAAQ,cAAc,0BAA0B,KACtK,iBAAiB,MAAM,cAAc;CAGzC,MAAM,EAAE,UAAU,WAAW,MAAM,WAAW,MAAM,gBAAgB,OAAO;CAE3E,OAAO,oBAAoB,UAAU,MAAM;AAC/C;;;AC70EA,IAAa,cAAc;CACvB;CAAU;CAAY;CAAU;CAAW;CAAU;CAAW;CAAc;CAC9E;CAAa;CAAa;CAAc;CAAa;CAAO;CAAc;CAAS;CAAc;AACrG;AAGA,IAAa,OAAO;CAAE,MAAM;CAAG,MAAM;CAAG,MAAM;CAAG,OAAO;CAAG,OAAO;AAAE;AAQpE,IAAa,YAAkC;CAAE,OAAO;CAAG,MAAM;CAAG,SAAS;CAAG,MAAM;CAAG,UAAU;CAAG,MAAM;AAAE;AAqC9G,IAAa,YAAsC;CAAE,OAAO;CAAG,KAAK;CAAG,WAAW;CAAG,SAAS;AAAE;AAsBhG,IAAa,YAAsC;CAAE,OAAO;CAAG,WAAW;CAAG,aAAa;CAAG,iBAAiB;CAAG,mBAAmB;CAAG,cAAc;AAAE;AAEvJ,IAAa,IAAI;CACb,QAAQ;CACR,UAAU;CACV,WAAW;CACX,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;CACT,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,SAAS;CACT,MAAM;CACN,MAAM;CACN,SAAS;CACT,MAAM,KAAK,MAAM;AACrB;AAEA,IAAa,OAAb,MAAkB;CA4BO;CAAqB;CA3B1C,WAAmB,CAAC;CACpB,YAAmB;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;CAAC;CACpC,UAAU;CACV,QAAmB;CACnB,IAAI;CACJ,IAAI;CACJ,QAA0C;EAAC;EAAG;EAAG;EAAG;CAAC;CACrD;CACA;CACA,UAAoB,CAAC;;CAErB;;CAEA;CACA;CACA;;CAEA;;CAEA;;CAEA;CACA;CACA;CACA,UAAU;CACV,QAAQ,EAAE;CAEV,YAAY,IAAqB,MAAqB;EAAjC,KAAA,KAAA;EAAqB,KAAA,OAAA;CAAa;AAC3D;AAIA,IAAa,MAAb,MAAiB;CAOQ;CAAwB;CAAyB;CANtE;CACA,QAAyB,CAAC;CAC1B,SAAgC,CAAC;CACjC,wBAAiB,IAAI,IAAU;CAC/B,SAAiB;CAEjB,YAAY,OAAwB,QAAyB,YAA2B;EAAnE,KAAA,QAAA;EAAwB,KAAA,SAAA;EAAyB,KAAA,aAAA;EAClE,KAAK,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC;CACrC;CAEA,KAAa,MAAY,OAAoB;EACzC,MAAM,IAAI,IAAI,KAAK,KAAK,UAAU,IAAI;EACtC,OAAO,OAAO,GAAG,KAAK;EACtB,KAAK,MAAM,KAAK,CAAC;EACjB,KAAK,MAAM,IAAI,CAAC;EAChB,OAAO;CACX;CAEA,IAAI,QAAc,MAAY,OAAoB;EAC9C,MAAM,IAAI,KAAK,KAAK,MAAM,KAAK;EAC/B,OAAO,SAAS,KAAK,CAAC;EACtB,KAAK,MAAM,QAAQ,EAAE,QAAQ;EAC7B,OAAO;CACX;CAEA,MAAM,QAAc,QAAe,CAAC,GAAG;EACnC,OAAO,KAAK,IAAI,QAAQ,SAAS,KAAK;CAC1C;CACA,KAAK,QAAc,OAAc;EAC7B,OAAO,KAAK,IAAI,QAAQ,QAAQ,KAAK;CACzC;CACA,QAAQ,QAAc,OAAc;EAChC,OAAO,KAAK,IAAI,QAAQ,WAAW,KAAK;CAC5C;CACA,SAAS,QAAc,OAAc;EACjC,OAAO,KAAK,IAAI,QAAQ,QAAQ,KAAK;CACzC;CACA,SAAS,QAAc,OAAc;EACjC,OAAO,KAAK,IAAI,QAAQ,YAAY,KAAK;CAC7C;CACA,SAAS,QAAc,OAAc;EACjC,OAAO,KAAK,IAAI,QAAQ,QAAQ,KAAK;CACzC;CAEA,SAAS,QAA8B,OAAe,QAAgB,OAA8B,CAAC,GAAe;EAChH,MAAM,QAAoB;GAAE,IAAI,KAAK,OAAO;GAAQ;GAAO;GAAQ;GAAQ,SAAS,KAAK,WAAW;GAAM,SAAS;EAAE;EACrH,KAAK,OAAO,KAAK,KAAK;EACtB,OAAO;CACX;CAEA,WAAW,OAAgB,OAAe,QAAgB,SAA6C;EACnG,MAAM,QAAoB;GAAE,IAAI,KAAK,OAAO;GAAQ;GAAO;GAAQ,QAAQ;GAAM,SAAS;GAAO,SAAS;GAAG,SAAS;GAAO;EAAQ;EACrI,KAAK,OAAO,KAAK,KAAK;EACtB,OAAO;CACX;;CAGA,SAAS,QAAe,CAAC,GAAS;EAC9B,OAAO,KAAK,KAAK,SAAS,KAAK;CACnC;CAEA,WAAW,MAAY,OAAe,QAA4B;EAC9D,MAAM,QAAoB;GAAE,IAAI,KAAK,OAAO;GAAQ;GAAO;GAAQ,QAAQ;GAAM,SAAS;GAAO,SAAS;GAAG,SAAS;EAAK;EAC3H,KAAK,OAAO,KAAK,KAAK;EACtB,OAAO;CACX;CAEA,MAAM,GAAS,MAAc;EACzB,EAAE,SAAS;EACX,KAAK,MAAM,IAAI,CAAC;CACpB;;CAGA,WAAW;EACP,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,MAAM,GAAG,EAAE,GAAG;CACnD;AACJ;;AAgBA,SAAgB,aAAa,GAAqB;CAC9C,OAAO,EAAE,WAAW,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,OAAO;AACnE;;AAGA,SAAS,SAAS,GAAoB;CAClC,OAAO,EAAE,WAAW,IAAI;EAAC,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;CAAE,IAAI;EAAC,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI;EAAG;EAAG;CAAC;AACjI;;AAGA,SAAgB,KAAK,GAAU,GAAgB;CAC3C,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC;CACrC,MAAM,IAAI,IAAI,MAAc,CAAC;CAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI;CACxI,OAAO;EAAC,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;EAAI,EAAE;CAAE;AAChE;;AAGA,SAAgB,KAAK,GAAU,GAAiB;CAC5C,IAAI,EAAE,WAAW,KAAK,EAAE,WAAW,GAAG,OAAO,KAAK,GAAG,CAAC;CACtD,OAAO;EACH,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAClD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAClD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;EAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CACpE;AACJ;AAIA,IAAa,cAAb,MAAyB;CACrB,QAA0B,CAAC;CAC3B,MAAwB,CAAC;CACzB,OAAO,GAAW,GAAW;EACzB,KAAK,MAAM,KAAK,KAAK,IAAI;EACzB,KAAK,IAAI,KAAK,GAAG,CAAC;EAClB,OAAO;CACX;CACA,OAAO,GAAW,GAAW;EACzB,KAAK,MAAM,KAAK,KAAK,IAAI;EACzB,KAAK,IAAI,KAAK,GAAG,CAAC;EAClB,OAAO;CACX;CACA,OAAO,IAAY,IAAY,GAAW,GAAW;EACjD,KAAK,MAAM,KAAK,KAAK,IAAI;EACzB,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;EAC1B,OAAO;CACX;CACA,QAAQ,IAAY,IAAY,IAAY,IAAY,GAAW,GAAW;EAC1E,KAAK,MAAM,KAAK,KAAK,KAAK;EAC1B,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;EAClC,OAAO;CACX;CACA,QAAQ;EACJ,KAAK,MAAM,KAAK,KAAK,KAAK;EAC1B,OAAO;CACX;CACA,QAAkB;EACd,OAAO;GAAE,OAAO,WAAW,KAAK,KAAK,KAAK;GAAG,QAAQ,aAAa,KAAK,KAAK,GAAG;EAAE;CACrF;AACJ;;AAGA,SAAgB,gBAAc,GAAa,GAAkB;CACzD,MAAM,MAAM,IAAI,aAAa,EAAE,OAAO,MAAM;CAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;EACpC,MAAM,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI;EACxC,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;EACjC,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;CACzC;CACA,OAAO;EAAE,OAAO,EAAE;EAAO,QAAQ;CAAI;AACzC;;AAGA,SAAgB,WAAW,GAA+C;CACtE,IAAI,KAAK,UAAU,KAAK,UAAU,KAAK,WAAW,KAAK;CACvD,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,QAAQ,KAAK,GAAG;EACzC,KAAK,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE;EAAG,KAAK,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE;EAC7D,KAAK,KAAK,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE;EAAG,KAAK,KAAK,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE;CACzE;CACA,OAAO,OAAO,SAAS,EAAE,IAAI;EAAC;EAAI;EAAI;EAAI;CAAE,IAAI;EAAC;EAAG;EAAG;EAAG;CAAC;AAC/D;AAEA,SAAgB,SAAS,GAAqB;CAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ;AACpC;;;;;;;;;AAUA,SAAgB,YAAY,GAAkE;CAC1F,IAAI,EAAE,QAAQ,OAAO;EAAE,GAAG,EAAE;EAAQ,MAAM,EAAE,QAAQ;CAAQ;CAC5D,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,SAAS,eAAe,CAAC;CACjD,OAAO;EAAE,GAAG;GAAC;GAAI;GAAG;GAAG;GAAI;GAAI;EAAE;EAAG;CAAK;AAC7C;AAEA,SAAgB,eAAe,GAA0G;CACrI,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,EAAE;CACvB,MAAM,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,MAAM;CACvC,MAAM,MAAM,EAAE,OAAO;CACrB,IAAI,QAAQ,WAAW,OAAO;EAAE,IAAI,IAAI;EAAI,IAAI,IAAI;EAAI,IAAI;EAAG,IAAI;EAAG,MAAM;CAAQ;CACpF,IAAI,QAAQ,QAAQ,OAAO;EAAE,IAAI;EAAG,IAAI;EAAG,IAAI;EAAG,IAAI;EAAG,MAAM;CAAS;CACxE,MAAM,IAAI,QAAQ,SAAS,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;CAC7E,OAAO;EAAE,IAAI;EAAG,IAAI;EAAG,IAAI,KAAK,IAAI,KAAK,KAAK;EAAG,IAAI,KAAK,IAAI,KAAK,KAAK;EAAG,MAAM,QAAQ,SAAS,UAAU;CAAQ;AACxH;;;ACpaA,IAAa,KAAK;CACd,QAAQ;CACR,SAAS;CACT,UAAU;CACV,WAAW;CACX,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;CACT,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,SAAS;CACT,MAAM;CACN,MAAM;CACN,SAAS;CACT,YAAY;CACZ,WAAW;CACX,UAAU;CACV,UAAU;CACV,WAAW;CACX,MAAM;CACN,UAAU;AACd;AAEA,IAAa,OAAO;AAQpB,IAAa,cAAb,MAAyB;CAQQ;CAAkC;CAP/D;CACA;CACA,MAAc;CACd,MAAc;;CAEd,UAAU;CAEV,YAAY,MAAkC,QAA6C;EAA9D,KAAA,OAAA;EAAkC,KAAA,SAAA;EAC3D,KAAK,QAAQ,CAAC;CAClB;CAEA,QAAgB,UAAkB;EAC9B,MAAM,MAAM,KAAK,KAAK,aAAa,QAAQ;EAC3C,KAAK,MAAM,KAAK,KAAK,eAAe;EACpC,KAAK,MAAM,IAAI,YAAY,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;EAC5D,KAAK,MAAM,IAAI,aAAa,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;CACjE;;CAGA,MAAM,GAAW;EACb,IAAI,KAAK,IAAI,WAAW,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;EAC1D,IAAI,KAAK,MAAM,IAAI,KAAK,KAAK;GACzB,KAAK,MAAM;GACX,IAAI,IAAI,KAAK,KAAK,KAAK,QAAQ,CAAC;EACpC;CACJ;CAEA,EAAE,GAAW;EACT,KAAK,IAAI,KAAK,SAAS,MAAM;CACjC;CAEA,EAAE,GAAW;EACT,KAAK,IAAI,KAAK,SAAS;CAC3B;CAEA,QAAQ;EACJ,IAAI,KAAK,MAAM,GAAG;GACd,KAAK,WAAW,KAAK;GACrB,KAAK,KAAK,MAAM,KAAK,GAAG;GACxB,KAAK,MAAM;EACf;EAEA,IAAI,KAAK,IAAI,WAAW,KAAK,OAAO,QAAQ,KAAK,QAAQ,CAAC;CAC9D;CAEA,YAAY;EACR,MAAM,IAAI,KAAK;EACf,KAAK,UAAU;EACf,OAAO;CACX;AACJ;;;;;;;;;ACzCA,IAAM,QAAoC;CAAE,KAAK;CAAG,OAAO;CAAG,OAAO;CAAG,OAAO;AAAE;AAEjF,IAAa,eAAe,SAAqB,OAAO,SAAS,WAAW,MAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK;AAElH,IAAM,YAAwE;CAC1E,QAAQ;CACR,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;CACN,MAAM;AACV;AAEA,SAAS,OAAO,GAA0B,OAA4C;CAClF,QAAQ,EAAE,MAAV;EACI,KAAK,UAAU,OAAO;EACtB,KAAK,WAAW,OAAO,QAAQ,IAAI;EACnC,KAAK,QAAQ,OAAO,KAAK,IAAI,GAAG,EAAE,QAAS,QAAQ,KAAwB,CAAC;EAC5E,KAAK,SAAS,OAAO,mBAAmB,KAAiD;EACzF,KAAK,QAAQ;GAAE,MAAM,IAAI;GAAmC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;EAAG;EAC/E,KAAK,QAAQ;GAAE,MAAM,IAAI,kBAAkB,KAAgD;GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;EAAG;EACjH,SAAS,MAAM,IAAI,MAAM,iBAAiB,EAAE,KAAK,KAAK,EAAE,KAAK,6CAA6C;CAC9G;AACJ;;AAGA,SAAS,UAAU,MAAc,MAAqC;CAClE,MAAM,IAAI,eAAe,IAAI,GAAG,OAAO,MAAM,MAAM,EAAE,SAAS,IAAI;CAClE,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,WAAW,KAAK,MAAM,KAAK,sCAAsC;CACzF,IAAI,CAAC,UAAU,EAAE,OAAO,MAAM,IAAI,MAAM,WAAW,KAAK,MAAM,KAAK,KAAK,EAAE,KAAK,0BAA0B;CACzG,OAAO;AACX;;AAGA,SAAgB,OAAO,MAAmE;CACtF,IAAI,SAAS;CACb,MAAM,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE,KAAK,CAAC,MAAM,WAAW;EAC3D,MAAM,OAAO,UAAU,UAAU,UAAU,UAAU,KAAK,MAAM,IAAI,EAAE,QAAS,MAAM;EACrF,MAAM,SAAS,YAAY,IAAI;EAC/B,MAAM,IAAI;GAAE;GAAM;GAAM;GAAQ;EAAO;EACvC,UAAU;EACV,OAAO;CACX,CAAC;CACD,IAAI,SAAA,IAAqB,MAAM,IAAI,MAAM,WAAW,KAAK,KAAK,aAAa,OAAO,yBAAoC;CACtH,OAAO;AACX;;AAGA,SAAgB,WAAyC,MAAgE;CACrH,MAAM,SAAS,OAAO,IAAI;CAC1B,MAAM,QAAQ,OAAO,QAAQ,GAAG,MAAM,IAAI,EAAE,QAAQ,CAAC;CACrD,MAAM,WAAW,OAAO,KAAK,MAAM;EAC/B,MAAM,QAAQ,KAAK,OAAO,EAAE;EAC5B,IAAI,UAAU,SAAS,OAAO,MAAM;EACpC,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,IAAI;EACrC,QAAQ,MAAS,OAAO,GAAI,EAA8B,EAAE,KAAK;CACrE,CAAC;CACD,OAAO;EACH,MAAM,KAAK;EACX,SAAS,KAAK;EACd,cAAc,KAAK;EACnB;EACA,OAAO,KAAK;EACZ,KAAK,QAAQ;GACT,MAAM,MAAM,KAAK,UAAU,KAAK,QAAQ,MAAM,IAAK,CAAC;GACpD,IAAI,QAAQ,MAAM,OAAO;GACzB,MAAM,SAAS,IAAI,MAAc,KAAK,EAAE,KAAK,CAAC;GAC9C,OAAO,SAAS,GAAG,MAAM;IACrB,MAAM,IAAI,SAAS,GAAG,QAAQ,GAAG;IACjC,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,EAAE;IACxC,IAAI,IAAI,EAAE,QAAQ,MAAM,IAAI,MAAM,WAAW,KAAK,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,uBAAuB,EAAE,QAAQ;IAC9G,IAAI,OAAO,MAAM,UAAU,OAAO,EAAE,UAAU;SACzC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE,SAAS,KAAK,EAAE;GAC9D,CAAC;GACD,OAAO;IAAE;IAAQ,GAAI,KAAK,SAAS,KAAK,OAAO,QAAQ,GAAG,IAAI,CAAC;GAAG;EACtE;CACJ;AACJ;;;;AC5HA,IAAA,gBAAe,WAA8C;CACzD,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EAAE,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAAG,QAAQ,MAAM;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;GAAG;EAAC;CAAE,EAC1J;CACA,aAAa,CAAC;AAClB,CAAC;;;;ACHD,IAAM,kBAAkB;AACxB,IAAM,aAAa,WAAmB,OAAO,aAAa,eAAe,SAAS,MAAM,MAAM,SAAS,OAAO,EAAE;AAGhH,IAAM,aAAa,SAAiB,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAI/F,IAAM,KAAK;AAEX,SAAS,OAAK,SAAiB,QAAgB,MAAc;CACzD,MAAM,SAAS,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG,GAAG;CACxC,MAAM,MAAM,OAAO;CACnB,MAAM,SAAS,IAAI,gBAAgB,MAAM,OAAO,QAAQ,GAAG;CAC3D,MAAM,MAAM,OAAO,WAAW,MAAM,EAAE,oBAAoB,KAAK,CAAC;CAChE,IAAI,YAAY;CAChB,IAAI,SAAS,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM;CAC9C,IAAI,YAAY;CAChB,IAAI,OAAO,GAAG,OAAO,KAAM,GAAG,MAAM,OAAO;CAC3C,IAAI,eAAe;CACnB,IAAI,YAAY;CAChB,IAAI,cAAc;CAClB,OAAO,SAAS,GAAG,MAAM;EACrB,MAAM,UAAU,IAAI,YAAY,CAAC,EAAE;EACnC,IAAI,SAAS,GAAG,IAAI,OAAO,MAAM,WAAW,GAAG,MAAM,GAAI;CAC7D,CAAC;CACD,MAAM,MAAM,IAAI,aAAa,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM,EAAE;CAChE,MAAM,QAAQ,OAAO,OAAO;CAC5B,MAAM,SAAS,IAAI,kBAAkB,QAAQ,OAAO,CAAC;CACrD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACtB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC5B,IAAI,MAAM;EACV,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM,OAAO,QAAQ,IAAI,KAAK,MAAM;EAC1H,MAAM,IAAI,OAAO,KAAK;EACtB,MAAM,KAAK,IAAI,QAAQ,KAAK;EAC5B,OAAO,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK;EAC5C,OAAO,IAAI,KAAK;CACpB;CAEJ,OAAO;EAAE,QAAQ,OAAO;EAAQ;EAAQ;CAAM;AAClD;AAEA,IAAA,gBAAe,WAA2G;CACtH,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,MAAM;EACN,QAAQ;GAAE,MAAM;GAAO,MAAM,CAAC,WAAW,YAAY;GAAG,QAAQ,IAAI,MAAM,EAAE,MAAM;EAAO;EACzF,MAAM;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE;EAAK;EAC9C,KAAK;EACL,YAAY;EACZ,SAAS;CACb;CACA,QAAQ,GAAG;EACP,MAAM,UAAU,oBAAoB,EAAE,OAAO;EAC7C,IAAI,QAAQ,WAAW,GAAG,OAAO;EAEjC,MAAM,SAAS,UAAU,EAAE,UAAU,IAAI,EAAE,aAAa;EACxD,MAAM,OAAO,UAAU,EAAE,IAAI;EAC7B,OAAO;GAAE;GAAQ;GAAM;GAAS,OAAO,OAAK,SAAS,QAAQ,IAAI;EAAE;CACvE;CACA,SAAS,IAAI,OAAO,EAChB,KAAK;EAAE,KAAK,SAAS,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE;EAAW,OAAO,EAAE,MAAM;EAAO,QAAQ,EAAE;EAAM,QAAQ,EAAE,MAAM;CAAO,EACzH;CACA,aAAa;EACT,QAAQ,MAAM,EAAE,KAAK;EACrB,QAAQ,MAAM;GAAE,MAAM;GAAI,SAAS;GAAO,YAAY;GAAa,KAAK;GAAQ,YAAY;GAAQ,SAAS;EAAM,CAAC,EAAE,KAAK;EAC3H,QAAQ,MAAM;GAAE,MAAM;GAAI,SAAS;GAAM,YAAY;GAAe,KAAK;EAAQ,CAAC,EAAE,KAAK;EACzF,QAAQ,MAAM;GAAE,MAAM;GAAG,KAAK;GAAS,YAAY;GAAS,SAAS;EAAQ,CAAC,EAAE,KAAK;CACzF;AACJ,CAAC;;;;ACzED,IAAM,WAA8C;CAChD,SAAS;EAAC;EAAW;EAAW;EAAW;CAAS;CACpD,KAAK;EAAC;EAAW;EAAW;EAAW;CAAS;CAChD,KAAK;EACD;EAAW;EAAW;EAAW;EACjC;EAAW;EAAW;EAAW;EACjC;EAAW;EAAW;EAAW;EACjC;EAAW;EAAW;EAAW;CACrC;AACJ;AAGA,IAAM,YAAY,QAAgB;CAC9B,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE;CACnC,OAAO;EAAC;EAAI;EAAG;CAAC,EAAE,KAAK,MAAM,SAAU,KAAK,IAAK,OAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;AAC7E;AAEA,IAAA,mBAAe,WAA2D;CACtE,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,MAAM;EACN,QAAQ;EACR,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,SAAS;GAAG,QAAQ,IAAI,MAAM,EAAE,QAAQ;EAAO;EAC5E,SAAS;GAAE,MAAM;IAAE,OAAO;IAAI,IAAI;GAAQ;GAAG,QAAQ,IAAI,MAAM,EAAE,QAAQ,QAAQ,QAAQ;EAAE;CAC/F;CACA,QAAQ,GAAG;EACP,IAAI,EAAE,EAAE,SAAS,IAAI,OAAO;EAC5B,IAAI,EAAE,YAAY,UAAU,EAAE,QAAQ,GAAG,OAAO;EAChD,OAAO,EAAE,SAAS,EAAE,YAAY,SAAS,CAAC,IAAI,SAAS,EAAE,SAAS;CACtE;CACA,aAAa;EACT,QAAQ,SAAS,EAAE,KAAK;EACxB,QAAQ,SAAS,EAAE,SAAS,UAAU,CAAC,EAAE,KAAK;EAC9C,QAAQ,SAAS;GAAE,SAAS;GAAO,QAAQ;EAAI,CAAC,EAAE,KAAK;EACvD,QAAQ,SAAS,EAAE,SAAS,MAAM,CAAC,EAAE,KAAK;CAC9C;AACJ,CAAC;;;;ACtCD,IAAA,wBAAe,WAAgC;CAC3C,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,QAAQ;EAAS,MAAM;EAAS,SAAS;EAAS,MAAM;EAAS,MAAM;CAAQ;CACzF,QAAQ,GAAG;EACP,IAAI,EAAE,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,IAAI,OAAO;EAChD,MAAM,OAAO,kBAAkB,EAAE,IAAI;EACrC,OAAO,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC;CAClD;CACA,OAAO,GAAG;EACN,MAAM,OAAO,kBAAkB,EAAE,IAAI;EACrC,OAAO,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;CAC5E;CACA,aAAa;EACT,QAAQ,cAAc,EAAE,KAAK;EAC7B,QAAQ,cAAc;GAAE,QAAQ;GAAI,MAAM;GAAI,SAAS;GAAK,MAAM;EAAE,CAAC,EAAE,KAAK;EAC5E,QAAQ,cAAc;GAAE,QAAQ;GAAI,MAAM;GAAI,MAAM;GAAK,MAAM;EAAE,CAAC,EAAE,KAAK;CAC7E;AACJ,CAAC;;;;AClBD,IAAA,gBAAe,WAAqE;CAChF,MAAM;CACN,SAAS;CACT,QAAQ;EAEJ,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,WAAW;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAM;EACrE,MAAM;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE;EAAM;EACtD,WAAW;CACf;CACA,MAAM,CAAC,QAAQ;CACf,QAAQ,GAAG;EACP,IAAI,EAAE,UAAU,KAAK,EAAE,aAAa,GAAG,OAAO;EAC9C,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC;EAC9C,OAAO;GAAE;GAAG,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK;GAAG,OAAO,EAAE,SAAS;EAAE;CACpE;CACA,SAAS,IAAI,OAAO;EAAE,MAAM;GAAC,EAAE;GAAO,EAAE;GAAO;EAAC;EAAG,OAAO,IAAI,EAAE;CAAM;CACtE,aAAa;EACT,QAAQ,MAAM,EAAE,KAAK;EACrB,QAAQ,MAAM;GAAE,WAAW;GAAK,QAAQ;GAAI,WAAW;EAAI,CAAC,EAAE,KAAK;EACnE,QAAQ,MAAM;GAAE,WAAW;GAAG,QAAQ;GAAG,WAAW;EAAI,CAAC,EAAE,KAAK;CACpE;AACJ,CAAC;;;;ACrBD,IAAA,eAAe,WAAuB;CAClC,MAAM;CACN,SAAS;CACT,QAAQ,CAAC;CACT,MAAM,CAAC,QAAQ;CAEf,UAAU,MAAO,EAAE,SAAS,IAAI,CAAC,IAAI;CACrC,OAAO,GAAG;EAEN,MAAM,QAAQ,EAAE,SAAS;EACzB,OAAO;GAAE,MAAM;IAAC;IAAO;IAAO;GAAC;GAAG,OAAO,IAAI;EAAM;CACvD;CACA,aAAa;EAAC,QAAQ,KAAK,CAAC,EAAE,KAAK;EAAI,QAAQ,KAAK,EAAE,EAAE,KAAK;EAAI,QAAQ,KAAK,CAAC,EAAE,KAAK;CAAE;AAC5F,CAAC;;;;ACbD,IAAA,gBAAe,WAAwB;CACnC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,UAAU;EAAS,QAAQ;CAAQ;CAC7C,UAAU,MAAO,EAAE,aAAa,IAAI,OAAO,CAAC;CAC5C,OAAO,GAAG;EAKN,IAAI,QAAQ,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI,IAAK,EAAE,OAAO,IAAI,EAAG,IAAI;EACjE,IAAI,EAAE,WAAW,GAAG;GAChB,MAAM,IAAI,EAAE,WAAW;GACvB,IAAI,IAAI;GACR,OAAO,IAAI,KAAM,KAAK,IAAI,IAAI,IAAI,MAAO,IAAI,KAAK,IAAI,KAAK;GAC3D,QAAQ,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI,IAAK,EAAE,OAAO,IAAI,EAAG,KAAK,KAAK,GAAG;EAC5F;EACA,OAAO,EAAE,MAAM;CACnB;CACA,aAAa;EACT,QAAQ,MAAM,EAAG,EAAE,KAAK;EACxB,QAAQ,MAAM,GAAI,EAAE,KAAK;EACzB,QAAQ,MAAM;GAAE,UAAU;GAAK,QAAQ;IAAE,GAAG;IAAK,GAAG;GAAI;EAAE,CAAC,EAAE,KAAK;CACtE;AACJ,CAAC;;;;ACvBD,IAAM,MAAM;CAAC;CAAK;CAAM;CAAM;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAC/E,IAAM,OAAO;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAM;CAAM;CAAK;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEhF,IAAA,8BAAe,WAAsC;CACjD,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,KAAK;GAAE,MAAM;IAAE,OAAO;IAAI,IAAI;GAAM;GAAG,aAAa;EAAI;EACxD,MAAM;GAAE,MAAM;IAAE,OAAO;IAAI,IAAI;GAAM;GAAG,aAAa;EAAK;EAC1D,QAAQ;GACJ,MAAM;GACN,MAAM,CAAC,UAAU,OAAO;GACxB,MAAM,GAAG;IACL,MAAM,MAAO,EAAE,QAAQ,KAAK,KAAM;IAClC,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,EAAE,MAAM;GAC9D;EACJ;CACJ;CACA,UAAU,MAAO,EAAE,UAAU,IAAI,OAAO,CAAC;CACzC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO;CAClC,aAAa;EACT,QAAQ,oBAAoB,EAAE,KAAK;EACnC,QAAQ,oBAAoB;GAAE,QAAQ;GAAG,OAAO;EAAG,CAAC,EAAE,KAAK;EAC3D,QAAQ,oBAAoB;GAAE,QAAQ;GAAK,OAAO;EAAI,CAAC,EAAE,KAAK;CAClE;AACJ,CAAC;;;;ACzBD,IAAM,OAAK,OAAQ,OAAK,OAAQ,OAAK;AAGrC,SAAS,SAAS,OAAiB,OAA2B;CAC1D,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC;CAChC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,IAAI,MAAM;EACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,OAAO,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI;EACpE,IAAI,MAAM,GAAG,OAAO,MAAM,IAAI,IAAI;EAClC,IAAI,IAAI,IAAI,KAAK;CACrB;CAEJ,OAAO;AACX;AAEA,IAAM,QAAQ,GAAW,MAAc;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAClG,IAAM,WAAW,GAAW,GAAW,MAAc;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAEhH,SAAS,WAAW,GAAqB;CACrC,MAAM,IAAI,IAAI;CACd,OAAO;EACH,IAAI,IAAI;EAAI,IAAI;EAAI,IAAI;EAAI;EAAG;EAC/B,IAAI;EAAI,IAAI,IAAI;EAAI,IAAI;EAAI;EAAG;EAC/B,IAAI;EAAI,IAAI;EAAI,IAAI,IAAI;EAAI;EAAG;EAC/B;EAAG;EAAG;EAAG;EAAG;CAChB;AACJ;AAEA,SAAS,IAAI,KAAuB;CAChC,MAAM,MAAO,MAAM,KAAK,KAAM;CAC9B,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG;CACzC,OAAO;EACH,OAAK,KAAK,IAAI,QAAM,IAAI;EAAK,OAAK,IAAI,SAAM,IAAI;EAAK,OAAK,IAAI,SAAM,KAAK,IAAI;EAAK;EAAG;EACrF,OAAK,IAAI,SAAM,IAAI;EAAO,OAAK,KAAK,IAAI,QAAM,IAAI;EAAO,OAAK,IAAI,SAAM,IAAI;EAAQ;EAAG;EACvF,OAAK,IAAI,SAAM,IAAI;EAAW,OAAK,IAAI,SAAM,IAAI;EAAI,OAAK,KAAK,IAAI,QAAM,IAAI;EAAI;EAAG;EACpF;EAAG;EAAG;EAAG;EAAG;CAChB;AACJ;AAEA,IAAA,0BAAe,WAAwD;CACnE,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EACJ,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAC7B,MAAM;GAAC;GAAc;GAAY;GAAc;GAAO;GAAY;GAAe;GAAQ;GAAW;EAAY;EAChH,QAAQ,IAAI,MAAM,EAAE;CACxB,EACJ;CACA,QAAQ,GAAG;EACP,IAAI,MAAM,KAAK,GAAG,CAAC;EACnB,IAAI,MAAM;EACV,MAAM,SAAS,MAAgB;GAAE,MAAM,SAAS,GAAG,GAAG;GAAG,MAAM;EAAM;EACrE,MAAM,IAAI,EAAE,cAAc;EAC1B,IAAI,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC;EAC7B,MAAM,IAAI,EAAE,YAAY;EACxB,IAAI,MAAM,GAAG,MAAM,KAAK,GAAG,MAAO,IAAI,EAAE,CAAC;EACzC,MAAM,IAAI,EAAE,cAAc;EAC1B,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,CAAC;EAChC,MAAM,MAAM,EAAE,OAAO,KAAK,MAAM,OAAO;EACvC,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC;EACzB,MAAM,IAAI,EAAE,YAAY;EACxB,IAAI,MAAM,GAAG,MAAM,WAAW,IAAI,IAAI,EAAG,CAAC;EAC1C,MAAM,IAAI,EAAE,eAAe;EAC3B,IAAI,MAAM,GAAG,MAAM,QAAQ,IAAI,IAAK,GAAG,CAAC,IAAI,EAAG,CAAC;EAChD,MAAM,KAAK,EAAE,QAAQ;EACrB,IAAI,OAAO,GAAG,MAAM,QAAQ,KAAK,KAAM,CAAC,KAAK,IAAK,KAAK,GAAI,CAAC;EAC5D,MAAM,KAAK,EAAE,WAAW;EACxB,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,KAAM,IAAI,KAAM,EAAE,CAAC;EAChD,MAAM,KAAK,EAAE,cAAc;EAC3B,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,KAAM,IAAI,MAAO,EAAE,CAAC;EACjD,OAAO,MAAM,EAAE,QAAQ,IAAI,IAAI;CACnC;CACA,aAAa;EACT,QAAQ,gBAAgB;GAAE,YAAY;GAAK,UAAU;GAAK,YAAY;EAAI,CAAC,EAAE,KAAK;EAClF,QAAQ,gBAAgB;GAAE,KAAK;GAAK,UAAU;EAAI,CAAC,EAAE,KAAK;EAC1D,QAAQ,gBAAgB;GAAE,aAAa;GAAK,MAAM;GAAM,SAAS;GAAK,YAAY;EAAK,CAAC,EAAE,KAAK;EAC/F,QAAQ,gBAAgB;GAAE,UAAU;GAAK,YAAY;EAAE,CAAC,EAAE,KAAK;CACnE;AACJ,CAAC;;;;ACjFD,IAAA,sBAAe,WAA+D;CAC1E,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EAAE,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAAG,QAAQ,MAAM,MAAM,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE;CAAE,EAC9F;CACA,aAAa,CAAC;AAClB,CAAC;;;;ACLD,IAAM,WAAW;AAEjB,SAAS,UAAU,QAA4B,GAAmB;CAC9D,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,IAAI,KAAK,OAAO,GAAG,IAAI,OAAO,OAAO,GAAG;CACxC,MAAM,OAAO,OAAO,OAAO,SAAS;CACpC,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KAAK;EACxC,MAAM,CAAC,IAAI,MAAM,OAAO;EACxB,MAAM,CAAC,IAAI,MAAM,OAAO,IAAI;EAC5B,IAAI,KAAK,MAAM,KAAK,IAAI,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK;CACtF;CACA,OAAO;AACX;AAEA,SAAS,KAAK,QAAsC;CAChD,MAAM,SAAS,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;CACrD,MAAM,MAAgB,CAAC;CACvB,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,KAAK;EAChC,MAAM,IAAI,UAAU,QAAQ,IAAI,QAAQ;EACxC,IAAI,KAAK,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ;CAC5E;CACA,OAAO;AACX;AAEA,IAAM,QAAkC;CAAE,GAAG;EAAC;EAAG;EAAG;EAAG;CAAC;CAAG,GAAG;EAAC;EAAG;EAAG;EAAG;CAAC;CAAG,GAAG;EAAC;EAAG;EAAG;EAAG;CAAC;CAAG,GAAG;EAAC;EAAG;EAAG;EAAG;CAAC;AAAE;AAE7G,IAAA,iBAAe,WAA+C;CAC1D,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,MAAM;GAAE,MAAM;GAAS,MAAM,CAAC,SAAS;GAAG,QAAQ,MAAM,MAAM,EAAE,WAAW,UAAU;IAAC;IAAG;IAAG;IAAG;GAAC;EAAE;EAClG,OAAO;GAAE,MAAM;IAAE,OAAO;IAAc,IAAI;GAAM;GAAG,MAAM,CAAC,QAAQ;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAO;CACpG;CACA,QAAQ,GAAG;EACP,MAAM,SAAS,KAAK,EAAE,UAAU,CAAC,CAAC;EAClC,OAAO,OAAO,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,EAAE,OAAO;CACvF;CACA,aAAa;EACT,QAAQ,OAAO,EAAE,QAAQ;GAAC,CAAC,GAAG,CAAC;GAAG,CAAC,KAAM,GAAI;GAAG,CAAC,KAAM,GAAI;GAAG,CAAC,GAAG,CAAC;EAAC,EAAE,CAAC,EAAE,KAAK;EAC9E,QAAQ,OAAO;GAAE,QAAQ;IAAC,CAAC,GAAG,EAAG;IAAG,CAAC,IAAK,EAAG;IAAG,CAAC,GAAG,CAAC;GAAC;GAAG,SAAS;EAAI,CAAC,EAAE,KAAK;EAC9E,QAAQ,OAAO;GAAE,QAAQ;IAAC,CAAC,GAAG,CAAC;IAAG,CAAC,IAAK,EAAG;IAAG,CAAC,GAAG,EAAG;GAAC;GAAG,SAAS;EAAI,CAAC,EAAE,KAAK;CAClF;AACJ,CAAC;;;;AC7CD,IAAA,0BAAe,WAAkE;CAC7E,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,QAAQ;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAM;EAClE,MAAM;GAAE,MAAM;GAAS,MAAM,CAAC,OAAO;GAAG,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC;EAAE;CACjG;CACA,UAAU,MAAO,EAAE,UAAU,IAAI,OAAO;EAAE,OAAO,EAAE,SAAS;EAAG,KAAM,EAAE,QAAQ,KAAK,KAAM;CAAI;CAC9F,SAAS,IAAI,OAAO;EAAE,MAAM;GAAC,EAAE;GAAO;GAAG,EAAE;EAAG;EAAG,OAAO,IAAI,EAAE;CAAM;CACpE,aAAa;EACT,QAAQ,gBAAgB,EAAE,EAAE,KAAK;EACjC,QAAQ,gBAAgB;GAAE,QAAQ;GAAI,OAAO;EAAG,CAAC,EAAE,KAAK;EACxD,QAAQ,gBAAgB;GAAE,QAAQ;GAAI,OAAO;EAAI,CAAC,EAAE,KAAK;EACzD,QAAQ,gBAAgB;GAAE,QAAQ;GAAK,OAAO;EAAI,CAAC,EAAE,KAAK;CAC9D;AACJ,CAAC;;;;ACdD,IAAM,oBACF;AA0DJ,IAAM,WAAW;AACjB,IAAM,OAAO;AAEb,IAAI,QAAkC;AACtC,SAAS,gBAAmC;CACxC,IAAI,OAAO,OAAO;CAClB,MAAM,OAAO,kBAAkB,QAAQ,mBAAmB,EAAE;CAC5D,MAAM,QAAQ,IAAI,WAAY,KAAK,SAAS,KAAM,CAAC;CACnD,IAAI,MAAM,GAAG,OAAO,GAAG,UAAU;CACjC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EAClC,MAAO,OAAO,IAAK,SAAS,QAAQ,KAAK,EAAE;EAC3C,QAAQ;EACR,IAAI,QAAQ,GAAG;GAAE,QAAQ;GAAG,MAAM,aAAc,OAAO,OAAQ;EAAM;CACzE;CACA,MAAM,MAAM,IAAI,kBAAkB,OAAO,OAAO,CAAC;CACjD,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,GAAI,IAAI,IAAI,IAAI,KAAK;CAC9F,OAAQ,QAAQ;AACpB;AAEA,IAAA,iBAAe,WAAyB;CACpC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,QAAQ;EACR,OAAO;EACP,YAAY;EACZ,OAAO;EACP,QAAQ;GAAE,MAAM;GAAO,QAAQ,MAAM,EAAE;EAAO;CAClD;CACA,UAAU,MAAO,EAAE,UAAU,MAAM,OAAO,CAAC;CAC3C,SAAS,OAAO,EACZ,KAAK,EAAE,UAAU,SAAS;EAAE,KAAK;EAAqB,OAAO;EAAM,QAAQ;EAAM,QAAQ,cAAc;CAAE,IAAI,KAAA,EACjH;CACA,aAAa;EACT,QAAQ,OAAO,EAAE,KAAK;EACtB,QAAQ,OAAO;GAAE,QAAQ;GAAG,QAAQ;GAAG,OAAO;GAAG,YAAY;EAAK,CAAC,EAAE,KAAK;EAC1E,QAAQ,OAAO;GAAE,OAAO;GAAQ,QAAQ;EAAE,CAAC,EAAE,KAAK;EAClD,QAAQ,OAAO;GAAE,QAAQ;GAAG,QAAQ;GAAG,OAAO;EAAE,CAAC,EAAE,KAAK;CAC5D;AACJ,CAAC;;;;ACnGD,IAAA,qBAAe,WAAwF;CACnG,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,QAAQ;GAAE,MAAM;GAAS,MAAM,CAAC,WAAW,SAAS;GAAG,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;EAAE;EACtF,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,MAAM;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAM;EAChE,OAAO;EACP,QAAQ;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE;EAAO;CACtD;CACA,QAAQ,GAAG;EACP,IAAI,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;EAChD,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,CAAC,EAAE;EACd,MAAM,QAAQ,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI;EACpC,MAAM,SAAS,KAAK,IAAI,GAAG,EAAE,MAAM;EACnC,IAAI,OAAO,KAAK,OAAO,KAAK,UAAU,KAAK,WAAW,GAAG,OAAO;EAChE,OAAO;GAAE;GAAI;GAAI;GAAO;EAAO;CACnC;CACA,SAAS,IAAI,OAAO,EAAE,OAAO,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,QAAQ,EAAE,OAAO;CAC7E,aAAa;EACT,QAAQ,WAAW,EAAE,KAAK;EAC1B,QAAQ,WAAW;GAAE,SAAS;GAAI,SAAS;GAAI,MAAM;GAAI,OAAO;EAAQ,CAAC,EAAE,KAAK;EAChF,QAAQ,WAAW;GAAE,SAAS;GAAG,SAAS;GAAG,MAAM;GAAG,QAAQ;GAAG,OAAO;EAAO,CAAC,EAAE,KAAK;EACvF,QAAQ,WAAW;GAAE,SAAS;GAAK,SAAS;GAAI,MAAM;GAAI,QAAQ;GAAG,OAAO;EAAO,CAAC,EAAE,KAAK;CAC/F;AACJ,CAAC;;;;ACzBD,IAAM,OAAK,OAAQ,OAAK,OAAQ,OAAK;AAErC,IAAA,kBAAe,WAA0B;CACrC,MAAM;CACN,SAAS;CACT,QAAQ,EAEJ,QAAQ;EACJ,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAC7B,MAAM;GAAC;GAAU;GAAW;EAAY;EACxC,MAAM,GAAG;GACL,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;GAC3C,MAAM,UAAU,mBAAmB,EAAE,OAAO;GAC5C,MAAM,aAAa,mBAAmB,EAAE,UAAU;GAClD,MAAM,OAAO,MAAc;IACvB,MAAM,KAAK,WAAW,KAAK,QAAQ,MAAM;IACzC,MAAM,IAAI;KAAC,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI;KAAG,QAAQ,KAAK;IAAC;IACpD,EAAE,MAAM,IAAI;IACZ,OAAO;GACX;GACA,OAAO;IAAC,GAAG,IAAI,CAAC;IAAG,GAAG,IAAI,CAAC;IAAG,GAAG,IAAI,CAAC;IAAG;IAAG;IAAG;IAAG;IAAG;GAAC;EAC1D;CACJ,EACJ;CACA,UAAU,MAAO,EAAE,UAAU,IAAI,OAAO,CAAC;CACzC,aAAa;EACT,QAAQ,QAAQ,EAAE,KAAK;EACvB,QAAQ,QAAQ;GAAE,SAAS;GAAW,YAAY;EAAU,CAAC,EAAE,KAAK;EACpE,QAAQ,QAAQ;GAAE,QAAQ;GAAK,SAAS;GAAW,YAAY;EAAU,CAAC,EAAE,KAAK;CACrF;AACJ,CAAC;;;;AC9BD,IAAA,gBAAe,WAAwB;CACnC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,UAAU;EAAS,QAAQ;EAAS,SAAS;CAAQ;CAC/D,UAAU,MAAO,EAAE,WAAW,IAAI,CAAC,IAAI;CAEvC,eAAe,EAAE,OAAO,EAAE;CAC1B,aAAa;EACT,QAAQ,MAAM,EAAE,KAAK;EACrB,QAAQ,MAAM;GAAE,UAAU;GAAG,QAAQ;GAAW,SAAS;EAAK,CAAC,EAAE,KAAK;EACtE,QAAQ,MAAM;GAAE,UAAU;GAAK,QAAQ;EAAY,CAAC,EAAE,KAAK;CAC/D;AACJ,CAAC;;;;ACZD,IAAA,mBAAe,WAAiD;CAC5D,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EAAE,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAAG,QAAQ,MAAM;GAAC,EAAE;GAAQ;GAAG;GAAG;GAAG;GAAG;GAAG,EAAE;GAAQ;GAAG;GAAG;GAAG;GAAG;GAAG,EAAE;GAAQ;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;CAAE,EAC9I;CACA,aAAa,CAAC;AAClB,CAAC;;;;ACPD,IAAM,WAAW,MAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAGzD,IAAM,kBAAkB;AACxB,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAEvB,IAAA,gBAAe,WAAyE;CACpF,MAAM;CACN,SAAS;CAET,cAAc;CACd,QAAQ;EACJ,OAAO;EACP,YAAY;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,GAAG,EAAE,aAAa,GAAG;EAAE;EACzE,QAAQ;GAAE,MAAM;GAAO,MAAM,CAAC,YAAY;GAAG,QAAQ,MAAM,QAAQ,EAAE,aAAa,GAAG,IAAI;EAAgB;EACzG,OAAO;GACH,MAAM;GACN,MAAM,CAAC,YAAY;GACnB,MAAM,GAAG;IACL,MAAM,UAAW,EAAE,aAAa,KAAK,KAAM;IAC3C,OAAO,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC;GACjD;EACJ;EACA,KAAK;GAAE,MAAM;GAAO,MAAM,CAAC,gBAAgB;GAAG,QAAQ,IAAI,MAAM,EAAE,QAAQ;EAAW;EACrF,YAAY;GAAE,MAAM;GAAO,MAAM,CAAC,OAAO;GAAG,QAAQ,IAAI,MAAM,EAAE,QAAQ,cAAc,IAAI,iBAAiB,EAAE;EAAO;EACpH,WAAW;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE,QAAQ,aAAa,IAAI,iBAAiB,EAAE;EAAO;EACjG,aAAa;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,cAAc,cAAc,EAAE;EAAM;EAClF,OAAO;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE;EAAM;CACpD;CACA,QAAQ,GAAG;EACP,IAAI,EAAE,EAAE,QAAQ,IAAI,OAAO;EAC3B,OAAO;GACH,OAAO,KAAK,IAAI,GAAG,EAAE,iBAAiB,GAAG;GACzC,OAAO,QAAQ,EAAE,QAAQ,GAAG;GAE5B,OAAO,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI;EAClC;CACJ;CACA,SAAS,IAAI,OAAO;EAEhB,OAAO,IAAI,EAAE,QAAQ;EACrB,MAAM,EAAE,QAAQ,IAAI;GAAC,EAAE;GAAO,EAAE;GAAO;EAAC,IAAI,KAAA;EAC5C,OAAO;CACX;CACA,aAAa,CACT,QAAQ,MAAM,EAAE,KAAK,IACrB,QAAQ,MAAM;EAAE,YAAY;EAAG,OAAO;EAAG,OAAO;CAAG,CAAC,EAAE,KAAK,EAC/D;AACJ,CAAC;;;;ACpDD,IAAM,QAAQ;CAAC;CAAU;CAAY;CAAU;CAAW;CAAU;CAAW;CAAe;CAC1F;CAAc;CAAc;CAAc;CAAa;CAAO;CAAc;CAAS;AAAY;AAErG,IAAA,eAAe,WAA4C;CACvD,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,SAAS;EACT,WAAW;EACX,QAAQ;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,GAAG,EAAE,MAAM;EAAE;EAC3D,WAAW;EACX,MAAM;EACN,UAAU;EACV,OAAO;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,GAAG,MAAM,QAAQ,EAAE,KAAK,CAAC;EAAE;EACxE,OAAO;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE,OAAO;EAAO;EACxD,QAAQ;EACR,OAAO;GAAE,MAAM;GAAO,QAAQ,MAAM,EAAE,QAAQ;EAAI;EAClD,QAAQ;GAAE,MAAM;GAAO,MAAM,CAAC,WAAW;GAAG,QAAQ,MAAO,EAAE,cAAc,WAAW,IAAI;EAAG;EAC7F,OAAO;GACH,MAAM;IAAE,OAAO;IAAG,IAAI;GAAM;GAC5B,MAAM,GAAG,GAAG;IACR,MAAM,MAAgB,CAAC;IACvB,IAAI,WAAW;IACf,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,QAAQ,KAAK;KACtC,WAAW,KAAK,IAAI,UAAU,KAAK,IAAI,GAAG,EAAE,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC;KAC7F,IAAI,KAAK,QAAQ;IACrB;IACA,OAAO;GACX;EACJ;EACA,QAAQ;GAAE,MAAM;IAAE,OAAO;IAAG,IAAI;GAAQ;GAAG,MAAM,CAAC,OAAO;GAAG,QAAQ,IAAI,MAAM,EAAE,OAAO,SAAS,MAAM,mBAAmB,CAAC,CAAC;EAAE;CACjI;CACA,MAAM,CAAC,UAAU,MAAM;CACvB,QAAQ,GAAG;EAEP,IAAK,EAAE,UAAU,KAAK,EAAE,UAAU,KAAM,EAAE,aAAa,GAAG,OAAO;EACjE,OAAO,EAAE,SAAS,EAAE,SAAS,UAAU,CAAC,EAAE,KAAK,IAAI,EAAE,QAAQ,MAAM,GAAG,CAAC,EAAE;CAC7E;CACA,OAAO,GAAG;EACN,MAAM,OAAO,kBAAkB,EAAE,IAAI;EACrC,MAAM,QAAQ,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI;EAEtC,OAAO;GAAE,MAAM;IAAC,QAAQ,KAAK;IAAG,QAAQ,KAAK;IAAG;GAAC;GAAG,OAAO,IAAI,QAAQ,KAAK,IAAI,GAAG,EAAE,MAAM;EAAE;CACjG;CACA,aAAa;EACT,QAAQ,KAAK,EAAE,KAAK;EACpB,QAAQ,KAAK;GAAE,QAAQ;GAAI,WAAW;GAAK,WAAW;GAAK,UAAU;EAAQ,CAAC,EAAE,KAAK;EACrF,QAAQ,KAAK;GAAE,SAAS;GAAS,QAAQ;GAAI,QAAQ;GAAG,MAAM;GAAS,OAAO;EAAO,CAAC,EAAE,KAAK;EAC7F,QAAQ,KAAK;GAAE,QAAQ;GAAI,MAAM;GAAQ,QAAQ;IAAC;IAAQ;IAAQ;GAAM;GAAG,OAAO;IAAC;IAAG;IAAK;GAAC;GAAG,OAAO;EAAU,CAAC,EAAE,KAAK;CAC5H;AACJ,CAAC;;;;ACnDD,IAAA,gBAAe,WAAwB;CACnC,MAAM;CACN,SAAS;CAET,QAAQ;EAAE,QAAQ;EAAS,MAAM;EAAS,MAAM;EAAS,SAAS;EAAS,UAAU;CAAQ;CAC7F,UAAU,MAAO,EAAE,SAAS,IAAI,CAAC,IAAI;CACrC,aAAa;EACT,QAAQ,MAAM,EAAE,KAAK;EACrB,QAAQ,MAAM;GAAE,QAAQ;GAAK,MAAM;GAAG,MAAM;GAAG,SAAS;EAAK,CAAC,EAAE,KAAK;EACrE,QAAQ,MAAM;GAAE,QAAQ;GAAM,MAAM;EAAE,CAAC,EAAE,KAAK;CAClD;AACJ,CAAC;;;;ACXD,IAAM,OAAK,OAAQ,OAAK,OAAQ,OAAK;AAErC,IAAA,oBAAe,WAA4B;CACvC,MAAM;CACN,SAAS;CACT,QAAQ,EAEJ,QAAQ;EACJ,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAC7B,MAAM,CAAC,QAAQ;EACf,MAAM,GAAG;GACL,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;GAC3C,OAAO;IACH,IAAI,IAAI,IAAI;IAAI,IAAI;IAAI,IAAI;IAAI;IAAG;IACnC,IAAI;IAAI,IAAI,IAAI,IAAI;IAAI,IAAI;IAAI;IAAG;IACnC,IAAI;IAAI,IAAI;IAAI,IAAI,IAAI,IAAI;IAAI;IAAG;IACnC;IAAG;IAAG;IAAG;IAAG;GAChB;EACJ;CACJ,EACJ;CACA,aAAa,CAAC,QAAQ,UAAU,CAAC,EAAE,KAAK,IAAI,QAAQ,UAAU,EAAG,EAAE,KAAK,EAAE;AAC9E,CAAC;;;;ACtBD,IAAA,mBAAe,WAA2B;CACtC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,MAAM;EACN,OAAO;GAAE,MAAM;GAAO,QAAQ,MAAO,EAAE,QAAQ,KAAK,KAAM;EAAI;EAC9D,OAAO;EACP,YAAY;CAChB;CAGA,SAAS,OAAO,EAAE,OAAO,EAAE,KAAK;CAChC,aAAa;EACT,QAAQ,SAAS,EAAE,KAAK;EACxB,QAAQ,SAAS;GAAE,MAAM;GAAI,OAAO;GAAI,OAAO;GAAQ,YAAY;EAAM,CAAC,EAAE,KAAK;EACjF,QAAQ,SAAS;GAAE,MAAM;GAAI,OAAO;GAAS,YAAY;EAAO,CAAC,EAAE,KAAK;CAC5E;AACJ,CAAC;;;;ACjBD,IAAM,KAAK,OAAQ,KAAK,OAAQ,KAAK;AACrC,IAAM,WAAW;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC;AAG5E,SAAS,WAAW,SAA4C;CAC5D,QAAQ,SAAR;EACI,KAAK,OAAO,OAAO;GAAC;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAC/E,KAAK,SAAS,OAAO;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EACjF,KAAK,QAAQ,OAAO;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChF,KAAK,SAAS,OAAO;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;EAAC;EACjF,KAAK,OAAO,OAAO;GACf,IAAI,KAAK;GAAG,IAAI;GAAI,IAAI;GAAI;GAAG;GAC/B,IAAI;GAAI,IAAI,KAAK;GAAG,IAAI;GAAI;GAAG;GAC/B,IAAI;GAAI,IAAI;GAAI,IAAI,KAAK;GAAG;GAAG;GAC/B;GAAG;GAAG;GAAG;GAAG;EAChB;EACA,KAAK,aAAa,OAAO;GACrB,IAAI,IAAI;GAAI,KAAK;GAAI,KAAK;GAAI;GAAG;GACjC,KAAK;GAAI,IAAI,IAAI;GAAI,KAAK;GAAI;GAAG;GACjC,KAAK;GAAI,KAAK;GAAI,IAAI,IAAI;GAAI;GAAG;GACjC;GAAG;GAAG;GAAG;GAAG;EAChB;EACA,SAAS,OAAO;GAAC;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;CAClF;AACJ;AAEA,IAAA,iBAAe,WAA+C;CAC1D,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EAAE,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAAG,MAAM,CAAC,WAAW,UAAU;EAAG,QAAQ,IAAI,MAAM,EAAE;CAAO,EACxG;CACA,QAAQ,GAAG;EACP,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,QAAQ,CAAC;EAC7C,IAAI,MAAM,GAAG,OAAO;EACpB,MAAM,SAAS,WAAW,EAAE,OAAO;EACnC,OAAO,EAAE,QAAQ,SAAS,KAAK,GAAG,MAAM,KAAK,OAAO,KAAK,KAAK,CAAC,EAAE;CACrE;CAIA,SAAS,IAAI,MAAO,EAAE,OAAO,MAAM,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D,aAAa;EACT,QAAQ,OAAO,EAAE,KAAK;EACtB,QAAQ,OAAO;GAAE,SAAS;GAAO,UAAU;EAAI,CAAC,EAAE,KAAK;EACvD,QAAQ,OAAO,EAAE,SAAS,YAAY,CAAC,EAAE,KAAK;EAC9C,QAAQ,OAAO;GAAE,SAAS;GAAS,UAAU;EAAI,CAAC,EAAE,KAAK;CAC7D;AACJ,CAAC;;;;AChDD,IAAA,uBAAe,WAAqD;CAChE,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,UAAU;GAAG,QAAQ,IAAI,MAAO,IAAI,KAAK,KAAM,EAAE;EAAS;EACvF,OAAO;GAAE,MAAM;GAAO,QAAQ,MAAO,EAAE,QAAQ,KAAK,KAAM;EAAI;EAC9D,QAAQ;EACR,QAAQ;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;EAAE;EACxE,QAAQ;CACZ;CACA,QAAQ,GAAG;EACP,MAAM,WAAW,KAAK,MAAM,EAAE,QAAQ;EACtC,OAAO,WAAW,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,SAAS;CAC7D;CAGA,SAAS,OAAO,EACZ,OAAO,KAAK,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,EAAE,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI,IAAK,EAAE,OAAO,IAAI,EAAG,KAAK,KAAK,GAAG,EACzH;CACA,aAAa;EACT,QAAQ,aAAa,EAAE,KAAK;EAC5B,QAAQ,aAAa;GAAE,UAAU;GAAG,OAAO;GAAI,QAAQ;EAAK,CAAC,EAAE,KAAK;EACpE,QAAQ,aAAa;GAAE,UAAU;GAAG,QAAQ;GAAK,QAAQ;IAAE,GAAG;IAAK,GAAG;GAAK;EAAE,CAAC,EAAE,KAAK;CACzF;AACJ,CAAC;;;;ACtBD,IAAM,wBAAQ,IAAI,QAAkC;AACpD,IAAI,SAAS;AAEb,IAAM,UAAU,MAAe,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;AAItG,SAAS,KAAK,OAAqB,GAAuB;CACtD,MAAM,MAAM,MAAM,IAAI,KAAK;CAC3B,IAAI,OAAO,IAAI,WAAW,GAAG,OAAO;CACpC,MAAM,QAAQ,IAAI;CAClB,MAAM,SAAS,IAAI,kBAAkB,QAAQ,IAAI,CAAC;CAClD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,KAAK;EAClC,MAAM,KAAK,IAAI,QAAQ,IAAI,IAAI,KAAK;EACpC,OAAO,IAAI,KAAK;EAChB,IAAI,IAAI,KAAK,MAAM,QAAQ;EAC3B,OAAO,KAAK,OAAO,MAAM,EAAE;EAC3B,OAAO,IAAI,KAAK,OAAO,MAAM,IAAI,EAAE;EACnC,OAAO,IAAI,KAAK,OAAO,MAAM,IAAI,EAAE;CACvC;CAGR,MAAM,MAAM;EAAE,KAAK,OAAO;EAAY;EAAO,QAAQ;EAAG;CAAO;CAC/D,MAAM,IAAI,OAAO,GAAG;CACpB,OAAO;AACX;AAGA,SAAS,KAAK,GAAyB;CACnC,MAAM,IAAI,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,MAAM,CAAC,GAAG,GAAG,KAAK;GAAC,KAAK,IAAI;GAAI,KAAK,IAAI;GAAI,KAAK,IAAI;EAAE;EACxD,MAAM,MAAM,IAAI,IAAI,KAAK,IAAI,KAAK;EAClC,EAAE,KAAK,MAAO,MAAO,KAAK,IAAI,GAAG,EAAG;EACpC,EAAE,IAAI,KAAK,MAAO,IAAI,KAAM,IAAI;EAChC,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,KAAM,MAAO;CACvD;CAGR,OAAO;AACX;AAEA,IAAI,SAA8C;AAElD,IAAA,cAAe,WAAsB;CACjC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,MAAM;EAAS,QAAQ;CAAQ;CACzC,MAAM,CAAC,OAAO;CACd,UAAU,MAAO,EAAE,UAAU,KAAK,CAAC,OAAO,UAAU,EAAE,IAAI,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC;CACpF,SAAS,OAAO,EAAE,KAAK,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;CAC7C,aAAa;EACT,WAAW,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;EAC9B,OAAO,CACH,QAAQ,IAAI;GAAE,OAAO,OAAO;GAAI,MAAM;EAAG,CAAC,EAAE,KAAK,IACjD,QAAQ,IAAI;GAAE,OAAO,OAAO;GAAI,MAAM;GAAI,QAAQ;EAAI,CAAC,EAAE,KAAK,EAClE;CACJ;AACJ,CAAC;;;;ACjED,IAAA,kBAAe,WAA0B;CACrC,MAAM;CACN,SAAS;CAET,cAAc;CACd,QAAQ;EAAE,OAAO;EAAS,QAAQ;CAAQ;CAC1C,UAAU,MAAO,EAAE,UAAU,KAAK,EAAE,SAAS,IAAI,OAAO,CAAC;CAGzD,SAAS,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,QAAQ,KAAK,KAAK,GAAG,IAAI,EAAE;CAClF,aAAa,CACT,QAAQ,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,IACnC,QAAQ,QAAQ;EAAE,OAAO;EAAK,QAAQ;GAAE,GAAG;GAAK,GAAG;EAAI;CAAE,CAAC,EAAE,KAAK,EACrE;AACJ,CAAC;;;;ACdD,IAAA,mBAAe,WAA2B;CACtC,MAAM;CACN,SAAS;CACT,QAAQ,EAAE,QAAQ,QAAQ;CAG1B,UAAU,MAAO,EAAE,SAAS,IAAI,CAAC,IAAI;CACrC,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO;CAClC,aAAa;EACT,QAAQ,SAAS,EAAE,KAAK;EACxB,QAAQ,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK;EACrC,QAAQ,SAAS,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK;CAC3C;AACJ,CAAC;;;;ACbD,IAAM,WAAW;CAAE,SAAS;CAAG,QAAQ;CAAG,QAAQ;AAAE;AAEpD,IAAA,kBAAe,WAAgD;CAC3D,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,OAAO;EACP,UAAU;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,EAAE;EAAS;EACtD,OAAO;CACX;CACA,QAAQ,GAAG;EACP,IAAI,EAAE,EAAE,QAAQ,MAAM,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;EAClE,OAAO,EAAE,UAAU,SAAS,EAAE,aAAa,EAAE;CACjD;CACA,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,QAAQ,IAAI,EAAE,MAAM;CAC5F,aAAa;EACT,QAAQ,QAAQ,EAAE,KAAK;EACvB,QAAQ,QAAQ;GAAE,OAAO;GAAG,OAAO;GAAQ,UAAU;EAAS,CAAC,EAAE,KAAK;EACtE,QAAQ,QAAQ;GAAE,OAAO;GAAG,OAAO;GAAQ,UAAU;EAAS,CAAC,EAAE,KAAK;CAC1E;AACJ,CAAC;;;;ACpBD,IAAA,mBAAe,WAA2B;CACtC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,QAAQ;EAAS,aAAa;CAAQ;CAMhD,SAAS,OAAO,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI;CACjD,aAAa;EACT,QAAQ,SAAS,EAAE,EAAE,KAAK;EAC1B,QAAQ,SAAS;GAAE,QAAQ;IAAE,GAAG;IAAI,GAAG;GAAG;GAAG,aAAa;EAAM,CAAC,EAAE,KAAK;EACxE,QAAQ,SAAS,EAAE,QAAQ;GAAE,GAAG;GAAM,GAAG,KAAK;EAAE,EAAE,CAAC,EAAE,KAAK;CAC9D;AACJ,CAAC;;;;ACfD,IAAA,oBAAe,WAA4B;CACvC,MAAM;CACN,SAAS;CACT,QAAQ,EAAE,QAAQ,QAAQ;CAC1B,UAAU,MAAO,EAAE,SAAS,IAAI,OAAO,CAAC;CACxC,aAAa;EAAC,QAAQ,UAAU,EAAE,KAAK;EAAI,QAAQ,UAAU,CAAC,EAAE,KAAK;EAAI,QAAQ,UAAU,CAAC,EAAE,KAAK;CAAE;AACzG,CAAC;;;;ACND,IAAA,0BAAe,WAAsD;CACjE,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,QAAQ;EACR,WAAW;GACP,MAAM;GACN,MAAM,CAAC,OAAO;GACd,MAAM,GAAG;IACL,MAAM,IAAK,EAAE,QAAQ,KAAK,KAAM;IAChC,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;GACpC;EACJ;EACA,QAAQ;EACR,cAAc;GAAE,MAAM;GAAO,MAAM,CAAC,aAAa;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAO;EAC/E,OAAO;EACP,KAAK;EACL,OAAO;EACP,SAAS;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;EAAE;CAC3F;CACA,QAAQ,GAAG;EACP,MAAM,SAAS,EAAE,eAAe;EAChC,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI,OAAO,EAAE,OAAO;CAC1D;CACA,SAAS,GAAG,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;CAC5D,aAAa;EACT,QAAQ,gBAAgB,EAAE,KAAK;EAC/B,QAAQ,gBAAgB;GAAE,QAAQ;GAAI,OAAO;GAAG,OAAO;GAAK,KAAK;GAAK,SAAS;EAAG,CAAC,EAAE,KAAK;EAC1F,QAAQ,gBAAgB;GAAE,QAAQ;GAAI,aAAa;GAAG,OAAO;GAAU,QAAQ;IAAE,GAAG;IAAK,GAAG;GAAI;EAAE,CAAC,EAAE,KAAK;CAC9G;AACJ,CAAC;;;;AC9BD,IAAA,qBAAe,WAA6B;CACxC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,SAAS;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;EAAE;CAC3F;CACA,UAAU,MAAO,EAAE,SAAS,IAAI,CAAC,IAAI;CACrC,OAAO,GAAG;EAIN,MAAM,QAAQ,EAAE,UAAU,SAAS,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,SAAS,GAAG,GAAI,IAAI;EAC3F,OAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI,IAAK,EAAE,OAAO,IAAI,EAAG,KAAK,KAAK,GAAG,EAAE;CACtG;CACA,aAAa;EACT,QAAQ,WAAW,EAAE,KAAK;EAC1B,QAAQ,WAAW;GAAE,QAAQ;GAAK,OAAO;GAAQ,SAAS;EAAG,CAAC,EAAE,KAAK;EACrE,QAAQ,WAAW;GAAE,QAAQ;GAAK,QAAQ;IAAE,GAAG;IAAK,GAAG;GAAI;GAAG,SAAS;EAAE,CAAC,EAAE,KAAK;CACrF;AACJ,CAAC;;;;ACtBD,IAAA,mBAAe,WAA2B;CACtC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,KAAK;EAAS,OAAO;EAAS,MAAM;CAAQ;CACtD,QAAQ,GAAG;EACP,MAAM,EAAE,KAAK,OAAO,SAAS;EAC7B,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC;CACpF;CACA,SAAS,EAAE,KAAK,OAAO,YAAY,EAC/B,OAAO,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAC9H;CACA,aAAa;EACT,QAAQ,SAAS,EAAE,KAAK;EACxB,QAAQ,SAAS,EAAE,QAAQ,GAAG,CAAC,EAAE,KAAK;EACtC,QAAQ,SAAS;GAAE,KAAK;IAAE,GAAG;IAAG,GAAG;GAAG;GAAG,OAAO;IAAE,GAAG;IAAI,GAAG;GAAE;GAAG,MAAM;IAAE,GAAG;IAAG,GAAG;GAAE;EAAE,CAAC,EAAE,KAAK;CAClG;AACJ,CAAC;;;;AChBD,IAAA,oBAAe,WAA4B;CACvC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,SAAS;EACT,WAAW;EACX,UAAU;EACV,QAAQ;EACR,WAAW;GACP,MAAM;GACN,MAAM,CAAC,OAAO;GACd,MAAM,GAAG;IACL,MAAM,IAAK,EAAE,QAAQ,KAAK,KAAM;IAChC,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;GACpC;EACJ;CACJ;CACA,UAAU,MAAO,EAAE,WAAW,IAAI,CAAC,IAAI;CACvC,aAAa;EACT,QAAQ,UAAU,EAAE,KAAK;EACzB,QAAQ,UAAU;GAAE,SAAS;GAAG,WAAW;GAAK,UAAU;GAAK,QAAQ;GAAG,OAAO;EAAG,CAAC,EAAE,KAAK;EAC5F,QAAQ,UAAU;GAAE,SAAS;GAAG,WAAW;GAAK,OAAO;EAAG,CAAC,EAAE,KAAK;CACtE;AACJ,CAAC;;;;ACvBD,IAAA,kBAAe,WAA0B;CACrC,MAAM;CACN,SAAS;CACT,QAAQ,EACJ,QAAQ;EACJ,MAAM;EACN,MAAM,CAAC,YAAY,MAAM;EACzB,MAAM,GAAG;GACL,MAAM,OAAO,kBAAkB,EAAE,IAAI;GACrC,OAAO,CAAC,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,CAAC;EACpD;CACJ,EACJ;CACA,UAAU,MAAO,EAAE,WAAW,IAAI,CAAC,IAAI;CACvC,OAAO,GAAG;EACN,MAAM,OAAO,kBAAkB,EAAE,IAAI;EACrC,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;CAC9E;CACA,aAAa;EACT,QAAQ,QAAQ,EAAE,KAAK;EACvB,QAAQ,QAAQ;GAAE,UAAU;GAAI,MAAM;EAAI,CAAC,EAAE,KAAK;EAClD,QAAQ,QAAQ;GAAE,UAAU;GAAG,MAAM;EAAI,CAAC,EAAE,KAAK;CACrD;AACJ,CAAC;;;;ACvBD,IAAA,kBAAe,WAA0B;CACrC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,QAAQ;EAAS,QAAQ;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,EAAE,QAAQ,CAAC;EAAE;CAAE;CACxF,UAAU,MAAO,EAAE,WAAW,IAAI,OAAO,CAAC;CAC1C,aAAa,CACT,QAAQ,QAAQ,EAAE,KAAK,IACvB,QAAQ,QAAQ;EAAE,QAAQ;EAAK,QAAQ;CAAE,CAAC,EAAE,KAAK,EACrD;AACJ,CAAC;;;;ACTD,IAAA,iBAAe,WAAmF;CAC9F,MAAM;CACN,SAAS;CACT,QAAQ;EAEJ,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,WAAW;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAM;EACrE,MAAM;GAAE,MAAM;GAAO,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE;EAAM;EACtD,WAAW;EACX,OAAO;GAAE,MAAM;GAAO,MAAM,CAAC,QAAQ;GAAG,QAAQ,IAAI,MAAM,EAAE;EAAM;EAClE,MAAM;GAAE,MAAM;GAAS,MAAM,CAAC,OAAO;GAAG,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,GAAG,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC;EAAE;CACjG;CACA,QAAQ,GAAG;EACP,IAAI,EAAE,aAAa,KAAK,EAAE,UAAU,GAAG,OAAO;EAC9C,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC;EAC9C,OAAO;GAAE;GAAG,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK;GAAG,OAAO,EAAE,SAAS;GAAG,KAAM,EAAE,QAAQ,KAAK,KAAM;EAAI;CACpG;CACA,SAAS,IAAI,OAAO;EAAE,MAAM;GAAC,EAAE;GAAO;GAAM,EAAE;EAAG;EAAG,OAAO,IAAI,EAAE;CAAM;CACvE,aAAa;EACT,QAAQ,OAAO,EAAE,KAAK;EACtB,QAAQ,OAAO;GAAE,OAAO;GAAI,QAAQ;GAAI,WAAW;GAAK,WAAW;EAAI,CAAC,EAAE,KAAK;EAC/E,QAAQ,OAAO;GAAE,OAAO;GAAI,QAAQ;GAAI,WAAW;GAAK,WAAW;EAAI,CAAC,EAAE,KAAK;CACnF;AACJ,CAAC;;;;ACtBD,IAAA,oBAAe,WAA4B;CACvC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,OAAO;EAAS,YAAY;CAAQ;CAC9C,aAAa;EACT,QAAQ,UAAU,EAAE,KAAK;EACzB,QAAQ,UAAU;GAAE,OAAO;GAAK,YAAY;EAAE,CAAC,EAAE,KAAK;EACtD,QAAQ,UAAU;GAAE,OAAO;GAAK,YAAY;EAAI,CAAC,EAAE,KAAK;CAC5D;AACJ,CAAC;;;;ACTD,IAAA,gBAAe,WAAwB;CACnC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,OAAO;GAAE,MAAM;GAAO,QAAQ,MAAO,EAAE,QAAQ,KAAK,KAAM;EAAI;EAC9D,QAAQ;EACR,QAAQ;CACZ;CACA,UAAU,MAAO,EAAE,UAAU,KAAK,EAAE,UAAU,IAAI,OAAO,CAAC;CAC1D,OAAO,GAAG;EAGN,MAAM,IAAI,KAAK,IAAI,EAAE,QAAQ,KAAK,KAAK;EACvC,OAAO,EAAE,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI,IAAK,EAAE,OAAO,IAAI,EAAG,KAAK,KAAK,GAAG,EAAE;CACnH;CACA,aAAa;EACT,QAAQ,MAAM,EAAE,KAAK;EACrB,QAAQ,MAAM;GAAE,OAAO;GAAM,QAAQ;EAAI,CAAC,EAAE,KAAK;EACjD,QAAQ,MAAM;GAAE,OAAO;GAAK,QAAQ;GAAK,QAAQ;IAAE,GAAG;IAAM,GAAG;GAAK;EAAE,CAAC,EAAE,KAAK;CAClF;AACJ,CAAC;;;;ACpBD,IAAA,mBAAe,WAA2B;CACtC,MAAM;CACN,SAAS;CACT,QAAQ;EAAE,OAAO;EAAS,QAAQ;EAAS,QAAQ;EAAS,UAAU;CAAQ;CAC9E,UAAU,MAAO,EAAE,UAAU,KAAK,mBAAmB,EAAE,KAAK,EAAE,MAAM,IAAI,OAAO,CAAC;CAChF,aAAa;EACT,QAAQ,SAAS,EAAE,KAAK;EACxB,QAAQ,SAAS;GAAE,QAAQ;GAAK,QAAQ;GAAK,UAAU;EAAI,CAAC,EAAE,KAAK;EACnE,QAAQ,SAAS;GAAE,QAAQ;GAAK,OAAO;GAAW,QAAQ;GAAK,UAAU;EAAI,CAAC,EAAE,KAAK;CACzF;AACJ,CAAC;;;;ACVD,IAAA,kBAAe,WAA0B;CACrC,MAAM;CACN,SAAS;CACT,QAAQ,EAEJ,QAAQ;EACJ,MAAM;GAAE,OAAO;GAAI,IAAI;EAAM;EAC7B,MAAM,CAAC,UAAU,QAAQ;EACzB,MAAM,GAAG;GACL,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;GAC3C,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,CAAC;GAC5C,MAAM,QAAQ,UAAkB,UAAkB,YAAY,QAAQ,YAAY;GAClF,MAAM,QAAQ,IAAI,IAAI,IAAI,MAAO;GACjC,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI,MAAO;GAClC,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI,MAAO;GAClC,MAAM,QAAQ,IAAI,IAAI,IAAI,MAAO;GACjC,OAAO;IACH,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG;IAAG,QAAQ;IAC3D,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG;IAAG;IACnD,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG,KAAK,GAAG,IAAK;IAAG;IAAG,CAAC,QAAQ;IAC5D;IAAG;IAAG;IAAG;IAAG;GAChB;EACJ;CACJ,EACJ;CACA,UAAU,MAAO,EAAE,UAAU,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC;CAC3D,aAAa;EACT,QAAQ,QAAQ,EAAE,KAAK;EACvB,QAAQ,QAAQ;GAAE,QAAQ;GAAK,QAAQ;EAAK,CAAC,EAAE,KAAK;EACpD,QAAQ,QAAQ;GAAE,QAAQ;GAAG,QAAQ;EAAE,CAAC,EAAE,KAAK;CACnD;AACJ,CAAC;;;;AC/BD,IAAA,eAAe,WAAuB;CAClC,MAAM;CACN,SAAS;CACT,QAAQ;EACJ,WAAW;EACX,YAAY;GAAE,MAAM;GAAO,QAAQ,MAAM,KAAK,IAAI,EAAE,YAAY,GAAI;EAAE;EACtE,OAAO;GAAE,MAAM;GAAO,QAAQ,OAAS,EAAE,QAAQ,MAAO,OAAO,MAAO,KAAK,KAAK;EAAI;EACpF,WAAW;GACP,MAAM;GACN,MAAM,CAAC,OAAO;GACd,MAAM,GAAG;IACL,MAAM,UAAW,EAAE,QAAQ,KAAK,KAAM;IACtC,OAAO,CAAC,KAAK,IAAI,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC;GAChD;EACJ;EACA,OAAO;EACP,QAAQ;CACZ;CACA,UAAU,MAAO,EAAE,UAAU,MAAM,KAAK,EAAE,UAAU,MAAM,IAAI,OAAO,CAAC;CACtE,SAAS,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,EAAE,UAAU,CAAC,GAAG,KAAK,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE;CACpF,aAAa;EACT,QAAQ,KAAK,EAAE,KAAK;EACpB,QAAQ,KAAK;GAAE,WAAW;IAAE,GAAG;IAAG,GAAG;GAAG;GAAG,YAAY;GAAI,OAAO;GAAI,OAAO;EAAG,CAAC,EAAE,KAAK;EACxF,QAAQ,KAAK;GAAE,WAAW;GAAI,OAAO;GAAU,YAAY;GAAI,QAAQ;IAAE,GAAG;IAAK,GAAG;GAAI;EAAE,CAAC,EAAE,KAAK;CACtG;AACJ,CAAC;;;ACiBD,IAAa,QAAiC,IAAI,IAC9C,OAAO,QAAQ,uBAAA,OAAA;CAAA,cAAA;CAAA,cAAA;CAAA,cAAA;CAAA,iBAAA;CAAA,sBAAA;CAAA,cAAA;CAAA,aAAA;CAAA,cAAA;CAAA,4BAAA;CAAA,wBAAA;CAAA,oBAAA;CAAA,eAAA;CAAA,wBAAA;CAAA,eAAA;CAAA,mBAAA;CAAA,gBAAA;CAAA,cAAA;CAAA,iBAAA;CAAA,cAAA;CAAA,aAAA;CAAA,cAAA;CAAA,kBAAA;CAAA,iBAAA;CAAA,eAAA;CAAA,qBAAA;CAAA,YAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,kBAAA;CAAA,wBAAA;CAAA,mBAAA;CAAA,iBAAA;CAAA,kBAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,eAAA;CAAA,kBAAA;CAAA,cAAA;CAAA,iBAAA;CAAA,gBAAA;CAAA,aAAA;AAAA,CAAA,CAAoE,EAC9E,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,EACvC,KAAK,GAAG,OAAO,CAAC,EAAE,QAAQ,MAAM,EAAE,OAAO,CAAC,CACnD;;;ACFA,IAAM,OAAO;CAAE,MAAM;CAAG,QAAQ;AAAE;AAElC,SAAS,QAAM,MAA4B;CACvC,MAAM,IAAI,KAAK,MAAM,IAAI;CACzB,KAAK,MAAM,KAAK,EAAE,aAAa,EAAE,SAAS;CAC1C,OAAO;AACX;;AAGA,SAAgB,iBAAe,OAAoB,QAA8B;CAC7E,OAAO,QAAM,gBAAgB,KAAK,QAAQ,MAAM,CAAC;AACrD;;;;;AAQA,SAAgB,WAAW,QAAgC,MAAc,QAA6B;CAClG,MAAM,QAAQ,IAAI,YAAY,KAAK,KAAK,OAAO,CAAC,CAAC;CACjD,MAAM,MAAM,IAAI,aAAa,MAAM,MAAM;CACzC,MAAM,MAAM,IAAI,WAAW,MAAM,MAAM;CACvC,KAAK,MAAM,KAAK,QAAQ;EACpB,MAAM,IAAI,OAAO,EAAE;EACnB,IAAI,MAAM,KAAA,GAAW;EACrB,MAAM,OAAO,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,QAAa;EAC/D,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,UAAU,KAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,YAAY,KAAK;GACnC,MAAM,IAAI,KAAK,IAAI,EAAE,aAAa;GAClC,IAAI,MAAM,KAAA,GAAW;GACrB,MAAM,KAAM,EAAE,SAAS,IAAI,EAAE,SAAS,IAAI,KAAM;GAChD,IAAI,MAAM,MAAM,QAAQ;GACxB,IAAI,EAAE,WAAW,GAAG,IAAI,MAAM;QACzB,IAAI,EAAE,WAAW,GAAG,IAAI,MAAM,KAAK,MAAM,CAAC;QAC1C,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;EAC9C;CAER;CACA,OAAO;AACX;;AAgBA,IAAM,eAAe;;;;;AAMrB,IAAa,qBAAqB;AAElC,SAAS,cAAiB,MAAkB,MAA0B;CAClE,IAAI;CACJ,MAAM,UAAU,IAAI,SAAgB,GAAG,WAAW;EAC9C,QAAQ,iBAAiB,uBAAO,IAAI,MAAM,yBAAyB,qBAAqB,IAAK,QAAQ,MAAM,CAAC,GAAG,kBAAkB;CACrI,CAAC;CACD,OAAO,QAAQ,KAAK,CAAC,MAAM,OAAO,CAAC,EAAE,cAAc,aAAa,KAAK,CAAC;AAC1E;;AAGA,IAAa,cAAb,MAAyB;CAMQ;CAA8B;CAL3D,2BAAmB,IAAI,IAAyB;CAChD,SAAiB;CACjB,0BAAkB,IAAI,IAAmB;;CAGzC,YAAY,GAA8B,SAAsC;EAAnD,KAAA,IAAA;EAA8B,KAAA,UAAA;CAAsB;;CAGjF,QAAQ,OAAoB,QAA6B;EACrD,MAAM,MAAM,GAAG,MAAM,IAAI;EACzB,MAAM,QAAQ,KAAK,SAAS,IAAI,GAAG;EACnC,IAAI,OAAO;GAEP,KAAK,SAAS,OAAO,GAAG;GACxB,KAAK,SAAS,IAAI,KAAK,KAAK;GAC5B,OAAO;EACX;EACA,IAAI,KAAK,SAAS,QAAQ,cAAc;GACpC,MAAM,CAAC,QAAQ,OAAO,KAAK,SAAS,QAAQ,EAAE,KAAK,EAAE;GACrD,KAAK,SAAS,OAAO,MAAM;GAC3B,IAAI,IAAI,UAAU,aAAa,KAAK,EAAE,cAAc,IAAI,EAAE;EAC9D;EACA,MAAM,KAAK,KAAK;EAChB,MAAM,SAAS,QAAM,KAAK,EAAE,WAAW,IAAI,KAAK,QAAQ,MAAM,CAAC;EAC/D,MAAM,IAAiB;GAAE;GAAI;GAAO;GAAQ,OAAO,OAAO,KAAK,cAAc;GAAU,SAAS,CAAC;GAAG,SAAS,QAAQ,QAAQ;EAAE;EAC/H,IAAI,OAAO,IAAI;GACX,MAAM,UAAU,KAAK,QAAQ,CAAC,EAAE,cAAc,KAAK,QAAQ,OAAO,OAAO,CAAC;GAC1E,KAAK,QAAQ,IAAI,OAAO;GACxB,EAAE,UAAU;EAChB;EACA,KAAK,SAAS,IAAI,KAAK,CAAC;EACxB,OAAO;CACX;;CAGA,aAAsB;EAClB,OAAO,KAAK,QAAQ,OAAO;CAC/B;;CAGA,MAAM,YAA2B;EAC7B,OAAO,KAAK,QAAQ,MAAM,MAAM,QAAQ,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC;CACjE;;;;;;;CAQA,MAAc,QAAQ,GAA+B;EACjD,MAAM,SAAS,KAAK,EAAE,WAAW;EACjC,MAAM,OAAO,EAAE,OAAO;EACtB,IAAI;GACA,IAAI,QAAQ;IACR,MAAM,SAAS,OAAO,mBAAmB,EAAE,MAAM,KAAK,CAAC;IACvD,MAAM,OAAO,MAAM,cAAmC,OAAO,mBAAmB,GAAG,YAAY;IAC/F,EAAE,UAAU,mBAAmB,KAAK,UAAU,IAAI;IAClD,IAAI,KAAK,SAAS,MAAM,MAAwB,EAAE,SAAS,OAAO,GAAG;KACjE,EAAE,QAAQ;KACV,KAAK,EAAE,cAAc,EAAE,EAAE;KACzB;IACJ;IACA,MAAM,UAAU,KAAK,EAAE,eAAe,KAAK,EAAE,MAAM;IACtC,MAAM,cAAc,QAAQ,IAAI,QAAQ,KAAK,MAAM,OAAO,0BAA0B,aAAa,QAAQ,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,qBAAqB;IACrL,KAAK,EAAE,aAAa,EAAE,EAAE;GAE5B,OACI,KAAK,EAAE,aAAa,EAAE,EAAE;GAE5B,EAAE,QAAQ;GACV,KAAK,QAAQ;EACjB,SAAS,GAAG;GACR,EAAE,QAAQ;GACV,EAAE,QAAQ,KAAK;IAAE,MAAM;IAAG,QAAQ;IAAG,QAAQ;IAAG,SAAS,UAAU,OAAQ,GAAa,WAAW,CAAC;IAAK,QAAQ;GAAU,CAAC;EAChI;CACJ;AACJ;;AAGA,SAAS,mBAAmB,UAA0B,MAAkC;CACpF,MAAM,SAAS,KAAK,QAAQ,8BAA8B;CAC1D,MAAM,WAAW,SAAS,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE,SAAS;CAC7E,OAAO,SAAS,KAAK,MAAM;EACvB,MAAM,OAAO,EAAE,WAAW,YAAY,WAAW,IAAI,EAAE,UAAU,WAAW,IAAI;EAChF,OAAO;GAAE;GAAM,QAAQ,OAAO,EAAE,UAAU;GAAG,QAAQ,EAAE,UAAU;GAAG,SAAS,GAAG,EAAE,KAAK,IAAI,EAAE;GAAW,QAAQ;EAAmB;CACvI,CAAC;AACL;AAEA,IAAM,MAAM;;;;;AAMZ,IAAa,eAAe;CACxB,MAAM;EACF;GAAC;GAAW;GAAW;GAAW;GAAW;GAAW;GAAW;GAAyB;EAAS;EACrG,CAAC,WAAW,SAAS;EACrB,CAAC,SAAS;CACd;CACA,QAAQ,CACJ;EAAC;EAAW;EAAW;EAAW;EAAW;EAAW;EAAW;CAAS,GAC5E,CAAC,SAAS,CACd;AACJ;AAEA,IAAM,QAAgC;CAClC,SAAS,EAAE,QAAQ;EAAE,MAAM;EAAW,kBAAkB;CAAK,EAAE;CAC/D,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,EAAE;CACjD,SAAS,EAAE,SAAS;EAAE,YAAY;EAAS,eAAe;CAAK,EAAE;CACjE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,EAAE;CAC1C,yBAAyB,EAAE,SAAS;EAAE,YAAY;EAAsB,eAAe;CAAW,EAAE;AACxG;AAEA,SAAS,QAAQ,QAAa,OAA2B;CACrD,OAAO,aAAa,OAAO,KAAK,UAAU,OAAO,sBAAsB,EAAE,SAAS,MAAM,KAAK,MAAM,aAAa;EAAE;EAAS,YAAY;EAAK,GAAG,MAAM;CAAM,EAAE,EAAE,CAAC,CAAC;AACrK;AAEA,SAAS,aAAa,QAAa,QAAa,OAAoB,QAAwB;CACxF,MAAM,OAAO;EAAE,WAAW;EAAO,WAAW;EAAuB,WAAW;CAAM;CACpF,MAAM,OAAO,UAAU;CACvB,OAAO;EACH,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,QAAQ,QAAQ,KAAK,EAAE,CAAC;EAChF,QAAQ;GAAE;GAAQ,YAAY,OAAO,eAAe;GAAgB,SAAS,CAAC;EAAE;EAChF,WAAW;GAAE,UAAU;GAAiB,UAAU;EAAO;EACzD,aAAa,EAAE,OAAO,EAAE;EACxB,UAAU;GACN;GACA,YAAY,OAAO,eAAe;GAClC,SAAS,CAAC;IAAE;IAAQ,GAAI,OAAO,EAAE,OAAO;KAAE,OAAO;KAAM,OAAO;IAAK,EAAE,IAAI,CAAC;IAAI,WAAW;GAAI,CAAC;EAClG;CACJ;AACJ;;AAGA,IAAa,eAAuC;CAChD,QAAQ;CAAG,UAAU;CAAG,QAAQ;CAAG,SAAS;CAAG,QAAQ;CAAG,SAAS;CAAG,eAAe;CAAG,cAAc;CACtG,cAAc;CAAG,cAAc;CAAG,YAAY;CAAI,WAAW;CAAI,KAAK;CAAI,YAAY;CAAI,OAAO;CAAI,YAAY;AACrH;;AAGA,IAAa,YAAY;AACzB,IAAa,cAAc;;;;AC3P3B,IAAM,cAAc;AAKpB,IAAI,OAAuD;;AAG3D,SAAgB,iBAAiB,KAA6D;CAC1F,SAAS,WAAK,MAAM,EAAE,gBAAgB,IAAI,IAAI,KAAA,CAAS;CACvD,OAAO;AACX;AAEA,IAAI,SAA+B;;;;;;AAOnC,SAAgB,gBAA+B;CAC3C,WAAW,iBAAiB,EAAE,WAAW,SAAS,QAAQ,CAAC,EAAE,OAAO,MAAM;EACtE,SAAS;EACT,MAAM;CACV,CAAC;CACD,OAAO;AACX;;AAGA,SAAgB,eAAqB;CACjC,SAAS;CACT,IAAI,MAAM,SAAS,cAAc;AACrC;AAEA,IAAM,OAAO;CAAE,OAAO;CAAG,OAAO;CAAG,OAAO;AAAE;AAC5C,IAAM,MAAM;CAAE,MAAM;CAAG,OAAO;CAAG,QAAQ;AAAE;AAC3C,IAAM,OAAO;CAAE,OAAO;CAAG,QAAQ;CAAG,QAAQ;CAAG,OAAO;AAAE;AACxD,IAAM,cAAc;CAAE,MAAM;CAAG,SAAS;CAAG,MAAM;AAAE;AACnD,IAAM,UAAQ;CAAE,MAAM;CAAG,OAAO;CAAG,QAAQ;CAAG,SAAS;AAAE;AACzD,IAAM,WAAS;CAAE,KAAK;CAAG,QAAQ;CAAG,QAAQ;AAAE;AAC9C,IAAM,OAAO,IAAI,YAAY;;AAE7B,IAAM,cAAc;AAKpB,SAAS,UAAU,OAAkC;CACjD,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI,QAAU;CAC7E,OAAO,MAAM;AACjB;;AAGA,SAAS,QAAQ,GAAqB;CAClC,MAAM,OAAO,IAAI,YAAY,EAAE,OAAO,QAAQ,EAAE,OAAO,YAAY,EAAE,OAAO,MAAM;CAClF,IAAI,IAAI,YAAY,IAAI,WAAa,EAAE,OAAO;CAC9C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,MAAM,QAAQ,KAAK;EACrC,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM,IAAI,QAAU;EACxC,IAAI,KAAK,KAAK,IAAI,EAAE,MAAM,IAAI,UAAU;CAC5C;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EAClC,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,QAAU;EACrC,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU;CACzC;CACA,OAAO,GAAG,EAAE,MAAM,OAAO,GAAG,KAAK,OAAO,GAAG,MAAM,EAAE,GAAG,MAAM;AAChE;AAEA,IAAa,cAAb,MAAyB;CACrB,OAAgB;CAChB;CACA;CACA,2BAAmB,IAAI,QAAyB;CAChD,6BAAqB,IAAI,IAAsB;CAC/C,aAA+B,CAAC;CAChC,0BAAkB,IAAI,QAA4B;CAClD,4BAAoB,IAAI,IAAsB;CAC9C,YAA8B,CAAC;;CAE/B,aAAqB;;;;;;;CAOrB,gBAAgB;CAChB,0BAAkB,IAAI,IAAoB;CAC1C,YAAoB;CACpB,WAAmB;CACnB,WAAmB;CACnB,SAAiB;CACjB,WAAmB;EAAE,GAAG;EAAG,GAAG;CAAE;CAChC,iBAAiB;CAEjB,MAAM,KAAK,QAA2B,OAAe,QAAgB;EACjE,MAAM,UAAU,MAAM,iBAAiB;EAEvC,MAAM,cAAc,EAAE,YAAY,CAAC,CAAC;EACpC,KAAK,IAAI,MAAM,SAAS,OAAO,QAAQ,OAAO,MAAM;EACpD,KAAK,IAAI,IAAI,YAAY,KAAK,GAAG,QAAQ,MAAM;EAC/C,KAAK,cAAc,IAAI,IAAI,KAAK,EAAE,aAAa,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACtE,KAAK,WAAW;GAAE,GAAG;GAAO,GAAG;EAAO;EACtC,KAAK,UAAU,IAAI,YAAY,KAAK,SAAS,KAAK,gBAAgB,CAAC;CACvE;;CAGA;;CAEA;;CAEA,+BAAwB,IAAI,IAAY;;CAGxC,mBAAkC;EAC9B,OAAO,KAAK,QAAQ,UAAU;CAClC;CAEA,YAAoB,OAA0B,QAA6B;EACvE,MAAM,IAAI,KAAK,QAAQ,QAAQ,OAAO,MAAM;EAC5C,MAAM,IAAI,EAAE,OAAO,YAAY,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,WAAW,OAAO,CAAC;EACxF,IAAI,EAAE,UAAU,YAAY,GACxB,KAAK,aAAa,IAAI,iBAAiB,MAAM,mBAAmB,EAAE,OAAO,UAAU,EAAE,KAAK,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,EAAE,SAAS;EAEjI,OAAO;CACX;CAEA,cAAc;EACV,OAAO,KAAK,EAAE,aAAa;CAC/B;;CAGA,YAAqB;EACjB,OAAO,KAAK,EAAE,WAAW;CAC7B;CAEA,WAAW,QAAiB,QAAiB;EACzC,KAAK,EAAE,YAAY,QAAQ,MAAM;CACrC;CAEA,OAAO,OAAe,QAAgB;EAClC,KAAK,EAAE,OAAO,OAAO,MAAM;EAC3B,KAAK,WAAW;GAAE,GAAG;GAAO,GAAG;EAAO;EACtC,KAAK,SAAS;CAClB;CAEA,MAAc,GAA8B;EACxC,IAAI,CAAC,GAAG,OAAO;EACf,MAAM,QAAQ,KAAK,SAAS,IAAI,CAAC;EACjC,IAAI,OAAO,MAAM;GACb,MAAM,OAAO,KAAK;GAClB,OAAO,MAAM;EACjB;EAEA,MAAM,MAAM,EAAE,SAAS,UAAU,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,OAAO,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,QAAQ,KAAK,GAAG,KAAK,GAAG,GAAG,EAAE,QAAQ,OAC/H,EAAE,SAAS,WAAW,UAAU,KAAK,YAAY,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,SAAS,MAAM,GAAG,GAAG,KAAK,UAAU,EAAE,QAAQ,MACtJ,KAAK,UAAU,CAAC;EACtB,IAAI,QAAQ,KAAK,WAAW,IAAI,GAAG;EACnC,IAAI,OAAO,MAAM,OAAO,KAAK;OACxB;GACD,QAAQ;IAAE,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK;IAAa,MAAM,KAAK;IAAY,MAAM;GAAK;GAC3F,KAAK,WAAW,IAAI,KAAK,KAAK;GAC9B,MAAM,KAAK,MAAM;GACjB,MAAM,IAAI,KAAK;GACf,IAAI,EAAE,SAAS,cAAc;IACzB,KAAK,WAAW,IAAI,CAAC;IACrB,KAAK,SAAS,IAAI,GAAG,KAAK;IAC1B,OAAO;GACX;GACA,IAAI,EAAE,SAAS,UAAU;IACrB,KAAK,YAAY,IAAI,CAAC;IACtB,KAAK,SAAS,IAAI,GAAG,KAAK;IAC1B,OAAO;GACX;GACA,MAAM,QAAQ,EAAE,SAAS,WAAW,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;GAChE,EAAE,MAAM,KAAK,MAAM,SAAS,CAAC;GAC7B,EAAE,EAAE,GAAG,SAAS;GAChB,EAAE,EAAE,EAAE;GACN,IAAI,EAAE,SAAS,SAAS;IACpB,EAAE,EAAE,CAAC;IACL,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;GAClC,OAAO,IAAI,EAAE,SAAS,SAAS;IAG3B,MAAM,EAAE,GAAG,SAAS,YAAY,CAAC;IACjC,MAAM,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IACzC,MAAM,IAAI,EAAE,MAAM,OAAO,IAAI,EAAE,MAAM;IACrC,MAAM,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK;IACvE,MAAM,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAClF,EAAE,EAAE,IAAK,KAAK,SAAS,CAAE;IACzB,EAAE,EAAE,KAAK,CAAC;IAAG,EAAE,EAAE,KAAK,CAAC;IAAG,EAAE,EAAE,KAAK,CAAC;IAAG,EAAE,EAAE,KAAK,CAAC;IACjD,EAAE,EAAE,KAAK,CAAC;IAAG,EAAE,EAAE,MAAM,CAAC;IAAG,EAAE,EAAE,EAAE,MAAM,EAAE;IAAG,EAAE,EAAE,CAAC;GACrD,OAAO;IACH,MAAM,OAAO,EAAE,SAAS,WAAW,IAAI,EAAE,SAAS,WAAW,IAAI;IACjE,EAAE,EAAE,OAAQ,KAAK,EAAE,QAAQ,YAAY,CAAE;IACzC,IAAI,EAAE,SAAS,UAAU;KACrB,EAAE,EAAE,EAAE,KAAK,EAAE;KAAG,EAAE,EAAE,EAAE,KAAK,EAAE;KAAG,EAAE,EAAE,EAAE,GAAG,EAAE;KAAG,EAAE,EAAE,EAAE,GAAG,EAAE;IAC7D,OAAO,IAAI,EAAE,SAAS,UAAU;KAC5B,EAAE,EAAE,EAAE,OAAO,EAAE;KAAG,EAAE,EAAE,EAAE,OAAO,EAAE;KAAG,EAAE,EAAE,EAAE,MAAM;KAAG,EAAE,EAAE,CAAC;IAC5D,OAAO;KACH,EAAE,EAAE,EAAE,OAAO,EAAE;KAAG,EAAE,EAAE,EAAE,OAAO,EAAE;KAAG,EAAE,EAAE,EAAE,UAAU;KAAG,EAAE,EAAE,EAAE,QAAQ;IACzE;IACA,KAAK,MAAM,KAAK,MAAM,GAAG,OAAO,EAAE,EAAE,CAAC;GACzC;GACA,EAAE,EAAE,MAAM,MAAM;GAChB,KAAK,MAAM,KAAK,OAAO;IACnB,EAAE,EAAE,EAAE,MAAM;IACZ,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;GAClC;EACJ;EACA,KAAK,SAAS,IAAI,GAAG,KAAK;EAC1B,OAAO,MAAM;CACjB;;;;CAKA,YAAoB,IAAY,GAAuC;EACnE,MAAM,OAAO,KAAK,YAAY,QAAQ,EAAE,MAAM;EAC9C,MAAM,QAAQ,KAAK,OAAO,KAAK,WAAW,KAAK,OAAO,QAAQ,KAAK,OAAO,MAAM,EAAE,QAAQ,IAAI,IAAI,YAAY,CAAC;EAC/G,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,CAAC;EACxC,MAAM,IAAI,KAAK;EACf,EAAE,MAAM,KAAK,QAAQ,CAAC;EACtB,EAAE,EAAE,GAAG,SAAS;EAAG,EAAE,EAAE,EAAE;EAAG,EAAE,EAAE,EAAE;EAClC,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;EAC5B,EAAE,EAAE,EAAE,IAAI;EAAG,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,KAAK,EAAE;EAAG,EAAE,EAAE,KAAK,EAAE;EAAG,EAAE,EAAE,CAAC;EACpE,EAAE,EAAE,KAAK;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC5B,EAAE,EAAE,CAAC;GACL,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC;EACzD;CACJ;CAEA,WAAmB,IAAY,GAA2C;EACtE,MAAM,IAAI,EAAE;EACZ,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE;EAC3B,IAAI,MAAc,MAAgB;EAClC,MAAM,QAAoB,CAAC;EAC3B,MAAM,OAA8C,CAAC;EACrD,MAAM,MAAM,MAAyB;GAAC,KAAK,MAAM,EAAE,KAAK,GAAG,IAAI;GAAK,KAAK,MAAM,EAAE,KAAK,GAAG,IAAI;GAAK,KAAK,MAAM,EAAE,KAAK,GAAG,IAAI;GAAK,EAAE;EAAE;EACpI,IAAI,EAAE,SAAS,WAAW;GACtB,OAAO;GACP,OAAO;IAAC,KAAK,EAAE,OAAO;IAAG,KAAK,EAAE,OAAO;IAAG,KAAK,IAAI,KAAM,EAAE,OAAO;IAAG,KAAK,IAAI,GAAG,EAAE,MAAM;GAAC;GAC1F,QAAQ,CAAC,GAAG,EAAE,KAAK;EACvB,OAAO,IAAI,EAAE,SAAS,QAAQ;GAC1B,OAAO;GACP,OAAO;IAAC,KAAK,EAAE,OAAO;IAAG,KAAK,EAAE,OAAO;IAAG;IAAI;GAAE;GAChD,QAAQ,CAAC,GAAG,EAAE,KAAK;GACnB,MAAM,KAAK;IAAC,KAAK,IAAI,MAAQ,EAAE,SAAS;IAAG,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,YAAY,CAAC;IAAG,KAAK,IAAI,GAAG,EAAE,WAAW,IAAI;IAAK,KAAK,IAAI,GAAG,EAAE,gBAAgB,IAAI;GAAG,CAAC;EAChK,OAAO,IAAI,EAAE,SAAS,UAAU;GAC5B,OAAO;GACP,MAAM,OAAQ,EAAE,SAAS,OAAO,KAAK,KAAM;GAC3C,OAAO;IAAC;IAAI;IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;IAAG,EAAE,eAAe;GAAC;GACvE,QAAQ,GAAG,EAAE,SAAS;IAAC;IAAG;IAAG;IAAG;GAAC,CAAC;GAClC,MAAM,KAAK;IAAC,KAAK,IAAI,GAAG;IAAG,KAAK,IAAI,GAAG;IAAG;IAAI;GAAC,CAAC;EACpD,OAAO,IAAI,EAAE,SAAS,SAAS;GAC3B,OAAO;GACP,OAAO;IAAC;IAAI;IAAI,KAAK,KAAK,EAAE;IAAG,KAAK,KAAK,EAAE;GAAC;GAC5C,MAAM,IAAI,GAAG,EAAE,KAAK;GACpB,QAAQ;IAAC,EAAE;IAAI,EAAE;IAAI,EAAE;IAAI,KAAK,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI;GAAG;GAC7D,MAAM,KAAK;IAAC,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;IAAG,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;IAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,OAAO,CAAC;IAAG,KAAK,MAAM,EAAE,IAAI;GAAC,CAAC;EAC9I,OAAO;GACH,OAAO;GACP,OAAO;IAAC;IAAI;IAAI;IAAI;GAAE;GACtB,MAAM,MAAO,EAAE,QAAQ,KAAK,KAAM;GAClC,MAAM,QAAQ;IAAE,OAAO;IAAG,SAAS;IAAG,QAAQ;IAAG,QAAQ;GAAE,EAAE,EAAE,UAAU;GACzE,MAAM,KAAK;IAAC,EAAE,UAAU;IAAG,EAAE,UAAU;IAAG,EAAE,OAAO;IAAG,EAAE,OAAO;GAAC,CAAC;GACjE,MAAM,KAAK;IAAC,EAAE;IAAY,EAAE;IAAM,EAAE;IAAM,EAAE;GAAQ,CAAC;GACrD,MAAM,KAAK;IAAC,KAAK,IAAI,GAAG;IAAG,KAAK,IAAI,GAAG;IAAG;IAAO,EAAE;GAAO,CAAC;GAC3D,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,OAAO,MAAM,CAAC;GAClD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,KAAK,KAAK;IAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC,MAAM,KAAK,IAAI;IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,EAAE,OAAO,SAAS,CAAC,EAAE;GAAE,CAAC;GAEzI,QAAQ,KAAK,GAAG;EACpB;EACA,MAAM,IAAI,MAAM,SAAS,KAAK;EAC9B,MAAM,IAAI,KAAK;EACf,EAAE,MAAM,KAAK,IAAI,CAAC;EAClB,EAAE,EAAE,GAAG,SAAS;EAChB,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,IAAI;EACR,KAAK,MAAM,KAAK,MAAM,EAAE,EAAE,CAAC;EAC3B,KAAK,MAAM,KAAK,OAAO,EAAE,EAAE,CAAC;EAC5B,EAAE,EAAE,CAAC;EACL,KAAK,MAAM,KAAK,OAAO;GAAE,EAAE,EAAE,CAAC;GAAG,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;EAAG;EAC5D,KAAK,MAAM,KAAK,MAAM;GAAE,EAAE,EAAE,EAAE,MAAM;GAAG,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;EAAG;CAC5E;CAEA,OAAe,GAAqB;EAChC,MAAM,QAAQ,KAAK,QAAQ,IAAI,CAAC;EAChC,IAAI,OAAO,MAAM;GACb,MAAM,OAAO,KAAK;GAClB,OAAO,MAAM;EACjB;EAGA,MAAM,MAAM,QAAQ,CAAC;EACrB,MAAM,OAAO,KAAK,UAAU,IAAI,GAAG;EACnC,IAAI,MAAM;GACN,KAAK,OAAO,KAAK;GACjB,KAAK,QAAQ,IAAI,GAAG,IAAI;GACxB,OAAO,KAAK;EAChB;EACA,MAAM,QAAkB;GAAE,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK;GAAY,MAAM,KAAK;GAAY,MAAM;EAAK;EACzG,KAAK,UAAU,IAAI,KAAK,KAAK;EAC7B,MAAM,KAAK,MAAM;EACjB,MAAM,IAAI,KAAK;EACf,MAAM,KAAK,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;EACvC,EAAE,MAAM,IAAI,KAAK,EAAE,OAAO,MAAM;EAChC,EAAE,EAAE,GAAG,QAAQ;EACf,EAAE,EAAE,EAAE;EACN,EAAE,EAAE,EAAE,MAAM,MAAM;EAClB,EAAE,EAAE,EAAE,OAAO,SAAS,CAAC;EACvB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GACzB,MAAM,IAAI,EAAE;GACZ,MAAM,IAAI,IAAI;GACd,EAAE,GAAG,EAAE,MAAM,MAAO,EAAE,IAAI,MAAM,MAAM,KAAO,EAAE,IAAI,MAAM,MAAM,MAAQ,EAAE,IAAI,MAAM,MAAM,EAAG;EAChG;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,QAAQ,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;EACzD,KAAK,QAAQ,IAAI,GAAG,KAAK;EACzB,OAAO;CACX;;CAGA,QAAgB;EACZ,MAAM,SAAS,KAAK,aAAa;EACjC,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,WAAW;GACnC,IAAI,EAAE,QAAQ,QAAQ;GACtB,EAAE,OAAO;GACT,KAAK,UAAU,OAAO,GAAG;GACzB,KAAK,EAAE,MAAM,CAAC;GACd,KAAK,EAAE,EAAE,GAAG,SAAS;GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;GACrC,KAAK,UAAU,KAAK,EAAE,EAAE;EAC5B;EACA,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,YAAY;GACpC,IAAI,EAAE,QAAQ,QAAQ;GACtB,EAAE,OAAO;GACT,KAAK,WAAW,OAAO,GAAG;GAC1B,KAAK,WAAW,KAAK,EAAE,EAAE;EAC7B;CACJ;CAEA,KAAa,WAAiC,QAAQ,GAAW;EAC7D,IAAI,CAAC,aAAa,UAAU,WAAW,GAAG,OAAO;EACjD,MAAM,MAAM,UAAU,KAAK,GAAG,IAAI,MAAM;EACxC,IAAI,KAAK,KAAK,QAAQ,IAAI,GAAG;EAC7B,IAAI,OAAO,KAAA,GAAW;GAClB,KAAK,KAAK;GACV,KAAK,QAAQ,IAAI,KAAK,EAAE;GACxB,MAAM,IAAI,KAAK;GACf,EAAE,MAAM,IAAI,UAAU,MAAM;GAC5B,EAAE,EAAE,GAAG,QAAQ;GACf,EAAE,EAAE,EAAE;GACN,EAAE,EAAE,UAAU,MAAM;GACpB,EAAE,EAAE,KAAK;GACT,KAAK,MAAM,KAAK,WAAW,EAAE,EAAE,CAAC;EACpC;EACA,OAAO;CACX;CAEA,UAAkB,GAAS,MAAc;EACrC,MAAM,IAAI,KAAK;EACf,MAAM,KAAK,EAAE;EACb,IAAI,OAAO,EAAE,QAAQ;GACjB,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,MAAM;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,UAAU,EAAE,KAAK;EAClD;EACA,IAAI,OAAO,EAAE,WAAW;GACpB,MAAM,IAAI,EAAE;GACZ,IAAI,aAAa,CAAC,GAAG;IACjB,EAAE,MAAM,EAAE;IACV,EAAE,EAAE,GAAG,UAAU;IAAG,EAAE,EAAE,EAAE;IAC1B,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;GAC5B,OAAO;IAEH,EAAE,MAAM,CAAC;IACT,EAAE,EAAE,GAAG,SAAS;IAAG,EAAE,EAAE,EAAE;IACzB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;GACxC;EACJ;EACA,IAAI,OAAO,EAAE,YAAY,EAAE,SAAS,UAAU,EAAE,OAAO,EAAE,UAAU,KAAK,aAAa,CAAC;EACtF,IAAI,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK,EAAE,OAAO,EAAE,UAAU;GAC7D,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,OAAO;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,EAAE,OAAO;EAC3C;EACA,IAAI,OAAO,EAAE,UAAU,EAAE,UAAU,YAAY,EAAE,OAAO,EAAE,UAAU;GAChE,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,KAAK;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,YAAY,QAAQ,EAAE,KAAK,CAAC;EAC5D;EACA,IAAI,EAAE,SAAS,SAAS;GACpB,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;IACjD,MAAM,IAAI,EAAE;IACZ,MAAM,MAAM,GAAG,OAAO,KAAK,OAAO,EAAE,IAAI,IAAI;IAC5C,MAAM,IAAI,GAAG,OAAO,WAAW,EAAE,IAAI,IAAI;KAAC,GAAG,KAAK;KAAG,GAAG,KAAK;MAAI,GAAG,KAAK,MAAM,GAAG,KAAK;MAAK,GAAG,KAAK,MAAM,GAAG,KAAK;IAAE;IACpH,EAAE,MAAM,EAAE;IACV,EAAE,EAAE,GAAG,IAAI;IAAG,EAAE,EAAE,EAAE;IAAG,EAAE,EAAE,IAAI,IAAI,CAAC;IACpC,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;IACxB,EAAE,EAAE,GAAG,KAAK,CAAC;IAAG,EAAE,EAAE,GAAG;IAAG,EAAE,EAAE,GAAG,UAAU,IAAI,CAAC;GACpD;GACA,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;IACjD,EAAE,MAAM,CAAC;IACT,EAAE,EAAE,GAAG,IAAI;IAAG,EAAE,EAAE,EAAE;IAAG,EAAE,EAAE,EAAE,OAAO,UAAU,EAAE,QAAQ,CAAC;GAC7D;GACA,IAAI,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;IACrD,MAAM,IAAI,EAAE;IACZ,EAAE,MAAM,EAAE;IACV,EAAE,EAAE,GAAG,MAAM;IAAG,EAAE,EAAE,EAAE;IACtB,IAAI,CAAC,GAAG;KACJ,EAAE,EAAE,CAAC;KAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;IAC7C,OAAO,IAAI,EAAE,SAAS,QAAQ;KAC1B,EAAE,EAAE,CAAC;KAAG,EAAE,EAAE,EAAE,KAAK;KAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;IAC3D,OAAO;KACH,EAAE,EAAE,CAAC;KAAG,EAAE,EAAE,EAAE,KAAK;KAAG,EAAE,EAAE,EAAE,EAAE;KAAG,EAAE,EAAE,EAAE,EAAE;KAAG,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;IAC9E;GACJ;GACA,IAAI,OAAO,EAAE,UAAU;IACnB,EAAE,MAAM,IAAI,EAAE,SAAS,MAAM;IAC7B,EAAE,EAAE,GAAG,QAAQ;IAAG,EAAE,EAAE,EAAE;IAAG,EAAE,EAAE,EAAE,SAAS,MAAM;IAChD,KAAK,MAAM,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE;GACxC;GACA;EACJ;EACA,IAAI,OAAO,EAAE,MAAM;GACf,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,IAAI;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,EAAE,CAAC;GAAG,EAAE,EAAE,EAAE,CAAC;EAC5C;EACA,IAAI,OAAO,EAAE,SAAS,EAAE,SAAS,QAAQ;GACrC,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,KAAK;GAAG,EAAE,EAAE,EAAE;GACrB,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;EAClC;EACA,IAAI,OAAO,EAAE,WAAW,EAAE,SAAS;GAC/B,MAAM,KAAK,EAAE;GACb,MAAM,OAAO,GAAG,KAAK,MAAO,EAAE,SAAS,UAAU,EAAE,OAAO,KAAK,OAAO,EAAE,IAAI,IAAI,IAAK;GACrF,EAAE,MAAM,IAAI,GAAG,SAAS,EAAE;GAC1B,EAAE,EAAE,GAAG,OAAO;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,GAAG,MAAM;GACvC,GAAG,SAAS,GAAG,MAAM;IACjB,EAAE,EAAE,YAAY,EAAE,KAAK;IAAG,EAAE,EAAE,UAAU,SAAS,CAAC,EAAE;IACpD,KAAK,MAAM,KAAK,EAAE,aAAa;KAAC;KAAG;KAAG;KAAG;KAAG;KAAG;IAAC,GAAG,EAAE,EAAE,CAAC;IACxD,EAAE,EAAE,EAAE,KAAK,CAAC;IAAG,EAAE,EAAE,EAAE,KAAK,CAAC;IAC3B,KAAK,MAAM,KAAK,EAAE,SAAS;KAAC;KAAG;KAAG;KAAG;IAAC,GAAG,EAAE,EAAE,CAAC;IAC9C,EAAE,EAAE,KAAK,EAAE;IAAG,EAAE,EAAE,EAAE,UAAU,IAAI,CAAC;GACvC,CAAC;EACL;EACA,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM;GACzB,MAAM,IAAI,EAAE;GACZ,MAAM,UAAU,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,OAAO,EAAE,MAAM,GAAG,KAAK,OAAO,EAAE,IAAI,CAAC,CAAU;GACvF,MAAM,QAAQ,QAAQ,QAAQ,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC;GAC5G,MAAM,SAAS,EAAE,OAAO,KAAK,OAAO,EAAE,IAAI,IAAI;GAC9C,MAAM,YAAY,EAAE,KAAK,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC;GACvD,EAAE,MAAM,KAAK,KAAK;GAClB,EAAE,EAAE,GAAG,IAAI;GAAG,EAAE,EAAE,EAAE;GACpB,EAAE,EAAE,QAAM,EAAE,SAAS,SAAS;GAAG,EAAE,EAAE,SAAO,EAAE,iBAAiB,SAAS;GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC;GAC7F,EAAE,EAAE,EAAE,aAAa,YAAY,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;GAAG,EAAE,EAAE,EAAE,eAAe,CAAC;GACpG,EAAE,EAAE,EAAE,cAAc,CAAC;GAAG,EAAE,EAAE,EAAE,SAAS,CAAC;GAAG,EAAE,EAAE,EAAE,UAAU,CAAC;GAC5D,EAAE,EAAE,EAAE,KAAK,MAAM;GACjB,EAAE,KAAK,SAAS,GAAG,MAAM;IACrB,EAAE,EAAE,EAAE,eAAe,cAAc,IAAI,EAAE,eAAe,gBAAgB,IAAI,CAAC;IAC7E,EAAE,EAAE,UAAU,EAAE;IAChB,EAAE,EAAE,EAAE,IAAI;IAAG,EAAE,EAAE,EAAE,UAAU,GAAG;IAAG,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC;IAAG,EAAE,EAAE,EAAE,iBAAiB,CAAC;IAClF,KAAK,MAAM,SAAS,QAAQ,IAAI;KAC5B,EAAE,EAAE,MAAM,MAAM;KAChB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GACnC,EAAE,GAAG,MAAM,MAAM,MAAO,MAAM,IAAI,MAAM,MAAM,KAAO,MAAM,IAAI,MAAM,MAAM,MAAQ,MAAM,IAAI,MAAM,MAAM,EAAG;IAEpH;GACJ,CAAC;GACD,EAAE,EAAE,MAAM;EACd;EACA,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM;GACzB,MAAM,MAAM,KAAK,OAAO,EAAE,IAAI;GAC9B,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,IAAI;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,GAAG;GAAG,EAAE,EAAE,EAAE,UAAU,IAAI,CAAC;EAC1D;EACA,IAAI,OAAO,EAAE,MAAM;GACf,MAAM,IAAI,KAAK,MAAM,EAAE,IAAI;GAC3B,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,IAAI;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,CAAC;EAChC;EACA,IAAI,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;GACrD,MAAM,IAAI,EAAE;GACZ,MAAM,IAAI,KAAK,MAAM,GAAG,KAAK;GAC7B,MAAM,OAAO,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS;GAC5C,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,MAAM;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,CAAC;GAC9B,EAAE,EAAE,GAAG,SAAS,CAAC;GAAG,EAAE,EAAE,KAAK,GAAG,QAAQ,QAAQ;GAAG,EAAE,EAAE,IAAI,GAAG,OAAO,OAAO;GAAG,EAAE,EAAE,GAAG,SAAS,CAAC;GAAG,EAAE,EAAE,IAAI;EAC/G;EACA,IAAI,OAAO,EAAE,YAAY,EAAE,QAAQ,UAAU,EAAE,OAAO,EAAE,UAAU;GAC9D,EAAE,MAAM,IAAI,EAAE,QAAQ,SAAS,CAAC;GAChC,EAAE,EAAE,GAAG,OAAO;GAAG,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,EAAE,QAAQ,MAAM;GAC9C,KAAK,MAAM,KAAK,EAAE,SAAS;IACvB,EAAE,EAAE,EAAE,EAAE;IAAG,EAAE,EAAE,EAAE,EAAE;IAAG,EAAE,EAAE,EAAE,KAAK;IAAG,EAAE,EAAE,EAAE,MAAM;IAChD,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;GAClC;EACJ;CACJ;CAEA,2BAAmB,IAAI,IAAoB;;CAE3C,4BAAqB,IAAI,IAAY;;CAErC,6BAAqB,IAAI,IAA0B;;CAEnD,+BAAuB,IAAI,IAA2B;;;CAItD,eAAuB,KAAiB,OAAqB;EACzD,KAAK,MAAM,OAAO,MAAM,QAAQ,OAAO,CAAC,GAAG;GACvC,MAAM,IAAI,IAAI;GACd,IAAI,UAAU,GAAG;IACb,KAAK,EAAE,eAAe,IAAI,IAAI,IAAI,IAAI,WAAW,KAAK,EAAE,IAAyB,GAAG,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI;IAC/G;GACJ;GACA,MAAM,SAAS,SAAS,IAAI,IAAI,SAAS,SAAS,EAAE,OAAO,IAAI,SAAS,UAAU,IAAI,CAAC;GACvF,IAAI,QAAQ,KAAK,EAAE,aAAa,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI;QAC9D,KAAK,UAAU,IAAI,SAAS,IAAI,SAAS,EAAE,QAAQ,SAAS;EACrE;CACJ;CACA,8BAAsB,IAAI,IAAoB;;CAE9C,aAAqB;CACrB,UAAkB;CAClB,8BAAsB,IAAI,IAAoB;CAC9C,yBAAiB,IAAI,IAAoB;;CAEzC,0BAAmB,IAAI,IAAY;;CAGnC,cAAwB;EACpB,OAAO,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,EAAE,QAAQ,MAAM,MAAM,IAAI,CAAC,CAAC;CAClE;CAEA,MAAc,KAAqC;EAC/C,IAAI,CAAC,KAAK,OAAO;EACjB,IAAI,KAAK,KAAK,OAAO,IAAI,IAAI,GAAG;EAChC,IAAI,OAAO,KAAA,GAAW;GAClB,KAAK,MAAY,KAAK,OAAO;GAC7B,MAAM,IAAI,IAAI,gBAAgB,IAAI,OAAO,IAAI,MAAM;GACnD,EAAE,WAAW,IAAI,EAAG,aAAa,IAAI,UAAU,IAAI,kBAAkB,IAAI,MAAM,GAAG,IAAI,OAAO,IAAI,MAAM,GAAG,GAAG,CAAC;GAC9G,KAAK,EAAE,aAAa,IAAI,GAAG,KAAK;GAChC,KAAK,OAAO,IAAI,IAAI,KAAK,EAAE;EAC/B;EACA,OAAO;CACX;;CAGA,aAAqB,GAAS;EAE1B,MAAM,OAAQ,EAAE,WAAW,CAAC;EAC5B,MAAM,SAA0F,CAAC;EAIjG,KAAK,MAAM,CAAC,SAAS,aAAa;GADlB,CAAC,UAAU,KAAK;GAAG,CAAC,UAAU,KAAK;GAAG,CAAC,UAAU,IAAI;GAAG,CAAC,UAAU,IAAI;EACrD,GAC9B,KAAK,MAAM,KAAK,MAAM;GAClB,IAAI,EAAE,SAAS,UAAU;IAErB,IAAK,EAAE,SAAS,eAAgB,aAAa,WAAW,WAAW,cAAc,SAAS;IAC1F,MAAM,KAAK,KAAK,WAAW,CAA0B;IACrD,IAAI,IAAI,OAAO,KAAK;KAAE,GAAG;KAAI,QAAQ,EAAE,OAAO,IAAI,MAAM,WAAW,IAAI;IAAG,CAAC;IAC3E;GACJ;GACA,MAAM,OAAO,MAAM,IAAI,EAAE,IAAI;GAC7B,MAAM,QAAQ,KAAK,YAAY,IAAI,EAAE,IAAI;GACzC,IAAI,CAAC,QAAQ,UAAU,KAAA,GAAW;IAC9B,IAAI,CAAC,KAAK,QAAQ,IAAI,EAAE,IAAI,GAAG,QAAQ,KAAK,WAAW,EAAE,KAAK,gCAAgC;IAC9F,KAAK,QAAQ,IAAI,EAAE,IAAI;IACvB;GACJ;GACA,IAAI,KAAK,YAAY,WAAY,EAAE,SAAS,eAAgB,UAAU;GACtE,IAAI,KAAK,gBAAgB,CAAC,UAAU;GACpC,MAAM,IAAI,KAAK,KAAK,CAAC;GACrB,IAAI,CAAC,GAAG;GACR,OAAO,KAAK;IAAE;IAAO,QAAQ,EAAE,OAAO,IAAI,MAAM,WAAW,IAAI,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,EAAE,QAAQ,IAAI;IAAI,KAAK,KAAK,MAAM,EAAE,GAAG;IAAG;GAAE,CAAC;EACnK;EAEJ,MAAM,IAAI,KAAK;EACf,MAAM,MAAM,EAAE,aAAa;GAAC;GAAG;GAAG;GAAG;EAAC;EACtC,EAAE,MAAM,IAAI,OAAO,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,EAAE,OAAO,UAAU,EAAE,OAAO,UAAU,IAAI,CAAC,CAAC;EAC1F,EAAE,EAAE,GAAG,OAAO;EAAG,EAAE,EAAE,EAAE,EAAE;EACzB,KAAK,MAAM,KAAK,KAAK,EAAE,EAAE,CAAC;EAC1B,EAAE,EAAE,EAAE,cAAc,CAAC;EACrB,EAAE,EAAE,OAAO,MAAM;EACjB,KAAK,MAAM,KAAK,QAAQ;GACpB,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,EAAE,EAAE,KAAK;GAAG,EAAE,EAAE,EAAE,GAAG;GAAG,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;GAC1D,MAAM,IAAI,EAAE,EAAE,QAAQ;IAAC;IAAG;IAAG;GAAC;GAC9B,EAAE,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,EAAE,EAAE;GAAG,EAAE,EAAE,EAAE,EAAE;GAC9B,EAAE,EAAE,EAAE,EAAE,OAAO,UAAU,EAAE,OAAO,UAAU,EAAE;GAC9C,KAAK,MAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;GACjC,IAAI,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;EAC/C;CACJ;;CAGA,WAAmB,GAAqF;EACpG,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,OAAO;EAC9B,IAAI,CAAC,aAAa,CAAC,GAAG;GAClB,KAAK,aAAa,IAAI,WAAW;GACjC,OAAO;EACX;EACA,MAAM,OAAO,KAAK,YAAY,UAAU,EAAE,MAAM;EAChD,IAAI,CAAC,KAAK,OAAO,IAAI,OAAO;EAC5B,MAAM,WAAW,kBAAkB,EAAE,QAAmD;EACxF,MAAM,QAAQ,EAAE,SAAS,cAAc,EAAE,aAAa,aAAa,EAAE,cAAc,MAAM,IAAI;EAC7F,OAAO;GAAE,OAAO,cAAc,KAAK;GAAI,KAAK;GAAM,GAAG;IAAE,QAAQ,CAAC,KAAK;IAAG,OAAO,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC;GAAE;GAAG,OAAO,WAAW,KAAK,OAAO,QAAQ,KAAK,OAAO,MAAM,QAAQ;EAAE;CAClL;CACA,gCAAwB,IAAI,IAA6B;;;;;;;;CASzD,aAAqB,KAA6D;EAC9E,IAAI,OAAO,eAAe,eAAe,EAAE,IAAI,kBAAkB,aAAa,OAAO,IAAI;EACzF,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,EAAE;EACrC,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,SAAS,EAAE,WAAW,IAAI,QAAQ;GACxD,IAAI,IAAI,gBAAgB,IAAI,OAAO,IAAI,MAAM;GAC7C,KAAK,cAAc,IAAI,IAAI,IAAI,CAAC;EACpC;EACA,EAAE,WAAW,IAAI,EAAG,UAAU,IAAI,QAAQ,GAAG,CAAC;EAC9C,OAAO;CACX;CAEA,KAAK,KAAU;EACX,KAAK;EACL,KAAK,aAAa;EAClB,KAAK,UAAU;EAEf,KAAK,MAAM,OAAO,IAAI,QAAQ;GAC1B,IAAI,KAAK,SAAS,IAAI,IAAI,EAAE,MAAM,IAAI,SAAS;GAC/C,IAAI,IAAI,SACJ,KAAK,EAAE,YAAY,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,OAAO,IAAI,MAAM;QAC7D,IAAI,IAAI,SAAS;IACpB,MAAM,IAAI,KAAK,SAAS,IAAI,IAAI;IAChC,MAAM,SAAS,EAAE,6BAAa,IAAI,IAAY,EAAE;IAChD,IAAI,QAAQ,KAAK,WAAW,IAAI,IAAI,EAAE;IACtC,IAAI,CAAC,OAAO,KAAK,WAAW,IAAI,IAAI,IAAK,QAAQ,IAAI,aAAa,CAAE;IACpE,MAAM,CAAC,IAAI,MAAM,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,QAAQ,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,MAAM,IAAI,SAAS,CAAC,CAAC;IACjK,MAAM,KAAK,YAAY,IAAI;IAC3B,IAAI,aAAa,KAAK,aAAa,IAAI,IAAI,EAAE;IAC7C,IAAI,CAAC,YAAY,KAAK,aAAa,IAAI,IAAI,IAAK,aAAa,IAAI,cAAc,CAAE;IACjF,MAAM,QAAQ,cAAc,IAAI,SAAS,QAAQ,OAAO,UAAU;IAGlE,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,OAAO,GAAG,UAAU,KAAK;IAC1D,KAAK,cAAc,YAAY,IAAI,IAAI;IACvC,KAAK,WAAW,MAAM;IACtB,IAAI,KAAK,YAAY,IAAI,IAAI,EAAE,MAAM,KAAK;KACtC,IAAI;MACA,KAAK,EAAE,YAAY,IAAI,IAAI,IAAI,IAAI,KAAK;KAC5C,SAAS,GAAG;MAER,KAAK,aAAa,OAAO,IAAI,EAAE;MAC/B,KAAK,YAAY,OAAO,IAAI,EAAE;MAC9B,MAAM;KACV;KACA,KAAK,YAAY,IAAI,IAAI,IAAI,GAAG;IACpC;IACA,KAAK,MAAM,KAAK,OAAO,aAAa,KAAK,UAAU,IAAI,CAAC;IACxD,KAAK,eAAe,KAAK,KAAK;GAClC,OAAO,KAAK,EAAE,aAAa,IAAI,IAAI,KAAK,aAAa,GAAG,GAAG,IAAI,OAAO;GACtE,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,OAAO;EACzC;EACA,MAAM,IAAI,KAAK;EACf,IAAI,CAAC,KAAK,QAAQ;GAEd,KAAK,MAAM,KAAK,IAAI,OAAO,KAAK,UAAU,GAAG,EAAE,GAAG;GAClD,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,IAAI;GAAG,EAAE,EAAE,IAAI,KAAK,EAAE;GAC7B,EAAE,MAAM,CAAC;GACT,EAAE,EAAE,GAAG,QAAQ;GAAG,EAAE,EAAE,KAAK,SAAS,CAAC;GAAG,EAAE,EAAE,KAAK,SAAS,CAAC;GAAG,EAAE,EAAE,KAAK,SAAS,IAAI,IAAI,KAAK;GAC7F,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,EAAE,CAAC;GACrC,KAAK,SAAS;EAClB,OACI,KAAK,MAAM,KAAK,IAAI,OAAO,KAAK,UAAU,GAAG,EAAE,KAAK;EAExD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,QAAQ;EACrC,IAAI,MAAM,MAAM;EAChB,IAAI,KAAK,iBAAiB,KAAK,aAAa,OAAO,GAAG,KAAK,MAAM;EACjE,EAAE,MAAM;EACR,KAAK,iBAAiB,EAAE,UAAU;CACtC;CAEA,SAAS;EACL,KAAK,EAAE,OAAO;CAClB;CAEA,aAAa;EACT,KAAK,EAAE,WAAW;CACtB;CAEA,UAAyB;EACrB,OAAO,KAAK,EAAE,SAAS;CAC3B;CAEA,MAAM,aAAkC;EACpC,OAAQ,MAAM,KAAK,EAAE,YAAY;CACrC;CAEA,QAAgC;EAC5B,MAAM,IAAI,KAAK,EAAE,MAAM;EACvB,OAAO;GACH,SAAS,EAAE;GAAI,UAAU,EAAE;GAAI,SAAS,EAAE;GAAI,OAAO,EAAE;GAAI,KAAK,EAAE;GAAI,QAAQ,EAAE;GAChF,QAAQ,EAAE;GAAI,OAAO,EAAE;GAAI,QAAQ,EAAE;GAAI,aAAa,EAAE;GAAI,cAAc,EAAE;GAC5E,SAAS,EAAE;GAAK,cAAc,EAAE;GAAK,aAAa,EAAE;GAAK,YAAY,EAAE;GAAK,YAAY,KAAK;GAC7F,iBAAiB,KAAK;GAAY,cAAc,KAAK;GAAS,cAAc,EAAE;GAAK,eAAe,EAAE;GAAK,eAAe,EAAE;GAAK,eAAe,EAAE;GAAK,UAAU,EAAE;EACrK;CACJ;CAEA,aAAa,OAAmB,QAAgB;EAC5C,KAAK,EAAE,cAAc,OAAO,MAAM;CACtC;CAEA,UAAU;EACN,KAAK,EAAE,KAAK;CAChB;AACJ;;;;ACzsBA,IAAa,YAAY,QAAgB,IAAI,QAAQ,UAAU,EAAE;;;;ACVjE,IAAM,mBAAmB;;AAEzB,IAAM,mBAAmB;AAgBzB,IAAM,WAAW,SAAiB,KAAK,QAAQ,CAAC;AAEhD,eAAe,WAAW,KAA4B;CAClD,MAAM,MAAM,MAAM,MAAM,GAAG;CAC3B,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,SAAS,IAAI,QAAQ;CACzD,OAAO,IAAI,KAAK;AACpB;AAEA,IAAa,qBAAb,cAAwC,eAAsC;CAgBZ;CAA8B;CAf5F,yBAAkB,IAAI,IAAqB;CAC3C,yBAAkB,IAAI,IAAwB;;CAE9C,QAA6B,CAAC;CAC9B,gCAAwB,IAAI,IAA8B;CAC1D,qCAA6B,IAAI,IAAY;CAC7C,0BAAkB,IAAI,IAA2C;;CAEjE,0BAAkB,IAAI,IAAqD;;CAE3E,2BAAmB,IAAI,IAAoB;;CAE3C,2BAAmB,IAAI,IAAgC;CACvD,4BAAoB,IAAI,IAAkC;CAE1D,YAAY,SAAuB,UAAkB,KAAsB,YAA6D,YAAY;EAChJ,MAAM,SAAS,QAAQ;EADmC,KAAA,MAAA;EAA8B,KAAA,YAAA;CAE5F;;CAGA,IAAI,OAAe;EACf,OAAO,KAAK;CAChB;;CAGA,WAAW,SAAiD;EACxD,KAAK,SAAS,IAAI,OAAO;EACzB,aAAa,KAAK,SAAS,OAAO,OAAO;CAC7C;;CAGA,OAAO,UAAgD;EACnD,KAAK,cAAc,IAAI,QAAQ;EAC/B,aAAa,KAAK,cAAc,OAAO,QAAQ;CACnD;CAEA,MAAM,UAAU,KAA4B;EACxC,MAAM,MAAM,SAAS,GAAG;EACxB,IAAI,KAAK,OAAO,IAAI,GAAG,GAAG;EAC1B,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,EAAE,aAAa,GAAG,CAAC;EACpD,MAAM,OAAO,MAAM,KAAK,UAAU,GAAG;EACrC,IAAI;EACJ,IAAI,KAAK,SAAS,mBAAmB,iBAAiB,KAAK,GAAG,GAAG;GAE7D,MAAM,MAAM,IAAI,MAAM;GACtB,IAAI,MAAM,oCAAoC,mBAAmB,MAAM,KAAK,KAAK,CAAC;GAClF,MAAM,IAAI,OAAO;GACjB,SAAS,MAAM,kBAAkB,GAAG;GACpC,KAAK,QAAQ,IAAI,KAAK;IAAE;IAAK,MAAM,KAAK,IAAI,OAAO,OAAO,OAAO,MAAM;GAAE,CAAC;EAC9E,OACI,SAAS,MAAM,kBAAkB,MAAM,EAAE,sBAAsB,OAAO,CAAC;EAE3E,MAAM,OAAO,KAAK,IAAI,OAAO,OAAO,OAAO,MAAM;EACjD,IAAI,OAAO,kBAAkB;GACzB,MAAM,IAAI,mBAAmB;GAC7B,MAAM,SAAS,MAAM,kBAAkB,QAAQ;IAC3C,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;IACrD,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,SAAS,CAAC,CAAC;IACvD,eAAe;GACnB,CAAC;GACD,OAAO,MAAM;GACb,SAAS;EACb;EACA,KAAK,OAAO,IAAI,KAAK;GAAE;GAAQ,OAAO,IAAI,WAAW,CAAC;GAAG,OAAO,OAAO;GAAO,QAAQ,OAAO;EAAO,CAAC;CACzG;CAEA,MAAM,UAAU,KAA4B;EACxC,MAAM,MAAM,SAAS,GAAG;EACxB,IAAI,KAAK,OAAO,IAAI,GAAG,GAAG;EAC1B,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,EAAE,aAAa,GAAG,CAAC;EACpD,MAAM,QAAQ,IAAI,MAAM;GAAE,QAAQ,IAAI,WAAW,MAAM,KAAK,UAAU,GAAG,CAAC;GAAG,SAAS;EAAY,CAAC;EACnG,MAAM,QAAQ,MAAM,MAAM,qBAAqB;EAC/C,IAAI,CAAC,OAAO;GACR,MAAM,QAAQ;GACd,MAAM,IAAI,MAAM,aAAa,IAAI,kBAAkB;EACvD;EACA,MAAM,WAAW,MAAM,MAAM,gBAAgB;EAC7C,KAAK,OAAO,IAAI,KAAK;GAAE;GAAU,MAAM,IAAI,gBAAgB,KAAK;GAAG;GAAO,wBAAQ,IAAI,IAAI;GAAG,MAAM;EAAK,CAAC;CAC7G;CAEA,WAAW,KAAa,MAAkC;EACtD,MAAM,MAAM,SAAS,GAAG;EACxB,MAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;EACjC,IAAI,CAAC,OAAO,OAAO;EACnB,MAAM,QAAQ,MAAM,OAAO,IAAI,QAAQ,IAAI,CAAC;EAC5C,IAAI,OAAO,OAAO;EAElB,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAI,KAAK;GAAE,KAAK;GAAK;EAAK,CAAC;EAG9D,OAAO,MAAM;CACjB;;;;;;CAOA,cAAc,KAAa,MAAoB;EAC3C,MAAM,MAAM,SAAS,GAAG;EACxB,MAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;EACnC,MAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;EACjC,IAAI,CAAC,UAAU,CAAC,SAAS,QAAQ,OAAO,MAAM;EAC9C,MAAM,UAAU,KAAK,IAAI,MAAM,OAAO,MAAM,MAAM;EAClD,MAAM,QAAQ,KAAK,IAAI,kBAAkB,UAAU,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,OAAO,CAAC,CAAC;EAC5F,IAAI,QAAQ,OAAO,QAAQ,SAAS,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK;CAClG;CAEA,qBAAuC;EACnC,OAAO,KAAK,SAAS,OAAO;CAChC;CAEA,MAAe,sBAAwC;EACnD,IAAI,KAAK,SAAS,SAAS,GAAG,OAAO;EACrC,MAAM,OAAO,CAAC,GAAG,KAAK,QAAQ;EAC9B,KAAK,SAAS,MAAM;EACpB,KAAK,MAAM,CAAC,KAAK,SAAS,MAAM;GAC5B,MAAM,SAAS,KAAK,QAAQ,IAAI,GAAG,GAAG,QAAQ,KAAK,OAAO,IAAI,GAAG;GACjE,IAAI,CAAC,UAAU,CAAC,OAAO;GACvB,MAAM,IAAI,OAAO,KAAK,IAAI,MAAM,OAAO,MAAM,MAAM;GACnD,MAAM,SAAS,IAAI,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC,CAAC;GACtH,OAAO,WAAW,IAAI,EAAG,UAAU,OAAO,KAAK,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM;GAChF,MAAM,MAAM,MAAM;GAElB,MAAM,SAAS,MAAM,kBAAkB,MAAM;GAC7C,OAAO,OAAO;GAEd,qBAAqB,IAAI,MAAM,CAAC;EACpC;EACA,OAAO;CACX;CAEA,oBAAsC;EAClC,OAAO,KAAK,QAAQ,OAAO;CAC/B;CAEA,MAAe,qBAAuC;EAClD,MAAM,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,QAAQ,MAAM,MAAM,IAAI;EACzE,IAAI,KAAK,QAAQ,SAAS,KAAK,MAAM,WAAW,GAAG,OAAO;EAC1D,MAAM,OAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC;EACtC,KAAK,QAAQ,MAAM;EACnB,MAAM,QAAQ,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,WAAW,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;EACzF,OAAO;CACX;CAEA,MAAc,YAAY,KAAa,MAA6B;EAChE,MAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;EACjC,IAAI,CAAC,OAAO;EACZ,MAAM,SAAS,MAAM,MAAM,KAAK,UAAU,IAAI;EAC9C,IAAI,CAAC,QAAQ;EACb,MAAM,QAAQ,OAAO,aAAa;EAClC,IAAI;EACJ,IAAI;GACA,SAAS,MAAM,kBAAkB,KAAK;EAC1C,UAAU;GACN,MAAM,MAAM;GACZ,OAAO,MAAM;EACjB;EACA,MAAM,OAAO,IAAI,QAAQ,IAAI,GAAG,MAAM;EACtC,MAAM,OAAO;EACb,OAAO,MAAM,OAAO,OAAO,kBAAkB;GACzC,MAAM,CAAC,QAAQ,OAAO,MAAM,OAAO,QAAQ,EAAE,KAAK,EAAE;GACpD,MAAM,OAAO,OAAO,MAAM;GAE1B,IAAI,QAAQ,MAAM,MAAM,qBAAqB,IAAI,MAAM,CAAC;EAC5D;CACJ;CAEA,MAAM,YAA2B,CAAC;CAElC,eAAe,KAAmC;EAC9C,IAAI,OAAO,KAAK,UAAU,IAAI,GAAG;EACjC,IAAI,CAAC,MAAM;GAEP,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM;IAC7B,IAAI;KACA,OAAO,EAAE,aAAa,GAAG;IAC7B,QAAQ;KACJ,OAAO,EAAE,aAAa,GAAG;IAC7B;GACJ,CAAC;GACD,QAAQ,aAAa,MAAM,KAAK,UAAU,GAAG,GAAG,YAAY,GAAG;GAC/D,KAAK,UAAU,IAAI,KAAK,IAAI;GAC5B,KAAK,YAAY,KAAK,UAAU,OAAO,GAAG,CAAC;EAC/C;EACA,OAAO,KAAK,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;CAEA,MAAM,SAAS,KAAa,YAAsC;EAC9D,IAAI,KAAK,mBAAmB,IAAI,UAAU,GAAG,OAAO;EACpD,MAAM,QAAQ,KAAK,QAAQ,mBAAmB,UAAU;EACxD,IAAI,MAAM,WAAW,GAAG;GACpB,IAAI,KAAK,gBAAgB,MAAM,eAAe,QAAQ,KAAK,oDAAoD,IAAI,GAAG;GACtH,OAAO;EACX;EACA,MAAM,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;EACpD,MAAM,QAAQ,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI,WAAW,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EACvH,IAAI,KAAK,mBAAmB,IAAI,UAAU,GAAG,OAAO;EACpD,KAAK,MAAM,SAAS,OAAO;GACvB,MAAM,OAAO;IAAE;IAAO,QAAQ;GAAW;GACzC,KAAK,MAAM,KAAK,IAAI;GACpB,KAAK,MAAM,YAAY,KAAK,eAAe,SAAS,IAAI;EAC5D;EACA,KAAK,mBAAmB,IAAI,UAAU;EACtC,OAAO;CACX;CAEA,UAAyB;EACrB,KAAK,MAAM,SAAS,KAAK,OAAO,OAAO,GAAG,MAAM,OAAO,MAAM;EAC7D,KAAK,OAAO,MAAM;EAClB,KAAK,MAAM,SAAS,KAAK,OAAO,OAAO,GAAG;GACtC,KAAK,MAAM,SAAS,MAAM,OAAO,OAAO,GAAG,MAAM,MAAM;GACvD,MAAM,MAAM,QAAQ;EACxB;EACA,KAAK,OAAO,MAAM;EAClB,KAAK,QAAQ,MAAM;EACnB,KAAK,QAAQ,MAAM;EACnB,KAAK,SAAS,MAAM;EACpB,KAAK,cAAc,MAAM;EACzB,MAAM,QAAQ;CAClB;;CAGA,IAAY,KAAa,MAA2D;EAChF,IAAI;GACA,OAAO,KAAK,KAAK,OAAO,EAAE,OAAO;EACrC,QAAQ;GACJ,OAAO;EACX;CACJ;AACJ;;;;;;;;;;AC1PA,SAAgB,mBAAmB,MAAc,MAAc,MAAsB,QAAiC;CAClH,IAAI,KAAK,QAAQ;EACb,IAAI,KAAK,kBAAkB,cAAc,OAAO,MAAM,KAAK,KAAK,MAAM;EACtE,OAAQ,KAAK,OAAsB,KAAK;CAC5C;CACA,MAAM,OAAO,KAAK,QAAQ;CAC1B,IAAI,CAAC,QAAQ,OAAO;EAAC;EAAM;EAAG;EAAG;EAAG;EAAM;EAAG;EAAG;EAAG;CAAC;CAEpD,MAAM,OAAO,KAAK,OAAO;CACzB,MAAM,OAAO,OAAO,QAAQ,OAAO;CACnC,MAAM,OAAO,OAAO,SAAS,OAAO;CAEpC,MAAM,OAAO,SAAS,SAAS,KAAA,IAAY,KAAK;CAChD,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO;CACvC,MAAM,OAAO,OAAO,KAAK,MAAM,OAAO;CACtC,MAAM,OAAO,OAAO,QAAQ,IAAI,KAAK,OAAO,KAAK,SAAS;CAC1D,MAAM,OAAO,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAK,UAAU;CAC1D,IAAI,QAAQ,KAAK,QAAQ,GAAG,OAAO;EAAC;EAAM;EAAG,OAAO;EAAM;EAAG;EAAM,OAAO;EAAK;EAAG;EAAG;CAAC;CAEtF,IAAI,IAAY;CAChB,IAAI,SAAS,OACT,KAAK,KAAK,KAAK,IAAI,OAAO,MAAM,OAAO,IAAI;MACxC,IAAI,SAAS,WAAW;EAC3B,KAAK,OAAO;EAAM,KAAK,OAAO;CAClC,OAAO,IAAI,SAAS,QAChB,KAAK,KAAK;MAEV,KAAK,KAAK,KAAK,IAAI,OAAO,MAAM,OAAO,IAAI;CAE/C,MAAM;CAAM,MAAM;CAElB,IAAI,SAAS,QAAQ,OAAO;EAAC;EAAI;EAAG,OAAO;EAAM;EAAG;EAAI,OAAO;EAAK;EAAG;EAAG;CAAC;CAG3E,MAAM,SAAS,KAAK,UAAU;EAAE,GAAG;EAAG,GAAG;CAAE;CAC3C,MAAM,MAAM,OAAO,IAAI,KAAK;CAC5B,MAAM,MAAM,IAAI,OAAO,KAAK;CAC5B,MAAM,KAAK,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO;CAC1D,MAAM,KAAK,OAAO,MAAM,MAAM,OAAO,OAAO,MAAM,OAAO;CACzD,OAAO;EAAC;EAAI;EAAG;EAAI;EAAG;EAAI;EAAI;EAAG;EAAG;CAAC;AACzC;;;;AC/CA,SAAS,KAAK,IAAY,IAAY,GAA6B;CAC/D,MAAM,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM;CACnD,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AACxE;AAEA,SAAS,MAAM,QAAwC,IAA+B;CAClF,OAAO,OAAO,KAAK,GAAG,OAAO;EAAE,QAAQ,GAAG,MAAM,IAAI,KAAK,IAAI,GAAG,OAAO,SAAS,CAAC;EAAG,OAAO;GAAC,EAAE;GAAI,EAAE;GAAI,EAAE;GAAI,EAAE;EAAE;CAAE,EAAE;AAC1H;AAoBA,SAAgB,UAAU,GAAiB,QAAgB,SAAsB,QAAoC;CACjH,MAAM,MAAM;CACZ,MAAM,QAAQ,UAAU,QAAgB,OAAO,MAAM,GAAG,IAAI,KAAA;CAC5D,QAAQ,IAAI,MAAZ;EACI,KAAK,SAAS;GACV,MAAM,QAAQ,QAAQ,MAAM,GAAG;GAC/B,IAAI,CAAC,OAAO;IACR,QAAQ,IAAI,wBAAwB;IACpC,OAAO;GACX;GACA,MAAM,IAAI,mBAAmB,MAAM,OAAO,MAAM,QAAQ,KAAK;IAAE,MAAM,OAAO;IAAI,KAAK,OAAO;IAAI,OAAO,OAAO;IAAI,QAAQ,OAAO;GAAG,CAAC;GACrI,MAAM,MAAM,IAAI,OAAO;GACvB,MAAM,OAAO,QAAQ,SAAS,WAAW,QAAQ,UAAU,IAAI,QAAQ,MAAM,IAAI,UAAU;GAC3F,OAAO;IAAE,MAAM;IAAS,OAAO;IAAO,KAAK;KAAC,OAAO;KAAI,OAAO;KAAI,OAAO,KAAK,OAAO;KAAI,OAAO,KAAK,OAAO;IAAE;IAAG,QAAQ;KAAC,EAAE;KAAI,EAAE;KAAI,EAAE;KAAI,EAAE;KAAI,EAAE;KAAI,EAAE;IAAE;IAAG;GAAK;EACxK;EACA,KAAK,YAAY;GACb,IAAI,CAAC,QAAQ,OAAO;GACpB,MAAM,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,OAAO,KAAK,OAAO;GACxD,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI,IAAI,OAAO;GAEjC,MAAM,QAAQ,KAAK,IAAI,IAAI,iBAAiB,GAAG,KAAK,IAAI,OAAO,YAAY,GAAG,CAAC,CAAC;GAEhF,OAAO;IAAE,MAAM;IAAS,OADV,OAAO,QAAQ,IAAI,OAAO,GAAG,GAAG,KACf;IAAO,KAAK;KAAC,OAAO;KAAI,OAAO;KAAI;KAAG;IAAC;IAAG,KAAK;GAAU;EAC5F;EACA,KAAK,SAAS;GACV,MAAM,QAAQ,QAAQ,IAAI,GAAG;GAC7B,IAAI,CAAC,OAAO;IACR,QAAQ,IAAI,uBAAuB;IACnC,OAAO;GACX;GAGA,MAAM,IAAI,mBAAmB,MAAM,OAAO,MAAM,QAAQ,KAAK;IAAE,MAAM,OAAO;IAAI,KAAK,OAAO;IAAI,OAAO,OAAO;IAAI,QAAQ,OAAO;GAAG,CAAC;GACrI,MAAM,IAAS;IAAC,EAAE;IAAI,EAAE;IAAI,EAAE;IAAI,EAAE;IAAI,EAAE;IAAI,EAAE;GAAE;GAClD,IAAI,QAAQ,WAAW;IACnB,MAAM,QAAQ,OAAO,YAAY;IACjC,OAAO,UAAU,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,SAAS,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK;GAC3H;GACA,MAAM,MAAM,IAAI,OAAO;GACvB,MAAM,OAAO,QAAQ,SAAS,WAAW,QAAQ,UAAU,IAAI,QAAQ,MAAM,IAAI,UAAU;GAC3F,OAAO;IAAE,MAAM;IAAS,OAAO;IAAO,KAAK;KAAC,OAAO;KAAI,OAAO;KAAI,OAAO,KAAK,OAAO;KAAI,OAAO,KAAK,OAAO;IAAE;IAAG,QAAQ;IAAG;GAAK;EACrI;EACA,KAAK,SACD,OAAO;GAAE,MAAM;GAAS,OAAO;IAAC,IAAI,MAAM;IAAI,IAAI,MAAM;IAAI,IAAI,MAAM;IAAI,IAAI,MAAM;GAAE;EAAE;EAC5F,KAAK,mBACD,OAAO;GAAE,MAAM;GAAU,MAAM,KAAK,IAAI,MAAM,GAAG,IAAI,MAAM,GAAG,MAAM;GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,MAAM;GAAG,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK;EAAE;EACvJ,KAAK,kBAAkB;GAEnB,MAAM,QAAQ,IAAI,cAAc;GAChC,MAAM,OAAO,IAAI,MAAM,WAAW,IAAI,OAAO,SAAS,IAAI,QAAQ,CAAC;GACnE,OAAO;IAAE,MAAM;IAAS,QAAQ,KAAK,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,MAAM;IAAG,YAAY;IAAO,UAAU,QAAQ;IAAK,OAAO,MAAM,IAAI,QAAQ,IAAI;GAAE;EACvJ;EACA,KAAK,mBACD,OAAO;GAAE,MAAM;GAAU,QAAQ,KAAK,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,MAAM;GAAG,QAAQ,IAAI;GAAQ,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK;EAAE;EACvI,KAAK,UAAU;GAEX,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,OAAO;GAEhC,IAAI,CAAC,aAAa,GAAG,GAAG;GACxB,QAAQ,cAAc,GAAG;GACzB,MAAM,UAAU,IAAI,WAAW,KAAK,QAAQ,IAAI,SAAS,GAAG,GAAG,IAAI,KAAA;GACnE,IAAI,IAAI,WAAW,MAAM,CAAC,SAAS;IAC/B,QAAQ,IAAI,uBAAuB;IACnC,OAAO;GACX;GACA,OAAO;IACH,MAAM;IAAU,QAAQ,IAAI;IAAQ,UAAU,IAAI,YAAY,CAAC;IAAG,MAAM,QAAQ,OAAO,KAAK;IAC5F,KAAK;KAAC,OAAO;KAAI,OAAO;KAAI,OAAO,KAAK,OAAO;KAAI,OAAO,KAAK,OAAO;IAAE;IAAG,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC5G;EACJ;EACA,KAAK;EAAW,KAAK;EAAQ,KAAK;EAAU,KAAK;EAAS,KAAK,gBAC3D,OAAO;GAAE,MAAM;GAAc,MAAM;GAAK,KAAK;IAAC,OAAO;IAAI,OAAO;IAAI,OAAO,KAAK,OAAO;IAAI,OAAO,KAAK,OAAO;GAAE;EAAE;CAC1H;CACA,QAAQ,IAAI,IAAI,SAAS,WAAW,qBAAqB,QAAQ,IAAI,MAAM;CAC3E,OAAO;AACX;;AAGA,SAAgB,SAAS,GAAmB,SAAqC;CAC7E,MAAM,IAAI,EAAE,KAAK;CACjB,MAAM,IAAI,GAAG,SAAS,UAAU,EAAE,QAAQ;EAAC;EAAG;EAAG;EAAG;CAAC;CAErD,OAAO;EAAE,IAAI,EAAE,QAAQ,KAAK;EAAG,IAAI,EAAE,EAAE,QAAQ,KAAK;EAAI,OAAO,EAAE,OAAO;EAAG,QAAQ,EAAE;EAAQ,OAAO;GAAC,EAAE;GAAI,EAAE;GAAI,EAAE;GAAI,EAAE,MAAM,GAAG,WAAW;EAAE;CAAE;AACrJ;;;;ACjHA,IAAM,0BAAU,IAAI,IAAsC;AAC1D,IAAM,cAAc;AAEpB,SAAS,UAAU,OAAoB,QAA0C;CAC7E,MAAM,MAAM,GAAG,MAAM,IAAI;CACzB,IAAI,QAAQ,QAAQ,IAAI,GAAG;CAC3B,IAAI,UAAU,KAAA,GAAW;EACrB,IAAI;GACA,MAAM,SAAS,iBAAe,OAAO,MAAM;GAC3C,QAAQ,OAAO,KAAK,OAAO,OAAO,KAAK,MAAM,EAAE,IAAI,IAAI;EAC3D,QAAQ;GAEJ,OAAO;EACX;EACA,IAAI,QAAQ,QAAQ,aAAa,QAAQ,OAAO,QAAQ,KAAK,EAAE,KAAK,EAAE,KAAM;CAChF,OACI,QAAQ,OAAO,GAAG;CAEtB,QAAQ,IAAI,KAAK,KAAK;CACtB,OAAO;AACX;;AAGA,SAAgB,kBAAkB,OAAoB,QAAsG;CACxJ,MAAM,SAAS,OAAO,UAAU;CAChC,MAAM,WAAW,iBAAiB,MAAM;CACxC,IAAI,CAAC,OAAO,KAAK,KAAK,aAAa,KAAA,GAAW,OAAO,CAAC;CACtD,MAAM,MAAqB,CAAC;CAC5B,IAAI,WAAW,eACX,IAAI,KAAK;EACL,MAAM;EAAU,SAAS,GAAG,MAAM,YAAY;EAC9C,SAAS,iBAAiB,MAAM,kCAAkC,SAAS,6BAA6B,cAAc;CAC1H,CAAC;CAEL,MAAM,QAAQ,UAAU,OAAO,MAAM;CACrC,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,SAAS,kBAAmB,OAAO,YAAY,CAAC,CAA6C;CACnG,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,GACjC,IAAI,CAAC,MAAM,SAAS,IAAI,GACpB,IAAI,KAAK;EAAE,MAAM;EAAU,SAAS,UAAU;EAAQ,SAAS,iBAAiB,MAAM,aAAa,KAAK;CAAyE,CAAC;CAG1L,KAAK,MAAM,QAAQ,OACf,IAAI,EAAE,QAAQ,SACV,IAAI,KAAK;EAAE,MAAM;EAAU,SAAS,UAAU;EAAQ,SAAS,iBAAiB,MAAM,YAAY,KAAK;CAAoC,CAAC;CAGpJ,OAAO;AACX;;;AC9CA,IAAM,UAAU;AAEhB,SAAS,GAAG,GAAQ,GAA6B;CAC7C,MAAM,IAAI,EAAE,GAAG,IAAI,IAAI;CACvB,IAAI,EAAE,SAAS,QAAQ,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;CACjF,IAAI,EAAE,SAAS,QAAQ,OAAO,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE;CAC7H,OAAO,CACH,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,IAC/E,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,EACnF;AACJ;AAEA,SAAS,QAAQ,MAAmB,GAAkB;CAClD,MAAM,QAAQ,CAAC,CAAC;CAChB,MAAM,IAAI,SAAS,SAAS,IAAI;CAChC,MAAM,IAAS;EAAE;EAAM;EAAG,KAAK;EAAG;CAAM;CACxC,IAAI,OAAO,GAAG,GAAG,CAAC;CAClB,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EACzB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;EACrB,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;EACpE,OAAO;CACX;CACA,EAAE,MAAM,MAAM;CACd,OAAO;AACX;;AAGA,SAAS,IAAI,GAAQ,GAAmB;CACpC,MAAM,IAAI,EAAE,MAAM,SAAS;CAC3B,IAAI,KAAK,GAAG,OAAO;CACnB,IAAI,KAAK,EAAE,KAAK,OAAO;CACvB,IAAI,IAAI;CACR,OAAO,EAAE,MAAM,KAAK,GAAG;CACvB,MAAM,IAAI,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,MAAM;CACtC,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,MAAM;AACvD;;AAGA,SAAS,MAAM,GAAQ,IAAY,IAAsB;CACrD,MAAM,IAAI,EAAE;CACZ,IAAI,EAAE,SAAS,QAAQ,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;CAEzD,MAAM,SAAS,KAAe,MAAoC;EAC9D,MAAM,IAAI,IAAI,SAAS;EACvB,MAAM,OAAmB,CAAC,GAAG;EAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GACxB,MAAM,OAAO,KAAK,IAAI,IAAI,MAAgB,CAAC;GAC3C,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,MAAM,GAAG,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC;GAC1I,KAAK,KAAK,GAAG;EACjB;EACA,MAAM,OAAiB,CAAC,GAAG,QAAkB,CAAC;EAC9C,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,GAAG,EAAE;EAC5D,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,SAAS,IAAI,KAAK,GAAG,KAAK,GAAG,SAAS,EAAE;EACpG,OAAO,CAAC,MAAM,KAAK;CACvB;CACA,MAAM,CAAC,QAAQ,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC;CACzC,IAAI,MAAM,GAAG,OAAO;CACpB,OAAO,MAAM,MAAM,KAAK,EAAE,EAAE;AAChC;AAEA,SAAS,SAAS,MAAoD;CAClE,MAAM,MAA0C,CAAC;CACjD,IAAI,MAA+C;CACnD,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI;CACtC,MAAM,MAAM,KAAK;CACjB,KAAK,MAAM,KAAK,KAAK,OACjB,IAAI,MAAM,KAAK,MAAM;EACjB,IAAI,KAAK,IAAI;EAAM,IAAI,KAAK,IAAI;EAChC,MAAM;GAAE,MAAM,CAAC;GAAG,QAAQ;EAAM;EAChC,IAAI,KAAK,GAAG;CAChB,OAAO,IAAI,MAAM,KAAK,MAAM;EACxB,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;EAC9B,IAAK,KAAK,KAAK,QAAQ,QAAQ;GAAC;GAAG;GAAG;GAAI;EAAE,CAAC,CAAC;EAAG,IAAI;EAAI,IAAI;CACjE,OAAO,IAAI,MAAM,KAAK,MAAM;EACxB,MAAM,IAAI;GAAC;GAAG;GAAG,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;EAAE;EAAG,KAAK;EACnE,IAAK,KAAK,KAAK,QAAQ,QAAQ,CAAC,CAAC;EAAG,IAAI,EAAE;EAAI,IAAI,EAAE;CACxD,OAAO,IAAI,MAAM,KAAK,OAAO;EACzB,MAAM,IAAI;GAAC;GAAG;GAAG,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;GAAI,IAAI,IAAI;EAAE;EAAG,KAAK;EAC3F,IAAK,KAAK,KAAK,QAAQ,SAAS,CAAC,CAAC;EAAG,IAAI,EAAE;EAAI,IAAI,EAAE;CACzD,OAAO,IAAI,MAAM,KAAK,OAAO;EACzB,IAAI,KAAK;GACL,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,QAAQ,QAAQ;IAAC;IAAG;IAAG;IAAI;GAAE,CAAC,CAAC;GACvE,IAAI,SAAS;EACjB;EACA,IAAI;EAAI,IAAI;CAChB;CAEJ,OAAO,IAAI,QAAQ,MAAM,EAAE,KAAK,SAAS,CAAC;AAC9C;;AAGA,SAAgB,WAAW,MAAwB;CAC/C,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;CAClD,MAAM,MAAM,KAAK;CACjB,MAAM,MAAM,GAAW,MAAc;EACjC,QAAQ,KAAK,IAAI,IAAI;EACrB,KAAK;EAAG,KAAK;CACjB;CACA,KAAK,MAAM,KAAK,KAAK,OACjB,IAAI,MAAM,KAAK,MAAM;EACjB,GAAG,IAAI,EAAE;EACT,KAAK,KAAK,IAAI;EAAM,KAAK,KAAK,IAAI;CACtC,OAAO,IAAI,MAAM,KAAK,OAAO;EACzB,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI;EACtD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;CAC7D;CAEJ,GAAG,IAAI,EAAE;CACT,OAAO,OAAO;AAClB;;AAGA,SAAgB,YAAY,MAA0B;CAClD,MAAM,IAAI,IAAI,YAAY;CAC1B,MAAM,MAAM,KAAK;CACjB,IAAI,IAAI,GAAG,IAAI;CACf,MAAM,QAAQ,KAAK;CACnB,OAAO,IAAI,MAAM,QAAQ;EACrB,IAAI,MAAM,OAAO,KAAK,MAAM;GAAE;GAAK;EAAU;EAE7C,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;EAC1B,MAAM,OAAqC,CAAC;EAC5C,IAAI,SAAS;EACb,KAAK,KAAK,IAAI,MAAM,UAAU,MAAM,OAAO,KAAK,MAAM,KAAK;GACvD,MAAM,IAAI,MAAM;GAChB,IAAI,MAAM,KAAK,OAAO;IAAE,SAAS;IAAM;GAAU;GACjD,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI;GACtD,MAAM,IAAI,CAAC,GAAG,CAAC;GACf,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,GAAG,EAAE,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;GAC7D,IAAI,EAAE,EAAE,SAAS;GAAI,IAAI,EAAE,EAAE,SAAS;GACtC,KAAK,KAAK;IAAE;IAAG;GAAE,CAAC;EACtB;EACA,EAAE,OAAO,GAAG,CAAC;EACb,KAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;GACvC,MAAM,EAAE,GAAG,MAAM,KAAK;GACtB,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnC,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACpD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EACrD;EACA,IAAI,QAAQ,EAAE,MAAM;CACxB;CACA,OAAO,EAAE,MAAM;AACnB;;AAGA,SAAgB,SAAS,MAAyB;CAC9C,MAAM,KAAK,SAAS,IAAI;CACxB,OAAO,GAAG,SAAS,KAAK,GAAG,OAAO,MAAM,EAAE,MAAM;AACpD;;AAGA,SAAS,QAAQ,MAAa,GAAW,GAAW,GAAyB;CACzE,IAAI,MAAM,GAAG,QAAQ;CACrB,KAAK,MAAM,KAAK,MAAM;EAClB,MAAM,KAAK,KAAK,KAAK,MAAM,EAAE;EAC7B,MAAM;EACN,IAAI,MAAM,KAAK,MAAM,GAAG;EAExB,MAAM,IAAI,MAAM,GADL,IAAI,GAAG,IAAI,EACH,GADa,IAAI,GAAG,IAAI,EACpB,CAAE;EACzB,IAAI,CAAC,OAAO;GAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;GAAG,QAAQ;EAAM;EAClD,IAAI,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;OACrC,IAAI,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;OACtD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;CACrD;CACA,OAAO;AACX;AAEA,SAAgB,SAAS,MAAgB,OAAe,KAAuB;CAC3E,MAAM,KAAK,SAAS,IAAI;CACxB,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,IAAI,EAAE,KAAK,QAAQ,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;CAC9E,IAAI,SAAS,GAAG,OAAO;CACvB,MAAM,KAAK,QAAQ,OAAO,KAAK,MAAM;CACrC,MAAM,IAAI,IAAI,YAAY;CAC1B,IAAI,MAAM;CACV,IAAI,MAAM;CACV,KAAK,MAAM,KAAK,IAAI;EAChB,MAAM,MAAM,EAAE,KAAK,QAAQ,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC;EAChD,MAAM,MAAM,KAAK,KAAK,MAAM;EAC5B,MAAM;EACN,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK;EAC5B,MAAM,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK;CAChF;CACA,OAAO,MAAM,EAAE,MAAM,IAAI;EAAE,OAAO,IAAI,WAAW,CAAC;EAAG,QAAQ,IAAI,aAAa,CAAC;CAAE;AACrF;AAcA,SAAS,WAAW,GAAQ,GAA6B;CACrD,MAAM,IAAI,EAAE,GAAG,IAAI,IAAI;CACvB,IAAI,EAAE,SAAS,QAAQ,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;CACvD,IAAI,EAAE,SAAS,QAAQ,OAAO,CAAC,KAAK,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE,IAAI;CACvH,OAAO,CACH,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,KAAK,EAAE,MAC3E,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,KAAK,EAAE,IAC/E;AACJ;;AAGA,SAAgB,gBAAgB,MAA2B;CACvD,OAAO,SAAS,IAAI,EAAE,KAAK,MAAe;EACtC,MAAM,OAAO,EAAE,KAAK,QAAQ,MAAM,EAAE,MAAM,CAAC;EAC3C,MAAM,SAAS,KAAK,QAAQ,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC;EACjD,OAAO;GACH;GACA,QAAQ,EAAE;GACV,OAAO,GAAmB;IACtB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,IAAI,KAAK,KAAK,SAAS;IACpC,KAAK,MAAM,OAAO,MAAM;KACpB,IAAI,MAAM,IAAI,OAAO,GAAG;MAAE,IAAI;MAAK;KAAO;KAC1C,OAAO,IAAI;IACf;IACA,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG;IACxB,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;IACtB,IAAI,CAAC,IAAI,MAAM,WAAW,GAAG,CAAC;IAE9B,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI,MAAM;KAC3B,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC;KACvE,KAAK,EAAE,KAAK,EAAE;KAAI,KAAK,EAAE,KAAK,EAAE;IACpC;IACA,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK;IAChC,OAAO;KAAC;KAAG;KAAG,KAAK;KAAG,KAAK;IAAC;GAChC;GACA,UAAU,MAAM,IAAI,MAAM,QAAQ,MAAM,MAAM,IAAI,CAAC;EACvD;CACJ,CAAC,EAAE,QAAQ,MAAM,EAAE,SAAS,CAAC;AACjC;;AAGA,IAAM,aAAa;;AAGnB,SAAgB,QAAQ,IAAe,MAAwE;CAC3G,IAAI,QAAQ,GAAG,OAAO;CACtB,KAAK,MAAM,KAAK,IAAI;EAChB,SAAS,EAAE;EACX,IAAI,CAAC,EAAE,QAAQ,OAAO;CAC1B;CACA,MAAM,QAAQ,QAAQ,UAAU,MAAM;EAAE,QAAQ;EAAO,QAAQ;CAAK,GAAG,KAAK;CAC5E,OAAO,UAAU,OAAO,OAAO;EAAE;EAAO;EAAO;CAAK;AACxD;;AAGA,SAAgB,iBAAiB,GAAY,MAAgB,KAA+C;CACxG,OAAO,EAAE,SAAS,IAAI,QAAQ,QAAQ,UAAU,MAAM;EAAE,QAAQ,EAAE;EAAQ,QAAQ;CAAM,GAAG,IAAI,KAAK,KAAK,IAAI;AACjH;;AAGA,SAAgB,SAAS,GAAY,MAAgB,QAAgB,OAAmC;CACpG,MAAM,SAAS,KAAK,KAAK,MAAM,IAAI,KAAK;CACxC,MAAM,QAAQ,OAAO,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC;CAC9C,MAAM,OAA2B,CAAC;CAClC,IAAI,EAAE,QAAQ,IAAI,OAAO;CACzB,MAAM,eAAiB,SAAS,QAAS,QAAS,SAAS;CAC3D,IAAI,IAAI,GAAG,WAAW;CACtB,OAAO,WAAW,OAAO,MAAM,eAAe,IAAI,OAAO,QAAQ;EAC7D,IAAI,OAAO,MAAM,cAAc,KAAK,IAAI,cAAc,QAAQ,IAAI,MAAM;EACxE,YAAY,OAAO;EACnB,KAAK,IAAI,KAAK,OAAO;EACrB,IAAI,MAAM,GAAG;CACjB;CACA,IAAI,YAAY,OAAO,MAAM,cAAc;CAC3C,IAAI,UAAU,IAAI,MAAM;CACxB,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,SAAS,MAAM;EACxB,MAAM,MAAM,KAAK,IAAI,WAAW,EAAE,SAAS,CAAC;EAC5C,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;EACnC,KAAK;EACL,aAAa;EACb,IAAI,aAAa,MAAM;GACnB,KAAK,IAAI,KAAK,OAAO;GACrB,YAAY,OAAO;GACnB,UAAU,CAAC;EACf;CACJ;CAEA,IAAI,WAAW,aAAa,QAAQ,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC;CAC7E,OAAO;AACX;;AAGA,SAAgB,WAAW,IAAe,MAAgB,QAAgB,MAAe,KAAwD;CAC7I,MAAM,IAAI,IAAI,YAAY;CAC1B,IAAI,MAAM;CACV,KAAK,MAAM,KAAK,IACZ,KAAK,MAAM,CAAC,MAAM,OAAO,SAAS,GAAG,MAAM,QAAQ,iBAAiB,GAAG,MAAM,GAAG,CAAC,GAC7E,IAAI,KAAK,OAAO,YAAY,MAAM,EAAE,QAAQ,MAAM,IAAI,CAAC,KAAK;MACvD,IAAI,MAAM;EACX,MAAM,CAAC,GAAG,GAAG,IAAI,MAAM,EAAE,OAAO,IAAI;EACpC,MAAM,QAAQ,OAAO,EAAE,SAAS,aAAa,QAAc;EAC3D,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK;EACpD,MAAM;CACV;CAGR,OAAO,MAAM,EAAE,MAAM,IAAI;AAC7B;;;AC/SA,IAAsB,gBAAtB,MAAiF;CAC7E;CACA;CAEA,YAAY,OAAmB;EAC3B,KAAK,YAAY,KAAK,aAAa,KAAK;CAC5C;CAMA,IAAI,WAAc;EACd,OAAQ,KAAK,QAAQ,KAAK,gBAAgB;CAC9C;CAEA,YAAqB;EACjB,OAAO,KAAK,UAAU,UAAU,KAAK,KAAK,UAAU,QAAQ;CAChE;CAEA,eAA+C;EAC3C,OAAO;GAAE,OAAO,KAAK,UAAU;GAAO,KAAK,KAAK,UAAU;EAAI;CAClE;;;;;;CAOA,sBAAsB,MAAwB;EAC1C,OAAO;CACX;;CAGA,iBAA0B;EACtB,OAAO;CACX;;CAGA,mBAAmB,MAAS,SAAgC;EACxD,OAAO;CACX;CAEA,cAAc,MAA6B,CAE3C;AACJ;;;;;AAaA,SAAgB,YAAY,GAAuB;CAC/C,OAAO,EAAE,SAAS,IAAI,EAAE,SAAS;AACrC;;;;;;;AAQA,SAAgB,eAAe,IAAY,IAAY,KAAa,KAAa,KAAa,KAAa,GAAuB;CAC9H,IAAI,EAAE,UAAU,GAAG,OAAO;CAC1B,OAAO,sBAAsB,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK;AACxF;;;;;;AAOA,SAAgB,sBACZ,IAAY,IACZ,KAAa,KACb,KAAa,KACb,KAAa,QACb,OACM;CACN,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM;CAC3C,IAAI,UAAU,UAAU,OAAO,KAAK,GAAG,GAAG;CAI1C,OAAO,KAAK,OAAO,GAAG,OAAO,OAFf,MAAM,MAAM,MAAM,MACV,IAAI,IAAI,EACY,GAAG,GAAG,GAAG;AACvD;;;AC7FA,IAAM,SAAS,KAAK,KAAK;;;;;;AAOzB,IAAa,kBAAb,cAAqC,cAAwC;CACzE,aAAuB,OAA4C;EAC/D,OAAO,sBAAsB,KAAK;CACtC;CAEA,kBAAwC;EACpC,MAAM,IAAI,KAAK;EACf,MAAM,QAAQ,EAAE,SAAS;EACzB,OAAO;GACH,IAAI,EAAE;GAAG,IAAI,EAAE;GACf,WAAW,EAAE,QAAQ;GAAG,YAAY,EAAE,SAAS;GAC/C;GACA,aAAa,KAAK,IAAI,KAAK,KAAK;GAChC,YAAY,EAAE,cAAc;GAC5B,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC,CAAC;EAChD;CACJ;CAIA,aAAa,KAAyB;EAClC,MAAM,EAAE,IAAI,IAAI,WAAW,YAAY,UAAU;EACjD,IAAI,SAAS,GAAG,OAAO;EACvB,IAAI,CAAC,IAAI,aAAa,OAAO,SAAS,IAAI,MAAM,GAAG,IAAI,cAAc,GAAG;EACxE,MAAM,QAAQ,YAAY,IAAI,IAAI,WAAW,YAAY,CAAC;EAC1D,IAAI,SAAS,GAAG,OAAO;EAEvB,OAAO,GAAG,MAAM,GAAG,YAAY,IAAI,IAAI,YAAY,OAAO,aAAa,OAAO,CAAC;CACnF;;CAGA,YAAY,KAAgC;EACxC,IAAI,IAAI,QAAQ,GAAG,OAAO;EAC1B,OAAO,IAAI,cAAc,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,WAAW,IAAI,YAAY,CAAC,IAAI,QAAQ,GAAG;CACxG;CAIA,sBAA+B,KAAgC;EAC3D,IAAI,IAAI,aAAa,OAAO,IAAI,SAAS,IAAI,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,WAAW,IAAI,YAAY,CAAC,IAAI;EAC7G,OAAO,IAAI,SAAS,KAAK,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,cAAc,GAAG;CAC5E;CAEA,iBAAmC;EAC/B,OAAO;CACX;CAIA,mBAA4B,KAAiB,QAA+B;EACxE,IAAI,CAAC,IAAI,eAAe,IAAI,SAAS,GAAG,OAAO;EAC/C,MAAM,YAAY,IAAI,YAAY,QAAQ,aAAa,IAAI,aAAa;EACxE,IAAI,aAAa,KAAK,cAAc,GAAG,OAAO;EAC9C,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,WAAW,YAAY,CAAC;CAC/D;CAEA,cAAuB,KAAyB;EAC5C,MAAM,EAAE,IAAI,IAAI,WAAW,eAAe;EAC1C,OAAO;GAAE,MAAM,KAAK;GAAW,KAAK,KAAK;GAAY,OAAO,KAAK;GAAW,QAAQ,KAAK;EAAW;CACxG;AACJ;AAEA,SAAS,YAAY,IAAY,IAAY,IAAY,IAAY,WAA0B;CAC3F,MAAM,OAAO,KAAK;CAClB,OAAO,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,OAAO,UAAU,GADxB,KAAK,GAC4B,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,OAAO,UAAU,GAAG,KAAK,GAAG,GAAG;AACtH;;AAGA,SAAS,SAAS,KAAiD;CAC/D,MAAM,EAAE,IAAI,IAAI,WAAW,YAAY,YAAY,UAAU;CAC7D,MAAM,WAAW,aAAa;CAC9B,MAAM,WAAW,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI;CAC7C,MAAM,YAAY,QAAQ,IAAI,IAAI;CAClC,MAAM,KAAK,KAAK,YAAY,KAAK,IAAI,aAAa,MAAM,GAAG,KAAK,KAAK,aAAa,KAAK,IAAI,aAAa,MAAM;CAC9G,MAAM,KAAK,KAAK,YAAY,KAAK,IAAI,WAAW,MAAM,GAAG,KAAK,KAAK,aAAa,KAAK,IAAI,WAAW,MAAM;CAC1G,OAAO;EAAE,OAAO,GAAG,GAAG,GAAG;EAAM,KAAK,KAAK,UAAU,GAAG,WAAW,KAAK,SAAS,GAAG,UAAU,GAAG,GAAG,GAAG;CAAK;AAC9G;AAEA,SAAS,QAAQ,KAAyB;CACtC,MAAM,EAAE,OAAO,QAAQ,SAAS,GAAG;CACnC,OAAO,KAAK,MAAM,GAAG;AACzB;AAEA,SAAS,MAAM,KAAyB;CACpC,MAAM,EAAE,OAAO,QAAQ,SAAS,GAAG;CACnC,OAAO,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,MAAM,GAAG,IAAI;AACnD;;AAGA,SAAS,cAAc,KAAyB;CAC5C,MAAM,EAAE,IAAI,IAAI,WAAW,YAAY,YAAY,OAAO,UAAU;CACpE,MAAM,EAAE,OAAO,QAAQ,SAAS,GAAG;CACnC,MAAM,WAAW,aAAa;CAC9B,MAAM,SAAS,YAAY,OAAO,SAAS,aAAa;CACxD,MAAM,MAAM,KAAK,SAAS,KAAK,IAAI,aAAa,MAAM,GAAG,MAAM,KAAK,SAAS,KAAK,IAAI,aAAa,MAAM;CAIzG,OAAO,KAAK,MAAM,GAAG,IAAI,KAHb,KAAK,SAAS,KAAK,IAAI,WAAW,MAAM,EAGlB,GAH2B,KAAK,SAAS,KAAK,IAAI,WAAW,MAAM,EAG5D,KAAK,OAAO,GAAG,OAAO,KAF9C,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,EAEgC,GADtD,QAAQ,IAAI,IAAI,EACwD,GAAG,IAAI,GAAG,IAAI;AACjH;;;ACjHA,SAAS,aAAa,QAAmB,QAAgB,QAAyB;CAC9E,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,IAAI,OAAO,WAAW,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG;CAC9D,MAAM,IAAI,KAAK,IAAI,GAAG,MAAM;CAC5B,MAAM,QAAkB,CAAC;CACzB,MAAM,QAAQ,OAAO;CACrB,MAAM,OAAO,GAAY,MAAe;EACpC,MAAM,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE;EACnC,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;EACvC,OAAO,MAAM,IAAI;GAAE,IAAI,KAAK;GAAK,IAAI,KAAK;GAAK;EAAI,IAAI;GAAE,IAAI;GAAG,IAAI;GAAG,KAAK;EAAE;CAClF;CACA,IAAI,MAAM,GAAG;EACT,MAAM,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG;EAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK,MAAM,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG;CAChF,OAAO;EACH,MAAM,SAAS,SAAS,QAAQ,QAAQ;EACxC,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,KAAK;GAC9B,MAAM,OAAO,QAAQ,IAAI,IAAI,SAAS;GACtC,MAAM,OAAO,OAAO,IAAI;GACxB,MAAM,OAAO,QAAQ,IAAI,KAAK;GAC9B,IAAI,CAAC,UAAU,MAAM,GAAG;IACpB,MAAM,KAAK,KAAK,KAAK,EAAE,GAAG,KAAK,GAAG;IAClC;GACJ;GACA,IAAI,CAAC,UAAU,MAAM,QAAQ,GAAG;IAC5B,MAAM,KAAK,KAAK,KAAK,EAAE,GAAG,KAAK,GAAG;IAClC;GACJ;GACA,MAAM,MAAM,IAAI,MAAM,IAAI,GAAG,OAAO,IAAI,MAAM,IAAI;GAClD,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC;GACzE,MAAM,MAAM,KAAK,IAAI,IAAI,KAAK,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK;GAC7D,MAAM,OAAO,KAAK,IAAI,KAAK,KAAK,QAAQ,OAAO,KAAK,IAAI,KAAK,KAAK;GAClE,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3D,MAAM,KAAK,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM;EACtD;CACJ;CACA,IAAI,QAAQ,MAAM,KAAK,GAAG;CAC1B,OAAO,MAAM,KAAK,GAAG;AACzB;;;;;;AAOA,IAAa,eAAb,cAAkC,cAAkC;CAChE,aAAuB,OAAsC;EACzD,OAAO,mBAAmB,KAAK;CACnC;CAEA,kBAAqC;EACjC,MAAM,EAAE,QAAQ,QAAQ,WAAW,KAAK;EACxC,OAAO;GAAE;GAAQ;GAAQ;EAAO;CACpC;CAEA,aAAa,KAAsB;EAC/B,OAAO,aAAa,IAAI,QAAQ,IAAI,QAAQ,IAAI,MAAM;CAC1D;AACJ;;;;AC3DA,IAAa,eAAb,cAAkC,cAA6C;CAC3E,aAAuB,OAAsC;EACzD,OAAO,mBAAmB,KAAK;CACnC;CAEA,kBAAgD;EAC5C,OAAO,EAAE,MAAM,KAAK,UAAU,KAAK;CACvC;CAEA,aAAa,KAAiC;EAC1C,OAAO,aAAa,IAAI,IAAI;CAChC;AACJ;;;;;;;;ACEA,SAAS,SAAS,OAA2B,GAAe,SAAyC;CACjG,IAAI,EAAE,gBAAgB,GAAG;EACrB,MAAM,QAAQ,MAAM,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG;EACzE,MAAM,KAAK,GAAG;EACd,OAAO,MAAM,KAAK,GAAG;CACzB;CACA,MAAM,IAAI,MAAM;CAChB,MAAM,QAAkB,CAAC;CACzB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,MAAM,OAAO,MAAM;EACnB,IAAI,CAAC,QAAQ,CAAC,GAAG;GACb,MAAM,KAAK,GAAG,MAAM,WAAW,IAAI,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,IAAI;GACpE;EACJ;EACA,MAAM,OAAO,OAAO,IAAI,IAAI,KAAK,IAAI,OAAO,OAAO,IAAI,KAAK;EAC5D,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK;EACpD,MAAM,OAAO,KAAK,MAAM,KAAK,GAAG;EAChC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;EACpC,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK;EACpD,MAAM,OAAO,KAAK,MAAM,KAAK,GAAG;EAChC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;EACpC,MAAM,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,MAAM,MAAM,GAAG,CAAC;EAChE,MAAM,UAAU,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC;EAChD,MAAM,IAAI,KAAK,IAAI,EAAE,eAAe,SAAS,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC;EACrE,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,GAAG,MAAM,WAAW,IAAI,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,GAAG,KAAK,KAAK,MAAM,GAAG;EACxF,MAAM,KAAK,sBAAsB,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,EAAE,WAAW,CAAC;CAC/F;CACA,MAAM,KAAK,GAAG;CACd,OAAO,MAAM,KAAK,GAAG;AACzB;AAEA,IAAM,UAAU,OAA2B;CAAE,MAAM,EAAE,KAAK,EAAE;CAAI,KAAK,EAAE,KAAK,EAAE;CAAI,OAAO,EAAE,KAAK,EAAE;CAAI,QAAQ,EAAE,KAAK,EAAE;AAAG;;AAG1H,IAAa,kBAAb,cAAqC,cAAwC;CACzE,aAAuB,OAA4C;EAC/D,OAAO,sBAAsB,KAAK;CACtC;CAEA,kBAAwC;EACpC,MAAM,IAAI,KAAK;EACf,OAAO;GACH,IAAI,EAAE;GAAG,IAAI,EAAE;GAAG,IAAI,EAAE,QAAQ;GAAG,IAAI,EAAE,SAAS;GAClD,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,KAAK,CAAC;GAAG,OAAO;GAChD,cAAc,EAAE;GAAc,aAAa,EAAE;EACjD;CACJ;CAEA,aAAa,GAAuB;EAChC,MAAM,OAAQ,IAAI,KAAK,KAAM,EAAE;EAC/B,MAAM,QAA4B,CAAC;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,KAAK;GAC9B,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI;GAC7B,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;EACrE;EACA,OAAO,SAAS,OAAO,SAAS,IAAI;CACxC;CAEA,cAAuB,GAAuB;EAC1C,OAAO,OAAO,CAAC;CACnB;AACJ;;AAGA,IAAa,mBAAb,cAAsC,cAAyC;CAC3E,aAAuB,OAA8C;EACjE,OAAO,uBAAuB,KAAK;CACvC;CAEA,kBAAwC;EACpC,MAAM,IAAI,KAAK;EACf,OAAO;GACH,IAAI,EAAE;GAAG,IAAI,EAAE;GAAG,IAAI,EAAE,QAAQ;GAAG,IAAI,EAAE,SAAS;GAClD,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,KAAK,CAAC;GAAG,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,KAAK,CAAC;GAChF,cAAc,EAAE;GAAc,aAAa,EAAE;EACjD;CACJ;CAEA,aAAa,GAAuB;EAChC,MAAM,OAAO,KAAK,KAAK,EAAE;EACzB,MAAM,QAA4B,CAAC;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK;GAClC,MAAM,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI;GAC7B,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;GAC9B,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;EAC7E;EACA,OAAO,SAAS,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC;CAChD;CAEA,cAAuB,GAAuB;EAC1C,OAAO,OAAO,CAAC;CACnB;AACJ;;;;ACrGA,SAAS,UAAU,GAAW,GAAW,GAAW,GAAW,IAAgB,IAAgB,IAAgB,IAAwB;CACnI,MAAM,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE;CAC/F,OAAO;EACH,KAAK,IAAI,IAAI,GAAG;EAChB,KAAK,IAAI,IAAI,GAAG;EAChB,eAAe,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE;EACpC,KAAK,EAAE,GAAG,IAAI;EACd,eAAe,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;EACrC,KAAK,IAAI,IAAI,GAAG;EAChB,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;EACpC,KAAK,EAAE,GAAG,IAAI;EACd,eAAe,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;EACnC;CACJ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC9B;AAEA,IAAM,aAAa,GAAW,GAAW,GAAW,MAAc,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;;AAGlH,IAAa,eAAb,cAAkC,cAAkC;CAChE,aAAuB,OAAsC;EACzD,OAAO,mBAAmB,KAAK;CACnC;CAEA,kBAAqC;EACjC,MAAM,IAAI,KAAK;EACf,MAAM,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS;EACvD,MAAM,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS;EAC3D,MAAM,SAA+B,gBAAgB,QAAQ,EAAE,YAAY;EAC3E,MAAM,QAA6B,eAAe,QAAQ,EAAE,WAAW;EACvE,MAAM,KAAiB;GAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,OAAO;GAAG,OAAO,MAAM;EAAQ;EACnF,MAAM,KAAiB;GAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,QAAQ;GAAG,OAAO,MAAM;EAAS;EACrF,MAAM,KAAiB;GAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,WAAW;GAAG,OAAO,MAAM;EAAY;EAC3F,MAAM,KAAiB;GAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,UAAU;GAAG,OAAO,MAAM;EAAW;EACzF,MAAM,QAAQ,YAAY,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,IAAI,EAAE;EAC3D,GAAG,UAAU;EAAO,GAAG,UAAU;EAAO,GAAG,UAAU;EAAO,GAAG,UAAU;EAEzE,OAAO;GAAE;GAAM;GAAK;GAAO;GAAQ;GAAI;GAAI;GAAI;GAAI,QADpC,gBAAgB,OAAO;IAAE,SAAS,GAAG;IAAQ,UAAU,GAAG;IAAQ,aAAa,GAAG;IAAQ,YAAY,GAAG;GAAO,CAC5E;EAAO;CAC9D;CAEA,aAAa,KAAsB;EAC/B,MAAM,EAAE,MAAM,KAAK,OAAO,QAAQ,IAAI,IAAI,IAAI,IAAI,WAAW;EAC7D,OAAO,SAAS,UAAU,MAAM,KAAK,OAAO,MAAM,IAAI,UAAU,MAAM,KAAK,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE;CAC5G;CAEA,iBAAmC;EAC/B,OAAO;CACX;CAIA,mBAA4B,KAAc,QAA+B;EACrE,MAAM,OAAO,IAAI,OAAO,QAAQ,MAAM,IAAI,MAAM;EAChD,MAAM,QAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,SAAS;EACxD,MAAM,IAAI,QAAQ,MAAM,IAAI,SAAS;EACrC,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO;EAC7B,MAAM,KAAiB;GAAE,GAAG,IAAI;GAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,MAAM;EAAE;EAChF,MAAM,KAAiB;GAAE,GAAG,IAAI;GAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,MAAM;EAAE;EAChF,MAAM,KAAiB;GAAE,GAAG,IAAI;GAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,MAAM;EAAE;EAChF,MAAM,KAAiB;GAAE,GAAG,IAAI;GAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,MAAM;EAAE;EAChF,MAAM,QAAQ,YAAY,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE;EAC9C,GAAG,UAAU;EAAO,GAAG,UAAU;EAAO,GAAG,UAAU;EAAO,GAAG,UAAU;EACzE,IAAI,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,GAAG,WAAW,KAAK,GAAG,WAAW,GAAG,OAAO,UAAU,MAAM,KAAK,OAAO,MAAM;EACvH,OAAO,UAAU,MAAM,KAAK,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE;CAC7D;CAEA,cAAuB,KAAsB;EACzC,OAAO;GAAE,MAAM,IAAI;GAAM,KAAK,IAAI;GAAK,OAAO,IAAI;GAAO,QAAQ,IAAI;EAAO;CAChF;AACJ;;AAGA,SAAS,YAAY,GAAW,GAAW,IAAgB,IAAgB,IAAgB,IAAwB;CAC/G,MAAM,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE,GAAG,MAAM,YAAY,EAAE;CAC/F,MAAM,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI;CAC3D,MAAM,SAAS,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI;CAC9D,MAAM,OAAO,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI;CAC5D,MAAM,QAAQ,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI;CAC7D,OAAO,KAAK,IAAI,KAAK,QAAQ,MAAM,KAAK;AAC5C;;;;ACpFA,SAAS,MAAM,GAAgB,IAAY,IAAY,IAAY,IAAY,KAAa,OAAgB,OAAgB,IAAY,IAAY;CAChJ,IAAI,OAAO,KAAK,OAAO,GAAG;EACtB,EAAE,OAAO,IAAI,EAAE;EACf;CACJ;CACA,KAAK,KAAK,IAAI,EAAE;CAChB,KAAK,KAAK,IAAI,EAAE;CAChB,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG;CACzC,MAAM,MAAM,KAAK,MAAM,GAAG,MAAM,KAAK,MAAM;CAC3C,MAAM,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;CAC/C,MAAM,MAAO,KAAK,MAAO,KAAK,MAAO,KAAK,MAAO,KAAK;CACtD,IAAI,MAAM,GAAG;EACT,MAAM,KAAK,KAAK,GAAG;EACnB,MAAM,KAAK,KAAK,GAAG;CACvB;CACA,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;CACnE,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;CAC/C,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC;CACxC,IAAI,UAAU,OAAO,IAAI,CAAC;CAC1B,MAAM,MAAO,IAAI,KAAK,KAAM,IAAI,MAAO,CAAC,IAAI,KAAK,KAAM;CACvD,MAAM,KAAK,IAAI,MAAM,IAAI,OAAO,KAAK,MAAM,GAAG,KAAK,IAAI,MAAM,IAAI,OAAO,KAAK,MAAM;CACnF,MAAM,OAAO,IAAY,IAAY,IAAY,OAAe,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE;CAC/G,MAAM,KAAK,IAAI,GAAG,IAAI,KAAK,OAAO,KAAK,KAAK,OAAO,EAAE;CACrD,IAAI,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,KAAK,OAAO,EAAE;CACjF,IAAI,CAAC,SAAS,KAAK,GAAG,MAAM,IAAI,KAAK;MAChC,IAAI,SAAS,KAAK,GAAG,MAAM,IAAI,KAAK;CACzC,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,KAAK,KAAK,IAAI;CACvD,MAAM,MAAM,KAAK;CACjB,MAAM,QAAS,IAAI,IAAK,KAAK,IAAI,MAAM,CAAC;CACxC,MAAM,MAAM,MAAc,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;CAC7H,MAAM,OAAO,MAAc,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;CACtH,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;EACnC,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE;EACrF,EAAE,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,EAAE;CAClI;AACJ;AAEA,SAAgB,aAAa,GAAqB;CAC9C,MAAM,IAAI,IAAI,YAAY;CAC1B,MAAM,SAAS,EAAE,MAAM,kDAAkD,KAAK,CAAC;CAC/E,IAAI,IAAI;CACR,IAAI,MAAM;CACV,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK;CAC/B,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;CACrC,IAAI,OAAO;CACX,MAAM,YAAY,OAAO,OAAO,IAAI;CACpC,MAAM,aAAa,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,OAAO,EAAE;CAClE,OAAO,IAAI,OAAO,QAAQ;EACtB,IAAI,WAAW,KAAK,OAAO,EAAE,GAAG,MAAM,OAAO;EAC7C,MAAM,MAAM,QAAQ,IAAI,YAAY;EACpC,MAAM,IAAI,IAAI,YAAY;EAC1B,MAAM,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI;EACvC,QAAQ,GAAR;GACI,KAAK;IACD,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAC7B,EAAE,OAAO,GAAG,CAAC;IACb,KAAK;IAAG,KAAK;IACb,MAAM,MAAM,MAAM;IAClB;GAEJ,KAAK;IAAK,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAAG,EAAE,OAAO,GAAG,CAAC;IAAG;GAC1D,KAAK;IAAK,KAAK,MAAM,IAAI,KAAK,IAAI;IAAG,EAAE,OAAO,GAAG,CAAC;IAAG;GACrD,KAAK;IAAK,KAAK,MAAM,IAAI,KAAK,IAAI;IAAG,EAAE,OAAO,GAAG,CAAC;IAAG;GACrD,KAAK,KAAK;IACN,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI;IACvE,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAC7B,EAAE,QAAQ,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;IAC9B,MAAM;IAAI,MAAM;IAChB;GACJ;GACA,KAAK,KAAK;IACN,MAAM,IAAI,SAAS,OAAO,SAAS;IACnC,MAAM,KAAK,IAAI,IAAI,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,IAAI,MAAM;IACvD,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI;IACrC,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAC7B,EAAE,QAAQ,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;IAC9B,MAAM;IAAI,MAAM;IAChB;GACJ;GACA,KAAK;IACD,MAAM,KAAK,IAAI;IAAG,MAAM,KAAK,IAAI;IACjC,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAC7B,EAAE,OAAO,KAAK,KAAK,GAAG,CAAC;IACvB;GAEJ,KAAK,KAAK;IACN,MAAM,IAAI,SAAS,OAAO,SAAS;IACnC,MAAM,IAAI,IAAI,IAAI,MAAM;IAAG,MAAM,IAAI,IAAI,IAAI,MAAM;IACnD,IAAI,KAAK,IAAI;IAAG,IAAI,KAAK,IAAI;IAC7B,EAAE,OAAO,KAAK,KAAK,GAAG,CAAC;IACvB;GACJ;GACA,KAAK,KAAK;IACN,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAO,IAAI,IAAI,KAAK,KAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ,IAAI,MAAM;IACpG,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI;IACrC,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,OAAO,OAAO,IAAI,EAAE;IAChD,IAAI;IAAI,IAAI;IACZ;GACJ;GACA,KAAK;IAAK,EAAE,MAAM;IAAG,IAAI;IAAI,IAAI;IAAI;GACrC,SAAS;EACb;EACA,OAAO;EACP,IAAI,MAAM,OAAO,KAAK,GAAG,MAAM;CACnC;CACA,OAAO,EAAE,MAAM;AACnB;;;AC9FA,SAAS,cAAc,OAAY,OAAe,QAAqB;CACnE,MAAM,kBAAkB,qBAAqB,OAAgB,OAAO,MAAM;CAC1E,MAAM,EAAE,GAAG,GAAG,UAAU,sBAAsB,iBAA0B,OAAO,MAAM;CACrF,OAAO;EAAE,GAAG,wBAAwB,eAAwB;EAAG;EAAG,GAAG,CAAC;EAAG;CAAM;AACnF;AAEA,IAAM,QAAQ,MAA2B,KAAK,OAAO,IAAI,CAAC;AAE1D,SAAS,cAAc,GAAa,GAA+D;CAC/F,MAAM,MAAM,IAAI,aAAa,EAAE,OAAO,MAAM;CAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;EACpC,MAAM,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI;EACxC,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;EACjC,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;CACzC;CACA,OAAO;EAAE,GAAG;EAAG,QAAQ;CAAa;AACxC;;AAGA,SAAS,eAAe,MAAW,GAAuB;CACtD,MAAM,WAAW,KAAK,YAAY,GAAG,QAAQ,KAAK,SAAS;CAC3D,IAAI,aAAa,KAAK,UAAU,GAAG,OAAO;CAC1C,MAAM,QAAQ,KAAK,SAAS;EAAE,GAAG;EAAG,GAAG;CAAE;CACzC,MAAM,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK,SAAS,KAAK;CAC1D,MAAM,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK,UAAU,KAAK;CAC3D,MAAM,IAAK,WAAW,KAAK,KAAM,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI;CAEjF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI;CACjC,OAAO,cAAc,GAAG;EAAC;EAAG;EAAI;EAAG;EAAG,KAAK,IAAI,KAAK,IAAI;EAAI,KAAK,KAAK,KAAK,IAAI;CAAE,CAAC;AACtF;AAUA,IAAM,UAA2C;CAAE,MAAM;CAAQ,OAAO;CAAS,QAAQ;CAAU,SAAS;CAAW,OAAO;CAAQ,KAAK;AAAQ;;;;AAKnJ,SAAgB,OAAO,OAAY,SAA+D;CAC9F,MAAM,IAAI,mBAAmB,cAAc,OAAO,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,CAAU;CAG/F,MAAM,SAAS,EAAE,QAAQ,OAAO,aAAa,aAAa,EAAE,IAAI,CAAC,IAAI,KAAA;CACrE,MAAM,UAAU,EAAE,aAAa;CAC/B,MAAM,OAAiB;EACnB,MAAM,CAAC;GACH,MAAM,EAAE;GAAM,QAAQ,EAAE;GAAY,MAAM,UAAU,MAAM,EAAE;GAAU,QAAQ,EAAE;GAChF,QAAQ,EAAE,cAAc,YAAY,EAAE,cAAc;GAAW,eAAe,EAAE;GAChF,YAAY,EAAE,mBAAmB,cAAc,cAAc,EAAE,mBAAmB,iBAAiB,gBAAgB,KAAA;EACvH,CAAC;EACD,OAAO,QAAM,EAAE,cAAc;EAC7B,eAAe,EAAE;EACjB,MAAM,EAAE,QAAQ,EAAE,QAAQ;EAC1B,OAAO,EAAE;EACT,QAAQ,EAAE;EACV,YAAY,EAAE;EACd,UAAU,UAAU,YAAY,KAAA;EAChC,aAAa,EAAE;EACf,MAAM;CACV;CACA,IAAI,QAAQ,OAAO;EAAE;EAAM,WAAW;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAAG,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAAE;CACpF,MAAM,CAAC,IAAI,MAAM,QAAQ,IAAI;CAC7B,MAAM,QAAQ,kBAAkB,EAAE,KAAK;CACvC,MAAM,WAAW,EAAE,QAAQ,KAAK,EAAE,SAAS;CAC3C,MAAM,KAAK,WAAW,EAAE,QAAQ,IAAI,KAAK,WAAW,EAAE,SAAS;CAC/D,MAAM,KAAK,CAAC,YAAY,MAAM,MAAM,IAAI,EAAE,IAAI,MAAM,KAAK,KAAK,KAAK,EAAE;CACrE,MAAM,KAAK,CAAC,YAAY,MAAM,MAAM,IAAI,EAAE,IAAI,MAAM,KAAK,KAAK,KAAK,EAAE;CACrE,IAAI,IAAS;EAAC;EAAG;EAAG;EAAG;EAAG;EAAI;CAAE;CAChC,KAAK,EAAE,YAAY,OAAO,MAAM,EAAE,SAAS,OAAO,GAAG;EACjD,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK;EAC9D,MAAM,KAAM,EAAE,YAAY,KAAK,KAAK,KAAM,KAAK,IAAI,EAAE,SAAS;EAC9D,MAAM,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI;EAE9C,IAAI;GAAC;GAAG;GAAI,CAAC;GAAI;GAAG,KAAK,KAAK,KAAK,MAAM,MAAM,KAAK;GAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK;EAAG;CAChG;CACA,OAAO;EAAE;EAAM,WAAW;EAAG,MAAM,CAAC,IAAI,EAAE;CAAE;AAChD;AAyBA,SAAS,MAAM,KAAgC,MAA4B;CACvE,IAAI,CAAC,KAAK,OAAO;CACjB,OAAO,eAAe,MAAM,aAAa,GAAG,CAAC;AACjD;AAEA,SAAS,YAAY,OAAoD,OAAsB;CAC3F,MAAM,QAAQ,IAAI,MAAM,KAAK;CAC7B,MAAM,OAAO,MAAM,WAAkB,MAAM,MAAM;CACjD,MAAM,OAAO,MAAM,MAAM,aAAa,GAAG,GAAG,IAAI;CAChD,MAAM,QAAQ,MAAM,UAAU;CAC9B,MAAM,QAAQ,QAAQ,MAAM,aAAa,IAAI;CAC7C,MAAM,OAAO,QAAQ,QAAQ,SAAS,MAAM,MAAM,OAAO,MAAM,GAAG,IAAI;CACtE,IAAI,SAAS;CAEb,MAAM,OAAO,iBAAiB,kBAAkB,MAAM,YAAY,GAAG,IAAI;CACzE,IAAI,QAAQ,MAAM;EACd,MAAM,UAAU,MAAM,MAAM,IAAI;EAChC,SAAS,WAAW,QAAQ,SAAS,SAAS,MAAM,OAAO,MAAM,GAAG,IAAI;CAC5E;CACA,MAAM,cAAc,MAAM,sBAAsB,GAAG;CACnD,MAAM,WAAW,eAAe,OAAO,MAAM,aAAa,IAAI,IAAK,QAAQ,OAAO;CAClF,MAAM,IAAI,MAAM,cAAc,GAAG;CACjC,MAAM,SAAS,MAAM,eAAe,KAAK,MAAc,MAAM,MAAM,mBAAmB,KAAK,CAAC,GAAG,IAAI,IAAI,KAAA;CACvG,OAAO;EAAE;EAAM;EAAQ;EAAU,QAAQ,IAAI;GAAC,EAAE;GAAM,EAAE;GAAK,EAAE;GAAO,EAAE;EAAM,IAAI;EAAM;EAAQ,SAAS,CAAC,CAAC;CAAM;AACrH;;AAGA,SAAS,UAAU,OAAsB;CACrC,MAAM,QAAQ,IAAI,aAAa,KAAc;CAC7C,MAAM,OAAO,MAAM;CACnB,MAAM,MAAM,aAAa,MAAM,aAAa,MAAM,QAAQ,CAAC;CAC3D,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,KAAK,gBAAgB,WAAW,GAAG;CAE5D,MAAM,UAAU,cAAc,KAAK;EAAC;EAAG;EAAG;EAAG;EAAG,EADnC,MAAM,KAAK,MAAM;EACsB,EADX,MAAM,KAAK,MAAM;CACJ,CAAC;CACvD,MAAM,OAAO,eAAe;EAAE,GAAG;EAAM,GAAG;EAAG,GAAG;CAAE,GAAG,OAAO;CAC5D,MAAM,QAAQ,MAAM,UAAU,IAAI,MAAM,aAAa,IAAI;CACzD,MAAM,OAAO,QAAQ,SAAS,MAAM,MAAM,OAAO,MAAM,GAAG,IAAI;CAC9D,OAAO;EAAE;EAAM,QAAQ;EAAM,UAAU,QAAQ,OAAO;EAAM,QAAQ;EAAM,SAAS,CAAC,CAAC;CAAM;AAC/F;AAEA,IAAM,YAAY,UAAoB;CAClC,MAAM,MAAW;EAAE,GAAG;EAAO,GAAG,KAAK,MAAM,CAAC;CAAE;CAC9C,IAAI,MAAM,QAAQ,MAAM,IAAI,GAAG;EAC3B,IAAI,OAAO,MAAM,KAAK,KAAK,MAAW;GAClC,QAAQ,EAAE,MAAV;IACI,KAAK;IAAK,KAAK;IAAK,KAAK;IAAK,KAAK;IAAK,KAAK;IAAK,KAAK;IAAK,KAAK;IAAK,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,GAAG,CAAC,EAAE;IAAE;IACvG,KAAK;IAAK,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,IAAI,CAAC,EAAE;KAAI,IAAI,CAAC,EAAE;KAAI,GAAG,CAAC,EAAE;IAAE;IACjE,KAAK;IAAK,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,IAAI,CAAC,EAAE;KAAI,GAAG,CAAC,EAAE;IAAE;IACtD,KAAK;IAAK,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,IAAI,CAAC,EAAE;KAAI,GAAG,CAAC,EAAE;IAAE;IACtD,KAAK;IAAK,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,GAAG,CAAC,EAAE;KAAG,OAAO,EAAE,UAAU,IAAI,IAAI;IAAE;IACzE,SAAS,OAAO;GACpB;EACJ,CAAC;EACD,IAAI,MAAM,cAAc;GACpB,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM;GAC7B,IAAI,eAAe;IAAC;IAAG,CAAC;IAAG;IAAI,CAAC;GAAE;EACtC;CACJ;CACA,OAAO;AACX;;AAGA,SAAgB,QAAQ,IAAmD;CACvE,MAAM,IAAI,GAAG;CACb,QAAQ,GAAG,MAAX;EACI,KAAK,QAAQ,OAAO,YAAY,cAAc,cAAc,GAAG,EAAE,SAAS,GAAG,EAAE,UAAU,CAAC,CAAC;EAC3F,KAAK,WAAW;GACZ,MAAM,IAAI,cAAc,GAAG,EAAE,SAAS,GAAG,EAAE,UAAU,CAAC;GACtD,IAAI,EAAE,cAAc,MAAM,EAAE,aAAa,CAAC,EAAE;GAC5C,IAAI,EAAE,SAAS,MAAM,EAAE,QAAQ,CAAC,EAAE;GAClC,OAAO,YAAY,iBAAiB,CAAC;EACzC;EACA,KAAK,WAAW,OAAO,YAAY,iBAAiB,cAAc,GAAG,EAAE,SAAS,GAAG,EAAE,UAAU,CAAC,CAAC;EACjG,KAAK,YAAY,OAAO,YAAY,kBAAkB,cAAc,GAAG,EAAE,SAAS,GAAG,EAAE,UAAU,CAAC,CAAC;EACnG,KAAK,QAAQ;GACT,MAAM,SAAS,EAAE,SAAS,EAAE,OAAO,KAAK,OAAiC;IAAE,GAAG,EAAE;IAAG,GAAG,CAAC,EAAE;GAAE,EAAE,IAAI,EAAE;GACnG,OAAO,YAAY,cAAc;IAAE,GAAG;IAAG,GAAG,KAAK,EAAE,CAAC;IAAG;GAAO,CAAC;EACnE;EACA,KAAK,QAAQ,OAAO,UAAU,SAAS,CAAC,CAAC;CAC7C;CACA,OAAO;AACX;;;;;;;;ACzLA,SAAgB,kBAAkB,QAA0B,UAAmB,IAAuC;CAClH,IAAI,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,UAAU,GAAG,OAAO;CAClE,MAAM,OAAO,kBAAkB,OAAO,IAAI;CAC1C,MAAM,UAAU,OAAO,SAAS;CAChC,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,UAAU,OAAO;CACvD,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,UAAU,OAAO;CACvD,MAAM,SAAS,KAAK,MAAM,IAAI,EAAE;CAChC,IAAI,SAAS,KAAM,OAAO;CAC1B,OAAO;EACH,OAAQ,KAAK,MAAM,IAAI,EAAE,IAAI,MAAO,KAAK;EACzC;EACA,OAAO,2BAA2B,OAAO,SAAS;EAClD,SAAS,OAAO;CACpB;AACJ;;;;AC5BA,IAAM,SAAS;AACf,IAAM,gBAAgB,KAAK,MAAM,GAAG,MAAM;AAC1C,IAAM,aAAa,SAAS;AAC5B,IAAM,aAAa,IAAI;;AAGvB,IAAM,gBAAgB;;AAGtB,SAAgB,gBAAgB,QAA+B;CAC3D,OAAO,WAAW,WAAW,WAAW,cAAc,WAAW;AACrE;;;;;;AAOA,SAAgB,YAAY,QAAsB,MAAc,QAAwB;CACpF,OAAO,gBAAgB,MAAM,IAAI,KAAK,IAAI,MAAM,UAAU,IAAI,OAAO,IAAI;AAC7E;;AAGA,SAAgB,cAAc,QAAsB,MAAc,QAAiC;CAC/F,MAAM,OAAO,OAAO;CACpB,QAAQ,QAAR;EACI,KAAK,OACD,OAAO;EACX,KAAK,YACD,OAAO;GAAC;GAAG;GAAG,CAAC;GAAM,OAAO;GAAQ,CAAC;GAAM,CAAC,OAAO;EAAM;EAC7D,KAAK,WACD,OAAO;GAAC;GAAG;GAAG,CAAC;GAAM,OAAO;GAAQ,CAAC,QAAQ,IAAI;GAAgB;GAAG,CAAC;GAAM,CAAC,OAAO;EAAM;EAC7F,KAAK,SACD,OAAO,QAAQ,MAAM,MAAM;EAC/B,KAAK,OACD,OAAO;GAAC,CAAC;GAAM,CAAC;GAAM;GAAM,CAAC;GAAM;GAAM;GAAM,CAAC;GAAM;EAAI;EAC9D,KAAK,WACD,OAAO;GAAC;GAAM;GAAG;GAAG;GAAM,CAAC;GAAM;GAAG;GAAG,CAAC;EAAI;EAChD,KAAK,OACD,OAAO;GAAC,CAAC,SAAS;GAAG,CAAC;GAAM,SAAS;GAAG,CAAC;GAAM,SAAS;GAAG;GAAM,CAAC,SAAS;GAAG;EAAI;CAC1F;AACJ;AAIA,SAAS,QAAQ,MAAc,QAA0B;CACrD,MAAM,SAAS,OAAO;CACtB,MAAM,SAAS,CAAC,OAAO,SAAS;CAChC,MAAM,SAAS,SAAS,SAAS;CACjC,IAAI,UAAU,GAAG,OAAO;EAAC;EAAG;EAAG,CAAC;EAAM;EAAQ,CAAC;EAAM,CAAC;CAAM;CAC5D,MAAM,SAAS,CAAC,SAAS;CACzB,OAAO;EAAC;EAAG;EAAG,CAAC;EAAM;EAAQ;EAAQ;EAAQ;EAAQ;EAAG;EAAQ,CAAC;EAAQ,CAAC;EAAM,CAAC;CAAM;AAC3F;;;;AClBA,SAAgB,WAAW,IAAoB,MAAgB,OAAe,MAAkC;CAC5G,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM;CAC1B,MAAM,QAAQ,GAAG,YAAY,GAAG,KAAK,MAAM,GAAG,UAAU,GAAG;CAC3D,MAAM,MAAW,SAAS,GAAG,MAAM,eAAe,GAAG,IAAI,SAAU;CACnE,MAAM,UAAU,UAAU,OAAO,QAAQ;CACzC,IAAI,CAAC,UAAU,CAAC,SAAS,OAAO;EAAE;EAAK,MAAM,CAAC;CAAE;CAChD,MAAM,KAAK,gBAAgB,IAAI;CAC/B,MAAM,MAAM,SAAS,QAAQ,IAAI,GAAG,IAAK,IAAI;CAE7C,IAAI,UAAU,CAAC,KAAK,OAAO;EAAE;EAAK,MAAM,UAAU,QAAQ,IAAI,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC;CAAE;CACrG,IAAI,CAAC,KAAK,OAAO;EAAE;EAAK,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI;CAAE;CAC5E,MAAM,QAAQ,MAAe,SAAS,GAAG,GAAG,MAAO,GAAG,cAAc,GAAG,iBAAiB,GAAG,GAAG,MAAO,GAAG,CAAC;CACzG,MAAM,OAAO,UAAU,QAAQ,IAAI,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC;CAIxE,IAAI,QAAQ,KAAK,UAAU,IAAI,MAAM;EACjC,MAAM,SAAS,WAAW,IAAI,GAAG,MAAO,GAAG,cAAc,GAAG,GAAG,QAAQ,QAAQ,GAAG;EAClF,OAAO,SAAS;GAAE;GAAK;GAAM;EAAO,IAAI;CAC5C;CACA,OAAO;EAAE;EAAK;EAAM,MAAM,GAAG,KAAM,KAAK,MAAM,IAAI,IAAI,KAAK;EAAG,YAAY,GAAG,cAAc,KAAK,IAAI;CAAM;AAC9G;AAEA,SAAS,QAAQ,IAAe,IAAoB,OAAkB,KAAgB,KAAU,OAAe,MAA8D;CACzK,MAAM,OAAkB,CAAC;CACzB,MAAM,UAAU,eAAe,KAAK,IAAI,IAAI,MAAM,eAAe,GAAG,IAAI,IAAI;CAC5E,MAAM,OAAO,QAAQ;CAErB,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAI;CAClC,MAAM,MAAM,GAAG,QAAQ,SAAS,OAAO;CACvC,KAAK,MAAM,KAAK,IAAI;EAChB,IAAI,EAAE,QAAQ;EAEd,MAAM,OAAO,KAAK,IAAI,GAAG,WAAW,OAAO,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,CAAC;EACzE,MAAM,KAAK,OAAO,CAAC;EACnB,MAAM,WAAW,MAAc,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,KAAK,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI;EACpG,IAAI,UAAU,KAAK,QAAQ,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,IAAI,OAAO,MAAM,OAAO,QAAQ,KAAK,CAAC;EACpG,IAAI,QAAQ,KAAK,QAAQ,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,IAAI,GAAG,GAAG,KAAK,MAAM,OAAO,QAAQ,EAAE,SAAS,KAAK,CAAC;CAChI;CACA,OAAO;AACX;AAIA,SAAS,QAAQ,MAAiB,CAAC,GAAG,GAAG,IAAI,KAAa,OAAe,SAAiB,KAAgB,MAAc,QAAgB,SAAkB;CACtJ,IAAI,KAAK,UAAU,IAAI,KAAK,UAAU;CACtC,IAAI,eAAe,GAAG,KAAK,gBAAgB,GAAG,KAAK,KAAK,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,IAAI,MAAM;EAC9F,KAAK,IAAI,MAAM;EACf,KAAK,IAAI,MAAM;CACnB;CACA,MAAM,SAAS,KAAK,MAAM,IAAI,EAAE;CAChC,IAAI,SAAS,MAAM;CACnB,KAAK,KAAK;EAAE;EAAG;EAAG,IAAI,KAAK;EAAQ,IAAI,KAAK;EAAQ;EAAK;EAAM;EAAQ;CAAQ,CAAC;AACpF;;AAMA,SAAgB,OAAO,EAAE,GAAG,GAAG,IAAI,MAAe,OAAe,MAAwB;CACrF,MAAM,KAAK,CAAC,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;CAClE,OAAO,IAAI,YAAY,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM;AAC3J;;AAGA,SAAgB,QAAQ,EAAE,GAAG,GAAG,IAAI,MAAe,GAAqB;CACpE,MAAM,IAAI,IAAI,YAAY;CAC1B,MAAM,IAAI;CACV,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EACzB,MAAM,IAAI,CAAC,KAAK,KAAK,IAAK,KAAK,KAAK,IAAK,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI;EACnF,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI;EACtD,IAAI,MAAM,GAAG,EAAE,OAAO,IAAI,EAAE;OACvB,EAAE,OAAO,IAAI,EAAE;CACxB;CACA,OAAO,EAAE,MAAM,EAAE,MAAM;AAC3B;;AAGA,SAAgB,WAAW,GAAY,QAAgC;CACnE,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,MAAM,WAAW;CACvC,MAAM,UAAU,cAAc,QAAQ,MAAM,MAAM;CAClD,MAAM,IAAI,IAAI,YAAY;CAC1B,IAAI,CAAC,SAAS;EACV,MAAM,IAAI,OAAO,GAAG,IAAI,WAAY;EACpC,EAAE,OAAO,IAAI,GAAG,CAAC,EAAE,QAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,QAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EACxG,QAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,QAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;EAC/F,OAAO,EAAE,MAAM,EAAE,MAAM;CAC3B;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;EACxC,MAAM,KAAK,IAAI,QAAQ,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,QAAQ,KAAK,KAAK,QAAQ,IAAI,KAAK;EAClG,IAAI,MAAM,GAAG,EAAE,OAAO,IAAI,EAAE;OACvB,EAAE,OAAO,IAAI,EAAE;CACxB;CACA,OAAO,EAAE,MAAM,EAAE,MAAM;AAC3B;;;ACjHA,SAAS,MAAM,OAA6B;CACxC,IAAI,MAAM,WAAW,GAAG,OAAO,MAAM;CACrC,MAAM,QAAQ,IAAI,WAAW,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,MAAM,QAAQ,CAAC,CAAC;CAC1E,MAAM,SAAS,IAAI,aAAa,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,OAAO,QAAQ,CAAC,CAAC;CAC9E,IAAI,IAAI,GAAG,IAAI;CACf,KAAK,MAAM,KAAK,OAAO;EACnB,MAAM,IAAI,EAAE,OAAO,CAAC;EAAG,KAAK,EAAE,MAAM;EACpC,OAAO,IAAI,EAAE,QAAQ,CAAC;EAAG,KAAK,EAAE,OAAO;CAC3C;CACA,OAAO;EAAE;EAAO;CAAO;AAC3B;;AAKA,IAAa,eAAb,cAAkC,IAAY;CAGb;CAF7B,wBAAiB,IAAI,IAAyB;CAE9C,YAAY,MAAiD;EACzD,MAAM;EADmB,KAAA,OAAA;CAE7B;CAEA,IAAa,MAAoB;EAC7B,MAAM,IAAI,IAAI;EACd,MAAM,KAAK,KAAK,OAAO;EACvB,IAAI,OAAO,KAAA,GAAW;GAClB,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI;GAC5B,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,MAAO,qBAAK,IAAI,IAAI,CAAE;GAC9C,GAAG,IAAI,EAAE;EACb;EACA,OAAO;CACX;CAEA,QAAuB;EACnB,MAAM,MAAM;EACZ,KAAK,MAAM,MAAM;CACrB;AACJ;AAEA,IAAM,YAAY,IAAI,IAAI;CAAC;CAAQ;CAAW;CAAQ;CAAQ;CAAW;CAAY;CAAQ;AAAU,CAAC;AAMxG,IAAM,QAAe;CAAE,MAAM;CAAS,OAAO;EAAC;EAAG;EAAG;EAAG;CAAC;AAAE;AAC1D,IAAM,aAAiD;CAAE,OAAO;CAAS,UAAU;CAAO,WAAW;CAAa,SAAS;AAAU;;AAGrI,SAAS,cAAc,SAAkC;CACrD,IAAI,MAAqB;CACzB,KAAK,MAAM,KAAK,SAAS;EACrB,MAAM,IAAI,WAAW,EAAE,IAAK;EAC5B,MAAM,KAAK,EAAE,MAAM;EACnB,IAAI,CAAC;OACG,OAAO,WAAW,OAAO,WAAW,MAAM;EAAA,OAC3C,IAAI,OAAO,WAAW,OAAO,WAChC,MAAM;GAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;EAAC;OAClG,IAAI,OAAO,aAAa;GAC3B,MAAM;IAAC,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE;GAAC;GACrG,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,MAAM;IAAC,IAAI;IAAI,IAAI;IAAI,IAAI;IAAI,IAAI;GAAE;EACjF;CACJ;CACA,OAAO;AACX;AAEA,SAAS,OAAO,GAAsB;CAClC,MAAM,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CACnC,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK;CACnE,OAAO;EAAC;EAAG;EAAG;EAAG;EAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;EAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;CAAG;AACtE;AAEA,IAAI,eAAe,KAAK;;AAGxB,SAAS,SAAS,GAA6B;CAC3C,MAAM,SAAS,MAAM,iBAAiB,SAAS,GAAG,QAAQ,WAAW,GAAG,MAAc,EAAE,YAAY,CAAC;CACrG,OAAO,YAAY,SAAS,KAAkB,IAAK,QAAsB;AAC7E;AAIA,IAAM,gCAAgB,IAAI,QAAwB;AAClD,IAAI,mBAAmB,KAAK;AAC5B,SAAS,aAAa,OAAuB;CACzC,IAAI,IAAI,cAAc,IAAI,KAAK;CAC/B,IAAI,MAAM,KAAA,GAAW,cAAc,IAAI,OAAQ,IAAI,kBAAmB;CACtE,OAAO;AACX;AAiBA,IAAa,oBAAb,cAAuC,sBAAsB;CA8EnC;CAAyB;CAAwB;CA7EvE,kBAAoC;CACpC,mBAAqC;CACrC,aAAa;CACb;;CAEA,UAAmB,IAAI,mBAAmB,KAAK,iBAAiB,KAAK,iBAAiB,SAAS,EAAE;;CAEjG,eAAuC,CAAC;;CAExC,UAA8B;;CAE9B,yBAAS,IAAI,IAAwC;CACrD,8BAAsB,IAAI,IAAyC;CACnE,SAAiB;EACb,QAAQ,QAAgB,KAAK,MAAM,GAAG;EACtC,UAAU,OAAgB,GAAW,GAAW,UAAkB;GAG9D,MAAM,2BAAW,IAAI,IAAwB;GAC7C,iBAAiB,QAAiB,MAAW;IACzC,IAAI,mBAAmB,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,GAAG;KAC3C,MAAM,QAAQ,KAAK,UAAU,CAAC;KAC9B,IAAI,OAAO,SAAS,IAAI,GAAG,KAAK;IACpC;GACJ,CAAC;GACD,MAAM,SAAS,IAAI,MAAM,CAAC,GAAiC,EAAE,MAAM,GAAG,QAAS,OAAO,QAAQ,WAAW,KAAK,MAAM,GAAG,KAAK,KAAA,IAAY,KAAA,EAAW,CAAC;GACpJ,MAAM,IAAI,KAAK,IAAI,WAAW,OAAgB,GAAG,GAAG;IAAE;IAAQ;GAAS,CAAC;GACxE,EAAE,UAAU;GAEZ,EAAE,UAAU,EAAE;GACd,OAAO;EACX;EACA,QAAQ,MAAW,OAAgB;GAC/B,MAAM,UAAU,KAAK;GACrB,MAAM,OAAO,MAAM,KAAK,UAAU,IAAI;GACtC,IAAI,CAAC,WAAW,SAAS,MAAM,OAAO;GACtC,MAAM,QAAQ,QAAQ,WAAW,KAAK,KAAK,IAAI;GAC/C,IAAI,CAAC,OAAO,OAAO;GACnB,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,EAAE,GAAG,KAAK,QAAQ,CAAC;GACnD,IAAI,IAAI,KAAK,YAAY,IAAI,GAAG;GAChC,IAAI,CAAC,GAAG;IACJ,IAAI,KAAK,IAAI,SAAS,OAAO,MAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;IAC1E,EAAE,UAAU,aAAa,KAAK;IAC9B,KAAK,YAAY,IAAI,KAAK,CAAC;GAC/B;GACA,OAAO;EACX;EACA,YAAY,KAAa,SAAiB,KAAK,SAAS,gBAAgB,KAAK,IAAI;EACjF,mBAAmB;GACf,MAAM,IAAI,KAAK,OAAO;GACtB,OAAO,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;EACxD;EACA,YAAY,KAAK,QAAQ;EACzB,cAAc,SAAkB,KAAK,YAAY,QAAQ,IAAI;CACjE;CACA,SAAiB,QAAgB;EAC7B,MAAM,MAAM,SAAS,GAAG;EACxB,IAAI,IAAI,KAAK,YAAY,IAAI,GAAG;EAChC,IAAI,GAAG,OAAO;EACd,MAAM,IAAI,KAAK,OAAO,IAAI,GAAG;EAC7B,IAAI,CAAC,GAAG,OAAO;EACf,IAAI,KAAK,IAAI,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;EAIjD,EAAE,UAAU,aAAa,EAAE,MAAM;EACjC,KAAK,YAAY,IAAI,KAAK,CAAC;EAC3B,OAAO;CACX;CACA,QAAwB,CAAC;CACzB,SAA0B,CAAC;CAC3B,aAAqB;CAErB,SAA6B,CAAC;CAC9B,UAAkB;CAClB,UAAoC,CAAC;CAErC,YAAY,OAAyB,QAA0B,SAA0B;EACrF,MAAM;EADY,KAAA,QAAA;EAAyB,KAAA,SAAA;EAAwB,KAAA,UAAA;CAEvE;CAEA,IAAY,MAAY;EACpB,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS;CAC1C;CAEA,YAAY,MAAc,UAAkB,YAAoB,aAAa,KAAK,gBAAgB,GAAG,WAA+B;EAChI,OAAO,KAAK,QAAQ,MAAM,UAAU,YAAY,YAAY,eAAe,SAAS;CACxF;CAEA,QAAQ,UAA4B;EAGhC,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,KAAK,QAAQ,KAAK,WAAW,CAAC;EAC7D,KAAK,YAAY,MAAM;EAEvB,KAAK,QAAQ,MAAM;EACnB,KAAK,aAAa,SAAS;EAC3B,MAAM,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,WAAW,KAAK,cAAc,EAAE,CAAC;EAC9E,MAAM,QAAQ,KAAK,WAAW,IAAI;EAClC,KAAK,QAAQ,UAAU,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK;EACnD,KAAK,SAAS,CAAC;EACf,KAAK,aAAa;EAClB,KAAK,QAAQ,CAAC;EACd,KAAK,UAAU,CAAC;EAChB,KAAK,QAAQ,CAAC;EACd,KAAK,WAAW,CAAC;EACjB,KAAK,aAAa;EAClB,SAAS;CACb;;CAGA,gBAAiC;EAC7B,OAAO;GAAC;GAAG;GAAG;GAAG;GAAG,KAAK,QAAQ;GAAG,KAAK,SAAS;EAAC;CACvD;CAEA,aAAyD;EACrD,OAAO;GAAC;GAAG;GAAG;GAAG;EAAC;CACtB;;CAGA,WAAqB,MAAkB;EACnC,OAAO;CACX;CAEA,aAAiC,CAEjC;CAEA,UAAgB,CAAC;CAEjB,MAAe,OAA8B;EACzC,MAAM,MAAM,KAAK;EACjB,KAAK,OAAO,KAAK;GAAE,QAAQ;GAAG,YAAY,KAAK;EAAW,CAAC;EAC3D,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,GAAG,CAAC;EACxC,KAAK,aAAa;CACtB;CAEA,MAAqB;EACjB,MAAM,IAAI,KAAK,OAAO,IAAI;EAC1B,IAAI,GAAG;GACH,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,KAAK,MAAM,IAAI;GAClD,KAAK,aAAa,EAAE;EACxB;EACA,MAAM,IAAI;CACd;CAEA,UAAU,OAAiD;EACvD,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,SAAS,GAAG,IAAI,MAAM,UAAU;EACpF,MAAM,UAAU,MAAM,WAAW;EACjC,MAAM,QAAQ,MAAM,SAAS;EAC7B,IAAI;EACJ,MAAM,SAAS,MAAM;EAErB,IAAI,QAAQ,IAAI;GAAC,OAAO;GAAG,OAAO;GAAG,OAAO;GAAG,OAAO;GAAG,OAAO;GAAG,OAAO;GAAG,OAAO,KAAK;GAAG,OAAO,KAAK;GAAG,OAAO,KAAK;EAAC;OACnH;GACD,MAAM,QAAQ,MAAM,SAAS;IAAE,GAAG;IAAG,GAAG;GAAE;GAC1C,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;GACnD,MAAM,KAAM,MAAM,YAAY,KAAK,KAAK,KAAM,KAAK,IAAI,MAAM,SAAS;GACtE,MAAM,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI;GAC9C,IAAI;IAAC;IAAG;IAAI,CAAC;IAAI;IAAG,IAAI,MAAM,IAAI,KAAK,KAAK;IAAK,IAAI,MAAM,KAAK,KAAK,IAAI;GAAG;EAChF;EACA,MAAM,IAAI,KAAK;EACf,EAAE,YAAY,KAAK,EAAE,WAAW,aAAa,CAAC,IAAI,IAAI,EAAE,MAAM,GAAG,CAAC,CAAQ;EAK1E,MAAM,KAAK,KAAK,YAAY,MAAM,WAAW,CAAC,GAAG,QAAQ,MAAM,EAAE,SAAS,UAAU,CAAC;EACrF,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,SAAS,UAAU,KAAK,YAAY,UAAU,CAAC;EACzE,IAAI,GAAG,QAAQ;GACX,EAAE,UAAU;GACZ,EAAE,YAAY;IAAC,CAAC,IAAI;IAAG,CAAC,IAAI;IAAG;IAAG;GAAC;GACnC,EAAE,aAAa,KAAK,QAAQ;EAChC;EACA,IAAI,UAAU,gBAAgB;GAC1B,MAAM,OAAO,SAAS,KAAK;GAC3B,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,OAAO;GAC5C,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,GAAG;IAAE,SAAS,KAAK,cAAc,UAAU,IAAI,UAAU;IAAI,OAAO,QAAQ;GAAS,CAAC,CAAC;GACtH,KAAK,OAAO,KAAK,OAAO,SAAS,GAAG;GACpC,KAAK,aAAa;EACtB,OAAO,IAAI,UAAU,GAAG,KAAK,cAAc;EAC3C,OAAO;CACX;CAEA,eAAuB;EACnB,KAAK,SAAS,CAAC;EACf,KAAK,UAAU;EACf,KAAK,UAAU,CAAC;CACpB;CAEA,aAAuB,UAA4B;EAC/C,MAAM,YAAY,KAAK;EACvB,MAAM,IAAI;EACV,IAAI,EAAE,kBAAkB,GAAG;GACvB,MAAM,IAAI,EAAE,aAAa;GACzB,IAAI,IAAI,GAAG,KAAK,cAAc;EAClC;EAGA,MAAM,OAAO,EAAE,iBAAiB;EAChC,IAAI,SAAsB;EAC1B,IAAI,MAAM;GACN,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,KAAK,YAAY,UAAU,KAAK,MAAM;GAC/D,MAAM,IAAK,KAAK,WAAW,KAAK,KAAM,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK;GAChG,SAAS,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,WAAW;IAAC;IAAG;IAAG,CAAC;IAAG;IAAG,MAAM,IAAI,KAAK,IAAI;IAAK,MAAM,IAAI,KAAK,IAAI;GAAG,EAAE,CAAC;GAC9G,KAAK,MAAM,KAAK,MAAM;EAC1B;EACA,MAAM,MAAM,SAAS,IAAI;EACzB,MAAM,WAAW,KAAK,eAAe,GAAG;EACxC,IAAI,UAAuB;EAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GACjC,MAAM,KAAK,IAAI;GAGf,MAAM,KAAK,SAAS,IAAI,CAAC;GACzB,IAAI,IAAI;IACJ,UAAU,KAAK,IAAI,MAAM,KAAK,KAAK;KAAE,SAAS;KAAI,WAAW,KAAK,YAAY;KAAG,YAAY,KAAK,QAAQ;IAAE,CAAC;IAC7G,KAAK,MAAM,KAAK,OAAO;GAC3B;GACA,QAAQ,GAAG,MAAX;IACI,KAAK;IAAQ,KAAK;IAAW,KAAK;IAAW,KAAK;IAAY,KAAK;IAAQ,KAAK,QAAQ;KACpF,IAAI,KAAK,SAAS,KAAK,aAAa;KACpC,MAAM,QAAQ,QAAQ,EAAE;KACxB,IAAI,CAAC,OAAO;KACZ,IAAI,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAAK;UACvC,KAAK,OAAO,KAAK,KAAK;KAC3B;IACJ;IACA,KAAK;KAAO,KAAK,IAAI;KAAG;IACxB,KAAK;KACD,IAAI,KAAK,SAAS,KAAK,aAAa;KACpC,KAAK,SAAS,GAAG,KAAK;KACtB;IAEJ,KAAK,QAAQ;KACT,IAAI,KAAK,SAAS,KAAK,aAAa;KACpC,MAAM,OAAO,OAAO,GAAG,QAAQ,SAAS;MACpC,MAAM,IAAI,KAAK,KAAK;MACpB,MAAM,IAAI,KAAK,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,WAAW,QAAQ;MAC9G,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM;KAC7B,CAAC;KACD,IAAI,MAAM;MACN,MAAM,CAAC,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU;MACpE,KAAK,OAAO,KAAK;OAAE,MAAM;OAAM,QAAQ;OAAM,UAAU;OAAM,QAAQ;QAAC,IAAI,IAAI;QAAG,IAAI,IAAI;QAAG,IAAI,IAAI;QAAG,IAAI,IAAI;OAAC;OAAG;MAAK,CAAC;KAC7H,OAAO,KAAK,QAAQ,IAAI,WAAW;KACnC;IACJ;IACA,KAAK;KAAQ,KAAK,KAAK,QAAQ,QAAQ,GAAG,KAAK,CAAC;KAAG;IACnD,KAAK;KAAU,KAAK,OAAO,UAAU,QAAQ,GAAG,OAAO,CAAC;KAAG;IAC3D,KAAK;KAAU,KAAK,UAAU,UAAU,QAAQ,GAAG,OAAO;KAAG;IAC7D,KAAK;KACD,IAAI,SAAS;MACT,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,OAAO,CAAC;MACjD,UAAU;KACd;KACA,KAAK,aAAa;KAClB;IACJ,KAAK;KAAQ,KAAK,UAAU,GAAG,OAAO;KAAG;IACzC,KAAK;KAAa,KAAK,UAAU;KAAG;IACpC,KAAK;KAAW,KAAK,QAAQ;KAAG;IAChC,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,MAAM;GAC7C;EACJ;EAEA,MAAM,QAAQ,UAAU;EACxB,IAAI,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,CAAC;EAC1D,KAAK,aAAa;CACtB;;;CAIA,eAAuB,KAAmC;EACtD,MAAM,2BAAW,IAAI,IAAsB;EAC3C,IAAI,aAAa,GAAG,UAAU;EAC9B,IAAI,SAAS,IAAI,MAAM;GACnB,IAAI,UAAU,IAAI,GAAG,IAAI;QACjB,SAAS;KACT,aAAa;KACb,UAAU;IACd;UACG,IAAI,GAAG,SAAS,UAAU,GAAG,SAAS,YAAY,GAAG,SAAS,UACjE,UAAU;QACP,IAAI,GAAG,SAAS,WAAW;IAC9B,MAAM,KAAK,KAAK,WAAY,GAAG,QAAkB,QAAQ,MAAM,EAAE,SAAS,UAAU,CAAC;IACrF,IAAI,GAAG,QAAQ,SAAS,IAAI,YAAY,EAAE;IAC1C,aAAa,IAAI;IACjB,UAAU;GACd;EACJ,CAAC;EACD,OAAO;CACX;;CAGA,WAA+C,SAAmB;EAC9D,IAAI,CAAC,QAAQ,MAAM,MAAM,EAAE,SAAS,YAAY,GAAG,OAAO;EAC1D,MAAM,KAAK,KAAK,mBAAmB;EACnC,OAAO,QAAQ,SAAS,MAAM;GAC1B,IAAI,EAAE,SAAS,cAAc,OAAO,CAAC,CAAC;GACtC,MAAM,IAAI,KAAK,kBAAkB,GAAY,GAAG,UAAU,GAAG,EAAE,IAAI;GACnE,IAAI,CAAC,GAAG,OAAO,CAAC;GAEhB,IAAI,EAAE,UAAU,KAAK,KAAK,MAAM,EAAE,OAAO,IAAA,IAAsB,KAAK,QAAQ,IAAI,2BAA2B;GAC3G,OAAO,CAAC;IAAE,MAAM;IAAmB,QAAQ,EAAE;IAAQ,OAAO,EAAE;GAAM,CAAiB;EACzF,CAAC;CACL;;CAGA,YAAoB,UAAsB,QAAwC;EAC9E,IAAI,WAAW,KAAA,KAAa,OAAO,WAAW,UAAU,OAAO;GAAE,GAAG,OAAO;GAAG,GAAG,OAAO;EAAE;EAC1F,IAAI,IAAmB;EACvB,KAAK,MAAM,MAAM,SAAS,IAAI,GAAY;GACtC,MAAM,IAAI,UAAU,IAAI,GAAG,IAAI,KAAK,GAAG,SAAS,UAAU,GAAG,SAAS,aAAa,QAAQ,EAAE,GAAG,OAAO;GACvG,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,QAAQ;GAC3B,MAAM,KAAK,WAAW,CAAC;GACvB,IAAI,IAAI;IAAC,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;GAAC,IAAI;EAC3G;EACA,IAAI,CAAC,GAAG,OAAO;GAAE,GAAG;GAAG,GAAG;EAAE;EAC5B,MAAM,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM;EACnD,IAAI,WAAW,KAAA,GAAW,OAAO;GAAE,GAAG;GAAI,GAAG;EAAG;EAChD,MAAM,IAAI,aAAa,QAAQ,MAAM;EACrC,OAAO;GAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;GAAI,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;EAAG;CAClF;;;CAIA,cAAwD;EACpD,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,KAAK,YAAY,EAAE,OAAO,SAAS,GAAG;GAAC;GAAG;GAAG;GAAG;EAAC,CAAC;EACvE,OAAO;GAAC;GAAG;GAAG,IAAI;GAAG,IAAI;EAAC;CAC9B;;CAGA,QAAgB,MAAuD;EACnE,IAAI,QAAQ,KAAK,OAAO,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,MAAqB,CAAC,CAAC,KAAK,EAAE,MAAM,SAAS,CAAC;EAGlG,IAAI,SAAS,UAAU,MAAM,SAAS,GAAG,QAAQ,MAAM,KAAK,MAAO,WAAW,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAE;EAC1G,OAAO,MAAM,SAAS,MAAM,KAAK,IAAI;CACzC;CAEA,OAAe,MAA+B;EAC1C,MAAM,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,MAAM,MAAM,IAAI;EACrE,IAAI,QAAQ,IAAI,WAAW,KAAK,OAAO,QAAQ,OAAO,WAAW,IAAI;EACrE,IAAI,CAAC,IAAI,QAAQ,OAAO;GAAC;GAAG;GAAG;GAAG;EAAC;EACnC,OAAO,IAAI,QAAQ,GAAG,MAAM;GAAC,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;EAAC,CAAC;CACxH;;CAGA,KAAa,QAAc,GAAS,OAAwB;EACxD,OAAO,aAAa,IAAI,KAAK,IAAI,SAAS,QAAQ;GAAE,GAAG;GAAO,SAAS,EAAE;EAAQ,CAAC,IAAI,KAAK,IAAI,SAAS,QAAQ;GAAE,GAAG;GAAO,MAAM,EAAE;EAAK,CAAC;CAC9I;CAEA,WAAmB,GAAiB;EAChC,OAAO,aAAa,IAAI,cAAc,EAAE,OAAO,KAAK;GAAC;GAAG;GAAG;GAAG;EAAC,IAAI,WAAW,EAAE,IAAI;CACxF;;;;CAKA,WAAmB,MAAY,QAAgB,OAA6B;EACxE,IAAI,CAAC,UAAU,aAAa,MAAM,OAAO;EACzC,MAAM,QAAoB,CAAC;EAC3B,KAAK,MAAM,KAAK,KAAK,QAAQ;GACzB,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAK,MAAM,QAAQ;GAClD,MAAM,IAAI,EAAE,SAAS,EAAE,OAAO,MAAM,IAAI,EAAE;GAC1C,IAAI,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC;QAChC,IAAI,CAAC,OAAO,MAAM,KAAK,EAAE,IAAI;EACtC;EACA,OAAO,MAAM,SAAS,EAAE,MAAM,MAAM,KAAK,EAAE,IAAI;CACnD;;CAGA,OAAe,QAAc,GAAe;EACxC,IAAI,UAAU,GAAG;GACb,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,WAAW,EAAE,IAAI;GAC1C,OAAO,KAAK,IAAI,MAAM,QAAQ,EAAE,MAAM;IAAE,GAAG;IAAI,GAAG;IAAI,GAAG,KAAK;IAAI,GAAG,KAAK;IAAI,GAAG;IAAG,MAAM,EAAE;GAAK,EAAE,CAAC;EACxG;EACA,MAAM,IAAI,KAAK,IAAI,MAAM,QAAQ,EAAE,MAAM,QAAQ,CAAC;EAClD,KAAK,IAAI,SAAS,GAAG;GAAE,SAAS,EAAE;GAAS,MAAM;EAAM,CAAC;EACxD,OAAO;CACX;;CAGA,YAAoB,QAAc,GAAe;EAC7C,MAAM,IAAI,KAAK,IAAI,MAAM,QAAQ,EAAE,MAAM,cAAc,CAAC;EACxD,KAAK,KAAK,GAAG,GAAG,EAAE,MAAM,MAAM,CAAC;EAC/B,OAAO;CACX;CAEA,KAAa,QAA4C;EACrD,KAAK,UAAU;EAEf,IAAI,KAAK,SAAS,QAAQ;EAC1B,KAAK,UAAU,cAAc,KAAK,UAAU,MAAM,CAAC;CACvD;;;CAIA,UAAkB,MAAyB,OAAmB;EAC1D,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,SAAS;EACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,eAAe,EAAE,QAAQ;EAC/E,IAAI,CAAC,OAAO,OAAO,MAAM;EACzB,KAAK,MAAM,KAAK,KAAK;EACrB,IAAI;GACA,MAAM;EACV,UAAU;GACN,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,KAAK,CAAC;EACnD;CACJ;CAEA,UAAkB,QAA4C;EAC1D,KAAK,UAAU,QAAQ,IAAI;EAC3B,IAAI,CAAC,OAAO,QAAQ;EACpB,MAAM,OAAO,KAAK,QAAQ,MAAM;EAChC,MAAM,QAAgB,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;EAC3C,KAAK,MAAM,KAAK,KAAK,QAAQ,IAAI,EAAE,SAAS,MAAM,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;EAC7E,IAAI,CAAC,MAAM,QAAQ;EACnB,MAAM,SAAS,KAAK,OAAO,IAAI;EAC/B,MAAM,MAAM,KAAK;EACjB,KAAK,UAAU,CAAC;EAChB,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS,GAAG,QAAQ,QAAQ,GAAG;CAC/D;CAEA,SAAiB,MAAY,QAAgB,QAA4C,KAAuB;EAC5G,IAAI,KAAK,cAAc;GACnB,KAAK,KAAK,KAAK,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;GACzC;EACJ;EAIA,MAAM,QAAkB,CAAC;EACzB,KAAK,MAAM,MAAM,KAAK;GAClB,IAAI,GAAG,OAAO;GAEd,IADY,GAAG,KAAK,WAAW,KAAM,GAAG,KAAK,GAAW,SAAS,SACxD;IACL,MAAM,KAAK,SAAS,IAAI,KAAK,OAAO;IACpC,IAAI,IAAI,MAAM,KAAK,EAAE;IACrB;GACJ;GACA,MAAM,KAAK,GAAG,QAAQ,KAAK,GAAG,KAAK,EAAE,GAAG,QAAQ,KAAK;GACrD,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK;IAAE,WAAW;KAAC;KAAG;KAAG;KAAG;KAAG;KAAI;IAAE;IAAG,QAAQ,GAAG,OAAO,IAAI;KAAE,MAAM;KAAQ,OAAO,GAAG,OAAO;IAAE,IAAI,KAAA;GAAU,CAAC;GAC9I,MAAM,OAAO,KAAK,WAAW,MAAM,GAAG,UAAU,GAAG,KAAK;GACxD,KAAK,MAAM,KAAK,GAAG,MAAM;IACrB,MAAM,QAAQ,UAAU,GAAG,KAAK,YAAY,GAAG,MAAM,GAAG,KAAK,SAAS,KAAK,MAAM;IACjF,IAAI,OAAO,KAAK,KAAK,GAAG,MAAM;KAAE,MAAM;KAAO,SAAS,KAAK,cAAe,EAAU,WAAW;IAAG,CAAC;GACvG;EACJ;EACA,OAAO,SAAS,GAAG,MAAM;GACrB,MAAM,QAAQ,KAAK,YAAY,GAAG,MAAM;GACxC,MAAM,QAAQ,UAAU,GAAG,OAAO,KAAK,SAAS,KAAK,MAAM;GAC3D,IAAI,CAAC,OAAO;GACZ,MAAM,UAAU,KAAK,cAAe,EAAU,WAAW;GACzD,MAAM,UAAU,MAAM,IAAI,QAAQ,CAAC;GACnC,MAAM,OAAQ,EAAU,SAAS,UAAW,EAAU,QAAQ,aAAa,MAAM,MAAW,EAAE,SAAS,MAAM,IAAI,KAAA;GACjH,IAAI,QAAQ,KAAK,SAAS,KAAK,KAAK,QAAQ,GAAG;IAC3C,KAAK,UAAU,MAAM,GAAG,OAAO,QAAQ,OAAO,SAAS,SAAS,IAAI;IACpE;GACJ;GACA,MAAM,YAAa,EAAU,QAAQ,aAAa;GAClD,IAAI,YAAY,KAAK,YAAY,KAAK,KAAK,iBAAiB,CAAC,EAAE,QAAQ;IAKnE,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK;KAAE;KAAS,OAAO,KAAK,QAAQ,CAAC;IAAE,CAAC;IACtE,KAAK,YAAY,KAAK,KAAK,GAAG,MAAM;KAAE,MAAM;KAAO;IAAQ,CAAC,GAAG,GAAG,MAAM;IACxE,KAAK,KAAK,GAAG,MAAM;KAAE,MAAM;KAAO,SAAS,IAAI;IAAU,CAAC;IAC1D;GACJ;GACA,KAAK,YAAY,KAAK,KAAK,KAAK,KAAK,MAAM;IAAE,MAAM;IAAO;IAAS;IAAS,OAAO,KAAK,QAAQ,CAAC;GAAE,CAAC,GAAG,GAAG,MAAM;EACpH,CAAC;EAGD,KAAK,MAAM,MAAM,KAAK;GAClB,IAAI,CAAC,GAAG,OAAO;GAGf,MAAM,OAAO,KAAK,WAAW,MAAM,EAAE,GAAG,UAAU,IAAI,IAAI;GAC1D,MAAM,KAAK,GAAG,QAAQ,KAAK,GAAG,KAAK,EAAE,GAAG,QAAQ,KAAK;GACrD,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,KAAK,WAAW,IAAI;GAC7C,MAAM,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,OAAO,IAAI;GACxD,MAAM,OAAO,KAAK,OAAO,KAAK,KAAK,IAAI;GACvC,KAAK,MAAM,KAAK,GAAG,MAAM;IACrB,MAAM,QAAQ,UAAU,GAAG,KAAK,YAAY,GAAG,MAAM,GAAG,KAAK,SAAS,KAAK,MAAM;IACjF,IAAI,CAAC,OAAO;IACZ,MAAM,UAAU,KAAK,IAAI,MAAM,MAAM;KAAE,SAAS,KAAK,cAAe,EAAU,WAAW;KAAI,QAAQ,GAAG,OAAO,IAAI;MAAE,MAAM;MAAQ,OAAO,GAAG,OAAO;KAAE,IAAI,KAAA;IAAU,CAAC;IACrK,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,OAAO,EAAE,MAAM,cAAc,IAAI,CAAC,CAAC;IAC1E,IAAI,MAAM,KAAK,KAAK,QAAQ,MAAM;KAAE,WAAW;MAAC;MAAG;MAAG;MAAG;MAAG;MAAI;KAAE;KAAG,MAAM;IAAM,CAAC;IAClF,KAAK,IAAI,KAAK,QAAQ;KAAE,WAAW;MAAC;MAAG;MAAG;MAAG;MAAG,KAAK;MAAK,KAAK;KAAG;KAAG,GAAG,KAAK,KAAK,IAAI;KAAK,GAAG,KAAK,KAAK,IAAI;KAAK,MAAM;IAAM,CAAC;GAClI;EACJ;CACJ;;;;CAKA,SAAiB,OAAY;EACzB,MAAM,IAAI,uBAAuB,KAAK;EACtC,MAAM,QAAQ,EAAE;EAChB,IAAI,CAAC,MAAM,QAAQ;EACnB,MAAM,QAA0C;GAAC,CAAC,EAAE,QAAQ;GAAG,CAAC,EAAE,SAAS;GAAG,EAAE,QAAQ;GAAG,EAAE,SAAS;EAAC;EACvG,MAAM,QAAe;GAAE,MAAM;GAAS,OAAO;IAAC;IAAG;IAAG;IAAG;GAAC;EAAE;EAC1D,MAAM,cAAc,YAA0B,OAAO,KAAK,UAAU,OAAO,IAAI,OAAO,KAAK,SAAS,KAAK,MAAM,IAAI,SAAS;EAC5H,MAAM,OAAsB,MAAM,KAAK,QAAQ;GAC3C,MAAM,GAAG;GAAM,QAAQ,GAAG;GAAY,MAAM,GAAG;GAAU,QAAQ,GAAG;GACpE,QAAQ,GAAG,cAAc,YAAY,GAAG,cAAc;GAAW,eAAe,GAAG;EACvF,EAAE;EAEF,MAAM,OAAiB;GAAE;GAAM,OADhB;IAAE,OAAO;IAAQ,KAAK;GAAQ,EAAwC,EAAE,cAAe,EAAE;GAClE,MAAM,EAAE,QAAQ;GAAG,OAAO,EAAE;GAAO,YAAY,EAAE;EAAW;EAIlG,MAAM,QAAQ,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,OAAO,GAAG,KAAK,MAAM,CAAC;EAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC5B,MAAM,YAAY,KAAK,KAAK,GAAG,OAAO;IAAE,GAAG;IAAG,OAAO,WAAW,MAAM,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;GAAE,EAAE;GACjG,KAAK,IAAI,SAAS,KAAK,KAAK;IAAE,MAAM;KAAE,GAAG;KAAM,MAAM;IAAU;IAAG,MAAM;IAAO,SAAS,KAAK;GAAW,CAAC;EAC7G;EACA,MAAM,0BAAU,IAAI,IAAqD;EACzE,MAAM,SAAS,IAAI,MAAM,GAAG,OAAO,SAAS,IAAS,MAAc;GAC/D,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG;GACzD,IAAI,IAAI,QAAQ,IAAI,GAAG;GACvB,IAAI,CAAC,GAAG,QAAQ,IAAI,KAAM,IAAI;IAAE;IAAG;IAAI,QAAQ,MAAM,UAAU,KAAK;GAAE,CAAE;GACxE,EAAE,OAAO,KAAK,WAAW,GAAG,IAAI;EACpC,CAAC,CAAC;EACF,KAAK,MAAM,EAAE,IAAI,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG;GAC1E,MAAM,aAAa,KAAK,KAAK,GAAG,OAAO;IAAE,GAAG;IAAG,OAAO,OAAO;GAAG,EAAE;GAClE,KAAK,IAAI,SAAS,KAAK,KAAK;IAAE,MAAM;KAAE,GAAG;KAAM,MAAM;IAAW;IAAG,SAAS,KAAK;IAAY,QAAQ;KAAE,OAAO;KAAO,OAAO,GAAG;KAAQ,MAAM,GAAG;KAAM,KAAK,GAAG;KAAK,OAAO,GAAG;IAAW;GAAE,CAAC;EAC/L;CACJ;;CAGA,UAAkB,QAA4C,QAA6D;EACvH,KAAK,MAAM,SAAS,KAAK,QAAQ;GAC7B,MAAM,IAAI,MAAM;GAChB,IAAI,CAAC,GAAG;GACR,MAAM,IAAI,MAAM;GAEhB,MAAM,QAA0C;IAAC,EAAE,KAAK,EAAE,UAAU;IAAI,EAAE,KAAK,EAAE,UAAU;IAAI,EAAE,KAAK,EAAE,UAAU;IAAI,EAAE,KAAK,EAAE,UAAU;GAAE;GAC3I,KAAK,MAAM,KAAK,QAAQ;IACpB,MAAM,QAAQ,UAAU,GAAG,OAAO,KAAK,SAAS,KAAK,MAAM;IAC3D,IAAI,CAAC,OAAO;IACZ,MAAM,UAAU,KAAK,cAAe,EAAU,WAAW;IACzD,IAAI,QAAQ;KACR,MAAM,MAAM,WAAmB;MAAE;MAAO;MAAO,MAAM,OAAO;MAAe,KAAK,OAAO;MAAc,OAAO,OAAO;MAAY,MAAM,OAAO;MAAM,WAAW,OAAO;KAAW;KAC/K,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,OAAO,SAAS,CAAC,CAAC;KACtD,IAAI,OAAO,GAAG;MACV,KAAK,IAAI,SAAS,KAAK,KAAK;OAAE,WAAW,EAAE;OAAW,MAAM,EAAE;OAAM;OAAS,QAAQ,GAAG,OAAO,MAAM;MAAE,CAAC;MACxG;KACJ;KAIA,MAAM,UAAU,WAAiB,KAAK,IAAI,SAAS,QAAQ;MAAE,WAAW,EAAE;MAAW,MAAM,EAAE;MAAM,MAAM;KAAM,CAAC;KAChH,MAAM,QAAQ,QAAc,UACxB,KAAK,IAAI,SAAS,QAAQ;MAAE,WAAW,EAAE;MAAW,MAAM,EAAE;MAAM,QAAQ;OAAE,OAAO;OAAO;OAAO,MAAM,OAAO;OAAe,OAAO,OAAO;MAAW;KAAE,CAAC;KAG7J,MAAM,UAAU,SAAiB;MAC7B,IAAI,KAAK,GAAG;OACR,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;OAC1D,MAAM,IAAI,KAAK,IAAI,MAAM,GAAG,EAAE,MAAM,cAAc,CAAC;OACnD,KAAK,GAAG,IAAI;OACZ,OAAO,CAAC;OACR,OAAO;MACX;MACA,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;MACpD,MAAM,IAAI,KAAK,IAAI,MAAM,CAAC;MAC1B,OAAO,CAAC;MACR,KAAK,GAAG,IAAI;MACZ,OAAO;KACX;KACA,IAAI,KAAK,IAAI,EAAE,KAAK,GAAG;MAKnB,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,MAAM,KAAK,IAAI,sBAAsB,eAAe,CAAC;MAC1F,OAAO,CAAC;MACR,KAAK,IAAI,SAAS,GAAG;OAAE,WAAW,EAAE;OAAW,MAAM,EAAE;OAAM;OAAS,QAAQ,GAAG,IAAI,OAAO,MAAM;MAAE,CAAC;KACzG,OAAO;MAIH,MAAM,OAAQ,IAAI,MAAM,OAAO,SAAU,GAAG,UAAW,IAAI,MAAM,OAAO,SAAU;MAClF,KAAK,IAAI,SAAS,OAAO,KAAK,KAAK,IAAI,SAAS,IAAI,GAAG;OAAE,WAAW,EAAE;OAAW,MAAM,EAAE;OAAM;OAAS,QAAQ,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,CAAC;MAAE,CAAC;KACnJ;IACJ,OACI,KAAK,IAAI,SAAS,KAAK,KAAK;KAAE,WAAW,EAAE;KAAW,MAAM,EAAE;KAAM;KAAS,MAAM;IAAM,CAAC;GAElG;EACJ;CACJ;;;;CAKA,UAAkB,GAA2B;EACzC,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;EAC3D,MAAM,IAAI,EAAE,SAAS,KAAK,IAAI,EAAE,UAAU;EAC1C,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC;EACnF,MAAM,OAAO,KAAK,IAAI,SAAS,EAAE,WAAW;GAAC;GAAO;GAAG;GAAG;GAAQ,IAAI,QAAS;GAAI,IAAI,QAAS;EAAC,EAAE,CAAC;EACpG,MAAM,QAAQ;GAAE,OAAO,KAAK;GAAO,QAAQ,KAAK;GAAQ,OAAO,KAAK;GAAY,QAAQ,KAAK;GAAQ,SAAS,KAAK;GAAS,SAAS,KAAK;GAAS,OAAO,KAAK;GAAO,OAAO,KAAK;GAAO,SAAS,KAAK;EAAQ;EAC/M,KAAK,QAAQ,CAAC,IAAI;EAAG,KAAK,SAAS,CAAC;EAAG,KAAK,aAAa;EAAG,KAAK,QAAQ,CAAC;EAAG,KAAK,QAAQ,CAAC;EAAG,KAAK,UAAU,CAAC;EAC9G,KAAK,aAAa;EAClB,IAAI;GACA,MAAM,MAAM,qBAAqB,EAAE,MAAM;GACzC,IAAI,IAAI,SAAS,YAAY,KAAK,KAAK,IAAI,QAAQ;QAC9C;IACD,IAAI,KAAK,OAAO;KAAE,GAAG;KAAG,GAAG;KAAG,OAAO;KAAG,QAAQ;IAAE,GAAG,IAAI;IACzD,IAAI,KAAK,OAAO,IAAI;GACxB;EACJ,SAAS,GAAG;GACR,KAAK,QAAQ,IAAI,eAAe;GAChC,QAAQ,KAAK,CAAC;EAClB,UAAU;GACN,OAAO,OAAO,MAAM;IAAE,OAAO,MAAM;IAAO,QAAQ,MAAM;IAAQ,YAAY,MAAM;IAAO,QAAQ,MAAM;IAAQ,SAAS,MAAM;IAAS,SAAS,MAAM;IAAS,OAAO,MAAM;IAAO,OAAO,MAAM;IAAO,SAAS,MAAM;GAAQ,CAAC;EACnO;EACA,MAAM,IAAI,KAAK,IAAI,WAAW,MAAM,IAAI,EAAE;EAC1C,EAAE,UAAU,EAAE;EACd,OAAO;CACX;;;;CAKA,YAAoB,MAAY,GAAY,QAA0C;EAClF,MAAM,QAAQ,KAAK,iBAAiB,CAAC;EACrC,IAAI,CAAC,MAAM,WAAY,EAAU,OAAO,aAAa,MAAM,GAAG;EAC9D,KAAK,UAAU,MAAM,KAAK,OAAY;GAAE,GAAG;GAAG,MAAM;EAAK,EAAE;EAC3D,KAAK,YAAY;GAAC,OAAO;GAAI,OAAO;GAAI,OAAO,KAAK,OAAO;GAAI,OAAO,KAAK,OAAO;EAAE;EACpF,KAAK,aAAa,KAAK,QAAQ;CACnC;;;CAIA,iBAAyB,GAAsB;EAC3C,MAAM,MAAM;EACZ,IAAK,IAAI,SAAS,WAAW,IAAI,SAAS,WAAY,CAAC,IAAI,QAAQ,OAAO,CAAC;EAC3E,QAAQ,IAAI,OAAO,eAAe,CAAC,GAAG,QAAQ,MAAW,EAAE,SAAS,UAAU,EAAE,SAAS,eAAe;CAC5G;;;CAIA,UAAkB,MAAY,GAAQ,OAAe,QAAgB,OAAc,SAAiB,SAAmB,MAAW;EAC9H,MAAM,QAAQ,SAAS,KAAK,SAAS,QAAQ,KAAK;EAClD,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE;EAC9D,MAAM,OAAO,KAAK,UAAU,CAAC;EAC7B,IAAI,QAAQ,QAAQ,KAAK,KAAK,KAAK,KAAK,MAAM;GAAE,MAAM;IAAE,MAAM;IAAS,OAAO;KAAC;KAAG;KAAG;KAAG;IAAC;GAAE;GAAG;GAAS;EAAQ,CAAC;EAChH,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;GAC7C,MAAM,KAAK,OAAO,IAAI,KAAK;GAC3B,IAAI,KAAK,GAAG;GACZ,MAAM,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS;IAAE,GAAG,KAAK;IAAQ,QAAQ,SAAS,KAAK,OAAO,MAAM,MAAM,EAAE;GAAE,CAAC;GAC9G,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM;IAAE,MAAM;IAAK,SAAS,UAAU,KAAK,IAAI,OAAO,CAAC;IAAG;GAAM,CAAC;EAClG;EACA,KAAK,YAAY,KAAK,KAAK,KAAK,KAAK,MAAM;GAAE,MAAM;GAAO;GAAS;EAAM,CAAC,GAAG,GAAG,MAAM;CAC1F;;CAGA,UAAkB,MAA0B;EACxC,MAAM,IAAI,KAAK,SAAS,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC;EACrD,OAAO,IAAI,sBAAsB,MAAM,KAAK,mBAAmB,GAAG,WAAW,GAAG,EAAE,QAAQ,IAAI;CAClG;;CAGA,UAA0B;EACtB,OAAO,KAAK,mBAAmB,GAAG,WAAW;CACjD;;;CAIA,YAAoB,GAAY,OAA2E;EACvG,MAAM,QAAS,EAAyB,SAAS;EACjD,IAAI,UAAU,UAAU;GACpB,MAAM,IAAI,KAAK,kBAAkB,EAAE;GACnC,OAAO,IAAI;IAAC,EAAE;IAAM,EAAE;IAAK,EAAE;IAAO,EAAE;GAAM,IAAI;EACpD;EACA,IAAI,UAAU,UAAU;GACpB,MAAM,IAAI,KAAK,OAAO;GACtB,MAAM,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;GACnC,IAAI,CAAC,KAAK,OAAO;GACjB,MAAM,OAAO,GAAW,MAAgC;IACpD,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE;IAChC,OAAO,EAAE,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,GAAG;GACzE;GACA,MAAM,IAAI,KAAK,QAAQ,KAAK,YAAY,IAAI,KAAK,SAAS,KAAK;GAC/D,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;GACjC,OAAO;IAAC,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;IAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAC;EAClG;EACA,OAAO;CACX;;CAGA,QAAgB,GAAuB;EACnC,MAAM,IAAK,EAAyB;EACpC,IAAI,CAAC,KAAK,MAAM,UAAU,OAAO;EACjC,MAAM,OAAO,SAAS,CAAC;EACvB,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,cAAc,GAAG;EAC7C,OAAO,QAAQ;CACnB;;CAGA,SAAwB;EACpB,IAAI,IAAW;GAAC,KAAK;GAAY;GAAG;GAAG,KAAK;GAAY;GAAG;EAAC;EAC5D,KAAK,MAAM,KAAK,KAAK,OAAO,IAAI,KAAK,GAAG,EAAE,SAAS;EACnD,OAAO;CACX;;;CAIA,KAAa,MAAgB,UAAkB,GAAsB;EACjE,IAAI,YAAY,KAAK,KAAK,IAAI,EAAE,EAAE,IAAI,QAAQ,KAAK,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO;EACxG,MAAM,CAAC,KAAK,KAAK,KAAK,OAAO,WAAW,IAAI;EAC5C,IAAI,MAAM,OAAO,KAAK,MAAM,OAAO,GAAG,OAAO;EAC7C,MAAM,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE;EAC9C,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;EAC7E,MAAM,MAAM,WAAW,MAAM,IAAI,IAAI;EACrC,MAAM,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI;EACjE,MAAM,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI;EACjE,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO;EACvC,MAAM,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM,KAAK,OAAO,IAAI;EACtD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,IAAI,KAAK,CAAC,IAAI,MAAM,OAAO;EACrH,OAAO;GAAC;GAAI;GAAG;GAAG;IAAK,KAAK,MAAM,KAAK,KAAK;IAAM,KAAK,MAAM,KAAK,KAAK;EAAG;CAC9E;CAEA,OAAe,SAA+C;EAC1D,KAAK,UAAU;EACf,IAAI,KAAK,SAAS,QAAQ;EAC1B,KAAK,UAAU,gBAAgB,KAAK,YAAY,OAAO,CAAC;CAC5D;CAEA,YAAoB,SAA+C;EAC/D,KAAK,MAAM,MAAM,SAAS,KAAK,UAAU,GAAG,MAAM,EAAE;EACpD,MAAM,UAAU,KAAK,QAAQ,MAAM;EACnC,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,QAAQ,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC;EACnE,MAAM,UAAU,aAAa,GAAG,KAAK,KAAK,IAAI,IAAI,EAAE,IAAI,QAAQ,KAAK,IAAI,IAAI,EAAE,IAAI;EACnF,KAAK,MAAM,MAAM,SAAS;GAGtB,IAAI,SAAS,GAAG,QAAQ,WAAW;GACnC,IAAI,CAAC,WAAW,SAAS,KAAK,QAAQ,KAAK,SAAS,QAAQ,KAAK;IAC7D,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,KAAK,CAAC;IACjD,SAAS,WAAW;GACxB;GACA,KAAK,MAAM,SAAS,KAAK,aAAa,GAAG;IACrC,IAAI,MAAY;IAChB,IAAI,OAAmB;KAAE,KAAK,GAAG;KAAK,MAAM,CAAC;KAAG,MAAM,GAAG;KAAM,WAAW,GAAG;IAAW;IACxF,IAAI,MAAM,SACN,OAAO,WAAW,EAAE,SAAS,MAAM,QAAQ;SACxC;KACH,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,OAAO,MAAM,QAAQ;KACjD,MAAM,IAAI,WAAW,IAAI,MAAM,QAAQ,QAAQ,WAAW,CAAC;KAC3D,IAAI,CAAC,GAAG;KACR,OAAO;KACP,OAAO,EAAE,MAAM,EAAE,UAAU,MAAM,OAAO;KACxC,WAAW,MAAM,gBAAgB,EAAE,SAAS,MAAM,cAAc,IAAI,MAAM,YAAY,SAAS,MAAM,QAAQ,IAAI,EAAE,MAAM,MAAM,SAAS,IAAI;IAChJ;IACA,MAAM,SAAS,KAAK,OAAO,YAAY,UAAU,OAAO,KAAK,OAAO,KAAK;IAGzE,MAAM,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC;IAEjD,MAAM,SADU,MAAM,KAAK,aAAa,QAAQ,CAAC,KAAK,KAAK,MAAM,MAAM,eAAe,EAAE,GAAG,CAAC,IAEtF,CAAC,EAAE,IAAI,KAAK,QAAQ,KAAK,GAAG,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,IACpD,CAAC,CAAC,QAAQ,MAAM,CAAC;IACvB,MAAM,QAAQ,MAAM,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU,GAAG,IAAI;IAClE,MAAM,SAAS,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,WAAW,MAAM,CAAC,IAAI,KAAK;IAC7E,KAAK,MAAM,KAAK,GAAG,MAAM;KACrB,MAAM,QAAQ,UAAU,GAAG,KAAK,YAAY,GAAG,MAAM,GAAG,KAAK,SAAS,KAAK,MAAM;KACjF,IAAI,CAAC,OAAO;KACZ,MAAM,UAAU,KAAK,cAAe,EAAU,WAAW;KACzD,KAAK,MAAM,CAAC,OAAO,SAAS,QAAQ;MAChC,IAAI,SAAS,GAAG;MAChB,MAAM,SAAS;OAAE;OAAO;OAAO,MAAM,GAAG;OAAe,KAAK,KAAK;OAAc,OAAO,GAAG;OAAY,MAAM,KAAK;OAAM,WAAW,KAAK;MAAU;MAChJ,IAAI,SAAS,QAAQ,KAAK,WAAW,QAAQ,MAAM;OAAE;OAAS;OAAQ,OAAO,KAAK,QAAQ,CAAC;MAAE,GAAG,KAAK,IAAI;WACpG,KAAK,WAAW,SAAS,OAAO,KAAK,OAAO,QAAQ,QAAS,IAAI,KAAK,YAAY,QAAQ,QAAS,GAAG,MAAM;OAAE;OAAS;MAAO,GAAG,KAAK,IAAI;KACnJ;IACJ;GACJ;EACJ;CACJ;;;;;CAMA,eAAmC;EAC/B,IAAI,KAAK,OAAO,MAAM,MAAM,EAAE,IAAI,GAAG,OAAO,KAAK;EAEjD,MAAM,YAAY,KAAK,OAAO,QAAQ,MAAM,EAAE,WAAY,EAAE,QAAQ,EAAE,KAAK,MAAM,MAAO,EAAE,MAAM,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,UAAU,IAAI,EAAE;EAClJ,IAAI,UAAU,SAAS,GAAG,OAAO,KAAK;EACtC,MAAM,UAAoB,CAAC;EAC3B,KAAK,MAAM,KAAK,WACZ,IAAI,EAAE,SAAS,EAAE,QAAQ,SAAS,GAAG,MAAM,QAAQ,KAAK;GAAE,GAAG;GAAG,IAAI,MAAM,IAAI,UAAU,EAAE;EAAG,CAAC,CAAC;OAC1F,QAAQ,KAAK;GAAE,MAAM;GAAQ,MAAM,EAAE;GAAO,IAAI;EAAQ,CAAC;EAElE,IAAI,UAAU,QAAQ,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,QAAQ,IAAI,0BAA0B;EAC9F,MAAM,SAAS,UAAU,OAAO,MAAM,EAAE,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,MAAO,EAAE,QAAQ,GAAG,MAAM;GAAC,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE;EAAC,CAAC,IAAI;EAE/L,IAAI,CADS,UAAU,MAAM,MAAM,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,SAAS,EAAE,IAAK,EAClG,GAAM,OAAO,CAAC;GAAE,MAAM;GAAM,QAAQ;GAAM,UAAU;GAAM;GAAQ;EAAQ,CAAC;EAEhF,IAAI,UAAU,MAAM,MAAM,EAAE,OAAO,GAAG,OAAO,KAAK;EAClD,OAAO,CAAC;GAAE,MAAM,MAAM,UAAU,KAAK,MAAM,EAAE,IAAK,CAAC;GAAG,QAAQ,MAAM,UAAU,KAAK,MAAM,EAAE,UAAU,EAAE,IAAK,CAAC;GAAG,UAAU;GAAM,eAAe;GAAS;EAAO,CAAC;CACpK;;;;;CAMA,WAAmB,QAAc,MAAY,OAAiE,MAAuB;EACjI,IAAI,CAAC,KAAK,QAAQ,OAAO,KAAK,KAAK,QAAQ,MAAM,KAAK;EACtD,MAAM,OAAO,MAAM,OAAO,QAAQ;EAElC,MAAM,QAAQ,OAAO,OAAO;EAC5B,MAAM,SAAS,MAAM,OAAO,QAAQ;EACpC,MAAM,OAAmB,CAAC,GAAG,OAAmB,CAAC;EACjD,KAAK,MAAM,KAAK,MAAM;GAClB,IAAI,eAAe,EAAE,GAAG,GAAG;IAEvB,MAAM,QAAQ,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IACjD,IAAI,QAAQ,KAAK,QAAQ,KAAK,KAAK,OAAO;KAAE,GAAG;KAAG,GAAG,EAAE,IAAI,EAAE,KAAK;KAAO,GAAG,EAAE,IAAI,EAAE,KAAK;IAAM,GAAG,QAAQ,OAAO,KAAK,CAAC;IACvH,KAAK,KAAK,WAAW,GAAG,EAAE,GAAG,CAAC;IAC9B;GACJ;GACA,IAAI,QAAQ,KAAK,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;GAC7C,IAAI,EAAE,WAAW,EAAE,QAAQ,QAAQ,KAAK,KAAK,EAAE,QAAQ,UAAU,QAAQ,GAAG,IAAI,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC;EAC7G;EACA,MAAM,IAAI,KAAK,IAAI,MAAM,QAAQ;GAAE,SAAS,MAAM,WAAW;GAAG,OAAO,MAAM,SAAS;EAAS,CAAC;EAChG,MAAM,QAAQ;GAAE,GAAG;GAAO,SAAS;GAAG,OAAO;EAAkB;EAC/D,IAAI,KAAK,QAAQ;GACb,MAAM,IAAI,KAAK,IAAI,MAAM,GAAG,EAAE,MAAM,cAAc,CAAC;GACnD,KAAK,IAAI,SAAS,GAAG;IAAE,MAAM,MAAM,IAAI;IAAG,MAAM;GAAM,CAAC;GACvD,KAAK,KAAK,GAAG,MAAM,KAAK;EAC5B,OAAO,KAAK,KAAK,GAAG,MAAM,KAAK;EAC/B,IAAI,KAAK,QAAQ,KAAK,IAAI,SAAS,GAAG;GAAE,MAAM,MAAM,IAAI;GAAG,MAAM,MAAM,OAAO;EAAM,CAAC;EACrF,OAAO;CACX;CAIA,WAAoF,CAAC;CAErF,aAAa,IAA4B;EACrC,KAAK,SAAS,KAAK;GAAE;GAAI,MAAM,OAAO,KAAK,OAAO,CAAC;GAAG,SAAS,CAAC;EAAE,CAAC;EACnE,KAAK,aAAa;CACtB;CAEA,aAAmB;EACf,MAAM,IAAI,KAAK,SAAS,IAAI;EAC5B,KAAK,aAAa;EAClB,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,QAAQ;EAC7B,MAAM,QAAQ,KAAK,SAAS,KAAK,SAAS,SAAS;EACnD,IAAI,CAAC,OAAO;GACR,KAAK,OAAO,KAAK;IAAE,MAAM;IAAM,QAAQ;IAAM,UAAU;IAAM,QAAQ,cAAc,EAAE,OAAO;IAAG,SAAS,EAAE;GAAQ,CAAC;GACnH;EACJ;EAKA,MAAM,OAAO,KAAK,SAAS,MAAM,IAAI;EACrC,MAAM,KAAK,WAAW,MAAM;EAC5B,MAAM,QAAQ,CAAC,MAAM,QAAQ;EAC7B,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,QAAQ,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK,QAAQ,IAAI,gBAAgB;EACzH,EAAE,QAAQ,SAAS,GAAG,MAAM;GACxB,MAAM,MAAM,EAAE,MAAM;GACpB,MAAM,MAAM,QAAQ,MAAM,MAAM,KAAK,OAAO,QAAQ,KAAK;GACzD,MAAM,QAAQ,KAAK;IAAE,MAAM;IAAQ,MAAM,OAAO,gBAAc,EAAE,MAAO,IAAI,IAAI,EAAE;IAAO,IAAI;GAAI,CAAC;EACrG,CAAC;CACL;;CAGA,SAAiB,MAA8B;EAC3C,MAAM,IAAI,KAAK,OAAO;EACtB,IAAI,CAAC,QAAQ,aAAa,CAAC,GAAG,OAAO;EACrC,OAAO,KAAK,MAAM,CAAC;CACvB;;CAGA,QAAgB,OAAiB;EAC7B,MAAM,IAAI,KAAK,SAAS,KAAK,SAAS,SAAS;EAC/C,MAAM,OAAO,MAAM;EACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,QAAQ;EACjC,MAAM,MAAM,KAAK,SAAS,EAAE,IAAI;EAChC,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,oBAAoB;EAC/C,EAAE,QAAQ,KAAK;GAAE,MAAM;GAAQ,MAAM,MAAM,gBAAc,MAAM,GAAG,IAAI;GAAM,IAAI,EAAE,QAAQ,SAAS,WAAW,EAAE,MAAM;EAAQ,CAAC;CACnI;;CAGA,MAAc;EACV,MAAM,YAAY,KAAK,OAAO,QAAQ,MAAM,EAAE,WAAY,EAAE,QAAQ,EAAE,KAAK,MAAM,MAAO;EACxF,KAAK,aAAa;EAClB,IAAI,CAAC,UAAU,QAAQ;EACvB,MAAM,UAAoB,CAAC;EAC3B,UAAU,SAAS,GAAG,MAAM;GACxB,MAAM,KAAe,IAAI,KAAK,MAAM,UAAU,SAAS,IAAI,QAAQ;GACnE,IAAI,CAAC,EAAE,SAAS;IACZ,QAAQ,KAAK;KAAE,MAAM;KAAQ,MAAM,EAAE;KAAO;IAAG,CAAC;IAChD;GACJ;GACA,IAAI,IAAI,GAAG,KAAK,QAAQ,IAAI,cAAc;GAC1C,EAAE,QAAQ,SAAS,GAAG,MAAM,QAAQ,KAAK;IAAE,GAAG;IAAG,IAAI,MAAM,IAAI,KAAK,EAAE;GAAG,CAAC,CAAC;EAC/E,CAAC;EACD,KAAK,OAAO,KAAK;GAAE,MAAM;GAAM,QAAQ;GAAM,UAAU;GAAM,QAAQ,cAAc,OAAO;GAAG;EAAQ,CAAC;CAC1G;CAIA,QAAqG,CAAC;CACtG,IAAY,eAAwB;EAChC,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,SAAS;EACzC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE;CAC9B;CAEA,UAAU,SAA6B;EACnC,MAAM,OAAO,SAAS,QAAQ;EAC9B,MAAM,MAAM,SAAS;EACrB,MAAM,UAAU,SAAS,WAAY,MAAM,oBAAoB,gBAAkB,MAAM,cAAc;EACrG,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,MAAM,QAAiB,CAAC;EAE7D,MAAM,QAAQ,SAAS,QAAQ,IAAI,IAAY,MAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,QAAQ,KAAK,CAAC,IAAI;EACjH,MAAM,QAAQ,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI;EACjD,KAAK,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC;EACpC,KAAK,MAAM,KAAK;GAAE,QAAQ,SAAS;GAAU,MAAM;GAAM;GAAO;EAAM,CAAC;EACvE,KAAK,aAAa;CACtB;CAEA,YAAkB;EACd,MAAM,IAAI,KAAK,MAAM,KAAK,MAAM,SAAS;EACzC,IAAI,CAAC,GAAG,MAAM;EACd,EAAE,OAAO;EACT,KAAK,MAAM,IAAI;EACf,KAAK,aAAa;CACtB;CAEA,UAAgB;EACZ,MAAM,IAAI,KAAK,MAAM,IAAI;EACzB,IAAI,CAAC,GAAG;EACR,IAAI,EAAE,MAAM,KAAK,MAAM,IAAI;EAC3B,KAAK,MAAM,IAAI;EACf,KAAK,aAAa;CACtB;CACA,QAAyD,CAAC;;CAG1D,SAAiB,MAAyB;EACtC,MAAM,UAAoB,CAAC;EAC3B,KAAK,MAAM,MAAM,KAAK,IAAI,GAAY;GAClC,IAAI,GAAG,SAAS,OAAO;IACnB,IAAI,QAAQ,SAAS,GAAG,QAAQ,QAAQ,SAAS,GAAG,KAAK;IACzD;GACJ;GACA,MAAM,IAAI,QAAQ,EAAE,GAAG;GACvB,IAAI,KAAK,EAAE,MAAM,QAAQ,QAAQ,KAAK;IAAE,MAAM;IAAQ,MAAM;IAAG,IAAI;GAAQ,CAAC;EAChF;EACA,IAAI,CAAC,QAAQ,QAAQ,OAAO;EAC5B,OAAO,QAAQ,MAAM,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,QAAQ,IAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,MAAM,EAAE,IAAK,CAAC,EAAE;CAC1G;CAEA,UAAU,MAAkB;EACxB,MAAM,OAAO,KAAK,SAAS,IAAI;EAC/B,IAAI,CAAC,MAAM;GACP,KAAK,MAAM,KAAK;IAAE,QAAQ;IAAG,MAAM;GAAK,CAAC;GACzC;EACJ;EACA,MAAM,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI;EAEpC,IAAI,aAAa,MAAM,KAAK,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC;OACtD,KAAK,MAAM,KAAK,CAAC;EACtB,KAAK,MAAM,KAAK;GAAE,QAAQ,aAAa,OAAO,IAAI;GAAG;EAAK,CAAC;CAC/D;CAEA,UAAgB;EACZ,MAAM,IAAI,KAAK,MAAM,IAAI,GAAG,UAAU;EACtC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI;CAC/C;CACA,UAA4B,CAAC;;CAG7B,YAAY,GAA4D,QAAiB,MAAc,SAAuB;EAC1H,MAAM,UAAU,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,MAAM;GAAE,GAAG,EAAE,IAAI,EAAE,QAAQ;GAAG,GAAG,EAAE,IAAI,EAAE,SAAS;GAAG,GAAG,EAAE;GAAO,GAAG,EAAE;GAAQ,GAAG;EAAE,EAAE,CAAC;EACjI,MAAM,IAAK,CAAC,UAAU,KAAK,KAAM,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI;EACjF,MAAM,KAAK,CAAC,OAAO,GAAG,KAAK,OAAO;EAClC,MAAM,OAAO,KAAK,IAAI,MAAM,SAAS,EAAE,WAAW;GAAC;GAAG;GAAI,CAAC;GAAI;GAAG,EAAE,IAAI,IAAI,KAAK,KAAK;GAAI,EAAE,IAAI,KAAK,KAAK,IAAI;EAAE,EAAE,CAAC;EACnH,KAAK,MAAM,KAAK,SAAS,IAAI;EAC7B,KAAK,QAAQ,KAAK,CAAC;CACvB;CAEA,YAAkB;EACd,MAAM,IAAI,KAAK,QAAQ,IAAI,KAAK;EAChC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,MAAM,IAAI;CAC/C;CACA,aAAsB,SAAgB,QAAmC,OAAe,QAAsB;EAE1G,IAAI,WAAW,YAAY;EAC3B,KAAK,MAAM,KAAK,SAAS,IAAI,GAAG,SAAS,UAAU,KAAK,YAAY,UAAU,CAAC;EAK/E,IAAI,aAAa,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI;EACpD,IAAI,CAAC,YAAY;GACb,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,KAAK,YAAY;GACtC,aAAa,EAAE,MAAM,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,GAAG,CAAC,EAAE,OAAO,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;EAC/H;EACA,KAAK,KAAK,KAAK,KAAK,YAAY;GAAE;GAAS,WAAW;IAAC,CAAC,QAAQ;IAAG,CAAC,SAAS;IAAG;IAAO;GAAM;GAAG,YAAY,KAAK,QAAQ;EAAE,CAAC;CAChI;CACA,aAA4B,CAAC;CAE7B,YAAoB,OAA0B,QAAuB;EACjE,MAAM,SAAS,KAAK,iBAAiB,KAAK,iBAAiB,SAAS;EACpE,KAAK,MAAM,SAAS,kBAAkB,OAAO,MAAiD,GAC1F,KAAK,aAAa,KAAK,WAAW,KAAA,IAAY,QAAQ;GAAE,GAAG;GAAO;EAAO,CAAC;CAElF;CACA,YAA2B;EAAE,KAAK,QAAQ,IAAI,WAAW;EAAG,OAAO;CAAM;AAC7E;;;ACnnCA,IAAM,QAAgC;CAAE,QAAQ;CAAG,QAAQ;CAAG,SAAS;AAAE;AACzE,IAAM,QAAgC;CAAE,MAAM;CAAG,OAAO;CAAG,QAAQ;CAAG,SAAS;CAAG,OAAO;CAAG,KAAK;AAAE;AACnG,IAAM,SAAiC;CAAE,KAAK;CAAG,QAAQ;CAAG,QAAQ;AAAE;;AAGtE,IAAM,0BAAU,IAAI,QAAoC;AAExD,SAAgB,UAAU,SAAqC;CAC3D,IAAI,KAAK,QAAQ,IAAI,OAAO;CAC5B,IAAI,CAAC,IAAI;EACL,MAAM,SAAU,KAAK,IAAI,OAAO;EAChC,KAAK,MAAM,KAAK,QAAQ,OAAO,OAAO,cAAc,EAAE,OAAO,EAAE,MAAM;EACrE,QAAQ,QAAQ,MAAM,OAAO,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC;EAC7D,QAAQ,IAAI,SAAS,MAAM;CAC/B;CACA,OAAO;AACX;AAEA,SAAgB,YAAY,IAAY,MAAc,UAAkB,YAAoB,aAAa,KAAK,gBAAgB,GAAG,WAA+B;CAC5J,MAAM,CAAC,OAAO,UAAU,GAAG,aAAa,MAAM,UAAU,YAAY,YAAY,eAAe,MAAM,aAAa,aAAa,CAAC;CAChI,OAAO;EAAE;EAAO;CAAO;AAC3B;;AAKA,SAAgB,gBAAgB,IAAY,OAAmD;CAC3F,MAAM,IAAI,mBAAmB,KAAc;CAC3C,IAAI,EAAE,QAAQ,MAAM,OAAO;CAC3B,MAAM,UAAU,EAAE,aAAa;CAC/B,MAAM,OAAO;EAAE,MAAM,OAAO,EAAE,QAAQ,EAAE;EAAG,YAAY,EAAE;EAAY,UAAU,UAAU,MAAM,EAAE;EAAU,YAAY,EAAE;EAAY,WAAW,EAAE;EAAW,eAAe,EAAE;CAAc;CAC5L,MAAM,WAAkB,MAAM,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS,SAAS,EAAE,WAAW,CAAC,IAAI;CAC3F,IAAI,SAAS,MAAM,OAAO,EAAE,KAAK,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,EAAE,YAAY,OAAO,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG,OAAO;CAC1H,MAAM,WAAqB,CAAC;CAC5B,MAAM,OAAiB,CAAC;CACxB,IAAI,OAAO;CACX,KAAK,MAAM,KAAK,UAAU;EACtB,MAAM,SAAS,EAAE,cAAc,KAAK,cAAc;EAClD,IAAI,KAAK,SAAS,QAAQ,MAAM;EAChC,IAAI,KAAK,GAAG,KAAK,SAAS,KAAK,MAAM,IAAI;EACzC,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE;EAC7B,QAAQ;EACR,KAAK,KAAK,EAAE,QAAQ,EAAE,YAAY,KAAK,UAAU,EAAE,cAAc,KAAK,cAAc,KAAK,MAAM,EAAE,aAAa,KAAK,aAAa,aAAa,GAAG,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,EAAE;CAClM;CACA,MAAM,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,UAAU;CACjD,MAAM,OAAO,GAAG,WACZ,MAAM,IAAI,aAAa,IAAI,GAAG,SAAS,KAAK,IAAI,GAChD,UAAU,MAAM,KAAK,UAAU,EAAE,eAAe,GAAG,EAAE,cAAc,GACnE,MAAM,EAAE,aAAa,aAAa,GAAG,OAAO,EAAE,iBAAiB,aAAa,GAC5E,CAAC,CAAC,EAAE,QAAQ,QAAQ,GAAG,OAAO,MAClC;CACA,IAAI,CAAC,KAAK,QAAQ,OAAO;CACzB,MAAM,QAAkC,CAAC;CACzC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;EAC9B,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC;EAC3D,MAAM,KAAK;GAAE;GAAO;GAAK;GAAK;GAAQ,QAAQ,MAAM,KAAK,KAAK,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;EAAE,CAAC;EAC3F,KAAK,IAAI;CACb;CACA,OAAO;EAAE;EAAO,OAAO,KAAK;EAAI,QAAQ,KAAK;CAAG;AACpD;;;;ACzCA,IAAM,iBAAiB;AACvB,IAAM,qBAAqB;;AAE3B,IAAM,iBAAiB;AAEvB,IAAM,4BAAY,IAAI,IAAgC;AACtD,IAAM,0BAAU,IAAI,IAAiB;AACrC,IAAM,0BAAU,IAAI,QAAgB;AACpC,IAAM,aAAuB,CAAC;AAC9B,IAAI,YAAY;AAChB,IAAI,UAAyB;AAC7B,IAAI,cAAc;;AAGlB,SAAgB,YAAY,UAAkD;CAC1E,UAAU,IAAI,QAAQ;CACtB,aAAa,UAAU,OAAO,QAAQ;AAC1C;;AAGA,SAAgB,eAA8B;CAC1C,OAAO;AACX;AAEA,SAAgB,eAAe,QAAiC;CAC5D,WAAW;CACX,QAAQ,IAAI,MAAM;CAClB,IAAI,YAAY,MAAM;EAClB,OAAO,WAAW,WAAW,OAAO,CAAC;EACrC,OAAO,KAAK;CAChB;CACA,aAAa,QAAQ,OAAO,MAAM;AACtC;;AAGA,SAAgB,YAAY,QAAuB;CAC/C,MAAM,IAAI;CACV,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG;CAC1B,QAAQ,IAAI,CAAC;CACb,EAAE,mBAAmB,oBAAoB,MAAa,eAAgB,EAA4E,KAAK,CAAC;CACxJ,EAAE,KAAK,MAAM,SAAS,WAAW,KAAK,UAAU,WAAW,KAAK,WAAW,EAAE,CAAC;AAClF;AAOA,SAAS,KAAK,OAAwB;CAClC,KAAK,MAAM,KAAK,CAAC,GAAG,SAAS,GACzB,IAAI;EACA,EAAE,KAAK;CACX,SAAS,GAAG;EACR,QAAQ,MAAM,kCAAkC,CAAC;CACrD;AAER;AAEA,SAAS,UAAU,OAA0B;CACzC,KAAK,MAAM,KAAK,SAAS,EAAE,WAAW,KAAK;AAC/C;AAEA,SAAS,eAAe,OAAiE;CACrF,IAAI,EAAE,YAAY,gBAAgB;CAClC,MAAM,OAAO,OAAO,aAAa,QAAQ;CACzC,MAAM,OAAO,SAAS,wBAAwB,kBAAkB,SAAS,qBAAqB,aAAa;CAC3G,MAAM,UAAU,UAAU,KAAK,UAAU,OAAO,WAAW,OAAO,KAAK;CACvE,UAAU;EAAE,MAAM;EAAO,SAAS,OAAO;EAAQ;CAAQ,CAAC;CAC1D,KAAK;EAAE,MAAM;EAAa,OAAO;EAAM;CAAQ,CAAC;AACpD;AAEA,SAAS,WAAW,QAAgB,QAAsB;CACtD,IAAI,YAAY,MAAM;CACtB,aAAa;CACb,MAAM,MAAM,YAAY,IAAI;CAC5B,OAAO,WAAW,UAAU,MAAM,WAAW,KAAK,oBAAoB,WAAW,MAAM;CACvF,MAAM,UAAU,4BAA4B,SAAS,SAAS,KAAK,WAAW,GAAG;CACjF,KAAK;EAAE,MAAM;EAAe;EAAQ;CAAQ,CAAC;CAC7C,IAAI,WAAW,UAAU,gBAAgB;EACrC,MAAM,6FAAiH;EACvH;CACJ;CACA,WAAW,KAAK,GAAG;CACnB,UAAU;EAAE,MAAM;EAAe;CAAQ,CAAC;CAC1C,KAAK,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,QAAQ;CACxC,cAAc,EAAE,WAAW,KAAK,EAAE,MAAM,kBAAkB,CAAC,IAAI,MAAM,MAAM,+BAA+B,OAAQ,GAAa,WAAW,CAAC,GAAG,CAAC;AACnJ;AAEA,SAAS,WAAW,SAA8B;CAC9C,OAAO;EAAE,MAAM;EAAW;CAAQ;AACtC;;;;;;AAOA,SAAS,MAAM,SAAuB;CAClC,IAAI,YAAY,MAAM;CACtB,UAAU;CACV,qBAAqB;EACjB,UAAU,WAAW,OAAO,CAAC;EAC7B,KAAK,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,KAAK;EACrC,KAAK;GAAE,MAAM;GAAW;EAAQ,CAAC;CACrC,CAAC;AACL;AAEA,SAAS,aAAmB;CACxB,IAAI,aAAa;CACjB,cAAc;CACd,oBAAoB,YAAoB,MAAM,kFAAkF,SAAS,CAAC;AAC9I;;;;ACzHA,IAAM,2BAAW,IAAI,IAAY;;AAGjC,IAAM,YAAY;;AAGlB,IAAM,gBAAwC;CAC1C,aAAa;CACb,WAAW;CACX,kBAAkB;CAClB,sBAAsB;CACtB,gBAAgB;CAChB,4BAA4B;CAC5B,6BAA6B;CAC7B,iBAAiB;CACjB,UAAU;CACV,eAAe;CACf,OAAO;CACP,SAAS;CACT,WAAW;CACX,OAAO;AACX;AAEA,SAAS,eAAe,MAAsB;CAC1C,IAAI,cAAc,OAAO,OAAO,GAAG,cAAc,MAAM;CACvD,MAAM,SAAS,OAAO,KAAK,aAAa,EAAE,QAAQ,MAAM,EAAE,SAAS,GAAG,KAAK,KAAK,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;CACnI,OAAO,SAAS,GAAG,cAAc,QAAQ,IAAI,KAAK,MAAM,OAAO,MAAM,EAAE,0CAA0C,qCAAqC,KAAK;AAC/J;AAEA,IAAa,qBAAb,cAAwC,kBAAkB;CA8BzB;CA7B7B,OAA+C;EAAE,MAAM;EAAG,GAAG;EAAG,GAAG;CAAE;CACrE,QAAuB;CACvB,cAAc;CACd,kBAA2C;CAE3C,SAA2C;;;;;;;CAO3C,OAAe;EAAE,OAAO;EAAG,QAAQ;CAAE;CACrC,UAAsC;CACtC,WAAyC;;CAEzC,cAAsB;CACtB,aAAoC;CACpC,UAA8B;CAC9B,cAAsB;CACtB;CACA;CACA;CACA;;CAEA,SAAgC,CAAC;;CAEjC,SAAiB;CAEjB,YAAY,OAA4C,UAAkB;EACtE,MAAM,SAAS,UAAU,KAAK;EAC9B,MAAM,SAAS,OAAO,SAAS,SAAS,MAAM,MAAM,QAAQ,QAAQ,SAAS,UAAU,YAAY,QAAQ,MAAM,MAAM,QAAQ,QAAQ,SAAS,KAAK,CAAC;EAF7H,KAAA,QAAA;EAGzB,KAAK,SAAS;EACd,KAAK,UAAU;EACf,KAAK,SAAS,MAAM;EACpB,KAAK,YAAY,MAAM,QAAQ,MAAM,KAAK,SAAS,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;EAGlF,KAAK,aAAa,MAAM,iBAAiB;GACrC,IAAI,KAAK,YAAY,CAAC,KAAK,aAAa,OAAO,KAAK,SAAS,YAAY,CAAC,CAAC;GAC3E,OAAO,KAAK,SAAS,QAAQ,WAAW,IAAI,KAAK,QAAQ,iBAAiB,IAAI;EAClF,CAAC;EACD,KAAK,aAAa,eAAe;GAC7B,aAAa,UAAU,KAAK,OAAO,KAAK,KAAK;GAC7C,eAAe,KAAK,QAAQ;GAC5B,YAAY,KAAK,KAAK;EAC1B,CAAC;CACL;;CAGA,QAAuC;EACnC,OAAO,KAAK,SAAS,MAAM,KAAK;CACpC;CAEA,MAAM,QAAuB;EACzB,MAAM,SAAS;EACf,KAAK,OAAO;GAAE,OAAO,KAAK,IAAI,GAAG,OAAO,KAAK;GAAG,QAAQ,KAAK,IAAI,GAAG,OAAO,MAAM;EAAE;EACnF,IAAI,WAAW,KAAK,WAAW,KAAK,WAAW,KAAK,WAAW;GAE3D,KAAK,QAAQ;GACb;EACJ;EACA,KAAK,eAAe;EACpB,KAAK,SAAS;EACd,IAAI,KAAK,UAAU,aAAa,MAAM,MAAM;EAC5C,MAAM,QAAQ,CAAC;EACf,KAAK,aAAa;EAClB,KAAK,cAAc;EACnB,MAAM,WAAY,KAAK,YAAY,YAAY;GAC3C,MAAM,UAAU,IAAI,YAAY;GAChC,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM;GAC5D,IAAI,KAAK,eAAe,OAAO;IAC3B,IAAI,CAAC,KAAK,QAAQ,QAAQ,QAAQ;IAClC;GACJ;GACA,YAAY,QAAQ,UAAU,CAAC;GAG/B,QAAQ,WAAW,OAAO,KAAK;GAE/B,QAAQ,gBAAgB;GAExB,QAAQ,sBAAsB,KAAK,QAAQ;GAC3C,KAAK,MAAM,KAAK,KAAK,MAAM,OAAO,QAAQ,aAAa,EAAE,OAAO,EAAE,MAAM;GACxE,KAAK,UAAU;GACf,KAAK,WAAW;GAChB,KAAK,QAAQ;EACjB,GAAG;EACH,SAAS,OAAO,MAAM;GAClB,IAAI,KAAK,aAAa,UAAU,KAAK,cAAc;GACnD,QAAQ,MAAM,wCAAwC,CAAC;EAC3D,CAAC;CACL;;CAGA,cAA6B;EACzB,OAAO,KAAK,YAAY,QAAQ,QAAQ;CAC5C;CAEA,UAAgB;EACZ,KAAK,eAAe;EACpB,KAAK,SAAS;CAClB;CAEA,QAAQ,UAA4B;EAEhC,IAAI,CADW,KAAK,UACL,KAAK,WAAW,GAAG;EAClC,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK;EACpC,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK;EACtC,IAAI;GACA,MAAM,QAAQ,QAAQ;EAC1B,UAAU;GACN,KAAK,UAAU,KAAK;GACpB,KAAK,QAAQ;GACb,KAAK,MAAM,QAAQ,KAAK,SAAS;IAC7B,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,SAAS,cAAc,GAAG;IACzD,SAAS,IAAI,IAAI;IACjB,QAAQ,KAAK,yBAAyB,MAAM;GAChD;EACJ;CACJ;;;;;;CAOA,mBAA2C;EACvC,MAAM,sBAAM,IAAI,IAAyB;EACzC,MAAM,OAAO,UAAuB,IAAI,IAAI,eAAe,KAAK,GAAG,KAAK;EACxE,KAAK,MAAM,SAAS,KAAK,OAAO,OAAO,CAAC,GAAG,IAAI,KAAK;EACpD,MAAM,UAAU,KAAK,SAAS,OAAO,KAAK;EAC1C,KAAK,MAAM,WAAW,SAAS,gBAAgB,CAAC,GAC5C,IAAI;GAAE,MAAM;GAAU,GAAI,YAAA,mJAA2B,EAAE,SAAS,qBAAqB;GAAI;EAAQ,CAAC;EAEtG,SAAS,aAAa,MAAM;EAC5B,KAAK,MAAM,SAAS,KAAK,cAAc,IAAI,KAAK;EAChD,KAAK,MAAM,QAAQ,KAAK,SAAS;GAC7B,IAAI,UAAU,KAAK,IAAI,GAAG;GAC1B,MAAM,QAAqB,SAAS,qBAC9B;IAAE,MAAM;IAAU,SAAS;IAAM,SAAS;GAAU,IACpD;IAAE,MAAM;IAAW,SAAS;IAAM,SAAS,eAAe,IAAI;GAAE;GACtE,MAAM,QAAQ,KAAK,QAAQ,MAAM,IAAI,IAAI;GACzC,IAAI,CAAC,OAAO,MAAM,IAAI,KAAK;QACtB,KAAK,MAAM,UAAU,OAAO,IAAI;IAAE,GAAG;IAAO;GAAO,CAAC;EAC7D;EACA,KAAK,MAAM,QAAQ,SAAS,WAAW,CAAC,GAAG,IAAI;GAAE,MAAM;GAAW,SAAS,UAAU;GAAQ,SAAS,eAAe,UAAU,MAAM;EAAE,CAAC;EACxI,KAAK,MAAM,QAAQ,SAAS,aAAa,CAAC,GAAG,IAAI;GAAE,MAAM;GAAW,SAAS,MAAM;GAAQ,SAAS,eAAe,MAAM,MAAM;EAAE,CAAC;EAClI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC;CAC3B;;CAGA,mBAAkC;EAC9B,OAAO,KAAK,SAAS,iBAAiB,KAAK,QAAQ,QAAQ;CAC/D;CAEA,gBAAyB,OAAmD;EACxE,OAAO,gBAAgB,KAAK,QAAQ,KAAK;CAC7C;;CAGA,WAAW,OAAO,aAAa,SAAsC;EACjE,OAAO,KAAK,eAAe,GAAG,UAAU,MAAM,OAAO;CACzD;;;;;CAMA,iBAAgD;EAC5C,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,UAAU,CAAC,KAAK,WAAW,CAAC,KAAK,SAAS,OAAO,KAAA;EACtD,KAAK,QAAQ;EACb,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK;GAAC;GAAG;GAAG,OAAO;GAAO,OAAO;EAAM;EACrD,IAAI,KAAK,OAAO;GACZ,MAAM,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK;GAC1C,MAAM,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK,IAAI;GACvF,MAAM,KAAK,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,MAAM,SAAS,IAAI;GACnE,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC;GACvC,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC;GACvC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,QAAQ,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;GAC1D,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,SAAS,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;EAC/D;EACA,MAAM,MAAM,SAAS,cAAc,QAAQ;EAC3C,IAAI,QAAQ;EACZ,IAAI,SAAS;EACb,MAAM,MAAM,IAAI,WAAW,IAAI;EAC/B,IAAI,CAAC,KAAK,OAAO,KAAA;EACjB,IAAI,UAAU,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC5C,OAAO;CACX;CAEA,UAAyB;EACrB,KAAK,eAAe;EACpB,KAAK,UAAU;EACf,KAAK,WAAW;EAChB,KAAK,WAAW;EAChB,KAAK,SAAS;EACd,KAAK,UAAU;EACf,KAAK,MAAM,QAAQ;EACnB,MAAM,QAAQ;CAClB;CAEA,gBAA0C;EACtC,MAAM,IAAI,KAAK,KAAK;EACpB,OAAO;GAAC;GAAG;GAAG;GAAG;GAAG,KAAK,QAAQ,IAAI,KAAK,KAAK;GAAG,KAAK,SAAS,IAAI,KAAK,KAAK;EAAC;CACnF;CAEA,aAAkE;EAE9D,OAAO,KAAK,QAAQ;GAAC;GAAG;GAAG;GAAG;EAAC,IAAI;GAAC;GAAG;GAAG;GAAG;EAAC;CAClD;CAEA,WAA8B,MAAkB;EAC5C,MAAM,QAAQ,KAAK;EACnB,IAAI,CAAC,OAAO,OAAO;EACnB,MAAM,MAAM;GAAE,GAAG,CAAC,MAAM,QAAQ;GAAG,GAAG,CAAC,MAAM,SAAS;GAAG,GAAG,MAAM;GAAO,GAAG,MAAM;EAAO;EACzF,IAAI,KAAK,oBAAoB,SACzB,KAAK,IAAI,KAAK,MAAM;GAAE,WAAW;IAAC;IAAG;IAAG;IAAG;IAAG,IAAI;IAAG,IAAI;GAAC;GAAG,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG,MAAM;IAAE,MAAM;IAAS,OAAO;KAAC;KAAG;KAAG;KAAG;IAAC;GAAE;EAAE,CAAC;EAEnI,OAAO,KAAK,cAAc,KAAK,IAAI,MAAM,MAAM,EAAE,MAAM;GAAE,GAAG;GAAK,GAAG;EAAE,EAAE,CAAC,IAAI;CACjF;;CAGA,UAAwB;EACpB,MAAM,UAAU,KAAK,SAAS,SAAS,KAAK,QAAQ,MAAM,KAAK;EAC/D,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ;EAChD,MAAM,EAAE,OAAO,WAAW,KAAK;EAI/B,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,MAAM,GAAG,IAAI,WAAW,KAAK,GAAG;EACtE,IAAI,QAAQ,KAAK,eAAe,OAAO,UAAU,SAAS,OAAO,WAAW,QAAQ;GAChF,QAAQ,OAAO,OAAO,MAAM;GAC5B,KAAK,cAAc;EACvB;EACA,IAAI;GACA,QAAQ,KAAK,GAAG;GAChB,QAAQ,OAAO;EACnB,SAAS,GAAG;GACR,QAAQ,MAAM,wBAAwB,CAAC;EAC3C;CACJ;CAEA,iBAA+B;EAC3B,KAAK,WAAW;EAChB,KAAK,aAAa;EAClB,IAAI,CAAC,KAAK,QAAQ,KAAK,SAAS,QAAQ;EACxC,KAAK,UAAU;EACf,KAAK,cAAc;CACvB;;CAGA,UAAwB;EACpB,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,UAAU,KAAK,WAAW,KAAK,KAAK,QAAQ;EACjD,KAAK,eAAe;EACpB,KAAK,MAAM,MAAM;CACrB;;CAGA,OAAqB;EACjB,KAAK,SAAS;EACd,KAAK,eAAe;CACxB;AACJ;;;;;;;ACxSA,eAAsB,eAAe,OAAoB,QAAgB,SAA+C;CACpH,MAAM,iBAAiB,OAAO;CAC9B,OAAO,iBAAS,OAAO,MAAM;AACjC;;;;;AAMA,IAAa,eAA4C;CACrD,MAAM;;;;;;;;;;;;;;CAcN,QAAQ;;;;;;;;;;;;;;;;;;AAkBZ;AA+BA,IAAM,QAAQ;AACd,IAAM,SAAS;;AAEf,IAAM,QAAoC;CAAC;EAAC;EAAM;EAAM;CAAG;CAAG;EAAC;EAAM;EAAK;CAAG;CAAG;EAAC;EAAM;EAAM;CAAI;AAAC;;;;;;AAOlG,IAAa,gBAAb,MAAa,cAAc;CAQc;CAAuC;;CAN5E,SAA8B;CAC9B,OAA0C;CAC1C,yBAAiB,IAAI,QAA6B;CAClD,UAAkB;CAClB,OAAe;CAEf,YAAoB,SAAuC,QAA8D;EAApF,KAAA,UAAA;EAAuC,KAAA,SAAA;CAA8C;CAE1H,aAAa,OAAO,QAA6C,SAAgD;EAC7G,MAAM,iBAAiB,OAAO;EAC9B,MAAM,UAAU,IAAI,YAAY;EAChC,MAAM,QAAQ,KAAK,QAA6B,KAAK,IAAI,GAAG,OAAO,KAAK,GAAG,KAAK,IAAI,GAAG,OAAO,MAAM,CAAC;EACrG,QAAQ,WAAW,OAAO,KAAK;EAC/B,QAAQ,gBAAgB;EACxB,MAAM,UAAU,IAAI,cAAc,SAAS,MAAM;EACjD,QAAQ,sBAAsB;GAC1B,IAAI,CAAC,QAAQ,MAAM;GACnB,QAAQ,KAAK,QAAQ,IAAI;GACzB,QAAQ,SAAS;EACrB;EACA,OAAO;CACX;;CAGA,KAAK,OAAyC;EAC1C,KAAK,OAAO;EACZ,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,MAAM;EAC5E,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK;GAC3B,KAAK,QAAQ,OAAO,GAAG,CAAC;GACxB,KAAK,OAAO,GAAG,EAAE,GAAG;EACxB;EACA,MAAM,MAAM,KAAK,MAAM,OAAO,GAAG,CAAC;EAClC,KAAK,QAAQ,KAAK,GAAG;EACrB,KAAK,QAAQ,OAAO;EACpB,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,MAAM;CAChD;;CAGA,MAAM,OAAO,OAA+C;EACxD,KAAK,KAAK,KAAK;EACf,MAAM,KAAK,UAAU;EACrB,KAAK,KAAK,KAAK;EACf,MAAM,KAAK,MAAM,KAAK,QAAQ,WAAW;EACzC,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,MAAM;EAC5E,MAAM,MAAM,kBAAkB,KAAK,GAAG,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC;EAC5D,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;GACpC,MAAM,IAAI,IAAI,IAAI;GAClB,IAAI,MAAM,KAAK,MAAM,KAAK;GAC1B,IAAI,KAAM,IAAI,KAAK,MAAO;GAC1B,IAAI,IAAI,KAAM,IAAI,IAAI,KAAK,MAAO;GAClC,IAAI,IAAI,KAAM,IAAI,IAAI,KAAK,MAAO;EACtC;EACA,OAAO,IAAI,UAAU,KAAK,GAAG,CAAC;CAClC;;CAGA,MAAM,SAAS,OAA2B,OAAO,aAAa,SAAiC;EAC3F,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK;EACrC,MAAM,MAAM,IAAI,gBAAgB,MAAM,OAAO,MAAM,MAAM;EACzD,IAAI,WAAW,IAAI,EAAG,aAAa,OAAO,GAAG,CAAC;EAC9C,OAAO,IAAI,cAAc;GAAE;GAAM;EAAQ,CAAC;CAC9C;;CAGA,YAA2B;EACvB,OAAO,KAAK,QAAQ,iBAAiB;CACzC;;CAGA,OAAO,OAAoB,QAA8B;EACrD,IAAI,CAAC,OAAO,KAAK,GAAG,OAAO;GAAE,OAAO;GAAS,aAAa,CAAC;EAAE;EAC7D,MAAM,IAAI,KAAK,QAAQ,QAAQ,QAAQ,OAAO,MAAM;EACpD,OAAO;GAAE,OAAO,EAAE;GAAO,aAAa,CAAC,GAAG,EAAE,OAAO,aAAa,GAAG,EAAE,OAAO;EAAE;CAClF;CAEA,UAAgB;EACZ,KAAK,QAAQ,gBAAgB,KAAA;EAC7B,KAAK,QAAQ,QAAQ;EACrB,KAAK,OAAO;CAChB;CAEA,MAAc,OAA2B,GAAW,GAAgB;EAChE,MAAM,MAAM,IAAI,IAAI,GAAG,GAAG;GAAC;GAAG;GAAG;GAAG;EAAC,CAAC;EACtC,MAAM,OAAO,IAAI;EACjB,MAAM,WAAW,WAAkB,MAAM,QAAQ,KAAK,MAAM,KAAK,QAAQ,MAAM,OAAO,GAAG,CAAC,IAAI,QAAQ,KAAK,QAAQ,GAAG,CAAC;EACvH,MAAM,QAAQ,MAAM,SAAS,OAAO,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI;EAChF,IAAI,MAAM,UAAU,QAAQ;GACxB,IAAI,MAAM,OAAO,QAAQ,IAAI;GAC7B,MAAM,QAAe;IACjB,MAAM;IAAU,QAAQ,MAAM;IAAQ,UAAU,MAAM;IACtD,KAAK;KAAC;KAAG;KAAG;KAAG;IAAC;IAAG,MAAM,MAAM;IAAM,GAAI,MAAM,UAAU,EAAE,SAAS,KAAK,MAAM,KAAK,MAAM,OAAO,EAAE,IAAI,CAAC;GAC5G;GACA,MAAM,OAAO,QAAQ,IAAI,IAAI,MAAM,MAAM,EAAE,MAAM;IAAE,GAAG;IAAO,GAAG;IAAG,GAAG,IAAI;IAAO;IAAG,GAAG;GAAE,EAAE,CAAC,IAAI;GAChG,IAAI,KAAK,MAAM;IAAE;IAAG;IAAG,MAAM;GAAM,CAAC;GACpC,OAAO;EACX;EACA,QAAQ,IAAI;EACZ,MAAM,QAAQ,KAAK,IAAI,GAAG,CAAC;EAC3B,MAAM,QAAQ,MAAM,UAAU;EAC9B,MAAM,IAAI,QAAQ,QAAQ,QAAQ;EAClC,MAAM,MAAM;GAAE,GAAG;GAAG,GAAG;GAAG,GAAG,IAAI,IAAI;GAAG,GAAG,IAAI,IAAI;GAAG,GAAG,QAAQ,QAAQ,SAAS;EAAE;EACpF,MAAM,SAAS;GACX,MAAM;GAAU,UAAU;GAAQ,QAAQ,MAAM;GAAQ,UAAU,MAAM;GACxE,MAAM,MAAM,WAAW,aAAa;GACpC,GAAI,MAAM,aAAa,CAAC,MAAM,WAAW,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;GAC3E,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;EAChD;EACA,MAAM,OAAO,QAAQ,IAAI,IAAI,MAAM,MAAM,EAAE,MAAM;GAAE,GAAG;GAAO,GAAG;GAAG,GAAG,IAAI;GAAO;GAAG,GAAG;EAAE,EAAE,CAAC,IAAI;EAChG,MAAM,YAA8C;GAAC,IAAI;GAAG,IAAI;GAAG,IAAI;GAAG,IAAI;EAAC;EAC/E,IAAI,MAAM,UACN,IAAI,KAAK,MAAM;GAAE,WAAW;IAAC;IAAG;IAAG;IAAG;IAAG,IAAI;IAAG,IAAI;GAAC;GAAG,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG,OAAO;IAAC,IAAI;IAAG,IAAI;IAAG,IAAI;IAAG,IAAI;GAAC;GAAG,SAAS,CAAC,MAAM;GAAG,WAAW;IAAC;IAAG;IAAG,IAAI;IAAG,IAAI;GAAC;GAAG,YAAY,MAAM;EAAK,CAAC;OAG7L,QADU,IAAI,MAAM,MAAM;GAAE,MAAM;GAAK,SAAS,CAAC,MAAM;GAAG;GAAW,YAAY,MAAM;EAAK,CACpF,CAAC;EAEb,OAAO;CACX;CAEA,MAAc,KAAU,QAAqB;EACzC,MAAM,IAAI,IAAI,SAAS,QAAQ,OAAO,OAAO,OAAO,QAAQ,EAAE,SAAS,MAAM,CAAC;EAC9E,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM;EAC9B,IAAI,MAAM,KAAA,GAAW,KAAK,OAAO,IAAI,QAAS,IAAI,EAAE,KAAK,OAAQ;EACjE,EAAE,UAAU;EACZ,OAAO;CACX;CAEA,MAAc,KAAU,QAAc,QAAqB,GAAW,GAAW;EAC7E,IAAI,KAAK,QAAQ;GAAE;GAAG;GAAG,MAAM;IAAE,MAAM;IAAS,OAAO,KAAK,MAAM,KAAK,MAAM;IAAG,KAAK;IAAQ,KAAK;KAAC;KAAG;KAAG;KAAG;IAAC;GAAE;EAAE,CAAC;CACtH;AACJ;;;;;;AAOA,SAAS,QAAQ,KAAU,QAAc,GAAW,GAAW;CAC3D,IAAI,KAAK,QAAQ;EAAE;EAAG;EAAG,MAAM;GAAE,MAAM;GAAU,MAAM,CAAC,GAAG,CAAC;GAAG,IAAI,CAAC,GAAG,CAAC;GAAG,OAAO,CAAC;IAAE,QAAQ;IAAG,OAAO;KAAC;KAAM;KAAK;KAAM;IAAC;GAAE,GAAG;IAAE,QAAQ;IAAG,OAAO;KAAC;KAAM;KAAM;KAAM;IAAC;GAAE,CAAC;EAAE;CAAE,CAAC;CAC/K,MAAM,QAAQ,KAAK,IAAI,GAAG,CAAC;CAC3B,MAAM,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM,QAAQ,EAAE,CAAC;CAChD,MAAM,OAAO;EAAE,MAAM;EAAkB,OAAO;GAAC;GAAG;GAAG;GAAG;EAAG;CAAsC;CACjG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,QAAQ;EAAE,WAAW;GAAC;GAAG;GAAG;GAAG;GAAG,IAAI;GAAK;EAAC;EAAG,GAAG;EAAG;EAAG,MAAM;CAAK,CAAC;CAClH,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,QAAQ;EAAE,WAAW;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG,IAAI;EAAG;EAAG;EAAG,GAAG;EAAG,MAAM;CAAK,CAAC;CAClH,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,QAAQ;CAC1C,MAAM,SAAS,GAAG,MAAM;EACpB,MAAM,IAAI,CAAC,KAAK,KAAK,IAAK,IAAI,IAAI,KAAK,KAAM,MAAM;EACnD,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,QAAQ,KAAM,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,QAAQ;EAC1E,IAAI,QAAQ,QAAQ;GAAE,WAAW;IAAC;IAAG;IAAG;IAAG;IAAG,IAAI;IAAG,IAAI;GAAC;GAAG,GAAG,IAAI;GAAG,GAAG,IAAI;GAAG,MAAM;IAAE,MAAM;IAAS,OAAO,CAAC,GAAG,GAAG,CAAC;GAAE;EAAE,CAAC;CAChI,CAAC;CACD,MAAM,OAAO,QAAQ;CACrB,IAAI,QAAQ,QAAQ;EAAE,WAAW;GAAC;GAAG;GAAG;GAAG;GAAG,KAAK;GAAM,KAAK;EAAI;EAAG,GAAG,IAAI;EAAM,GAAG,IAAI;EAAM,QAAQ;GAAE,OAAO;IAAE,MAAM;IAAS,OAAO;KAAC;KAAG;KAAG;KAAG;IAAI;GAAE;GAAG,OAAO,KAAK,IAAI,KAAK,QAAQ,EAAE;EAAE;CAAE,CAAC;AACnM;;;;AC5NA,eAAsB,kBAAoC;CACtD,MAAM,MAAO,UAA2E;CACxF,IAAI,CAAC,KAAK,OAAO;CACjB,IAAI;EACA,OAAQ,MAAM,IAAI,eAAe,KAAM;CAC3C,QAAQ;EACJ,OAAO;CACX;AACJ;;;;;AAMA,eAAsB,mBAAmB,UAA+B,CAAC,GAA0B;CAC/F,MAAM,iBAAiB,QAAQ,OAAO;CAGtC,cAAc,EAAE,YAAY,CAAC,CAAC;CAC9B,MAAM,EAAE,cAAc;CACtB,OAAO;EACH,qBAAqB,EAAE,SAAS,UAAU,OAAyC;GAC/E,OAAO,IAAI,mBAAmB,SAAS,UAAU,KAAK,SAAS;EACnE;EACA,oBAAoB,SAAiD;GACjE,OAAO,IAAI,mBAAmB,SAAS,QAAQ,IAAI;EACvD;EACA,qBAAqB,SAA+C;GAChE,MAAM,SAAS,UAAU,OAAO;GAChC,OAAO,EAAE,cAAc,GAAG,SAAS,YAAY,QAAQ,GAAG,IAAI,EAAE;EACpE;CACJ;AACJ"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../web/src/doc.ts","../web/src/adapter/driver.ts","../web/src/adapter/geometry/image-matrix.ts","../web/src/adapter/paint.ts","../web/pkg/ms_renderer.js","../web/src/user-shaders.ts","../web/src/adapter/shader-params.ts","../web/src/adapter/path-measure.ts","../web/src/adapter/svg-path.ts","../web/src/adapter/geometry/sink.ts","../web/src/adapter/geometry/base.ts","../web/src/adapter/geometry/ellipse.ts","../web/src/adapter/geometry/line.ts","../web/src/adapter/geometry/path.ts","../web/src/adapter/geometry/polygon.ts","../web/src/adapter/geometry/rect.ts","../web/src/adapter/shapes.ts","../web/src/adapter/geometry/motion-blur.ts","../web/src/adapter/geometry/markers.ts","../web/src/adapter/stroke-ends.ts","../web/src/adapter/context.ts","../web/src/r3d/encode.ts","../web/src/protocol.ts","../web/src/effects/_pack.ts","../web/src/effects/alpha.ts","../web/src/effects/ascii.ts","../web/src/effects/bitCrush.ts","../web/src/effects/blockDisplace.ts","../web/src/effects/bloom.ts","../web/src/effects/blur.ts","../web/src/effects/bulge.ts","../web/src/effects/chromaticAberration.ts","../web/src/effects/colorAdjustment.ts","../web/src/effects/colorMatrix.ts","../web/src/effects/curves.ts","../web/src/effects/directionalBlur.ts","../web/src/effects/dither.ts","../web/src/effects/dropShadow.ts","../web/src/effects/duotone.ts","../web/src/effects/edges.ts","../web/src/effects/exposure.ts","../web/src/effects/glass.ts","../web/src/effects/glow.ts","../web/src/effects/grain.ts","../web/src/effects/grayscale.ts","../web/src/effects/halftone.ts","../web/src/effects/invert.ts","../web/src/effects/kaleidoscope.ts","../web/src/effects/lut.ts","../web/src/effects/magnify.ts","../web/src/effects/oilPaint.ts","../web/src/effects/outline.ts","../web/src/effects/pixelate.ts","../web/src/effects/posterize.ts","../web/src/effects/progressiveBlur.ts","../web/src/effects/radialBlur.ts","../web/src/effects/rgbShift.ts","../web/src/effects/scanlines.ts","../web/src/effects/scatter.ts","../web/src/effects/sharpen.ts","../web/src/effects/streak.ts","../web/src/effects/threshold.ts","../web/src/effects/twirl.ts","../web/src/effects/vignette.ts","../web/src/effects/vintage.ts","../web/src/effects/wave.ts","../web/src/effects/_port.ts","../web/src/backend-wgpu.ts","../web/src/engine/text.ts","../web/src/engine/faults.ts","../web/src/engine/surface.ts","../web/src/native/recorder.ts","../web/src/native/context.ts","../web/src/engine/storage.ts","../web/src/engine/shader-preview.ts","../web/src/engine/index.ts"],"sourcesContent":["import type { DotGridFillResolved, FractalNoiseFillResolved, GridFillResolved, NoiseFillResolved, Scene3D, StripeFillResolved } from \"@motionscript/core\";\n// The document both backends draw: a small Figma-like node tree. It stands in\n// for what core's evaluator hands a renderer each frame (transforms, sizes,\n// paints, the Graphics2D op lists of component renders).\n//\n// Mutations go through `touch`, which records a per-node dirty mask. Only the\n// retained backend reads the masks.\n\nexport type RGBA = [number, number, number, number];\nexport type Mat = [number, number, number, number, number, number];\n/**\n * A projective transform: `Mat`'s a b c d e f plus the perspective row g h i,\n * mapping (x, y) to ((a·x + c·y + e) / w, (b·x + d·y + f) / w) with\n * w = g·x + h·y + i — the engine's Matrix2D [a c e / b d f / g h i].\n */\nexport type Mat3 = [number, number, number, number, number, number, number, number, number];\n/** A node transform: affine (the fast path) or projective. */\nexport type Xform = Mat | Mat3;\n\nexport interface Stop {\n offset: number;\n color: RGBA;\n}\n\nexport type TileMode = \"clamp\" | \"repeat\" | \"mirror\" | \"decal\";\n\n/** An image or video frame the backend samples; `version` bumps when a video frame changes. */\nexport interface ImageAsset {\n id: number;\n width: number;\n height: number;\n /** Null for a 3D scene, which the renderer draws itself. */\n source: ImageBitmap | VideoFrame | HTMLCanvasElement | OffscreenCanvas | null;\n /** A core `Scene3D` drawn into this image at width × height logical px\n * (× the viewport scale): the shape's device size. */\n scene3d?: Scene3D;\n /** Device px per logical px a 3D scene renders at (default: the viewport's). */\n scale3d?: number;\n /** What the 3D scene's textures come from: images by their `src`, and\n * `Tex.surface` textures by descriptor (each a surface asset). */\n links3d?: { images?: Record<string, ImageAsset>; surfaces?: Map<object, ImageAsset> };\n /** A `Tex.surface` source: this detached subtree drawn at width × height\n * px (pixel ratio 1, as the engine's default), origin top-left. */\n surface?: Node;\n mipmaps: boolean;\n version: number;\n}\n\n/** Media fit modes: fill = cover, fit = contain. */\nexport type ImageFit = \"fill\" | \"fit\" | \"stretch\" | \"tile\";\n\nexport type Paint =\n | { kind: \"solid\"; color: RGBA }\n | { kind: \"linear\"; from: [number, number]; to: [number, number]; stops: Stop[]; tile?: TileMode }\n | { kind: \"radial\"; center: [number, number]; radius: number; stops: Stop[]; tile?: TileMode }\n /** Angles in degrees, clockwise from +x (y-down). */\n | { kind: \"sweep\"; center: [number, number]; startAngle: number; endAngle: number; stops: Stop[]; tile?: TileMode }\n /** An image placed in `box` (x, y, w, h, local units) by `fit`. */\n | { kind: \"image\"; image: ImageAsset; fit?: ImageFit; box: [number, number, number, number];\n /** Image px → local, overriding fit/box (adapter/geometry/image-matrix.ts). */\n matrix?: Mat; tile?: TileMode }\n /** One of the engine's procedural fills, resolved by @motionscript/core,\n * over the shape's bounds `box` (x, y, w, h, local units). */\n | { kind: \"procedural\"; fill: ProceduralFill; box: [number, number, number, number] }\n /** A user WGSL fill (DESIGN.md §6.1) over `box` (x, y, w, h, local units):\n * its source, `Params` values by name, the node's elapsed seconds, and the\n * image `sample_texture` reads. */\n | { kind: \"shader\"; source: string; uniforms: Record<string, number | number[]>; box: [number, number, number, number]; time: number; texture?: ImageAsset };\n\nexport type ProceduralFill =\n | DotGridFillResolved | GridFillResolved | StripeFillResolved | NoiseFillResolved | FractalNoiseFillResolved;\n\nexport interface StrokeStyle {\n paint: Paint;\n width: number;\n join?: \"miter\" | \"round\" | \"bevel\";\n cap?: \"butt\" | \"round\" | \"square\";\n miter?: number;\n dash?: number[];\n dashPhase?: number;\n}\n\nexport interface Shadow {\n dx: number;\n dy: number;\n sigma: number;\n spread: number;\n color: RGBA;\n}\n\nexport type Filter =\n | { kind: \"blur\"; sigma: number }\n | { kind: \"dropShadow\"; dx: number; dy: number; sigma: number; color: RGBA };\n\nexport const BLEND_MODES = [\n \"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"colorDodge\", \"colorBurn\",\n \"hardLight\", \"softLight\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\", \"plus\",\n] as const;\nexport type BlendMode = (typeof BLEND_MODES)[number];\n\nexport const VERB = { move: 0, line: 1, quad: 2, cubic: 3, close: 4 } as const;\n\nexport interface PathData {\n verbs: Uint8Array;\n points: Float32Array;\n}\n\nexport type Kind = \"group\" | \"rect\" | \"ellipse\" | \"path\" | \"compound\" | \"text\";\nexport const KIND_CODE: Record<Kind, number> = { group: 0, rect: 1, ellipse: 2, path: 3, compound: 4, text: 5 };\n\nexport interface TextRunSpec {\n text: string;\n family: string;\n size: number;\n weight?: number;\n italic?: boolean;\n letterSpacing?: number;\n decoration?: \"underline\" | \"lineThrough\";\n /** This run's own fill (rich text spans); default: the node's fill. */\n paint?: Paint;\n}\n\n/**\n * A text block, as core's TextState/RichTextState reaches the renderer. The\n * node's local space is block-local: the block is centred on the origin.\n */\nexport interface TextSpec {\n runs: TextRunSpec[];\n align?: \"left\" | \"right\" | \"center\" | \"justify\";\n verticalAlign?: \"top\" | \"center\" | \"bottom\";\n /** Wrap at `width` (when > 0); otherwise `width` only anchors alignment. */\n wrap?: boolean;\n width?: number;\n height?: number;\n /** 0 = the font's own line height, else a multiple of each run's size. */\n lineHeight?: number;\n /** Single-run text: fit the box (`width` × `height`), wrapping at `minFontSize` when `wrap`. */\n fontSize?: \"autofit\";\n minFontSize?: number;\n /** Text on a path (path space = the node's local space; one line). */\n path?: PathData;\n}\n\n/** How a compound member combines with the members before it. */\nexport type MemberOp = \"union\" | \"cut\" | \"intersect\" | \"exclude\";\nexport const MEMBER_OP: Record<MemberOp, number> = { union: 0, cut: 1, intersect: 2, exclude: 3 };\n\n/**\n * One member of a compound shape (core's Graphics2D shape union, a boolean\n * group). Members apply in order: unioned with the result so far, cut out of\n * it, intersected with it or excluded (xor) from it.\n */\nexport interface Member {\n kind: \"rect\" | \"ellipse\" | \"path\";\n /** Shorthand for `op: \"cut\"`. */\n cut?: boolean;\n op?: MemberOp;\n transform?: Mat;\n w?: number;\n h?: number;\n radii?: [number, number, number, number];\n path?: PathData;\n evenOdd?: boolean;\n}\n\n/** `invertAlphaEroded` / `alphaDilated`: the mask shrunk / grown by one device px first. */\nexport type MaskMode = \"alpha\" | \"luminance\" | \"invertAlpha\" | \"invertLuminance\" | \"invertAlphaEroded\" | \"alphaDilated\";\nexport const MASK_CODE: Record<MaskMode, number> = { alpha: 1, luminance: 2, invertAlpha: 3, invertLuminance: 4, invertAlphaEroded: 5, alphaDilated: 6 };\n\nexport const D = {\n CREATE: 1 << 0,\n CHILDREN: 1 << 1,\n TRANSFORM: 1 << 2,\n SIZE: 1 << 3,\n RADII: 1 << 4,\n FILL: 1 << 5,\n STROKE: 1 << 6,\n SHADOWS: 1 << 7,\n OPACITY: 1 << 8,\n BLEND: 1 << 9,\n CLIP: 1 << 10,\n FILTER: 1 << 11,\n PATH: 1 << 12,\n MEMBERS: 1 << 13,\n MASK: 1 << 14,\n TEXT: 1 << 15,\n EFFECTS: 1 << 16,\n ALL: (1 << 17) - 1,\n} as const;\n\nexport class Node {\n children: Node[] = [];\n transform: Xform = [1, 0, 0, 1, 0, 0];\n opacity = 1;\n blend: BlendMode = \"normal\";\n w = 0;\n h = 0;\n radii: [number, number, number, number] = [0, 0, 0, 0];\n fill?: Paint;\n stroke?: StrokeStyle;\n shadows: Shadow[] = [];\n /** Rounded-rect clip, or a path clip when `path` is set (x/y/w/h/r ignored). */\n clip?: { x: number; y: number; w: number; h: number; r: number; path?: PathData; evenOdd?: boolean };\n /** Group mask: the first child masks the rest. */\n mask?: MaskMode;\n members?: Member[];\n text?: TextSpec;\n /** core NodeEffects (built with core's `Effects`), in authored order. */\n effects?: object[];\n /** Seconds the node's effects animate with (its elapsed time). */\n effectTime?: number;\n /** The box effects measure against (local x, y, w, h); default: the content bounds. */\n effectBox?: [number, number, number, number];\n filter?: Filter;\n path?: PathData;\n evenOdd = false;\n dirty = D.ALL;\n\n constructor(readonly id: number, readonly kind: Kind) {}\n}\n\ntype Props = Partial<Omit<Node, \"id\" | \"kind\" | \"children\" | \"dirty\">>;\n\nexport class Doc {\n readonly root: Node;\n readonly nodes: Node[] = [];\n readonly images: ImageAsset[] = [];\n readonly dirty = new Set<Node>();\n private nextId = 0;\n\n constructor(readonly width: number, readonly height: number, readonly background: RGBA) {\n this.root = this.make(\"group\", {});\n }\n\n private make(kind: Kind, props: Props): Node {\n const n = new Node(this.nextId++, kind);\n Object.assign(n, props);\n this.nodes.push(n);\n this.dirty.add(n);\n return n;\n }\n\n add(parent: Node, kind: Kind, props: Props): Node {\n const n = this.make(kind, props);\n parent.children.push(n);\n this.touch(parent, D.CHILDREN);\n return n;\n }\n\n group(parent: Node, props: Props = {}) {\n return this.add(parent, \"group\", props);\n }\n rect(parent: Node, props: Props) {\n return this.add(parent, \"rect\", props);\n }\n ellipse(parent: Node, props: Props) {\n return this.add(parent, \"ellipse\", props);\n }\n pathNode(parent: Node, props: Props) {\n return this.add(parent, \"path\", props);\n }\n compound(parent: Node, props: Props) {\n return this.add(parent, \"compound\", props);\n }\n textNode(parent: Node, props: Props) {\n return this.add(parent, \"text\", props);\n }\n\n addImage(source: ImageAsset[\"source\"], width: number, height: number, opts: { mipmaps?: boolean } = {}): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source, mipmaps: opts.mipmaps ?? true, version: 1 };\n this.images.push(asset);\n return asset;\n }\n\n addScene3D(scene: Scene3D, width: number, height: number, links3d?: ImageAsset[\"links3d\"]): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, scene3d: scene, links3d };\n this.images.push(asset);\n return asset;\n }\n\n /** A group outside the drawn tree, for a surface's content. */\n detached(props: Props = {}): Node {\n return this.make(\"group\", props);\n }\n\n addSurface(root: Node, width: number, height: number): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, surface: root };\n this.images.push(asset);\n return asset;\n }\n\n touch(n: Node, bits: number) {\n n.dirty |= bits;\n this.dirty.add(n);\n }\n\n /** Marks every node fully dirty (a backend attached after the fact). */\n touchAll() {\n for (const n of this.nodes) this.touch(n, D.ALL);\n }\n}\n\n// ── matrices ─────────────────────────────────────────────────────────────────\n\nexport function mat(tx: number, ty: number, rot = 0, scale = 1, px = 0, py = 0): Mat {\n // translate(tx,ty) · rotate(rot) · scale(scale) · translate(-px,-py)\n const c = Math.cos(rot) * scale;\n const s = Math.sin(rot) * scale;\n return [c, s, -s, c, tx - (c * px - s * py), ty - (s * px + c * py)];\n}\n\nexport function translate(x: number, y: number): Mat {\n return [1, 0, 0, 1, x, y];\n}\n\n/** True when `m` carries a perspective row (not 0 0 1). */\nexport function isProjective(m: Xform): m is Mat3 {\n return m.length === 9 && (m[6] !== 0 || m[7] !== 0 || m[8] !== 1);\n}\n\n/** `m` as a row-major 3×3 [a c e / b d f / g h i]. */\nfunction rowMajor(m: Xform): number[] {\n return m.length === 9 ? [m[0], m[2], m[4], m[1], m[3], m[5], m[6], m[7], m[8]] : [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];\n}\n\n/** `p · c` (apply `c` first), projective. */\nexport function mul3(p: Xform, c: Xform): Mat3 {\n const P = rowMajor(p), C = rowMajor(c);\n const r = new Array<number>(9);\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = P[i * 3] * C[j] + P[i * 3 + 1] * C[3 + j] + P[i * 3 + 2] * C[6 + j];\n return [r[0], r[3], r[1], r[4], r[2], r[5], r[6], r[7], r[8]];\n}\n\n/** `p · c`, staying affine (six numbers) when both are. */\nexport function mulX(p: Xform, c: Xform): Xform {\n if (p.length === 9 || c.length === 9) return mul3(p, c);\n return [\n p[0] * c[0] + p[2] * c[1], p[1] * c[0] + p[3] * c[1],\n p[0] * c[2] + p[2] * c[3], p[1] * c[2] + p[3] * c[3],\n p[0] * c[4] + p[2] * c[5] + p[4], p[1] * c[4] + p[3] * c[5] + p[5],\n ];\n}\n\n// ── paths ────────────────────────────────────────────────────────────────────\n\nexport class PathBuilder {\n private verbs: number[] = [];\n private pts: number[] = [];\n moveTo(x: number, y: number) {\n this.verbs.push(VERB.move);\n this.pts.push(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.verbs.push(VERB.line);\n this.pts.push(x, y);\n return this;\n }\n quadTo(x1: number, y1: number, x: number, y: number) {\n this.verbs.push(VERB.quad);\n this.pts.push(x1, y1, x, y);\n return this;\n }\n cubicTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number) {\n this.verbs.push(VERB.cubic);\n this.pts.push(x1, y1, x2, y2, x, y);\n return this;\n }\n close() {\n this.verbs.push(VERB.close);\n return this;\n }\n build(): PathData {\n return { verbs: Uint8Array.from(this.verbs), points: Float32Array.from(this.pts) };\n }\n}\n\n/** Path data mapped through an affine transform (Béziers map control point by control point). */\nexport function transformPath(d: PathData, m: Mat): PathData {\n const pts = new Float32Array(d.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = d.points[i], y = d.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { verbs: d.verbs, points: pts };\n}\n\n/** Control-point bounds of a path: x0 y0 x1 y1. */\nexport function pathBounds(d: PathData): [number, number, number, number] {\n let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity;\n for (let i = 0; i < d.points.length; i += 2) {\n x0 = Math.min(x0, d.points[i]); x1 = Math.max(x1, d.points[i]);\n y0 = Math.min(y0, d.points[i + 1]); y1 = Math.max(y1, d.points[i + 1]);\n }\n return Number.isFinite(x0) ? [x0, y0, x1, y1] : [0, 0, 0, 0];\n}\n\nexport function memberOp(m: Member): MemberOp {\n return m.op ?? (m.cut ? \"cut\" : \"union\");\n}\n\n/**\n * Where an image paint puts the image: image pixel (u, v) lands at local\n * (ox + u·sx, oy + v·sy). Same rules as `computeImageMatrix` for the plain\n * cases: fill covers the box (centred), fit is contained\n * (centred, transparent outside), stretch maps the image onto the box, tile\n * repeats it at its natural size from the box origin.\n */\n/** Image px → local, and the tile mode, for an image paint. */\nexport function imageMatrix(p: Extract<Paint, { kind: \"image\" }>): { m: Mat; tile: TileMode } {\n if (p.matrix) return { m: p.matrix, tile: p.tile ?? \"clamp\" };\n const { sx, sy, ox, oy, tile } = imagePlacement(p);\n return { m: [sx, 0, 0, sy, ox, oy], tile };\n}\n\nexport function imagePlacement(p: Extract<Paint, { kind: \"image\" }>): { sx: number; sy: number; ox: number; oy: number; tile: TileMode } {\n const [x, y, w, h] = p.box;\n const iw = p.image.width, ih = p.image.height;\n const fit = p.fit ?? \"fill\";\n if (fit === \"stretch\") return { sx: w / iw, sy: h / ih, ox: x, oy: y, tile: \"clamp\" };\n if (fit === \"tile\") return { sx: 1, sy: 1, ox: x, oy: y, tile: \"repeat\" };\n const s = fit === \"fill\" ? Math.max(w / iw, h / ih) : Math.min(w / iw, h / ih);\n return { sx: s, sy: s, ox: x + (w - iw * s) / 2, oy: y + (h - ih * s) / 2, tile: fit === \"fill\" ? \"clamp\" : \"decal\" };\n}\n","// Draws a frame from core's own pieces around the adapter's render context: build the clips, evaluate state\n// at the frame, lay out, and render until no decode is pending.\n\nimport {\n AssetManager, AudioSink, ClipStore, AssetTimeline, ManifestAssetCatalog, type ProjectDocument, type Registry,\n renderSettled, setTheme, StateEvaluator, StorageAdapter,\n} from \"@motionscript/core\";\nimport type { WgpuRenderContext } from \"./context\";\n\nclass SilentAudio extends AudioSink {\n override get schedulesAudio(): boolean { return false; }\n has(): boolean { return true; }\n async append(): Promise<void> {}\n retain(): void {}\n schedule(): void {}\n syncTo(): void {}\n play(): void {}\n stop(): void {}\n}\n\n/** Asset keys as scenes write them (\"./cat.jpg\") and as the manifest lists them (\"cat.jpg\"). */\nexport const assetKey = (src: string) => src.replace(/^\\.?\\//, \"\");\n\n/** A decoded image the doc can paint with. */\nexport interface Decoded { bitmap: ImageBitmap; bytes: Uint8Array; width: number; height: number }\n\n/** Media for the harness: decoded images by asset key (video and fonts later). */\nexport class AdapterStorage extends StorageAdapter {\n constructor(catalog: never, viewport: never, private urls: Record<string, string>, readonly images: Map<string, Decoded>, private videoUrls: Record<string, string> = {}) {\n super(catalog, viewport);\n }\n async loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return;\n const url = this.urls[key];\n if (!url) return;\n const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());\n let bitmap: ImageBitmap;\n if (key.endsWith(\".svg\")) {\n // createImageBitmap can't decode SVG; an <img> can (at its natural size).\n const img = new Image();\n img.src = URL.createObjectURL(new Blob([bytes as BlobPart], { type: \"image/svg+xml\" }));\n await img.decode();\n bitmap = await createImageBitmap(img);\n } else bitmap = await createImageBitmap(new Blob([bytes as BlobPart]));\n this.images.set(key, { bitmap, bytes, width: bitmap.width, height: bitmap.height });\n }\n /** Open videos by asset key, and their decoded frames by key@time. */\n readonly videos = new Map<string, HTMLVideoElement>();\n readonly frames = new Map<string, ImageBitmap>();\n private pending = new Map<string, { key: string; time: number }>();\n\n async loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key) || !this.videoUrls[key]) return;\n const v = document.createElement(\"video\");\n v.muted = true;\n v.preload = \"auto\";\n v.src = this.videoUrls[key];\n await new Promise<void>((resolve, reject) => {\n v.onloadeddata = () => resolve();\n v.onerror = () => reject(new Error(`video ${key} failed to load`));\n });\n this.videos.set(key, v);\n }\n\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const id = `${key}@${time.toFixed(6)}`;\n const f = this.frames.get(id);\n if (f) return f;\n if (this.videos.has(key)) this.pending.set(id, { key, time });\n return null;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n if (this.pending.size === 0) return false;\n for (const [id, { key, time }] of [...this.pending]) {\n const v = this.videos.get(key)!;\n await new Promise<void>((resolve) => {\n v.onseeked = () => resolve();\n v.currentTime = time;\n });\n this.frames.set(id, await createImageBitmap(v));\n this.pending.delete(id);\n }\n return true;\n }\n async loadAudio(): Promise<void> {}\n async fetchAudioData(): Promise<ArrayBuffer> { return new ArrayBuffer(0); }\n async loadFont(): Promise<boolean> { return true; }\n}\n\n/** Media the scenes may reference: asset key → URL; videos with their duration (s). */\nexport interface Media { images: Record<string, string>; videos?: Record<string, { url: string; duration: number }> }\n\nexport async function drawFrameAt(project: ProjectDocument, registry: Registry, ctx: WgpuRenderContext, frame: number | \"last\", media: Media = { images: {} }) {\n const { fps, viewport } = project as Required<ProjectDocument>;\n setTheme(project.theme as never);\n const image = Object.fromEntries(Object.entries(media.images).map(([key, src]) => [key, { src, width: 0, height: 0, sizeBytes: 0 }]));\n const videos = media.videos ?? {};\n const video = Object.fromEntries(Object.entries(videos).map(([key, v]) => [key, { src: v.url, width: 0, height: 0, duration: v.duration, sizeBytes: 0 }]));\n const assets = new ManifestAssetCatalog({ image, video, audio: {}, font: {} });\n const storage = new AdapterStorage(assets as never, viewport as never, media.images, ctx.images, Object.fromEntries(Object.entries(videos).map(([k, v]) => [k, v.url])));\n ctx.storage = storage;\n const scope = { registry, viewport, fps, assets, measurer: ctx };\n const loads: { manager?: AssetManager } = {};\n const store = new ClipStore(project, scope as never, { isReady: (key: string) => loads.manager?.isReady(key) ?? false });\n const precomper = new AssetTimeline(project, scope as never, { store });\n const evaluator = new StateEvaluator(project, scope as never, store);\n const { totalFrames } = precomper.result();\n const target = Math.max(0, Math.min(totalFrames - 1, frame === \"last\" ? totalFrames - 1 : Math.floor(frame)));\n const precomp = precomper.ensureCovering(target);\n const manager = (loads.manager = new AssetManager(precomp, storage, new SilentAudio()));\n await manager.loadAt(target);\n evaluator.stateAt(target);\n evaluator.layout(ctx);\n await renderSettled(() => ctx.execute(() => evaluator.render(ctx)), storage, () => true);\n return { frame: target, totalFrames, buildErrors: precomp.buildErrors };\n}\n","import type { Bounds } from \"./base\";\n\n/** The placement fields `computeImageMatrix` reads off an image or video fill. */\nexport interface MediaPlacement {\n fit?: string;\n crop?: { left: number; right: number; top: number; bottom: number };\n zoom?: number;\n anchor?: { x: number; y: number };\n matrix?: Float32Array | number[][];\n}\n\n/**\n * The image→shape matrix (row-major 3×3 as 9 numbers) from intrinsic source\n * pixels, the space `tile`, `crop` and a raw `matrix` are authored in. Four\n * stages compose in order: crop picks a window treated as the whole image, fit\n * sets the base scale for it, zoom multiplies that, and anchor is both the zoom\n * focal point and the alignment where the image doesn't cover.\n */\nexport function computeImageMatrix(imgW: number, imgH: number, fill: MediaPlacement, bounds: Bounds | null): number[] {\n if (fill.matrix) {\n if (fill.matrix instanceof Float32Array) return Array.from(fill.matrix);\n return (fill.matrix as number[][]).flat();\n }\n const zoom = fill.zoom ?? 1;\n if (!bounds) return [zoom, 0, 0, 0, zoom, 0, 0, 0, 1];\n\n const mode = fill.fit ?? \"fill\";\n const boxW = bounds.right - bounds.left;\n const boxH = bounds.bottom - bounds.top;\n // A repeating texture repeats the whole image, so a tile ignores the crop.\n const crop = mode === \"tile\" ? undefined : fill.crop;\n const srcX = crop ? crop.left * imgW : 0;\n const srcY = crop ? crop.top * imgH : 0;\n const srcW = crop ? imgW * (1 - crop.left - crop.right) : imgW;\n const srcH = crop ? imgH * (1 - crop.top - crop.bottom) : imgH;\n if (srcW <= 0 || srcH <= 0) return [zoom, 0, bounds.left, 0, zoom, bounds.top, 0, 0, 1];\n\n let sx: number, sy: number;\n if (mode === \"fit\") {\n sx = sy = Math.min(boxW / srcW, boxH / srcH);\n } else if (mode === \"stretch\") {\n sx = boxW / srcW; sy = boxH / srcH;\n } else if (mode === \"tile\") {\n sx = sy = 1;\n } else {\n sx = sy = Math.max(boxW / srcW, boxH / srcH);\n }\n sx *= zoom; sy *= zoom;\n // A repeating texture has no corner to pin, so a tile keeps its origin.\n if (mode === \"tile\") return [sx, 0, bounds.left, 0, sy, bounds.top, 0, 0, 1];\n\n // The anchor is [-1, 1] y-up (the pivot space); texture space is [0, 1] y-down.\n const anchor = fill.anchor ?? { x: 0, y: 0 };\n const ax = (anchor.x + 1) / 2;\n const ay = (1 - anchor.y) / 2;\n const tx = bounds.left + ax * (boxW - srcW * sx) - srcX * sx;\n const ty = bounds.top + ay * (boxH - srcH * sy) - srcY * sy;\n return [sx, 0, tx, 0, sy, ty, 0, 0, 1];\n}\n","// core's resolved fills, strokes and shadows to the doc's paints, resolved\n// against a shape's bounds.\n\nimport type { FillResolved, ShadowResolved } from \"@motionscript/core\";\nimport { isWgslShader } from \"@motionscript/core\";\nimport { computeImageMatrix } from \"./geometry/image-matrix\";\nimport type { ImageAsset, Mat, Paint, Shadow, Stop } from \"../doc\";\n\ntype Bounds = [number, number, number, number];\n\n/** A normalized point to pixels: −1..1, y up (+1 = top). */\nfunction norm(nx: number, ny: number, b: Bounds): [number, number] {\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n return [cx + nx * ((b[2] - b[0]) / 2), cy - ny * ((b[3] - b[1]) / 2)];\n}\n\nfunction stops(colors: readonly (readonly number[])[], at: readonly number[]): Stop[] {\n return colors.map((c, i) => ({ offset: at[i] ?? i / Math.max(1, colors.length - 1), color: [c[0], c[1], c[2], c[3]] }));\n}\n\n/** A fill layer as a doc paint, or null when this adapter doesn't map it yet. */\n/** What a fill may need from the frame's doc. */\nexport interface PaintAssets {\n image(src: string): ImageAsset | null;\n /** A 3D scene rendered at `ratio` device px per logical px over `w`×`h`. */\n scene3d(scene: unknown, w: number, h: number, ratio: number): ImageAsset;\n /** The current device scale (canvas3d sizes its buffer by it). */\n deviceScale(): number;\n /** An image drawn `edge` device px along its long side (a vector may rasterize sharper). */\n imageEdge?(src: string, edge: number): void;\n /** A video fill's frame at the node's elapsed time (or at `time` s), or null while it decodes. */\n video(fill: unknown, time?: number): ImageAsset | null;\n /** The current node's elapsed seconds (a shader fill's `time`). */\n time?(): number;\n /** Sees each WGSL shader fill drawn, to check its uniforms against its `Params`. */\n checkShader?(fill: unknown): void;\n}\n\nexport function fillPaint(f: FillResolved, bounds: Bounds, missing: Set<string>, assets?: PaintAssets): Paint | null {\n const any = f as any;\n const image = assets ? (src: string) => assets.image(src) : undefined;\n switch (any.type) {\n case \"video\": {\n const asset = assets?.video(any);\n if (!asset) {\n missing.add(\"fill:video-not-decoded\");\n return null;\n }\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: [r[0], r[3], r[1], r[4], r[2], r[5]], tile };\n }\n case \"canvas3D\": {\n if (!assets) return null;\n const w = bounds[2] - bounds[0], h = bounds[3] - bounds[1];\n if (!(w > 0) || !(h > 0)) return null;\n // canvas3d.ts: min(maxPixelRatio ?? 2, max(deviceScale, 1)), stretched over the box.\n const ratio = Math.min(any.maxPixelRatio ?? 2, Math.max(assets.deviceScale(), 1));\n const asset = assets.scene3d(any.scene, w, h, ratio);\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], w, h], fit: \"stretch\" };\n }\n case \"image\": {\n const asset = image?.(any.src);\n if (!asset) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n // makeImageShader: computeImageMatrix places it; tile repeats, a\n // covering fit clamps, anything that may leave a gap is decal.\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const m: Mat = [r[0], r[3], r[1], r[4], r[2], r[5]];\n if (assets?.imageEdge) {\n const scale = assets.deviceScale();\n assets.imageEdge(any.src, Math.max(asset.width * Math.hypot(m[0], m[1]), asset.height * Math.hypot(m[2], m[3])) * scale);\n }\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: m, tile };\n }\n case \"solid\":\n return { kind: \"solid\", color: [any.color[0], any.color[1], any.color[2], any.color[3]] };\n case \"linear-gradient\":\n return { kind: \"linear\", from: norm(any.start.x, any.start.y, bounds), to: norm(any.end.x, any.end.y, bounds), stops: stops(any.colors, any.stops) };\n case \"conic-gradient\": {\n // A sweep from startAngle over a full turn, clamped.\n const start = any.startAngle ?? 0;\n const even = any.stops.length === any.colors.length ? any.stops : [];\n return { kind: \"sweep\", center: norm(any.center.x, any.center.y, bounds), startAngle: start, endAngle: start + 360, stops: stops(any.colors, even) };\n }\n case \"radial-gradient\":\n return { kind: \"radial\", center: norm(any.center.x, any.center.y, bounds), radius: any.radius, stops: stops(any.colors, any.stops) };\n case \"shader\": {\n // Nothing to draw yet (a host's picker before a shader is chosen).\n if (!any.source?.trim()) return null;\n // WGSL only: a stored SkSL fill draws nothing (reported as fill:shader-sksl).\n if (!isWgslShader(any)) break;\n assets?.checkShader?.(any);\n const texture = any.textures?.[0] ? image?.(any.textures[0].src) : undefined;\n if (any.textures?.[0] && !texture) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n return {\n kind: \"shader\", source: any.source, uniforms: any.uniforms ?? {}, time: assets?.time?.() ?? 0,\n box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], ...(texture ? { texture } : {}),\n };\n }\n case \"dotGrid\": case \"grid\": case \"stripe\": case \"noise\": case \"fractalNoise\":\n return { kind: \"procedural\", fill: any, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]] };\n }\n missing.add(any.type === \"shader\" ? \"fill:shader-sksl\" : `fill:${any.type}`);\n return null;\n}\n\n/** A drop shadow with one solid fill, as the doc's leaf shadows carry it. */\nexport function shadowOf(s: ShadowResolved, missing: Set<string>): Shadow | null {\n const f = s.fill[0] as any;\n const c = f?.type === \"solid\" ? f.color : [0, 0, 0, 1];\n // sigma = blur / 2; offset in y-up author space.\n return { dx: s.offset?.x ?? 0, dy: -(s.offset?.y ?? 0), sigma: s.blur / 2, spread: s.spread, color: [c[0], c[1], c[2], c[3] * (f?.opacity ?? 1)] };\n}\n","/* @ts-self-types=\"./ms_renderer.d.ts\" */\n\nexport class MsText {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n MsTextFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_mstext_free(ptr, 0);\n }\n /**\n * Glyph outline → `[verbCount, verbs…, x0, y0, x1, y1, …]` in px, y down.\n * @param {number} font\n * @param {number} glyph\n * @param {number} size\n * @param {number} weight\n * @returns {Float32Array}\n */\n glyph_path(font, glyph, size, weight) {\n const ret = wasm.mstext_glyph_path(this.__wbg_ptr, font, glyph, size, weight);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Paragraph layout in paragraph space; see [`encode`]. `align`: 0 left,\n * 1 right, 2 center, 3 justify, 4 start, 5 end. `max_width <= 0` = no wrap.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {number} max_width\n * @param {number} box_width\n * @returns {Float32Array}\n */\n layout(text, runs, families, line_height, align, max_width, box_width) {\n const val4 = +line_height;\n const val5 = +align;\n const val6 = +max_width;\n const val7 = +box_width;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_layout(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7);\n var v8 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v8;\n }\n /**\n * `measureText` → `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n constructor() {\n const ret = wasm.mstext_new();\n this.__wbg_ptr = ret;\n MsTextFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Registers font bytes under `family`; returns the font id, or -1.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * @param {Uint32Array | number[]} ids\n */\n set_default_fallbacks(ids) {\n const ptr0 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.mstext_set_default_fallbacks(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * @param {string} family\n * @param {Uint32Array | number[]} ids\n */\n set_family_fallbacks(family, ids) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n wasm.mstext_set_family_fallbacks(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n }\n /**\n * `layoutTextBlock` → `[width, height, lineCount, per line: start, end,\n * top, bottom, caretCount, carets…]`, or empty for no layout.\n * `font_size` NaN = autofit. `valign`: 0 top, 1 center, 2 bottom.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} font_size\n * @param {number} min_font_size\n * @param {number} line_height\n * @param {number} align\n * @param {number} valign\n * @param {boolean} wrap\n * @param {number} width\n * @param {number} height\n * @returns {Float32Array}\n */\n text_block(text, runs, families, font_size, min_font_size, line_height, align, valign, wrap, width, height) {\n const val4 = +font_size;\n const val5 = +min_font_size;\n const val6 = +line_height;\n const val7 = +align;\n const val8 = +valign;\n const val9 = +wrap;\n const val10 = +width;\n const val11 = +height;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_block(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7, val8, val9, val10, val11);\n var v12 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v12;\n }\n /**\n * Text on a path: shapes one unwrapped left-aligned line and places it\n * along `points` (a polyline, `[x0, y0, x1, y1, …]`) per `align`.\n * Returns 7 numbers per glyph: the glyph id, then its affine matrix\n * `[a, b, c, d, e, f]` (see `PlacedGlyph::matrix`). Newlines become\n * spaces; the whitespace around them is collapsed by the caller, since it\n * changes run lengths.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {Float32Array | number[]} points\n * @returns {Float32Array}\n */\n text_on_path(text, runs, families, line_height, align, points) {\n const val5 = +line_height;\n const val6 = +align;\n let ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n ptr3 = passArrayF32ToWasm0(points, wasm.__wbindgen_malloc);\n len3 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr3) { wasm.__wbindgen_free(ptr3, len3 * 4, 4); }\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_on_path(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val5, val6, ptr3, len3);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n}\nif (Symbol.dispose) MsText.prototype[Symbol.dispose] = MsText.prototype.free;\n\nexport class Renderer {\n static __wrap(ptr) {\n const obj = Object.create(Renderer.prototype);\n obj.__wbg_ptr = ptr;\n RendererFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n RendererFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_renderer_free(ptr, 0);\n }\n /**\n * @returns {string}\n */\n adapter_info() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.renderer_adapter_info(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * Applies the first `words` words of the delta buffer to the scene.\n * @param {number} words\n */\n apply(words) {\n const ret = wasm.renderer_apply(this.__wbg_ptr, words);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Creates a renderer drawing into an `HTMLCanvasElement` or `OffscreenCanvas`.\n * @param {any} canvas\n * @param {number} width\n * @param {number} height\n * @returns {Promise<Renderer>}\n */\n static create(canvas, width, height) {\n const ret = wasm.renderer_create(canvas, width, height);\n return ret;\n }\n /**\n * Pointer (byte offset into WASM memory) of a word buffer holding at least\n * `min_words` words. May reallocate, so callers re-read the pointer and\n * refresh their views after calling it.\n * @param {number} min_words\n * @returns {number}\n */\n delta_buffer(min_words) {\n const ret = wasm.renderer_delta_buffer(this.__wbg_ptr, min_words);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n delta_capacity() {\n const ret = wasm.renderer_delta_capacity(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Names of the built-in effects, in `OP_EFFECTS` index order.\n * @returns {string[]}\n */\n effect_names() {\n const ret = wasm.renderer_effect_names(this.__wbg_ptr);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Drops the shared device and its pipelines, so the next `prewarm` or\n * `create` asks for a new one. For a host that learnt of a lost device\n * before wgpu's own callback ran.\n */\n static forget_device() {\n wasm.renderer_forget_device();\n }\n /**\n * @param {number} id\n */\n free_image(id) {\n wasm.renderer_free_image(this.__wbg_ptr, id);\n }\n /**\n * The `GPUDevice` this renderer draws with.\n * @returns {any}\n */\n gpu_device() {\n const ret = wasm.renderer_gpu_device(this.__wbg_ptr);\n return ret;\n }\n /**\n * Forces the next render to rebuild the frame program even if no delta\n * arrived, to measure the full CPU path.\n */\n invalidate() {\n wasm.renderer_invalidate(this.__wbg_ptr);\n }\n /**\n * core's `measureText`: `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n /**\n * Gets the GPU device every renderer on the page shares ready, ahead of the first `create`.\n * @returns {Promise<void>}\n */\n static prewarm() {\n const ret = wasm.renderer_prewarm();\n return ret;\n }\n /**\n * Renders the scene offscreen and resolves to RGBA8 pixels (row-major,\n * tightly packed). The promise yields a `Uint8Array`.\n * @returns {Promise<any>}\n */\n read_pixels() {\n const ret = wasm.renderer_read_pixels(this.__wbg_ptr);\n return ret;\n }\n /**\n * Registers font bytes under a family name; returns the font id, or\n * -1 if the bytes aren't a font.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * Renders the current scene to the canvas.\n */\n render() {\n const ret = wasm.renderer_render(this.__wbg_ptr);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {number} width\n * @param {number} height\n */\n resize(width, height) {\n wasm.renderer_resize(this.__wbg_ptr, width, height);\n }\n /**\n * Scene `scene`'s texture `tex` (an encoder texture id) is image\n * `image`: an uploaded image or a surface.\n * @param {number} scene\n * @param {number} tex\n * @param {number} image\n * @param {boolean} srgb\n */\n scene3d_bind(scene, tex, image, srgb) {\n wasm.renderer_scene3d_bind(this.__wbg_ptr, scene, tex, image, srgb);\n }\n /**\n * Scene `scene`'s texture `tex` from straight RGBA8 rows (a data texture).\n * @param {number} scene\n * @param {number} tex\n * @param {Uint8Array | number[]} rgba\n * @param {number} width\n * @param {number} height\n * @param {boolean} srgb\n */\n scene3d_pixels(scene, tex, rgba, width, height, srgb) {\n const val2 = +scene;\n const val3 = +tex;\n const val4 = +width;\n const val5 = +height;\n const val6 = +srgb;\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.renderer_scene3d_pixels(this.__wbg_ptr, val2, val3, ptr0, len0, val4, val5, val6);\n }\n /**\n * What the last 3D scenes recorded that `ms-render3d` doesn't draw.\n * @param {number} id\n * @returns {string[]}\n */\n scene3d_skipped(id) {\n const ret = wasm.renderer_scene3d_skipped(this.__wbg_ptr, id);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {boolean} linear\n * @param {boolean} dither\n */\n set_options(linear, dither) {\n wasm.renderer_set_options(this.__wbg_ptr, linear, dither);\n }\n /**\n * A 3D scene (the word stream `web/src/r3d/encode.ts` writes from\n * core's `Scene3D`) as image `id`, drawn at `width`×`height` px on\n * this renderer's device and sampled by image paints like any image.\n * @param {number} id\n * @param {number} width\n * @param {number} height\n * @param {Uint32Array | number[]} words\n */\n set_scene3d(id, width, height, words) {\n const val2 = +id;\n const val3 = +width;\n const val4 = +height;\n const ptr0 = passArray32ToWasm0(words, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_set_scene3d(this.__wbg_ptr, val2, val3, val4, ptr0, len0);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Image `id` is the 2D subtree under node `root` (a detached group),\n * drawn at `width`×`height` px whenever the scene changes: a\n * `Tex.surface` source for 3D maps, and an image for image paints.\n * @param {number} id\n * @param {number} root\n * @param {number} width\n * @param {number} height\n */\n set_surface(id, root, width, height) {\n wasm.renderer_set_surface(this.__wbg_ptr, id, root, width, height);\n }\n /**\n * Validates user shader `source` (`kind` 0 = fill, 1 = effect) and,\n * when valid, adds it as program `id` on this device. Its draws are\n * skipped until `shader_build`; the caller compiles the pipelines\n * asynchronously first (see `web/src/user-shaders.ts`). Returns the\n * report `validate_shader` does, as JSON.\n * @param {number} id\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\n shader_add(id, kind, source) {\n let deferred4_0;\n let deferred4_1;\n try {\n const val2 = +id;\n const val3 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_shader_add(this.__wbg_ptr, val2, val3, ptr0, len0);\n deferred4_0 = ret[0];\n deferred4_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * Creates program `id`'s pipelines; from the next render it draws.\n * @param {number} id\n */\n shader_build(id) {\n wasm.renderer_shader_build(this.__wbg_ptr, id);\n }\n /**\n * The output formats of a user program's pipelines, in order (WebGPU names).\n * @param {number} kind\n * @returns {string[]}\n */\n shader_formats(kind) {\n const ret = wasm.renderer_shader_formats(this.__wbg_ptr, kind);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {number} id\n */\n shader_remove(id) {\n wasm.renderer_shader_remove(this.__wbg_ptr, id);\n }\n /**\n * [build ms, encode+submit ms, apply ms, prims, ops, layers, passes,\n * draws, culled, outlines built this frame, pool textures, pool MiB,\n * cached outline segments, prims reused from recorded subtrees,\n * prims left on the GPU from the previous build, 3D decode + set ms,\n * 3D draw CPU ms, 3D map refresh ms, surfaces redrawn, surfaces]\n * @returns {Float64Array}\n */\n stats() {\n const ret = wasm.renderer_stats(this.__wbg_ptr);\n var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v1;\n }\n /**\n * core's `layoutTextBlock` for a text node already in the scene, flat:\n * `[width, height, lineCount, then per line: start, end, top,\n * bottom, caretCount, carets…]`; empty when there is none.\n * @param {number} id\n * @returns {Float32Array}\n */\n text_block_layout(id) {\n const ret = wasm.renderer_text_block_layout(this.__wbg_ptr, id);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Uploads image `id` from an `ImageBitmap`, `VideoFrame`,\n * `HTMLImageElement`, `HTMLVideoElement`, `HTMLCanvasElement` or\n * `OffscreenCanvas` (a GPU copy). Call again with each new video\n * frame; the texture is reused. `mipmaps` for still images.\n * @param {number} id\n * @param {any} source\n * @param {boolean} mipmaps\n */\n upload_image(id, source, mipmaps) {\n const ret = wasm.renderer_upload_image(this.__wbg_ptr, id, source, mipmaps);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Resolves once the GPU has finished all submitted work.\n * @returns {Promise<any>}\n */\n wait_gpu() {\n const ret = wasm.renderer_wait_gpu(this.__wbg_ptr);\n return ret;\n }\n}\nif (Symbol.dispose) Renderer.prototype[Symbol.dispose] = Renderer.prototype.free;\n\n/**\n * Called with the message when the renderer panics, just before the trap.\n * @param {Function | null} [listener]\n */\nexport function set_panic_listener(listener) {\n wasm.set_panic_listener(isLikeNone(listener) ? 0 : addToExternrefTable0(listener));\n}\n\n/**\n * `panic = \"abort\"` traps, and the instance is not safe to call again\n * (a `RefCell` may be left borrowed), so the host is told what happened\n * before the trap unwinds into whichever call it was. Unwinding on\n * wasm32 needs a nightly std.\n */\nexport function start() {\n wasm.start();\n}\n\n/**\n * Validates a user shader without a device: `kind` 0 = fill, 1 = effect.\n * JSON `{ ok, diagnostics: [{ line, column, length, message }], fields:\n * [{ name, offset, scalar, components, elements, stride, type }], size, wgsl }`;\n * `line` is 1-based in `source`, 0 for a problem outside it.\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\nexport function validate_shader(kind, source) {\n let deferred3_0;\n let deferred3_1;\n try {\n const val2 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.validate_shader(val2, ptr0, len0);\n deferred3_0 = ret[0];\n deferred3_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_208446807d0d1e30: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Window_2805651c516cb7aa: function(arg0) {\n const ret = arg0.Window;\n return ret;\n },\n __wbg_WorkerGlobalScope_174390815d0a4893: function(arg0) {\n const ret = arg0.WorkerGlobalScope;\n return ret;\n },\n __wbg___wbindgen_debug_string_f249a2a76caa9a55: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_is_function_741ff2bb612836f5: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_c22311b1cc228e3a: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_string_fc456fee5d3317de: function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_be5b34249ff1fc15: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_throw_4c88d8bf264fd984: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg__wbg_cb_unref_09736879a3f67559: function(arg0) {\n arg0._wbg_cb_unref();\n },\n __wbg_beginRenderPass_597e3973321fd369: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.beginRenderPass(arg1);\n return ret;\n }, arguments); },\n __wbg_call_40b008ba32f73991: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_call_a410eb4b59ed5965: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_clearBuffer_3d5a3057c3c8a9bf: function(arg0, arg1, arg2, arg3) {\n arg0.clearBuffer(arg1, arg2, arg3);\n },\n __wbg_clearBuffer_82ba999c294f42fb: function(arg0, arg1, arg2) {\n arg0.clearBuffer(arg1, arg2);\n },\n __wbg_configure_8e04ab1a867d31e1: function() { return handleError(function (arg0, arg1) {\n arg0.configure(arg1);\n }, arguments); },\n __wbg_copyExternalImageToTexture_9d1383f644366eae: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyExternalImageToTexture(arg1, arg2, arg3);\n }, arguments); },\n __wbg_copyTextureToBuffer_2a1eda98bb347f8c: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyTextureToBuffer(arg1, arg2, arg3);\n }, arguments); },\n __wbg_createBindGroupLayout_5699617270d84042: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBindGroupLayout(arg1);\n return ret;\n }, arguments); },\n __wbg_createBindGroup_f539b26ca341308f: function(arg0, arg1) {\n const ret = arg0.createBindGroup(arg1);\n return ret;\n },\n __wbg_createBuffer_b8c5b520d2c822b8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBuffer(arg1);\n return ret;\n }, arguments); },\n __wbg_createCommandEncoder_3352d1ffc36c6fc0: function(arg0, arg1) {\n const ret = arg0.createCommandEncoder(arg1);\n return ret;\n },\n __wbg_createPipelineLayout_6eab52c327118937: function(arg0, arg1) {\n const ret = arg0.createPipelineLayout(arg1);\n return ret;\n },\n __wbg_createRenderPipeline_58390ba302107691: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createRenderPipeline(arg1);\n return ret;\n }, arguments); },\n __wbg_createSampler_9bd91d7e928c0060: function(arg0, arg1) {\n const ret = arg0.createSampler(arg1);\n return ret;\n },\n __wbg_createShaderModule_cefa51336cb288ae: function(arg0, arg1) {\n const ret = arg0.createShaderModule(arg1);\n return ret;\n },\n __wbg_createTexture_2c95e64f50008aea: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createTexture(arg1);\n return ret;\n }, arguments); },\n __wbg_createView_96e5e405cc3c01e8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createView(arg1);\n return ret;\n }, arguments); },\n __wbg_description_7a568e202a00293f: function(arg0, arg1) {\n const ret = arg1.description;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_destroy_249478e98a7943d5: function(arg0) {\n arg0.destroy();\n },\n __wbg_destroy_637537007d9eaa44: function(arg0) {\n arg0.destroy();\n },\n __wbg_displayHeight_fb2700c23cca6739: function(arg0) {\n const ret = arg0.displayHeight;\n return ret;\n },\n __wbg_displayWidth_9e9d6031a3036613: function(arg0) {\n const ret = arg0.displayWidth;\n return ret;\n },\n __wbg_document_3b5c3071b43e97ee: function(arg0) {\n const ret = arg0.document;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_drawIndexed_638959aae942557c: function(arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.drawIndexed(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4, arg5 >>> 0);\n },\n __wbg_draw_086a9578fc9898c2: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.draw(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_end_b57473834b877409: function(arg0) {\n arg0.end();\n },\n __wbg_error_757e9472f8410341: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_finish_09ec094c10f41e7b: function(arg0) {\n const ret = arg0.finish();\n return ret;\n },\n __wbg_finish_ec1c191f66a895b1: function(arg0, arg1) {\n const ret = arg0.finish(arg1);\n return ret;\n },\n __wbg_getContext_1938edb9a972f63d: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getContext_d93f904b714852ae: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getCurrentTexture_c3b1727224d7f6e6: function() { return handleError(function (arg0) {\n const ret = arg0.getCurrentTexture();\n return ret;\n }, arguments); },\n __wbg_getMappedRange_28e816a763520e01: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getMappedRange(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_getPreferredCanvasFormat_0ef5034c8902201b: function(arg0) {\n const ret = arg0.getPreferredCanvasFormat();\n return (__wbindgen_enum_GpuTextureFormat.indexOf(ret) + 1 || 102) - 1;\n },\n __wbg_get_0c55869fe53c7d14: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_gpu_514705c6dd1f0dab: function(arg0) {\n const ret = arg0.gpu;\n return ret;\n },\n __wbg_height_a587c99454238459: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_a6466ebf29036658: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_ac6f1c3f49c13fe2: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_info_8554cb7af37427b6: function(arg0) {\n const ret = arg0.info;\n return ret;\n },\n __wbg_instanceof_HtmlCanvasElement_89f280683e987b9e: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLCanvasElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlImageElement_f22acd64d72ae23a: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLImageElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlVideoElement_64f13b58baf30810: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLVideoElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_ImageBitmap_536fdba57df2c6ac: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ImageBitmap;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_OffscreenCanvas_fcf6ec01367f54ec: function(arg0) {\n let result;\n try {\n result = arg0 instanceof OffscreenCanvas;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_VideoFrame_cd5d3aac6098cfc2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof VideoFrame;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Window_5cf453f5639aa1a2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isFallbackAdapter_6a4fa7356d18310b: function(arg0) {\n const ret = arg0.isFallbackAdapter;\n return ret;\n },\n __wbg_label_fceb40a43a358e62: function(arg0, arg1) {\n const ret = arg1.label;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_length_186163212ffe79c3: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_limits_4e444eb8c2e61c45: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_limits_98515cc885d709ef: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_lost_25273dba897db03c: function(arg0) {\n const ret = arg0.lost;\n return ret;\n },\n __wbg_mapAsync_b0597127f5037286: function(arg0, arg1, arg2, arg3) {\n const ret = arg0.mapAsync(arg1 >>> 0, arg2, arg3);\n return ret;\n },\n __wbg_maxBindGroupsPlusVertexBuffers_1face4afb5363937: function(arg0) {\n const ret = arg0.maxBindGroupsPlusVertexBuffers;\n return ret;\n },\n __wbg_maxBindGroups_a0b7e55762f095b9: function(arg0) {\n const ret = arg0.maxBindGroups;\n return ret;\n },\n __wbg_maxBindingsPerBindGroup_ec9067be38d6ec72: function(arg0) {\n const ret = arg0.maxBindingsPerBindGroup;\n return ret;\n },\n __wbg_maxBufferSize_a9ce15e541c64cd2: function(arg0) {\n const ret = arg0.maxBufferSize;\n return ret;\n },\n __wbg_maxColorAttachmentBytesPerSample_44089e129e1a2a1d: function(arg0) {\n const ret = arg0.maxColorAttachmentBytesPerSample;\n return ret;\n },\n __wbg_maxColorAttachments_6bd8156394ba618c: function(arg0) {\n const ret = arg0.maxColorAttachments;\n return ret;\n },\n __wbg_maxComputeInvocationsPerWorkgroup_7b086f15ef868934: function(arg0) {\n const ret = arg0.maxComputeInvocationsPerWorkgroup;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeX_8bbe505e0ac8dc18: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeX;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeY_7228ed3935eecc31: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeY;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeZ_6092b56a967f6f8d: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeZ;\n return ret;\n },\n __wbg_maxComputeWorkgroupStorageSize_4773e3bd3936df36: function(arg0) {\n const ret = arg0.maxComputeWorkgroupStorageSize;\n return ret;\n },\n __wbg_maxComputeWorkgroupsPerDimension_79222bf8e8a90fbd: function(arg0) {\n const ret = arg0.maxComputeWorkgroupsPerDimension;\n return ret;\n },\n __wbg_maxDynamicStorageBuffersPerPipelineLayout_3ab5762b1b2c7fc2: function(arg0) {\n const ret = arg0.maxDynamicStorageBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxDynamicUniformBuffersPerPipelineLayout_722da31d0de1c256: function(arg0) {\n const ret = arg0.maxDynamicUniformBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxInterStageShaderVariables_821096d4b3020715: function(arg0) {\n const ret = arg0.maxInterStageShaderVariables;\n return ret;\n },\n __wbg_maxSampledTexturesPerShaderStage_c6aea9e05c0a02ca: function(arg0) {\n const ret = arg0.maxSampledTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxSamplersPerShaderStage_3aa30f6c002d3a99: function(arg0) {\n const ret = arg0.maxSamplersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageBufferBindingSize_84a2c2433627fca2: function(arg0) {\n const ret = arg0.maxStorageBufferBindingSize;\n return ret;\n },\n __wbg_maxStorageBuffersPerShaderStage_25b96748df28dc20: function(arg0) {\n const ret = arg0.maxStorageBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageTexturesPerShaderStage_53ed734f26e6c1ad: function(arg0) {\n const ret = arg0.maxStorageTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxTextureArrayLayers_9ec487f1ce102992: function(arg0) {\n const ret = arg0.maxTextureArrayLayers;\n return ret;\n },\n __wbg_maxTextureDimension1D_faef91b2e9fa6740: function(arg0) {\n const ret = arg0.maxTextureDimension1D;\n return ret;\n },\n __wbg_maxTextureDimension2D_3a923eb2df4d9124: function(arg0) {\n const ret = arg0.maxTextureDimension2D;\n return ret;\n },\n __wbg_maxTextureDimension3D_943321fe5945464e: function(arg0) {\n const ret = arg0.maxTextureDimension3D;\n return ret;\n },\n __wbg_maxUniformBufferBindingSize_21e89ff761d576db: function(arg0) {\n const ret = arg0.maxUniformBufferBindingSize;\n return ret;\n },\n __wbg_maxUniformBuffersPerShaderStage_19a0bfb0189f7254: function(arg0) {\n const ret = arg0.maxUniformBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxVertexAttributes_49aef6c51d07a280: function(arg0) {\n const ret = arg0.maxVertexAttributes;\n return ret;\n },\n __wbg_maxVertexBufferArrayStride_f68c4029e6f047ec: function(arg0) {\n const ret = arg0.maxVertexBufferArrayStride;\n return ret;\n },\n __wbg_maxVertexBuffers_ce9f15a623f9aac7: function(arg0) {\n const ret = arg0.maxVertexBuffers;\n return ret;\n },\n __wbg_message_5223ba7df7256eac: function(arg0, arg1) {\n const ret = arg1.message;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_minStorageBufferOffsetAlignment_529f1f52e61188fc: function(arg0) {\n const ret = arg0.minStorageBufferOffsetAlignment;\n return ret;\n },\n __wbg_minUniformBufferOffsetAlignment_519e26287e1996a3: function(arg0) {\n const ret = arg0.minUniformBufferOffsetAlignment;\n return ret;\n },\n __wbg_naturalHeight_fb7d27a9642e796c: function(arg0) {\n const ret = arg0.naturalHeight;\n return ret;\n },\n __wbg_naturalWidth_c3b5a9ac32cd185e: function(arg0) {\n const ret = arg0.naturalWidth;\n return ret;\n },\n __wbg_navigator_9641ab32fa612dd1: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_navigator_c17f443a6fe5d38d: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_new_2bfd0f45e60518b1: function() { return handleError(function (arg0, arg1) {\n const ret = new OffscreenCanvas(arg0 >>> 0, arg1 >>> 0);\n return ret;\n }, arguments); },\n __wbg_new_ba40181b3f24ac80: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_bb74001155cb8ca8: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_cd4348290afae586: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_6b60b99917da27d6: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_e09da9dae6ee5935: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_with_byte_offset_and_length_3cd32055a417f095: function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n },\n __wbg_new_with_length_01b143a7e5dd5a3e: function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n },\n __wbg_now_84237b99fa85a391: function() {\n const ret = performance.now();\n return ret;\n },\n __wbg_onSubmittedWorkDone_1190213cee1ecf7e: function(arg0) {\n const ret = arg0.onSubmittedWorkDone();\n return ret;\n },\n __wbg_prototypesetcall_13162965d1fe7aa3: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_querySelectorAll_6c1bd81d448fb480: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.querySelectorAll(getStringFromWasm0(arg1, arg2));\n return ret;\n }, arguments); },\n __wbg_queueMicrotask_1e8503a8a690f0a3: function(arg0) {\n const ret = arg0.queueMicrotask;\n return ret;\n },\n __wbg_queueMicrotask_4a1a4d8dd332373b: function(arg0) {\n queueMicrotask(arg0);\n },\n __wbg_queue_e250e2ebc49b39e0: function(arg0) {\n const ret = arg0.queue;\n return ret;\n },\n __wbg_reason_53e762e714b67b72: function(arg0) {\n const ret = arg0.reason;\n return (__wbindgen_enum_GpuDeviceLostReason.indexOf(ret) + 1 || 3) - 1;\n },\n __wbg_renderer_new: function(arg0) {\n const ret = Renderer.__wrap(arg0);\n return ret;\n },\n __wbg_requestAdapter_a539af006419f2e9: function(arg0, arg1) {\n const ret = arg0.requestAdapter(arg1);\n return ret;\n },\n __wbg_requestDevice_5cb8a582e55d08cb: function(arg0, arg1) {\n const ret = arg0.requestDevice(arg1);\n return ret;\n },\n __wbg_resolve_dbf78ab4942478b0: function(arg0) {\n const ret = Promise.resolve(arg0);\n return ret;\n },\n __wbg_setBindGroup_418c3e0eb6943ce0: function(arg0, arg1, arg2) {\n arg0.setBindGroup(arg1 >>> 0, arg2);\n },\n __wbg_setBindGroup_82d014e8f799f053: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setBindGroup(arg1 >>> 0, arg2, getArrayU32FromWasm0(arg3, arg4), arg5, arg6 >>> 0);\n }, arguments); },\n __wbg_setIndexBuffer_241097e303986c14: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setIndexBuffer(arg1, __wbindgen_enum_GpuIndexFormat[arg2], arg3, arg4);\n },\n __wbg_setPipeline_b6f981027e02cd16: function(arg0, arg1) {\n arg0.setPipeline(arg1);\n },\n __wbg_setScissorRect_889235eeb784732b: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setScissorRect(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_setVertexBuffer_6db3b60e99280744: function(arg0, arg1, arg2, arg3) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3);\n },\n __wbg_setVertexBuffer_cbf4ca1627c02f4c: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3, arg4);\n },\n __wbg_setViewport_c0be08dcc8965ccf: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setViewport(arg1, arg2, arg3, arg4, arg5, arg6);\n },\n __wbg_set_118fefd528ab0a79: function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n },\n __wbg_set_2793479888329cb6: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_set_a_1c94f1413a06c773: function(arg0, arg1) {\n arg0.a = arg1;\n },\n __wbg_set_access_b0a6fbebfbe53242: function(arg0, arg1) {\n arg0.access = __wbindgen_enum_GpuStorageTextureAccess[arg1];\n },\n __wbg_set_address_mode_u_a39aefdf030758ae: function(arg0, arg1) {\n arg0.addressModeU = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_v_999ec6ed4d587e8c: function(arg0, arg1) {\n arg0.addressModeV = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_w_a936c884ccf08234: function(arg0, arg1) {\n arg0.addressModeW = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_alpha_84214d12347c6647: function(arg0, arg1) {\n arg0.alpha = arg1;\n },\n __wbg_set_alpha_mode_278c6649365aff36: function(arg0, arg1) {\n arg0.alphaMode = __wbindgen_enum_GpuCanvasAlphaMode[arg1];\n },\n __wbg_set_alpha_to_coverage_enabled_1e879520cab4bb05: function(arg0, arg1) {\n arg0.alphaToCoverageEnabled = arg1 !== 0;\n },\n __wbg_set_array_layer_count_bd7a074559a0abaa: function(arg0, arg1) {\n arg0.arrayLayerCount = arg1 >>> 0;\n },\n __wbg_set_array_stride_f64_b132c6a79afeae43: function(arg0, arg1) {\n arg0.arrayStride = arg1;\n },\n __wbg_set_aspect_1db857832468d61f: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_3b0dceed92671cc1: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_8c866a3891032753: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_attributes_67bbc44b08e038d6: function(arg0, arg1, arg2) {\n arg0.attributes = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_b_a93bcfdd1c29a0bd: function(arg0, arg1) {\n arg0.b = arg1;\n },\n __wbg_set_base_array_layer_e745f84c2e5437e2: function(arg0, arg1) {\n arg0.baseArrayLayer = arg1 >>> 0;\n },\n __wbg_set_base_mip_level_fe08854fab09de85: function(arg0, arg1) {\n arg0.baseMipLevel = arg1 >>> 0;\n },\n __wbg_set_beginning_of_pass_write_index_a13b608f19d6a2f0: function(arg0, arg1) {\n arg0.beginningOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_bind_group_layouts_383f681565a30d8a: function(arg0, arg1, arg2) {\n arg0.bindGroupLayouts = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_binding_bd7d6b01bb08823a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_binding_dbed4a234264971a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_blend_1f3e5b36f9c246cb: function(arg0, arg1) {\n arg0.blend = arg1;\n },\n __wbg_set_buffer_292fb3c30928dc50: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_76841cdbff393f1d: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_91f4e8e05066c37a: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffers_47665c552e27672c: function(arg0, arg1, arg2) {\n arg0.buffers = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_bytes_per_row_4ef9c2c51932b041: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_bytes_per_row_75441352f606ebc8: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_clear_value_gpu_color_dict_303e0009591e5d26: function(arg0, arg1) {\n arg0.clearValue = arg1;\n },\n __wbg_set_code_130aebc49c4cadd3: function(arg0, arg1, arg2) {\n arg0.code = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_color_6d2de56a2224ec57: function(arg0, arg1) {\n arg0.color = arg1;\n },\n __wbg_set_color_attachments_e83f79badceda8b4: function(arg0, arg1, arg2) {\n arg0.colorAttachments = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_compare_159af15eb77dbcd2: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_compare_4db27ced1edc0322: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_count_4d1e9559a7f1b993: function(arg0, arg1) {\n arg0.count = arg1 >>> 0;\n },\n __wbg_set_cull_mode_31293d13bc064271: function(arg0, arg1) {\n arg0.cullMode = __wbindgen_enum_GpuCullMode[arg1];\n },\n __wbg_set_depth_bias_b30728f3ab3f643e: function(arg0, arg1) {\n arg0.depthBias = arg1;\n },\n __wbg_set_depth_bias_clamp_5b58fd4819283038: function(arg0, arg1) {\n arg0.depthBiasClamp = arg1;\n },\n __wbg_set_depth_bias_slope_scale_8b8b20db6b43c43b: function(arg0, arg1) {\n arg0.depthBiasSlopeScale = arg1;\n },\n __wbg_set_depth_clear_value_1165941523836019: function(arg0, arg1) {\n arg0.depthClearValue = arg1;\n },\n __wbg_set_depth_compare_81dd71de7e433cc2: function(arg0, arg1) {\n arg0.depthCompare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_depth_fail_op_ddf822c573cdf0c1: function(arg0, arg1) {\n arg0.depthFailOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_depth_load_op_ca270acab0c1ca69: function(arg0, arg1) {\n arg0.depthLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_depth_or_array_layers_e59f3988a095ccac: function(arg0, arg1) {\n arg0.depthOrArrayLayers = arg1 >>> 0;\n },\n __wbg_set_depth_read_only_49ca399f98b97955: function(arg0, arg1) {\n arg0.depthReadOnly = arg1 !== 0;\n },\n __wbg_set_depth_stencil_41e94739225cb2c3: function(arg0, arg1) {\n arg0.depthStencil = arg1;\n },\n __wbg_set_depth_stencil_attachment_36ce3695dfcb6b85: function(arg0, arg1) {\n arg0.depthStencilAttachment = arg1;\n },\n __wbg_set_depth_store_op_6cd6bdde49f9050d: function(arg0, arg1) {\n arg0.depthStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_depth_write_enabled_4b5da11c77fbdab7: function(arg0, arg1) {\n arg0.depthWriteEnabled = arg1 !== 0;\n },\n __wbg_set_device_1940fd5f9e2a7fee: function(arg0, arg1) {\n arg0.device = arg1;\n },\n __wbg_set_dimension_88d0c9f16bb079fb: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureDimension[arg1];\n },\n __wbg_set_dimension_bab9530fa3e311d8: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_dst_factor_80c13f29a3e117cb: function(arg0, arg1) {\n arg0.dstFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_end_of_pass_write_index_793fcfe3141dc357: function(arg0, arg1) {\n arg0.endOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_entries_552f52b2aa3b346d: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entries_d9929dbfa2aaa9a7: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_0eacf7b26b3637b0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_bb3692db4a6065d0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_external_texture_1bef5ba626275d0a: function(arg0, arg1) {\n arg0.externalTexture = arg1;\n },\n __wbg_set_fail_op_739cc3815d38c95f: function(arg0, arg1) {\n arg0.failOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_feb3714f475485ba: function(arg0, arg1, arg2) {\n arg0.set(getArrayU8FromWasm0(arg1, arg2));\n },\n __wbg_set_flip_y_ab62f34abbe69be1: function(arg0, arg1) {\n arg0.flipY = arg1 !== 0;\n },\n __wbg_set_format_1119b9930bd324e1: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_443ea19e2d25a1e2: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_459792306baadae5: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_46b1c6b3acc10b24: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_5a62f31a4690f935: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuVertexFormat[arg1];\n },\n __wbg_set_format_efec4f7d9471ddbb: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_fd579d96fa4e468c: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_fragment_bea523f8973c326e: function(arg0, arg1) {\n arg0.fragment = arg1;\n },\n __wbg_set_front_face_30951d0404e9e6d4: function(arg0, arg1) {\n arg0.frontFace = __wbindgen_enum_GpuFrontFace[arg1];\n },\n __wbg_set_g_90eacc6608e549f8: function(arg0, arg1) {\n arg0.g = arg1;\n },\n __wbg_set_has_dynamic_offset_6e5f3385eb579529: function(arg0, arg1) {\n arg0.hasDynamicOffset = arg1 !== 0;\n },\n __wbg_set_height_3f64e19acf29f5fb: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae0610d318c3428c: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae24c2f7d580ae0a: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_label_08745022b1ec7b66: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_11c9eb57693a8459: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_20c42b4ebeb250d5: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_22e3966c8d513ba6: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_5347fc976d15e94c: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_644bc1b32c7917b0: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_73c99dab6708c962: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_85a21b5fdd57fd91: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_89d2ffaf598df6a4: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_9e68078b9533426b: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_a80ced9a51c33d0f: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_cba03ffef7ae90a3: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_f654bcb731d4d9ca: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_layout_200fc3b143da0a9e: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_3f0cb99635c33123: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_gpu_auto_layout_mode_2e8a53f8643b4f69: function(arg0, arg1) {\n arg0.layout = __wbindgen_enum_GpuAutoLayoutMode[arg1];\n },\n __wbg_set_load_op_e8c33d4bdd2772aa: function(arg0, arg1) {\n arg0.loadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_lod_max_clamp_fcbef26e87120fac: function(arg0, arg1) {\n arg0.lodMaxClamp = arg1;\n },\n __wbg_set_lod_min_clamp_f5b6ddca1e4d813f: function(arg0, arg1) {\n arg0.lodMinClamp = arg1;\n },\n __wbg_set_mag_filter_ba0a2f25ad41eea8: function(arg0, arg1) {\n arg0.magFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mapped_at_creation_8af5b87ccb898bbe: function(arg0, arg1) {\n arg0.mappedAtCreation = arg1 !== 0;\n },\n __wbg_set_mask_0de0e782abec3c25: function(arg0, arg1) {\n arg0.mask = arg1 >>> 0;\n },\n __wbg_set_max_anisotropy_8361213d3df93532: function(arg0, arg1) {\n arg0.maxAnisotropy = arg1;\n },\n __wbg_set_min_binding_size_f64_c6d68d773b7051d3: function(arg0, arg1) {\n arg0.minBindingSize = arg1;\n },\n __wbg_set_min_filter_8aa8b0f7523a0281: function(arg0, arg1) {\n arg0.minFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mip_level_102afeb158e4f728: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_c0ac46de264d83ec: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_cd650972803ed9eb: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_f0c5ed95eedda453: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mipmap_filter_1cbdec28d1b54d9d: function(arg0, arg1) {\n arg0.mipmapFilter = __wbindgen_enum_GpuMipmapFilterMode[arg1];\n },\n __wbg_set_mode_51d2c5a5ac0f7ac9: function(arg0, arg1) {\n arg0.mode = __wbindgen_enum_GpuCanvasToneMappingMode[arg1];\n },\n __wbg_set_module_3dec1a50bca7870a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_module_b42baf3925e2a94a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_multisample_6af76792fae6efb1: function(arg0, arg1) {\n arg0.multisample = arg1;\n },\n __wbg_set_multisampled_ae3f9f01a324f57c: function(arg0, arg1) {\n arg0.multisampled = arg1 !== 0;\n },\n __wbg_set_offset_f64_15176b737de7dde0: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_18de9c771f307302: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_52f728fc5c98a52c: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_9374d9e912985773: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_operation_e103287df7ac9cf6: function(arg0, arg1) {\n arg0.operation = __wbindgen_enum_GpuBlendOperation[arg1];\n },\n __wbg_set_origin_gpu_origin_2d_dict_0e541bd50713ae04: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_26016670147a706c: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_4e6802818d9d43c7: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_pass_op_4d08c3105f64a17a: function(arg0, arg1) {\n arg0.passOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_power_preference_6bc1d2697a0e7374: function(arg0, arg1) {\n arg0.powerPreference = __wbindgen_enum_GpuPowerPreference[arg1];\n },\n __wbg_set_premultiplied_alpha_3625f78af5f2fed6: function(arg0, arg1) {\n arg0.premultipliedAlpha = arg1 !== 0;\n },\n __wbg_set_primitive_ef867d733c4efb1c: function(arg0, arg1) {\n arg0.primitive = arg1;\n },\n __wbg_set_query_set_765c4c9ab99342cb: function(arg0, arg1) {\n arg0.querySet = arg1;\n },\n __wbg_set_r_1116d6a5f656263d: function(arg0, arg1) {\n arg0.r = arg1;\n },\n __wbg_set_required_features_5bda1420e19461b2: function(arg0, arg1, arg2) {\n arg0.requiredFeatures = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_required_limits_e78b923d73f9b596: function(arg0, arg1) {\n arg0.requiredLimits = arg1;\n },\n __wbg_set_resolve_target_gpu_texture_view_a7a97a7c04d84698: function(arg0, arg1) {\n arg0.resolveTarget = arg1;\n },\n __wbg_set_resource_0f960a4279e7e400: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_buffer_binding_53a2189a77dd38be: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_texture_view_9153a2356b958667: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_rows_per_image_11e9552fb5c5c5ab: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_rows_per_image_df6af33a5492c1cf: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_sample_count_8262aacc91878e4d: function(arg0, arg1) {\n arg0.sampleCount = arg1 >>> 0;\n },\n __wbg_set_sample_type_563589178fc892fe: function(arg0, arg1) {\n arg0.sampleType = __wbindgen_enum_GpuTextureSampleType[arg1];\n },\n __wbg_set_sampler_ccdca76ef8e642ca: function(arg0, arg1) {\n arg0.sampler = arg1;\n },\n __wbg_set_shader_location_31dc427c303a32aa: function(arg0, arg1) {\n arg0.shaderLocation = arg1 >>> 0;\n },\n __wbg_set_size_f64_3ff72c0d736c42a1: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_f64_9b65e4916b2eb111: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_gpu_extent_3d_dict_bba6669c79c26190: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_source_b5f82926b86ec9d9: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_canvas_element_a9840c24a328a44e: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_image_element_b2803013cdaaa4f6: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_video_element_9fd22376f74c9aff: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_image_data_2d6a4979315db9d8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_offscreen_canvas_ef8e002b1f9c1fd8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_video_frame_e98ea9a6467ae147: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_src_factor_7e90d4b7d8227fc5: function(arg0, arg1) {\n arg0.srcFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_stencil_back_6b5aeefbb90ae3ae: function(arg0, arg1) {\n arg0.stencilBack = arg1;\n },\n __wbg_set_stencil_clear_value_56fa848198a9b430: function(arg0, arg1) {\n arg0.stencilClearValue = arg1 >>> 0;\n },\n __wbg_set_stencil_front_4ffeca9473bca095: function(arg0, arg1) {\n arg0.stencilFront = arg1;\n },\n __wbg_set_stencil_load_op_b7a9fe3ad789b6c6: function(arg0, arg1) {\n arg0.stencilLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_stencil_read_mask_7cfe0945679de134: function(arg0, arg1) {\n arg0.stencilReadMask = arg1 >>> 0;\n },\n __wbg_set_stencil_read_only_0dde0c073192b5fa: function(arg0, arg1) {\n arg0.stencilReadOnly = arg1 !== 0;\n },\n __wbg_set_stencil_store_op_d320bcbb72456a4c: function(arg0, arg1) {\n arg0.stencilStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_stencil_write_mask_765017d5830ee98a: function(arg0, arg1) {\n arg0.stencilWriteMask = arg1 >>> 0;\n },\n __wbg_set_step_mode_2b1318f00e2ddc02: function(arg0, arg1) {\n arg0.stepMode = __wbindgen_enum_GpuVertexStepMode[arg1];\n },\n __wbg_set_storage_texture_b9e95e260c9d49a3: function(arg0, arg1) {\n arg0.storageTexture = arg1;\n },\n __wbg_set_store_op_e2b740eddfd2713f: function(arg0, arg1) {\n arg0.storeOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_strip_index_format_22ddab1b8f352c1d: function(arg0, arg1) {\n arg0.stripIndexFormat = __wbindgen_enum_GpuIndexFormat[arg1];\n },\n __wbg_set_targets_07e15f3cca640faf: function(arg0, arg1, arg2) {\n arg0.targets = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_texture_7b9ace323bfe7938: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_84a5f84f0f451291: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_b35a4d6a35c491fa: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_timestamp_writes_1d304b9eb09ff227: function(arg0, arg1) {\n arg0.timestampWrites = arg1;\n },\n __wbg_set_tone_mapping_23fcd4f846a61048: function(arg0, arg1) {\n arg0.toneMapping = arg1;\n },\n __wbg_set_topology_b29804e5549370f5: function(arg0, arg1) {\n arg0.topology = __wbindgen_enum_GpuPrimitiveTopology[arg1];\n },\n __wbg_set_type_ac87cc570da17000: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuBufferBindingType[arg1];\n },\n __wbg_set_type_f3d1ad35dc7889f9: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuSamplerBindingType[arg1];\n },\n __wbg_set_unclipped_depth_59155eb615f193fe: function(arg0, arg1) {\n arg0.unclippedDepth = arg1 !== 0;\n },\n __wbg_set_usage_5ba672bf81ba9859: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_b0070c2ce47149a6: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_bac3cabe90090275: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_f3e1a48118ff483a: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_vertex_00b1e17dc3fe7fb3: function(arg0, arg1) {\n arg0.vertex = arg1;\n },\n __wbg_set_view_dimension_e9e9cd07d7ad686d: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_dimension_eb197c35c45e572c: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_formats_2540cdb8dde31055: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_formats_845b425c1d19e1af: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_gpu_texture_view_9a3c34ba4d1969b8: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_view_gpu_texture_view_efa644c1ce3c4deb: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_visibility_65413465e7b24eb6: function(arg0, arg1) {\n arg0.visibility = arg1 >>> 0;\n },\n __wbg_set_width_5f89a551b5472887: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_a2410cafbdefeb5a: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_eb3001e1dcabb909: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_write_mask_39ce121635fd4296: function(arg0, arg1) {\n arg0.writeMask = arg1 >>> 0;\n },\n __wbg_set_x_b078c58009aa57bd: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_x_d851b2611b154969: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_y_3df92c4bcff23616: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_y_76a6f85fc60d74e5: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_z_3633c53887a9ff5e: function(arg0, arg1) {\n arg0.z = arg1 >>> 0;\n },\n __wbg_stack_575c4e0918581b9c: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_static_accessor_GLOBAL_THIS_003ee833af9699fc: function() {\n const ret = typeof globalThis === 'undefined' ? undefined : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_GLOBAL_e4293fb22cbe77da: function() {\n const ret = typeof global === 'undefined' ? undefined : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_SELF_53bb20457401453d: function() {\n const ret = typeof self === 'undefined' ? undefined : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_WINDOW_b5e0810bfecb7feb: function() {\n const ret = typeof window === 'undefined' ? undefined : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_subgroupMaxSize_3586e822dc3603f6: function(arg0) {\n const ret = arg0.subgroupMaxSize;\n return ret;\n },\n __wbg_subgroupMinSize_17f758985cdd1dab: function(arg0) {\n const ret = arg0.subgroupMinSize;\n return ret;\n },\n __wbg_submit_077c85cc28e36892: function(arg0, arg1, arg2) {\n arg0.submit(getArrayJsValueViewFromWasm0(arg1, arg2));\n },\n __wbg_then_3a4f899454bcf8c9: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_then_656f253a5dd7d8ea: function(arg0, arg1, arg2) {\n const ret = arg0.then(arg1, arg2);\n return ret;\n },\n __wbg_then_e3f7f2d365708be8: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_unconfigure_835307f58dc68d80: function(arg0) {\n arg0.unconfigure();\n },\n __wbg_unmap_6a96b14c9ef5f7f5: function(arg0) {\n arg0.unmap();\n },\n __wbg_videoHeight_0d108b7f03cde4ef: function(arg0) {\n const ret = arg0.videoHeight;\n return ret;\n },\n __wbg_videoWidth_34b4e257cb35c6ca: function(arg0) {\n const ret = arg0.videoWidth;\n return ret;\n },\n __wbg_width_000813f5f73b7341: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_babc5dc7654771b1: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_f84552448726a9a9: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_writeBuffer_d7640e64ceb69371: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.writeBuffer(arg1, arg2, getArrayU8FromWasm0(arg3, arg4), arg5, arg6);\n }, arguments); },\n __wbg_writeTexture_dba1e801af087dfd: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.writeTexture(arg1, getArrayU8FromWasm0(arg2, arg3), arg4, arg5);\n }, arguments); },\n __wbindgen_generic_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 586, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDevice\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDeviceLostInfo\")], shim_idx: 539, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_);\n return ret;\n },\n __wbindgen_generic_0000000000000004: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"any\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46);\n return ret;\n },\n __wbindgen_generic_0000000000000005: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"undefined\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47);\n return ret;\n },\n __wbindgen_generic_0000000000000006: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_generic_0000000000000007: function(arg0, arg1) {\n // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref(\"Uint8Array\")`.\n const ret = getArrayU8FromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_generic_0000000000000008: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n table.set(0, undefined);\n table.set(1024, undefined);\n table.set(1025, null);\n table.set(1026, true);\n table.set(1027, false);\n },\n };\n return {\n __proto__: null,\n \"./ms_renderer_bg.js\": import0,\n };\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2);\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3);\n}\n\n\nconst __wbindgen_enum_GpuAddressMode = [\"clamp-to-edge\", \"repeat\", \"mirror-repeat\"];\n\n\nconst __wbindgen_enum_GpuAutoLayoutMode = [\"auto\"];\n\n\nconst __wbindgen_enum_GpuBlendFactor = [\"zero\", \"one\", \"src\", \"one-minus-src\", \"src-alpha\", \"one-minus-src-alpha\", \"dst\", \"one-minus-dst\", \"dst-alpha\", \"one-minus-dst-alpha\", \"src-alpha-saturated\", \"constant\", \"one-minus-constant\", \"src1\", \"one-minus-src1\", \"src1-alpha\", \"one-minus-src1-alpha\"];\n\n\nconst __wbindgen_enum_GpuBlendOperation = [\"add\", \"subtract\", \"reverse-subtract\", \"min\", \"max\"];\n\n\nconst __wbindgen_enum_GpuBufferBindingType = [\"uniform\", \"storage\", \"read-only-storage\"];\n\n\nconst __wbindgen_enum_GpuCanvasAlphaMode = [\"opaque\", \"premultiplied\"];\n\n\nconst __wbindgen_enum_GpuCanvasToneMappingMode = [\"standard\", \"extended\"];\n\n\nconst __wbindgen_enum_GpuCompareFunction = [\"never\", \"less\", \"equal\", \"less-equal\", \"greater\", \"not-equal\", \"greater-equal\", \"always\"];\n\n\nconst __wbindgen_enum_GpuCullMode = [\"none\", \"front\", \"back\"];\n\n\nconst __wbindgen_enum_GpuDeviceLostReason = [\"unknown\", \"destroyed\"];\n\n\nconst __wbindgen_enum_GpuFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuFrontFace = [\"ccw\", \"cw\"];\n\n\nconst __wbindgen_enum_GpuIndexFormat = [\"uint16\", \"uint32\"];\n\n\nconst __wbindgen_enum_GpuLoadOp = [\"load\", \"clear\"];\n\n\nconst __wbindgen_enum_GpuMipmapFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuPowerPreference = [\"low-power\", \"high-performance\"];\n\n\nconst __wbindgen_enum_GpuPrimitiveTopology = [\"point-list\", \"line-list\", \"line-strip\", \"triangle-list\", \"triangle-strip\"];\n\n\nconst __wbindgen_enum_GpuSamplerBindingType = [\"filtering\", \"non-filtering\", \"comparison\"];\n\n\nconst __wbindgen_enum_GpuStencilOperation = [\"keep\", \"zero\", \"replace\", \"invert\", \"increment-clamp\", \"decrement-clamp\", \"increment-wrap\", \"decrement-wrap\"];\n\n\nconst __wbindgen_enum_GpuStorageTextureAccess = [\"write-only\", \"read-only\", \"read-write\"];\n\n\nconst __wbindgen_enum_GpuStoreOp = [\"store\", \"discard\"];\n\n\nconst __wbindgen_enum_GpuTextureAspect = [\"all\", \"stencil-only\", \"depth-only\"];\n\n\nconst __wbindgen_enum_GpuTextureDimension = [\"1d\", \"2d\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuTextureFormat = [\"r8unorm\", \"r8snorm\", \"r8uint\", \"r8sint\", \"r16unorm\", \"r16snorm\", \"r16uint\", \"r16sint\", \"r16float\", \"rg8unorm\", \"rg8snorm\", \"rg8uint\", \"rg8sint\", \"r32uint\", \"r32sint\", \"r32float\", \"rg16unorm\", \"rg16snorm\", \"rg16uint\", \"rg16sint\", \"rg16float\", \"rgba8unorm\", \"rgba8unorm-srgb\", \"rgba8snorm\", \"rgba8uint\", \"rgba8sint\", \"bgra8unorm\", \"bgra8unorm-srgb\", \"rgb9e5ufloat\", \"rgb10a2uint\", \"rgb10a2unorm\", \"rg11b10ufloat\", \"rg32uint\", \"rg32sint\", \"rg32float\", \"rgba16unorm\", \"rgba16snorm\", \"rgba16uint\", \"rgba16sint\", \"rgba16float\", \"rgba32uint\", \"rgba32sint\", \"rgba32float\", \"stencil8\", \"depth16unorm\", \"depth24plus\", \"depth24plus-stencil8\", \"depth32float\", \"depth32float-stencil8\", \"bc1-rgba-unorm\", \"bc1-rgba-unorm-srgb\", \"bc2-rgba-unorm\", \"bc2-rgba-unorm-srgb\", \"bc3-rgba-unorm\", \"bc3-rgba-unorm-srgb\", \"bc4-r-unorm\", \"bc4-r-snorm\", \"bc5-rg-unorm\", \"bc5-rg-snorm\", \"bc6h-rgb-ufloat\", \"bc6h-rgb-float\", \"bc7-rgba-unorm\", \"bc7-rgba-unorm-srgb\", \"etc2-rgb8unorm\", \"etc2-rgb8unorm-srgb\", \"etc2-rgb8a1unorm\", \"etc2-rgb8a1unorm-srgb\", \"etc2-rgba8unorm\", \"etc2-rgba8unorm-srgb\", \"eac-r11unorm\", \"eac-r11snorm\", \"eac-rg11unorm\", \"eac-rg11snorm\", \"astc-4x4-unorm\", \"astc-4x4-unorm-srgb\", \"astc-5x4-unorm\", \"astc-5x4-unorm-srgb\", \"astc-5x5-unorm\", \"astc-5x5-unorm-srgb\", \"astc-6x5-unorm\", \"astc-6x5-unorm-srgb\", \"astc-6x6-unorm\", \"astc-6x6-unorm-srgb\", \"astc-8x5-unorm\", \"astc-8x5-unorm-srgb\", \"astc-8x6-unorm\", \"astc-8x6-unorm-srgb\", \"astc-8x8-unorm\", \"astc-8x8-unorm-srgb\", \"astc-10x5-unorm\", \"astc-10x5-unorm-srgb\", \"astc-10x6-unorm\", \"astc-10x6-unorm-srgb\", \"astc-10x8-unorm\", \"astc-10x8-unorm-srgb\", \"astc-10x10-unorm\", \"astc-10x10-unorm-srgb\", \"astc-12x10-unorm\", \"astc-12x10-unorm-srgb\", \"astc-12x12-unorm\", \"astc-12x12-unorm-srgb\"];\n\n\nconst __wbindgen_enum_GpuTextureSampleType = [\"float\", \"unfilterable-float\", \"depth\", \"sint\", \"uint\"];\n\n\nconst __wbindgen_enum_GpuTextureViewDimension = [\"1d\", \"2d\", \"2d-array\", \"cube\", \"cube-array\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuVertexFormat = [\"uint8\", \"uint8x2\", \"uint8x4\", \"sint8\", \"sint8x2\", \"sint8x4\", \"unorm8\", \"unorm8x2\", \"unorm8x4\", \"snorm8\", \"snorm8x2\", \"snorm8x4\", \"uint16\", \"uint16x2\", \"uint16x4\", \"sint16\", \"sint16x2\", \"sint16x4\", \"unorm16\", \"unorm16x2\", \"unorm16x4\", \"snorm16\", \"snorm16x2\", \"snorm16x4\", \"float16\", \"float16x2\", \"float16x4\", \"float32\", \"float32x2\", \"float32x3\", \"float32x4\", \"uint32\", \"uint32x2\", \"uint32x3\", \"uint32x4\", \"sint32\", \"sint32x2\", \"sint32x3\", \"sint32x4\", \"unorm10-10-10-2\", \"unorm8x4-bgra\"];\n\n\nconst __wbindgen_enum_GpuVertexStepMode = [\"vertex\", \"instance\"];\nconst MsTextFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_mstext_free(ptr, 1));\nconst RendererFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_renderer_free(ptr, 1));\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => wasm.__wbindgen_destroy_closure(state.a, state.b));\n\nfunction debugString(val) {\n switch (typeof val) {\n // primitive types\n case 'number':\n case 'boolean':\n case 'undefined':\n return `${val}`;\n case 'string':\n return JSON.stringify(val);\n case 'bigint':\n return `${val}n`;\n case 'symbol':\n return val.description !== undefined\n ? `Symbol(${val.description})`\n : 'Symbol';\n case 'function':\n return typeof val.name === 'string' && val.name !== ''\n ? `Function(${val.name})`\n : 'Function';\n case 'object': {\n if (val === null) {\n return 'null';\n }\n // objects\n if (Array.isArray(val)) {\n return '[' + Array.from(val, debugString).join(', ') + ']';\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n\n const toStringOutput = toString.call(val);\n // Test for built-in\n const className = /\\[object ([^\\]]+)\\]/.exec(toStringOutput)?.[1];\n\n // Failed to match the standard '[object ClassName]'\n if (className === undefined) {\n return toStringOutput;\n }\n if (className === 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n }\n // Per MDN: 'This list of values is exhaustive.'\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#description\n }\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayF64FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);\n}\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n wasm.__externref_drop_slice(ptr, len);\n return result;\n}\n\nfunction getArrayJsValueViewFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n return result;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nlet cachedFloat32ArrayMemory0 = null;\nfunction getFloat32ArrayMemory0() {\n if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {\n cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);\n }\n return cachedFloat32ArrayMemory0;\n}\n\nlet cachedFloat64ArrayMemory0 = null;\nfunction getFloat64ArrayMemory0() {\n if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {\n cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction makeMutClosure(arg0, arg1, f) {\n const state = { a: arg0, b: arg1, cnt: 1 };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n state.a = a;\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n wasm.__wbindgen_destroy_closure(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArrayF32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getFloat32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(bytes) {\n numBytesDecoded += bytes.length;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\n cachedTextDecoder.decode();\n numBytesDecoded = bytes.length;\n }\n return cachedTextDecoder.decode(bytes);\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedFloat32ArrayMemory0 = null;\n cachedFloat64ArrayMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (!module.ok) {\n throw new Error(`failed to fetch Wasm: ${module.status} ${module.statusText} fetching '${module.url}'`);\n }\n\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nlet __wbg_init_promise;\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n if (__wbg_init_promise === undefined) {\n __wbg_init_promise = __wbg_init_once(module_or_path);\n __wbg_init_promise.catch(() => { __wbg_init_promise = undefined; });\n }\n return __wbg_init_promise;\n}\n\nasync function __wbg_init_once(module_or_path) {\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('ms_renderer_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","// User shaders: WGSL fills and effects written against the contract in\n// DESIGN.md §6.3. naga (in the WASM) validates and reflects a source at once;\n// the browser then compiles its pipelines asynchronously, and only when they\n// are ready does the renderer draw with them. A frame never waits: until then\n// the fill draws nothing and the effect passes its input through.\n\nimport { validate_shader } from \"../pkg/ms_renderer.js\";\nimport type { Renderer } from \"../pkg/ms_renderer.js\";\n\nexport type ShaderScope = \"fill\" | \"effect\";\n\n/** One problem in an author's source. `line`/`column` are 1-based; 0 = not in the source. */\nexport interface ShaderDiagnostic {\n line: number;\n column: number;\n length: number;\n message: string;\n /** `naga`: the renderer's validation; `browser`: the GPU's own compile. */\n source: \"naga\" | \"browser\";\n}\n\n/** One member of the source's `struct Params`, as WGSL's uniform layout places it. */\nexport interface ShaderField {\n name: string;\n /** Byte offset in `Params`. */\n offset: number;\n /** 0 f32, 1 i32, 2 u32. */\n scalar: number;\n /** Components per element (1–4). */\n components: number;\n /** Elements (array length or matrix columns), `stride` bytes apart. */\n elements: number;\n stride: number;\n /** The WGSL type (`vec3<f32>`, `array<vec4<f32>, 4>`). */\n type: string;\n}\n\nexport interface ShaderReport {\n ok: boolean;\n diagnostics: ShaderDiagnostic[];\n fields: ShaderField[];\n /** Size of `Params` in bytes. */\n size: number;\n /** The assembled module (header, renderer code, the author's). */\n wgsl?: string;\n}\n\nconst KIND = { fill: 0, effect: 1 } as const;\n\nfunction parse(json: string): ShaderReport {\n const r = JSON.parse(json) as ShaderReport;\n for (const d of r.diagnostics) d.source = \"naga\";\n return r;\n}\n\n/** Validates a source with naga; needs the renderer's WASM loaded (`loadRendererWasm`). */\nexport function validateShader(scope: ShaderScope, source: string): ShaderReport {\n return parse(validate_shader(KIND[scope], source));\n}\n\ntype Values = Record<string, number | readonly number[]>;\n\n/**\n * Named values as `Params` bytes (as u32 words, so integer bit patterns cross\n * intact). A field without a value reads as 0; a value with no field is ignored.\n */\nexport function packParams(fields: readonly ShaderField[], size: number, values: Values): Uint32Array {\n const words = new Uint32Array(Math.ceil(size / 4));\n const f32 = new Float32Array(words.buffer);\n const i32 = new Int32Array(words.buffer);\n for (const f of fields) {\n const v = values[f.name];\n if (v === undefined) continue;\n const flat = typeof v === \"number\" ? [v] : v.flat(Infinity as 1) as number[];\n for (let e = 0; e < f.elements; e++) {\n for (let c = 0; c < f.components; c++) {\n const x = flat[e * f.components + c];\n if (x === undefined) continue;\n const at = (f.offset + e * f.stride + c * 4) >> 2;\n if (at >= words.length) continue;\n if (f.scalar === 0) f32[at] = x;\n else if (f.scalar === 1) i32[at] = Math.round(x);\n else words[at] = Math.max(0, Math.round(x));\n }\n }\n }\n return words;\n}\n\nexport type ProgramState = \"compiling\" | \"ready\" | \"failed\";\n\nexport interface UserProgram {\n id: number;\n scope: ShaderScope;\n report: ShaderReport;\n state: ProgramState;\n /** The browser's own messages (`getCompilationInfo`), once compiled. */\n browser: ShaderDiagnostic[];\n /** Settles when the program is ready or has failed. */\n settled: Promise<void>;\n}\n\n/** Max programs kept per device before the least recently used go. */\nconst MAX_PROGRAMS = 64;\n\n/**\n * How long the browser may take to compile a program and its pipelines. A\n * compile that never settles would hold an export waiting on it forever.\n */\nexport const COMPILE_TIMEOUT_MS = 10_000;\n\nfunction withinTimeout<T>(work: Promise<T>, what: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`the browser took over ${COMPILE_TIMEOUT_MS / 1000} s to ${what}`)), COMPILE_TIMEOUT_MS);\n });\n return Promise.race([work, timeout]).finally(() => clearTimeout(timer));\n}\n\n/** One device's user programs, by scope and source. */\nexport class UserShaders {\n private programs = new Map<string, UserProgram>();\n private nextId = 0;\n private pending = new Set<Promise<void>>();\n\n /** `onReady` runs when a program becomes drawable, so its host can draw again. */\n constructor(private readonly r: Renderer, private readonly onReady: () => void) {}\n\n /** The program for `source`, added (and compiling) on first use. */\n program(scope: ShaderScope, source: string): UserProgram {\n const key = `${scope}\\n${source}`;\n const known = this.programs.get(key);\n if (known) {\n // Most recently used last.\n this.programs.delete(key);\n this.programs.set(key, known);\n return known;\n }\n if (this.programs.size >= MAX_PROGRAMS) {\n const [oldKey, old] = this.programs.entries().next().value!;\n this.programs.delete(oldKey);\n if (old.state !== \"compiling\") this.r.shader_remove(old.id);\n }\n const id = this.nextId++;\n const report = parse(this.r.shader_add(id, KIND[scope], source));\n const p: UserProgram = { id, scope, report, state: report.ok ? \"compiling\" : \"failed\", browser: [], settled: Promise.resolve() };\n if (report.ok) {\n const settled = this.compile(p).finally(() => this.pending.delete(settled));\n this.pending.add(settled);\n p.settled = settled;\n }\n this.programs.set(key, p);\n return p;\n }\n\n /** Whether a program is still compiling. */\n hasPending(): boolean {\n return this.pending.size > 0;\n }\n\n /** Settles once every program added so far is ready or has failed (export waits on this). */\n async whenReady(): Promise<void> {\n while (this.pending.size) await Promise.all([...this.pending]);\n }\n\n /**\n * The browser's compile of the module, then its pipelines, asynchronously\n * (`createRenderPipelineAsync`, descriptors mirroring gpu.rs). The\n * renderer's own pipelines are created after, from the same descriptors,\n * which the browser serves from its cache.\n */\n private async compile(p: UserProgram): Promise<void> {\n const device = this.r.gpu_device() as any;\n const wgsl = p.report.wgsl!;\n try {\n if (device) {\n const module = device.createShaderModule({ code: wgsl });\n const info = await withinTimeout<{ messages: any[] }>(module.getCompilationInfo(), \"compile it\");\n p.browser = browserDiagnostics(info.messages, wgsl);\n if (info.messages.some((m: { type: string }) => m.type === \"error\")) {\n p.state = \"failed\";\n this.r.shader_remove(p.id);\n return;\n }\n const formats = this.r.shader_formats(KIND[p.scope]);\n const warm = await withinTimeout(Promise.all(formats.map((f) => device.createRenderPipelineAsync(pipelineDesc(device, module, p.scope, f)).catch(() => null))), \"build its pipelines\");\n this.r.shader_build(p.id);\n void warm;\n } else {\n this.r.shader_build(p.id);\n }\n p.state = \"ready\";\n this.onReady();\n } catch (e) {\n p.state = \"failed\";\n p.browser.push({ line: 0, column: 0, length: 0, message: `error: ${String((e as Error)?.message ?? e)}`, source: \"browser\" });\n }\n }\n}\n\n/** `GPUCompilationMessage`s located in the author's code (after the marker line). */\nfunction browserDiagnostics(messages: readonly any[], wgsl: string): ShaderDiagnostic[] {\n const marker = wgsl.indexOf(\"// ── the author's code ──\\n\");\n const userLine = marker < 0 ? 0 : wgsl.slice(0, marker).split(\"\\n\").length + 1;\n return messages.map((m) => {\n const line = m.lineNum >= userLine && userLine > 0 ? m.lineNum - userLine + 1 : 0;\n return { line, column: line ? m.linePos : 0, length: m.length ?? 0, message: `${m.type}: ${m.message}`, source: \"browser\" as const };\n });\n}\n\nconst VIS = 3; // VERTEX | FRAGMENT\n\n/**\n * gpu.rs's bind group layouts for user pipelines, by group, one entry per\n * binding from 0. `layout_parity_test.rs` holds them equal to gpu.rs's.\n */\nexport const USER_LAYOUTS = {\n fill: [\n [\"uniform\", \"storage\", \"storage\", \"storage\", \"storage\", \"storage\", \"unfilterable-2d-array\", \"storage\"],\n [\"texture\", \"sampler\"],\n [\"uniform\"],\n ],\n effect: [\n [\"texture\", \"texture\", \"texture\", \"sampler\", \"sampler\", \"uniform\", \"texture\"],\n [\"uniform\"],\n ],\n} as const;\n\nconst ENTRY: Record<string, object> = {\n uniform: { buffer: { type: \"uniform\", hasDynamicOffset: true } },\n storage: { buffer: { type: \"read-only-storage\" } },\n texture: { texture: { sampleType: \"float\", viewDimension: \"2d\" } },\n sampler: { sampler: { type: \"filtering\" } },\n \"unfilterable-2d-array\": { texture: { sampleType: \"unfilterable-float\", viewDimension: \"2d-array\" } },\n};\n\nfunction layouts(device: any, scope: ShaderScope): any[] {\n return USER_LAYOUTS[scope].map((group) => device.createBindGroupLayout({ entries: group.map((kind, binding) => ({ binding, visibility: VIS, ...ENTRY[kind] })) }));\n}\n\nfunction pipelineDesc(device: any, module: any, scope: ShaderScope, format: string): object {\n const over = { srcFactor: \"one\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" };\n const fill = scope === \"fill\";\n return {\n layout: device.createPipelineLayout({ bindGroupLayouts: layouts(device, scope) }),\n vertex: { module, entryPoint: fill ? \"ms_vs_quad\" : \"ms_vs_effect\", buffers: [] },\n primitive: { topology: \"triangle-list\", cullMode: \"none\" },\n multisample: { count: 1 },\n fragment: {\n module,\n entryPoint: fill ? \"ms_fs_prim\" : \"ms_fs_effect\",\n targets: [{ format, ...(fill ? { blend: { color: over, alpha: over } } : {}), writeMask: 0xf }],\n },\n };\n}\n\n/** Core's blend names → the effect header's `blend_mode` index (+1 on the wire; 0 = replace). */\nexport const EFFECT_BLEND: Record<string, number> = {\n normal: 0, multiply: 1, screen: 2, overlay: 3, darken: 4, lighten: 5, \"color-dodge\": 6, \"color-burn\": 7,\n \"hard-light\": 8, \"soft-light\": 9, difference: 10, exclusion: 11, hue: 12, saturation: 13, color: 14, luminosity: 15,\n};\n\n/** What a host is told about a shader stored with `language: \"sksl\"` from before Motion Script ran only WGSL. */\nexport const SKSL_FILL = \"A shader fill is written in SkSL, which Motion Script no longer runs, so it draws nothing. Port it to WGSL (fn fill(in: FillIn) -> vec4f).\";\nexport const SKSL_EFFECT = \"A shader effect is written in SkSL, which Motion Script no longer runs, so it is skipped. Port it to WGSL (fn effect(in: EffectIn) -> vec4f).\";\n","// A WGSL shader's uniforms are bound to its `struct Params` by name, so a\n// value naming no member is dropped and a member with no value reads 0: a\n// renamed member silently zeroes. Both are reported as `params` issues.\n\nimport { normalizeUniforms, shaderContractOf, WGSL_CONTRACT, type RenderIssue } from \"@motionscript/core\";\nimport { type ShaderScope, validateShader } from \"../user-shaders\";\n\n/** Member names per scope and source (null: the source does not compile, reported elsewhere). */\nconst members = new Map<string, readonly string[] | null>();\nconst MAX_SOURCES = 64;\n\nfunction membersOf(scope: ShaderScope, source: string): readonly string[] | null {\n const key = `${scope}\\n${source}`;\n let known = members.get(key);\n if (known === undefined) {\n try {\n const report = validateShader(scope, source);\n known = report.ok ? report.fields.map((f) => f.name) : null;\n } catch {\n // The WASM is not loaded.\n return null;\n }\n if (members.size >= MAX_SOURCES) members.delete(members.keys().next().value!);\n } else {\n members.delete(key);\n }\n members.set(key, known);\n return known;\n}\n\n/** What a WGSL fill or effect's uniforms and its `Params` disagree on, and a contract newer than this renderer's. */\nexport function shaderParamIssues(scope: ShaderScope, shader: { source?: string; language?: string; contract?: number; uniforms?: unknown }): RenderIssue[] {\n const source = shader.source ?? \"\";\n const contract = shaderContractOf(shader);\n if (!source.trim() || contract === undefined) return [];\n const out: RenderIssue[] = [];\n if (contract > WGSL_CONTRACT) {\n out.push({\n kind: \"shader\", feature: `${scope}:contract-${contract}`,\n message: `A WGSL shader ${scope} is written for shader contract ${contract}; this renderer implements ${WGSL_CONTRACT}, so it may not draw as intended.`,\n });\n }\n const names = membersOf(scope, source);\n if (!names) return out;\n const values = normalizeUniforms((shader.uniforms ?? {}) as Parameters<typeof normalizeUniforms>[0]);\n for (const name of Object.keys(values)) {\n if (!names.includes(name)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope} is given \"${name}\", which names no member of its struct Params, so the value is ignored.` });\n }\n }\n for (const name of names) {\n if (!(name in values)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope}'s Params.${name} is given no value, so it reads 0.` });\n }\n }\n return out;\n}\n","// Contour measurement on PathData, and what is built with it: trimPath keeps\n// the [start, end] fraction of the contours' total length, each cut exactly\n// (curves split at the parameter whose arc length matches; a segment is never\n// closed), and dash fitting cuts a pattern's \"on\" runs out of them.\n\nimport { pathOps } from \"@motionscript/core\";\nimport { type PathData, PathBuilder, VERB } from \"../doc\";\n\ntype Seg = { kind: \"line\" | \"quad\" | \"cubic\"; p: number[]; len: number; table: number[] };\n\nconst SAMPLES = 32;\n\nfunction at(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[0] + (p[2] - p[0]) * t, p[1] + (p[3] - p[1]) * t];\n if (s.kind === \"quad\") return [u * u * p[0] + 2 * u * t * p[2] + t * t * p[4], u * u * p[1] + 2 * u * t * p[3] + t * t * p[5]];\n return [\n u * u * u * p[0] + 3 * u * u * t * p[2] + 3 * u * t * t * p[4] + t * t * t * p[6],\n u * u * u * p[1] + 3 * u * u * t * p[3] + 3 * u * t * t * p[5] + t * t * t * p[7],\n ];\n}\n\nfunction measure(kind: Seg[\"kind\"], p: number[]): Seg {\n const table = [0];\n const n = kind === \"line\" ? 1 : SAMPLES;\n const s: Seg = { kind, p, len: 0, table };\n let prev = at(s, 0);\n for (let i = 1; i <= n; i++) {\n const q = at(s, i / n);\n table.push(table[i - 1] + Math.hypot(q[0] - prev[0], q[1] - prev[1]));\n prev = q;\n }\n s.len = table[n];\n return s;\n}\n\n/** Parameter at arc length d along the segment. */\nfunction tAt(s: Seg, d: number): number {\n const n = s.table.length - 1;\n if (d <= 0) return 0;\n if (d >= s.len) return 1;\n let i = 1;\n while (s.table[i] < d) i++;\n const a = s.table[i - 1], b = s.table[i];\n return (i - 1 + (b > a ? (d - a) / (b - a) : 0)) / n;\n}\n\n/** The part of a segment between parameters t0 < t1, as control points. */\nfunction slice(s: Seg, t0: number, t1: number): number[] {\n const p = s.p;\n if (s.kind === \"line\") return [...at(s, t0), ...at(s, t1)];\n // de Casteljau split at t1, then the left part at t0 / t1.\n const split = (pts: number[], t: number): [number[], number[]] => {\n const k = pts.length / 2;\n const rows: number[][] = [pts];\n for (let r = 1; r < k; r++) {\n const prev = rows[r - 1], row: number[] = [];\n for (let j = 0; j < prev.length - 2; j += 2) row.push(prev[j] + (prev[j + 2] - prev[j]) * t, prev[j + 1] + (prev[j + 3] - prev[j + 1]) * t);\n rows.push(row);\n }\n const left: number[] = [], right: number[] = [];\n for (let r = 0; r < k; r++) left.push(rows[r][0], rows[r][1]);\n for (let r = k - 1; r >= 0; r--) right.push(rows[r][rows[r].length - 2], rows[r][rows[r].length - 1]);\n return [left, right];\n };\n const [left] = t1 < 1 ? split(p, t1) : [p];\n if (t0 <= 0) return left;\n return split(left, t0 / t1)[1];\n}\n\nfunction contours(path: PathData): { segs: Seg[]; closed: boolean }[] {\n const out: { segs: Seg[]; closed: boolean }[] = [];\n let cur: { segs: Seg[]; closed: boolean } | null = null;\n let x = 0, y = 0, sx = 0, sy = 0, k = 0;\n const pts = path.points;\n for (const v of path.verbs) {\n if (v === VERB.move) {\n x = sx = pts[k++]; y = sy = pts[k++];\n cur = { segs: [], closed: false };\n out.push(cur);\n } else if (v === VERB.line) {\n const nx = pts[k++], ny = pts[k++];\n cur!.segs.push(measure(\"line\", [x, y, nx, ny])); x = nx; y = ny;\n } else if (v === VERB.quad) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3]]; k += 4;\n cur!.segs.push(measure(\"quad\", p)); x = p[4]; y = p[5];\n } else if (v === VERB.cubic) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3], pts[k + 4], pts[k + 5]]; k += 6;\n cur!.segs.push(measure(\"cubic\", p)); x = p[6]; y = p[7];\n } else if (v === VERB.close) {\n if (cur) {\n if (x !== sx || y !== sy) cur.segs.push(measure(\"line\", [x, y, sx, sy]));\n cur.closed = true;\n }\n x = sx; y = sy;\n }\n }\n return out.filter((c) => c.segs.length > 0);\n}\n\n/** The path's signed area over its control polygons (> 0: clockwise, y down). */\nexport function signedArea(path: PathData): number {\n let area = 0, k = 0, sx = 0, sy = 0, px = 0, py = 0;\n const pts = path.points;\n const to = (x: number, y: number) => {\n area += px * y - x * py;\n px = x; py = y;\n };\n for (const v of path.verbs) {\n if (v === VERB.move) {\n to(sx, sy);\n sx = px = pts[k++]; sy = py = pts[k++];\n } else if (v !== VERB.close) {\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n for (let i = 0; i < n; i++, k += 2) to(pts[k], pts[k + 1]);\n }\n }\n to(sx, sy);\n return area / 2;\n}\n\n/** The path traced backwards, contour by contour. */\nexport function reversePath(path: PathData): PathData {\n const b = new PathBuilder();\n const pts = path.points;\n let k = 0, i = 0;\n const verbs = path.verbs;\n while (i < verbs.length) {\n if (verbs[i] !== VERB.move) { i++; continue; }\n // One contour: its segments as [verb, points from its start].\n let x = pts[k++], y = pts[k++];\n const segs: { v: number; p: number[] }[] = [];\n let closed = false;\n for (i++; i < verbs.length && verbs[i] !== VERB.move; i++) {\n const v = verbs[i];\n if (v === VERB.close) { closed = true; continue; }\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n const p = [x, y];\n for (let j = 0; j < n; j++, k += 2) p.push(pts[k], pts[k + 1]);\n x = p[p.length - 2]; y = p[p.length - 1];\n segs.push({ v, p });\n }\n b.moveTo(x, y);\n for (let s = segs.length - 1; s >= 0; s--) {\n const { v, p } = segs[s];\n if (v === VERB.line) b.lineTo(p[0], p[1]);\n else if (v === VERB.quad) b.quadTo(p[2], p[3], p[0], p[1]);\n else b.cubicTo(p[4], p[5], p[2], p[3], p[0], p[1]);\n }\n if (closed) b.close();\n }\n return b.build();\n}\n\n/** Every contour closed (the shape has an interior to align a stroke against). */\nexport function isClosed(path: PathData): boolean {\n const cs = contours(path);\n return cs.length > 0 && cs.every((c) => c.closed);\n}\n\n/** getSegment(a, z, startWithMoveTo = true) of one contour, appended to `b`; false when nothing was. */\nfunction segment(segs: Seg[], a: number, z: number, b: PathBuilder): boolean {\n let pos = 0, moved = false;\n for (const s of segs) {\n const s0 = pos, s1 = pos + s.len;\n pos = s1;\n if (s1 <= a || s0 >= z) continue;\n const t0 = tAt(s, a - s0), t1 = tAt(s, z - s0);\n const q = slice(s, t0, t1);\n if (!moved) { b.moveTo(q[0], q[1]); moved = true; }\n if (s.kind === \"line\") b.lineTo(q[2], q[3]);\n else if (s.kind === \"quad\") b.quadTo(q[2], q[3], q[4], q[5]);\n else b.cubicTo(q[2], q[3], q[4], q[5], q[6], q[7]);\n }\n return moved;\n}\n\nexport function trimPath(path: PathData, start: number, end: number): PathData {\n const cs = contours(path);\n const total = cs.reduce((n, c) => n + c.segs.reduce((m, s) => m + s.len, 0), 0);\n if (total <= 0) return path;\n const d0 = start * total, d1 = end * total;\n const b = new PathBuilder();\n let acc = 0;\n let any = false;\n for (const c of cs) {\n const len = c.segs.reduce((m, s) => m + s.len, 0);\n const cs0 = acc, ce = acc + len;\n acc = ce;\n if (!(ce > d0 && cs0 < d1)) continue;\n any = segment(c.segs, Math.max(0, d0 - cs0), Math.min(len, d1 - cs0), b) || any;\n }\n return any ? b.build() : { verbs: new Uint8Array(0), points: new Float32Array(0) };\n}\n\n/** Position and unit tangent: x, y, tx, ty. */\nexport type PosTan = [number, number, number, number];\n\n/** One contour, measured. */\nexport interface Contour {\n length: number;\n closed: boolean;\n posTan(d: number): PosTan;\n /** The stretch between two arc lengths, appended to `b` as an open contour. */\n segment(from: number, to: number, b: PathBuilder): boolean;\n}\n\nfunction derivative(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[2] - p[0], p[3] - p[1]];\n if (s.kind === \"quad\") return [2 * (u * (p[2] - p[0]) + t * (p[4] - p[2])), 2 * (u * (p[3] - p[1]) + t * (p[5] - p[3]))];\n return [\n 3 * (u * u * (p[2] - p[0]) + 2 * u * t * (p[4] - p[2]) + t * t * (p[6] - p[4])),\n 3 * (u * u * (p[3] - p[1]) + 2 * u * t * (p[5] - p[3]) + t * t * (p[7] - p[5])),\n ];\n}\n\n/** The path's contours of non-zero length (ContourMeasureIter, forceClosed = false). */\nexport function measureContours(path: PathData): Contour[] {\n return contours(path).map((c): Contour => {\n const segs = c.segs.filter((s) => s.len > 0);\n const length = segs.reduce((m, s) => m + s.len, 0);\n return {\n length,\n closed: c.closed,\n posTan(d: number): PosTan {\n d = Math.max(0, Math.min(length, d));\n let pos = 0, s = segs[segs.length - 1];\n for (const seg of segs) {\n if (pos + seg.len >= d) { s = seg; break; }\n pos += seg.len;\n }\n const t = tAt(s, d - pos);\n const [x, y] = at(s, t);\n let [tx, ty] = derivative(s, t);\n // A control point on the end leaves no derivative there: step inward.\n if (Math.hypot(tx, ty) < 1e-9) {\n const a = at(s, Math.max(0, t - 1e-3)), b = at(s, Math.min(1, t + 1e-3));\n tx = b[0] - a[0]; ty = b[1] - a[1];\n }\n const n = Math.hypot(tx, ty) || 1;\n return [x, y, tx / n, ty / n];\n },\n segment: (from, to, b) => segment(segs, from, to, b),\n };\n }).filter((c) => c.length > 0);\n}\n\n/** The shortest dash worth cutting from its contour; anything shorter is a dot. */\nconst DOT_LENGTH = 1e-3;\n\n/** One stretch of the dash pattern for the whole path (core's dashScale). */\nexport function dashFit(cs: Contour[], dash: number[]): { scale: number; total: number; open: boolean } | null {\n let total = 0, open = false;\n for (const c of cs) {\n total += c.length;\n if (!c.closed) open = true;\n }\n const scale = pathOps.dashScale(dash, { length: total, closed: true }, total);\n return scale === null ? null : { scale, total, open };\n}\n\n/** The dash pattern's stretch for one contour: closed ones share the path's, open ones fit their own. */\nexport function contourDashScale(c: Contour, dash: number[], fit: { scale: number; total: number }): number {\n return c.closed ? fit.scale : pathOps.dashScale(dash, { length: c.length, closed: false }, fit.total) ?? fit.scale;\n}\n\n/** The dash pattern's \"on\" runs along a contour, [from, to] pairs (StrokeHandler.buildDashedPath). */\nexport function dashRuns(c: Contour, dash: number[], offset: number, scale: number): [number, number][] {\n const scaled = dash.map((d) => d * scale);\n const cycle = scaled.reduce((a, b) => a + b, 0);\n const runs: [number, number][] = [];\n if (!(cycle > 0)) return runs;\n const startOffset = (((offset * scale) % cycle) + cycle) % cycle;\n let i = 0, segStart = 0;\n while (segStart + scaled[i] <= startOffset && i < scaled.length) {\n if (scaled[i] <= DOT_LENGTH && Math.abs(startOffset - segStart) < 1e-6) break;\n segStart += scaled[i];\n i = (i + 1) % scaled.length;\n if (i === 0) break;\n }\n let remaining = scaled[i] - (startOffset - segStart);\n let drawing = i % 2 === 0;\n let t = 0;\n while (t < c.length - 1e-6) {\n const len = Math.min(remaining, c.length - t);\n if (drawing) runs.push([t, t + len]);\n t += len;\n remaining -= len;\n if (remaining <= 1e-6) {\n i = (i + 1) % scaled.length;\n remaining = scaled[i];\n drawing = !drawing;\n }\n }\n // An open contour fit to end on a dot has it exactly at its end.\n if (drawing && remaining <= 1e-6 && !c.closed) runs.push([c.length, c.length]);\n return runs;\n}\n\n/** The dashes as open contours; a dash too short to cut is a dot when `dots` (the dash cap has a shape). */\nexport function dashedPath(cs: Contour[], dash: number[], offset: number, dots: boolean, fit: { scale: number; total: number }): PathData | null {\n const b = new PathBuilder();\n let any = false;\n for (const c of cs) {\n for (const [from, to] of dashRuns(c, dash, offset, contourDashScale(c, dash, fit))) {\n if (to - from > DOT_LENGTH) any = c.segment(from, to, b) || any;\n else if (dots) {\n const [x, y, tx, ty] = c.posTan(from);\n const along = from > c.length - DOT_LENGTH ? -DOT_LENGTH : DOT_LENGTH;\n b.moveTo(x, y).lineTo(x + tx * along, y + ty * along);\n any = true;\n }\n }\n }\n return any ? b.build() : null;\n}\n","// SVG path data (the strings ./geometry emits) into the doc's PathData. Arcs become cubics.\n\nimport { type PathData, PathBuilder } from \"../doc\";\n\n/** Endpoint-parameterised arc → cubic segments (SVG implementation notes F.6). */\nexport function arcTo(b: PathBuilder, x1: number, y1: number, rx: number, ry: number, phi: number, large: boolean, sweep: boolean, x2: number, y2: number) {\n if (rx === 0 || ry === 0) {\n b.lineTo(x2, y2);\n return;\n }\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const c = Math.cos(phi), s = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = c * dx + s * dy, yp = -s * dx + c * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) {\n rx *= Math.sqrt(lam);\n ry *= Math.sqrt(lam);\n }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let k = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) k = -k;\n const cxp = (k * rx * yp) / ry, cyp = (-k * ry * xp) / rx;\n const cx = c * cxp - s * cyp + (x1 + x2) / 2, cy = s * cxp + c * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n else if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.ceil(Math.abs(dt) / (Math.PI / 2) - 1e-9);\n const seg = dt / n;\n const alpha = (4 / 3) * Math.tan(seg / 4);\n // Each point and tangent written out as one expression, the same as a closure\n // would compute it: no array per point on a path every shape draws through.\n for (let i = 0; i < n; i++) {\n const ta = t1 + i * seg, tb = ta + seg;\n const cosA = Math.cos(ta), sinA = Math.sin(ta), cosB = Math.cos(tb), sinB = Math.sin(tb);\n const ax = cx + rx * cosA * c - ry * sinA * s, ay = cy + rx * cosA * s + ry * sinA * c;\n const bx = cx + rx * cosB * c - ry * sinB * s, by = cy + rx * cosB * s + ry * sinB * c;\n const dax = -rx * sinA * c - ry * cosA * s, day = -rx * sinA * s + ry * cosA * c;\n const dbx = -rx * sinB * c - ry * cosB * s, dby = -rx * sinB * s + ry * cosB * c;\n b.cubicTo(ax + alpha * dax, ay + alpha * day, bx - alpha * dbx, by - alpha * dby, i === n - 1 ? x2 : bx, i === n - 1 ? y2 : by);\n }\n}\n\nexport function parseSvgPath(d: string): PathData {\n const b = new PathBuilder();\n const tokens = d.match(/[a-zA-Z]|-?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/g) ?? [];\n let i = 0;\n let cmd = \"\";\n let x = 0, y = 0, sx = 0, sy = 0;\n let lcx = 0, lcy = 0, lqx = 0, lqy = 0;\n let prev = \"\";\n const num = () => Number(tokens[i++]);\n const more = () => i < tokens.length && !/[a-zA-Z]/.test(tokens[i]);\n while (i < tokens.length) {\n if (/[a-zA-Z]/.test(tokens[i])) cmd = tokens[i++];\n const rel = cmd === cmd.toLowerCase();\n const C = cmd.toUpperCase();\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case \"M\": {\n x = ox + num(); y = oy + num();\n b.moveTo(x, y);\n sx = x; sy = y;\n cmd = rel ? \"l\" : \"L\";\n break;\n }\n case \"L\": x = ox + num(); y = oy + num(); b.lineTo(x, y); break;\n case \"H\": x = (rel ? x : 0) + num(); b.lineTo(x, y); break;\n case \"V\": y = (rel ? y : 0) + num(); b.lineTo(x, y); break;\n case \"C\": {\n const x1 = ox + num(), y1 = oy + num(), x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"S\": {\n const r = prev === \"C\" || prev === \"S\";\n const x1 = r ? 2 * x - lcx : x, y1 = r ? 2 * y - lcy : y;\n const x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"Q\": {\n lqx = ox + num(); lqy = oy + num();\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"T\": {\n const r = prev === \"Q\" || prev === \"T\";\n lqx = r ? 2 * x - lqx : x; lqy = r ? 2 * y - lqy : y;\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"A\": {\n const rx = num(), ry = num(), phi = (num() * Math.PI) / 180, large = num() !== 0, sweep = num() !== 0;\n const nx = ox + num(), ny = oy + num();\n arcTo(b, x, y, rx, ry, phi, large, sweep, nx, ny);\n x = nx; y = ny;\n break;\n }\n case \"Z\": b.close(); x = sx; y = sy; break;\n default: i++;\n }\n prev = C;\n if (C === \"Z\" && more()) cmd = \"L\";\n }\n return b.build();\n}\n","// Where a shape's outline is written: SVG's absolute M, L, A (unrotated) and Z,\n// either as the path string or straight into PathData.\n\nimport { type PathData, PathBuilder } from \"../../doc\";\nimport { arcTo, parseSvgPath } from \"../svg-path\";\n\nexport interface PathSink {\n move(x: number, y: number): void;\n line(x: number, y: number): void;\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void;\n close(): void;\n}\n\nexport class SvgSink implements PathSink {\n private readonly parts: string[] = [];\n\n move(x: number, y: number): void {\n this.parts.push(`M ${x} ${y}`);\n }\n\n line(x: number, y: number): void {\n this.parts.push(`L ${x} ${y}`);\n }\n\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void {\n this.parts.push(`A ${rx} ${ry} 0 ${large} ${sweep} ${x} ${y}`);\n }\n\n close(): void {\n this.parts.push(\"Z\");\n }\n\n toString(): string {\n return this.parts.join(\" \");\n }\n}\n\n/**\n * The outline as `parseSvgPath` reads it from {@link SvgSink}'s string, without\n * the string. A finite number prints and parses back to itself, and the parser\n * adds an absolute coordinate to 0 (so −0 lands as 0); a number that is not\n * finite does not survive the tokenizer, so `ok` turns false and the caller\n * takes the string route.\n */\nclass PathDataSink implements PathSink {\n ok = true;\n private readonly b = new PathBuilder();\n private empty = true;\n private x = 0;\n private y = 0;\n private sx = 0;\n private sy = 0;\n\n move(x: number, y: number): void {\n this.check(x, y);\n this.x = this.sx = 0 + x;\n this.y = this.sy = 0 + y;\n this.b.moveTo(this.x, this.y);\n }\n\n line(x: number, y: number): void {\n this.check(x, y);\n this.x = 0 + x;\n this.y = 0 + y;\n this.b.lineTo(this.x, this.y);\n }\n\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void {\n this.check(rx, ry, x, y);\n const nx = 0 + x, ny = 0 + y;\n arcTo(this.b, this.x, this.y, rx + 0, ry + 0, 0, large !== 0, sweep !== 0, nx, ny);\n this.x = nx;\n this.y = ny;\n }\n\n close(): void {\n this.empty = false;\n this.b.close();\n this.x = this.sx;\n this.y = this.sy;\n }\n\n result(): PathData | null {\n return this.empty ? null : this.b.build();\n }\n\n private check(...values: number[]): void {\n this.empty = false;\n for (const v of values) if (!Number.isFinite(v)) this.ok = false;\n }\n}\n\nexport function svgOf(emit: (sink: PathSink) => void): string {\n const sink = new SvgSink();\n emit(sink);\n return sink.toString();\n}\n\n/** What `parseSvgPath(svgOf(emit))` gives (null for an empty string), built directly. */\nexport function pathDataOf(emit: (sink: PathSink) => void): PathData | null {\n const sink = new PathDataSink();\n emit(sink);\n if (sink.ok) return sink.result();\n const svg = svgOf(emit);\n return svg ? parseSvgPath(svg) : null;\n}\n","// A shape's outline as SVG path strings: its state resolved once, its geometry\n// computed lazily. Shapes bake x/y into the SVG; rotation, scale, trim and the\n// y flip are left to adapter/shapes.ts.\n\nimport type { CornerStyle } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { parseSvgPath } from \"../svg-path\";\nimport { type PathSink, svgOf } from \"./sink\";\n\nexport interface Bounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport abstract class ShapeGeometry<S extends { start: number; end: number }, G> {\n readonly fullState: S;\n private geo: G | undefined;\n\n constructor(state: Partial<S>) {\n this.fullState = this.resolveState(state);\n }\n\n protected abstract resolveState(state: Partial<S>): S;\n protected abstract computeGeometry(): G;\n abstract buildSVGPath(geo: G): string;\n\n /** `buildSVGPath` parsed, or null where it is empty. A shape writing to a {@link PathSink} skips the string. */\n buildPathData(geo: G): PathData | null {\n const svg = this.buildSVGPath(geo);\n return svg ? parseSvgPath(svg) : null;\n }\n\n get geometry(): G {\n return (this.geo ??= this.computeGeometry());\n }\n\n needsTrim(): boolean {\n return this.fullState.start !== 0 || this.fullState.end !== 1;\n }\n\n getTrimRange(): { start: number; end: number } {\n return { start: this.fullState.start, end: this.fullState.end };\n }\n\n /**\n * The closed region an aligned (inside/outside) stroke clips against when\n * the stroked outline is open, as an arc's wedge is; null when the shape\n * defines none of its own.\n */\n buildSVGAlignInterior(_geo: G): string | null {\n return null;\n }\n\n /** Whether the silhouette resizes cleanly for a shadow's spread (rects and ellipses). */\n supportsSpread(): boolean {\n return false;\n }\n\n /** The silhouette grown (positive) or shrunk by `spread` px; null where it collapses or isn't supported. */\n buildSpreadSVGPath(_geo: G, _spread: number): string | null {\n return null;\n }\n\n computeBounds(_geo: G): Bounds | undefined {\n return undefined;\n }\n}\n\n/** Per-corner geometry inputs shared by every shape that rounds its corners. */\nexport interface CornerSpec {\n /** Corner radius in pixels (already clamped/scaled by the caller). */\n radius: number;\n style: CornerStyle;\n}\n\n/**\n * How far from a right-angle corner's apex, along each edge, its curve begins:\n * the radius, for an arc and a chamfer alike.\n */\nexport function cornerReach(c: CornerSpec): number {\n return c.radius > 0 ? c.radius : 0;\n}\n\n/**\n * A right-angle (rect) corner, the pen already at its entry point\n * `apex + d0·radius`; it leaves the pen at `apex + d1·radius`. `d0` points\n * from the apex back along the incoming edge, `d1` along the outgoing one.\n * Nothing for a zero radius (the edge runs on to a sharp apex).\n */\nexport function cornerTo(sink: PathSink, ax: number, ay: number, d0x: number, d0y: number, d1x: number, d1y: number, c: CornerSpec): void {\n if (c.radius <= 0) return;\n cutCornerTo(sink, ax, ay, d0x, d0y, d1x, d1y, c.radius, c.radius, c.style);\n}\n\n/**\n * A corner of any angle, given the cut-back distance `cut` along each edge and\n * the arc `radius` (they differ off a right angle). The pen is at\n * `apex + d0·cut`; it is left at `apex + d1·cut`.\n */\nexport function cutCornerTo(\n sink: PathSink,\n ax: number, ay: number,\n d0x: number, d0y: number,\n d1x: number, d1y: number,\n cut: number, radius: number,\n style: CornerStyle,\n): void {\n const ex = ax + d1x * cut, ey = ay + d1y * cut;\n if (style === \"angled\") return sink.line(ex, ey);\n // The turn direction picks the sweep flag: a clockwise turn is sweep 1.\n const cross = d0x * d1y - d0y * d1x;\n sink.arc(radius, radius, 0, cross < 0 ? 1 : 0, ex, ey);\n}\n\n/** {@link cutCornerTo} as SVG commands. */\nexport function cornerCommandsFromCut(\n ax: number, ay: number,\n d0x: number, d0y: number,\n d1x: number, d1y: number,\n cut: number, radius: number,\n style: CornerStyle,\n): string {\n return svgOf((sink) => cutCornerTo(sink, ax, ay, d0x, d0y, d1x, d1y, cut, radius, style));\n}\n","import { type EllipseState, withEllipseDescriptor } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { type Bounds, ShapeGeometry } from \"./base\";\nimport { type PathSink, pathDataOf, svgOf } from \"./sink\";\n\ntype EllipseGeo = {\n cx: number; cy: number;\n halfWidth: number; halfHeight: number;\n sweep: number; isFullShape: boolean;\n startAngle: number;\n /** Inner radius as a fraction (0..1) of the outer. */\n ratio: number;\n};\n\nconst TO_RAD = Math.PI / 180;\n\n/**\n * An ellipse, optionally a partial arc (`sweep` < 360°) and/or with a hole\n * (`ratio` > 0): 0 is a disc or pie wedge, 0.5 a donut or annular sector, and 1\n * leaves nothing to fill, the stroke riding the bare outline or arc.\n */\nexport class EllipseGeometry extends ShapeGeometry<EllipseState, EllipseGeo> {\n protected resolveState(state: Partial<EllipseState>): EllipseState {\n return withEllipseDescriptor(state);\n }\n\n protected computeGeometry(): EllipseGeo {\n const s = this.fullState;\n const sweep = s.sweep ?? 360;\n return {\n cx: s.x, cy: s.y,\n halfWidth: s.width / 2, halfHeight: s.height / 2,\n sweep,\n isFullShape: Math.abs(sweep) >= 360,\n startAngle: s.startAngle ?? 0,\n ratio: Math.max(0, Math.min(1, s.ratio ?? 0)),\n };\n }\n\n // Empty at ratio 1 rather than solid again, so a ratio tween stays\n // continuous at that end; its stroke is `ringOutline`.\n buildSVGPath(geo: EllipseGeo): string {\n return svgOf((sink) => outline(sink, geo));\n }\n\n override buildPathData(geo: EllipseGeo): PathData | null {\n return pathDataOf((sink) => outline(sink, geo));\n }\n\n /** What a ratio-1 ellipse strokes, once: the bare outline or open arc. Null below ratio 1. */\n ringOutline(geo: EllipseGeo): string | null {\n if (geo.ratio < 1) return null;\n return svgOf((sink) => (geo.isFullShape ? fullEllipse(sink, geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0) : openArc(sink, geo)));\n }\n\n // At ratio 1 the region is empty, so the band aligns against the whole\n // ellipse or wedge instead.\n override buildSVGAlignInterior(geo: EllipseGeo): string | null {\n if (geo.isFullShape) return geo.ratio >= 1 ? svgOf((sink) => fullEllipse(sink, geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0)) : null;\n return svgOf((sink) => (geo.ratio >= 1 || geo.ratio <= 0 ? wedge(sink, geo) : annularSector(sink, geo)));\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each half-axis moves by `spread`; only a full ellipse with something to\n // fill bounds a region to grow.\n override buildSpreadSVGPath(geo: EllipseGeo, spread: number): string | null {\n if (!geo.isFullShape || geo.ratio >= 1) return null;\n const halfWidth = geo.halfWidth + spread, halfHeight = geo.halfHeight + spread;\n if (halfWidth <= 0 || halfHeight <= 0) return null;\n return svgOf((sink) => fullEllipse(sink, geo.cx, geo.cy, halfWidth, halfHeight, 0));\n }\n\n override computeBounds(geo: EllipseGeo): Bounds {\n const { cx, cy, halfWidth, halfHeight } = geo;\n return { left: cx - halfWidth, top: cy - halfHeight, right: cx + halfWidth, bottom: cy + halfHeight };\n }\n}\n\nfunction outline(sink: PathSink, geo: EllipseGeo): void {\n const { cx, cy, halfWidth, halfHeight, ratio } = geo;\n if (ratio >= 1) return;\n if (!geo.isFullShape) return ratio <= 0 ? wedge(sink, geo) : annularSector(sink, geo);\n fullEllipse(sink, cx, cy, halfWidth, halfHeight, 0);\n // Wound the other way, so the fill leaves a hole.\n if (ratio > 0) fullEllipse(sink, cx, cy, halfWidth * ratio, halfHeight * ratio, 1);\n}\n\nfunction fullEllipse(sink: PathSink, cx: number, cy: number, rx: number, ry: number, sweepFlag: 0 | 1): void {\n const left = cx - rx, right = cx + rx;\n sink.move(left, cy);\n sink.arc(rx, ry, 1, sweepFlag, right, cy);\n sink.arc(rx, ry, 1, sweepFlag, left, cy);\n sink.close();\n}\n\n/** A partial sweep's outer curve: its start point, and the arc that runs it round. */\nfunction outerArc(geo: EllipseGeo): { sx: number; sy: number; arc: (sink: PathSink) => void } {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep } = geo;\n const endAngle = startAngle + sweep;\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const sweepFlag = sweep > 0 ? 1 : 0;\n const sx = cx + halfWidth * Math.cos(startAngle * TO_RAD), sy = cy + halfHeight * Math.sin(startAngle * TO_RAD);\n const ex = cx + halfWidth * Math.cos(endAngle * TO_RAD), ey = cy + halfHeight * Math.sin(endAngle * TO_RAD);\n return { sx, sy, arc: (sink) => sink.arc(halfWidth, halfHeight, largeArc, sweepFlag, ex, ey) };\n}\n\nfunction openArc(sink: PathSink, geo: EllipseGeo): void {\n const { sx, sy, arc } = outerArc(geo);\n sink.move(sx, sy);\n arc(sink);\n}\n\nfunction wedge(sink: PathSink, geo: EllipseGeo): void {\n const { sx, sy, arc } = outerArc(geo);\n sink.move(geo.cx, geo.cy);\n sink.line(sx, sy);\n arc(sink);\n sink.close();\n}\n\n/** Out along the outer arc, in to the inner edge, back along the inner arc, closed along the start radius. */\nfunction annularSector(sink: PathSink, geo: EllipseGeo): void {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep, ratio } = geo;\n const { sx, sy, arc } = outerArc(geo);\n const endAngle = startAngle + sweep;\n const innerW = halfWidth * ratio, innerH = halfHeight * ratio;\n const isx = cx + innerW * Math.cos(startAngle * TO_RAD), isy = cy + innerH * Math.sin(startAngle * TO_RAD);\n const iex = cx + innerW * Math.cos(endAngle * TO_RAD), iey = cy + innerH * Math.sin(endAngle * TO_RAD);\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const innerSweepFlag = sweep > 0 ? 0 : 1;\n sink.move(sx, sy);\n arc(sink);\n sink.line(iex, iey);\n sink.arc(innerW, innerH, largeArc, innerSweepFlag, isx, isy);\n sink.close();\n}\n","import { type LineState, type Vector2, withLineDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\ntype LineGeo = { points: Vector2[]; radius: number; closed: boolean };\n\nfunction buildLineSvg(points: Vector2[], radius: number, closed: boolean): string {\n if (points.length === 0) return \"M 0 0\";\n if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;\n const r = Math.max(0, radius);\n const parts: string[] = [];\n const count = points.length;\n const dir = (a: Vector2, b: Vector2) => {\n const dx = b.x - a.x, dy = b.y - a.y;\n const len = Math.sqrt(dx * dx + dy * dy);\n return len > 0 ? { dx: dx / len, dy: dy / len, len } : { dx: 0, dy: 0, len: 0 };\n };\n if (r === 0) {\n parts.push(`M ${points[0].x} ${points[0].y}`);\n for (let i = 1; i < count; i++) parts.push(`L ${points[i].x} ${points[i].y}`);\n } else {\n const endIdx = closed ? count : count - 1;\n for (let i = 0; i <= endIdx; i++) {\n const prev = points[(i - 1 + count) % count];\n const curr = points[i % count];\n const next = points[(i + 1) % count];\n if (!closed && i === 0) {\n parts.push(`M ${curr.x} ${curr.y}`);\n continue;\n }\n if (!closed && i === count - 1) {\n parts.push(`L ${curr.x} ${curr.y}`);\n continue;\n }\n const dIn = dir(prev, curr), dOut = dir(curr, next);\n const cutIn = Math.min(r, dIn.len / 2), cutOut = Math.min(r, dOut.len / 2);\n const inX = curr.x - dIn.dx * cutIn, inY = curr.y - dIn.dy * cutIn;\n const outX = curr.x + dOut.dx * cutOut, outY = curr.y + dOut.dy * cutOut;\n parts.push(`${i === 0 && closed ? \"M\" : \"L\"} ${inX} ${inY}`);\n parts.push(`Q ${curr.x} ${curr.y} ${outX} ${outY}`);\n }\n }\n if (closed) parts.push(\"Z\");\n return parts.join(\" \");\n}\n\n/**\n * A polyline (open or closed) through `points`, each corner optionally rounded\n * by cutting back along both edges and joining with a quadratic (the cut\n * clamped to half the edge, so it never overshoots).\n */\nexport class LineGeometry extends ShapeGeometry<LineState, LineGeo> {\n protected resolveState(state: Partial<LineState>): LineState {\n return withLineDescriptor(state);\n }\n\n protected computeGeometry(): LineGeo {\n const { points, radius, closed } = this.fullState;\n return { points, radius, closed };\n }\n\n buildSVGPath(geo: LineGeo): string {\n return buildLineSvg(geo.points, geo.radius, geo.closed);\n }\n}\n","import { type PathData, type PathState, toPathString, withPathDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\n/** An arbitrary SVG path; adapter/shapes.ts centres it and strokes the contour it fills, `Z` included. */\nexport class PathGeometry extends ShapeGeometry<PathState, { data: PathData }> {\n protected resolveState(state: Partial<PathState>): PathState {\n return withPathDescriptor(state);\n }\n\n protected computeGeometry(): { data: PathData } {\n return { data: this.fullState.data };\n }\n\n buildSVGPath(geo: { data: PathData }): string {\n return toPathString(geo.data);\n }\n}\n","import { type CornerStyle, type PolygonState, type PolygramState, withPolygonDescriptor, withPolygramDescriptor } from \"@motionscript/core\";\nimport { type Bounds, cornerCommandsFromCut, ShapeGeometry } from \"./base\";\n\ntype PolygonGeo = {\n cx: number; cy: number;\n rx: number; ry: number;\n sides: number;\n /** Polygram only: the inner vertices' radius, as a fraction of the outer. */\n ratio: number;\n cornerRadius: number;\n cornerStyle: CornerStyle;\n};\n\n/**\n * Vertices on an ellipse from the top, clockwise. `rounded(i)` says which\n * vertices `cornerRadius` rounds; each is cut back along both edges, clamped\n * so neighbouring corners never overrun half the edge they share.\n */\nfunction buildSvg(verts: [number, number][], g: PolygonGeo, rounded: (i: number) => boolean): string {\n if (g.cornerRadius <= 0) {\n const parts = verts.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"} ${x} ${y}`);\n parts.push(\"Z\");\n return parts.join(\" \");\n }\n const n = verts.length;\n const parts: string[] = [];\n for (let i = 0; i < n; i++) {\n const curr = verts[i];\n if (!rounded(i)) {\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0]} ${curr[1]}`);\n continue;\n }\n const prev = verts[(i - 1 + n) % n], next = verts[(i + 1) % n];\n const a0x = prev[0] - curr[0], a0y = prev[1] - curr[1];\n const len0 = Math.hypot(a0x, a0y);\n const u0x = a0x / len0, u0y = a0y / len0;\n const a1x = next[0] - curr[0], a1y = next[1] - curr[1];\n const len1 = Math.hypot(a1x, a1y);\n const u1x = a1x / len1, u1y = a1y / len1;\n const cosAngle = Math.max(-1, Math.min(1, u0x * u1x + u0y * u1y));\n const tanHalf = Math.tan(Math.acos(cosAngle) / 2);\n const t = Math.min(g.cornerRadius / tanHalf, Math.min(len0, len1) / 2);\n const r = t * tanHalf;\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0] + u0x * t} ${curr[1] + u0y * t}`);\n parts.push(cornerCommandsFromCut(curr[0], curr[1], u0x, u0y, u1x, u1y, t, r, g.cornerStyle));\n }\n parts.push(\"Z\");\n return parts.join(\" \");\n}\n\nconst bounds = (g: PolygonGeo): Bounds => ({ left: g.cx - g.rx, top: g.cy - g.ry, right: g.cx + g.rx, bottom: g.cy + g.ry });\n\n/** A regular polygon inscribed in the box's ellipse, starting at the top vertex. */\nexport class PolygonGeometry extends ShapeGeometry<PolygonState, PolygonGeo> {\n protected resolveState(state: Partial<PolygonState>): PolygonState {\n return withPolygonDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: 1,\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = (2 * Math.PI) / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides; i++) {\n const a = -Math.PI / 2 + i * step;\n verts.push([g.cx + g.rx * Math.cos(a), g.cy + g.ry * Math.sin(a)]);\n }\n return buildSvg(verts, g, () => true);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n\n/** A star: outer vertices alternating with inner ones at `ratio`; only the outer (convex) ones are rounded. */\nexport class PolygramGeometry extends ShapeGeometry<PolygramState, PolygonGeo> {\n protected resolveState(state: Partial<PolygramState>): PolygramState {\n return withPolygramDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: Math.max(0, Math.min(1, s.ratio)),\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = Math.PI / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides * 2; i++) {\n const a = -Math.PI / 2 + i * step;\n const r = i % 2 === 0 ? 1 : g.ratio;\n verts.push([g.cx + g.rx * r * Math.cos(a), g.cy + g.ry * r * Math.sin(a)]);\n }\n return buildSvg(verts, g, (i) => i % 2 === 0);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n","import { type CornerRadiusResolved, type CornerStyleResolved, type RectState, cornerRadiusOps, cornerStyleOps, withRectDescriptor } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { type Bounds, cornerReach, type CornerSpec, cornerTo, ShapeGeometry } from \"./base\";\nimport { type PathSink, pathDataOf, svgOf } from \"./sink\";\n\ntype RectGeo = {\n left: number; top: number; right: number; bottom: number;\n tl: CornerSpec; tr: CornerSpec; br: CornerSpec; bl: CornerSpec;\n isZero: boolean;\n};\n\n/** The outline clockwise, each corner its own arc or chamfer `radius` px from the apex. */\nfunction roundedRect(sink: PathSink, l: number, t: number, r: number, b: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): void {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n sink.move(l + rTL, t);\n sink.line(r - rTR, t);\n cornerTo(sink, r, t, -1, 0, 0, 1, tr);\n sink.line(r, b - rBR);\n cornerTo(sink, r, b, 0, -1, -1, 0, br);\n sink.line(l + rBL, b);\n cornerTo(sink, l, b, 1, 0, 0, -1, bl);\n sink.line(l, t + rTL);\n cornerTo(sink, l, t, 0, 1, 1, 0, tl);\n sink.close();\n}\n\nfunction plainRect(sink: PathSink, l: number, t: number, r: number, b: number): void {\n sink.move(l, t);\n sink.line(r, t);\n sink.line(r, b);\n sink.line(l, b);\n sink.close();\n}\n\nfunction outline(sink: PathSink, geo: RectGeo): void {\n const { left, top, right, bottom, tl, tr, br, bl, isZero } = geo;\n if (isZero) plainRect(sink, left, top, right, bottom);\n else roundedRect(sink, left, top, right, bottom, tl, tr, br, bl);\n}\n\n/** Per-corner radii and styles, scaled down together where adjacent corners would overrun a side. */\nexport class RectGeometry extends ShapeGeometry<RectState, RectGeo> {\n protected resolveState(state: Partial<RectState>): RectState {\n return withRectDescriptor(state);\n }\n\n protected computeGeometry(): RectGeo {\n const s = this.fullState;\n const left = s.x - s.width / 2, top = s.y - s.height / 2;\n const right = s.x + s.width / 2, bottom = s.y + s.height / 2;\n const radius: CornerRadiusResolved = cornerRadiusOps.resolve(s.cornerRadius);\n const style: CornerStyleResolved = cornerStyleOps.resolve(s.cornerStyle);\n const tl: CornerSpec = { radius: Math.max(0, radius.topLeft), style: style.topLeft };\n const tr: CornerSpec = { radius: Math.max(0, radius.topRight), style: style.topRight };\n const br: CornerSpec = { radius: Math.max(0, radius.bottomRight), style: style.bottomRight };\n const bl: CornerSpec = { radius: Math.max(0, radius.bottomLeft), style: style.bottomLeft };\n const scale = cornerScale(s.width, s.height, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n const isZero = cornerRadiusOps.isZero({ topLeft: tl.radius, topRight: tr.radius, bottomRight: br.radius, bottomLeft: bl.radius });\n return { left, top, right, bottom, tl, tr, br, bl, isZero };\n }\n\n buildSVGPath(geo: RectGeo): string {\n return svgOf((sink) => outline(sink, geo));\n }\n\n override buildPathData(geo: RectGeo): PathData | null {\n return pathDataOf((sink) => outline(sink, geo));\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each edge moves out by `spread` and each radius grows by it (clamped at\n // 0), as CSS box-shadow spread does, then re-clamped against the new size.\n override buildSpreadSVGPath(geo: RectGeo, spread: number): string | null {\n const left = geo.left - spread, top = geo.top - spread;\n const right = geo.right + spread, bottom = geo.bottom + spread;\n const w = right - left, h = bottom - top;\n if (w <= 0 || h <= 0) return null;\n const tl: CornerSpec = { ...geo.tl, radius: Math.max(0, geo.tl.radius + spread) };\n const tr: CornerSpec = { ...geo.tr, radius: Math.max(0, geo.tr.radius + spread) };\n const br: CornerSpec = { ...geo.br, radius: Math.max(0, geo.br.radius + spread) };\n const bl: CornerSpec = { ...geo.bl, radius: Math.max(0, geo.bl.radius + spread) };\n const scale = cornerScale(w, h, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n if (tl.radius === 0 && tr.radius === 0 && br.radius === 0 && bl.radius === 0) return svgOf((sink) => plainRect(sink, left, top, right, bottom));\n return svgOf((sink) => roundedRect(sink, left, top, right, bottom, tl, tr, br, bl));\n }\n\n override computeBounds(geo: RectGeo): Bounds {\n return { left: geo.left, top: geo.top, right: geo.right, bottom: geo.bottom };\n }\n}\n\n/** The uniform scale that keeps every pair of adjacent radii within the side they share. */\nfunction cornerScale(w: number, h: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): number {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n const top = rTL + rTR > 0 ? Math.min(1, w / (rTL + rTR)) : 1;\n const bottom = rBL + rBR > 0 ? Math.min(1, w / (rBL + rBR)) : 1;\n const left = rTL + rBL > 0 ? Math.min(1, h / (rTL + rBL)) : 1;\n const right = rTR + rBR > 0 ? Math.min(1, h / (rTR + rBR)) : 1;\n return Math.min(top, bottom, left, right);\n}\n","// Shape ops to PathData: each shape's geometry (./geometry) emits its outline,\n// straight into PathData where it writes to a sink, else as an SVG path string\n// parsed here. A plain rect or ellipse also says how the renderer can draw it\n// as its own shape (`native`). Shapes are authored y-up, so their position (and\n// an ellipse's angles) flip into the node's y-down space first; a shape's own\n// rotation/scale then turns its outline about its (x, y) plus pivot.\n\nimport { resolvePivotPosition, resolveShapeAlignment, resolveShapePivot, stripShapeAlignmentKeys, toPathString, withTextDescriptor } from \"@motionscript/core\";\nimport type { ShapeGeometry } from \"./geometry/base\";\nimport { EllipseGeometry } from \"./geometry/ellipse\";\nimport { LineGeometry } from \"./geometry/line\";\nimport { PathGeometry } from \"./geometry/path\";\nimport { PolygonGeometry, PolygramGeometry } from \"./geometry/polygon\";\nimport { RectGeometry } from \"./geometry/rect\";\nimport { type Mat, type Member, type PathData, pathBounds, type TextSpec } from \"../doc\";\nimport { trimPath } from \"./path-measure\";\nimport { parseSvgPath } from \"./svg-path\";\n\ntype Any = Record<string, any>;\n\nfunction flipPositionY(state: Any, width: number, height: number): Any {\n const withPivotOffset = resolvePivotPosition(state as never, width, height);\n const { x, y, pivot } = resolveShapeAlignment(withPivotOffset as never, width, height);\n return { ...stripShapeAlignmentKeys(withPivotOffset as never), x, y: -y, pivot };\n}\n\nconst negY = (y: number | undefined) => (y == null ? y : -y);\n\nfunction transformPath(p: PathData, m: [number, number, number, number, number, number]): PathData {\n const pts = new Float32Array(p.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = p.points[i], y = p.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { ...p, points: pts as never };\n}\n\n/** Rotate/scale about the shape's (x, y) + pivot. */\nfunction shapeTransform(full: Any, p: PathData): PathData {\n const rotation = full.rotation ?? 0, scale = full.scale ?? 1;\n if (rotation === 0 && scale === 1) return p;\n const pivot = full.pivot ?? { x: 0, y: 0 };\n const px = (full.x ?? 0) + pivot.x * ((full.width ?? 0) / 2);\n const py = (full.y ?? 0) - pivot.y * ((full.height ?? 0) / 2);\n const r = (rotation * Math.PI) / 180, c = Math.cos(r) * scale, s = Math.sin(r) * scale;\n // Row-major [a b e; c d f] = column form [a, c, b, d, e, f].\n const a = c, b = -s, cc = s, d = c;\n return transformPath(p, [a, cc, b, d, px - a * px - b * py, py - cc * px - d * py]);\n}\n\n/** A text op as a doc text node: its spec and placement (shapes/text.ts). */\nexport interface TextOut {\n spec: TextSpec;\n transform: Mat;\n /** Box for gradient space: the declared box, or the measured block. */\n size: [number, number];\n}\n\nconst ALIGN: Record<string, TextSpec[\"align\"]> = { left: \"left\", right: \"right\", center: \"center\", justify: \"justify\", start: \"left\", end: \"right\" };\n\n/** buildText's placement: the block laid out about the origin, drawn at\n * (px, py) — shifted by the pivot when there is no declared box — and turned\n * and scaled about the pivot point. */\nexport function textOf(state: Any, measure: (spec: TextSpec) => [number, number]): TextOut | null {\n const f = withTextDescriptor(flipPositionY(state, state.width ?? 0, state.height ?? 0) as never) as Any;\n // Text on a path follows the path verbatim in the node's space (buildText\n // returns before placement: no y flip, no x/y).\n const onPath = f.path != null ? parseSvgPath(toPathString(f.path)) : undefined;\n const autofit = f.fontSize === \"autofit\";\n const spec: TextSpec = {\n runs: [{\n text: f.text, family: f.fontFamily, size: autofit ? 100 : f.fontSize, weight: f.fontWeight,\n italic: f.fontStyle === \"italic\" || f.fontStyle === \"oblique\", letterSpacing: f.letterSpacing,\n decoration: f.textDecoration === \"underline\" ? \"underline\" : f.textDecoration === \"line-through\" ? \"lineThrough\" : undefined,\n }],\n align: ALIGN[f.textAlign] ?? \"left\",\n verticalAlign: f.verticalAlign,\n wrap: f.wrap && f.width > 0,\n width: f.width,\n height: f.height,\n lineHeight: f.lineHeight,\n fontSize: autofit ? \"autofit\" : undefined,\n minFontSize: f.minFontSize,\n path: onPath,\n };\n if (onPath) return { spec, transform: [1, 0, 0, 1, 0, 0], size: [f.width, f.height] };\n const [lw, lh] = measure(spec);\n const pivot = resolveShapePivot(f.pivot) as { x: number; y: number };\n const declared = f.width > 0 && f.height > 0;\n const bw = declared ? f.width : lw, bh = declared ? f.height : lh;\n const px = !declared && pivot.x !== 0 ? f.x - pivot.x * (lw / 2) : f.x;\n const py = !declared && pivot.y !== 0 ? f.y + pivot.y * (lh / 2) : f.y;\n let m: Mat = [1, 0, 0, 1, px, py];\n if ((f.rotation ?? 0) !== 0 || (f.scale ?? 1) !== 1) {\n const cx = px + pivot.x * (bw / 2), cy = py - pivot.y * (bh / 2);\n const r = ((f.rotation ?? 0) * Math.PI) / 180, k = f.scale ?? 1;\n const c = Math.cos(r) * k, sn = Math.sin(r) * k;\n // T(c)·R·S·T(−c)·T(p)\n m = [c, sn, -sn, c, cx + c * (px - cx) - sn * (py - cy), cy + sn * (px - cx) + c * (py - cy)];\n }\n return { spec, transform: m, size: [bw, bh] };\n}\n\n/** What a shape op hands the paint ops. */\nexport interface ShapeOut {\n /** The filled outline (trimmed when the shape is). */\n fill: PathData | null;\n /** What strokes follow: the fill outline unless the shape overrides it. */\n stroke: PathData | null;\n /** The closed region aligned strokes clip against. */\n interior: PathData | null;\n /** The shape's own bounds (gradient space), l t r b. */\n bounds: [number, number, number, number] | null;\n /** Set for a text op: drawn as a text node, not a path. */\n text?: TextOut;\n /** Set for a boolean result or a cut: drawn as one compound node. */\n members?: Member[];\n /** The closed region an aligned stroke clips to when `interior` isn't it (a union's). */\n alignInterior?: Member[];\n /** Trimmed: its outline is a stretch of the shape's. */\n trimmed?: boolean;\n /** The silhouette grown (or shrunk) by a shadow's spread; unset where the\n * shape ignores spread (only rects and ellipses resize cleanly). */\n spread?: (spread: number) => PathData | null;\n /** Set where the renderer can draw the shape as its own rect or ellipse instead of a path. */\n native?: NativeShape;\n}\n\n/** A rect or ellipse as the renderer's own shape: its box in the node's y-down space, corner radii tl tr br bl. */\nexport interface NativeShape {\n kind: \"rect\" | \"ellipse\";\n x: number;\n y: number;\n w: number;\n h: number;\n radii: [number, number, number, number];\n}\n\nfunction parse(svg: string | null | undefined, full: Any): PathData | null {\n if (!svg) return null;\n return shapeTransform(full, parseSvgPath(svg));\n}\n\n// Each outline is built on first read: a shape drawn as a native one never needs it.\nfunction viaGeometry(Shape: new (state: Any) => ShapeGeometry<any, any>, state: Any): ShapeOut {\n const shape = new Shape(state);\n const full = shape.fullState as Any, geo = shape.geometry;\n const range = shape.needsTrim() ? shape.getTrimRange() : null;\n const base = once(() => {\n const outline = shape.buildPathData(geo);\n return outline && shapeTransform(full, outline);\n });\n const fill = once(() => {\n const p = base();\n return p && range ? trimPath(p, range.start, range.end) : p;\n });\n const stroke = once(() => {\n // A ratio-1 ellipse fills nothing; it strokes its bare outline or arc.\n const ring = shape instanceof EllipseGeometry ? shape.ringOutline(geo) : null;\n if (ring == null) return fill();\n const outline = parse(ring, full);\n return outline && range ? trimPath(outline, range.start, range.end) : outline;\n });\n const interior = once(() => {\n const svg = shape.buildSVGAlignInterior(geo);\n return svg != null ? parse(svg, full) : range ? base() : fill();\n });\n const b = shape.computeBounds(geo);\n const spread = shape.supportsSpread() ? (s: number) => parse(shape.buildSpreadSVGPath(geo, s), full) : undefined;\n return {\n get fill() { return fill(); },\n get stroke() { return stroke(); },\n get interior() { return interior(); },\n bounds: b ? [b.left, b.top, b.right, b.bottom] : null,\n spread,\n trimmed: !!range,\n native: range ? undefined : nativeOf(shape, full, geo),\n };\n}\n\nfunction once<T>(make: () => T): () => T {\n let made = false;\n let value: T;\n return () => {\n if (!made) {\n value = make();\n made = true;\n }\n return value;\n };\n}\n\n/**\n * The shape the renderer draws itself: an unturned, unscaled rect whose corners\n * are all rounded (or square) and within half its shorter side, as the renderer\n * clamps them, or a whole ellipse with no hole.\n */\nfunction nativeOf(shape: ShapeGeometry<any, any>, full: Any, geo: Any): NativeShape | undefined {\n if ((full.rotation ?? 0) !== 0 || (full.scale ?? 1) !== 1) return undefined;\n if (shape instanceof EllipseGeometry) {\n if (!geo.isFullShape || geo.ratio > 0) return undefined;\n const w = geo.halfWidth * 2, h = geo.halfHeight * 2;\n if (!(w > 0 && h > 0) || !Number.isFinite(w + h + geo.cx + geo.cy)) return undefined;\n return { kind: \"ellipse\", x: geo.cx - geo.halfWidth, y: geo.cy - geo.halfHeight, w, h, radii: [0, 0, 0, 0] };\n }\n if (shape instanceof RectGeometry) {\n const w = geo.right - geo.left, h = geo.bottom - geo.top;\n if (!(w > 0 && h > 0) || !Number.isFinite(w + h + geo.left + geo.top)) return undefined;\n const corners = [geo.tl, geo.tr, geo.br, geo.bl] as { radius: number; style: string }[];\n const limit = Math.min(w, h) / 2;\n if (corners.some((c) => !(c.radius >= 0 && c.radius <= limit) || (c.radius > 0 && c.style === \"angled\"))) return undefined;\n return { kind: \"rect\", x: geo.left, y: geo.top, w, h, radii: corners.map((c) => c.radius) as NativeShape[\"radii\"] };\n }\n return undefined;\n}\n\n/** A path: data centred on its control-point bounds (or centerBounds), turned about the origin. */\nfunction pathShape(state: Any): ShapeOut {\n const shape = new PathGeometry(state as never);\n const full = shape.fullState as Any;\n const raw = parseSvgPath(shape.buildSVGPath(shape.geometry));\n const [x0, y0, x1, y1] = full.centerBounds ?? pathBounds(raw);\n const ox = -(x0 + (x1 - x0) / 2), oy = -(y0 + (y1 - y0) / 2);\n const centred = transformPath(raw, [1, 0, 0, 1, ox, oy]);\n const base = shapeTransform({ ...full, x: 0, y: 0 }, centred);\n const range = shape.needsTrim() ? shape.getTrimRange() : null;\n const fill = range ? trimPath(base, range.start, range.end) : base;\n return { fill, stroke: fill, interior: range ? base : fill, bounds: null, trimmed: !!range };\n}\n\nconst negPathY = (state: Any): Any => {\n const out: Any = { ...state, y: negY(state.y) };\n if (Array.isArray(state.data)) {\n out.data = state.data.map((c: Any) => {\n switch (c.type) {\n case \"M\": case \"m\": case \"L\": case \"l\": case \"T\": case \"t\": case \"V\": case \"v\": return { ...c, y: -c.y };\n case \"C\": case \"c\": return { ...c, y1: -c.y1, y2: -c.y2, y: -c.y };\n case \"S\": case \"s\": return { ...c, y2: -c.y2, y: -c.y };\n case \"Q\": case \"q\": return { ...c, y1: -c.y1, y: -c.y };\n case \"A\": case \"a\": return { ...c, y: -c.y, sweep: c.sweep === 1 ? 0 : 1 };\n default: return c;\n }\n });\n if (state.centerBounds) {\n const [a, b2, c2, d] = state.centerBounds;\n out.centerBounds = [a, -d, c2, -b2];\n }\n }\n return out;\n};\n\n/** The op's paths in the node's y-down space, or null when unsupported. */\nexport function shapeOf(op: { kind: string; state: Any }): ShapeOut | null {\n const s = op.state;\n switch (op.kind) {\n case \"rect\": return viaGeometry(RectGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"ellipse\": {\n const f = flipPositionY(s, s.width ?? 0, s.height ?? 0);\n if (s.startAngle != null) f.startAngle = -s.startAngle;\n if (s.sweep != null) f.sweep = -s.sweep;\n return viaGeometry(EllipseGeometry, f);\n }\n case \"polygon\": return viaGeometry(PolygonGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"polygram\": return viaGeometry(PolygramGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"line\": {\n const points = s.points ? s.points.map((p: { x: number; y: number }) => ({ x: p.x, y: -p.y })) : s.points;\n return viaGeometry(LineGeometry, { ...s, y: negY(s.y), points });\n }\n case \"path\": return pathShape(negPathY(s));\n }\n return null;\n}\n","import { type MotionBlurEffect, type Vector2, resolveEffectAxis, resolveMotionBlurAlignment } from \"@motionscript/core\";\n\n/** A motion blur resolved against a node's velocity into a directional smear. */\nexport interface MotionBlurResolved {\n /** Smear axis in degrees (0 = horizontal), as a directional blur's `angle`. */\n angle: number;\n /** Smear length in px along `angle`. */\n radius: number;\n /** Shutter phase in −1…1: offsets the smear's centre from the node's position. */\n phase: number;\n samples: number;\n}\n\n/** Above this `samples` count a shutter steps the smear into discrete taps rather than blurring it continuously. */\nexport const SAMPLE_THRESHOLD = 32;\n\n/**\n * `velocity · dt` is the node's displacement this frame; `length / 100` the\n * shutter fraction (100% = the whole displacement), scaled per axis by `axis`\n * and by `strength`. Null when the smear would be empty.\n */\nexport function resolveMotionBlur(effect: MotionBlurEffect, velocity: Vector2, dt: number): MotionBlurResolved | null {\n if (dt <= 0 || effect.strength <= 0 || effect.length <= 0) return null;\n const axis = resolveEffectAxis(effect.axis);\n const shutter = effect.length / 100;\n const sx = velocity.x * dt * axis.x * shutter * effect.strength;\n const sy = velocity.y * dt * axis.y * shutter * effect.strength;\n const radius = Math.hypot(sx, sy);\n if (radius < 0.01) return null;\n return {\n angle: (Math.atan2(sy, sx) * 180) / Math.PI,\n radius,\n phase: resolveMotionBlurAlignment(effect.alignment),\n samples: effect.samples,\n };\n}\n","// End-marker outlines, in the frame of the end they sit on: `u` runs the way the\n// stroke leaves, `v` to its left, and the origin is the path's end. `size` is\n// the marker's length and `weight` the stroke's.\n\nimport type { StrokeMarker } from \"@motionscript/core\";\n\n/** Half-width over length of a pointed head: as wide as it is long. */\nconst SPREAD = 0.5;\nconst SPREAD_LENGTH = Math.hypot(1, SPREAD);\nconst SPREAD_SIN = SPREAD / SPREAD_LENGTH;\nconst SPREAD_COS = 1 / SPREAD_LENGTH;\n\n/** How far up a stealth head its notch reaches, as a share of its length. */\nconst STEALTH_NOTCH = 0.35;\n\n/** A head with its tip on the end, turned by the stretch of path it covers. */\nexport function markerIsPointed(marker: StrokeMarker): boolean {\n return marker === \"arrow\" || marker === \"triangle\" || marker === \"stealth\";\n}\n\n/**\n * How far behind the end the stroke's own band has to stop: a pointed head is\n * narrower than the band near its tip, so the band's square end would show\n * either side of it.\n */\nexport function markerInset(marker: StrokeMarker, size: number, weight: number): number {\n return markerIsPointed(marker) ? Math.min(size, weight / (2 * SPREAD)) : 0;\n}\n\n/** The outline as a flat `[u, v, …]` polygon, or `null` for a disc `size` across centred on the end. */\nexport function markerPolygon(marker: StrokeMarker, size: number, weight: number): number[] | null {\n const half = size / 2;\n switch (marker) {\n case \"dot\":\n return null;\n case \"triangle\":\n return [0, 0, -size, size * SPREAD, -size, -size * SPREAD];\n case \"stealth\":\n return [0, 0, -size, size * SPREAD, -size * (1 - STEALTH_NOTCH), 0, -size, -size * SPREAD];\n case \"arrow\":\n return chevron(size, weight);\n case \"box\":\n return [-half, -half, half, -half, half, half, -half, half];\n case \"diamond\":\n return [half, 0, 0, half, -half, 0, 0, -half];\n case \"bar\":\n return [-weight / 2, -half, weight / 2, -half, weight / 2, half, -weight / 2, half];\n }\n}\n\n// Two limbs `weight` thick meeting in a mitre whose point is the origin. Short\n// of room for a gap between them it is the solid triangle.\nfunction chevron(size: number, weight: number): number[] {\n const outerV = size * SPREAD;\n const innerU = -size - weight * SPREAD_SIN;\n const innerV = outerV - weight * SPREAD_COS;\n if (innerV <= 0) return [0, 0, -size, outerV, -size, -outerV];\n const crotch = -weight / SPREAD_SIN;\n return [0, 0, -size, outerV, innerU, innerV, crotch, 0, innerU, -innerV, -size, -outerV];\n}\n","// Stroke cap planning and dash fitting on PathData: which path ends want a\n// cap other than the stroker's, where each sits and which way it faces, and\n// the dash pattern stretched to fit the path (dashes cut here as open\n// contours when the band needs its ends fixed up).\n\nimport { isStrokeMarker, type StrokeEnd, type StrokeMarker, type StrokeResolved } from \"@motionscript/core\";\nimport { markerIsPointed, markerPolygon } from \"./geometry/markers\";\nimport { type PathData, PathBuilder } from \"../doc\";\nimport { type Contour, dashedPath, dashFit, contourDashScale, dashRuns, measureContours, type PosTan } from \"./path-measure\";\n\nexport { markerInset } from \"./geometry/markers\";\n\ntype Cap = StrokeResolved[\"cap\"];\n\n/** One end of an open contour, with the unit direction pointing out past it. */\nexport interface PathEnd {\n x: number;\n y: number;\n dx: number;\n dy: number;\n cap: StrokeEnd;\n /** A marker's length, already fitted to its contour. */\n size: number;\n weight: number;\n /** Whether the band reaches the end (a dash gap can leave it bare). */\n reached: boolean;\n}\n\nexport interface StrokePlan {\n /** The cap the stroker draws: the dash cap, or for an undashed stroke the end cap. */\n cap: Cap;\n /** The ends that want another, fixed up after. */\n ends: PathEnd[];\n /** What to stroke instead of the shape's own contour (its cut dashes). */\n source?: PathData;\n /** The fitted pattern the renderer dashes with (unset when `source` carries the dashes). */\n dash?: number[];\n dashPhase?: number;\n}\n\n/** The plan for stroking `path` `width` wide; null when its dashes leave nothing. */\nexport function strokePlan(st: StrokeResolved, path: PathData, width: number, thin: boolean): StrokePlan | null {\n const dashed = !!st.dash?.length;\n const start = st.startCap ?? st.cap, end = st.endCap ?? st.cap;\n const cap: Cap = dashed ? st.cap : isStrokeMarker(end) ? \"butt\" : (end as Cap);\n const differs = start !== cap || end !== cap;\n if (!dashed && !differs) return { cap, ends: [] };\n const cs = measureContours(path);\n const fit = dashed ? dashFit(cs, st.dash!) : null;\n // A degenerate pattern draws the plain stroke (makeUniformDashEffect returns null).\n if (dashed && !fit) return { cap, ends: differs ? capEnds(cs, st, start, end, cap, width, null) : [] };\n if (!fit) return { cap, ends: capEnds(cs, st, start, end, cap, width, null) };\n const runs = (c: Contour) => dashRuns(c, st.dash!, st.dashOffset ?? 0, contourDashScale(c, st.dash!, fit));\n const ends = differs ? capEnds(cs, st, start, end, cap, width, runs) : [];\n // An end capped unlike the rest needs the band, and so do dashes along an\n // open contour (fit per contour) and thin ones; otherwise the renderer\n // dashes with the fitted pattern.\n if (thin || ends.length || fit.open) {\n const source = dashedPath(cs, st.dash!, st.dashOffset ?? 0, st.cap !== \"butt\", fit);\n return source ? { cap, ends, source } : null;\n }\n return { cap, ends, dash: st.dash!.map((d) => d * fit.scale), dashPhase: (st.dashOffset ?? 0) * fit.scale };\n}\n\nfunction capEnds(cs: Contour[], st: StrokeResolved, start: StrokeEnd, end: StrokeEnd, cap: Cap, width: number, runs: ((c: Contour) => [number, number][]) | null): PathEnd[] {\n const ends: PathEnd[] = [];\n const marked = (isStrokeMarker(start) ? 1 : 0) + (isStrokeMarker(end) ? 1 : 0);\n const half = width / 2;\n // band.contains(end − dir·inset): a dash covers the end, or its cap does.\n const inset = Math.min(half, 1) / 2;\n const ext = st.cap !== \"butt\" ? half : 0;\n for (const c of cs) {\n if (c.closed) continue;\n // Two heads share a contour too short for both.\n const size = Math.min(st.capScale * width, c.length / Math.max(1, marked));\n const on = runs?.(c);\n const reached = (d: number) => !on || on.some(([a, b]) => d >= a - ext - 1e-6 && d <= b + ext + 1e-6);\n if (start !== cap) pushEnd(ends, c.posTan(0), c.posTan(size), -1, start, size, width, reached(inset));\n if (end !== cap) pushEnd(ends, c.posTan(c.length), c.posTan(c.length - size), 1, end, size, width, reached(c.length - inset));\n }\n return ends;\n}\n\n// `inner` is the point a marker's length back along the contour: a pointed\n// head is turned by the chord to it, so its base sits on a curved path.\nfunction pushEnd(ends: PathEnd[], [x, y, tx, ty]: PosTan, inner: PosTan, outward: 1 | -1, cap: StrokeEnd, size: number, weight: number, reached: boolean) {\n let dx = outward * tx, dy = outward * ty;\n if (isStrokeMarker(cap) && markerIsPointed(cap) && Math.hypot(x - inner[0], y - inner[1]) > 1e-6) {\n dx = x - inner[0];\n dy = y - inner[1];\n }\n const length = Math.hypot(dx, dy);\n if (length < 1e-9) return;\n ends.push({ x, y, dx: dx / length, dy: dy / length, cap, size, weight, reached });\n}\n\n// Every end shape winds the same way, so several merged into one path union\n// under the non-zero rule instead of cancelling where they overlap.\n\n/** The rectangle past `end`: `depth` along its outward direction, `half` to either side. */\nexport function endBox({ x, y, dx, dy }: PathEnd, depth: number, half: number): PathData {\n const nx = -dy * half, ny = dx * half, ex = dx * depth, ey = dy * depth;\n return new PathBuilder().moveTo(x - nx, y - ny).lineTo(x - nx + ex, y - ny + ey).lineTo(x + nx + ex, y + ny + ey).lineTo(x + nx, y + ny).close().build();\n}\n\n/** The half disc past `end`, from one side of the band through the outward direction to the other. */\nexport function endDisc({ x, y, dx, dy }: PathEnd, r: number): PathData {\n const b = new PathBuilder();\n const n = 32;\n for (let i = 0; i <= n; i++) {\n const a = -Math.PI / 2 + (Math.PI * i) / n, c = Math.cos(a) * r, s = Math.sin(a) * r;\n const px = x + c * dx - s * dy, py = y + c * dy + s * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n\n/** A marker's outline on its end (addMarker): its polygon in the end's frame, or a disc `size` across. */\nexport function markerPath(e: PathEnd, marker: StrokeMarker): PathData {\n const { x, y, dx, dy, size, weight } = e;\n const polygon = markerPolygon(marker, size, weight);\n const b = new PathBuilder();\n if (!polygon) {\n const r = size / 2, k = 0.5522848 * r;\n b.moveTo(x + r, y).cubicTo(x + r, y + k, x + k, y + r, x, y + r).cubicTo(x - k, y + r, x - r, y + k, x - r, y)\n .cubicTo(x - r, y - k, x - k, y - r, x, y - r).cubicTo(x + k, y - r, x + r, y - k, x + r, y);\n return b.close().build();\n }\n for (let i = 0; i < polygon.length; i += 2) {\n const px = x + polygon[i] * dx - polygon[i + 1] * dy, py = y + polygon[i] * dy + polygon[i + 1] * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n","// The engine's RenderContext2D, recorded into a retained Doc each frame. A\n// canvas state machine: begin/end = save/restore around a node, transform() concatenates into the\n// node's group, a non pass-through blend isolates a layer, and opacity is\n// otherwise a world alpha multiplied into every paint.\n\nimport {\n alignmentOps, AUTOFIT_PROBE_SIZE, forEachTexture3D, isStrokeMarker, isSurfaceTexture3D, resolveSurfaceSource, resolveVideoTimestamp, withRichTextDescriptor,\n type Alignment, type BooleanOperation, CanvasRenderContext2D, type Clip, type FillResolved, fillOps, type FontStyle, type Graphics2D,\n type MaskOptions, type NodeRenderState, type RenderContext2D, type RenderIssue, type ShadowResolved, shadowOps, type Size2D, type StrokeResolved, strokeOps,\n type TextSegment, type TransformState, type Vector2,\n} from \"@motionscript/core\";\nimport { BLEND_MODES, type BlendMode, Doc, type ImageAsset, isProjective, type Mat, type Member, type MemberOp, mulX, type Node, type Paint, PathBuilder, type PathData, pathBounds, type Shadow, type TextRunSpec, type TextSpec, transformPath, type Xform } from \"../doc\";\nimport { assetKey } from \"./driver\";\nimport { fillPaint, shadowOf } from \"./paint\";\nimport { shaderParamIssues } from \"./shader-params\";\nimport { isClosed, reversePath, signedArea } from \"./path-measure\";\nimport { type NativeShape, shapeOf, type ShapeOut, textOf, type TextOut } from \"./shapes\";\nimport { resolveMotionBlur, SAMPLE_THRESHOLD } from \"./geometry/motion-blur\";\nimport { endBox, endDisc, markerInset, markerPath, type PathEnd, strokePlan, type StrokePlan } from \"./stroke-ends\";\n\ntype Measure = (text: string, size: number, family: string, weight: number, letterSpacing: number, style: FontStyle | undefined) => Size2D;\n\nfunction merge(paths: PathData[]): PathData {\n if (paths.length === 1) return paths[0];\n const verbs = new Uint8Array(paths.reduce((n, p) => n + p.verbs.length, 0));\n const points = new Float32Array(paths.reduce((n, p) => n + p.points.length, 0));\n let v = 0, q = 0;\n for (const p of paths) {\n verbs.set(p.verbs, v); v += p.verbs.length;\n points.set(p.points, q); q += p.points.length;\n }\n return { verbs, points };\n}\n\ntype Bounds = [number, number, number, number];\n\n/** The kinds the adapter could not draw this frame, and the nodes each was found on. */\nexport class MissingKinds extends Set<string> {\n readonly nodes = new Map<string, Set<string>>();\n\n constructor(private readonly node: () => string | undefined) {\n super();\n }\n\n override add(kind: string): this {\n super.add(kind);\n const id = this.node?.();\n if (id !== undefined) {\n let at = this.nodes.get(kind);\n if (!at) this.nodes.set(kind, (at = new Set()));\n at.add(id);\n }\n return this;\n }\n\n override clear(): void {\n super.clear();\n this.nodes.clear();\n }\n}\n\nconst SHAPE_OPS = new Set([\"rect\", \"ellipse\", \"path\", \"line\", \"polygon\", \"polygram\", \"text\", \"richText\"]);\ntype LeafProps = Parameters<Doc[\"pathNode\"]>[1];\n\nconst isSolid = (f: unknown) => (f as { type?: string }).type === \"solid\";\n\n/** `box` grown by `d` (shrunk when negative), each rounded corner with it; null where that is no longer the offset outline. */\nfunction offsetBox(box: NativeShape, d: number): NativeShape | null {\n if (d === 0) return box;\n const w = box.w + 2 * d, h = box.h + 2 * d;\n if (!(w > 0 && h > 0)) return null;\n if (box.kind === \"ellipse\") return { ...box, x: box.x - d, y: box.y - d, w, h };\n if (box.radii.some((r) => r > 0 && !(r + d > 0))) return null;\n return { ...box, x: box.x - d, y: box.y - d, w, h, radii: box.radii.map((r) => (r > 0 ? r + d : 0)) as NativeShape[\"radii\"] };\n}\n\n/** What a paint covers: one path, or a compound's members (a boolean result). */\ntype Geom = { path: PathData } | { members: Member[] };\n\nconst BLACK: Paint = { kind: \"solid\", color: [0, 0, 0, 1] };\nconst CLEAR: Paint = { kind: \"solid\", color: [0, 0, 0, 0] };\n\n/** A text block's box, centred on its node's origin: the space its paints resolve in. */\nconst textBox = (t: TextOut): Bounds => [-t.size[0] / 2, -t.size[1] / 2, t.size[0] / 2, t.size[1] / 2];\n\n/** Strokes that draw as one text node: the k-th of their pieces, alike in everything but paint. */\nconst strokeKey = (k: number, st: StrokeResolved) => `${k}|${st.weight}|${st.align}|${st.join}|${st.cap}|${st.miterLimit}|${st.dash}|${st.dashOffset}`;\nconst BOOLEAN_OP: Record<BooleanOperation, MemberOp> = { union: \"union\", subtract: \"cut\", intersect: \"intersect\", exclude: \"exclude\" };\n\n/** A compound's result bounds, as its members fold: unions grow, intersections shrink, cuts keep. */\nfunction membersBounds(members: Member[]): Bounds | null {\n let acc: Bounds | null = null;\n for (const m of members) {\n const b = pathBounds(m.path!);\n const op = m.op ?? \"union\";\n if (!acc) {\n if (op === \"union\" || op === \"exclude\") acc = b;\n } else if (op === \"union\" || op === \"exclude\") {\n acc = [Math.min(acc[0], b[0]), Math.min(acc[1], b[1]), Math.max(acc[2], b[2]), Math.max(acc[3], b[3])];\n } else if (op === \"intersect\") {\n acc = [Math.max(acc[0], b[0]), Math.max(acc[1], b[1]), Math.min(acc[2], b[2]), Math.min(acc[3], b[3])];\n if (acc[2] < acc[0] || acc[3] < acc[1]) acc = [acc[0], acc[1], acc[0], acc[1]];\n }\n }\n return acc;\n}\n\nfunction invert(m: Xform): Mat | null {\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return null;\n const a = m[3] / det, b = -m[1] / det, c = -m[2] / det, d = m[0] / det;\n return [a, b, c, d, -(a * m[4] + c * m[5]), -(b * m[4] + d * m[5])];\n}\n\nlet sceneVersion = 1 << 20;\n\n/** core's kebab-case blend names to the doc's (\"color-dodge\" → \"colorDodge\"). */\nfunction docBlend(b: string): BlendMode | null {\n const camel = (b === \"plus-lighter\" ? \"plus\" : b).replace(/-(\\w)/g, (_, c: string) => c.toUpperCase());\n return BLEND_MODES.includes(camel as BlendMode) ? (camel as BlendMode) : null;\n}\n// An image's version is its bitmap's: what the storage hands back for a source\n// can change (a video's nearest decoded frame, then the exact one; an SVG\n// rasterized again at a larger size).\nconst frameVersions = new WeakMap<object, number>();\nlet nextFrameVersion = 1 << 24;\nfunction frameVersion(frame: object): number {\n let v = frameVersions.get(frame);\n if (v === undefined) frameVersions.set(frame, (v = nextFrameVersion++));\n return v;\n}\n\n/** Decoded video frames by source and time (a storage adapter's). */\nexport interface VideoFrames {\n videos: Map<string, { duration: number }>;\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null;\n /** A draw of image `src` `edge` device px along its long side. */\n wantImageEdge?(src: string, edge: number): void;\n}\n\ninterface Scope {\n /** Groups this node opened (popped on end). */\n groups: number;\n worldAlpha: number;\n}\n\nexport class WgpuRenderContext extends CanvasRenderContext2D {\n override readonly readsSpaceRects = true;\n override readonly drawsVisibleOnly = true;\n pixelRatio = 1;\n doc!: Doc;\n /** What scenes asked for that the adapter doesn't draw yet (by kind, and the nodes it was on). */\n readonly missing = new MissingKinds(() => this.currentNodeStack[this.currentNodeStack.length - 1]);\n /** This frame's WGSL shaders whose uniforms and `Params` disagree, on their nodes. */\n readonly shaderIssues: RenderIssue[] = [];\n /** The frame's storage adapter (video frames). */\n storage: VideoFrames | null = null;\n /** Decoded images by asset key (the storage adapter fills it). */\n images = new Map<string, import(\"./driver\").Decoded>();\n private frameImages = new Map<string, import(\"../doc\").ImageAsset>();\n private assets = {\n image: (src: string) => this.image(src),\n scene3d: (scene: unknown, w: number, h: number, ratio: number) => {\n // Its textures: images from the frame's image assets (resolved as the\n // backend asks), surfaces drawn by this context into detached subtrees.\n const surfaces = new Map<object, ImageAsset>();\n forEachTexture3D(scene as never, (t: any) => {\n if (isSurfaceTexture3D(t) && !surfaces.has(t)) {\n const asset = this.surfaceOf(t);\n if (asset) surfaces.set(t, asset);\n }\n });\n const images = new Proxy({} as Record<string, ImageAsset>, { get: (_, src) => (typeof src === \"string\" ? this.image(src) ?? undefined : undefined) });\n const a = this.doc.addScene3D(scene as never, w, h, { images, surfaces });\n a.scale3d = ratio;\n // A scene is redrawn whenever it is handed over (it may animate).\n a.version = ++sceneVersion;\n return a;\n },\n video: (fill: any, at?: number) => {\n const storage = this.storage;\n const time = at ?? this.videoTime(fill);\n if (!storage || time === null) return null;\n const frame = storage.videoFrame(fill.src, time);\n if (!frame) return null;\n const key = `${assetKey(fill.src)}@${time.toFixed(6)}`;\n let a = this.frameImages.get(key);\n if (!a) {\n a = this.doc.addImage(frame, frame.width, frame.height, { mipmaps: false });\n a.version = frameVersion(frame);\n this.frameImages.set(key, a);\n }\n return a;\n },\n imageEdge: (src: string, edge: number) => this.storage?.wantImageEdge?.(src, edge),\n deviceScale: () => {\n const m = this.device();\n return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2]));\n },\n time: () => this.elapsed(),\n checkShader: (fill: unknown) => this.checkShader(\"fill\", fill),\n };\n private image = (raw: string) => {\n const src = assetKey(raw);\n let a = this.frameImages.get(src);\n if (a) return a;\n const d = this.images.get(src);\n if (!d) return null;\n a = this.doc.addImage(d.bitmap, d.width, d.height);\n // Ids restart with every frame's doc; a version unique to the bitmap\n // keeps the backend from reusing another image's upload under an id,\n // or an image's earlier raster (a vector rasterized again, sharper).\n a.version = frameVersion(d.bitmap);\n this.frameImages.set(src, a);\n return a;\n };\n private stack: Node[] = [];\n private scopes: Scope[] = [];\n private worldAlpha = 1;\n // The current surface: shapes chained before a paint, as ShapeHandler.\n private shapes: ShapeOut[] = [];\n private painted = false;\n private shadows: ShadowResolved[] = [];\n\n constructor(protected width: number, protected height: number, private measure: Measure) {\n super();\n }\n\n private get cur(): Node {\n return this.stack[this.stack.length - 1];\n }\n\n measureText(text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n return this.measure(text, fontSize, fontFamily, fontWeight, letterSpacing, fontStyle);\n }\n\n execute(callback: () => void): void {\n // executePass: cleared black, origin at the centre (the backend applies\n // the pixel ratio by scaling the doc to the canvas).\n this.doc = new Doc(this.width, this.height, this.clearColor());\n this.frameImages.clear();\n // Only the settled pass counts (earlier passes wait on decodes).\n this.missing.clear();\n this.shaderIssues.length = 0;\n const root = this.doc.group(this.doc.root, { transform: this.rootTransform() });\n const frame = this.frameGroup(root);\n this.stack = frame === root ? [root] : [root, frame];\n this.scopes = [];\n this.worldAlpha = 1;\n this.masks = [];\n this.cameras = [];\n this.clips = [];\n this.booleans = [];\n this.resetSurface();\n callback();\n }\n\n /** Where the scene's origin sits in the doc: its centre, as executePass. */\n protected rootTransform(): Xform {\n return [1, 0, 0, 1, this.width / 2, this.height / 2];\n }\n\n protected clearColor(): [number, number, number, number] {\n return [0, 0, 0, 1];\n }\n\n /** The group the scene draws into under the root (a host's frame clip). */\n protected frameGroup(root: Node): Node {\n return root;\n }\n\n screenshot(): string | undefined {\n return undefined;\n }\n\n unmount(): void {}\n\n override begin(state: NodeRenderState): void {\n super.begin(state);\n this.scopes.push({ groups: 1, worldAlpha: this.worldAlpha });\n this.stack.push(this.doc.group(this.cur));\n this.resetSurface();\n }\n\n override end(): void {\n const s = this.scopes.pop();\n if (s) {\n for (let i = 0; i < s.groups; i++) this.stack.pop();\n this.worldAlpha = s.worldAlpha;\n }\n super.end();\n }\n\n transform(state: Partial<TransformState>): RenderContext2D {\n const x = state.x ?? 0, y = state.y ?? 0, w = state.width ?? 0, h = state.height ?? 0;\n const opacity = state.opacity ?? 1;\n const blend = state.blend ?? \"pass-through\";\n let m: Xform;\n const matrix = state.matrix;\n // A 2.5D node's matrix can carry a perspective row (g h i).\n if (matrix) m = [matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f, matrix.g ?? 0, matrix.h ?? 0, matrix.i ?? 1];\n else {\n const pivot = state.pivot ?? { x: 0, y: 0 };\n const px = pivot.x * (w / 2), py = -pivot.y * (h / 2);\n const r = ((state.rotation ?? 0) * Math.PI) / 180, s = state.scale ?? 1;\n const c = Math.cos(r) * s, sn = Math.sin(r) * s;\n m = [c, sn, -sn, c, x + px - (c * px - sn * py), y + py - (sn * px + c * py)];\n }\n const g = this.cur;\n g.transform = mulX(g.transform, isProjective(m) ? m : m.slice(0, 6) as Mat);\n // Node effects ride the node's layer (transform composes the filters,\n // beginEffects(\"foreground\") captures for the shader ones); the doc's\n // group takes both, shader effects first, as the engine orders them.\n // Backdrop ones arrive through beginEffects(\"backdrop\").\n const fx = this.motionBlur((state.effects ?? []).filter((e) => e.mode !== \"backdrop\"));\n for (const e of fx) if (e.type === \"shader\") this.checkShader(\"effect\", e);\n if (fx.length) {\n g.effects = fx;\n g.effectBox = [-w / 2, -h / 2, w, h];\n g.effectTime = this.elapsed();\n }\n if (blend !== \"pass-through\") {\n const mode = docBlend(blend);\n if (!mode) this.missing.add(`blend:${blend}`);\n this.stack.push(this.doc.group(g, { opacity: this.worldAlpha * (opacity < 1 ? opacity : 1), blend: mode ?? \"normal\" }));\n this.scopes[this.scopes.length - 1].groups++;\n this.worldAlpha = 1;\n } else if (opacity < 1) this.worldAlpha *= opacity;\n return this;\n }\n\n private resetSurface() {\n this.shapes = [];\n this.painted = false;\n this.shadows = [];\n }\n\n protected drawGraphics(graphics: Graphics2D): void {\n const prevAlpha = this.worldAlpha;\n const g = graphics as any;\n if (g.needsGroupLayer?.()) {\n const o = g.groupOpacity();\n if (o < 1) this.worldAlpha *= o;\n }\n // Graphics-level rotation/scale turns the whole union about its pivot\n // (default: the union's centre), wrapping the replay.\n const turn = g.groupTransform?.();\n let turned: Node | null = null;\n if (turn) {\n const { x: cx, y: cy } = this.groupCenter(graphics, turn.center);\n const r = (turn.rotation * Math.PI) / 180, c = Math.cos(r) * turn.scale, s = Math.sin(r) * turn.scale;\n turned = this.doc.group(this.cur, { transform: [c, s, -s, c, cx - (c * cx - s * cy), cy - (s * cx + c * cy)] });\n this.stack.push(turned);\n }\n const ops = graphics.ops() as any[];\n const segments = this.effectSegments(ops);\n let segment: Node | null = null;\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n // An effects op filters its shape group: a layer opened at the\n // group's first op, closed at the effects op.\n const fx = segments.get(i);\n if (fx) {\n segment = this.doc.group(this.cur, { effects: fx, effectBox: this.viewportBox(), effectTime: this.elapsed() });\n this.stack.push(segment);\n }\n switch (op.kind) {\n case \"rect\": case \"ellipse\": case \"polygon\": case \"polygram\": case \"line\": case \"path\": {\n if (this.painted) this.resetSurface();\n const shape = shapeOf(op);\n if (!shape) break;\n if (this.booleans.length) this.collect(shape);\n else this.shapes.push(shape);\n break;\n }\n case \"cut\": this.cut(); break;\n case \"richText\": {\n if (this.painted) this.resetSurface();\n this.richText(op.state);\n break;\n }\n case \"text\": {\n if (this.painted) this.resetSurface();\n const text = textOf(op.state, (spec) => {\n const r = spec.runs[0];\n const m = this.measureText(r.text, r.size, r.family, r.weight, r.letterSpacing, r.italic ? \"italic\" : \"normal\");\n return [m.width, m.height];\n });\n const segments: TextSegment[] | undefined = op.state.segments;\n if (text && segments?.length && !text.spec.path) {\n this.paintSegments(text, segments);\n } else if (text) {\n const [w, h] = text.size, x = text.transform[4], y = text.transform[5];\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: [x - w / 2, y - h / 2, x + w / 2, y + h / 2], text });\n } else this.missing.add(\"text:path\");\n break;\n }\n case \"fill\": this.fill(fillOps.resolve(op.fills)); break;\n case \"stroke\": this.stroke(strokeOps.resolve(op.strokes)); break;\n case \"shadow\": this.shadows = shadowOps.resolve(op.shadows); break;\n case \"effects\":\n if (segment) {\n this.stack.splice(this.stack.lastIndexOf(segment));\n segment = null;\n }\n this.resetSurface();\n break;\n case \"mask\": this.beginMask(op.options); break;\n case \"applyMask\": this.applyMask(); break;\n case \"endMask\": this.endMask(); break;\n default: this.missing.add(`op:${op.kind}`);\n }\n }\n // Unwound to where this draw began (an unterminated segment included).\n const first = turned ?? segment;\n if (first) this.stack.splice(this.stack.lastIndexOf(first));\n this.worldAlpha = prevAlpha;\n }\n\n /** RenderContext's buildEffectSegments: each effects op's foreground effects\n * by the index of the first op of the shape group it filters. */\n private effectSegments(ops: any[]): Map<number, object[]> {\n const segments = new Map<number, object[]>();\n let groupStart = 0, painted = false;\n ops.forEach((op, i) => {\n if (SHAPE_OPS.has(op.kind)) {\n if (painted) {\n groupStart = i;\n painted = false;\n }\n } else if (op.kind === \"fill\" || op.kind === \"stroke\" || op.kind === \"shadow\") {\n painted = true;\n } else if (op.kind === \"effects\") {\n const fx = this.motionBlur((op.effects as any[]).filter((e) => e.mode !== \"backdrop\"));\n if (fx.length) segments.set(groupStart, fx);\n groupStart = i + 1;\n painted = false;\n }\n });\n return segments;\n }\n\n /** Motion blur resolved against the node's velocity into a directional blur. */\n private motionBlur<E extends { type: string }>(effects: E[]): E[] {\n if (!effects.some((e) => e.type === \"motionBlur\")) return effects;\n const rs = this.currentRenderState();\n return effects.flatMap((e) => {\n if (e.type !== \"motionBlur\") return [e];\n const r = rs ? resolveMotionBlur(e as never, rs.velocity, rs.dt) : null;\n if (!r) return [];\n // An off-centre shutter shifts the smear; many samples step it.\n if (r.phase !== 0 || Math.round(r.samples) > SAMPLE_THRESHOLD) this.missing.add(\"effect:motionBlur-shutter\");\n return [{ type: \"directionalBlur\", radius: r.radius, angle: r.angle } as unknown as E];\n });\n }\n\n /** resolveGroupCenter: an explicit point as is, else a point of the shapes' union box. */\n private groupCenter(graphics: Graphics2D, center: Alignment | undefined): Vector2 {\n if (center !== undefined && typeof center !== \"string\") return { x: center.x, y: center.y };\n let b: Bounds | null = null;\n for (const op of graphics.ops() as any[]) {\n const p = SHAPE_OPS.has(op.kind) && op.kind !== \"text\" && op.kind !== \"richText\" ? shapeOf(op)?.fill : null;\n if (!p || !p.verbs.length) continue;\n const pb = pathBounds(p);\n b = b ? [Math.min(b[0], pb[0]), Math.min(b[1], pb[1]), Math.max(b[2], pb[2]), Math.max(b[3], pb[3])] : pb;\n }\n if (!b) return { x: 0, y: 0 };\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n if (center === undefined) return { x: cx, y: cy };\n const a = alignmentOps.resolve(center);\n return { x: cx + a.x * ((b[2] - b[0]) / 2), y: cy - a.y * ((b[3] - b[1]) / 2) };\n }\n\n /** The viewport in local units (x, y, w, h): what effects on a graphics\n * group measure against. */\n private viewportBox(): [number, number, number, number] {\n const [l, t, r, b] = this.spaceBounds({ space: \"global\" }, [0, 0, 0, 0]);\n return [l, t, r - l, b - t];\n }\n\n /** The surface's paths of one kind, merged; its gradient bounds. */\n private surface(kind: \"fill\" | \"stroke\" | \"interior\"): PathData | null {\n let paths = this.shapes.map((s) => s[kind]).filter((p): p is PathData => !!p && p.verbs.length > 0);\n // Shapes fill one by one; one non-zero path of them all needs them\n // wound alike, or an overlap where they turn opposite ways cancels.\n if (kind === \"fill\" && paths.length > 1) paths = paths.map((p) => (signedArea(p) < 0 ? reversePath(p) : p));\n return paths.length ? merge(paths) : null;\n }\n\n private bounds(path: PathData | null): Bounds {\n const own = this.shapes.map((s) => s.bounds).filter((b) => b !== null);\n if (path && own.length !== this.shapes.length) return pathBounds(path);\n if (!own.length) return [0, 0, 0, 0];\n return own.reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]);\n }\n\n /** A leaf drawing `g`: a path node, or a compound for a boolean result. */\n private leaf(parent: Node, g: Geom, props: LeafProps): Node {\n return \"members\" in g ? this.doc.compound(parent, { ...props, members: g.members }) : this.doc.pathNode(parent, { ...props, path: g.path });\n }\n\n private geomBounds(g: Geom): Bounds {\n return \"members\" in g ? membersBounds(g.members) ?? [0, 0, 0, 0] : pathBounds(g.path);\n }\n\n /** The surface's outline grown by `spread`, shape by shape (a shape that\n * can't spread casts its own outline). A shrink can collapse a\n * shape: an `inset` one then casts nothing, null when none is left. */\n private spreadGeom(geom: Geom, spread: number, inset: boolean): Geom | null {\n if (!spread || \"members\" in geom) return geom;\n const paths: PathData[] = [];\n for (const s of this.shapes) {\n if (s.members || !s.fill || !s.fill.verbs.length) continue;\n const p = s.spread ? s.spread(spread) : s.fill;\n if (p && p.verbs.length) paths.push(p);\n else if (!inset) paths.push(s.fill);\n }\n return paths.length ? { path: merge(paths) } : null;\n }\n\n /** A group whose children are clipped to `g` (a compound clips as an alpha mask). */\n private clipTo(parent: Node, g: Geom): Node {\n if (\"path\" in g) {\n const [x0, y0, x1, y1] = pathBounds(g.path);\n return this.doc.group(parent, { clip: { x: x0, y: y0, w: x1 - x0, h: y1 - y0, r: 0, path: g.path } });\n }\n const m = this.doc.group(parent, { mask: \"alpha\" });\n this.doc.compound(m, { members: g.members, fill: BLACK });\n return m;\n }\n\n /** A group whose children show only outside `g`. */\n private clipOutside(parent: Node, g: Geom): Node {\n const m = this.doc.group(parent, { mask: \"invertAlpha\" });\n this.leaf(m, g, { fill: BLACK });\n return m;\n }\n\n private fill(layers: ReturnType<typeof fillOps.resolve>) {\n this.painted = true;\n // A boolean scope only collects outlines; its result is painted after.\n if (this.booleans.length) return;\n this.deferring(\"fill\", () => this.paintFill(layers));\n }\n\n /** Runs `paint` into the innermost mask's after-group when that mask's\n * `apply` leaves `kind` out: drawn after endMask, over the masked composite. */\n private deferring(kind: \"fill\" | \"stroke\", paint: () => void) {\n const m = this.masks[this.masks.length - 1];\n const after = m?.apply && !m.apply.has(kind) && !this.inVectorMask ? m.after : null;\n if (!after) return paint();\n this.stack.push(after);\n try {\n paint();\n } finally {\n this.stack.splice(this.stack.lastIndexOf(after));\n }\n }\n\n private paintFill(layers: ReturnType<typeof fillOps.resolve>) {\n this.paintText(layers, null);\n if (!layers.length) return;\n if (this.fillNative(layers)) return;\n const path = this.surface(\"fill\");\n const geoms: Geom[] = path ? [{ path }] : [];\n for (const s of this.shapes) if (s.members) geoms.push({ members: s.members });\n if (!geoms.length) return;\n const bounds = this.bounds(path);\n const all = this.shadows;\n this.shadows = [];\n for (const g of geoms) this.fillGeom(g, bounds, layers, all);\n }\n\n /**\n * One rect or ellipse painted solid, with no shadow to cast, drawn as the\n * renderer's own shape. Gradients and images stay paths: their paint space\n * is the path's.\n */\n private fillNative(layers: ReturnType<typeof fillOps.resolve>): boolean {\n const shape = this.shapes.length === 1 ? this.shapes[0] : null;\n const box = shape?.native;\n if (!shape || !box || this.inVectorMask || this.shadows.length || !layers.every(isSolid)) return false;\n for (const f of layers) {\n const paint = fillPaint(f, shape.bounds!, this.missing, this.assets);\n if (paint) this.native(this.cur, box, { fill: paint, opacity: this.worldAlpha * ((f as any).opacity ?? 1), blend: this.blendOf(f) });\n }\n return true;\n }\n\n /**\n * An undashed solid stroke round one rect, or round a circle (an ellipse's\n * offset outline is no ellipse), drawn as the renderer's own shape. Biased by\n * `align`, the band is a centred stroke round the shape offset by\n * align·weight/2, which stays exact while no rounded corner shrinks away. The\n * renderer keeps a square corner sharp, which is a miter join.\n */\n private strokeNative(st: ReturnType<typeof strokeOps.resolve>[number], weight: number, intWidth: number, dev: Xform): boolean {\n const shape = this.shapes.length === 1 ? this.shapes[0] : null;\n const native = shape?.native;\n if (!shape || !native || weight <= 0 || (st.dash?.length ?? 0) > 0 || !st.fill.every(isSolid)) return false;\n if (native.kind === \"ellipse\" && Math.abs(native.w - native.h) > 1e-3) return false;\n if (native.kind === \"rect\" && native.radii.some((r) => r === 0) && (st.join !== \"miter\" || !(st.miterLimit >= Math.SQRT2))) return false;\n const a = Math.max(-1, Math.min(1, st.align ?? 0));\n const box = offsetBox(native, (a * weight) / 2);\n if (!box) return false;\n const b = shape.bounds!;\n // As the path's points hold the box: in 32-bit floats.\n const snapM = this.snapBounds([Math.fround(b[0]), Math.fround(b[1]), Math.fround(b[2]), Math.fround(b[3])], intWidth, dev);\n const parent = snapM ? this.doc.group(this.cur, { transform: snapM }) : this.cur;\n for (const f of st.fill) {\n const paint = fillPaint(f, b, this.missing, this.assets);\n if (!paint) continue;\n const stroke = { paint, width: weight, join: st.join as never, cap: st.cap as never, miter: st.miterLimit };\n // As the path route: an aligned band keeps the normal blend.\n this.native(parent, box, { opacity: this.worldAlpha * ((f as any).opacity ?? 1), stroke, ...(a === 0 && { blend: this.blendOf(f) }) });\n }\n return true;\n }\n\n private native(parent: Node, box: NativeShape, props: LeafProps): Node {\n const at = { ...props, transform: [1, 0, 0, 1, box.x, box.y] as Mat, w: box.w, h: box.h, radii: box.radii };\n return box.kind === \"rect\" ? this.doc.rect(parent, at) : this.doc.ellipse(parent, at);\n }\n\n private fillGeom(geom: Geom, bounds: Bounds, layers: ReturnType<typeof fillOps.resolve>, all: ShadowResolved[]) {\n if (this.inVectorMask) {\n this.leaf(this.cur, geom, { fill: BLACK });\n return;\n }\n // Drop shadows with one solid fill ride the leaf (the renderer's\n // shadow paths); others are an offset, blurred copy painted with the\n // shadow's own fill, under the fill.\n const solid: Shadow[] = [];\n for (const sh of all) {\n if (sh.inner) continue;\n const one = sh.fill.length === 1 && (sh.fill[0] as any).type === \"solid\";\n if (one) {\n const s2 = shadowOf(sh, this.missing);\n if (s2) solid.push(s2);\n continue;\n }\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const g = this.doc.group(this.cur, { transform: [1, 0, 0, 1, dx, dy], filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const cast = this.spreadGeom(geom, sh.spread ?? 0, false)!;\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (paint) this.leaf(g, cast, { fill: paint, opacity: this.worldAlpha * ((f as any).opacity ?? 1) });\n }\n }\n layers.forEach((f, i) => {\n const space = this.spaceBounds(f, bounds);\n const paint = fillPaint(f, space, this.missing, this.assets);\n if (!paint) return;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n const shadows = i === 0 ? solid : [];\n const echo = (f as any).type === \"video\" ? (f as any).preset?.adjustments?.find((a: any) => a.type === \"echo\") : undefined;\n if (echo && echo.echoes > 0 && echo.delay > 0) {\n this.echoStack(geom, f, space, bounds, paint, opacity, shadows, echo);\n return;\n }\n const intensity = (f as any).preset?.intensity ?? 1;\n if (intensity > 0 && intensity < 1 && this.pixelAdjustments(f).length) {\n // applyMediaFilters' mix and fade: a lerp of the graded and the\n // ungraded fill where the content is opaque. Here the ungraded\n // one goes over the graded at 1 - intensity, since the renderer\n // folds a leaf's opacity into what its effects read.\n const g = this.doc.group(this.cur, { opacity, blend: this.blendOf(f) });\n this.mediaPreset(this.leaf(g, geom, { fill: paint, shadows }), f, bounds);\n this.leaf(g, geom, { fill: paint, opacity: 1 - intensity });\n return;\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, shadows, blend: this.blendOf(f) }), f, bounds);\n });\n // applyInnerShadows: a padded rect minus the offset contour, filled with\n // the shadow's fill, blurred, clipped to the shape — after the fill.\n for (const sh of all) {\n if (!sh.inner) continue;\n // An inset shadow's spread shrinks the contour it is cast from; one\n // shrunk to nothing leaves no hole, so the shadow fills the shape.\n const hole = this.spreadGeom(geom, -(sh.spread ?? 0), true);\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const [x0, y0, x1, y1] = this.geomBounds(geom);\n const pad = Math.abs(dx) + Math.abs(dy) + sh.blur * 2 + 2;\n const clip = this.clipTo(this.cur, geom);\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const blurred = this.doc.group(clip, { opacity: this.worldAlpha * ((f as any).opacity ?? 1), filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const region = this.doc.group(blurred, hole ? { mask: \"invertAlpha\" } : {});\n if (hole) this.leaf(region, hole, { transform: [1, 0, 0, 1, dx, dy], fill: BLACK });\n this.doc.rect(region, { transform: [1, 0, 0, 1, x0 - pad, y0 - pad], w: x1 - x0 + 2 * pad, h: y1 - y0 + 2 * pad, fill: paint });\n }\n }\n }\n\n /** _richText: spans laid out as one paragraph about the origin (no x/y,\n * wrapped at a positive width) and painted eagerly with each span's own\n * fill — runs carry their paints — and strokes. */\n private richText(state: any) {\n const f = withRichTextDescriptor(state);\n const spans = f.spans as any[];\n if (!spans.length) return;\n const local: [number, number, number, number] = [-f.width / 2, -f.height / 2, f.width / 2, f.height / 2];\n const clear: Paint = { kind: \"solid\", color: [0, 0, 0, 0] };\n const layerPaint = (layers: any[]): Paint => (layers[0] ? fillPaint(layers[0], local, this.missing, this.assets) : null) ?? clear;\n const runs: TextRunSpec[] = spans.map((sp) => ({\n text: sp.text, family: sp.fontFamily, size: sp.fontSize, weight: sp.fontWeight,\n italic: sp.fontStyle === \"italic\" || sp.fontStyle === \"oblique\", letterSpacing: sp.letterSpacing,\n }));\n const align = ({ start: \"left\", end: \"right\" } as Record<string, TextSpec[\"align\"]>)[f.textAlign] ?? (f.textAlign as TextSpec[\"align\"]);\n const spec: TextSpec = { runs, align, wrap: f.width > 0, width: f.width, lineHeight: f.lineHeight };\n // One text node per fill layer, each span's k-th layer on its runs (clear\n // where a span has fewer), then one per distinct stroke. Painting run by\n // run would differ only where runs overlap.\n const fills = Math.max(1, ...spans.map((sp) => sp.fill.length));\n for (let k = 0; k < fills; k++) {\n const layerRuns = runs.map((r, j) => ({ ...r, paint: layerPaint(spans[j].fill.slice(k, k + 1)) }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: layerRuns }, fill: clear, opacity: this.worldAlpha });\n }\n const strokes = new Map<string, { k: number; st: any; paints: Paint[] }>();\n spans.forEach((sp, j) => sp.stroke.forEach((st: any, k: number) => {\n const key = `${k}|${st.weight}|${st.join}|${st.cap}|${st.miterLimit}`;\n let s = strokes.get(key);\n if (!s) strokes.set(key, (s = { k, st, paints: spans.map(() => clear) }));\n s.paints[j] = layerPaint(st.fill);\n }));\n for (const { st, paints } of [...strokes.values()].sort((a, b) => a.k - b.k)) {\n const strokeRuns = runs.map((r, j) => ({ ...r, paint: paints[j] }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: strokeRuns }, opacity: this.worldAlpha, stroke: { paint: clear, width: st.weight, join: st.join, cap: st.cap, miter: st.miterLimit } });\n }\n }\n\n /** Text shapes of the surface as text nodes, filled or stroked. */\n private paintText(layers: ReturnType<typeof fillOps.resolve>, stroke: ReturnType<typeof strokeOps.resolve>[number] | null) {\n for (const shape of this.shapes) {\n const t = shape.text;\n if (!t) continue;\n for (const f of layers) {\n const paint = fillPaint(f, textBox(t), this.missing, this.assets);\n if (paint) this.textLayer(t, t.spec, t.spec, paint, this.worldAlpha * ((f as any).opacity ?? 1), stroke);\n }\n }\n }\n\n /**\n * A text whose `segments` paint themselves (styled runs, a Write On reveal):\n * core sends no fill or stroke op after it. One block shaped as runs, so a\n * hidden piece keeps its place: a text node per fill layer and per stroke,\n * each run painted with its piece's k-th layer, clear where it has none.\n */\n private paintSegments(t: TextOut, segments: TextSegment[]) {\n const spec = this.segmentSpec(t, segments);\n const box = textBox(t);\n const runPaint = (seg: TextSegment, f: FillResolved | undefined): Paint => {\n if (!f || !(seg.opacity > 0)) return CLEAR;\n const p = fillPaint(f, box, this.missing, this.assets);\n return p ? this.fadePaint(p, seg.opacity * ((f as any).opacity ?? 1)) : CLEAR;\n };\n const withPaints = (paint: (seg: TextSegment) => Paint): TextSpec => ({ ...spec, runs: spec.runs.map((r, j) => ({ ...r, paint: paint(segments[j]) })) });\n // An aligned stroke's mask: the shown runs only, in the mask's own paint.\n const mask: TextSpec = { ...spec, runs: spec.runs.map((r, j) => (segments[j].opacity > 0 ? r : { ...r, paint: CLEAR })) };\n const fills = Math.max(0, ...segments.map((s) => s.fill?.length ?? 0));\n for (let k = 0; k < fills; k++) {\n this.textLayer(t, withPaints((seg) => runPaint(seg, seg.fill?.[k])), mask, CLEAR, this.worldAlpha, null);\n }\n const strokes = new Map<string, { k: number; st: StrokeResolved }>();\n segments.forEach((seg) => seg.stroke?.forEach((st, k) => {\n const key = strokeKey(k, st);\n if (!strokes.has(key)) strokes.set(key, { k, st });\n }));\n for (const [key, { k, st }] of [...strokes].sort((a, b) => a[1].k - b[1].k)) {\n const layers = Math.max(...segments.map((seg) => seg.stroke?.[k]?.fill.length ?? 0));\n for (let m = 0; m < layers; m++) {\n const paint = (seg: TextSegment) => {\n const own = seg.stroke?.[k];\n return own && strokeKey(k, own) === key ? runPaint(seg, own.fill[m]) : CLEAR;\n };\n this.textLayer(t, withPaints(paint), mask, CLEAR, this.worldAlpha, st);\n }\n }\n }\n\n /** The block's runs, one per segment; `'autofit'` resolved here, as the renderer fits a single run only. */\n private segmentSpec(t: TextOut, segments: TextSegment[]): TextSpec {\n const base = t.spec.runs[0];\n let scale = 1, wrap = t.spec.wrap;\n const { width = 0, height = 0, minFontSize = 0 } = t.spec;\n if (t.spec.fontSize === \"autofit\" && width > 0 && height > 0) {\n // resolve_shaping: a probe at AUTOFIT_PROBE_SIZE scaled to the box, or wrapped at the minimum size.\n const probe = this.measureText(base.text, AUTOFIT_PROBE_SIZE, base.family, base.weight, base.letterSpacing, base.italic ? \"italic\" : \"normal\");\n const fit = AUTOFIT_PROBE_SIZE * Math.min(probe.width > 0 ? width / probe.width : 1, probe.height > 0 ? height / probe.height : 1);\n if (wrap && fit < minFontSize) scale = minFontSize / AUTOFIT_PROBE_SIZE;\n else {\n scale = fit / AUTOFIT_PROBE_SIZE;\n wrap = false;\n }\n }\n const runs: TextRunSpec[] = segments.map((s) => ({\n text: s.text,\n family: s.fontFamily ?? base.family,\n size: (s.fontSize ?? base.size) * scale,\n weight: s.fontWeight,\n italic: s.fontStyle === undefined ? base.italic : s.fontStyle === \"italic\" || s.fontStyle === \"oblique\",\n letterSpacing: s.letterSpacing,\n decoration: s.textDecoration === undefined ? base.decoration : s.textDecoration === \"underline\" ? \"underline\" : s.textDecoration === \"line-through\" ? \"lineThrough\" : undefined,\n }));\n return { ...t.spec, runs, wrap, fontSize: undefined };\n }\n\n /** A paint at `k` of its alpha; one that has no colour to fade (an image, a shader) draws at full. */\n private fadePaint(p: Paint, k: number): Paint {\n if (k >= 1) return p;\n if (p.kind === \"solid\") return { ...p, color: [p.color[0], p.color[1], p.color[2], p.color[3] * k] };\n if (\"stops\" in p) return { ...p, stops: p.stops.map((s) => ({ ...s, color: [s.color[0], s.color[1], s.color[2], s.color[3] * k] })) } as Paint;\n this.missing.add(\"text:run-opacity\");\n return p;\n }\n\n /** One fill (`stroke` null) or stroke of a text block; a run's own paint wins over `paint`, and `mask`'s runs shape an aligned stroke's band. */\n private textLayer(t: TextOut, spec: TextSpec, mask: TextSpec, paint: Paint, opacity: number, stroke: ReturnType<typeof strokeOps.resolve>[number] | null) {\n if (!stroke) {\n this.doc.textNode(this.cur, { transform: t.transform, text: spec, opacity, fill: paint });\n return;\n }\n const st = (width: number) => ({ paint, width, join: stroke.join as never, cap: stroke.cap as never, miter: stroke.miterLimit, dash: stroke.dash, dashPhase: stroke.dashOffset });\n const al = Math.max(-1, Math.min(1, stroke.align ?? 0));\n if (al === 0) {\n this.doc.textNode(this.cur, { transform: t.transform, text: spec, opacity, stroke: st(stroke.weight) });\n return;\n }\n // drawTextUnionStroke: glyphs have no single path, so the band\n // is one stroke under a mask made of the filled glyphs and a\n // ring stroked along them.\n const glyphs = (parent: Node) => this.doc.textNode(parent, { transform: t.transform, text: mask, fill: BLACK });\n const ring = (parent: Node, width: number) =>\n this.doc.textNode(parent, { transform: t.transform, text: mask, stroke: { paint: BLACK, width, join: stroke.join as never, miter: stroke.miterLimit } });\n // Erase what lies inside (a > 0) or outside (a < 0) the\n // glyphs, less a ring `keep` wide either side of the outline.\n const masked = (keep: number) => {\n if (al > 0) {\n const g = this.doc.group(this.cur, { mask: \"invertAlpha\" });\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n ring(m, keep);\n glyphs(m);\n return g;\n }\n const g = this.doc.group(this.cur, { mask: \"alpha\" });\n const m = this.doc.group(g);\n glyphs(m);\n ring(m, keep);\n return g;\n };\n if (Math.abs(al) >= 1) {\n // A band on one side only: twice as wide, its mask moved one\n // device px past the outline (applyTextAlignMask's seam\n // bridge, an erode or dilate, which a ring along every\n // glyph's outline is not), so band and fill overlap.\n const g = this.doc.group(this.cur, { mask: al > 0 ? \"invertAlphaEroded\" : \"alphaDilated\" });\n glyphs(g);\n this.doc.textNode(g, { transform: t.transform, text: spec, opacity, stroke: st(2 * stroke.weight) });\n } else {\n // drawTextPartiallyAlignedStroke: the band reaches (1 + a)·w/2\n // outside and (1 − a)·w/2 inside; stroked as wide as the\n // longer reach, the surplus erased past the shorter one.\n const out = ((1 + al) * stroke.weight) / 2, inside = ((1 - al) * stroke.weight) / 2;\n this.doc.textNode(masked(2 * (al > 0 ? inside : out)), { transform: t.transform, text: spec, opacity, stroke: st(2 * Math.max(out, inside)) });\n }\n }\n\n /** A Tex.surface source recorded into a detached subtree and rasterized\n * at width×height × its pixel ratio, origin at the\n * centre. The outer draw's surface state is set aside meanwhile. */\n private surfaceOf(t: any): ImageAsset | null {\n const ratio = Math.max(1, Math.min(t.maxPixelRatio ?? 1, 4)); // MAX_RASTER_PIXEL_RATIO\n const w = t.width ?? 512, h = t.height ?? 512;\n const pw = Math.max(1, Math.ceil(w * ratio)), ph = Math.max(1, Math.ceil(h * ratio));\n const root = this.doc.detached({ transform: [ratio, 0, 0, ratio, (w * ratio) / 2, (h * ratio) / 2] });\n const saved = { stack: this.stack, scopes: this.scopes, alpha: this.worldAlpha, shapes: this.shapes, painted: this.painted, shadows: this.shadows, masks: this.masks, clips: this.clips, cameras: this.cameras };\n this.stack = [root]; this.scopes = []; this.worldAlpha = 1; this.masks = []; this.clips = []; this.cameras = [];\n this.resetSurface();\n try {\n const src = resolveSurfaceSource(t.source) as any;\n if (src.kind === \"graphics\") this.draw(src.graphics);\n else {\n src.node.layout({ x: 0, y: 0, width: w, height: h }, this);\n src.node.render(this);\n }\n } catch (e) {\n this.missing.add(`surface:error`);\n console.warn(e);\n } finally {\n Object.assign(this, { stack: saved.stack, scopes: saved.scopes, worldAlpha: saved.alpha, shapes: saved.shapes, painted: saved.painted, shadows: saved.shadows, masks: saved.masks, clips: saved.clips, cameras: saved.cameras });\n }\n const a = this.doc.addSurface(root, pw, ph);\n a.version = ++sceneVersion;\n return a;\n }\n\n /** applyMediaFilters: a media fill's pixel adjustments run over the fill in\n * the shape's box and are clipped back to the shape — here, effects on\n * that fill's leaf with clip-to-input. */\n private mediaPreset(node: Node, f: unknown, bounds: [number, number, number, number]) {\n const pixel = this.pixelAdjustments(f);\n if (!pixel.length || ((f as any).preset.intensity ?? 1) <= 0) return;\n node.effects = pixel.map((a: any) => ({ ...a, clip: true }));\n node.effectBox = [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]];\n node.effectTime = this.elapsed();\n }\n\n /** A media fill's pixel adjustments: the video-only ones are not (posterizeTime\n * is in resolveVideoTimestamp, echo is echoStack). */\n private pixelAdjustments(f: unknown): object[] {\n const any = f as any;\n if ((any.type !== \"image\" && any.type !== \"video\") || !any.preset) return [];\n return (any.preset.adjustments ?? []).filter((a: any) => a.type !== \"echo\" && a.type !== \"posterizeTime\");\n }\n\n /** VideoFillRenderer.drawEchoStack: the past taps oldest first, each at\n * decay^n, then the current frame with its grade, all with the echo's blend. */\n private echoStack(geom: Geom, f: any, space: Bounds, bounds: Bounds, paint: Paint, opacity: number, shadows: Shadow[], echo: any) {\n const blend = docBlend(echo.blend ?? \"screen\") ?? \"screen\";\n const decay = echo.decay ?? 0.5;\n const taps = Math.min(Math.max(0, Math.floor(echo.echoes)), 32); // MAX_ECHOES\n const time = this.videoTime(f);\n if (shadows.length) this.leaf(this.cur, geom, { fill: { kind: \"solid\", color: [0, 0, 0, 0] }, opacity, shadows });\n for (let n = taps; n >= 1 && time !== null; n--) {\n const ts = time - n * echo.delay;\n if (ts < 0) continue;\n const tap = fillPaint(f, space, this.missing, { ...this.assets, video: (fill) => this.assets.video(fill, ts) });\n if (tap) this.leaf(this.cur, geom, { fill: tap, opacity: opacity * Math.pow(decay, n), blend });\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, blend }), f, bounds);\n }\n\n /** The source time a video fill shows now, or null before its clip loads. */\n private videoTime(fill: any): number | null {\n const v = this.storage?.videos.get(assetKey(fill.src));\n return v ? resolveVideoTimestamp(fill, this.currentRenderState()?.elapsed ?? 0, v.duration) : null;\n }\n\n /** The current node's elapsed time (s), the `time` its effects get. */\n private elapsed(): number {\n return this.currentRenderState()?.elapsed ?? 0;\n }\n\n /** FillHandler.boundsForSpace: local = the shape's bounds; parent = the\n * parent's layout rect; global = the viewport mapped back to local space. */\n private spaceBounds(f: unknown, local: [number, number, number, number]): [number, number, number, number] {\n const space = (f as { space?: string }).space ?? \"local\";\n if (space === \"parent\") {\n const p = this.currentSpaceRects().parent;\n return p ? [p.left, p.top, p.right, p.bottom] : local;\n }\n if (space === \"global\") {\n const m = this.device();\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return local;\n const inv = (x: number, y: number): [number, number] => {\n const dx = x - m[4], dy = y - m[5];\n return [(m[3] * dx - m[2] * dy) / det, (-m[1] * dx + m[0] * dy) / det];\n };\n const W = this.width * this.pixelRatio, H = this.height * this.pixelRatio;\n const a = inv(0, 0), b = inv(W, H);\n return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[0], b[0]), Math.max(a[1], b[1])];\n }\n return local;\n }\n\n /** A fill layer's blend mode as a leaf's (the leaf blends as a unit). */\n private blendOf(f: unknown): BlendMode {\n const b = (f as { blend?: string }).blend;\n if (!b || b === \"normal\") return \"normal\";\n const mode = docBlend(b);\n if (!mode) this.missing.add(`fill:blend:${b}`);\n return mode ?? \"normal\";\n }\n\n /** Device matrix of the current group: pixel ratio × the group chain. */\n private device(): Xform {\n let m: Xform = [this.pixelRatio, 0, 0, this.pixelRatio, 0, 0];\n for (const g of this.stack) m = mulX(m, g.transform);\n return m;\n }\n\n /** StrokeHandler.snapPath: an axis-aligned thin stroke's shape scaled and\n * moved so its device bounds sit on pixel edges (centres for odd widths). */\n private snap(path: PathData, intWidth: number, m: Xform): Mat | null {\n return this.snapBounds(pathBounds(path), intWidth, m);\n }\n\n private snapBounds([bx0, by0, bx1, by1]: Bounds, intWidth: number, m: Xform): Mat | null {\n if (intWidth <= 0 || Math.abs(m[1]) > 1e-6 || Math.abs(m[2]) > 1e-6 || m[0] === 0 || m[3] === 0) return null;\n if (bx1 - bx0 <= 0 || by1 - by0 <= 0) return null;\n const sx = m[0], sy = m[3], tx = m[4], ty = m[5];\n const l = tx + sx * bx0, t = ty + sy * by0, r = tx + sx * bx1, b = ty + sy * by1;\n const off = intWidth % 2 === 0 ? 0 : 0.5;\n const tl = Math.round(l - off) + off, tt = Math.round(t - off) + off;\n const tr = Math.round(r - off) + off, tb = Math.round(b - off) + off;\n if (tr - tl < 1 || tb - tt < 1) return null;\n const kx = (tr - tl) / (r - l), ky = (tb - tt) / (b - t);\n if (Math.abs(kx - 1) < 1e-4 && Math.abs(ky - 1) < 1e-4 && Math.abs(tl - l) < 1e-4 && Math.abs(tt - t) < 1e-4) return null;\n return [kx, 0, 0, ky, (tl - tx) / sx - kx * bx0, (tt - ty) / sy - ky * by0];\n }\n\n private stroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n this.painted = true;\n if (this.booleans.length) return;\n this.deferring(\"stroke\", () => this.paintStroke(strokes));\n }\n\n private paintStroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n for (const st of strokes) this.paintText(st.fill, st);\n let fillAll: PathData | null | undefined;\n const surfaceFill = () => (fillAll === undefined ? (fillAll = this.surface(\"fill\")) : fillAll);\n const dev = this.device();\n const scale = Math.sqrt(Math.abs(dev[0] * dev[3] - dev[1] * dev[2]));\n const rotated = isProjective(dev) || Math.abs(dev[1]) > 1e-6 || Math.abs(dev[2]) > 1e-6;\n for (const st of strokes) {\n // resolveStrokeWidth: under 2.5 device px (axis-aligned), a whole\n // number of device px.\n let weight = st.weight, intWidth = -1;\n if (!rotated && weight > 0 && scale > 0 && weight * scale < 2.5) {\n intWidth = Math.max(1, Math.round(weight * scale));\n weight = intWidth / scale;\n }\n if (this.strokeNative(st, weight, intWidth, dev)) continue;\n for (const shape of this.strokeShapes()) {\n let geom: Geom, interior: Geom | null;\n let plan: StrokePlan = { cap: st.cap, ends: [], dash: st.dash, dashPhase: st.dashOffset };\n if (shape.members) {\n geom = interior = { members: shape.members };\n } else {\n if (!shape.stroke || !shape.stroke.verbs.length) continue;\n const p = strokePlan(st, shape.stroke, weight, intWidth > 0);\n if (!p) continue;\n plan = p;\n geom = { path: p.source ?? shape.stroke };\n interior = shape.alignInterior ? { members: shape.alignInterior } : shape.interior && isClosed(shape.interior) ? { path: shape.interior } : null;\n }\n const bounds = this.bounds(surfaceFill() ?? (\"path\" in geom ? geom.path : null));\n // alignedStrokeBand: outside (1 + a)·w, inside (1 − a)·w, each\n // clipped to its side. A marked stroke is centred: half a head means nothing.\n const a = Math.max(-1, Math.min(1, st.align ?? 0));\n const aligned = a !== 0 && interior !== null && !plan.ends.some((e) => isStrokeMarker(e.cap));\n const halves: [number, \"in\" | \"out\" | \"both\"][] = aligned\n ? [[(1 + a) * weight, \"out\"], [(1 - a) * weight, \"in\"]]\n : [[weight, \"both\"]];\n const snapM = shape.fill ? this.snap(shape.fill, intWidth, dev) : null;\n const parent = snapM ? this.doc.group(this.cur, { transform: snapM }) : this.cur;\n for (const f of st.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n for (const [width, side] of halves) {\n if (width <= 0) continue;\n const stroke = { paint, width, join: st.join as never, cap: plan.cap as never, miter: st.miterLimit, dash: plan.dash, dashPhase: plan.dashPhase };\n if (side === \"both\") this.strokeLeaf(parent, geom, { opacity, stroke, blend: this.blendOf(f) }, plan.ends);\n else this.strokeLeaf(side === \"in\" ? this.clipTo(parent, interior!) : this.clipOutside(parent, interior!), geom, { opacity, stroke }, plan.ends);\n }\n }\n }\n }\n }\n\n /** strokeShapesForSpace: two or more shapes stroke as one figure, so\n * overlaps show no seams: their union outline when every one is closed and\n * whole, else their contours together (a union would close open ones),\n * aligned against the union. Text keeps each shape apart. */\n private strokeShapes(): ShapeOut[] {\n if (this.shapes.length < 2 || this.shapes.some((s) => s.text)) return this.shapes;\n // A boolean result first: the union folds in after its own ops.\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length)).sort((a, b) => (b.members ? 1 : 0) - (a.members ? 1 : 0));\n if (withPaths.length < 2) return this.shapes;\n const members: Member[] = [];\n for (const s of withPaths) {\n if (s.members) s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? \"union\" : m.op }));\n else members.push({ kind: \"path\", path: s.fill!, op: \"union\" });\n }\n if (withPaths.filter((s) => s.members).length > 1) this.missing.add(\"stroke:union-of-booleans\");\n const bounds = withPaths.every((s) => s.bounds) ? withPaths.map((s) => s.bounds!).reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]) : null;\n const open = withPaths.some((s) => !s.members && (s.stroke !== s.fill || s.trimmed || !isClosed(s.fill!)));\n if (!open) return [{ fill: null, stroke: null, interior: null, bounds, members }];\n // A boolean result has no contour of its own to add.\n if (withPaths.some((s) => s.members)) return this.shapes;\n return [{ fill: merge(withPaths.map((s) => s.fill!)), stroke: merge(withPaths.map((s) => s.stroke ?? s.fill!)), interior: null, alignInterior: members, bounds }];\n }\n\n /** A stroke leaf with its plan's ends re-capped (StrokeHandler.strokeBand):\n * what the stroker put past each end masked away, then the end's own cap\n * or marker filled with the stroke's paint, all in one group so the\n * opacity and blend apply once. */\n private strokeLeaf(parent: Node, geom: Geom, props: LeafProps & { stroke: NonNullable<LeafProps[\"stroke\"]> }, ends: PathEnd[]): Node {\n if (!ends.length) return this.leaf(parent, geom, props);\n const half = props.stroke.width / 2;\n // A little past the stroker's own cap, which reaches `half` beyond the end.\n const reach = half * 1.01 + 0.5;\n const capped = props.stroke.cap !== \"butt\";\n const cuts: PathData[] = [], adds: PathData[] = [];\n for (const e of ends) {\n if (isStrokeMarker(e.cap)) {\n // addMarker: the band cut back to where the marker takes over.\n const inset = markerInset(e.cap, e.size, e.weight);\n if (inset > 0 || capped) cuts.push(endBox({ ...e, x: e.x - e.dx * inset, y: e.y - e.dy * inset }, inset + reach, reach));\n adds.push(markerPath(e, e.cap));\n continue;\n }\n if (capped) cuts.push(endBox(e, reach, reach));\n if (e.reached && e.cap !== \"butt\") adds.push(e.cap === \"round\" ? endDisc(e, half) : endBox(e, half, half));\n }\n const g = this.doc.group(parent, { opacity: props.opacity ?? 1, blend: props.blend ?? \"normal\" });\n const inner = { ...props, opacity: 1, blend: \"normal\" as const };\n if (cuts.length) {\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n this.doc.pathNode(m, { path: merge(cuts), fill: BLACK });\n this.leaf(m, geom, inner);\n } else this.leaf(g, geom, inner);\n if (adds.length) this.doc.pathNode(g, { path: merge(adds), fill: props.stroke.paint });\n return g;\n }\n\n // Boolean groups: the outlines drawn in scope (in the space at beginBoolean) and folds them left to right\n // with the op, as one compound node's members.\n private booleans: { op: BooleanOperation; base: Mat | null; members: Member[] }[] = [];\n\n beginBoolean(op: BooleanOperation): void {\n this.booleans.push({ op, base: invert(this.device()), members: [] });\n this.resetSurface();\n }\n\n endBoolean(): void {\n const b = this.booleans.pop();\n this.resetSurface();\n if (!b || !b.members.length) return;\n const outer = this.booleans[this.booleans.length - 1];\n if (!outer) {\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(b.members), members: b.members });\n return;\n }\n // Nested: the result joins the outer fold. Folding the inner members\n // straight in is exact when the outer op distributes over the inner one\n // (a − (b ∪ c) = a − b − c, a ∩ (b ∩ c) = a ∩ b ∩ c, …) or it comes first.\n // The space here is the inner scope's, so this maps its members out.\n const into = this.relative(outer.base);\n const op = BOOLEAN_OP[outer.op];\n const start = !outer.members.length;\n if (!start && !b.members.slice(1).every((m) => m.op === (op === \"cut\" ? \"union\" : op))) this.missing.add(\"boolean:nested\");\n b.members.forEach((m, k) => {\n const own = m.op ?? \"union\";\n const mop = start ? own : k === 0 || op === \"cut\" ? op : own;\n outer.members.push({ kind: \"path\", path: into ? transformPath(m.path!, into) : m.path!, op: mop });\n });\n }\n\n /** inv(base) · device: the current space in a boolean scope's space. */\n private relative(base: Mat | null): Mat | null {\n const m = this.device();\n if (!base || isProjective(m)) return null;\n return mulX(base, m) as Mat;\n }\n\n /** A shape drawn in a boolean scope: its outline as the next member. */\n private collect(shape: ShapeOut) {\n const b = this.booleans[this.booleans.length - 1];\n const path = shape.fill;\n if (!path || !path.verbs.length) return;\n const rel = this.relative(b.base);\n if (!rel) this.missing.add(\"boolean:projective\");\n b.members.push({ kind: \"path\", path: rel ? transformPath(path, rel) : path, op: b.members.length ? BOOLEAN_OP[b.op] : \"union\" });\n }\n\n /** ShapeHandler.cut: the shapes before the last one unioned, minus the last. */\n private cut() {\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length));\n this.resetSurface();\n if (!withPaths.length) return;\n const members: Member[] = [];\n withPaths.forEach((s, k) => {\n const op: MemberOp = k > 0 && k === withPaths.length - 1 ? \"cut\" : \"union\";\n if (!s.members) {\n members.push({ kind: \"path\", path: s.fill!, op });\n return;\n }\n if (k > 0) this.missing.add(\"cut:compound\");\n s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? op : m.op }));\n });\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(members), members });\n }\n\n // Masks: the doc's group mask (its first child is the mask layer). Vector\n // masks clip to the mask's outline, so their paint is opaque here.\n private masks: { vector: boolean; open: boolean; apply: Set<string> | null; after: Node | null }[] = [];\n private get inVectorMask(): boolean {\n const m = this.masks[this.masks.length - 1];\n return !!m && m.open && m.vector;\n }\n\n beginMask(options?: MaskOptions): void {\n const mode = options?.mode ?? \"alpha\";\n const lum = mode === \"luminance\";\n const docMode = options?.inverted ? (lum ? \"invertLuminance\" : \"invertAlpha\") : (lum ? \"luminance\" : \"alpha\");\n const g = this.doc.group(this.cur, { mask: docMode as never });\n // The paints `apply` leaves out land after the masked group.\n const apply = options?.apply ? new Set<string>(Array.isArray(options.apply) ? options.apply : [options.apply]) : null;\n const after = apply ? this.doc.group(this.cur) : null;\n this.stack.push(g, this.doc.group(g));\n this.masks.push({ vector: mode === \"vector\", open: true, apply, after });\n this.resetSurface();\n }\n\n applyMask(): void {\n const m = this.masks[this.masks.length - 1];\n if (!m?.open) return;\n m.open = false;\n this.stack.pop();\n this.resetSurface();\n }\n\n endMask(): void {\n const m = this.masks.pop();\n if (!m) return;\n if (m.open) this.stack.pop();\n this.stack.pop();\n this.resetSurface();\n }\n private clips: { pushed: number; geom: Geom | null }[] = [];\n\n /** A Clip's outline: its shapes unioned, each cut subtracting the shape before it. */\n private clipGeom(clip: Clip): Geom | null {\n const members: Member[] = [];\n for (const op of clip.ops() as any[]) {\n if (op.kind === \"cut\") {\n if (members.length > 1) members[members.length - 1].op = \"cut\";\n continue;\n }\n const p = shapeOf(op)?.fill;\n if (p && p.verbs.length) members.push({ kind: \"path\", path: p, op: \"union\" });\n }\n if (!members.length) return null;\n return members.some((m) => m.op === \"cut\") ? { members } : { path: merge(members.map((m) => m.path!)) };\n }\n\n beginClip(clip: Clip): void {\n const geom = this.clipGeom(clip);\n if (!geom) {\n this.clips.push({ pushed: 0, geom: null });\n return;\n }\n const g = this.clipTo(this.cur, geom);\n // A compound clips as a mask: the content goes after the mask layer.\n if (\"members\" in geom) this.stack.push(g, this.doc.group(g));\n else this.stack.push(g);\n this.clips.push({ pushed: \"members\" in geom ? 2 : 1, geom });\n }\n\n endClip(): void {\n const n = this.clips.pop()?.pushed ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n private cameras: number[] = [];\n\n /** beginCamera: clip to the viewport, then translate·rotate(−heading)·scale(zoom)·translate(−lookAt.x, +lookAt.y). */\n beginCamera(v: { x: number; y: number; width: number; height: number }, lookAt: Vector2, zoom: number, heading: number): void {\n const clipped = this.doc.group(this.cur, { clip: { x: v.x - v.width / 2, y: v.y - v.height / 2, w: v.width, h: v.height, r: 0 } });\n const r = (-heading * Math.PI) / 180, c = Math.cos(r) * zoom, sn = Math.sin(r) * zoom;\n const tx = -lookAt.x, ty = lookAt.y;\n const lens = this.doc.group(clipped, { transform: [c, sn, -sn, c, v.x + c * tx - sn * ty, v.y + sn * tx + c * ty] });\n this.stack.push(clipped, lens);\n this.cameras.push(2);\n }\n\n endCamera(): void {\n const n = this.cameras.pop() ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n override beginEffects(effects: any[], target: \"foreground\" | \"backdrop\", width: number, height: number): void {\n // Foreground effects are already on the node's group (see transform).\n if (target !== \"backdrop\") return;\n for (const e of effects) if (e?.type === \"shader\") this.checkShader(\"effect\", e);\n // Backdrop: a paint-less silhouette carrying the effects; the renderer\n // re-renders what lies beneath it through that shape (Layer::backdrop).\n // With no clip of its own the layer is bounded by the clips around it,\n // the viewport at most.\n let silhouette = this.clips[this.clips.length - 1]?.geom;\n if (!silhouette) {\n const [x, y, w, h] = this.viewportBox();\n silhouette = { path: new PathBuilder().moveTo(x, y).lineTo(x + w, y).lineTo(x + w, y + h).lineTo(x, y + h).close().build() };\n }\n this.leaf(this.cur, silhouette, { effects, effectBox: [-width / 2, -height / 2, width, height], effectTime: this.elapsed() });\n }\n override endEffects(): void {}\n\n private checkShader(scope: \"fill\" | \"effect\", shader: unknown): void {\n const nodeId = this.currentNodeStack[this.currentNodeStack.length - 1];\n for (const issue of shaderParamIssues(scope, shader as Parameters<typeof shaderParamIssues>[1])) {\n this.shaderIssues.push(nodeId === undefined ? issue : { ...issue, nodeId });\n }\n }\n override rasterize(): null { this.missing.add(\"rasterize\"); return null; }\n}\n","// Encodes core's Scene3D into the word stream ms-render3d decodes\n// (crates/render3d/src/scene.rs; format in docs-3d-renderer.md).\n//\n// The encoder stays thin: it writes the descriptors' own values (NaN for an\n// unset number, so the renderer applies three's defaults), parses colours\n// with core's parseColor (gamma-encoded sRGB; the renderer linearizes), and\n// calls core's own helpers where core already owns the answer: camera\n// placement, cylinder radii, rounded boxes and parametric surfaces (both\n// evaluate to buffers here).\n\nimport {\n resolveTexture3D, type Texture3D, type ImageTexture3D, type DataTexture3D, type SurfaceTexture3D,\n cylinderRadii, evaluateParametric, evaluateRoundedBox, parseColor,\n resolveCameraPlacement, resolveShadowOptions3D, segmentsOf,\n type BufferGeometry3D, type CameraData3D, type Color, type Geometry3D,\n type LightData3D, type Material3D, type Scene3D, type Transform3D,\n} from \"@motionscript/core\";\n\nexport const MAGIC = 0x52334431;\nexport const VERSION = 3;\n\ntype Vec = { x: number; y: number; z: number };\ntype VecIn = Vec | readonly number[] | number | undefined;\n\nfunction vec(v: VecIn): Vec {\n if (v === undefined) return { x: 0, y: 0, z: 0 };\n if (typeof v === \"number\") return { x: v, y: v, z: v };\n if (Array.isArray(v)) return { x: v[0] ?? 0, y: v[1] ?? 0, z: v[2] ?? 0 };\n const o = v as Vec;\n return { x: o.x ?? 0, y: o.y ?? 0, z: o.z ?? 0 };\n}\n\nconst EULER: Record<string, number> = { XYZ: 0, YXZ: 1, ZXY: 2, ZYX: 3, YZX: 4, XZY: 5 };\nconst TONE: Record<string, number> = { none: 0, linear: 1, reinhard: 2, cineon: 3, aces: 4, agx: 5, neutral: 6 };\nconst GEOMETRY: Record<string, number> = {\n box: 0, sphere: 1, plane: 2, cylinder: 3, cone: 4, torus: 5, torusKnot: 6, circle: 7, ring: 8, buffer: 9,\n capsule: 10, polyhedron: 11, lathe: 12, tube: 13, edges: 14, wireframe: 15,\n};\nconst POLYHEDRON: Record<string, number> = { tetrahedron: 0, octahedron: 1, icosahedron: 2, dodecahedron: 3 };\nconst MATERIAL: Record<string, number> = {\n basic: 0, standard: 1, physical: 2, lambert: 3, phong: 4, normal: 5, points: 6, lineBasic: 7,\n lineDashed: 8, sprite: 9, shadow: 10, toon: 11, matcap: 12, depth: 13, shader: 14,\n};\nconst LIGHT: Record<string, number> = { ambient: 0, hemisphere: 1, directional: 2, point: 3, spot: 4, area: 5 };\nconst FACES: Record<string, number> = { front: 0, back: 1, both: 2 };\nconst BLEND: Record<string, number> = { normal: 0, additive: 1, subtractive: 2, multiply: 3, none: 4 };\nconst MAP_KEYS = [\"map\", \"gradientMap\", \"alphaMap\", \"aoMap\", \"normalMap\", \"roughnessMap\", \"metalnessMap\", \"emissionMap\", \"envMap\", \"lightMap\", \"displacementMap\"];\n\n/** What a scene recorded that this encoder or the renderer does not draw yet. */\nexport interface EncodeReport {\n unsupported: Set<string>;\n}\n\n/** A texture the host must provide to the renderer under `id`. */\nexport interface TextureRequest {\n id: number;\n srgb: boolean;\n texture: ImageTexture3D | DataTexture3D | SurfaceTexture3D;\n}\n\n/**\n * Texture identity across frames: an image by `src`, data and surfaces by descriptor object. The host uploads\n * every request in `pending` (pixels for images and data, the 2D raster for\n * surfaces) and clears it.\n */\nexport class TextureTable {\n private byKey = new Map<unknown, Map<boolean, number>>();\n private next = 1;\n readonly pending: TextureRequest[] = [];\n readonly all = new Map<number, TextureRequest>();\n\n id(texture: Texture3D, srgb: boolean): number {\n const resolved = resolveTexture3D(texture);\n const key = \"src\" in resolved ? resolved.src : resolved;\n let slot = this.byKey.get(key);\n if (!slot) this.byKey.set(key, (slot = new Map()));\n let id = slot.get(srgb);\n if (id === undefined) {\n id = this.next++;\n slot.set(srgb, id);\n const req = { id, srgb, texture: resolved };\n this.pending.push(req);\n this.all.set(id, req);\n }\n return id;\n }\n}\n\nclass Writer {\n private buf = new ArrayBuffer(1 << 16);\n private u32 = new Uint32Array(this.buf);\n private f32 = new Float32Array(this.buf);\n n = 0;\n\n private room(k: number): void {\n if (this.n + k <= this.u32.length) return;\n let size = this.buf.byteLength * 2;\n while (size / 4 < this.n + k) size *= 2;\n const next = new ArrayBuffer(size);\n new Uint32Array(next).set(this.u32.subarray(0, this.n));\n this.buf = next;\n this.u32 = new Uint32Array(next);\n this.f32 = new Float32Array(next);\n }\n u(v: number): void { this.room(1); this.u32[this.n++] = v >>> 0; }\n f(v: number | undefined): void { this.room(1); this.f32[this.n++] = v === undefined ? NaN : v; }\n v3(v: Vec): void { this.f(v.x); this.f(v.y); this.f(v.z); }\n floats(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.f32[this.n++] = a[i];\n }\n words(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.u32[this.n++] = a[i] >>> 0;\n }\n color(c: Color | undefined): void {\n if (c === undefined) { this.u(0); this.f(0); this.f(0); this.f(0); this.f(0); return; }\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n this.u(1); this.f(r); this.f(g); this.f(b); this.f(a ?? 1);\n }\n segments(s: number | readonly number[] | undefined): void {\n if (s === undefined) { this.u(0); this.f(NaN); this.f(NaN); this.f(NaN); return; }\n if (typeof s === \"number\") { this.u(1); this.f(s); this.f(NaN); this.f(NaN); return; }\n this.u(2); this.f(s[0]); this.f(s[1]); this.f(s[2]);\n }\n result(): Uint32Array { return this.u32.slice(0, this.n); }\n /** Words `from..n` as a map key. */\n key(from: number): string { return Array.prototype.join.call(this.u32.subarray(from, this.n), \",\"); }\n copy(from: number): Uint32Array { return this.u32.slice(from, this.n); }\n same(from: number, words: Uint32Array): boolean {\n if (this.n - from !== words.length) return false;\n const u = this.u32;\n for (let i = 0; i < words.length; i++) if (u[from + i] !== words[i]) return false;\n return true;\n }\n set(i: number, v: number): void { this.u32[i] = v >>> 0; }\n append(other: Writer): void {\n this.room(other.n);\n this.u32.set(other.u32.subarray(0, other.n), this.n);\n this.n += other.n;\n }\n}\n\nfunction writeTransform(w: Writer, t: Transform3D | undefined): void {\n if (!t) { w.u(0); return; }\n let flags = 0;\n if (t.position !== undefined) flags |= 1;\n if (t.rotation !== undefined) flags |= 2;\n if (t.quaternion !== undefined) flags |= 4;\n if (t.scale !== undefined) flags |= 8;\n if (t.lookAt !== undefined) flags |= 16;\n if (t.visible === false) flags |= 32;\n if (t.shadow !== undefined) flags |= 64;\n if (t.renderOrder !== undefined) flags |= 128;\n w.u(flags);\n if (flags & 1) w.v3(vec(t.position as VecIn));\n if (flags & 2) {\n w.v3(vec(t.rotation as VecIn));\n w.u(EULER[(t.rotation as { order?: string }).order ?? \"XYZ\"] ?? 0);\n }\n if (flags & 4) { const q = t.quaternion!; w.f(q.x); w.f(q.y); w.f(q.z); w.f(q.w); }\n if (flags & 8) w.v3(vec(t.scale as VecIn));\n if (flags & 16) w.v3(vec(t.lookAt as VecIn));\n if (flags & 64) {\n const s = t.shadow;\n w.u(s === false ? 0 : s === true ? 1 : s === \"cast\" ? 2 : s === \"receive\" ? 3 : 4);\n }\n if (flags & 128) w.f(t.renderOrder);\n}\n\nfunction writeBuffer(w: Writer, b: BufferGeometry3D): void {\n const n = Math.floor(b.position.length / 3);\n const flags = (b.normal ? 1 : 0) | (b.uv ? 2 : 0) | (b.color ? 4 : 0) | (b.index ? 8 : 0)\n | (b.computeNormals ? 16 : 0);\n w.u(GEOMETRY.buffer);\n w.u(flags);\n w.u(n);\n w.u(b.index?.length ?? 0);\n w.floats(b.position);\n if (b.normal) w.floats(b.normal);\n if (b.uv) w.floats(b.uv);\n if (b.color) w.floats(b.color);\n if (b.index) w.words(b.index);\n}\n\nfunction writeGeometry(w: Writer, g: Geometry3D, report: EncodeReport): void {\n switch (g.type) {\n case \"box\": {\n if ((g.cornerRadius ?? 0) > 0) {\n const [sx, sy, sz] = segmentsOf(g.segments, [1, 1, 1]);\n writeBuffer(w, evaluateRoundedBox({\n width: g.width ?? 1, height: g.height ?? 1, depth: g.depth ?? 1,\n radius: g.cornerRadius!, segments: [sx, sy, sz],\n }));\n return;\n }\n w.u(GEOMETRY.box); w.f(g.width); w.f(g.height); w.f(g.depth); w.segments(g.segments);\n return;\n }\n case \"sphere\":\n w.u(GEOMETRY.sphere); w.f(g.radius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep); w.f(g.startLatitude); w.f(g.latitudeSweep);\n return;\n case \"plane\":\n w.u(GEOMETRY.plane); w.f(g.width); w.f(g.height); w.segments(g.segments);\n return;\n case \"cylinder\": {\n const [top, bottom] = cylinderRadii(g.radius);\n w.u(GEOMETRY.cylinder); w.f(top); w.f(bottom); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n }\n case \"cone\":\n w.u(GEOMETRY.cone); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torus\":\n w.u(GEOMETRY.torus); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torusKnot\":\n w.u(GEOMETRY.torusKnot); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.windings?.[0]); w.f(g.windings?.[1]);\n return;\n case \"circle\":\n w.u(GEOMETRY.circle); w.f(g.radius); w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"ring\":\n w.u(GEOMETRY.ring); w.f(g.radius); w.f(g.innerRadius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"buffer\":\n writeBuffer(w, g);\n return;\n case \"parametric\":\n writeBuffer(w, evaluateParametric(g));\n return;\n case \"capsule\":\n w.u(GEOMETRY.capsule); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n return;\n case \"polyhedron\": {\n // A polyhedron's segments are a detail count where 0 (unset) is\n // the plain solid.\n w.u(GEOMETRY.polyhedron); w.u(POLYHEDRON[g.shape ?? \"icosahedron\"] ?? 2); w.f(g.radius);\n w.f(g.segments === undefined ? 0 : segmentsOf(g.segments, [1])[0]);\n return;\n }\n case \"lathe\":\n w.u(GEOMETRY.lathe); w.u(g.points.length);\n for (const p of g.points) { const v = vec(p as VecIn); w.f(v.x); w.f(v.y); }\n w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"tube\":\n w.u(GEOMETRY.tube); w.u(g.points.length);\n for (const p of g.points) w.v3(vec(p as VecIn));\n w.u(g.closed ? 1 : 0); w.f(g.radius); w.segments(g.segments);\n return;\n case \"edges\":\n w.u(GEOMETRY.edges); w.f(g.thresholdAngle);\n writeGeometry(w, g.source, report);\n return;\n case \"wireframe\":\n w.u(GEOMETRY.wireframe);\n writeGeometry(w, g.source, report);\n return;\n default:\n report.unsupported.add(`geometry:${g.type}`);\n w.u(255);\n }\n}\n\n/** Fixed: keyed by its own words. Rounded: a box evaluated to a buffer, keyed\n * by its parameters. Slot: buffer data, keyed by where it is drawn. */\nfunction classify(g: Geometry3D): \"fixed\" | \"rounded\" | \"slot\" {\n switch (g.type) {\n case \"buffer\": case \"parametric\": return \"slot\";\n case \"box\": return (g.cornerRadius ?? 0) > 0 ? \"rounded\" : \"fixed\";\n case \"edges\": case \"wireframe\": return classify(g.source) === \"fixed\" ? \"fixed\" : \"slot\";\n default: return \"fixed\";\n }\n}\n\n/** A geometry's structure without its data, as the reconciler's `geometrySignature`. */\nfunction signature(g: Geometry3D): string {\n const bag = g as unknown as Record<string, unknown>;\n let out: string = g.type;\n for (const k of Object.keys(bag).sort()) {\n const v = bag[k];\n if (k === \"type\" || k === \"revision\" || k === \"staticData\" || v === undefined || typeof v === \"function\") continue;\n if (k === \"source\") out += `|source=${signature(v as Geometry3D)}`;\n else if (ArrayBuffer.isView(v) || (Array.isArray(v) && v.length > 3)) out += `|${k}#${(v as ArrayLike<number>).length}`;\n else out += `|${k}=${typeof v === \"object\" ? JSON.stringify(v) : String(v)}`;\n }\n return out;\n}\n\ninterface Slot {\n id: number;\n revision: number | undefined;\n /** A buffer's arrays, compared by identity when a revision or `staticData` vouches for them. */\n arrays: readonly unknown[];\n words: Uint32Array;\n}\n\nfunction arraysOf(g: Geometry3D): readonly unknown[] {\n if (g.type !== \"buffer\") return [];\n return [g.position, g.normal, g.uv, g.color, g.index, g.computeNormals];\n}\n\n/**\n * Geometry the renderer keeps across frames (stream v3). A geometry is sent\n * once as a def (id and geometry) and drawn by reference (geometry type 16).\n * An id's content never changes: new content takes a new id, and an id no\n * draw refers to in a frame is dropped, here and by the renderer, at that\n * frame. One table per renderer scene, beside its {@link TextureTable}.\n *\n * Fixed-shape geometry is keyed by its words. A buffer or parametric surface\n * is keyed by its slot, as the reconciler keys a drawable\n * (`<node>|<kind>|<signature>|<nth>`): an unchanged `revision` (and, for a\n * buffer, the same arrays) reuses the def without evaluating or copying it;\n * otherwise its fresh words are compared with the slot's last ones.\n */\nexport class GeometryTable {\n private next = 1;\n private byKey = new Map<string, number>();\n private slots = new Map<string, Slot>();\n private live = new Set<number>();\n private nth = new Map<string, number>();\n private defs = new Writer();\n private count = 0;\n\n /** Starts a frame. */\n begin(): void {\n this.live.clear();\n this.nth.clear();\n this.defs.n = 0;\n this.count = 0;\n }\n\n /** Ends a frame: writes its new defs and forgets what it didn't draw. */\n end(w: Writer): void {\n w.u(this.count);\n w.append(this.defs);\n for (const [k, id] of this.byKey) if (!this.live.has(id)) this.byKey.delete(k);\n for (const [k, s] of this.slots) if (!this.live.has(s.id)) this.slots.delete(k);\n }\n\n /** The def id for `g`, drawn by an op of `kind` in node scope `scope`. */\n ref(g: Geometry3D, scope: string, kind: string, report: EncodeReport): number {\n const d = this.defs;\n const shape = classify(g);\n if (shape !== \"slot\") {\n let key: string | undefined;\n if (shape === \"rounded\") {\n const b = g as Extract<Geometry3D, { type: \"box\" }>;\n key = `rounded|${b.width}|${b.height}|${b.depth}|${b.cornerRadius}|${JSON.stringify(b.segments)}`;\n const known = this.byKey.get(key);\n if (known !== undefined) return this.use(known);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n key ??= d.key(start + 1);\n const known = this.byKey.get(key);\n if (known !== undefined) {\n d.n = start;\n return this.use(known);\n }\n const id = this.add(start);\n this.byKey.set(key, id);\n return id;\n }\n const base = `${scope}|${kind}|${signature(g)}`;\n const n = this.nth.get(base) ?? 0;\n this.nth.set(base, n + 1);\n const key = `${base}|${n}`;\n const slot = this.slots.get(key);\n const revision = (g as { revision?: number }).revision;\n const arrays = arraysOf(g);\n if (slot && slot.revision === revision) {\n if (g.type === \"parametric\" && revision !== undefined) return this.use(slot.id);\n if (g.type === \"buffer\" && (revision !== undefined || g.staticData === true)\n && arrays.every((a, i) => a === slot.arrays[i])) return this.use(slot.id);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n if (slot && d.same(start + 1, slot.words)) {\n d.n = start;\n slot.revision = revision;\n slot.arrays = arrays;\n return this.use(slot.id);\n }\n const id = this.add(start);\n this.slots.set(key, { id, revision, arrays, words: d.copy(start + 1) });\n return id;\n }\n\n private use(id: number): number {\n this.live.add(id);\n return id;\n }\n\n /** The def written at `start` (its id word first) becomes a new id. */\n private add(start: number): number {\n const id = this.next++;\n this.defs.set(start, id);\n this.count++;\n return this.use(id);\n }\n}\n\nconst WRAP: Record<string, number> = { clamp: 0, repeat: 1, mirror: 2 };\n\nfunction pair(v: unknown, d: number): [number, number] {\n if (v === undefined) return [d, d];\n if (Array.isArray(v)) return [v[0] ?? d, v[1] ?? d];\n const o = v as { x?: number; y?: number };\n return [o.x ?? d, o.y ?? d];\n}\n\n/** The map slot: id, three's `Texture.matrix` (setUvTransform), sampler flags. */\nfunction writeMap(w: Writer, map: Texture3D | undefined, textures: TextureTable | undefined, report: EncodeReport): void {\n if (map === undefined || !textures) {\n if (map !== undefined) report.unsupported.add(\"texture:map\");\n w.u(0); w.u(0); w.f(1); w.f(0); w.f(0); w.f(0); w.f(1); w.f(0); w.u(0);\n return;\n }\n const t = resolveTexture3D(map);\n const srgb = t.colorSpace !== \"linear\";\n w.u(1);\n w.u(textures.id(map, srgb));\n const [tx, ty] = pair(t.offset, 0);\n const [sx, sy] = pair(t.repeat, 1);\n const [cx, cy] = pair(t.center, 0);\n const r = ((t.rotation ?? 0) * Math.PI) / 180;\n const c = Math.cos(r), s = Math.sin(r);\n w.f(sx * c); w.f(sx * s); w.f(-sx * (c * cx + s * cy) + cx + tx);\n w.f(-sy * s); w.f(sy * c); w.f(-sy * (-s * cx + c * cy) + cy + ty);\n // Images and surfaces are DataTextures with flipY (true unless stated);\n // plain data textures keep three's DataTexture default, false.\n const flip = t.flipY ?? !(\"data\" in t);\n w.u((WRAP[t.wrapS ?? \"clamp\"] ?? 0) | ((WRAP[t.wrapT ?? \"clamp\"] ?? 0) << 2) | (flip ? 16 : 0)\n | (t.magFilter === \"nearest\" ? 32 : 0) | (t.minFilter === \"nearest\" ? 64 : 0));\n}\n\nfunction writeMaterial(w: Writer, m: Material3D, report: EncodeReport, textures?: TextureTable): void {\n const bag = m as unknown as Record<string, unknown>;\n w.u(MATERIAL[m.type] ?? 1);\n if (![\"basic\", \"standard\", \"physical\", \"lambert\", \"phong\", \"normal\", \"lineBasic\", \"lineDashed\", \"sprite\", \"shadow\", \"points\", \"toon\", \"depth\"].includes(m.type)) {\n report.unsupported.add(`material:${m.type}`);\n }\n for (const k of MAP_KEYS) if (k !== \"map\" && k !== \"gradientMap\" && bag[k] !== undefined) report.unsupported.add(`texture:${k}`);\n if (bag.gradientMap !== undefined && m.type !== \"toon\") report.unsupported.add(\"texture:gradientMap\");\n // Physical draws as standard plus clearcoat and transmission; the other lobes are unsupported.\n for (const k of [\"sheen\", \"iridescence\", \"anisotropy\", \"dispersion\"]) {\n if (typeof bag[k] === \"number\" && (bag[k] as number) > 0) report.unsupported.add(`physical:${k}`);\n }\n w.color(bag.color as Color | undefined);\n w.f(bag.opacity as number | undefined);\n w.f(bag.roughness as number | undefined);\n w.f(bag.metalness as number | undefined);\n w.color(bag.emission as Color | undefined);\n w.f(bag.emissionStrength as number | undefined);\n w.f(bag.envMapIntensity as number | undefined);\n let flags = 0;\n if (bag.transparent === true) flags |= 1;\n if (bag.wireframe === true) flags |= 4;\n if (bag.vertexColors === true) flags |= 8;\n if (bag.shading === \"flat\") flags |= 16;\n if (bag.toneMapped === false) flags |= 32;\n if (bag.visible === false) flags |= 64;\n if (bag.depthTest === false) flags |= 128;\n if (bag.depthWrite !== undefined) flags |= 256 | (bag.depthWrite ? 512 : 0);\n if (bag.sizeAttenuation === false) flags |= 1024;\n w.u(flags);\n w.u(FACES[(bag.faces as string) ?? \"front\"] ?? 0);\n w.u(BLEND[(bag.blend as string) ?? \"normal\"] ?? 0);\n w.f(bag.alphaTest as number | undefined);\n w.f(bag.size as number | undefined);\n w.color(bag.specular as Color | undefined);\n w.f(bag.shininess as number | undefined);\n writeMap(w, bag.map as Texture3D | undefined, textures, report);\n // v2: physical layers, dashes, the toon gradient.\n w.f(bag.clearcoat as number | undefined);\n w.f(bag.clearcoatRoughness as number | undefined);\n w.f(bag.transmission as number | undefined);\n w.f(bag.thickness as number | undefined);\n w.f(bag.ior as number | undefined);\n w.f(bag.attenuationDistance as number | undefined);\n w.color(bag.attenuationColor as Color | undefined);\n w.f(bag.dashSize as number | undefined);\n w.f(bag.gapSize as number | undefined);\n w.f(bag.scale as number | undefined);\n writeMap(w, m.type === \"toon\" ? bag.gradientMap as Texture3D | undefined : undefined, textures, report);\n}\n\nfunction writeLight(w: Writer, l: LightData3D, t: Transform3D | undefined): void {\n const bag = l as unknown as Record<string, unknown>;\n w.u(LIGHT[l.type] ?? 0);\n w.color(bag.color as Color | undefined);\n w.f(l.intensity);\n w.color(bag.sky as Color | undefined);\n w.color(bag.ground as Color | undefined);\n w.f(bag.distance as number | undefined);\n w.f(bag.decay as number | undefined);\n w.f(bag.angle as number | undefined);\n w.f(bag.penumbra as number | undefined);\n const target = bag.target as VecIn;\n w.u(target === undefined ? 0 : 1);\n w.v3(vec(target));\n const declared = bag.shadow as Parameters<typeof resolveShadowOptions3D>[0];\n const options = declared === undefined ? null : resolveShadowOptions3D(declared);\n w.u(options ? 1 : 0);\n w.f(options?.softness);\n w.f(options?.extent);\n w.f(bag.width as number | undefined);\n w.f(bag.height as number | undefined);\n writeTransform(w, t);\n}\n\nfunction writeCamera(w: Writer, c: CameraData3D): void {\n w.u(c.type === \"orthographic\" ? 1 : 0);\n const placement = resolveCameraPlacement(c);\n writeTransform(w, { ...c, position: placement.position, lookAt: placement.lookAt });\n w.f(c.type === \"perspective\" ? c.fov : undefined);\n w.f(c.zoom);\n w.f(c.type === \"orthographic\" ? c.frustumHeight : undefined);\n w.f(c.near);\n w.f(c.far);\n w.f(c.distance);\n}\n\n/**\n * Encodes a recorded scene. `report` collects what will not draw. With\n * `geometries`, geometry goes by reference to defs the renderer keeps (pass\n * the same table every frame of one renderer scene); without, inline.\n */\nexport function encodeScene3D(\n scene: Scene3D,\n report: EncodeReport = { unsupported: new Set() },\n textures?: TextureTable,\n geometries?: GeometryTable,\n): Uint32Array {\n const w = new Writer();\n geometries?.begin();\n // The node scopes the ops sit in (core puts the node id on a push's `key`).\n const scopes: string[] = [\"\"];\n const geometry = (g: Geometry3D, kind: string) => {\n if (!geometries) return writeGeometry(w, g, report);\n w.u(16);\n w.u(geometries.ref(g, scopes[scopes.length - 1], kind, report));\n };\n w.u(MAGIC);\n w.u(VERSION);\n\n const tone = scene.toneSettings();\n w.u(TONE[tone?.mapping ?? \"aces\"] ?? 4);\n w.f(tone?.exposure);\n const shadows = scene.shadowSettings();\n w.u(shadows?.enabled === true ? 1 : 0);\n w.u(shadows?.quality === \"low\" ? 0 : shadows?.quality === \"high\" ? 2 : 1);\n const fog = scene.fogDescriptor();\n w.u(!fog ? 0 : fog.density !== undefined ? 2 : 1);\n w.color(fog?.color);\n w.f(fog?.near);\n w.f(fog?.far);\n w.f(fog?.density);\n const env = scene.environmentDescriptor();\n w.u(env?.preset === \"studio\" ? 1 : 0);\n w.f(env?.intensity);\n w.u(env?.background ? 1 : 0);\n w.f(env?.blur);\n if (scene.postEffects().length > 0) report.unsupported.add(\"post\");\n\n const ops = scene.ops();\n w.u(ops.length);\n for (const op of ops) {\n switch (op.kind) {\n case \"push\": {\n const key = (op.transform as { key?: unknown } | undefined)?.key;\n scopes.push(key === undefined ? `${scopes[scopes.length - 1]}/${scopes.length}` : String(key));\n w.u(1); writeTransform(w, op.transform);\n break;\n }\n case \"pop\": if (scopes.length > 1) scopes.pop(); w.u(2); break;\n case \"light\":\n w.u(3); writeLight(w, op.light, op.transform);\n break;\n case \"camera\": w.u(4); writeCamera(w, op.camera); break;\n case \"mesh\": {\n w.u(5);\n geometry(op.geometry, op.kind);\n const list = Array.isArray(op.material) ? (op.material as readonly Material3D[]) : [op.material as Material3D];\n w.u(Array.isArray(op.material) ? list.length : 1);\n for (const m of list) writeMaterial(w, m, report, textures);\n writeTransform(w, op.transform);\n break;\n }\n case \"instances\": {\n w.u(6);\n geometry(op.geometry, op.kind);\n writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n w.u(op.instances.length);\n for (const t of op.instances) writeTransform(w, t);\n const colors = op.colors ?? [];\n w.u(colors.length);\n for (const c of colors) {\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n w.f(r); w.f(g); w.f(b); w.f(a ?? 1);\n }\n break;\n }\n case \"points\":\n w.u(7); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n break;\n case \"line\":\n w.u(8); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n w.u(op.mode === \"segments\" ? 1 : op.mode === \"loop\" ? 2 : 0);\n writeTransform(w, op.transform);\n break;\n case \"sprite\":\n w.u(9); writeMaterial(w, op.material, report, textures); writeTransform(w, op.transform);\n break;\n case \"model\":\n report.unsupported.add(\"model\");\n w.u(10); writeTransform(w, op.transform);\n break;\n }\n }\n if (geometries) geometries.end(w);\n else w.u(0);\n return w.result();\n}\n","// Writer for the delta protocol (crates/renderer/src/protocol.rs). Words go\n// straight into the renderer's buffer inside WASM linear memory: no\n// intermediate JS array, one `apply` call per flush.\n\nexport const OP = {\n CREATE: 1,\n DESTROY: 2,\n CHILDREN: 3,\n TRANSFORM: 4,\n SIZE: 5,\n RADII: 6,\n FILL: 7,\n STROKE: 8,\n SHADOWS: 9,\n OPACITY: 10,\n BLEND: 11,\n CLIP: 12,\n FILTER: 13,\n PATH: 14,\n MEMBERS: 15,\n MASK: 16,\n TEXT: 17,\n EFFECTS: 18,\n TRANSFORM3: 19,\n DEF_PAINT: 20,\n DEF_PATH: 21,\n DEF_DASH: 22,\n FREE_PATH: 24,\n ROOT: 30,\n VIEWPORT: 31,\n} as const;\n\nexport const NONE = 0xffffffff;\n\ninterface DeltaSink {\n delta_buffer(minWords: number): number;\n delta_capacity(): number;\n apply(words: number): void;\n}\n\nexport class DeltaWriter {\n private u32!: Uint32Array;\n private f32!: Float32Array;\n private pos = 0;\n private cap = 0;\n /** Words written since the last `takeCount`. */\n written = 0;\n\n constructor(private readonly sink: DeltaSink, private readonly memory: WebAssembly.Memory) {\n this.refresh(0);\n }\n\n private refresh(minWords: number) {\n const ptr = this.sink.delta_buffer(minWords);\n this.cap = this.sink.delta_capacity();\n this.u32 = new Uint32Array(this.memory.buffer, ptr, this.cap);\n this.f32 = new Float32Array(this.memory.buffer, ptr, this.cap);\n }\n\n /** Reserve room for a record of `n` words. */\n begin(n: number) {\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n if (this.pos + n > this.cap) {\n this.flush();\n if (n > this.cap) this.refresh(n);\n }\n }\n\n u(v: number) {\n this.u32[this.pos++] = v >>> 0;\n }\n\n f(v: number) {\n this.f32[this.pos++] = v;\n }\n\n flush() {\n if (this.pos > 0) {\n this.written += this.pos;\n this.sink.apply(this.pos);\n this.pos = 0;\n }\n // `apply` may grow WASM memory, which detaches our views.\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n }\n\n takeCount() {\n const n = this.written;\n this.written = 0;\n return n;\n }\n}\n","// The generic packer: a port names its pass's parameters, and this lays them\n// out, encodes them and writes them, by name. scripts/gen-effect-params.mjs\n// generates the matching WGSL accessors (`param_<name>()`) from the same\n// layout, so the TS and WGSL sides never agree by position.\nimport { describeEffect, resolveEffectAxis, resolveEffectColor, type EffectParamDescriptor } from \"@motionscript/core\";\nimport type { EffectPort, Packed } from \"./_port\";\n\n/** Floats a pass can take (`EffectU.p` in _header.wgsl). */\nexport const MAX_PARAMS = 64;\n\nexport type ScalarType = \"f32\" | \"vec2f\" | \"vec3f\" | \"vec4f\";\n/** A WGSL-side type: a scalar/vector, or a fixed-length array of them. */\nexport type FieldType = ScalarType | { array: number; of: ScalarType };\n\n/**\n * One parameter of a pass.\n *\n * `\"param\"` is the core spec's parameter of the same name, encoded by its kind\n * (a number as is, a colour as straight RGBA, a point or axis as a vec2, a\n * boolean as 0/1, an enum as its index in the spec's options). A derived field\n * computes its value and names the spec parameters it reads in `uses`.\n */\nexport type Field<E, C> =\n | \"param\"\n | { type: FieldType; uses?: readonly string[]; value(effect: E, ctx: C): number | readonly number[] };\n\nexport interface PortSpec<E, C> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n surface: \"shader\" | \"filter\";\n backdropOnly?: boolean;\n /** The pass's parameters, in layout order. */\n params: Record<string, Field<E, C>>;\n /** Spec parameters read on the host side only (a no-op check, `reach`, `blur`, an atlas). */\n uses?: readonly string[];\n /** Per-effect work shared by the fields and `extras`, or null for a no-op. Defaults to `{}`. */\n prepare?(effect: E): C | null;\n /** Everything a pass takes besides its parameters. */\n extras?(effect: E, ctx: C): Omit<Packed, \"params\">;\n cases(): object[];\n}\n\nexport interface LaidOutField {\n name: string;\n type: FieldType;\n /** Offset into the pass's floats. */\n offset: number;\n floats: number;\n}\n\nconst WIDTH: Record<ScalarType, number> = { f32: 1, vec2f: 2, vec3f: 3, vec4f: 4 };\n\nexport const fieldFloats = (type: FieldType) => (typeof type === \"string\" ? WIDTH[type] : type.array * WIDTH[type.of]);\n\nconst KIND_TYPE: Partial<Record<EffectParamDescriptor[\"kind\"], ScalarType>> = {\n number: \"f32\",\n boolean: \"f32\",\n enum: \"f32\",\n color: \"vec4f\",\n vec2: \"vec2f\",\n axis: \"vec2f\",\n};\n\nfunction encode(p: EffectParamDescriptor, value: unknown): number | readonly number[] {\n switch (p.kind) {\n case \"number\": return value as number;\n case \"boolean\": return value ? 1 : 0;\n case \"enum\": return Math.max(0, p.options!.indexOf(value as string | number));\n case \"color\": return resolveEffectColor(value as Parameters<typeof resolveEffectColor>[0]);\n case \"vec2\": { const v = value as { x: number; y: number }; return [v.x, v.y]; }\n case \"axis\": { const v = resolveEffectAxis(value as Parameters<typeof resolveEffectAxis>[0]); return [v.x, v.y]; }\n default: throw new Error(`effect param \"${p.name}\" (${p.kind}) has no default encoding; give it a value()`);\n }\n}\n\n/** The spec parameter a `\"param\"` field names, or a thrown error naming what is wrong. */\nfunction specParam(type: string, name: string): EffectParamDescriptor {\n const p = describeEffect(type)?.params.find((q) => q.name === name);\n if (!p) throw new Error(`effect \"${type}\": \"${name}\" is not a parameter of its core spec`);\n if (!KIND_TYPE[p.kind]) throw new Error(`effect \"${type}\": \"${name}\" (${p.kind}) has no default encoding`);\n return p;\n}\n\n/** The pass's parameters with their WGSL types and offsets. Throws past {@link MAX_PARAMS}. */\nexport function layout(spec: Pick<PortSpec<any, any>, \"type\" | \"params\">): LaidOutField[] {\n let offset = 0;\n const out = Object.entries(spec.params).map(([name, field]) => {\n const type = field === \"param\" ? KIND_TYPE[specParam(spec.type, name).kind]! : field.type;\n const floats = fieldFloats(type);\n const f = { name, type, offset, floats };\n offset += floats;\n return f;\n });\n if (offset > MAX_PARAMS) throw new Error(`effect \"${spec.type}\" lays out ${offset} params; a pass takes ${MAX_PARAMS}`);\n return out;\n}\n\n/** An {@link EffectPort} whose `pack` writes `spec.params` by name. */\nexport function definePort<E, C = Record<string, never>>(spec: PortSpec<E, C>): EffectPort<E> & { spec: PortSpec<E, C> } {\n const fields = layout(spec);\n const total = fields.reduce((n, f) => n + f.floats, 0);\n const encoders = fields.map((f) => {\n const field = spec.params[f.name];\n if (field !== \"param\") return field.value;\n const p = specParam(spec.type, f.name);\n return (e: E) => encode(p, (e as Record<string, unknown>)[f.name]);\n });\n return {\n type: spec.type,\n surface: spec.surface,\n backdropOnly: spec.backdropOnly,\n spec,\n cases: spec.cases,\n pack(effect) {\n const ctx = spec.prepare ? spec.prepare(effect) : ({} as C);\n if (ctx === null) return null;\n const params = new Array<number>(total).fill(0);\n fields.forEach((f, i) => {\n const v = encoders[i](effect, ctx);\n const n = typeof v === \"number\" ? 1 : v.length;\n if (n > f.floats) throw new Error(`effect \"${spec.type}\": \"${f.name}\" is ${n} floats, laid out as ${f.floats}`);\n if (typeof v === \"number\") params[f.offset] = v;\n else for (let k = 0; k < n; k++) params[f.offset + k] = v[k];\n });\n return { params, ...(spec.extras ? spec.extras(effect, ctx) : {}) };\n },\n };\n}\n","import { definePort } from \"./_pack.ts\";\n\n// Scale alpha by `amount` (clamped to 0-1).\nexport default definePort<{ type: \"alpha\"; amount: number }>({\n type: \"alpha\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, Math.max(0, Math.min(1, e.amount)), 0] },\n },\n cases: () => [],\n});\n","import { Effects, resolveAsciiCharset, type AsciiEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The atlas is baked with the 2D canvas, in a face the page has loaded into\n// document.fonts. The module neither fetches faces nor awaits at top level: a\n// published module that did would request URLs from the host's origin, and an\n// IIFE bundle of it would not build.\nconst FALLBACK_FAMILY = \"Inter\";\nconst available = (family: string) => typeof document !== \"undefined\" && document.fonts.check(`12px \"${family}\"`);\n\n// glyph-atlas.ts: cell = clamp(round(max(8, size * 2)), 4, 64); at most 256 glyphs.\nconst bakedCell = (size: number) => Math.max(4, Math.min(64, Math.round(Math.max(8, size * 2))));\n\n// Supersampling factor for the bake. 1 draws at the atlas size; larger values were tried\n// (unsnapped baseline, box-filtered) and rendered the glyphs too thin.\nconst SS = 1;\n\nfunction bake(charset: string, family: string, cell: number) {\n const glyphs = [...charset].slice(0, 256);\n const big = cell * SS;\n const canvas = new OffscreenCanvas(big * glyphs.length, big);\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true })!;\n ctx.fillStyle = \"#000\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#fff\";\n ctx.font = `${cell * 0.8 * SS}px \"${family}\"`;\n ctx.textBaseline = \"alphabetic\";\n ctx.textAlign = \"left\";\n ctx.fontKerning = \"none\";\n glyphs.forEach((g, i) => {\n const advance = ctx.measureText(g).width;\n ctx.fillText(g, i * big + (big - advance) / 2, big * 0.78);\n });\n const src = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n const width = cell * glyphs.length;\n const pixels = new Uint8ClampedArray(width * cell * 4);\n for (let y = 0; y < cell; y++) {\n for (let x = 0; x < width; x++) {\n let sum = 0;\n for (let dy = 0; dy < SS; dy++) for (let dx = 0; dx < SS; dx++) sum += src[((y * SS + dy) * canvas.width + x * SS + dx) * 4];\n const v = sum / (SS * SS);\n const o = (y * width + x) * 4;\n pixels[o] = pixels[o + 1] = pixels[o + 2] = v;\n pixels[o + 3] = 255;\n }\n }\n return { glyphs: glyphs.length, pixels, width };\n}\n\nexport default definePort<AsciiEffect, { family: string; cell: number; charset: string; atlas: ReturnType<typeof bake> }>({\n type: \"ascii\",\n surface: \"shader\",\n params: {\n size: \"param\",\n glyphs: { type: \"f32\", uses: [\"charset\", \"fontFamily\"], value: (_e, c) => c.atlas.glyphs },\n cell: { type: \"f32\", value: (_e, c) => c.cell },\n ink: \"param\",\n background: \"param\",\n colored: \"param\",\n },\n prepare(e) {\n const charset = resolveAsciiCharset(e.charset);\n if (charset.length === 0) return null;\n // The engine falls back to the first registered family for one it lacks (\"monospace\").\n const family = available(e.fontFamily) ? e.fontFamily : FALLBACK_FAMILY;\n const cell = bakedCell(e.size);\n return { family, cell, charset, atlas: bake(charset, family, cell) };\n },\n extras: (_e, c) => ({\n aux: { key: `ascii|${c.family}|${c.cell}|${c.charset}`, width: c.atlas.width, height: c.cell, pixels: c.atlas.pixels },\n }),\n cases: () => [\n Effects.ascii().list[0],\n Effects.ascii({ size: 10, charset: \"hex\", fontFamily: \"Fira Mono\", ink: \"#6f6\", background: \"#001\", colored: false }).list[0],\n Effects.ascii({ size: 14, colored: true, background: \"transparent\", ink: \"white\" }).list[0],\n Effects.ascii({ size: 8, ink: \"black\", background: \"white\", charset: \" .oO@\" }).list[0],\n ],\n});\n","import { Effects, type BitCrushEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's hardware palettes.\nconst PALETTES: Record<string, readonly string[]> = {\n gameboy: [\"#0f380f\", \"#306230\", \"#8bac0f\", \"#9bbc0f\"],\n cga: [\"#000000\", \"#55ffff\", \"#ff55ff\", \"#ffffff\"],\n nes: [\n \"#000000\", \"#fcfcfc\", \"#bcbcbc\", \"#7c7c7c\",\n \"#0000fc\", \"#0078f8\", \"#3cbcfc\", \"#a4e4fc\",\n \"#b8f818\", \"#00b800\", \"#005800\", \"#f83800\",\n \"#e40058\", \"#f878f8\", \"#f8b800\", \"#503000\",\n ],\n};\n\n// The engine bakes each channel as a 4-decimal literal.\nconst channels = (hex: string) => {\n const n = parseInt(hex.slice(1), 16);\n return [16, 8, 0].map((s) => Number((((n >> s) & 0xff) / 255).toFixed(4)));\n};\n\nexport default definePort<BitCrushEffect, { palette: readonly string[] }>({\n type: \"bitCrush\",\n surface: \"shader\",\n params: {\n bits: \"param\",\n amount: \"param\",\n count: { type: \"f32\", uses: [\"palette\"], value: (_e, c) => c.palette.length },\n palette: { type: { array: 16, of: \"vec3f\" }, value: (_e, c) => c.palette.flatMap(channels) },\n },\n prepare(e) {\n if (!(e.amount > 0)) return null;\n if (e.palette === \"none\" && e.bits >= 8) return null;\n return { palette: e.palette === \"none\" ? [] : PALETTES[e.palette] };\n },\n cases: () => [\n Effects.bitCrush().list[0],\n Effects.bitCrush({ palette: \"gameboy\" }).list[0],\n Effects.bitCrush({ palette: \"nes\", amount: 0.7 }).list[0],\n Effects.bitCrush({ palette: \"cga\" }).list[0],\n ],\n});\n","import { Effects, resolveEffectAxis, type BlockDisplaceEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlockDisplaceEffect>({\n type: \"blockDisplace\",\n surface: \"shader\",\n params: { amount: \"param\", size: \"param\", density: \"param\", seed: \"param\", axis: \"param\" },\n prepare(e) {\n if (!(e.amount > 0) || !(e.density > 0)) return null;\n const axis = resolveEffectAxis(e.axis);\n return axis.x === 0 && axis.y === 0 ? null : {};\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.amount * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.blockDisplace().list[0],\n Effects.blockDisplace({ amount: 40, size: 10, density: 0.6, seed: 3 }).list[0],\n Effects.blockDisplace({ amount: 30, size: 24, axis: \"y\", seed: 1 }).list[0],\n ],\n});\n","import { Effects, type BloomEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BloomEffect, { t: number; scale: number; sigma: number }>({\n type: \"bloom\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n },\n uses: [\"radius\"],\n prepare(e) {\n if (e.radius <= 0 || e.intensity <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.radius / 2 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, c.sigma, 0], reach: 3 * c.sigma }),\n cases: () => [\n Effects.bloom().list[0],\n Effects.bloom({ threshold: 0.4, radius: 24, intensity: 1.5 }).list[0],\n Effects.bloom({ threshold: 0, radius: 6, intensity: 0.6 }).list[0],\n ],\n});\n","import { Effects, type BlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlurEffect>({\n type: \"blur\",\n surface: \"filter\",\n params: {},\n uses: [\"radius\"],\n // A zero-sigma blur is the identity.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras(e) {\n // Sigma is half the authored radius.\n const sigma = e.radius / 2;\n return { blur: [sigma, sigma, 0], reach: 3 * sigma };\n },\n cases: () => [Effects.blur(8).list[0], Effects.blur(24).list[0], Effects.blur(2).list[0]],\n});\n","import { Effects, type BulgeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BulgeEffect>({\n type: \"bulge\",\n surface: \"shader\",\n params: { strength: \"param\", center: \"param\" },\n prepare: (e) => (e.strength === 0 ? null : {}),\n extras(e) {\n // A pinch (k < 0) folds the far field back into the box: it draws out to\n // where f(r) = r(1 + k r²)/(1 + k) falls back to -1. The packer doesn't\n // know the box, so reach assumes a ~360 px half extent.\n // An off-centre lens also draws past the box on its far side.\n let reach = 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5) * 360;\n if (e.strength < 0) {\n const k = e.strength * 0.8;\n let r = 1;\n while (r < 4 && (r * (1 + k * r * r)) / (1 + k) > -1) r += 0.01;\n reach = Math.min((r - 1 + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800);\n }\n return { reach };\n },\n cases: () => [\n Effects.bulge(0.6).list[0],\n Effects.bulge(-0.7).list[0],\n Effects.bulge({ strength: 0.9, center: { x: 0.3, y: 0.6 } }).list[0],\n ],\n});\n","import { Effects, type ChromaticAberrationEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's ghost matrices.\nconst RED = [1.4, -0.2, -0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0];\nconst BLUE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.2, -0.2, 1.4, 0, 0, 0, 0, 0, 1, 0];\n\nexport default definePort<ChromaticAberrationEffect>({\n type: \"chromaticAberration\",\n surface: \"filter\",\n params: {\n red: { type: { array: 20, of: \"f32\" }, value: () => RED },\n blue: { type: { array: 20, of: \"f32\" }, value: () => BLUE },\n offset: {\n type: \"vec2f\",\n uses: [\"amount\", \"angle\"],\n value(e) {\n const rad = (e.angle * Math.PI) / 180;\n return [Math.cos(rad) * e.amount, Math.sin(rad) * e.amount];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n extras: (e) => ({ reach: e.amount }),\n cases: () => [\n Effects.chromaticAberration().list[0],\n Effects.chromaticAberration({ amount: 8, angle: 45 }).list[0],\n Effects.chromaticAberration({ amount: 2.5, angle: 200 }).list[0],\n ],\n});\n","import { Effects, type ColorAdjustmentEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's composition.\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\n// outer × inner, both 4×5 with an implicit last row [0,0,0,0,1].\nfunction multiply(outer: number[], inner: number[]): number[] {\n const out = new Array(20).fill(0);\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 5; j++) {\n let sum = 0;\n for (let k = 0; k < 4; k++) sum += outer[i * 5 + k] * inner[k * 5 + j];\n if (j === 4) sum += outer[i * 5 + 4];\n out[i * 5 + j] = sum;\n }\n }\n return out;\n}\n\nconst diag = (s: number, o: number) => [s, 0, 0, 0, o, 0, s, 0, 0, o, 0, 0, s, 0, o, 0, 0, 0, 1, 0];\nconst offsets = (r: number, g: number, b: number) => [1, 0, 0, 0, r, 0, 1, 0, 0, g, 0, 0, 1, 0, b, 0, 0, 0, 1, 0];\n\nfunction saturation(s: number): number[] {\n const i = 1 - s;\n return [\n s + i * LR, i * LG, i * LB, 0, 0,\n i * LR, s + i * LG, i * LB, 0, 0,\n i * LR, i * LG, s + i * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nfunction hue(deg: number): number[] {\n const rad = (deg * Math.PI) / 180;\n const c = Math.cos(rad), s = Math.sin(rad);\n return [\n LR + c * (1 - LR) + s * -LR, LG + c * -LG + s * -LG, LB + c * -LB + s * (1 - LB), 0, 0,\n LR + c * -LR + s * 0.143, LG + c * (1 - LG) + s * 0.140, LB + c * -LB + s * -0.283, 0, 0,\n LR + c * -LR + s * -(1 - LR), LG + c * -LG + s * LG, LB + c * (1 - LB) + s * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nexport default definePort<ColorAdjustmentEffect, { matrix: number[] }>({\n type: \"colorAdjustment\",\n surface: \"filter\",\n params: {\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"brightness\", \"contrast\", \"saturation\", \"hue\", \"vibrance\", \"temperature\", \"tint\", \"shadows\", \"highlights\"],\n value: (_e, c) => c.matrix,\n },\n },\n prepare(e) {\n let mat = diag(1, 0);\n let any = false;\n const apply = (m: number[]) => { mat = multiply(m, mat); any = true; };\n const b = e.brightness ?? 0;\n if (b !== 0) apply(diag(1, b));\n const c = e.contrast ?? 1;\n if (c !== 1) apply(diag(c, 0.5 * (1 - c)));\n const s = e.saturation ?? 1;\n if (s !== 1) apply(saturation(s));\n const h = ((e.hue ?? 0) % 360 + 360) % 360;\n if (h !== 0) apply(hue(h));\n const v = e.vibrance ?? 0;\n if (v !== 0) apply(saturation(1 + v * 0.7));\n const t = e.temperature ?? 0;\n if (t !== 0) apply(offsets(t * 0.1, 0, -t * 0.1));\n const ti = e.tint ?? 0;\n if (ti !== 0) apply(offsets(ti * 0.05, -ti * 0.1, ti * 0.05));\n const sh = e.shadows ?? 0;\n if (sh !== 0) apply(diag(1 - 0.2 * sh, 0.2 * sh));\n const hi = e.highlights ?? 0;\n if (hi !== 0) apply(diag(1 + 0.2 * hi, -0.1 * hi));\n return any ? { matrix: mat } : null;\n },\n cases: () => [\n Effects.colorAdjustment({ brightness: 0.1, contrast: 1.3, saturation: 1.4 }).list[0],\n Effects.colorAdjustment({ hue: 120, vibrance: 0.5 }).list[0],\n Effects.colorAdjustment({ temperature: 0.6, tint: -0.4, shadows: 0.5, highlights: -0.5 }).list[0],\n Effects.colorAdjustment({ contrast: 0.6, saturation: 0 }).list[0],\n ],\n});\n","import { definePort } from \"./_pack.ts\";\n\n// The authored 4×5 matrix as is.\nexport default definePort<{ type: \"colorMatrix\"; matrix: ArrayLike<number> }>({\n type: \"colorMatrix\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => Array.from(e.matrix).slice(0, 20) },\n },\n cases: () => [],\n});\n","import { Effects, type CurvesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's resampling: the curve as\n// 33 evenly spaced outputs over 0–1.\nconst SEGMENTS = 32;\n\nfunction evalCurve(points: [number, number][], x: number): number {\n if (points.length === 0) return x;\n if (x <= points[0][0]) return points[0][1];\n const last = points[points.length - 1];\n if (x >= last[0]) return last[1];\n for (let i = 0; i < points.length - 1; i++) {\n const [x0, y0] = points[i];\n const [x1, y1] = points[i + 1];\n if (x >= x0 && x <= x1) return y0 + (y1 - y0) * (x1 === x0 ? 0 : (x - x0) / (x1 - x0));\n }\n return x;\n}\n\nfunction ramp(points: [number, number][]): number[] {\n const sorted = [...points].sort((a, b) => a[0] - b[0]);\n const out: number[] = [];\n for (let i = 0; i <= SEGMENTS; i++) {\n const y = evalCurve(sorted, i / SEGMENTS);\n out.push(Number.isFinite(y) ? Math.max(0, Math.min(1, y)) : i / SEGMENTS);\n }\n return out;\n}\n\nconst MASKS: Record<string, number[]> = { r: [1, 0, 0, 0], g: [0, 1, 0, 0], b: [0, 0, 1, 0], a: [0, 0, 0, 1] };\n\nexport default definePort<CurvesEffect, { values: number[] }>({\n type: \"curves\",\n surface: \"shader\",\n params: {\n mask: { type: \"vec4f\", uses: [\"channel\"], value: (e) => MASKS[e.channel ?? \"rgb\"] ?? [1, 1, 1, 0] },\n curve: { type: { array: SEGMENTS + 1, of: \"f32\" }, uses: [\"points\"], value: (_e, c) => c.values },\n },\n prepare(e) {\n const values = ramp(e.points ?? []);\n return values.every((y, i) => Math.abs(y - i / SEGMENTS) < 1e-4) ? null : { values };\n },\n cases: () => [\n Effects.curves({ points: [[0, 0], [0.25, 0.15], [0.75, 0.88], [1, 1]] }).list[0],\n Effects.curves({ points: [[0, 0.2], [0.5, 0.7], [1, 1]], channel: \"r\" }).list[0],\n Effects.curves({ points: [[0, 0], [0.6, 0.3], [1, 0.8]], channel: \"a\" }).list[0],\n ],\n});\n","import { Effects, type DirectionalBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DirectionalBlurEffect, { sigma: number; rad: number }>({\n type: \"directionalBlur\",\n surface: \"filter\",\n params: {\n sigma: { type: \"f32\", uses: [\"radius\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare: (e) => (e.radius <= 0 ? null : { sigma: e.radius / 2, rad: (e.angle * Math.PI) / 180 }),\n extras: (_e, c) => ({ blur: [c.sigma, 0, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.directionalBlur(20).list[0],\n Effects.directionalBlur({ radius: 30, angle: 45 }).list[0],\n Effects.directionalBlur({ radius: 12, angle: 100 }).list[0],\n Effects.directionalBlur({ radius: 120, angle: -20 }).list[0],\n ],\n});\n","import { Effects, type DitherEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's 64x64 void-and-cluster table, verbatim.\nconst BLUE_NOISE_BASE64 =\n \"e8yOVglJi3jaB+U3jl3KakXertJzm985bcTcngPJTPc8ddJT6mIl7ztdoQdH8wxyKr6F1wCTXqg8aZ50OCCKRakgO9+09jbE\"\n + \"RrJS0AzsM7J9JxY+6i5arBCOK3w3qXHAXOWPG4DYqhCT3HXpkSay25w//61F4y53670E4MOiZtlQ/51iK5hqGewpmmeAvRmQ\"\n + \"516kirgCftDuUbn5YOcTLZ0ORqXDOHhRshw0VcBmglDGCV0he6MZyUyQLFmCDewWwG4DzYQO0qVdhv4gQqRT0gfB/2xP8p8+\"\n + \"HWmaC0SRuOCAyP0rWwj4yGrxz6oV+jcc72+Wu9RU74cQ27LyR886kieB5Eu58D962ACryeNs+Dx0Sy8SyiRfvIvmJ8XXax1U\"\n + \"OGKvct+YgyhCiQB7RZbVrYtG3jUMaz63cDplGZxxsGDuP6cadVkgvTBNcjgRliaEtZvggJfcdArTS3WrNIP4n9ADjBm5RugU\"\n + \"uqBh58tuDl3nJaSB+MifJf+ojcgp+QrUFI/EL96wjPmZ4cCMYNnDC/EfWr40Ra/7MKQQ8VEItSl47lDWNWWn0Vj8Oh6jLbw+\"\n + \"ewPATReSWwPUUg/mXYVMnm1T+mWbEEdsDFoe964yVaZHz24F9IkaWH7LXojamGPiP74jmfQFdC2TC8SGUduK9KnQYuZ3N+2+\"\n + \"fzZ2rD3cvzC00waFO8nqKdGmekUFf+1rjzHonLZk4JlC6xe6I0PIFo9srVp/weNNfddoru8FZhlSMZcfttdrK5rqvSCVAnbn\"\n + \"Q3wovORffbSJOee33Jkhyw6sfBZPKsgAsyyea/57qlb3Cc84Fa8hnfUYSSV4QcaR2XD3QaJTFbBKDF76zVaoG5r1qEwdoQJQ\"\n + \"8hVfJ21Psz71Vtw90oZz6GGGTs43AtUtoEnhiP9FbMk5tJjou5v9LbQPhsgHfPvMhNxxRIIv8WEKN2rZj/42w26dzY7EFuVj\"\n + \"hyi6ZvumHzy+9RSrjeZph8B2KKNh1I0LXd1wCTNaG35I6idh4pUjYjuiKK8TwI3P4onID1p0qyHgPwf/NXybAceiGJEJwkuf\"\n + \"DGrdJlW2Qx/yElXDAjGo8CiJTsuE3ahkzZirTbk02qwD9Y7T625MJndEsCvnQNORXLaFU6nZRflxN+x6MV7wgteWQHf2D57e\"\n + \"XrGV6XffSnDDrhz4QsEU5zUBbvYSdUmIwk8XXTkForsY8GKfvxiACfYrb+kRZyu0WNhKzJjesSpZHLHKiWTBNIDWLUQetJYP\"\n + \"PeRhoCZqk0+1hNg7ksrzGm7lfcWqh/xamdUFek7yY8RMotMjwIPOG44LsGsaRAFuwvlPBTHtF5NIBm31gstf+4GZA3q38Al1\"\n + \"+x1YsSVioC+wPZwn30fOMbM+j+Eyl6053g6QPp5N6KV38yaf/X7Okjh6mtmndFLN+6nBmlIVNNIkVMjgTjKlz0HDnOt9C+JZ\"\n + \"1Qj0ZRlyDIL3HVa8EdEfiWu7VnbxBGE2wkVivzJYqeAR6idgQOG5JXlcGznjr45xte07II/WXIkrbA9J1L1DkHa+UoW17MNj\"\n + \"0HuoaP51VOku+hrXtiiL1RCW3QmM6hdLZ72LshyGDqE96YjVZALxRBOfZK9zDuwYqvKOMmmlJ/EWmCvYPJ0kSQI27CZGk8IB\"\n + \"qXuYOGmo/nBP7Xk80G8oxqE9B/zQaOxW0gq8KH6gxVveegn3x0i4ft1QzLD9BoRjzkf9qhRWi67jlcaDDLU01V5Fyw/kQxm5\"\n + \"LK0cpE23kPd/3Fd4Rp41iq9smFH/PR6HLr6TVTSfImY7AHUeV5njNa5xAWF9yfNxYBtQ26DlbIoi7LSMVn2Z0FuE2mXzBThd\"\n + \"Ei/Kqya+BPcgQusUs3DXqu1G1Bziif3Kmr2K5zDWScEg5oy74DIPQKC+dDpdGUv1owhtLdPsATzwDcAjmXjSnuJvkBnogVvX\"\n + \"dsVfzTOUVAdlI3KtXXYNUyvzQWC4chSBWqE5Th2Us9so8Aez+Y3IL37fTZ8eumGxdJQ0WN9DuiFJtPBSask9lCykC4XkGfbD\"\n + \"m4X6AM8wqNl/FqXODJKs9NIN7sxt+lh7SIrWLnqqDGS3OcL0c0SIJNZL+KyBFGr9hwA6nw2o5RK5+k1qrUd9Mdw8tk2N70G3\"\n + \"W+RuJvpRLmpClSqBpjoG0BlqnFYe6kjZjxZdkg3L/aQQwm0Ey+szplzZxIX6Jk9nfzuZ3ie/Y6oMXMsXom0fkwfCSZ14vOEb\"\n + \"s3TDVRfWjqzE/j250W+aJv130SmuVzdo5iqQP6BUjb8beSxIb7iQ0eofywKJ8RXnknTyLV/gx3r3MoveAj2CzFn+Aea3aelc\"\n + \"gQ7aiAM1xlgJoT3vg+Eam4JXutkicQviTvWx1BXiNwdXrndfQJ9PzSRGp4G4DFE8q2kesFvupBCMNZxIhh1BLLVSJaRg9oKt\"\n + \"42i9TQJrv9Q9+RZ68KzRKJppCY5bpHzElzP1vdotbYS14RnUN/6e2BXsxTfTbSlO161wJtyj9pVr7nfkQ7QZRy5/F9qUpyhT\"\n + \"CK1jmks2ZoQ/6Kc08iFH/WwYS40OqfQGOmWWVG6MJWKBl1F8Epi/82Uc68ZUdQTIGjeXwRNy35HJ87BgM+564pHNLOgBvv2x\"\n + \"D8hQfsxlsxHUouMlfblZksf5EMLsAK/HPgjgqPxHhwa1PYMQtDTZSuCxB0/SM6JiBlAjh8xIFbJpQ4DGX5EYVdtvJLoC3pAv\"\n + \"f1rDZ+041CBKc6YoRnjkU/S2LGYgyTZ44pxM9JFgp4hYfPNmjf8dvOhxof4IvFv3Id4OqTHge6EzivqXPnVS6aw8AZZHEnib\"\n + \"2jODt9KTNRuLdddMkuerXCXOayvWDP8izj+lKbh4Vz+IMNRAZ55/NoqeT/hxRCLrwkoVYOykDcci+XLepcH9XrME8VoRZtup\"\n + \"WxCdwABsGPWMC7ehfENyuwrlGNdGAsfdpg26fRzsxA/Wb70alNa0Zgec17Ah0DeVVobNKVWIMBrib5Q96aAnvv5A4zB/01G8\"\n + \"P91XG8foLZltkVp/oPCUJ2brWZfcK1OqQfEuXMUMiFL0ey5yU4T1br4RQrEK6mxAn0zEIbt5SIAYb69e+JoteaZp+TuMXa9M\"\n + \"xST7uzNeFn21OxXJRXWSz2UCrX7jPKYnuUDlxQS1SBfcnfBmkdW2gM4N+4hYBvDHltEKjUQRx+gFJoK+CNIY9IKrQwtz58xL\"\n + \"+4tw8aUJ+COF6ZdGIPxw2oQaomGT2CqqYTF8wiNNFvMqrmQ13aNoIjdW7ijbpWRLktirUO12njkDZsrdjK8rowXFJFUyv188\"\n + \"uhjLZLOPVwDHS/sUOu10kP9RBN86pGKXVHrllhvOQa7jgbVrv30h+7U1bh2UKmHW7ZYuWB1Fbt1anOa2h+Kb23hSMeEL0C/v\"\n + \"Z6+JcMtMCbshyY2ub+rJBtg7EcFRg/d2AqE/F1LkOogTWfHPROO8TyJ15qPB8ROHN3lGDWkfTAWx+qCIdEqlkzof2iydsFvZ\"\n + \"hELoVRKDMriK+KJvK7oTWccq/s+bBKvNc7+bBLJ7EqdCug06Y5XPsfUX06f6fNCQKmAWO/HCEuR2u1TqEHz2M2kXnSu9/Elx\"\n + \"ImBH0+iVOuCYaU6McPBiQ+EsTYZoMfWLZ/6I1nsCTi5nwJJZL7k77nLK3rdoKIVZ0weXZcVDHZK48HnYYJUY4bDMAIQfZbJ/\"\n + \"HNS3EzK9JJYNqPcf38FWz6AXUKsl+KR/4SQ/6wqfXhKmQo8DU63/HadH9jCL4abVSgypPgDMplSRNO+nPvkKTO03efVI24Dr\"\n + \"VXjRkECYByneM8Bf3D+8Ww6vhG/LiOXEUyN37ZnZcDLBfRa1cQRfK3TIV/aHazjzDna+TnDLmsFipwaTsFwWrMkyZRFcruuD\"\n + \"s3jpCXGOFdSX/1DaHUosef+y0S9BFU2O212f0E/9v4btH5kvu+Igg8ZfJI7dGTOHIdhVzCJzkUEA76C7/DVsSA6UQ57JMO9I\"\n + \"czQEs2ScuAWVGGOJus2k6gQ87h80nRQ9sWLedxJSrkHaoOkIq1zjbP9BgeY4xv+5bIlLKXvIHtL0ZSP5Ua1qHsyj54s59tVA\"\n + \"a+FK9Ah8YSZ4uZBjhNpX5Y8GR6vWj/9rF1E5wX5CsgSduhJpowlYLd8czuMGj6JUMbjXfQ+K37eBYCnGeg9bjMGpKp5V5zis\"\n + \"+UwT4sRzqCNq+sgiYTUFmLaF92gq74rQWC6V8ErZeZlHp3RZr0DmdYkDoT7GLFgIQPMWVOCtIu02C3bKHJPXDWfOoUMqAUnT\"\n + \"tjiAou19w+QvzQ6U1hNOIuh3wx6GsRTK7wrCM/JoEcRO6Vtw45n8qNWPv5w0a89/U9f7X7dGgMSYJXv2s5TueBOaVAvSQlcd\"\n + \"YHZGtFefx22qQNxhMfZlJYFflx6K2CeqNs4hshI5dB9mL3MB/EahEbiUPoct7BhZPOYJVW01ylct88BtJ7KDnfOq4CH8fzXy\"\n + \"FIkAodFEkbw41PpDu1F+/mSWgfZPwIfKSO6xWsONKvJkHq4C251x/b2IptjBEYKj24VF3ZD7D9E2AYo8agi2lFm8/E5/Ct+j\"\n + \"UxGtdgHPmxSvCkKi2mEF5KER2IIc3XbJSeVzxmhPrA8sYz8dl0r8IGMEqBk4ZE25clS/06TlSiThNmqwKcVvHuqNZealOW7g\"\n + \"x+95LxuTtzFYkic/qFUKOaeGMfgbNs1+3bL0eeNnszrOvHLtxqXhIpTuFnkqXsNzzoMb645c9EJ7zDAgWvYaSyRcuMxw8EV+\"\n + \"+2/I6Wn3vZPcDVubvY3yRJkBVirLCIvoUZYlWXsGhkTXY5xC848arAWdQdMPty6pBbhL25PAd4w/lAHmU6kMxRqxTgaXMHlQ\"\n + \"JLnrQ3UIYCNs0Ye6Rp8uehf4QtWeL/WtCy7NtgrYRftj51amck3Wkl7+noAIL6za/qZsOyGD2mScNonftR3T72Z+qyXK5KO/\"\n + \"6zKlE/ld0appsoITu09oxXb6UoVno3cwix7CLPqDGOdzORXJaulRFH0p1bSb+EEl0/MTXn5IpAQ9zRBXlTJOEnxJ4WaBG+RI\"\n + \"AN408m7mEDyRpho47CTLtEzba5IDxkCzIr9U8T6b0GPFS+5bE262jlVyujvK/W3EnOWL/GjUg/i2HJbFO7WRJ8aaTY8mqYXO\"\n + \"I1/ZwJdXB/KaDrg+32edWYzZfKkghg2yH4wHgMIz6gOsH+mbCi2NGl4sSh67A6oob9VWBu5xUvx6XdELwlrdSvG0AXNE4oJi\"\n + \"NnT3V6ww6g/1MwZnvE73OuKj0UWW1lB8z0SHZN2xU+u3c9yjeT7lX5w16IsppRG5Ohyl5HUyF6B5No38FafDGrDQIoATkM9x\"\n + \"RKLK5jDVlXJSaDD5HGcpofsuxhVJetI5hBLFMfSQUMwKrne7QdJi24bvaEGK/LhoDuVQr2ctQN+KSaLpx0wmhbpYjhSAXgOu\"\n + \"7hC8d6fkvhRclXCr9iOgAPmVUGMNviCG/kkbXPKCI5gIsCm9A5pHzYW/JNV+ypha7xBkMm22+AvYIf1Ks/LHLA==\";\n\nconst ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst SIZE = 64;\n\nlet table: Uint8ClampedArray | null = null;\nfunction blueNoiseRgba(): Uint8ClampedArray {\n if (table) return table;\n const text = BLUE_NOISE_BASE64.replace(/[^A-Za-z0-9+/]/g, \"\");\n const bytes = new Uint8Array((text.length * 3) >> 2);\n let acc = 0, bits = 0, written = 0;\n for (let i = 0; i < text.length; i++) {\n acc = (acc << 6) | ALPHABET.indexOf(text[i]);\n bits += 6;\n if (bits >= 8) { bits -= 8; bytes[written++] = (acc >> bits) & 0xff; }\n }\n const out = new Uint8ClampedArray(SIZE * SIZE * 4);\n for (let i = 0; i < SIZE * SIZE; i++) out.fill(bytes[i], i * 4, i * 4 + 3), (out[i * 4 + 3] = 255);\n return (table = out);\n}\n\nexport default definePort<DitherEffect>({\n type: \"dither\",\n surface: \"shader\",\n params: {\n levels: \"param\",\n scale: \"param\",\n monochrome: \"param\",\n noise: \"param\",\n matrix: { type: \"f32\", value: (e) => e.matrix },\n },\n prepare: (e) => (e.levels >= 256 ? null : {}),\n extras: (e) => ({\n aux: e.noise === \"blue\" ? { key: \"dither-blue-noise\", width: SIZE, height: SIZE, pixels: blueNoiseRgba() } : undefined,\n }),\n cases: () => [\n Effects.dither().list[0],\n Effects.dither({ levels: 4, matrix: 8, scale: 2, monochrome: true }).list[0],\n Effects.dither({ noise: \"blue\", levels: 3 }).list[0],\n Effects.dither({ matrix: 2, levels: 6, scale: 3 }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type DropShadowEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DropShadowEffect, { ox: number; oy: number; sigma: number; spread: number }>({\n type: \"dropShadow\",\n surface: \"shader\",\n params: {\n offset: { type: \"vec2f\", uses: [\"offsetX\", \"offsetY\"], value: (_e, c) => [c.ox, c.oy] },\n sigma: { type: \"f32\", uses: [\"blur\"], value: (_e, c) => c.sigma },\n color: \"param\",\n spread: { type: \"f32\", value: (_e, c) => c.spread },\n },\n prepare(e) {\n if (resolveEffectColor(e.color)[3] <= 0) return null;\n const ox = e.offsetX;\n const oy = -e.offsetY; // scene is y-up, the pass y-down\n const sigma = Math.max(0, e.blur) / 2;\n const spread = Math.max(0, e.spread);\n if (ox === 0 && oy === 0 && sigma === 0 && spread === 0) return null;\n return { ox, oy, sigma, spread };\n },\n extras: (_e, c) => ({ reach: Math.hypot(c.ox, c.oy) + 3 * c.sigma + c.spread }),\n cases: () => [\n Effects.dropShadow().list[0],\n Effects.dropShadow({ offsetX: 10, offsetY: 10, blur: 24, color: \"#0008\" }).list[0],\n Effects.dropShadow({ offsetX: 0, offsetY: 0, blur: 0, spread: 6, color: \"#f40\" }).list[0],\n Effects.dropShadow({ offsetX: -12, offsetY: -6, blur: 40, spread: 4, color: \"#04f\" }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type DuotoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<DuotoneEffect>({\n type: \"duotone\",\n surface: \"filter\",\n params: {\n // The engine's duotone matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"shadows\", \"highlights\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const shadows = resolveEffectColor(e.shadows);\n const highlights = resolveEffectColor(e.highlights);\n const row = (i: number) => {\n const d = (highlights[i] - shadows[i]) * a;\n const r = [d * LR, d * LG, d * LB, 0, shadows[i] * a];\n r[i] += 1 - a;\n return r;\n };\n return [...row(0), ...row(1), ...row(2), 0, 0, 0, 1, 0];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n cases: () => [\n Effects.duotone().list[0],\n Effects.duotone({ shadows: \"#1a0b3d\", highlights: \"#ffcc66\" }).list[0],\n Effects.duotone({ amount: 0.5, shadows: \"#003344\", highlights: \"#ff6699\" }).list[0],\n ],\n});\n","import { Effects, type EdgesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<EdgesEffect>({\n type: \"edges\",\n surface: \"shader\",\n params: { strength: \"param\", kernel: \"param\", colored: \"param\" },\n prepare: (e) => (e.strength > 0 ? {} : null),\n // Edges light up one tap (a device px) past the silhouette.\n extras: () => ({ reach: 1 }),\n cases: () => [\n Effects.edges().list[0],\n Effects.edges({ strength: 2, kernel: \"prewitt\", colored: true }).list[0],\n Effects.edges({ strength: 1.5, kernel: \"laplacian\" }).list[0],\n ],\n});\n","import { definePort } from \"./_pack.ts\";\n\n// Scale rgb by `amount`.\nexport default definePort<{ type: \"exposure\"; amount: number }>({\n type: \"exposure\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, 1, 0] },\n },\n cases: () => [],\n});\n","import { Effects, type GlassEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst clamp01 = (v: number) => Math.min(1, Math.max(0, v));\n\n// The engine's constants.\nconst DISPERSION_SPAN = 0.35;\nconst LIGHT_GAIN = 1;\nconst SHADE_NEAR = 0.1;\nconst SHADE_FAR = 0.06;\nconst SHADE_REACH = 0.7;\nconst SPLAY_REACH = 0.3;\nconst SPLAY_THINNING = 0.25;\n\nexport default definePort<GlassEffect, { light: number; splay: number; frost: number }>({\n type: \"glass\",\n surface: \"shader\",\n // The engine's handler only answers for the backdrop.\n backdropOnly: true,\n params: {\n depth: \"param\",\n refraction: { type: \"f32\", value: (e) => Math.max(0, e.refraction / 100) },\n spread: { type: \"f32\", uses: [\"dispersion\"], value: (e) => clamp01(e.dispersion / 100) * DISPERSION_SPAN },\n light: {\n type: \"vec2f\",\n uses: [\"lightAngle\"],\n value(e) {\n const radians = (e.lightAngle * Math.PI) / 180;\n return [Math.sin(radians), -Math.cos(radians)];\n },\n },\n rim: { type: \"f32\", uses: [\"lightIntensity\"], value: (_e, c) => c.light * LIGHT_GAIN },\n shade_near: { type: \"f32\", uses: [\"splay\"], value: (_e, c) => c.light * SHADE_NEAR * (1 - SPLAY_THINNING * c.splay) },\n shade_far: { type: \"f32\", value: (_e, c) => c.light * SHADE_FAR * (1 - SPLAY_THINNING * c.splay) },\n shade_reach: { type: \"f32\", value: (_e, c) => SHADE_REACH + SPLAY_REACH * c.splay },\n frost: { type: \"f32\", value: (_e, c) => c.frost },\n },\n prepare(e) {\n if (!(e.depth > 0)) return null;\n return {\n light: Math.max(0, e.lightIntensity / 100),\n splay: clamp01(e.splay / 100),\n // Figma's frost is a blur radius, twice the sigma.\n frost: Math.max(0, e.frost) * 0.5,\n };\n },\n extras: (_e, c) => ({\n // The frost blur reads past the outline; refraction pulls inward.\n reach: 3 * c.frost + 2,\n blur: c.frost > 0 ? [c.frost, c.frost, 0] : undefined,\n field: true,\n }),\n cases: () => [\n Effects.glass().list[0],\n Effects.glass({ dispersion: 0, frost: 0, depth: 30 }).list[0],\n ],\n});\n","import { Effects, type GlowEffect, resolveEffectAxis, resolveEffectColor, type Color } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// core's blend names, in blend_mode's index order (_header.wgsl).\nconst BLEND = [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\",\n \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"];\n\nexport default definePort<GlowEffect, { colors: Color[] }>({\n type: \"glow\",\n surface: \"shader\",\n params: {\n channel: \"param\",\n threshold: \"param\",\n spread: { type: \"f32\", value: (e) => Math.max(0, e.spread) },\n intensity: \"param\",\n tint: \"param\",\n original: \"param\",\n blend: { type: \"f32\", value: (e) => Math.max(0, BLEND.indexOf(e.blend)) },\n count: { type: \"f32\", value: (_e, c) => c.colors.length },\n cycles: \"param\",\n phase: { type: \"f32\", value: (e) => e.phase / 360 },\n mirror: { type: \"f32\", uses: [\"loopStyle\"], value: (e) => (e.loopStyle === \"mirror\" ? 1 : 0) },\n stops: {\n type: { array: 8, of: \"f32\" },\n value(e, c) {\n const out: number[] = [];\n let previous = 0;\n for (let i = 0; i < c.colors.length; i++) {\n previous = Math.max(previous, Math.min(1, e.stops[i] ?? i / Math.max(1, c.colors.length - 1)));\n out.push(previous);\n }\n return out;\n },\n },\n colors: { type: { array: 8, of: \"vec4f\" }, uses: [\"color\"], value: (_e, c) => c.colors.flatMap((x) => resolveEffectColor(x)) },\n },\n uses: [\"radius\", \"axis\"],\n prepare(e) {\n // The engine's renderInputs declines these (the node paints untouched).\n if ((e.radius <= 0 && e.spread <= 0) || e.intensity <= 0) return null;\n return { colors: (e.tint === \"solid\" ? [e.color] : e.colors).slice(0, 8) };\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n const sigma = Math.max(0, e.radius) / 2;\n // Glow spreads past the content by its blur and spread.\n return { blur: [sigma * axis.x, sigma * axis.y, 0], reach: 3 * sigma + Math.max(0, e.spread) };\n },\n cases: () => [\n Effects.glow().list[0],\n Effects.glow({ radius: 12, threshold: 0.3, intensity: 1.5, original: \"front\" }).list[0],\n Effects.glow({ channel: \"alpha\", radius: 20, spread: 4, tint: \"solid\", color: \"#4cf\" }).list[0],\n Effects.glow({ radius: 30, tint: \"ramp\", colors: [\"#ff3\", \"#f0f\", \"#0ff\"], stops: [0, 0.5, 1], blend: \"lighten\" }).list[0],\n ],\n});\n","import { Effects, type GrainEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<GrainEffect>({\n type: \"grain\",\n surface: \"shader\",\n // `animated` folds floor(time * 1000) into the seed; the harness renders at t = 0.\n params: { amount: \"param\", size: \"param\", seed: \"param\", colored: \"param\", animated: \"param\" },\n prepare: (e) => (e.amount > 0 ? {} : null),\n cases: () => [\n Effects.grain().list[0],\n Effects.grain({ amount: 0.5, size: 3, seed: 7, colored: true }).list[0],\n Effects.grain({ amount: 0.15, size: 2 }).list[0],\n ],\n});\n","import { Effects, type GrayscaleEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<GrayscaleEffect>({\n type: \"grayscale\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n return [\n 1 - a + a * LR, a * LG, a * LB, 0, 0,\n a * LR, 1 - a + a * LG, a * LB, 0, 0,\n a * LR, a * LG, 1 - a + a * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n cases: () => [Effects.grayscale(1).list[0], Effects.grayscale(0.5).list[0]],\n});\n","import { Effects, type HalftoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<HalftoneEffect>({\n type: \"halftone\",\n surface: \"shader\",\n params: {\n size: \"param\",\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n shape: \"param\",\n separation: \"param\",\n },\n // A sub-pixel pitch is a no-op in the engine; the pass checks it (needs the scale).\n // A cell whose centre is inside the node draws its dot across the edge: up to a pitch.\n extras: (e) => ({ reach: e.size }),\n cases: () => [\n Effects.halftone().list[0],\n Effects.halftone({ size: 10, angle: 20, shape: \"line\", separation: \"rgb\" }).list[0],\n Effects.halftone({ size: 12, shape: \"cross\", separation: \"cmyk\" }).list[0],\n ],\n});\n","import { Effects, type InvertEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\nconst IDENTITY = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n\n// The engine's fully inverted matrix per channel.\nfunction fullMatrix(channel: InvertEffect[\"channel\"]): number[] {\n switch (channel) {\n case \"red\": return [-1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"green\": return [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"blue\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n case \"alpha\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 1];\n case \"hue\": return [\n 2 * LR - 1, 2 * LG, 2 * LB, 0, 0,\n 2 * LR, 2 * LG - 1, 2 * LB, 0, 0,\n 2 * LR, 2 * LG, 2 * LB - 1, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n case \"luminance\": return [\n 1 - 2 * LR, -2 * LG, -2 * LB, 0, 1,\n -2 * LR, 1 - 2 * LG, -2 * LB, 0, 1,\n -2 * LR, -2 * LG, 1 - 2 * LB, 0, 1,\n 0, 0, 0, 1, 0,\n ];\n default: return [-1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n }\n}\n\nexport default definePort<InvertEffect, { matrix: number[] }>({\n type: \"invert\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, uses: [\"channel\", \"strength\"], value: (_e, c) => c.matrix },\n },\n prepare(e) {\n const s = Math.max(0, Math.min(1, e.strength));\n if (s === 0) return null;\n const target = fullMatrix(e.channel);\n return { matrix: IDENTITY.map((v, i) => v + (target[i] - v) * s) };\n },\n // An alpha invert turns transparent black opaque everywhere it is drawn,\n // not just over the content: reach\n // far enough to cover the canvas.\n extras: (_e, c) => (c.matrix[19] > 0 ? { reach: 4096 } : {}),\n cases: () => [\n Effects.invert().list[0],\n Effects.invert({ channel: \"hue\", strength: 0.7 }).list[0],\n Effects.invert({ channel: \"luminance\" }).list[0],\n Effects.invert({ channel: \"alpha\", strength: 0.5 }).list[0],\n ],\n});\n","import { Effects, type KaleidoscopeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<KaleidoscopeEffect, { segments: number }>({\n type: \"kaleidoscope\",\n surface: \"shader\",\n params: {\n wedge: { type: \"f32\", uses: [\"segments\"], value: (_e, c) => (2 * Math.PI) / c.segments },\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n offset: \"param\",\n amount: { type: \"f32\", value: (e) => Math.max(0, Math.min(1, e.amount)) },\n center: \"param\",\n },\n prepare(e) {\n const segments = Math.round(e.segments);\n return segments < 2 || e.amount <= 0 ? null : { segments };\n },\n // The fold keeps r (shifted by offset), so it draws out to ≤ √2\n // normalised. Reach assumes a ~360 px half extent.\n extras: (e) => ({\n reach: Math.min((Math.SQRT2 - 1 + Math.abs(e.offset) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800),\n }),\n cases: () => [\n Effects.kaleidoscope().list[0],\n Effects.kaleidoscope({ segments: 8, angle: 20, offset: 0.15 }).list[0],\n Effects.kaleidoscope({ segments: 3, amount: 0.6, center: { x: 0.4, y: 0.55 } }).list[0],\n ],\n});\n","import { Effects, type LutEffect } from \"@motionscript/core\";\nimport type { AuxTexture } from \"./_port\";\nimport { definePort } from \"./_pack.ts\";\n\n// Baked per table identity.\nconst baked = new WeakMap<Float32Array, AuxTexture>();\nlet serial = 0;\n\nconst toByte = (v: number) => (Number.isFinite(v) ? Math.max(0, Math.min(255, Math.round(v * 255))) : 0);\n\n// The cube unrolled into an N²×N strip: texel (r + b·N, g) holds (r, g, b).\n// Entries past the table's end stay black, as the engine leaves them.\nfunction bake(table: Float32Array, n: number): AuxTexture {\n const hit = baked.get(table);\n if (hit && hit.height === n) return hit;\n const width = n * n;\n const pixels = new Uint8ClampedArray(width * n * 4);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const s = ((b * n + g) * n + r) * 3;\n const d = (g * width + b * n + r) * 4;\n pixels[d + 3] = 255;\n if (s + 2 >= table.length) continue;\n pixels[d] = toByte(table[s]);\n pixels[d + 1] = toByte(table[s + 1]);\n pixels[d + 2] = toByte(table[s + 2]);\n }\n }\n }\n const aux = { key: `lut-${serial++}`, width, height: n, pixels };\n baked.set(table, aux);\n return aux;\n}\n\n// A test look: a lifted, teal-and-orange grade with channel crosstalk.\nfunction look(n: number): Float32Array {\n const t = new Float32Array(n * n * n * 3);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const [R, G, B] = [r / (n - 1), g / (n - 1), b / (n - 1)];\n const i = ((b * n + g) * n + r) * 3;\n t[i] = 0.05 + 0.95 * Math.pow(R, 0.8);\n t[i + 1] = 0.85 * G + 0.1 * B + 0.03;\n t[i + 2] = 1 - Math.pow(1 - B, 1.4) * 0.9 - 0.08 * R;\n }\n }\n }\n return t;\n}\n\nlet tables: [Float32Array, Float32Array] | null = null;\n\nexport default definePort<LutEffect>({\n type: \"lut\",\n surface: \"shader\",\n params: { size: \"param\", amount: \"param\" },\n uses: [\"table\"],\n prepare: (e) => (e.amount <= 0 || !Number.isInteger(e.size) || e.size < 2 ? null : {}),\n extras: (e) => ({ aux: bake(e.table, e.size) }),\n cases: () => {\n tables ??= [look(17), look(33)];\n return [\n Effects.lut({ table: tables[1], size: 33 }).list[0],\n Effects.lut({ table: tables[0], size: 17, amount: 0.6 }).list[0],\n ];\n },\n});\n","import { Effects, type MagnifyEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<MagnifyEffect>({\n type: \"magnify\",\n surface: \"shader\",\n // magnify draws nothing.\n backdropOnly: true,\n params: { scale: \"param\", center: \"param\" },\n prepare: (e) => (e.scale === 1 || e.scale <= 0 ? null : {}),\n // Magnifying samples inside the box; shrinking samples outside it, by\n // up to (1/scale − 1) of the half extent (assumed ~360 px, as bulge).\n extras: (e) => ({ reach: e.scale < 1 ? Math.min((1 / e.scale - 1) * 360, 800) : 0 }),\n cases: () => [\n Effects.magnify({ scale: 2 }).list[0],\n Effects.magnify({ scale: 1.6, center: { x: 0.3, y: 0.7 } }).list[0],\n ],\n});\n","import { Effects, type OilPaintEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<OilPaintEffect>({\n type: \"oilPaint\",\n surface: \"shader\",\n params: { radius: \"param\" },\n // The engine returns null when the radius rounds below 1 device px; the\n // scale isn't known here, so sub-pixel radii fall through to a no-op in WGSL.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras: (e) => ({ reach: e.radius }),\n cases: () => [\n Effects.oilPaint().list[0],\n Effects.oilPaint({ radius: 5 }).list[0],\n Effects.oilPaint({ radius: 1.5 }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type OutlineEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst POSITION = { outside: 0, inside: 1, center: 2 };\n\nexport default definePort<OutlineEffect, { position: number }>({\n type: \"outline\",\n surface: \"shader\",\n params: {\n width: \"param\",\n position: { type: \"f32\", value: (_e, c) => c.position },\n color: \"param\",\n },\n prepare(e) {\n if (!(e.width > 0) || resolveEffectColor(e.color)[3] <= 0) return null;\n return { position: POSITION[e.position] ?? 0 };\n },\n extras: (e, c) => ({ reach: c.position === 1 ? 0 : c.position === 2 ? e.width / 2 : e.width }),\n cases: () => [\n Effects.outline().list[0],\n Effects.outline({ width: 8, color: \"#f80\", position: \"inside\" }).list[0],\n Effects.outline({ width: 6, color: \"#0cf\", position: \"center\" }).list[0],\n ],\n});\n","import { Effects, type PixelateEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PixelateEffect>({\n type: \"pixelate\",\n surface: \"filter\",\n params: { blocks: \"param\", sharpColors: \"param\" },\n // Blended blocks fade out over half a block past the grid's edge (the\n // engine's linear upsample of a decal grid). A block's size depends on\n // the box, which the packer doesn't see: reach a generous fixed amount.\n // The grid is anchored at the box's top-left, as the engine's is for a\n // node laid out around its own centre.\n extras: (e) => ({ reach: e.sharpColors ? 0 : 100 }),\n cases: () => [\n Effects.pixelate(40).list[0],\n Effects.pixelate({ blocks: { x: 40, y: 24 }, sharpColors: false }).list[0],\n Effects.pixelate({ blocks: { x: 12.5, y: 40 / 3 } }).list[0],\n ],\n});\n","import { Effects, type PosterizeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PosterizeEffect>({\n type: \"posterize\",\n surface: \"shader\",\n params: { levels: \"param\" },\n prepare: (e) => (e.levels < 2 ? null : {}),\n cases: () => [Effects.posterize().list[0], Effects.posterize(2).list[0], Effects.posterize(7).list[0]],\n});\n","import { Effects, type ProgressiveBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ProgressiveBlurEffect, { start0: number }>({\n type: \"progressiveBlur\",\n surface: \"shader\",\n params: {\n center: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const a = (e.angle * Math.PI) / 180;\n return [Math.cos(a), Math.sin(a)];\n },\n },\n radius: \"param\",\n start_radius: { type: \"f32\", uses: [\"startRadius\"], value: (_e, c) => c.start0 },\n start: \"param\",\n end: \"param\",\n shape: \"param\",\n samples: { type: \"f32\", value: (e) => Math.max(2, Math.min(32, Math.round(e.samples))) },\n },\n prepare(e) {\n const start0 = e.startRadius ?? 0;\n return e.radius <= 0 && start0 <= 0 ? null : { start0 };\n },\n extras: (e, c) => ({ reach: Math.max(e.radius, c.start0, 0) }),\n cases: () => [\n Effects.progressiveBlur().list[0],\n Effects.progressiveBlur({ radius: 30, angle: 0, start: 0.3, end: 0.9, samples: 28 }).list[0],\n Effects.progressiveBlur({ radius: 28, startRadius: 4, shape: \"radial\", center: { x: 0.4, y: 0.5 } }).list[0],\n ],\n});\n","import { Effects, type RadialBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RadialBlurEffect>({\n type: \"radialBlur\",\n surface: \"shader\",\n params: {\n amount: \"param\",\n style: \"param\",\n center: \"param\",\n samples: { type: \"f32\", value: (e) => Math.round(Math.max(2, Math.min(32, e.samples))) },\n },\n prepare: (e) => (e.amount > 0 ? {} : null),\n extras(e) {\n // Taps pull in material from farther in (zoom: out to 1/(1 - amount/2) of\n // the box; spin: round to the corners), so the smear spills past the box.\n // Reach assumes a ~360 px half extent (the packer doesn't see the box).\n const spill = e.style === \"spin\" ? Math.SQRT2 - 1 : 1 / Math.max(1 - e.amount / 2, 0.25) - 1;\n return { reach: Math.min((spill + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.radialBlur().list[0],\n Effects.radialBlur({ amount: 0.8, style: \"spin\", samples: 24 }).list[0],\n Effects.radialBlur({ amount: 0.3, center: { x: 0.3, y: 0.4 }, samples: 8 }).list[0],\n ],\n});\n","import { Effects, type RgbShiftEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RgbShiftEffect>({\n type: \"rgbShift\",\n surface: \"shader\",\n params: { red: \"param\", green: \"param\", blue: \"param\" },\n prepare(e) {\n const { red, green, blue } = e;\n return !red.x && !red.y && !green.x && !green.y && !blue.x && !blue.y ? null : {};\n },\n extras: ({ red, green, blue }) => ({\n reach: Math.max(Math.abs(red.x), Math.abs(red.y), Math.abs(green.x), Math.abs(green.y), Math.abs(blue.x), Math.abs(blue.y)),\n }),\n cases: () => [\n Effects.rgbShift().list[0],\n Effects.rgbShift({ amount: 12 }).list[0],\n Effects.rgbShift({ red: { x: 6, y: -4 }, green: { x: -3, y: 5 }, blue: { x: 0, y: 9 } }).list[0],\n ],\n});\n","import { Effects, type ScanlinesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScanlinesEffect>({\n type: \"scanlines\",\n surface: \"shader\",\n params: {\n spacing: \"param\",\n thickness: \"param\",\n darkness: \"param\",\n offset: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const r = (e.angle * Math.PI) / 180;\n return [Math.cos(r), Math.sin(r)];\n },\n },\n },\n prepare: (e) => (e.darkness > 0 ? {} : null),\n cases: () => [\n Effects.scanlines().list[0],\n Effects.scanlines({ spacing: 7, thickness: 0.3, darkness: 0.8, offset: 2, angle: 30 }).list[0],\n Effects.scanlines({ spacing: 5, thickness: 0.7, angle: 90 }).list[0],\n ],\n});\n","import { Effects, resolveEffectAxis, type ScatterEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScatterEffect>({\n type: \"scatter\",\n surface: \"shader\",\n params: {\n offset: {\n type: \"vec2f\",\n uses: [\"strength\", \"axis\"],\n value(e) {\n const axis = resolveEffectAxis(e.axis);\n return [e.strength * axis.x, e.strength * axis.y];\n },\n },\n },\n prepare: (e) => (e.strength > 0 ? {} : null),\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.strength * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.scatter().list[0],\n Effects.scatter({ strength: 24, axis: \"x\" }).list[0],\n Effects.scatter({ strength: 6, axis: \"y\" }).list[0],\n ],\n});\n","import { Effects, type SharpenEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<SharpenEffect>({\n type: \"sharpen\",\n surface: \"shader\",\n params: { amount: \"param\", radius: { type: \"f32\", value: (e) => Math.max(e.radius, 0) } },\n prepare: (e) => (e.amount === 0 ? null : {}),\n cases: () => [\n Effects.sharpen().list[0],\n Effects.sharpen({ amount: 2.5, radius: 3 }).list[0],\n ],\n});\n","import { Effects, type StreakEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<StreakEffect, { t: number; scale: number; sigma: number; rad: number }>({\n type: \"streak\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n sigma: { type: \"f32\", uses: [\"length\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare(e) {\n if (e.intensity <= 0 || e.length <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.length / 2, rad: (e.angle * Math.PI) / 180 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, 0.01, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.streak().list[0],\n Effects.streak({ angle: 30, length: 80, threshold: 0.5, intensity: 1.5 }).list[0],\n Effects.streak({ angle: 90, length: 60, threshold: 0.3, intensity: 0.7 }).list[0],\n ],\n});\n","import { Effects, type ThresholdEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ThresholdEffect>({\n type: \"threshold\",\n surface: \"shader\",\n params: { level: \"param\", smoothness: \"param\" },\n cases: () => [\n Effects.threshold().list[0],\n Effects.threshold({ level: 0.3, smoothness: 0 }).list[0],\n Effects.threshold({ level: 0.6, smoothness: 0.4 }).list[0],\n ],\n});\n","import { Effects, type TwirlEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<TwirlEffect>({\n type: \"twirl\",\n surface: \"shader\",\n params: {\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n radius: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.angle === 0 || e.radius <= 0 ? null : {}),\n extras(e) {\n // Rotation keeps r, so the swirl draws out to where a rotated point still\n // lands in the box (≤ √2 normalised). Reach assumes a ~360 px half extent.\n const r = Math.min(e.radius, Math.SQRT2);\n return { reach: Math.min((Math.max(r - 1, 0) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.twirl().list[0],\n Effects.twirl({ angle: -120, radius: 0.6 }).list[0],\n Effects.twirl({ angle: 300, radius: 1.4, center: { x: 0.35, y: 0.55 } }).list[0],\n ],\n});\n","import { Effects, resolveEffectColor, type VignetteEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VignetteEffect>({\n type: \"vignette\",\n surface: \"shader\",\n params: { color: \"param\", amount: \"param\", radius: \"param\", softness: \"param\" },\n prepare: (e) => (e.amount <= 0 || resolveEffectColor(e.color)[3] <= 0 ? null : {}),\n cases: () => [\n Effects.vignette().list[0],\n Effects.vignette({ amount: 0.9, radius: 0.4, softness: 0.3 }).list[0],\n Effects.vignette({ amount: 0.7, color: \"#ff8800\", radius: 0.6, softness: 0.8 }).list[0],\n ],\n});\n","import { Effects, type VintageEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VintageEffect>({\n type: \"vintage\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"warmth\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const w = Math.max(-1, Math.min(1, e.warmth));\n const lerp = (identity: number, sepia: number) => identity + (sepia - identity) * a;\n const warmR = w > 0 ? w * 0.15 : 0;\n const warmB = w < 0 ? -w * 0.15 : 0;\n const coolR = w < 0 ? -w * 0.05 : 0;\n const coolB = w > 0 ? w * 0.05 : 0;\n return [\n lerp(1, 0.393), lerp(0, 0.769), lerp(0, 0.189), 0, warmR - coolR,\n lerp(0, 0.349), lerp(1, 0.686), lerp(0, 0.168), 0, 0,\n lerp(0, 0.272), lerp(0, 0.534), lerp(1, 0.131), 0, -warmB + coolB,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 && e.warmth === 0 ? null : {}),\n cases: () => [\n Effects.vintage().list[0],\n Effects.vintage({ amount: 0.5, warmth: -0.8 }).list[0],\n Effects.vintage({ amount: 0, warmth: 1 }).list[0],\n ],\n});\n","import { Effects, type WaveEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<WaveEffect>({\n type: \"wave\",\n surface: \"shader\",\n params: {\n amplitude: \"param\",\n wavelength: { type: \"f32\", value: (e) => Math.max(e.wavelength, 0.01) },\n phase: { type: \"f32\", value: (e) => (((e.phase % 360) + 360) % 360) * Math.PI / 180 },\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const radians = (e.angle * Math.PI) / 180;\n return [Math.cos(radians), Math.sin(radians)];\n },\n },\n shape: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.amplitude.x === 0 && e.amplitude.y === 0 ? null : {}),\n extras: (e) => ({ reach: Math.max(Math.abs(e.amplitude.x), Math.abs(e.amplitude.y)) }),\n cases: () => [\n Effects.wave().list[0],\n Effects.wave({ amplitude: { x: 8, y: 14 }, wavelength: 60, phase: 70, angle: 35 }).list[0],\n Effects.wave({ amplitude: 16, shape: \"radial\", wavelength: 80, center: { x: 0.4, y: 0.6 } }).list[0],\n ],\n});\n","// The contract every effect port implements: one WGSL file in\n// crates/renderer/src/effects/<type>.wgsl plus one file here, both named after\n// core's effect `type`, the latter a `definePort` (_pack.ts) naming the pass's\n// parameters. Both sides are discovered automatically (build.rs and\n// `import.meta.glob`), so adding an effect never touches a shared file.\n\n/** An extra texture an effect samples via `aux_texel` (a LUT, noise, an atlas). */\nexport interface AuxTexture {\n /** Cache key: the same key reuses the uploaded texture. */\n key: string;\n width: number;\n height: number;\n /** RGBA8, straight (unpremultiplied) alpha, row-major. */\n pixels: Uint8ClampedArray;\n}\n\nexport interface Packed {\n /** Up to `MAX_PARAMS` (64) floats, laid out by `definePort` and read in WGSL through the generated `param_<name>()`. */\n params: number[];\n /** Logical px the effect can draw past its input (the layer grows by it). */\n reach?: number;\n /** Blur feeding `blurred()`: sigma along `angle`, sigma across it (logical px), angle in radians. */\n blur?: [number, number, number];\n aux?: AuxTexture;\n /** Read the node outline's inside distance field (`field(p)`, `max_distance()` in WGSL). */\n field?: boolean;\n}\n\nexport interface EffectPort<E = any> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n /**\n * The engine's path for this effect (core's `surface`). The engine applies\n * every shader-surface effect (in order) before every filter-surface one,\n * whatever the authored order; the adapter reproduces that.\n */\n surface: \"shader\" | \"filter\";\n /** The engine runs it only as a backdrop effect (`mode: \"backdrop\"`). */\n backdropOnly?: boolean;\n /** Authored effect (with core's defaults filled in) → WGSL inputs, or null for a no-op. */\n pack(effect: E): Packed | null;\n /** Effects for the parity harness, built with core's `Effects` builder. */\n cases(): object[];\n}\n\nexport const PORTS: Map<string, EffectPort> = new Map(\n Object.entries(import.meta.glob<{ default: EffectPort }>(\"./*.ts\", { eager: true }))\n .filter(([path]) => !path.includes(\"/_\"))\n .map(([, m]) => [m.default.type, m.default]),\n);\n","// Backend adapter for the Rust/wgpu renderer: turns document changes into\n// deltas. Paints, paths and dash patterns are interned so each distinct value\n// crosses into WASM once.\n\nimport { encodeScene3D, GeometryTable, TextureTable } from \"./r3d/encode\";\nimport init, { Renderer } from \"../pkg/ms_renderer.js\";\nimport { BLEND_MODES, D, Doc, type ImageAsset, imageMatrix, isProjective, KIND_CODE, MASK_CODE, MEMBER_OP, memberOp, Node, type Paint, type PathData, pathBounds } from \"./doc\";\nimport { DeltaWriter, NONE, OP } from \"./protocol\";\nimport { type AuxTexture, type Packed, PORTS } from \"./effects/_port\";\nimport { isWgslShader, normalizeUniforms } from \"@motionscript/core\";\nimport { EFFECT_BLEND, packParams, SKSL_EFFECT, type UserProgram, UserShaders } from \"./user-shaders\";\n\n/** An `OP_EFFECTS` index at or above this is a user program (gpu.rs `USER_EFFECT`). */\nconst USER_EFFECT = 0x4000_0000;\n\n/** A core `shader` effect as the backend reads it. */\ninterface UserEffect { source: string; language?: string; reach?: number; uniforms?: unknown; mode?: string; blendMode?: string; clip?: boolean }\n\nlet wasm: Promise<{ memory: WebAssembly.Memory }> | null = null;\n\n/** Loads the renderer's WASM once; `url` overrides where it is served from. The first call wins. */\nexport function loadRendererWasm(url?: string | URL): Promise<{ memory: WebAssembly.Memory }> {\n wasm ??= init(url ? { module_or_path: url } : undefined) as unknown as Promise<{ memory: WebAssembly.Memory }>;\n return wasm;\n}\n\nlet device: Promise<void> | null = null;\n\n/**\n * Gets the GPU device every renderer on the page shares (gpu.rs `prewarm`).\n * Every `init` waits on it, so two surfaces mounting together ask once; a\n * failure is forgotten, so the next mount asks again.\n */\nexport function prewarmDevice(): Promise<void> {\n device ??= loadRendererWasm().then(() => Renderer.prewarm()).catch((e) => {\n device = null;\n throw e;\n });\n return device;\n}\n\n/** Forgets the shared device (lost), so the next `prewarmDevice` or mount asks for a new one. */\nexport function forgetDevice(): void {\n device = null;\n if (wasm) Renderer.forget_device();\n}\n\nconst JOIN = { miter: 0, round: 1, bevel: 2 } as const;\nconst CAP = { butt: 0, round: 1, square: 2 } as const;\nconst TILE = { clamp: 0, repeat: 1, mirror: 2, decal: 3 } as const;\nconst MEMBER_KIND = { rect: 1, ellipse: 2, path: 3 } as const;\nconst ALIGN = { left: 0, right: 1, center: 2, justify: 3 } as const;\nconst VALIGN = { top: 0, center: 1, bottom: 2 } as const;\nconst utf8 = new TextEncoder();\n/** Syncs an unused path or paint is kept before its id is freed for reuse. */\nconst KEEP_UNUSED = 120;\n\n/** A path or paint definition and the sync that last used it. */\ninterface Interned { id: number; used: number; live: boolean }\n\nfunction hashWords(words: ArrayLike<number>): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < words.length; i++) h = Math.imul(h ^ words[i], 0x01000193);\n return h >>> 0;\n}\n\n/** FNV-1a over a path's verbs and point bits, twice with different seeds. */\nfunction pathKey(d: PathData): string {\n const bits = new Uint32Array(d.points.buffer, d.points.byteOffset, d.points.length);\n let a = 0x811c9dc5, b = 0x01000193 ^ d.points.length;\n for (let i = 0; i < d.verbs.length; i++) {\n a = Math.imul(a ^ d.verbs[i], 0x01000193);\n b = Math.imul(b ^ d.verbs[i], 0x5bd1e995);\n }\n for (let i = 0; i < bits.length; i++) {\n a = Math.imul(a ^ bits[i], 0x01000193);\n b = Math.imul(b ^ bits[i], 0x5bd1e995);\n }\n return `${d.verbs.length}:${bits.length}:${a >>> 0}:${b >>> 0}`;\n}\n\nexport class WgpuBackend {\n readonly name = \"wgpu\";\n private r!: Renderer;\n private w!: DeltaWriter;\n private paintIds = new WeakMap<Paint, Interned>();\n private paintByKey = new Map<string, Interned>();\n private freePaints: number[] = [];\n private pathIds = new WeakMap<PathData, Interned>();\n private pathByKey = new Map<string, Interned>();\n private freePaths: number[] = [];\n /** Counts syncs; what a definition's `used` is measured against. */\n private generation = 0;\n /**\n * Free paths and reuse paint ids nothing has used for a while. Only for a\n * caller that hands over a new document every frame (every node rewritten,\n * so every live definition is marked used); a retained document's\n * untouched nodes would lose theirs.\n */\n collectUnused = false;\n private dashIds = new Map<string, number>();\n private nextPaint = 0;\n private nextPath = 0;\n private nextDash = 0;\n private synced = false;\n private viewport = { w: 0, h: 0 };\n lastDeltaWords = 0;\n\n async init(canvas: HTMLCanvasElement, width: number, height: number) {\n const exports = await loadRendererWasm();\n // A failure surfaces from `create`, which asks again.\n await prewarmDevice().catch(() => {});\n this.attach(await Renderer.create(canvas, width, height), exports.memory, width, height);\n }\n\n /**\n * Drives `renderer` instead of a WASM one on a canvas: anything with its\n * methods, writing deltas into `memory` (the native export's recorder,\n * `native/recorder.ts`).\n */\n attach(renderer: Renderer, memory: WebAssembly.Memory, width: number, height: number) {\n this.r = renderer;\n this.w = new DeltaWriter(this.r, memory);\n this.effectIndex = new Map(this.r.effect_names().map((n, i) => [n, i]));\n this.viewport = { w: width, h: height };\n this.shaders = new UserShaders(this.r, () => this.onShaderReady?.());\n }\n\n /** User WGSL programs on this device. */\n shaders!: UserShaders;\n /** Called when a user shader finishes compiling, so the host can draw again. */\n onShaderReady?: () => void;\n /** User shader problems seen while syncing, by message; drained by the host. */\n readonly shaderIssues = new Set<string>();\n\n /** Settles once every user shader seen so far is ready or failed (an export waits on this). */\n whenShadersReady(): Promise<void> {\n return this.shaders.whenReady();\n }\n\n private userProgram(scope: \"fill\" | \"effect\", source: string): UserProgram {\n const p = this.shaders.program(scope, source);\n const d = p.report.diagnostics[0] ?? p.browser.find((m) => m.message.startsWith(\"error\"));\n if (p.state === \"failed\" && d) {\n this.shaderIssues.add(`A WGSL shader ${scope} does not compile${d.line ? ` (line ${d.line}:${d.column})` : \"\"}: ${d.message}`);\n }\n return p;\n }\n\n adapterInfo() {\n return this.r.adapter_info();\n }\n\n /** The `GPUDevice` this backend draws with (the page's shared one). */\n gpuDevice(): unknown {\n return this.r.gpu_device();\n }\n\n setOptions(linear: boolean, dither: boolean) {\n this.r.set_options(linear, dither);\n }\n\n resize(width: number, height: number) {\n this.r.resize(width, height);\n this.viewport = { w: width, h: height };\n this.synced = false;\n }\n\n private paint(p: Paint | undefined): number {\n if (!p) return NONE;\n const known = this.paintIds.get(p);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // Image paints key on the asset id, not its bytes or source.\n const key = p.kind === \"image\" ? `image:${p.image.id}:${p.fit ?? \"fill\"}:${p.box.join(\",\")}:${p.matrix?.join(\",\") ?? \"\"}:${p.tile ?? \"\"}`\n : p.kind === \"shader\" ? `shader:${this.userProgram(\"fill\", p.source).id}:${p.box.join(\",\")}:${p.time}:${p.texture?.id ?? \"\"}:${JSON.stringify(p.uniforms)}`\n : JSON.stringify(p);\n let entry = this.paintByKey.get(key);\n if (entry) entry.used = this.generation;\n else {\n entry = { id: this.freePaints.pop() ?? this.nextPaint++, used: this.generation, live: true };\n this.paintByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n if (p.kind === \"procedural\") {\n this.procedural(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n if (p.kind === \"shader\") {\n this.shaderPaint(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n const stops = p.kind === \"solid\" || p.kind === \"image\" ? [] : p.stops;\n w.begin(12 + stops.length * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n if (p.kind === \"solid\") {\n w.u(0);\n for (let i = 0; i < 4; i++) w.f(0);\n for (const c of p.color) w.f(c);\n } else if (p.kind === \"image\") {\n // Local → normalized uv (the inverse of image px → local, over\n // the image size): geom = a b c d, color = e f id 0.\n const { m, tile } = imageMatrix(p);\n const det = m[0] * m[3] - m[1] * m[2] || 1;\n const W = p.image.width, H = p.image.height;\n const ia = m[3] / det, ib = -m[1] / det, ic = -m[2] / det, id = m[0] / det;\n const ie = (m[2] * m[5] - m[3] * m[4]) / det, iff = (m[1] * m[4] - m[0] * m[5]) / det;\n w.u(4 | (TILE[tile] << 8));\n w.f(ia / W); w.f(ib / H); w.f(ic / W); w.f(id / H);\n w.f(ie / W); w.f(iff / H); w.f(p.image.id); w.f(0);\n } else {\n const kind = p.kind === \"linear\" ? 1 : p.kind === \"radial\" ? 2 : 3;\n w.u(kind | (TILE[p.tile ?? \"clamp\"] << 8));\n if (p.kind === \"linear\") {\n w.f(p.from[0]); w.f(p.from[1]); w.f(p.to[0]); w.f(p.to[1]);\n } else if (p.kind === \"radial\") {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.radius); w.f(0);\n } else {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.startAngle); w.f(p.endAngle);\n }\n for (const c of stops[0].color) w.f(c);\n }\n w.u(stops.length);\n for (const s of stops) {\n w.f(s.offset);\n for (const c of s.color) w.f(c);\n }\n }\n this.paintIds.set(p, entry);\n return entry.id;\n }\n\n /** The engine's procedural fills as paint kinds 5–9: geom/color plus raw\n * vec4 parameter slots carried as stops (see prim.wgsl). */\n /** Paint kind 10: geom = box, color = time, texture image (−1 = none), program; stops = `Params` words. */\n private shaderPaint(id: number, p: Extract<Paint, { kind: \"shader\" }>) {\n const prog = this.userProgram(\"fill\", p.source);\n const words = prog.report.ok ? packParams(prog.report.fields, prog.report.size, p.uniforms) : new Uint32Array(0);\n const stops = Math.ceil(words.length / 4);\n const w = this.w;\n w.begin(12 + stops * 5);\n w.u(OP.DEF_PAINT); w.u(id); w.u(10);\n for (const v of p.box) w.f(v);\n w.f(p.time); w.f(p.texture ? p.texture.id : -1); w.f(prog.id); w.f(0);\n w.u(stops);\n for (let s = 0; s < stops; s++) {\n w.f(0);\n for (let k = 0; k < 4; k++) w.u(words[s * 4 + k] ?? 0);\n }\n }\n\n private procedural(id: number, p: Extract<Paint, { kind: \"procedural\" }>) {\n const f = p.fill;\n const [bx, by, bw, bh] = p.box;\n let kind: number, geom: number[], color: number[];\n const slots: number[][] = [];\n const ramp: { offset: number; color: number[] }[] = [];\n const q8 = (c: readonly number[]) => [Math.round(c[0] * 255) / 255, Math.round(c[1] * 255) / 255, Math.round(c[2] * 255) / 255, c[3]];\n if (f.type === \"dotGrid\") {\n kind = 5;\n geom = [bx + f.offset.x, by + f.offset.y, Math.max(0.01, f.spacing), Math.max(0, f.radius)];\n color = [...f.color];\n } else if (f.type === \"grid\") {\n kind = 6;\n geom = [bx + f.offset.x, by + f.offset.y, bw, bh];\n color = [...f.color];\n slots.push([Math.max(0.0001, f.divisions), Math.max(1, Math.round(f.subdivisions)), Math.max(0, f.strokeWidth) * 0.5, Math.max(0, f.subdivisionWidth) * 0.5]);\n } else if (f.type === \"stripe\") {\n kind = 7;\n const rad = ((f.angle ?? -45) * Math.PI) / 180;\n geom = [bx, by, Math.max(1, Math.round(f.gap ?? 8)), f.strokeWidth ?? 1];\n color = q8(f.color ?? [0, 0, 0, 1]);\n slots.push([Math.cos(rad), Math.sin(rad), bx, 0]);\n } else if (f.type === \"noise\") {\n kind = 8;\n geom = [bx, by, Math.ceil(bw), Math.ceil(bh)];\n const c = q8(f.color);\n color = [c[0], c[1], c[2], Math.round(f.color[3] * 255) / 255];\n slots.push([Math.max(1, Math.round(f.size.x)), Math.max(1, Math.round(f.size.y)), Math.min(1, Math.max(0, f.density)), Math.round(f.seed)]);\n } else {\n kind = 9;\n geom = [bx, by, bw, bh];\n const rad = (f.angle * Math.PI) / 180;\n const basis = { value: 0, simplex: 1, ridged: 2, worley: 3 }[f.basis] ?? 1;\n slots.push([f.frequency.x, f.frequency.y, f.offset.x, f.offset.y]);\n slots.push([f.lacunarity, f.gain, f.seed, f.contrast]);\n slots.push([Math.cos(rad), Math.sin(rad), basis, f.octaves]);\n const n = Math.max(2, Math.min(8, f.colors.length));\n for (let i = 0; i < n; i++) {\n ramp.push({ offset: f.stops[Math.min(i, f.stops.length - 1)] ?? i / (n - 1), color: [...f.colors[Math.min(i, f.colors.length - 1)]] });\n }\n color = ramp[0].color;\n }\n const n = slots.length + ramp.length;\n const w = this.w;\n w.begin(12 + n * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n w.u(kind);\n for (const v of geom) w.f(v);\n for (const v of color) w.f(v);\n w.u(n);\n for (const s of slots) { w.f(0); for (const v of s) w.f(v); }\n for (const s of ramp) { w.f(s.offset); for (const v of s.color) w.f(v); }\n }\n\n private pathId(d: PathData): number {\n const known = this.pathIds.get(d);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // By content, so a shape rebuilt unchanged keeps its id, and with it\n // every cache keyed on the path (outline, bands, distance field).\n const key = pathKey(d);\n const same = this.pathByKey.get(key);\n if (same) {\n same.used = this.generation;\n this.pathIds.set(d, same);\n return same.id;\n }\n const entry: Interned = { id: this.freePaths.pop() ?? this.nextPath++, used: this.generation, live: true };\n this.pathByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n const vw = Math.ceil(d.verbs.length / 4);\n w.begin(4 + vw + d.points.length);\n w.u(OP.DEF_PATH);\n w.u(id);\n w.u(d.verbs.length);\n w.u(d.points.length / 2);\n for (let i = 0; i < vw; i++) {\n const v = d.verbs;\n const b = i * 4;\n w.u((v[b] ?? 0) | ((v[b + 1] ?? 0) << 8) | ((v[b + 2] ?? 0) << 16) | ((v[b + 3] ?? 0) << 24));\n }\n for (let i = 0; i < d.points.length; i++) w.f(d.points[i]);\n this.pathIds.set(d, entry);\n return id;\n }\n\n /** Frees the paths and paint ids `collectUnused` says nothing uses any more. */\n private sweep() {\n const before = this.generation - KEEP_UNUSED;\n for (const [key, e] of this.pathByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.pathByKey.delete(key);\n this.w.begin(2);\n this.w.u(OP.FREE_PATH); this.w.u(e.id);\n this.freePaths.push(e.id);\n }\n for (const [key, e] of this.paintByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.paintByKey.delete(key);\n this.freePaints.push(e.id);\n }\n }\n\n private dash(intervals: number[] | undefined, phase = 0): number {\n if (!intervals || intervals.length === 0) return NONE;\n const key = intervals.join(\",\") + \"@\" + phase;\n let id = this.dashIds.get(key);\n if (id === undefined) {\n id = this.nextDash++;\n this.dashIds.set(key, id);\n const w = this.w;\n w.begin(4 + intervals.length);\n w.u(OP.DEF_DASH);\n w.u(id);\n w.u(intervals.length);\n w.f(phase);\n for (const v of intervals) w.f(v);\n }\n return id;\n }\n\n private writeNode(n: Node, bits: number) {\n const w = this.w;\n const id = n.id;\n if (bits & D.CREATE) {\n w.begin(3);\n w.u(OP.CREATE); w.u(id); w.u(KIND_CODE[n.kind]);\n }\n if (bits & D.TRANSFORM) {\n const t = n.transform;\n if (isProjective(t)) {\n w.begin(11);\n w.u(OP.TRANSFORM3); w.u(id);\n for (const v of t) w.f(v);\n } else {\n // Affine (or a 3×3 with a trivial last row): six numbers.\n w.begin(8);\n w.u(OP.TRANSFORM); w.u(id);\n for (let k = 0; k < 6; k++) w.f(t[k]);\n }\n }\n if (bits & D.EFFECTS && (n.effects?.length || !(bits & D.CREATE))) this.writeEffects(n);\n if (bits & D.OPACITY && (n.opacity !== 1 || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.OPACITY); w.u(id); w.f(n.opacity);\n }\n if (bits & D.BLEND && (n.blend !== \"normal\" || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.BLEND); w.u(id); w.u(BLEND_MODES.indexOf(n.blend));\n }\n if (n.kind === \"group\") {\n if (bits & D.CLIP && (n.clip || !(bits & D.CREATE))) {\n const c = n.clip;\n const pid = c?.path ? this.pathId(c.path) : NONE;\n const r = c?.path ? pathBounds(c.path) : [c?.x ?? 0, c?.y ?? 0, (c?.x ?? 0) + (c?.w ?? 0), (c?.y ?? 0) + (c?.h ?? 0)];\n w.begin(10);\n w.u(OP.CLIP); w.u(id); w.u(c ? 1 : 0);\n for (const v of r) w.f(v);\n w.f(c?.r ?? 0); w.u(pid); w.u(c?.evenOdd ? 1 : 0);\n }\n if (bits & D.MASK && (n.mask || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.MASK); w.u(id); w.u(n.mask ? MASK_CODE[n.mask] : 0);\n }\n if (bits & D.FILTER && (n.filter || !(bits & D.CREATE))) {\n const f = n.filter;\n w.begin(10);\n w.u(OP.FILTER); w.u(id);\n if (!f) {\n w.u(0); for (let i = 0; i < 7; i++) w.f(0);\n } else if (f.kind === \"blur\") {\n w.u(1); w.f(f.sigma); for (let i = 0; i < 6; i++) w.f(0);\n } else {\n w.u(2); w.f(f.sigma); w.f(f.dx); w.f(f.dy); for (const c of f.color) w.f(c);\n }\n }\n if (bits & D.CHILDREN) {\n w.begin(3 + n.children.length);\n w.u(OP.CHILDREN); w.u(id); w.u(n.children.length);\n for (const c of n.children) w.u(c.id);\n }\n return;\n }\n if (bits & D.SIZE) {\n w.begin(4);\n w.u(OP.SIZE); w.u(id); w.f(n.w); w.f(n.h);\n }\n if (bits & D.RADII && n.kind === \"rect\") {\n w.begin(6);\n w.u(OP.RADII); w.u(id);\n for (const v of n.radii) w.f(v);\n }\n if (bits & D.MEMBERS && n.members) {\n const ms = n.members;\n const pids = ms.map((m) => (m.kind === \"path\" && m.path ? this.pathId(m.path) : NONE));\n w.begin(3 + ms.length * 16);\n w.u(OP.MEMBERS); w.u(id); w.u(ms.length);\n ms.forEach((m, k) => {\n w.u(MEMBER_KIND[m.kind]); w.u(MEMBER_OP[memberOp(m)]);\n for (const v of m.transform ?? [1, 0, 0, 1, 0, 0]) w.f(v);\n w.f(m.w ?? 0); w.f(m.h ?? 0);\n for (const v of m.radii ?? [0, 0, 0, 0]) w.f(v);\n w.u(pids[k]); w.u(m.evenOdd ? 1 : 0);\n });\n }\n if (bits & D.TEXT && n.text) {\n const t = n.text;\n const strings = t.runs.map((r) => [utf8.encode(r.family), utf8.encode(r.text)] as const);\n const words = strings.reduce((a, [f, s]) => a + 2 + Math.ceil(f.length / 4) + Math.ceil(s.length / 4) + 6, 0);\n const pathId = t.path ? this.pathId(t.path) : NONE;\n const runPaints = t.runs.map((r) => this.paint(r.paint));\n w.begin(12 + words);\n w.u(OP.TEXT); w.u(id);\n w.u(ALIGN[t.align ?? \"center\"]); w.u(VALIGN[t.verticalAlign ?? \"center\"]); w.u(t.wrap ? 1 : 0);\n w.f(t.fontSize === \"autofit\" ? 0 : t.runs.length === 1 ? t.runs[0].size : 0); w.f(t.minFontSize ?? 0);\n w.f(t.lineHeight ?? 0); w.f(t.width ?? 0); w.f(t.height ?? 0);\n w.u(t.runs.length);\n t.runs.forEach((r, k) => {\n w.u(r.decoration === \"underline\" ? 1 : r.decoration === \"lineThrough\" ? 2 : 0);\n w.u(runPaints[k]);\n w.f(r.size); w.f(r.weight ?? 400); w.u(r.italic ? 1 : 0); w.f(r.letterSpacing ?? 0);\n for (const bytes of strings[k]) {\n w.u(bytes.length);\n for (let i = 0; i < bytes.length; i += 4) {\n w.u((bytes[i] ?? 0) | ((bytes[i + 1] ?? 0) << 8) | ((bytes[i + 2] ?? 0) << 16) | ((bytes[i + 3] ?? 0) << 24));\n }\n }\n });\n w.u(pathId);\n }\n if (bits & D.PATH && n.path) {\n const pid = this.pathId(n.path);\n w.begin(4);\n w.u(OP.PATH); w.u(id); w.u(pid); w.u(n.evenOdd ? 1 : 0);\n }\n if (bits & D.FILL) {\n const p = this.paint(n.fill);\n w.begin(3);\n w.u(OP.FILL); w.u(id); w.u(p);\n }\n if (bits & D.STROKE && (n.stroke || !(bits & D.CREATE))) {\n const s = n.stroke;\n const p = this.paint(s?.paint);\n const dash = this.dash(s?.dash, s?.dashPhase);\n w.begin(8);\n w.u(OP.STROKE); w.u(id); w.u(p);\n w.f(s?.width ?? 0); w.u(JOIN[s?.join ?? \"miter\"]); w.u(CAP[s?.cap ?? \"butt\"]); w.f(s?.miter ?? 4); w.u(dash);\n }\n if (bits & D.SHADOWS && (n.shadows.length || !(bits & D.CREATE))) {\n w.begin(3 + n.shadows.length * 8);\n w.u(OP.SHADOWS); w.u(id); w.u(n.shadows.length);\n for (const s of n.shadows) {\n w.f(s.dx); w.f(s.dy); w.f(s.sigma); w.f(s.spread);\n for (const c of s.color) w.f(c);\n }\n }\n }\n\n private uploaded = new Map<number, number>();\n /** What 3D scenes recorded that the encoder doesn't carry yet. */\n readonly missing3d = new Set<string>();\n /** Per 3D scene asset, its texture ids (stable across versions). */\n private textures3d = new Map<number, TextureTable>();\n /** Per 3D scene asset, the geometry its renderer keeps. */\n private geometries3d = new Map<number, GeometryTable>();\n\n /** Uploads a scene's new data textures, and binds its images and surfaces\n * from the image store (converted on the GPU). Image ids restart with\n * every frame's doc, so a bind made on an earlier frame can name another\n * asset now, the scene's own target included: every image and surface the\n * scene has asked for is bound again, to this frame's id, on every sync. */\n private bindTextures3d(img: ImageAsset, table: TextureTable) {\n const fresh = new Set(table.pending.splice(0));\n for (const req of fresh) {\n const t = req.texture;\n if (\"data\" in t) this.r.scene3d_pixels(img.id, req.id, Uint8Array.from(t.data as ArrayLike<number>), t.width, t.height, req.srgb);\n }\n for (const req of table.all.values()) {\n const t = req.texture;\n if (\"data\" in t) continue;\n const source = \"src\" in t ? img.links3d?.images?.[t.src] : img.links3d?.surfaces?.get(t);\n if (source) this.r.scene3d_bind(img.id, req.id, source.id, req.srgb);\n else if (fresh.has(req)) this.missing3d.add(\"src\" in t ? `image:${t.src}` : \"surface\");\n }\n }\n private scene3dSigs = new Map<number, string>();\n /** Ids are positional per frame, so a scene's id can turn into a surface or\n * an image; the renderer drops that scene, and so must what is kept for it. */\n private forgetScene3d(id: number) {\n this.textures3d.delete(id);\n this.geometries3d.delete(id);\n this.scene3dSigs.delete(id);\n }\n /** The last sync's 3D encode (and signature) time and words. */\n private encode3dMs = 0;\n private words3d = 0;\n private effectIndex = new Map<string, number>();\n private auxIds = new Map<string, number>();\n /** Effect types with no WGSL port, as met. */\n readonly missing = new Set<string>();\n\n /** Effect `type`s this renderer has a WGSL port for. */\n effectTypes(): string[] {\n return [...this.effectIndex.keys()].filter((t) => PORTS.has(t));\n }\n\n private auxId(aux: AuxTexture | undefined): number {\n if (!aux) return NONE;\n let id = this.auxIds.get(aux.key);\n if (id === undefined) {\n id = 1_000_000 + this.auxIds.size;\n const c = new OffscreenCanvas(aux.width, aux.height);\n c.getContext(\"2d\")!.putImageData(new ImageData(new Uint8ClampedArray(aux.pixels), aux.width, aux.height), 0, 0);\n this.r.upload_image(id, c, false);\n this.auxIds.set(aux.key, id);\n }\n return id;\n }\n\n /** OP_EFFECTS: shader-surface effects first, then filter-surface ones (the engine's order). */\n private writeEffects(n: Node) {\n type E = { type: string; clip?: boolean; mode?: string };\n const list = (n.effects ?? []) as E[];\n const packed: { index: number; flags: number; aux: number; p: Packed; words?: Uint32Array }[] = [];\n // Foreground: shader effects, then filters (the engine's order). Backdrop\n // (flag bit 1): the composed filter layer first, then shader effects.\n const passes = [[\"shader\", false], [\"filter\", false], [\"filter\", true], [\"shader\", true]] as const;\n for (const [surface, backdrop] of passes) {\n for (const e of list) {\n if (e.type === \"shader\") {\n // Core's surface: a backdrop shader is a shader-surface effect, a foreground one a filter.\n if ((e.mode === \"backdrop\") !== backdrop || (backdrop ? \"shader\" : \"filter\") !== surface) continue;\n const fx = this.userEffect(e as unknown as UserEffect);\n if (fx) packed.push({ ...fx, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) });\n continue;\n }\n const port = PORTS.get(e.type);\n const index = this.effectIndex.get(e.type);\n if (!port || index === undefined) {\n if (!this.missing.has(e.type)) console.info(`effect \"${e.type}\" has no WGSL port yet; skipped`);\n this.missing.add(e.type);\n continue;\n }\n if (port.surface !== surface || (e.mode === \"backdrop\") !== backdrop) continue;\n if (port.backdropOnly && !backdrop) continue;\n const p = port.pack(e);\n if (!p) continue;\n packed.push({ index, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) | (backdrop && surface === \"filter\" ? 4 : 0) | (p.field ? 8 : 0), aux: this.auxId(p.aux), p });\n }\n }\n const w = this.w;\n const box = n.effectBox ?? [0, 0, 0, 0];\n w.begin(8 + packed.reduce((a, x) => a + 8 + x.p.params.length + (x.words?.length ?? 0), 0));\n w.u(OP.EFFECTS); w.u(n.id);\n for (const v of box) w.f(v);\n w.f(n.effectTime ?? 0);\n w.u(packed.length);\n for (const x of packed) {\n w.u(x.index); w.u(x.flags); w.u(x.aux); w.f(x.p.reach ?? 0);\n const b = x.p.blur ?? [0, 0, 0];\n w.f(b[0]); w.f(b[1]); w.f(b[2]);\n w.u(x.p.params.length + (x.words?.length ?? 0));\n for (const v of x.p.params) w.f(v);\n if (x.words) for (const v of x.words) w.u(v);\n }\n }\n\n /** A user WGSL effect: params = [blend + 1 (0 = replace)], then its `Params` words. */\n private userEffect(e: UserEffect): { index: number; aux: number; p: Packed; words: Uint32Array } | null {\n if (!e.source?.trim()) return null;\n if (!isWgslShader(e)) {\n this.shaderIssues.add(SKSL_EFFECT);\n return null;\n }\n const prog = this.userProgram(\"effect\", e.source);\n if (!prog.report.ok) return null;\n const uniforms = normalizeUniforms(e.uniforms as Parameters<typeof normalizeUniforms>[0]);\n const blend = e.mode !== \"backdrop\" && e.blendMode ? (EFFECT_BLEND[e.blendMode] ?? -1) + 1 : 0;\n return { index: USER_EFFECT + prog.id, aux: NONE, p: { params: [blend], reach: Math.max(0, e.reach ?? 0) }, words: packParams(prog.report.fields, prog.report.size, uniforms) };\n }\n private frameCanvases = new Map<number, OffscreenCanvas>();\n\n /**\n * Video frames go through a (GPU-backed) 2D canvas first. Chrome's WebGPU\n * external-image copy also converts the BT.709 transfer curve to sRGB,\n * lifting darks and mids by up to 10/255; canvas 2D, players and the\n * engine's current video path apply the YUV matrix only. Still a GPU path,\n * no readback.\n */\n private colorCorrect(img: Doc[\"images\"][number]): Doc[\"images\"][number][\"source\"] {\n if (typeof VideoFrame === \"undefined\" || !(img.source instanceof VideoFrame)) return img.source;\n let c = this.frameCanvases.get(img.id);\n if (!c || c.width !== img.width || c.height !== img.height) {\n c = new OffscreenCanvas(img.width, img.height);\n this.frameCanvases.set(img.id, c);\n }\n c.getContext(\"2d\")!.drawImage(img.source, 0, 0);\n return c;\n }\n\n sync(doc: Doc) {\n this.generation++;\n this.encode3dMs = 0;\n this.words3d = 0;\n // Images first: a GPU copy per new asset or video frame version.\n for (const img of doc.images) {\n if (this.uploaded.get(img.id) === img.version) continue;\n if (img.surface) {\n this.forgetScene3d(img.id);\n this.r.set_surface(img.id, img.surface.id, img.width, img.height);\n } else if (img.scene3d) {\n const k = this.viewport.w / doc.width;\n const report = { unsupported: new Set<string>() };\n let table = this.textures3d.get(img.id);\n if (!table) this.textures3d.set(img.id, (table = new TextureTable()));\n const [pw, ph] = img.scale3d ? [Math.ceil(img.width * img.scale3d), Math.ceil(img.height * img.scale3d)] : [Math.round(img.width * k), Math.round(img.height * k)];\n const t0 = performance.now();\n let geometries = this.geometries3d.get(img.id);\n if (!geometries) this.geometries3d.set(img.id, (geometries = new GeometryTable()));\n const words = encodeScene3D(img.scene3d, report, table, geometries);\n // A scene handed over again unchanged (every frame, when the\n // caller rebuilds its document) keeps what is already drawn.\n const sig = `${pw}x${ph}:${words.length}:${hashWords(words)}`;\n this.encode3dMs += performance.now() - t0;\n this.words3d += words.length;\n if (this.scene3dSigs.get(img.id) !== sig) {\n try {\n this.r.set_scene3d(img.id, pw, ph, words);\n } catch (e) {\n // The renderer didn't take this frame's defs: start over.\n this.geometries3d.delete(img.id);\n this.scene3dSigs.delete(img.id);\n throw e;\n }\n this.scene3dSigs.set(img.id, sig);\n }\n for (const u of report.unsupported) this.missing3d.add(u);\n this.bindTextures3d(img, table);\n } else {\n this.forgetScene3d(img.id);\n this.r.upload_image(img.id, this.colorCorrect(img), img.mipmaps);\n }\n this.uploaded.set(img.id, img.version);\n }\n const w = this.w;\n if (!this.synced) {\n // Full upload: create every node first so CHILDREN can refer to them.\n for (const n of doc.nodes) this.writeNode(n, D.ALL);\n w.begin(2);\n w.u(OP.ROOT); w.u(doc.root.id);\n w.begin(8);\n w.u(OP.VIEWPORT); w.u(this.viewport.w); w.u(this.viewport.h); w.f(this.viewport.w / doc.width);\n for (const c of doc.background) w.f(c);\n this.synced = true;\n } else {\n for (const n of doc.dirty) this.writeNode(n, n.dirty);\n }\n for (const n of doc.dirty) n.dirty = 0;\n doc.dirty.clear();\n if (this.collectUnused && this.generation % 30 === 0) this.sweep();\n w.flush();\n this.lastDeltaWords = w.takeCount();\n }\n\n render() {\n this.r.render();\n }\n\n invalidate() {\n this.r.invalidate();\n }\n\n waitGpu(): Promise<void> {\n return this.r.wait_gpu();\n }\n\n async readPixels(): Promise<Uint8Array> {\n return (await this.r.read_pixels()) as Uint8Array;\n }\n\n stats(): Record<string, number> {\n const s = this.r.stats();\n return {\n buildMs: s[0], encodeMs: s[1], applyMs: s[2], prims: s[3], ops: s[4], layers: s[5],\n passes: s[6], draws: s[7], culled: s[8], tessellated: s[9], poolTextures: s[10],\n poolMiB: s[11], geomVertices: s[12], reusedPrims: s[13], cleanPrims: s[14], deltaWords: this.lastDeltaWords,\n scene3dEncodeMs: this.encode3dMs, scene3dWords: this.words3d, scene3dSetMs: s[15], scene3dDrawMs: s[16], scene3dMapsMs: s[17], surfacesDrawn: s[18], surfaces: s[19],\n };\n }\n\n registerFont(bytes: Uint8Array, family: string) {\n this.r.register_font(bytes, family);\n }\n\n destroy() {\n this.r.free();\n }\n}\n","// core's two text questions (measureText, layoutTextBlock) answered by ms-text,\n// the same shaper the renderer draws with, on the main thread.\n\nimport { type FontStyle, type Size2D, type TextBlockLayout, type TextState, withTextDescriptor } from \"@motionscript/core\";\nimport { MsText } from \"../../pkg/ms_renderer.js\";\nimport type { WgpuStorageAdapter } from \"./storage\";\n\nconst SLANT: Record<string, number> = { normal: 0, italic: 1, oblique: 2 };\nconst ALIGN: Record<string, number> = { left: 0, right: 1, center: 2, justify: 3, start: 4, end: 5 };\nconst VALIGN: Record<string, number> = { top: 0, center: 1, bottom: 2 };\n\n/** One ms-text engine per storage adapter, fed the same fonts its renderers get. */\nconst shapers = new WeakMap<WgpuStorageAdapter, MsText>();\n\nexport function shaperFor(storage: WgpuStorageAdapter): MsText {\n let ms = shapers.get(storage);\n if (!ms) {\n const shaper = (ms = new MsText());\n for (const f of storage.fonts) shaper.register_font(f.bytes, f.family);\n storage.onFont((f) => shaper.register_font(f.bytes, f.family));\n shapers.set(storage, shaper);\n }\n return ms;\n}\n\nexport function measureText(ms: MsText, text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n const [width, height] = ms.measure_text(text, fontSize, fontFamily, fontWeight, letterSpacing, SLANT[fontStyle ?? \"normal\"] ?? 0);\n return { width, height };\n}\n\ntype Any = Record<string, any>;\n\n/** layoutTextBlock: null for text on a path and for segments with a transform. */\nexport function layoutTextBlock(ms: MsText, state: Partial<TextState>): TextBlockLayout | null {\n const f = withTextDescriptor(state as never) as Any;\n if (f.path != null) return null;\n const autofit = f.fontSize === \"autofit\";\n const base = { text: String(f.text ?? \"\"), fontFamily: f.fontFamily, fontSize: autofit ? 100 : f.fontSize, fontWeight: f.fontWeight, fontStyle: f.fontStyle, letterSpacing: f.letterSpacing };\n const segments: Any[] = Array.isArray(f.segments) && f.segments.length ? f.segments : [base];\n if (segments.some((s) => (s.x ?? 0) !== 0 || (s.y ?? 0) !== 0 || (s.rotation ?? 0) !== 0 || (s.scale ?? 1) !== 1)) return null;\n const families: string[] = [];\n const runs: number[] = [];\n let text = \"\";\n for (const s of segments) {\n const family = s.fontFamily ?? base.fontFamily ?? \"\";\n let fi = families.indexOf(family);\n if (fi < 0) fi = families.push(family) - 1;\n const t = String(s.text ?? \"\");\n text += t;\n runs.push(t.length, s.fontSize ?? base.fontSize, s.fontWeight ?? base.fontWeight ?? 400, SLANT[s.fontStyle ?? base.fontStyle ?? \"normal\"] ?? 0, s.letterSpacing ?? base.letterSpacing ?? 0, fi);\n }\n const width = f.width ?? 0, height = f.height ?? 0;\n const flat = ms.text_block(\n text, new Float32Array(runs), families.join(\"\\n\"),\n autofit ? NaN : base.fontSize, f.minFontSize ?? 0, f.lineHeight ?? 0,\n ALIGN[f.textAlign ?? \"center\"] ?? 2, VALIGN[f.verticalAlign ?? \"center\"] ?? 1,\n !!f.wrap && width > 0, width, height,\n );\n if (!flat.length) return null;\n const lines: TextBlockLayout[\"lines\"] = [];\n let k = 3;\n for (let i = 0; i < flat[2]; i++) {\n const [start, end, top, bottom, n] = flat.subarray(k, k + 5);\n lines.push({ start, end, top, bottom, carets: Array.from(flat.subarray(k + 5, k + 5 + n)) });\n k += 5 + n;\n }\n return { lines, width: flat[0], height: flat[1] };\n}\n","// Page-wide GPU faults. Every surface shares one device (gpu.rs), so a lost\n// device, a WebGPU error or a panic is news for all of them: each live\n// surface queues the issue for its own takeRenderIssues(), and a lost device\n// is replaced and every surface remounted on the new one.\n\nimport type { RenderIssue } from \"@motionscript/core\";\nimport { set_panic_listener } from \"../../pkg/ms_renderer.js\";\nimport { forgetDevice, prewarmDevice } from \"../backend-wgpu\";\n\n/** What a host hears through {@link onWgpuEvent}. */\nexport type WgpuEvent =\n | { type: \"device-lost\"; reason: string; message: string }\n | { type: \"device-restored\" }\n | { type: \"gpu-error\"; error: \"validation\" | \"out-of-memory\" | \"internal\"; message: string }\n | { type: \"crashed\"; message: string };\n\n/** A live surface, as faults reach it. */\nexport interface FaultTarget {\n queueIssue(issue: RenderIssue): void;\n /** Drop the dead backend and mount the canvas again on a new device. */\n remount(): void;\n /** The renderer can no longer draw: draw nothing more. */\n halt(): void;\n}\n\n/** Recoveries allowed in {@link RECOVERY_WINDOW_MS} before a device that keeps dying is given up on. */\nconst MAX_RECOVERIES = 3;\nconst RECOVERY_WINDOW_MS = 60_000;\n/** WebGPU errors reported per page before the rest are only counted (a broken frame repeats every frame). */\nconst MAX_GPU_ERRORS = 32;\n\nconst listeners = new Set<(event: WgpuEvent) => void>();\nconst targets = new Set<FaultTarget>();\nconst watched = new WeakSet<object>();\nconst recoveries: number[] = [];\nlet gpuErrors = 0;\nlet crashed: string | null = null;\nlet panicHooked = false;\n\n/** Calls `listener` on every GPU fault on the page; returns the unsubscribe. */\nexport function onWgpuEvent(listener: (event: WgpuEvent) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\n/** The panic message once the renderer's WASM has panicked; it draws nothing after. */\nexport function crashMessage(): string | null {\n return crashed;\n}\n\nexport function addFaultTarget(target: FaultTarget): () => void {\n hookPanics();\n targets.add(target);\n if (crashed !== null) {\n target.queueIssue(crashIssue(crashed));\n target.halt();\n }\n return () => targets.delete(target);\n}\n\n/** Watches a device the renderer drew with, once: its errors and its loss. */\nexport function watchDevice(device: unknown): void {\n const d = device as GPUDeviceLike | null;\n if (!d || watched.has(d)) return;\n watched.add(d);\n d.addEventListener?.(\"uncapturederror\", (e: Event) => reportGpuError((e as Event & { error: { message: string; constructor: { name: string } } }).error));\n d.lost.then((info) => deviceLost(info.reason ?? \"unknown\", info.message ?? \"\"));\n}\n\ninterface GPUDeviceLike {\n lost: Promise<{ reason?: string; message?: string }>;\n addEventListener?(type: string, listener: (e: Event) => void): void;\n}\n\nfunction emit(event: WgpuEvent): void {\n for (const l of [...listeners]) {\n try {\n l(event);\n } catch (e) {\n console.error(\"[wgpu] a fault listener threw:\", e);\n }\n }\n}\n\nfunction broadcast(issue: RenderIssue): void {\n for (const t of targets) t.queueIssue(issue);\n}\n\nfunction reportGpuError(error: { message: string; constructor: { name: string } }): void {\n if (++gpuErrors > MAX_GPU_ERRORS) return;\n const name = error?.constructor?.name ?? \"\";\n const kind = name === \"GPUOutOfMemoryError\" ? \"out-of-memory\" : name === \"GPUInternalError\" ? \"internal\" : \"validation\";\n const message = `WebGPU ${kind} error: ${error?.message ?? String(error)}`;\n broadcast({ kind: \"gpu\", feature: `gpu:${kind}`, message });\n emit({ type: \"gpu-error\", error: kind, message });\n}\n\nfunction deviceLost(reason: string, detail: string): void {\n if (crashed !== null) return;\n forgetDevice();\n const now = performance.now();\n while (recoveries.length && now - recoveries[0] > RECOVERY_WINDOW_MS) recoveries.shift();\n const message = `The GPU device was lost (${reason}${detail ? `: ${detail}` : \"\"}); the renderer is drawing on a new one.`;\n emit({ type: \"device-lost\", reason, message });\n if (recoveries.length >= MAX_RECOVERIES) {\n crash(`The GPU device was lost ${MAX_RECOVERIES + 1} times within a minute; the renderer stopped asking for a new one.`);\n return;\n }\n recoveries.push(now);\n broadcast({ kind: \"device-lost\", message });\n for (const t of [...targets]) t.remount();\n prewarmDevice().then(() => emit({ type: \"device-restored\" }), (e) => crash(`No GPU device after a loss: ${String((e as Error)?.message ?? e)}`));\n}\n\nfunction crashIssue(message: string): RenderIssue {\n return { kind: \"crashed\", message };\n}\n\n/**\n * Marks the renderer dead at once, so nothing calls into it again, and tells\n * the surfaces and the host after: a panic arrives from inside a WASM call,\n * which must not be re-entered.\n */\nfunction crash(message: string): void {\n if (crashed !== null) return;\n crashed = message;\n queueMicrotask(() => {\n broadcast(crashIssue(message));\n for (const t of [...targets]) t.halt();\n emit({ type: \"crashed\", message });\n });\n}\n\nfunction hookPanics(): void {\n if (panicHooked) return;\n panicHooked = true;\n set_panic_listener((message: string) => crash(`The renderer panicked and draws nothing more on this page (reload to recover): ${message}`));\n}\n","// A session's render surface on the wgpu renderer: the adapter's render\n// context mounted on a <canvas>, with the preview knobs a host sets (pixel\n// ratio, view, frame, clipToFrame, frameBackground).\n\nimport { renderIssueKey, type RenderIssue, type Size2D, type TextBlockLayout, type TextState } from \"@motionscript/core\";\nimport { WgpuRenderContext } from \"../adapter/context\";\nimport { WgpuBackend } from \"../backend-wgpu\";\nimport type { Doc, Node, Xform } from \"../doc\";\nimport type { WgpuStorageAdapter } from \"./storage\";\nimport { layoutTextBlock, measureText, shaperFor } from \"./text\";\nimport { SKSL_EFFECT, SKSL_FILL } from \"../user-shaders\";\nimport { addFaultTarget, crashMessage, watchDevice } from \"./faults\";\n\ntype Shaper = ReturnType<typeof shaperFor>;\n\n/** What the adapter could not draw, logged once per kind per page. */\nconst reported = new Set<string>();\n\n/** Kinds that mean \"not loaded yet\", which a settled frame waits out. */\nexport const TRANSIENT = /-not-(?:decoded|loaded)$/;\n\n/** What a feature the adapter does not draw is called, by its exact kind or by its kind's prefix. */\nconst FEATURE_NAMES: Record<string, string> = {\n \"text:path\": \"Text on a path\",\n rasterize: \"rasterize()\",\n \"boolean:nested\": \"A boolean nested in one of another kind\",\n \"boolean:projective\": \"A boolean under a 3D (projective) transform\",\n \"cut:compound\": \"A cut through a compound shape\",\n \"stroke:union-of-booleans\": \"One stroke around several booleans\",\n \"effect:motionBlur-shutter\": \"Motion blur with an off-centre shutter or over 32 samples\",\n \"surface:error\": \"A surface texture that failed to draw\",\n \"blend:\": \"The blend mode\",\n \"fill:blend:\": \"The fill blend mode\",\n \"op:\": \"The drawing op\",\n \"fill:\": \"The fill\",\n \"effect:\": \"The effect\",\n \"3d:\": \"In 3D,\",\n};\n\nexport function missingMessage(kind: string): string {\n if (FEATURE_NAMES[kind]) return `${FEATURE_NAMES[kind]} is not drawn by the WebGPU renderer.`;\n const prefix = Object.keys(FEATURE_NAMES).filter((p) => p.endsWith(\":\") && kind.startsWith(p)).sort((a, b) => b.length - a.length)[0];\n return prefix ? `${FEATURE_NAMES[prefix]} \"${kind.slice(prefix.length)}\" is not drawn by the WebGPU renderer.` : `Not drawn by the WebGPU renderer: ${kind}.`;\n}\n\nexport class WgpuSurfaceContext extends WgpuRenderContext {\n view: { zoom: number; x: number; y: number } = { zoom: 1, x: 0, y: 0 };\n frame: Size2D | null = null;\n clipToFrame = true;\n frameBackground: \"black\" | \"transparent\" = \"black\";\n\n private canvas: HTMLCanvasElement | null = null;\n /**\n * The drawing-buffer size the host gave the canvas when it last mounted.\n * wgpu writes the canvas's width and height whenever it configures, so a\n * device that finishes starting after the host resized the canvas would\n * shrink it back; this, not the canvas, is the size to draw at.\n */\n private size = { width: 1, height: 1 };\n private backend: WgpuBackend | null = null;\n private starting: Promise<void> | null = null;\n /** The last mount rejected: a settled frame has nothing to wait for. */\n private startFailed = false;\n private startToken: object | null = null;\n private lastDoc: Doc | null = null;\n private viewportKey = \"\";\n private readonly shaper: Shaper;\n private readonly stopFonts: () => void;\n private readonly stopSettle: () => void;\n private readonly stopFaults: () => void;\n /** Page-wide faults (a lost device, a WebGPU error, a panic) since the last takeRenderIssues. */\n private faults: RenderIssue[] = [];\n /** The renderer panicked: nothing calls into it again. */\n private halted = false;\n\n constructor(private readonly store: WgpuStorageAdapter, viewport: Size2D) {\n const shaper = shaperFor(store);\n super(viewport.width, viewport.height, (text, size, family, weight, spacing, style) => measureText(shaper, text, size, family, weight, spacing, style));\n this.shaper = shaper;\n this.storage = store;\n this.images = store.images;\n this.stopFonts = store.onFont((f) => this.backend?.registerFont(f.bytes, f.family));\n // A settled frame (an export's, a seek's) is drawn again once its shaders\n // compile, or once a surface remounting after a lost device can draw.\n this.stopSettle = store.addSettler(() => {\n if (this.starting && !this.startFailed) return this.starting.catch(() => {});\n return this.backend?.shaders.hasPending() ? this.backend.whenShadersReady() : null;\n });\n this.stopFaults = addFaultTarget({\n queueIssue: (issue) => this.faults.push(issue),\n remount: () => this.remount(),\n halt: () => this.halt(),\n });\n }\n\n /** Renderer stats of the last frame (build/encode ms, draws, passes, …). */\n stats(): Record<string, number> | null {\n return this.backend?.stats() ?? null;\n }\n\n mount(target: unknown): void {\n const canvas = target as HTMLCanvasElement;\n this.size = { width: Math.max(1, canvas.width), height: Math.max(1, canvas.height) };\n if (canvas === this.canvas && (this.backend || this.starting)) {\n // A resize: the next present reconfigures to the new size.\n this.present();\n return;\n }\n this.releaseBackend();\n this.canvas = canvas;\n if (this.halted || crashMessage() !== null) return;\n const token = {};\n this.startToken = token;\n this.startFailed = false;\n const starting = (this.starting = (async () => {\n const backend = new WgpuBackend();\n await backend.init(canvas, this.size.width, this.size.height);\n if (this.startToken !== token) {\n if (!this.halted) backend.destroy();\n return;\n }\n watchDevice(backend.gpuDevice());\n // sRGB blending without dither: the engine's own look, and the canvas\n // pass draws straight into the output with no intermediate or blit.\n backend.setOptions(false, false);\n // Every frame is a new document, so unused definitions can go.\n backend.collectUnused = true;\n // A user shader that finishes compiling shows on the next draw.\n backend.onShaderReady = () => this.present();\n for (const f of this.store.fonts) backend.registerFont(f.bytes, f.family);\n this.backend = backend;\n this.starting = null;\n this.present();\n })());\n starting.catch((e) => {\n if (this.starting === starting) this.startFailed = true;\n console.error(\"[wgpu] the renderer failed to start:\", e);\n });\n }\n\n /** Settles once the mounted canvas has a device to draw with; rejects if it can't get one. */\n whenMounted(): Promise<void> {\n return this.starting ?? Promise.resolve();\n }\n\n unmount(): void {\n this.releaseBackend();\n this.canvas = null;\n }\n\n execute(callback: () => void): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed()) return;\n this.width = this.size.width / this.pixelRatio;\n this.height = this.size.height / this.pixelRatio;\n try {\n super.execute(callback);\n } finally {\n this.lastDoc = this.doc;\n this.present();\n for (const kind of this.missing) {\n if (reported.has(kind) || kind.endsWith(\"-not-decoded\")) continue;\n reported.add(kind);\n console.warn(`[wgpu] not drawn yet: ${kind}`);\n }\n }\n }\n\n /**\n * Since the last call: page-wide faults, user shaders that do not compile\n * or whose uniforms miss their `Params`, and every feature the last frame\n * asked for that this renderer does not draw, once per kind and node.\n */\n override takeRenderIssues(): RenderIssue[] {\n const out = new Map<string, RenderIssue>();\n const add = (issue: RenderIssue) => out.set(renderIssueKey(issue), issue);\n for (const issue of this.faults.splice(0)) add(issue);\n const backend = this.halted ? null : this.backend;\n for (const message of backend?.shaderIssues ?? []) {\n add({ kind: \"shader\", ...(message === SKSL_EFFECT && { feature: \"effect:shader-sksl\" }), message });\n }\n backend?.shaderIssues.clear();\n for (const issue of this.shaderIssues) add(issue);\n for (const kind of this.missing) {\n if (TRANSIENT.test(kind)) continue;\n const issue: RenderIssue = kind === \"fill:shader-sksl\"\n ? { kind: \"shader\", feature: kind, message: SKSL_FILL }\n : { kind: \"missing\", feature: kind, message: missingMessage(kind) };\n const nodes = this.missing.nodes.get(kind);\n if (!nodes?.size) add(issue);\n else for (const nodeId of nodes) add({ ...issue, nodeId });\n }\n for (const type of backend?.missing ?? []) add({ kind: \"missing\", feature: `effect:${type}`, message: missingMessage(`effect:${type}`) });\n for (const what of backend?.missing3d ?? []) add({ kind: \"missing\", feature: `3d:${what}`, message: missingMessage(`3d:${what}`) });\n return [...out.values()];\n }\n\n /** Settles once every user shader the last frames used has compiled (or failed); an export waits on it. */\n whenShadersReady(): Promise<void> {\n return this.backend?.whenShadersReady() ?? Promise.resolve();\n }\n\n override layoutTextBlock(state: Partial<TextState>): TextBlockLayout | null {\n return layoutTextBlock(this.shaper, state);\n }\n\n /** The frame (or the whole surface) as an image data URL. */\n screenshot(mime = \"image/png\", quality?: number): string | undefined {\n return this.snapshotCanvas()?.toDataURL(mime, quality);\n }\n\n /**\n * The frame (or the whole surface) copied into a fresh 2D canvas. A WebGPU\n * canvas is only readable in the task that drew it, so this draws it again first.\n */\n snapshotCanvas(): HTMLCanvasElement | undefined {\n const canvas = this.canvas;\n if (!canvas || !this.backend || !this.lastDoc) return undefined;\n this.present();\n let [x, y, w, h] = [0, 0, canvas.width, canvas.height];\n if (this.frame) {\n const pr = this.pixelRatio, z = this.view.zoom;\n const cx = canvas.width / 2 + this.view.x * pr, cy = canvas.height / 2 + this.view.y * pr;\n const fw = this.frame.width * z * pr, fh = this.frame.height * z * pr;\n x = Math.max(0, Math.round(cx - fw / 2));\n y = Math.max(0, Math.round(cy - fh / 2));\n w = Math.max(1, Math.min(canvas.width - x, Math.round(fw)));\n h = Math.max(1, Math.min(canvas.height - y, Math.round(fh)));\n }\n const out = document.createElement(\"canvas\");\n out.width = w;\n out.height = h;\n const ctx = out.getContext(\"2d\");\n if (!ctx) return undefined;\n ctx.drawImage(canvas, x, y, w, h, 0, 0, w, h);\n return out;\n }\n\n override dispose(): void {\n this.releaseBackend();\n this.stopFonts();\n this.stopSettle();\n this.stopFaults();\n this.canvas = null;\n this.lastDoc = null;\n this.store.dispose();\n super.dispose();\n }\n\n protected override rootTransform(): Xform {\n const z = this.view.zoom;\n return [z, 0, 0, z, this.width / 2 + this.view.x, this.height / 2 + this.view.y];\n }\n\n protected override clearColor(): [number, number, number, number] {\n // Transparent around a frame, so the host's panel shows there.\n return this.frame ? [0, 0, 0, 0] : [0, 0, 0, 1];\n }\n\n protected override frameGroup(root: Node): Node {\n const frame = this.frame;\n if (!frame) return root;\n const box = { x: -frame.width / 2, y: -frame.height / 2, w: frame.width, h: frame.height };\n if (this.frameBackground === \"black\") {\n this.doc.rect(root, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, fill: { kind: \"solid\", color: [0, 0, 0, 1] } });\n }\n return this.clipToFrame ? this.doc.group(root, { clip: { ...box, r: 0 } }) : root;\n }\n\n /** Hands the last recorded frame to the renderer, once it has started. */\n private present(): void {\n const backend = this.backend, canvas = this.canvas, doc = this.lastDoc;\n if (!backend || !canvas || !doc || this.halted) return;\n const { width, height } = this.size;\n // The viewport (size, scale, clear colour) is written on a full upload,\n // which a resize asks for. A canvas left at another size (see `size`)\n // is configured back.\n const key = `${width}x${height}/${doc.width}/${doc.background.join(\",\")}`;\n if (key !== this.viewportKey || canvas.width !== width || canvas.height !== height) {\n backend.resize(width, height);\n this.viewportKey = key;\n }\n try {\n backend.sync(doc);\n backend.render();\n } catch (e) {\n console.error(\"[wgpu] frame failed:\", e);\n }\n }\n\n private releaseBackend(): void {\n this.starting = null;\n this.startToken = null;\n if (!this.halted) this.backend?.destroy();\n this.backend = null;\n this.viewportKey = \"\";\n }\n\n /** The device was lost: the same canvas, mounted again on the new one (fonts, pipelines and shaders rebuilt). */\n private remount(): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed() || this.halted) return;\n this.releaseBackend();\n this.mount(canvas);\n }\n\n /** The renderer panicked: its WASM is not called again, so the backend is dropped, not freed. */\n private halt(): void {\n this.halted = true;\n this.releaseBackend();\n }\n}\n","// The renderer's calls, recorded as an export stream for the native sidecar\n// (crates/export: replays them on a native GPU and encodes with NVENC). The\n// backend drives a RecordingRenderer exactly as it drives the WASM Renderer;\n// crates/export/src/stream.rs is the reader and owns the format.\n\nimport { validate_shader } from \"../../pkg/ms_renderer.js\";\n\nexport const STREAM_MAGIC = 0x3158_534d; // \"MSX1\"\nexport const STREAM_VERSION = 1;\n\nexport const REC = {\n BEGIN: 1, APPLY: 2, FONT: 3, IMAGE: 4, SURFACE: 5, SCENE3D: 6, SCENE3D_BIND: 7, SCENE3D_PIXELS: 8,\n FREE_IMAGE: 9, SHADER_ADD: 10, SHADER_BUILD: 11, SHADER_REMOVE: 12, OPTIONS: 13, RESIZE: 14,\n FRAME: 15, AUDIO: 16, END: 17, INVALIDATE: 18, CREATE: 19,\n} as const;\nexport const NATIVE_RECORD = REC;\n\nconst utf8 = new TextEncoder();\n\n/** A growable little-endian byte buffer of whole records. */\nexport class StreamWriter {\n private buf = new Uint8Array(1 << 20);\n private view = new DataView(this.buf.buffer);\n private pos = 0;\n /** Bytes handed out by `take` so far. */\n taken = 0;\n\n constructor() {\n this.u32(STREAM_MAGIC);\n this.u32(STREAM_VERSION);\n }\n\n get size(): number {\n return this.pos;\n }\n\n private reserve(n: number) {\n if (this.pos + n <= this.buf.length) return;\n let cap = this.buf.length * 2;\n while (cap < this.pos + n) cap *= 2;\n const next = new Uint8Array(cap);\n next.set(this.buf.subarray(0, this.pos));\n this.buf = next;\n this.view = new DataView(next.buffer);\n }\n\n private u32(v: number) {\n this.reserve(4);\n this.view.setUint32(this.pos, v >>> 0, true);\n this.pos += 4;\n }\n\n /**\n * One record: `words` (u32s, numbers or a typed array viewed as words),\n * then `tail` bytes; padded to 4 bytes.\n */\n record(op: number, words: ArrayLike<number>, tail?: Uint8Array) {\n const len = words.length * 4 + (tail?.length ?? 0);\n const padded = (len + 3) & ~3;\n this.reserve(8 + padded);\n this.view.setUint32(this.pos, op, true);\n this.view.setUint32(this.pos + 4, len, true);\n this.pos += 8;\n for (let i = 0; i < words.length; i++) {\n this.view.setUint32(this.pos, words[i] >>> 0, true);\n this.pos += 4;\n }\n if (tail) {\n this.buf.set(tail, this.pos);\n this.pos += tail.length;\n }\n this.buf.fill(0, this.pos, this.pos + padded - len);\n this.pos += padded - len;\n }\n\n /** A record whose payload is raw words straight from a Uint32Array (APPLY, SCENE3D). */\n recordWords(op: number, head: ArrayLike<number>, words: Uint32Array) {\n const bytes = new Uint8Array(words.buffer, words.byteOffset, words.length * 4);\n this.record(op, head, bytes);\n }\n\n /** Everything written since the last call (a copy the caller owns). */\n take(): Uint8Array {\n const out = this.buf.slice(0, this.pos);\n this.taken += this.pos;\n this.pos = 0;\n return out;\n }\n}\n\n/** RGBA8 rows of an image source (straight alpha), read through a 2D canvas. */\nfunction pixelsOf(source: CanvasImageSource & { width?: number; height?: number }, scratch: { c?: OffscreenCanvas }): { w: number; h: number; rgba: Uint8Array } {\n const s = source as { displayWidth?: number; displayHeight?: number; naturalWidth?: number; naturalHeight?: number; videoWidth?: number; videoHeight?: number; width?: number; height?: number };\n const w = s.displayWidth ?? s.naturalWidth ?? s.videoWidth ?? s.width ?? 0;\n const h = s.displayHeight ?? s.naturalHeight ?? s.videoHeight ?? s.height ?? 0;\n if (!w || !h) throw new Error(\"upload_image: empty source\");\n let c = scratch.c;\n if (!c || c.width !== w || c.height !== h) c = scratch.c = new OffscreenCanvas(w, h);\n const ctx = c.getContext(\"2d\", { willReadFrequently: true })!;\n ctx.clearRect(0, 0, w, h);\n ctx.drawImage(source, 0, 0);\n const data = ctx.getImageData(0, 0, w, h).data;\n return { w, h, rgba: new Uint8Array(data.buffer, data.byteOffset, data.byteLength) };\n}\n\n/**\n * Stands in for the WASM `Renderer` (`pkg/ms_renderer.d.ts`): every call that\n * changes what is drawn is appended to `out`. Text, shader validation and the\n * delta encoding still run here, in JS and the renderer's WASM, exactly as for\n * a canvas; nothing touches a GPU.\n */\nexport class RecordingRenderer {\n readonly memory = new WebAssembly.Memory({ initial: 4 });\n private scratch: { c?: OffscreenCanvas } = {};\n /** Images uploaded, and how long reading their pixels took (ms). */\n imageUploads = 0;\n imageMs = 0;\n\n constructor(readonly out: StreamWriter, private readonly effects: readonly string[], width: number, height: number) {\n out.record(REC.CREATE, [width, height]);\n }\n\n delta_buffer(minWords: number): number {\n const need = minWords * 4;\n if (this.memory.buffer.byteLength < need) this.memory.grow(Math.ceil((need - this.memory.buffer.byteLength) / 65536));\n return 0;\n }\n\n delta_capacity(): number {\n return this.memory.buffer.byteLength / 4;\n }\n\n apply(words: number) {\n if (words > 0) this.out.recordWords(REC.APPLY, [], new Uint32Array(this.memory.buffer, 0, words));\n }\n\n effect_names(): string[] {\n return [...this.effects];\n }\n\n adapter_info(): string {\n return \"native export sidecar\";\n }\n\n gpu_device(): null {\n return null;\n }\n\n set_options(linear: boolean, dither: boolean) {\n this.out.record(REC.OPTIONS, [+linear, +dither]);\n }\n\n resize(width: number, height: number) {\n this.out.record(REC.RESIZE, [width, height]);\n }\n\n register_font(bytes: Uint8Array, family: string): number {\n const name = utf8.encode(family);\n const padded = new Uint8Array(((name.length + 3) & ~3) + bytes.length);\n padded.set(name);\n padded.set(bytes, (name.length + 3) & ~3);\n this.out.record(REC.FONT, [name.length], padded);\n return 0;\n }\n\n upload_image(id: number, source: CanvasImageSource, mipmaps: boolean) {\n const t0 = performance.now();\n const { w, h, rgba } = pixelsOf(source as never, this.scratch);\n this.out.record(REC.IMAGE, [id, w, h, mipmaps ? 1 : 0], rgba);\n this.imageUploads++;\n this.imageMs += performance.now() - t0;\n }\n\n set_scene3d(id: number, width: number, height: number, words: Uint32Array | number[]) {\n this.out.recordWords(REC.SCENE3D, [id, width, height], words instanceof Uint32Array ? words : Uint32Array.from(words));\n }\n\n set_surface(id: number, root: number, width: number, height: number) {\n this.out.record(REC.SURFACE, [id, root, width, height]);\n }\n\n scene3d_bind(scene: number, tex: number, image: number, srgb: boolean) {\n this.out.record(REC.SCENE3D_BIND, [scene, tex, image, +srgb]);\n }\n\n scene3d_pixels(scene: number, tex: number, rgba: Uint8Array, width: number, height: number, srgb: boolean) {\n this.out.record(REC.SCENE3D_PIXELS, [scene, tex, width, height, +srgb], rgba);\n }\n\n scene3d_skipped(_id: number): string[] {\n return [];\n }\n\n free_image(id: number) {\n this.out.record(REC.FREE_IMAGE, [id]);\n }\n\n /** Validated here (the same naga build the sidecar runs), recorded for the sidecar to compile. */\n shader_add(id: number, kind: number, source: string): string {\n const report = validate_shader(kind, source);\n if (JSON.parse(report).ok) this.out.record(REC.SHADER_ADD, [id, kind], utf8.encode(source));\n return report;\n }\n\n shader_build(id: number) {\n this.out.record(REC.SHADER_BUILD, [id]);\n }\n\n shader_remove(id: number) {\n this.out.record(REC.SHADER_REMOVE, [id]);\n }\n\n shader_formats(_kind: number): string[] {\n return [];\n }\n\n /** A frame is encoded when the export's sink says so (`REC.FRAME`), not per render. */\n render() {}\n\n invalidate() {\n this.out.record(REC.INVALIDATE, []);\n }\n\n wait_gpu(): Promise<void> {\n return Promise.resolve();\n }\n\n read_pixels(): Promise<Uint8Array> {\n return Promise.reject(new Error(\"A native export surface cannot be read back.\"));\n }\n\n stats(): Float64Array {\n return new Float64Array(20);\n }\n\n free() {}\n}\n","// A render context whose frames go to the native export sidecar instead of a\n// canvas: the same adapter and backend as WgpuSurfaceContext, over a\n// RecordingRenderer. The export's sink marks each finished frame\n// (`frameDone`); the sidecar renders and encodes it.\n\nimport { renderIssueKey, type RenderIssue, type Size2D, type TextBlockLayout, type TextState } from \"@motionscript/core\";\nimport { WgpuRenderContext } from \"../adapter/context\";\nimport { WgpuBackend } from \"../backend-wgpu\";\nimport type { Renderer } from \"../../pkg/ms_renderer.js\";\nimport type { WgpuStorageAdapter } from \"../engine/storage\";\nimport { layoutTextBlock, measureText, shaperFor } from \"../engine/text\";\nimport { missingMessage, TRANSIENT } from \"../engine/surface\";\nimport { SKSL_EFFECT, SKSL_FILL } from \"../user-shaders\";\nimport { RecordingRenderer, REC, type StreamWriter } from \"./recorder\";\n\nexport class NativeExportContext extends WgpuRenderContext {\n readonly recorder: RecordingRenderer;\n private readonly backend = new WgpuBackend();\n private readonly shaper: ReturnType<typeof shaperFor>;\n private readonly stopFonts: () => void;\n private readonly stopSettle: () => void;\n private viewportKey = \"\";\n private frameCount = 0;\n\n /**\n * `size` is the render target in pixels (the output times its\n * supersampling); `effects` the sidecar's built-in effect names in its\n * index order (`ms-export info`).\n */\n constructor(private readonly store: WgpuStorageAdapter, viewport: Size2D, readonly out: StreamWriter, effects: readonly string[], private readonly size: { width: number; height: number }) {\n const shaper = shaperFor(store);\n super(viewport.width, viewport.height, (text, s, family, weight, spacing, style) => measureText(shaper, text, s, family, weight, spacing, style));\n this.shaper = shaper;\n this.storage = store;\n this.images = store.images;\n this.recorder = new RecordingRenderer(out, effects, size.width, size.height);\n const memory = this.recorder.memory;\n this.backend.attach(this.recorder as unknown as Renderer, memory, size.width, size.height);\n this.backend.setOptions(false, false);\n this.backend.collectUnused = true;\n for (const f of store.fonts) this.backend.registerFont(f.bytes, f.family);\n this.stopFonts = store.onFont((f) => this.backend.registerFont(f.bytes, f.family));\n this.stopSettle = store.addSettler(() => (this.backend.shaders.hasPending() ? this.backend.whenShadersReady() : null));\n }\n\n mount(): void {}\n unmount(): void {}\n whenMounted(): Promise<void> {\n return Promise.resolve();\n }\n\n execute(callback: () => void): void {\n if (this.isDisposed()) return;\n this.width = this.size.width / this.pixelRatio;\n this.height = this.size.height / this.pixelRatio;\n try {\n super.execute(callback);\n } finally {\n const doc = this.doc;\n const key = `${this.size.width}x${this.size.height}/${doc.width}/${doc.background.join(\",\")}`;\n if (key !== this.viewportKey) {\n this.backend.resize(this.size.width, this.size.height);\n this.viewportKey = key;\n }\n this.backend.sync(doc);\n }\n }\n\n /** The scene as last synced is the next video frame. */\n frameDone(): void {\n this.out.record(REC.FRAME, [this.frameCount++]);\n }\n\n override takeRenderIssues(): RenderIssue[] {\n const out = new Map<string, RenderIssue>();\n const add = (issue: RenderIssue) => out.set(renderIssueKey(issue), issue);\n for (const message of this.backend.shaderIssues) {\n add({ kind: \"shader\", ...(message === SKSL_EFFECT && { feature: \"effect:shader-sksl\" }), message });\n }\n this.backend.shaderIssues.clear();\n for (const issue of this.shaderIssues) add(issue);\n for (const kind of this.missing) {\n if (TRANSIENT.test(kind)) continue;\n const issue: RenderIssue = kind === \"fill:shader-sksl\"\n ? { kind: \"shader\", feature: kind, message: SKSL_FILL }\n : { kind: \"missing\", feature: kind, message: missingMessage(kind) };\n const nodes = this.missing.nodes.get(kind);\n if (!nodes?.size) add(issue);\n else for (const nodeId of nodes) add({ ...issue, nodeId });\n }\n for (const type of this.backend.missing) add({ kind: \"missing\", feature: `effect:${type}`, message: missingMessage(`effect:${type}`) });\n for (const what of this.backend.missing3d) add({ kind: \"missing\", feature: `3d:${what}`, message: missingMessage(`3d:${what}`) });\n return [...out.values()];\n }\n\n override layoutTextBlock(state: Partial<TextState>): TextBlockLayout | null {\n return layoutTextBlock(this.shaper, state);\n }\n\n override dispose(): void {\n this.stopFonts();\n this.stopSettle();\n this.store.dispose();\n super.dispose();\n }\n}\n","// The engine's StorageAdapter for the wgpu renderer: assets decoded into what\n// the adapter's render context paints with (ImageBitmaps by asset key, video\n// frames by source and time) and font bytes for ms-text. Bytes come through\n// the host's `loadBytes` (a plain fetch by default), so a local store is honoured.\n\nimport { type AssetCatalog, type Size2D, StorageAdapter } from \"@motionscript/core\";\nimport { ALL_FORMATS, BlobSource, Input, VideoSampleSink } from \"mediabunny\";\nimport type { VideoFrames } from \"../adapter/context\";\nimport { assetKey, type Decoded } from \"../adapter/driver\";\n\n/** WebGPU's guaranteed texture edge; larger images are downscaled to fit. */\nconst MAX_TEXTURE_EDGE = 8192;\n/** Decoded frames kept per video (scrubbing back and forth reuses them). */\nconst FRAMES_PER_VIDEO = 12;\n\ninterface VideoTrack {\n duration: number;\n sink: VideoSampleSink;\n input: Input;\n /** Decoded frames by time key, oldest first. */\n frames: Map<string, ImageBitmap>;\n last: ImageBitmap | null;\n}\n\nexport interface FontFile {\n bytes: Uint8Array;\n family: string;\n}\n\nconst timeKey = (time: number) => time.toFixed(4);\n\n/** Joins the call already running for `key` instead of starting a second one. */\nfunction once<T>(running: Map<string, Promise<T>>, key: string, start: () => Promise<T>): Promise<T> {\n const existing = running.get(key);\n if (existing) return existing;\n const job = start().finally(() => running.delete(key));\n running.set(key, job);\n return job;\n}\n\nasync function fetchBytes(src: string): Promise<Blob> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`${src}: HTTP ${res.status}`);\n return res.blob();\n}\n\ntype LoadBytes = (src: string) => Promise<Blob>;\n\nconst sharedLoaders = new WeakMap<LoadBytes, LoadBytes>();\n\n/**\n * `load`, joined page-wide while a request for the same source is out: every\n * adapter (each session, still and export has its own) asking for one file\n * while it is still arriving shares the one download.\n */\nexport function sharedLoader(load: LoadBytes): LoadBytes {\n let shared = sharedLoaders.get(load);\n if (!shared) {\n const running = new Map<string, Promise<Blob>>();\n shared = (src) => once(running, src, () => load(src));\n sharedLoaders.set(load, shared);\n }\n return shared;\n}\n\nexport class WgpuStorageAdapter extends StorageAdapter implements VideoFrames {\n readonly images = new Map<string, Decoded>();\n readonly videos = new Map<string, VideoTrack>();\n /** Every font file registered so far, in order; renderers replay them. */\n readonly fonts: FontFile[] = [];\n private fontListeners = new Set<(font: FontFile) => void>();\n private registeredFamilies = new Set<string>();\n private pending = new Map<string, { src: string; time: number }>();\n /** SVGs by asset key, kept to rasterize again at the edge a draw needs. */\n private vectors = new Map<string, { img: HTMLImageElement; edge: number }>();\n /** Vector keys a draw wants sharper, and the long edge (px) it wants. */\n private upgrades = new Map<string, number>();\n /** Other work a settled frame waits for (a surface's shader compiles): a promise while there is some. */\n private settlers = new Set<() => Promise<void> | null>();\n private audioData = new Map<string, Promise<ArrayBuffer>>();\n /** Loads in flight, so a second ask joins the first (font weights share a family's files). */\n private imageLoads = new Map<string, Promise<void>>();\n private videoLoads = new Map<string, Promise<void>>();\n private fontLoads = new Map<string, Promise<boolean>>();\n private frameDecodes = new Map<string, Promise<void>>();\n private readonly loadBytes: LoadBytes;\n\n constructor(catalog: AssetCatalog, viewport: Size2D, readonly fps: number, loadBytes: LoadBytes = fetchBytes) {\n super(catalog, viewport);\n this.loadBytes = sharedLoader(loadBytes);\n }\n\n /** The session's viewport, in scene units. */\n get size(): Size2D {\n return this.viewport;\n }\n\n /** Has `renderSettled` (exports, settled seeks) also wait for what `settler` reports pending. */\n addSettler(settler: () => Promise<void> | null): () => void {\n this.settlers.add(settler);\n return () => this.settlers.delete(settler);\n }\n\n /** Calls `listener` for each font registered from now on. */\n onFont(listener: (font: FontFile) => void): () => void {\n this.fontListeners.add(listener);\n return () => this.fontListeners.delete(listener);\n }\n\n loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return Promise.resolve();\n return once(this.imageLoads, key, () => this.decodeImage(src, key));\n }\n\n private async decodeImage(src: string, key: string): Promise<void> {\n const url = this.url(src, (c) => c.getImageMeta(src));\n const blob = await this.loadBytes(url);\n let bitmap: ImageBitmap;\n if (blob.type === \"image/svg+xml\" || /\\.svg(\\?|#|$)/i.test(url)) {\n // createImageBitmap can't decode SVG; an <img> can.\n const img = new Image();\n img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(await blob.text())}`;\n await img.decode();\n bitmap = await createImageBitmap(img);\n this.vectors.set(key, { img, edge: Math.max(bitmap.width, bitmap.height) });\n } else {\n bitmap = await createImageBitmap(blob, { colorSpaceConversion: \"none\" });\n }\n const edge = Math.max(bitmap.width, bitmap.height);\n if (edge > MAX_TEXTURE_EDGE) {\n const k = MAX_TEXTURE_EDGE / edge;\n const scaled = await createImageBitmap(bitmap, {\n resizeWidth: Math.max(1, Math.round(bitmap.width * k)),\n resizeHeight: Math.max(1, Math.round(bitmap.height * k)),\n resizeQuality: \"high\",\n });\n bitmap.close();\n bitmap = scaled;\n }\n this.images.set(key, { bitmap, bytes: new Uint8Array(0), width: bitmap.width, height: bitmap.height });\n }\n\n loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key)) return Promise.resolve();\n return once(this.videoLoads, key, () => this.openVideo(src, key));\n }\n\n private async openVideo(src: string, key: string): Promise<void> {\n const url = this.url(src, (c) => c.getVideoMeta(src));\n const input = new Input({ source: new BlobSource(await this.loadBytes(url)), formats: ALL_FORMATS });\n const track = await input.getPrimaryVideoTrack();\n if (!track) {\n input.dispose();\n throw new Error(`loadVideo(${src}): no video track`);\n }\n const duration = await input.computeDuration();\n this.videos.set(key, { duration, sink: new VideoSampleSink(track), input, frames: new Map(), last: null });\n }\n\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const video = this.videos.get(key);\n if (!video) return null;\n const exact = video.frames.get(timeKey(time));\n if (exact) return exact;\n // By time as well: an echo asks for several frames of one clip at once.\n this.pending.set(`${key}@${timeKey(time)}`, { src: key, time });\n // The nearest earlier answer keeps playback from flashing empty while\n // the exact frame decodes; a settled render waits for it.\n return video.last;\n }\n\n /**\n * A draw of `src` covering `edge` device px along its long side. An SVG\n * has no resolution of its own, so one drawn larger than its raster is\n * rasterized again, at the next power-of-two multiple of its natural size.\n */\n wantImageEdge(src: string, edge: number): void {\n const key = assetKey(src);\n const vector = this.vectors.get(key);\n const image = this.images.get(key);\n if (!vector || !image || edge <= vector.edge) return;\n const natural = Math.max(image.width, image.height);\n const level = Math.min(MAX_TEXTURE_EDGE, natural * 2 ** Math.ceil(Math.log2(edge / natural)));\n if (level > vector.edge && level > (this.upgrades.get(key) ?? 0)) this.upgrades.set(key, level);\n }\n\n override hasPendingUpgrades(): boolean {\n return this.upgrades.size > 0;\n }\n\n override async warmPendingUpgrades(): Promise<boolean> {\n if (this.upgrades.size === 0) return false;\n const jobs = [...this.upgrades];\n this.upgrades.clear();\n for (const [key, edge] of jobs) {\n const vector = this.vectors.get(key), image = this.images.get(key);\n if (!vector || !image) continue;\n const k = edge / Math.max(image.width, image.height);\n const canvas = new OffscreenCanvas(Math.max(1, Math.round(image.width * k)), Math.max(1, Math.round(image.height * k)));\n canvas.getContext(\"2d\")!.drawImage(vector.img, 0, 0, canvas.width, canvas.height);\n const old = image.bitmap;\n // The natural size stays what places it; only the raster grows.\n image.bitmap = await createImageBitmap(canvas);\n vector.edge = edge;\n // Still painted by a doc until the next frame replaces it.\n queueMicrotask(() => old.close());\n }\n return true;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n const other = [...this.settlers].map((s) => s()).filter((p) => p !== null);\n if (this.pending.size === 0 && other.length === 0) return false;\n const jobs = [...this.pending.values()];\n this.pending.clear();\n await Promise.all([...jobs.map(({ src, time }) => once(this.frameDecodes, `${src}@${timeKey(time)}`, () => this.decodeFrame(src, time))), ...other]);\n return true;\n }\n\n private async decodeFrame(src: string, time: number): Promise<void> {\n const video = this.videos.get(src);\n if (!video || video.frames.has(timeKey(time))) return;\n const sample = await video.sink.getSample(time);\n if (!sample) return;\n const frame = sample.toVideoFrame();\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(frame);\n } finally {\n frame.close();\n sample.close();\n }\n video.frames.set(timeKey(time), bitmap);\n video.last = bitmap;\n while (video.frames.size > FRAMES_PER_VIDEO) {\n const [oldest, old] = video.frames.entries().next().value!;\n video.frames.delete(oldest);\n // Still painted by a doc until the next frame replaces it.\n if (old !== video.last) queueMicrotask(() => old.close());\n }\n }\n\n async loadAudio(): Promise<void> {}\n\n fetchAudioData(src: string): Promise<ArrayBuffer> {\n let data = this.audioData.get(src);\n if (!data) {\n // A video's own soundtrack is asked for under the video's key.\n const url = this.url(src, (c) => {\n try {\n return c.getAudioMeta(src);\n } catch {\n return c.getVideoMeta(src);\n }\n });\n data = (async () => (await this.loadBytes(url)).arrayBuffer())();\n this.audioData.set(src, data);\n data.catch(() => this.audioData.delete(src));\n }\n return data.then((b) => b.slice(0));\n }\n\n /** Registers every face of the family once: each weight asks under its own key. */\n loadFont(key: string, fontFamily: string): Promise<boolean> {\n if (this.registeredFamilies.has(fontFamily)) return Promise.resolve(true);\n return once(this.fontLoads, fontFamily, () => this.registerFamily(key, fontFamily));\n }\n\n private async registerFamily(key: string, fontFamily: string): Promise<boolean> {\n const metas = this.catalog.getFontFamilyMetas(fontFamily);\n if (metas.length === 0) {\n if (this.getDecodePolicy() === \"interactive\") console.warn(`[WgpuStorageAdapter] No font manifest entry for \"${key}\".`);\n return false;\n }\n const sources = [...new Set(metas.map((m) => m.src))];\n const files = await Promise.all(sources.map(async (s) => new Uint8Array(await (await this.loadBytes(s)).arrayBuffer())));\n if (this.registeredFamilies.has(fontFamily)) return true;\n for (const bytes of files) {\n const font = { bytes, family: fontFamily };\n this.fonts.push(font);\n for (const listener of this.fontListeners) listener(font);\n }\n this.registeredFamilies.add(fontFamily);\n return true;\n }\n\n override dispose(): void {\n for (const image of this.images.values()) image.bitmap.close();\n this.images.clear();\n for (const video of this.videos.values()) {\n for (const frame of video.frames.values()) frame.close();\n video.input.dispose();\n }\n this.videos.clear();\n this.pending.clear();\n this.vectors.clear();\n this.upgrades.clear();\n this.fontListeners.clear();\n this.imageLoads.clear();\n this.videoLoads.clear();\n this.fontLoads.clear();\n this.frameDecodes.clear();\n super.dispose();\n }\n\n /** The address a source's bytes live at: the manifest's, else the source itself. */\n private url(src: string, meta: (catalog: AssetCatalog) => { src?: string }): string {\n try {\n return meta(this.catalog).src || src;\n } catch {\n return src;\n }\n }\n}\n","// A user shader drawn outside any scene, by this renderer: a shader editor's\n// live preview, a library's thumbnails, an assistant's preview frames. The\n// same compile path and draw as a session's, so what an author sees here is\n// what the canvas and an export show.\n\nimport { loadRendererWasm, WgpuBackend } from \"../backend-wgpu\";\nimport { Doc, type Node, type Paint } from \"../doc\";\nimport { type ShaderDiagnostic, type ShaderReport, type ShaderScope, validateShader as validate } from \"../user-shaders\";\n\nexport type { ShaderDiagnostic, ShaderField, ShaderReport, ShaderScope } from \"../user-shaders\";\n\n/**\n * Validates a WGSL fill or effect with naga (loading the renderer's WASM on\n * first use): diagnostics located in `source`, and the reflected `Params`.\n */\nexport async function validateShader(scope: ShaderScope, source: string, wasmUrl?: string | URL): Promise<ShaderReport> {\n await loadRendererWasm(wasmUrl);\n return validate(scope, source);\n}\n\n/**\n * What the renderer puts in front of an author's code, for an editor to show\n * (the real header also holds the renderer's own, `ms_`-prefixed, code).\n */\nexport const WGSL_PRELUDE: Record<ShaderScope, string> = {\n fill: `// Provided to every WGSL fill:\nstruct FillIn {\n uv: vec2f, // 0–1 across the fill's box, y down\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_texture(uv: vec2f) -> vec4f // the fill's first texture, premultiplied\n\n// You write:\nfn fill(in: FillIn) -> vec4f // premultiplied rgba, opacity not folded in\n`,\n effect: `// Provided to every WGSL effect:\nstruct EffectIn {\n uv: vec2f, // 0–1 across the node's box, y down\n px: vec2f, // device px (what sample_src_px takes)\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n node: vec2f, // 0–1 across the node's own box: turns and scales with it\n node_size: vec2f, // the node's own box, px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_src(uv: vec2f) -> vec4f // the input at box uv: the node's layer, or the backdrop\nfn sample_src_px(px: vec2f) -> vec4f // the same at device px; clamped at the input's edge\n\n// You write:\nfn effect(in: EffectIn) -> vec4f // premultiplied rgba\n`,\n};\n\nexport interface ShaderPreviewInput {\n scope: ShaderScope;\n source: string;\n /** `Params` values by member name. */\n uniforms: Record<string, number | readonly number[]>;\n /** Seconds (`in.time`). */\n time: number;\n /** Effects: run over what is beneath the shape (`mode: \"backdrop\"`) rather than the shape's own content. */\n backdrop?: boolean;\n /** Effects: how the output composites onto the input (core blend name); absent = replaces it. */\n blendMode?: string;\n /** Effects: px the effect may draw or read past the shape. */\n reach?: number;\n /** Effects: the whole frame (default), or an inset rounded rect so the untouched content shows around it. */\n frame?: \"full\" | \"inset\";\n /** The content underneath, cover-fitted, in place of the test pattern (or of nothing, under a fill). */\n image?: ImageBitmap | null;\n /** Before/after: left of `split × width` shows the content without the shader. */\n split?: number | null;\n /** A fill's texture (`sample_texture`). */\n texture?: ImageBitmap | null;\n}\n\nexport interface ShaderStatus {\n state: \"compiling\" | \"ready\" | \"failed\" | \"empty\";\n /** naga's, then the browser's (`getCompilationInfo`). */\n diagnostics: ShaderDiagnostic[];\n}\n\nconst INSET = 0.14;\nconst RADIUS = 0.06;\n/** Coral, green and sky: far apart in hue, so a channel split reads at every edge. */\nconst DISCS: [number, number, number][] = [[0.98, 0.45, 0.4], [0.35, 0.8, 0.5], [0.35, 0.65, 0.98]];\n\n/**\n * One preview surface on its own WebGPU device. `draw` never waits: a program\n * still compiling draws what lies beneath, and the last input is drawn again\n * when it is ready (`onDraw` says so).\n */\nexport class ShaderPreview {\n /** Called after a redraw the preview made by itself (a program became ready). */\n onDraw: (() => void) | null = null;\n private last: ShaderPreviewInput | null = null;\n private images = new WeakMap<ImageBitmap, number>();\n private version = 0;\n private size = \"\";\n\n private constructor(private readonly backend: WgpuBackend, private readonly canvas: HTMLCanvasElement | OffscreenCanvas) {}\n\n static async create(canvas: HTMLCanvasElement | OffscreenCanvas, wasmUrl?: string | URL): Promise<ShaderPreview> {\n await loadRendererWasm(wasmUrl);\n const backend = new WgpuBackend();\n await backend.init(canvas as HTMLCanvasElement, Math.max(1, canvas.width), Math.max(1, canvas.height));\n backend.setOptions(false, false);\n backend.collectUnused = true;\n const preview = new ShaderPreview(backend, canvas);\n backend.onShaderReady = () => {\n if (!preview.last) return;\n preview.draw(preview.last);\n preview.onDraw?.();\n };\n return preview;\n }\n\n /** Draws `input` at the canvas's current size. */\n draw(input: ShaderPreviewInput): ShaderStatus {\n this.last = input;\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n if (this.size !== `${w}x${h}`) {\n this.backend.resize(w, h);\n this.size = `${w}x${h}`;\n }\n const doc = this.build(input, w, h);\n this.backend.sync(doc);\n this.backend.render();\n return this.status(input.scope, input.source);\n }\n\n /** Draws `input` once its program has compiled, and resolves to the frame (straight alpha). */\n async pixels(input: ShaderPreviewInput): Promise<ImageData> {\n this.draw(input);\n await this.whenReady();\n this.draw(input);\n const px = await this.backend.readPixels();\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n const out = Uint8ClampedArray.from(px.subarray(0, w * h * 4));\n for (let i = 0; i < out.length; i += 4) {\n const a = out[i + 3];\n if (a === 0 || a === 255) continue;\n out[i] = (out[i] * 255) / a;\n out[i + 1] = (out[i + 1] * 255) / a;\n out[i + 2] = (out[i + 2] * 255) / a;\n }\n return new ImageData(out, w, h);\n }\n\n /** {@link pixels}, encoded. */\n async snapshot(input: ShaderPreviewInput, type = \"image/png\", quality?: number): Promise<Blob> {\n const image = await this.pixels(input);\n const out = new OffscreenCanvas(image.width, image.height);\n out.getContext(\"2d\")!.putImageData(image, 0, 0);\n return out.convertToBlob({ type, quality });\n }\n\n /** Settles once every program drawn so far is ready or failed. */\n whenReady(): Promise<void> {\n return this.backend.whenShadersReady();\n }\n\n /** A program's state and diagnostics (compiling it if it is new). */\n status(scope: ShaderScope, source: string): ShaderStatus {\n if (!source.trim()) return { state: \"empty\", diagnostics: [] };\n const p = this.backend.shaders.program(scope, source);\n return { state: p.state, diagnostics: [...p.report.diagnostics, ...p.browser] };\n }\n\n destroy(): void {\n this.backend.onShaderReady = undefined;\n this.backend.destroy();\n this.last = null;\n }\n\n private build(input: ShaderPreviewInput, w: number, h: number): Doc {\n const doc = new Doc(w, h, [0, 0, 0, 0]);\n const root = doc.root;\n const content = (parent: Node) => (input.image ? this.cover(doc, parent, input.image, w, h) : pattern(doc, parent, w, h));\n const split = input.split == null ? 0 : Math.min(1, Math.max(0, input.split)) * w;\n if (input.scope === \"fill\") {\n if (input.image) content(root);\n const paint: Paint = {\n kind: \"shader\", source: input.source, uniforms: input.uniforms as Record<string, number | number[]>,\n box: [0, 0, w, h], time: input.time, ...(input.texture ? { texture: this.asset(doc, input.texture) } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n doc.rect(host, { w, h, fill: paint });\n return doc;\n }\n content(root);\n const short = Math.min(w, h);\n const inset = input.frame === \"inset\";\n const m = inset ? short * INSET : 0;\n const box = { x: m, y: m, w: w - 2 * m, h: h - 2 * m, r: inset ? short * RADIUS : 0 };\n const effect = {\n type: \"shader\", language: \"wgsl\", source: input.source, uniforms: input.uniforms,\n mode: input.backdrop ? \"backdrop\" : \"foreground\",\n ...(input.blendMode && !input.backdrop ? { blendMode: input.blendMode } : {}),\n ...(input.reach ? { reach: input.reach } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n const effectBox: [number, number, number, number] = [box.x, box.y, box.w, box.h];\n if (input.backdrop) {\n doc.rect(host, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, radii: [box.r, box.r, box.r, box.r], effects: [effect], effectBox: [0, 0, box.w, box.h], effectTime: input.time });\n } else {\n const g = doc.group(host, { clip: box, effects: [effect], effectBox, effectTime: input.time });\n content(g);\n }\n return doc;\n }\n\n private asset(doc: Doc, bitmap: ImageBitmap) {\n const a = doc.addImage(bitmap, bitmap.width, bitmap.height, { mipmaps: false });\n let v = this.images.get(bitmap);\n if (v === undefined) this.images.set(bitmap, (v = ++this.version));\n a.version = v;\n return a;\n }\n\n private cover(doc: Doc, parent: Node, bitmap: ImageBitmap, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"image\", image: this.asset(doc, bitmap), fit: \"fill\", box: [0, 0, w, h] } });\n }\n}\n\n/**\n * The ruled test pattern an effect is previewed over: a wash with a grid and\n * three saturated discs inside a white ring, because an effect is invisible on\n * a smooth field.\n */\nfunction pattern(doc: Doc, parent: Node, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"linear\", from: [0, 0], to: [w, h], stops: [{ offset: 0, color: [0.16, 0.2, 0.42, 1] }, { offset: 1, color: [0.55, 0.25, 0.45, 1] }] } });\n const short = Math.min(w, h);\n const step = Math.max(12, Math.round(short / 12));\n const line = { kind: \"solid\" as const, color: [1, 1, 1, 0.3] as [number, number, number, number] };\n for (let x = step; x < w; x += step) doc.rect(parent, { transform: [1, 0, 0, 1, x - 0.5, 0], w: 1, h, fill: line });\n for (let y = step; y < h; y += step) doc.rect(parent, { transform: [1, 0, 0, 1, 0, y - 0.5], w, h: 1, fill: line });\n const cx = w / 2, cy = h / 2, r = short * 0.1;\n DISCS.forEach((c, i) => {\n const a = -Math.PI / 2 + (i * 2 * Math.PI) / DISCS.length;\n const x = cx + Math.cos(a) * short * 0.17, y = cy + Math.sin(a) * short * 0.17;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, x - r, y - r], w: 2 * r, h: 2 * r, fill: { kind: \"solid\", color: [...c, 1] } });\n });\n const ring = short * 0.3;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, cx - ring, cy - ring], w: 2 * ring, h: 2 * ring, stroke: { paint: { kind: \"solid\", color: [1, 1, 1, 0.85] }, width: Math.max(1.5, short / 90) } });\n}\n","// @motionscript/renderer: the wgpu renderer that @motionscript/browser's\n// createBrowserEngine() draws with. Hosts use that entry; this one is for it.\n\nimport type { MeasureContext2D, PlatformDeps, Size2D } from \"@motionscript/core\";\nimport { NativeExportContext } from \"../native/context\";\nimport { StreamWriter } from \"../native/recorder\";\nimport { loadRendererWasm, prewarmDevice } from \"../backend-wgpu\";\nimport { WgpuStorageAdapter } from \"./storage\";\nimport { WgpuSurfaceContext } from \"./surface\";\nimport { measureText, shaperFor } from \"./text\";\n\nexport { onWgpuEvent } from \"./faults\";\nexport type { WgpuEvent } from \"./faults\";\nexport { ShaderPreview, validateShader, WGSL_PRELUDE } from \"./shader-preview\";\nexport type { ShaderDiagnostic, ShaderField, ShaderPreviewInput, ShaderReport, ShaderScope, ShaderStatus } from \"./shader-preview\";\nexport type { WgpuStorageAdapter, WgpuSurfaceContext, NativeExportContext };\n\nexport interface WgpuRendererOptions {\n /** Where `ms_renderer_bg.wasm` is served; defaults to beside this module. */\n wasmUrl?: string | URL;\n /** Fetches an asset's bytes (images, video, audio, fonts); defaults to `fetch`, rejecting on a failed response. */\n loadBytes?: (src: string) => Promise<Blob>;\n}\n\n/** What a platform draws a session's frames with, and the storage and measurement they read from. */\nexport interface WgpuRenderer {\n createStorageAdapter(deps: PlatformDeps): WgpuStorageAdapter;\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext;\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D;\n dispose?(): void;\n}\n\n/** Whether this browser can run the renderer (WebGPU with an adapter). */\nexport async function isWgpuSupported(): Promise<boolean> {\n const gpu = (navigator as Navigator & { gpu?: { requestAdapter(): Promise<unknown> } }).gpu;\n if (!gpu) return false;\n try {\n return (await gpu.requestAdapter()) != null;\n } catch {\n return false;\n }\n}\n\n/**\n * Loads the renderer's WASM. Rejects where WebGPU is unavailable only once a\n * surface mounts; check {@link isWgpuSupported} first.\n */\nexport async function createWgpuRenderer(options: WgpuRendererOptions = {}): Promise<WgpuRenderer> {\n await loadRendererWasm(options.wasmUrl);\n // Started, not awaited: the device comes up while the host loads fonts and\n // builds its document, and the first mount waits for what is left.\n prewarmDevice().catch(() => {});\n const { loadBytes } = options;\n return {\n createStorageAdapter({ catalog, viewport, fps }: PlatformDeps): WgpuStorageAdapter {\n return new WgpuStorageAdapter(catalog, viewport, fps, loadBytes);\n },\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext {\n return new WgpuSurfaceContext(storage, storage.size);\n },\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D {\n const shaper = shaperFor(storage);\n return { measureText: (...args) => measureText(shaper, ...args) };\n },\n };\n}\n\n/**\n * Experimental: a render context that records the export stream for the\n * native sidecar (`crates/export`) instead of drawing. `size` is the render\n * target in pixels; `effects` the sidecar's built-in effect names in its\n * index order (`ms-export info`).\n */\nexport function createNativeExportContext(storage: WgpuStorageAdapter, options: { viewport: Size2D; effects: readonly string[]; size: { width: number; height: number } }): NativeExportContext {\n return new NativeExportContext(storage, options.viewport, new StreamWriter(), options.effects, options.size);\n}\n\nexport { NATIVE_RECORD, STREAM_VERSION as NATIVE_STREAM_VERSION } from \"../native/recorder\";\n"],"mappings":"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"}
|