@developerz.ai/ts23d 0.1.0 → 0.2.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 +11 -0
- package/CLAUDE.md +1 -1
- package/README.md +10 -5
- package/dist/{chunk-a8fxakcj.js → chunk-6b05mnmx.js} +2 -2
- package/dist/{chunk-kgvbpqqw.js → chunk-7rtfjh9f.js} +6 -5
- package/dist/chunk-7rtfjh9f.js.map +10 -0
- package/dist/{chunk-1ypfs7ga.js → chunk-8j4c28jt.js} +790 -276
- package/dist/chunk-8j4c28jt.js.map +46 -0
- package/dist/{chunk-wtqhq529.js → chunk-d1fv6hrm.js} +6 -6
- package/dist/{chunk-wtqhq529.js.map → chunk-d1fv6hrm.js.map} +1 -1
- package/dist/{chunk-gcyp9b4d.js → chunk-dbq4qf52.js} +362 -215
- package/dist/chunk-dbq4qf52.js.map +25 -0
- package/dist/{chunk-xnt2sdhf.js → chunk-drna2rny.js} +2 -2
- package/dist/{chunk-ravbb06q.js → chunk-dxvypr7y.js} +2 -2
- package/dist/{chunk-11v28977.js → chunk-f6yme003.js} +85 -71
- package/dist/{chunk-11v28977.js.map → chunk-f6yme003.js.map} +6 -6
- package/dist/{chunk-4ddzsqtc.js → chunk-hg7pf34j.js} +4 -3
- package/dist/{chunk-4ddzsqtc.js.map → chunk-hg7pf34j.js.map} +5 -5
- package/dist/{chunk-w1zyhj40.js → chunk-jq4e17tj.js} +2 -2
- package/dist/{chunk-kvcep7ft.js → chunk-y63c6zcv.js} +967 -218
- package/dist/chunk-y63c6zcv.js.map +53 -0
- package/dist/cli/args.d.ts +7 -1
- package/dist/cli/bin.js +66 -25
- package/dist/cli/bin.js.map +6 -5
- package/dist/cli/manifest.d.ts +5 -1
- package/dist/cli/texture-cache.d.ts +4 -0
- package/dist/core/definition.d.ts +7 -0
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/export/credits.d.ts +4 -0
- package/dist/export/glb-options.d.ts +48 -0
- package/dist/export/glb.d.ts +5 -35
- package/dist/export/hierarchy.d.ts +23 -0
- package/dist/export/index.d.ts +2 -1
- package/dist/export/index.js +21 -7
- package/dist/export/index.js.map +1 -1
- package/dist/export/lod-coverage.d.ts +12 -0
- package/dist/export/metadata.d.ts +2 -0
- package/dist/export/version.d.ts +2 -2
- package/dist/grammar/index.js +2 -2
- package/dist/index.js +63 -17
- package/dist/index.js.map +1 -1
- package/dist/kinds/head-armour.d.ts +3 -7
- package/dist/kinds/head-bust.d.ts +3 -2
- package/dist/kinds/head-face.d.ts +3 -1
- package/dist/kinds/head-garb.d.ts +4 -0
- package/dist/kinds/head-mesh.d.ts +4 -0
- package/dist/kinds/head-mouth.d.ts +4 -0
- package/dist/kinds/head-params.d.ts +9 -1
- package/dist/kinds/head-tone.d.ts +10 -0
- package/dist/kinds/head-torso.d.ts +35 -0
- package/dist/kinds/index.js +6 -6
- package/dist/material/cc0.d.ts +4 -0
- package/dist/material/define.d.ts +34 -0
- package/dist/material/generator.d.ts +1 -1
- package/dist/material/index.d.ts +8 -3
- package/dist/material/index.js +39 -7
- package/dist/material/index.js.map +1 -1
- package/dist/material/library.d.ts +7 -0
- package/dist/material/material-def.d.ts +30 -0
- package/dist/material/paint/canvas.d.ts +7 -0
- package/dist/material/paint/default-sheet.d.ts +3 -1
- package/dist/material/paint/fabric.d.ts +4 -0
- package/dist/material/paint/image-strip.d.ts +4 -0
- package/dist/material/paint/kit.d.ts +5 -0
- package/dist/material/paint/metal.d.ts +3 -0
- package/dist/material/paint/orm.d.ts +1 -1
- package/dist/material/paint/strip.d.ts +1 -1
- package/dist/material/paint/types.d.ts +32 -2
- package/dist/material/palette.d.ts +2 -0
- package/dist/material/slots.d.ts +5 -0
- package/dist/material/texture-source.d.ts +34 -0
- package/dist/material/trim-sheet.d.ts +20 -4
- package/dist/neural/index.js +2 -2
- package/dist/passes/index.js +2 -2
- package/dist/primitives/index.js +3 -3
- package/dist/qa/index.js +2 -2
- package/dist/render/beauty.d.ts +1 -1
- package/dist/render/index.js +3 -3
- package/dist/render/lighting.d.ts +7 -0
- package/dist/render/shade.d.ts +1 -1
- package/dist/testing/index.js +5 -5
- package/docs/README.md +4 -0
- package/docs/architecture/gltf-capabilities.md +38 -1
- package/docs/architecture/materials.md +151 -0
- package/docs/idea/10-sculpting.md +166 -0
- package/docs/idea/11-materials-authoring.md +132 -0
- package/docs/idea/12-blender-bridge.md +136 -0
- package/docs/idea/13-asset-pipeline-research.md +89 -0
- package/docs/plans/roadmap.md +12 -0
- package/package.json +2 -1
- package/recipes/boxcar/README.md +7 -0
- package/recipes/boxcar/boxcar.ts +118 -34
- package/recipes/goblin_head/README.md +27 -14
- package/recipes/goblin_head/goblin_head.ts +11 -9
- package/recipes/human_head/README.md +8 -4
- package/recipes/human_head/human_head.ts +4 -3
- package/recipes/material_swatches/material_swatches.ts +11 -5
- package/recipes/orc_head/README.md +32 -20
- package/recipes/orc_head/orc_head.ts +9 -7
- package/src/cli/args.ts +16 -3
- package/src/cli/manifest.ts +6 -0
- package/src/cli/run.ts +33 -9
- package/src/cli/texture-cache.ts +24 -0
- package/src/core/asset.ts +1 -0
- package/src/core/definition.ts +7 -0
- package/src/core/errors.ts +6 -1
- package/src/export/credits.ts +25 -0
- package/src/export/glb-options.ts +53 -0
- package/src/export/glb.ts +100 -113
- package/src/export/hierarchy.ts +122 -0
- package/src/export/index.ts +17 -1
- package/src/export/lod-coverage.ts +71 -0
- package/src/export/metadata.ts +3 -0
- package/src/export/version.ts +1 -1
- package/src/kinds/head-armour.ts +103 -73
- package/src/kinds/head-bust.ts +49 -86
- package/src/kinds/head-face.ts +94 -74
- package/src/kinds/head-garb.ts +181 -0
- package/src/kinds/head-hair.ts +74 -33
- package/src/kinds/head-mesh.ts +43 -5
- package/src/kinds/head-mouth.ts +111 -0
- package/src/kinds/head-params.ts +11 -2
- package/src/kinds/head-presets.ts +30 -27
- package/src/kinds/head-tone.ts +52 -0
- package/src/kinds/head-torso.ts +230 -0
- package/src/kinds/head.ts +8 -3
- package/src/material/cc0.ts +41 -0
- package/src/material/define.ts +130 -0
- package/src/material/generator.ts +15 -8
- package/src/material/index.ts +34 -3
- package/src/material/library.ts +196 -0
- package/src/material/material-def.ts +84 -0
- package/src/material/paint/canvas.ts +11 -1
- package/src/material/paint/compose.ts +1 -1
- package/src/material/paint/decode-png.ts +19 -13
- package/src/material/paint/default-sheet.ts +40 -28
- package/src/material/paint/fabric.ts +63 -0
- package/src/material/paint/image-strip.ts +88 -0
- package/src/material/paint/kit.ts +37 -0
- package/src/material/paint/masks.ts +3 -1
- package/src/material/paint/metal.ts +109 -0
- package/src/material/paint/orm.ts +14 -1
- package/src/material/paint/planks.ts +49 -4
- package/src/material/paint/strip.ts +35 -29
- package/src/material/paint/types.ts +45 -2
- package/src/material/paint/validate.ts +19 -3
- package/src/material/palette.ts +3 -0
- package/src/material/slots.ts +18 -0
- package/src/material/texture-source.ts +86 -0
- package/src/material/trim-sheet.ts +79 -13
- package/src/render/beauty.ts +2 -2
- package/src/render/lighting.ts +26 -0
- package/src/render/shade.ts +10 -5
- package/dist/chunk-1ypfs7ga.js.map +0 -42
- package/dist/chunk-gcyp9b4d.js.map +0 -22
- package/dist/chunk-kgvbpqqw.js.map +0 -10
- package/dist/chunk-kvcep7ft.js.map +0 -43
- /package/dist/{chunk-a8fxakcj.js.map → chunk-6b05mnmx.js.map} +0 -0
- /package/dist/{chunk-xnt2sdhf.js.map → chunk-drna2rny.js.map} +0 -0
- /package/dist/{chunk-ravbb06q.js.map → chunk-dxvypr7y.js.map} +0 -0
- /package/dist/{chunk-w1zyhj40.js.map → chunk-jq4e17tj.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,17 @@ All notable changes to `@developerz.ai/ts23d`. Format: [Keep a Changelog](https:
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.2.0] - 2026-11-07
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Package published as `@developerz.ai/ts23d` (the npm organisation's scope).
|
|
11
|
+
- Material library v2: 16 new PBR strips on a 2048² trim sheet (oak, pine, weathered and painted wood; rusty, cast, painted and galvanised iron/steel; brass, copper, aluminium, chrome; rubber, canvas, leather, plastic) with their own roughness and metalness. `defineMaterial()` registers project materials; opt-in CC0 photo strips (Poly Haven) via `bun run textures` — sha256-pinned, offline compile, credited in the GLB. The beauty renderer reflects metals. `t3d` paints the sheet at 2048² by default.
|
|
12
|
+
- Orc and goblin busts re-sculpted (anatomy, faces, mouths, gear, collectible plinth, painted tone pass); `head` gains `bust.mass`, `wrinkles`, `'vest'` bust style.
|
|
13
|
+
- Boxcar reads as painted planks, weathered roof walk, cast and rusty iron.
|
|
14
|
+
- Gallery: per-category studio lighting, PBR Neutral tone mapping, contact shadows, GTAO + MSAA on a high-quality tier with a phone fallback.
|
|
15
|
+
- Research docs: sculpting, material authoring, Blender bridge design, pro asset pipeline and CC0 libraries.
|
|
16
|
+
- One GLB with all three LODs: `t3d build` also writes `<out>/<asset>/<asset>.glb` — LOD0 in the scene, LOD1/LOD2 as `MSFT_lod` alternates outside it (listed in `extensionsUsed`, never required, so viewers without the extension show LOD0 only), `MSFT_screencoverage` view-distance hints, one shared material/texture set, motion channels on every LOD. `--lods split|single|both` (default `both`); the manifest records `files.single` and `lodCoverage`. API: `toLodGlb` / `exportLodGlb`; recipes may set `lodCoverage: [lod0→1, lod1→2, cull]`, otherwise it is derived from triangle density and size. tiger_1: one 7.07 MB file vs 7.09 MB for three split files (shared sheet); with `--sheet embed`, 10.7 MB vs 17.9 MB.
|
|
17
|
+
|
|
7
18
|
## [0.1.0] - 2026-11-07
|
|
8
19
|
|
|
9
20
|
### Added
|
package/CLAUDE.md
CHANGED
|
@@ -35,7 +35,7 @@ project that installed the package.
|
|
|
35
35
|
|---|---|
|
|
36
36
|
| Fresh clone → ready | `bun run setup` |
|
|
37
37
|
| Gate (≡ CI) | `bun run verify` · one step: `bun run verify --only <step>` · `--json` |
|
|
38
|
-
| Compile + QA recipe | `bun run t3d build recipes/t34/t34.ts --out out` |
|
|
38
|
+
| Compile + QA recipe | `bun run t3d build recipes/t34/t34.ts --out out` (lod0/1/2.glb + one `<asset>.glb` with all LODs via MSFT_lod; `--lods split\|single\|both`) |
|
|
39
39
|
| Contact sheet (READ the PNG) | `bun run t3d shot recipes/t34/t34.ts --out renders` |
|
|
40
40
|
| Beauty render (3/4, textured, shadowed) | `bun run t3d hero recipes/t34/t34.ts --out renders` |
|
|
41
41
|
| AI review pack (READ `review/*.png`, follow `review.md`) | `bun run t3d review recipes/t34/t34.ts --out review` |
|
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ The agent looks up real dimensions and photos into `recipes/<name>/README.md`, w
|
|
|
97
97
|
|
|
98
98
|
### 3. Use the GLB in your engine
|
|
99
99
|
|
|
100
|
-
`out/<asset>/lod0.glb` (and `lod1`, `lod2`) are plain glTF 2.0,
|
|
100
|
+
`out/<asset>/lod0.glb` (and `lod1`, `lod2`) are plain glTF 2.0; `out/<asset>/<asset>.glb` holds all three in one file (LOD0 in the scene, LOD1/2 as `MSFT_lod` alternates with screen-coverage switch hints; viewers without the extension show LOD0 only; `--lods split|single|both`, default both). The hooks your engine code can use:
|
|
101
101
|
|
|
102
102
|
| Hook | In the GLB |
|
|
103
103
|
|---|---|
|
|
@@ -126,7 +126,7 @@ Each ts23d row names how it's verified. The image-to-3D column cites only what v
|
|
|
126
126
|
| Property | ts23d | How it's verified | Typical image-to-3D output (per vendor docs) |
|
|
127
127
|
|---|---|---|---|
|
|
128
128
|
| Draw calls per asset | Static assets: 1. Vehicles: one per movable part (one shared material; static geometry batched into its pivot) | `toGlb` merges static parts by default (`mergeToPivots`); counts measured by `bun run bench` | One PBR material per generated model (e.g. Meshy: albedo / normal / metal / rough) |
|
|
129
|
-
| LODs | 3 from the same source | `t3d build` writes `lod0/1/2
|
|
129
|
+
| LODs | 3 from the same source | `t3d build` writes `lod0/1/2` plus one `MSFT_lod` file holding all three, each under its own triangle budget | One mesh per generation; polycount presets or a low-poly mode (Rodin, Meshy) |
|
|
130
130
|
| Named, pivoted, animatable parts | Yes | `part-names` gate; `clashes` gate sweeps every moving part | Usually one mesh; part-based output reported for CSM (3rd-party source) |
|
|
131
131
|
| Deterministic rebuild | Byte-identical | `scripts/recipes.ts` builds every recipe twice and compares hashes, in CI | Not stated |
|
|
132
132
|
| Real-world dimensions | Gated: ±5% overall, ±2% per measure | `proportions` and `measures` gates | Not stated |
|
|
@@ -220,11 +220,16 @@ Row 2: top, 3/4 rear, LOD2 at distance. Layout: [docs/idea/05-agent-loop.md](doc
|
|
|
220
220
|
`t3d hero` adds the beauty shot, and `t3d review` packs hero, sheet, close-ups, an LOD strip and a
|
|
221
221
|
checklist prompt into `out/<asset>/review/` for a second, fresh-eyes vision pass.
|
|
222
222
|
|
|
223
|
-
##
|
|
223
|
+
## Materials
|
|
224
224
|
|
|
225
|
-

|
|
226
226
|
|
|
227
|
-
|
|
227
|
+
One shared 2048² trim sheet holds 24 physically based materials: oak, pine, weathered and painted
|
|
228
|
+
wood; rusty, cast, painted and galvanised iron and steel; brass, copper, aluminium, chrome; rubber,
|
|
229
|
+
canvas, leather, plastic; plus brick, stone, slate, concrete and glass. Each has its own roughness and
|
|
230
|
+
metalness, so chrome mirrors and wood stays matte. Projects add their own with `defineMaterial`, or
|
|
231
|
+
pull a CC0 photo set from Poly Haven with `bun run textures` (hash-pinned, credited in the GLB). See
|
|
232
|
+
[materials.md](docs/architecture/materials.md).
|
|
228
233
|
|
|
229
234
|
## Quickstart
|
|
230
235
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
notImplemented2
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-hg7pf34j.js";
|
|
4
4
|
|
|
5
5
|
// src/neural/generator.ts
|
|
6
6
|
function localGenerator2(_o) {
|
|
@@ -16,4 +16,4 @@ function kubeezImages2(_o) {
|
|
|
16
16
|
export { localGenerator2, importGlb2, kubeezImages2 };
|
|
17
17
|
|
|
18
18
|
//# debugId=FD2490AA59A2DB1D64756E2164756E21
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-6b05mnmx.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
mergeToPivots2
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-dbq4qf52.js";
|
|
4
4
|
import {
|
|
5
5
|
measure2
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-jq4e17tj.js";
|
|
7
7
|
|
|
8
8
|
// src/cli/manifest.ts
|
|
9
9
|
var tris = (a) => a.parts.reduce((s, p) => s + (p.mesh ? p.mesh.indices.length / 3 : 0), 0);
|
|
10
|
-
function manifestOf2(asset, lods, files, findings) {
|
|
10
|
+
function manifestOf2(asset, lods, files, findings, lodCoverage) {
|
|
11
11
|
const top = lods[0];
|
|
12
12
|
const merged = top ? mergeToPivots2(top) : null;
|
|
13
13
|
return {
|
|
@@ -17,6 +17,7 @@ function manifestOf2(asset, lods, files, findings) {
|
|
|
17
17
|
tags: asset.tags ?? [],
|
|
18
18
|
files,
|
|
19
19
|
triangles: lods.map(tris),
|
|
20
|
+
...lodCoverage?.length ? { lodCoverage } : {},
|
|
20
21
|
drawCalls: lods.map((l) => mergeToPivots2(l, (l.glow ?? []).map((g) => g.parts)).parts.filter((p) => p.mesh).length),
|
|
21
22
|
pivots: (merged?.parts ?? []).filter((p) => !p.emitter && !p.socket).map((p) => ({
|
|
22
23
|
name: p.name,
|
|
@@ -40,5 +41,5 @@ function manifestOf2(asset, lods, files, findings) {
|
|
|
40
41
|
|
|
41
42
|
export { manifestOf2 };
|
|
42
43
|
|
|
43
|
-
//# debugId=
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
44
|
+
//# debugId=DCAF218A5B7D9F6B64756E2164756E21
|
|
45
|
+
//# sourceMappingURL=chunk-7rtfjh9f.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/manifest.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"// manifest.json per asset: what an engine pipeline or an agent needs without opening a GLB —\n// files, triangles per LOD, pivots (the names game code binds to), emitters, surfaces, QA,\n// measures with their measured values, sources.\n\nimport type { Asset, CompiledAsset } from '../core/index.ts';\nimport { mergeToPivots } from '../export/index.ts';\nimport { type Finding, measure } from '../qa/index.ts';\n\nexport interface AssetManifest {\n readonly name: string;\n readonly kind: string;\n readonly description?: string;\n readonly tags: readonly string[];\n readonly files: {\n readonly lods: readonly string[];\n /** All built LODs in one GLB (MSFT_lod), when `--lods single|both`. */\n readonly single?: string;\n readonly hero?: string;\n readonly sheet?: string;\n readonly thumb?: string;\n };\n readonly triangles: readonly number[];\n /** MSFT_screencoverage written into `files.single`: where each LOD hands over (last = cull). */\n readonly lodCoverage?: readonly number[];\n readonly drawCalls: readonly number[];\n readonly pivots: readonly { name: string; parent: string | null; motion?: string }[];\n readonly emitters: readonly { name: string; kind: string; when: string }[];\n readonly sockets: readonly { name: string; kind: string; parent: string | null }[];\n readonly surfaces: readonly string[];\n readonly real?: { length: number; width: number; height: number };\n readonly measures: readonly {\n label: string;\n spec: number;\n measured: number | null;\n source?: string;\n }[];\n readonly sources: readonly string[];\n readonly qa: { readonly pass: boolean; readonly findings: readonly Finding[] };\n}\n\nconst tris = (a: CompiledAsset): number =>\n a.parts.reduce((s, p) => s + (p.mesh ? p.mesh.indices.length / 3 : 0), 0);\n\nexport function manifestOf(\n asset: Asset,\n lods: readonly CompiledAsset[],\n files: AssetManifest['files'],\n findings: readonly Finding[],\n lodCoverage?: readonly number[],\n): AssetManifest {\n const top = lods[0];\n const merged = top ? mergeToPivots(top) : null;\n return {\n name: asset.name,\n kind: asset.kind,\n ...(asset.description ? { description: asset.description } : {}),\n tags: asset.tags ?? [],\n files,\n triangles: lods.map(tris),\n ...(lodCoverage?.length ? { lodCoverage } : {}),\n // One draw per merged mesh, glowing parts in their own emissive layer (as the GLB writes them).\n drawCalls: lods.map(\n (l) =>\n mergeToPivots(\n l,\n (l.glow ?? []).map((g) => g.parts),\n ).parts.filter((p) => p.mesh).length,\n ),\n pivots: (merged?.parts ?? [])\n .filter((p) => !p.emitter && !p.socket)\n .map((p) => ({\n name: p.name,\n parent: p.parent,\n ...(p.motion ? { motion: p.motion.kind } : {}),\n })),\n emitters: (top?.parts ?? []).flatMap((p) =>\n p.emitter ? [{ name: p.name, kind: p.emitter.kind, when: p.emitter.when ?? 'always' }] : [],\n ),\n sockets: (top?.parts ?? []).flatMap((p) =>\n p.socket ? [{ name: p.name, kind: p.socket.kind, parent: p.parent }] : [],\n ),\n surfaces: [...new Set((top?.parts ?? []).map((p) => p.surface ?? 'opaque'))].sort(),\n ...(asset.real\n ? { real: { length: asset.real.length, width: asset.real.width, height: asset.real.height } }\n : {}),\n measures: (asset.real?.measures ?? []).map((m) => ({\n label: m.label,\n spec: m.value,\n measured: top ? measure(top, m) : null,\n ...(m.source ? { source: m.source } : {}),\n })),\n sources: asset.sources ?? [],\n qa: { pass: findings.length === 0, findings },\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;AAwCA,IAAM,OAAO,CAAC,MACZ,EAAE,MAAM,OAAO,CAAC,GAAG,MAAM,KAAK,EAAE,OAAO,EAAE,KAAK,QAAQ,SAAS,IAAI,IAAI,CAAC;AAEnE,SAAS,WAAU,CACxB,OACA,MACA,OACA,UACA,aACe;AAAA,EACf,MAAM,MAAM,KAAK;AAAA,EACjB,MAAM,SAAS,MAAM,eAAc,GAAG,IAAI;AAAA,EAC1C,OAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM;AAAA,OACR,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,IAC9D,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB;AAAA,IACA,WAAW,KAAK,IAAI,IAAI;AAAA,OACpB,aAAa,SAAS,EAAE,YAAY,IAAI,CAAC;AAAA,IAE7C,WAAW,KAAK,IACd,CAAC,MACC,eACE,IACC,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CACnC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAClC;AAAA,IACA,SAAS,QAAQ,SAAS,CAAC,GACxB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EACrC,IAAI,CAAC,OAAO;AAAA,MACX,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,SACN,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,IAC9C,EAAE;AAAA,IACJ,WAAW,KAAK,SAAS,CAAC,GAAG,QAAQ,CAAC,MACpC,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,QAAQ,SAAS,CAAC,IAAI,CAAC,CAC5F;AAAA,IACA,UAAU,KAAK,SAAS,CAAC,GAAG,QAAQ,CAAC,MACnC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAC1E;AAAA,IACA,UAAU,CAAC,GAAG,IAAI,KAAK,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,QAAQ,CAAC,CAAC,EAAE,KAAK;AAAA,OAC9E,MAAM,OACN,EAAE,MAAM,EAAE,QAAQ,MAAM,KAAK,QAAQ,OAAO,MAAM,KAAK,OAAO,QAAQ,MAAM,KAAK,OAAO,EAAE,IAC1F,CAAC;AAAA,IACL,WAAW,MAAM,MAAM,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO;AAAA,MACjD,OAAO,EAAE;AAAA,MACT,MAAM,EAAE;AAAA,MACR,UAAU,MAAM,SAAQ,KAAK,CAAC,IAAI;AAAA,SAC9B,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC;AAAA,IACzC,EAAE;AAAA,IACF,SAAS,MAAM,WAAW,CAAC;AAAA,IAC3B,IAAI,EAAE,MAAM,SAAS,WAAW,GAAG,SAAS;AAAA,EAC9C;AAAA;",
|
|
8
|
+
"debugId": "DCAF218A5B7D9F6B64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|