@ifc-lite/renderer 1.35.1 → 1.36.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/dist/chunk-grid.d.ts +60 -0
- package/dist/chunk-grid.d.ts.map +1 -0
- package/dist/chunk-grid.js +47 -0
- package/dist/chunk-grid.js.map +1 -0
- package/dist/contribution-cull.d.ts +75 -0
- package/dist/contribution-cull.d.ts.map +1 -0
- package/dist/contribution-cull.js +63 -0
- package/dist/contribution-cull.js.map +1 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +24 -1
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +190 -10
- package/dist/index.js.map +1 -1
- package/dist/lod-simplify.d.ts +36 -0
- package/dist/lod-simplify.d.ts.map +1 -0
- package/dist/lod-simplify.js +101 -0
- package/dist/lod-simplify.js.map +1 -0
- package/dist/pipeline.d.ts +13 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +63 -2
- package/dist/pipeline.js.map +1 -1
- package/dist/quantize.d.ts +49 -0
- package/dist/quantize.d.ts.map +1 -0
- package/dist/quantize.js +137 -0
- package/dist/quantize.js.map +1 -0
- package/dist/render-stats.d.ts +85 -0
- package/dist/render-stats.d.ts.map +1 -0
- package/dist/render-stats.js +31 -0
- package/dist/render-stats.js.map +1 -0
- package/dist/residency.d.ts +52 -0
- package/dist/residency.d.ts.map +1 -0
- package/dist/residency.js +28 -0
- package/dist/residency.js.map +1 -0
- package/dist/scene.d.ts +186 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +818 -31
- package/dist/scene.js.map +1 -1
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +53 -0
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/types.d.ts +47 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/** Batches idle for fewer rendered frames than this are never evicted. */
|
|
5
|
+
export const MIN_EVICTION_AGE_FRAMES = 30;
|
|
6
|
+
/**
|
|
7
|
+
* Select batches to evict so `residentBytes` drops to `budgetBytes` or below.
|
|
8
|
+
* `shells` must contain only ELIGIBLE batches (resident, bucket-owned, CPU
|
|
9
|
+
* geometry retained, not drawn this frame). Returns the keys to evict, LRU
|
|
10
|
+
* first; empty when already within budget or nothing is old enough.
|
|
11
|
+
*/
|
|
12
|
+
export function selectEvictions(shells, residentBytes, budgetBytes, currentFrame, minAgeFrames = MIN_EVICTION_AGE_FRAMES) {
|
|
13
|
+
let excess = residentBytes - budgetBytes;
|
|
14
|
+
if (excess <= 0)
|
|
15
|
+
return [];
|
|
16
|
+
const candidates = shells
|
|
17
|
+
.filter((s) => currentFrame - s.lastDrawnFrame >= minAgeFrames)
|
|
18
|
+
.sort((a, b) => a.lastDrawnFrame - b.lastDrawnFrame);
|
|
19
|
+
const evict = [];
|
|
20
|
+
for (const shell of candidates) {
|
|
21
|
+
if (excess <= 0)
|
|
22
|
+
break;
|
|
23
|
+
evict.push(shell.key);
|
|
24
|
+
excess -= shell.bytes;
|
|
25
|
+
}
|
|
26
|
+
return evict;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=residency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"residency.js","sourceRoot":"","sources":["../src/residency.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoC/D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAgB1C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiC,EACjC,aAAqB,EACrB,WAAmB,EACnB,YAAoB,EACpB,eAAuB,uBAAuB;IAE9C,IAAI,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;IACzC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,UAAU,GAAG,MAAM;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC;SAC9D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,MAAM,IAAI,CAAC;YAAE,MAAM;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/scene.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ import type { Mesh, BatchedMesh, Vec3, PickClipState } from './types.js';
|
|
|
5
5
|
import type { MeshData } from '@ifc-lite/geometry';
|
|
6
6
|
import type { RenderPipeline } from './pipeline.js';
|
|
7
7
|
import { type BoundingBox, type RaycastHit } from './scene-raycaster.js';
|
|
8
|
+
import { type ResidentGpuBytes } from './render-stats.js';
|
|
9
|
+
import { type SpatialChunkingConfig } from './chunk-grid.js';
|
|
10
|
+
import { type ColdGeometryProvider } from './residency.js';
|
|
8
11
|
import type { DecodedInstancedShard } from '@ifc-lite/geometry';
|
|
9
12
|
/**
|
|
10
13
|
* Release the GPU resources owned by a batch / mesh. Every
|
|
@@ -67,6 +70,22 @@ export declare class Scene {
|
|
|
67
70
|
private lastInstancedIsolatedIds;
|
|
68
71
|
private instancedVisibilityDirty;
|
|
69
72
|
private activeBucketKey;
|
|
73
|
+
private spatialChunking;
|
|
74
|
+
private gpuBudgetBytes;
|
|
75
|
+
private residencyFrame;
|
|
76
|
+
private lastDrawnFrame;
|
|
77
|
+
private residencyRestoreQueue;
|
|
78
|
+
private residencyOverBudgetWarned;
|
|
79
|
+
private coldProvider;
|
|
80
|
+
private hostBudgetBytes;
|
|
81
|
+
private coldBuckets;
|
|
82
|
+
private dirtyBuckets;
|
|
83
|
+
private coldRestoresInFlight;
|
|
84
|
+
private hostOverBudgetWarned;
|
|
85
|
+
private hostEnforceCountdown;
|
|
86
|
+
private lodBuildsEnabled;
|
|
87
|
+
private quantizedBatchesEnabled;
|
|
88
|
+
private finalizeInProgress;
|
|
70
89
|
private nextSplitId;
|
|
71
90
|
private nextBatchId;
|
|
72
91
|
private sharedFrameOrigin;
|
|
@@ -99,6 +118,127 @@ export declare class Scene {
|
|
|
99
118
|
* the first batch is built). Per-mesh highlight/picker VBOs replicate the
|
|
100
119
|
* batch's exact f32 path against this so they render bit-coincident. */
|
|
101
120
|
getSharedFrameOrigin(): [number, number, number] | null;
|
|
121
|
+
/**
|
|
122
|
+
* Enable/disable spatial chunk bucketing (issue #1682 phase 2). When set,
|
|
123
|
+
* colour buckets are additionally partitioned by world grid cell, making
|
|
124
|
+
* batches spatially compact so per-batch frustum/contribution culling
|
|
125
|
+
* fires at chunk granularity. Pure reorganization: same triangles, same
|
|
126
|
+
* shared frame origin, same draw path — only the batch partition changes.
|
|
127
|
+
*
|
|
128
|
+
* Set BEFORE geometry loads. Existing buckets keep their keys (keys are
|
|
129
|
+
* opaque downstream), so flipping mid-model only affects meshes routed
|
|
130
|
+
* afterwards; the next finalize/recolour re-groups stragglers.
|
|
131
|
+
*/
|
|
132
|
+
setSpatialChunking(config: SpatialChunkingConfig | null): void;
|
|
133
|
+
getSpatialChunking(): SpatialChunkingConfig | null;
|
|
134
|
+
/** Set (or clear) the GPU residency budget in bytes. */
|
|
135
|
+
setGpuResidencyBudget(bytes: number | null): void;
|
|
136
|
+
getGpuResidencyBudget(): number | null;
|
|
137
|
+
/** Called once at the start of every Renderer.render() — residency ages
|
|
138
|
+
* are measured in RENDERED frames, so idle scenes never age out. */
|
|
139
|
+
beginResidencyFrame(): void;
|
|
140
|
+
/** Record that the draw loop drew this batch this frame. */
|
|
141
|
+
recordBatchDrawn(batch: BatchedMesh): void;
|
|
142
|
+
/**
|
|
143
|
+
* The draw loop wants an evicted batch back on the GPU. Queues its bucket
|
|
144
|
+
* for a time-budgeted rebuild in processResidencyRestores (driven by the
|
|
145
|
+
* app's animation loop) — the batch is skipped this frame and pops back in
|
|
146
|
+
* within a frame or two.
|
|
147
|
+
*/
|
|
148
|
+
requestBatchResidency(batch: BatchedMesh): void;
|
|
149
|
+
hasResidencyRestoreWork(): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Rebuild evicted batches from their buckets' CPU meshData, up to
|
|
152
|
+
* `budgetMs` per call (same time-slicing philosophy as flushPending).
|
|
153
|
+
* Returns the number of batches restored.
|
|
154
|
+
*/
|
|
155
|
+
processResidencyRestores(device: GPUDevice, pipeline: RenderPipeline, budgetMs?: number): number;
|
|
156
|
+
/** Wire the cold-storage source (v13 cache chunks). Null disables the tier. */
|
|
157
|
+
setColdGeometryProvider(provider: ColdGeometryProvider | null): void;
|
|
158
|
+
/**
|
|
159
|
+
* Enable LOD1 builds (issue #1682 phase 5): bucket batches built from now
|
|
160
|
+
* on (finalize, rebuild, residency restore) get a simplified second index
|
|
161
|
+
* range when it pays. Set BEFORE geometry loads; streaming fragments and
|
|
162
|
+
* partial/overlay sub-batches never build LOD.
|
|
163
|
+
*/
|
|
164
|
+
setLodBuildsEnabled(enabled: boolean): void;
|
|
165
|
+
/**
|
|
166
|
+
* Enable 12-byte lattice-quantized batch vertices (issue #1682 phase 6).
|
|
167
|
+
* ONLY call after the renderer verified its quantized pipeline variants
|
|
168
|
+
* exist (see Renderer.enableQuantizedBatches) — quantized buffers are
|
|
169
|
+
* undrawable without them. Applies to batches built from now on; every
|
|
170
|
+
* createBatchedMesh output (buckets, fragments, partial + override
|
|
171
|
+
* batches) quantizes onto the SAME 2^-10 lattice, so depth-equal overlay
|
|
172
|
+
* matching and cross-batch coincidence are preserved bit-exactly. Batches
|
|
173
|
+
* whose extent exceeds the u16 lattice range fall back to f32 silently.
|
|
174
|
+
*/
|
|
175
|
+
setQuantizedBatches(enabled: boolean): void;
|
|
176
|
+
/**
|
|
177
|
+
* Whether THIS mesh's source batch renders quantized — drives the
|
|
178
|
+
* hydrated-mesh lattice snap in createMeshFromData (a mesh whose batch
|
|
179
|
+
* fell back to f32, e.g. >64m extent, must NOT snap). Falls back to the
|
|
180
|
+
* global flag when the mesh isn't bucketed (mid-stream hydration).
|
|
181
|
+
*/
|
|
182
|
+
isMeshQuantized(meshData: MeshData): boolean;
|
|
183
|
+
/** Set (or clear) the HOST budget in bytes for bucket CPU geometry. */
|
|
184
|
+
setHostResidencyBudget(bytes: number | null): void;
|
|
185
|
+
/** CPU bytes held by bucket meshData (positions + normals + indices). */
|
|
186
|
+
getResidentCpuBytes(): number;
|
|
187
|
+
/** A bucket whose content diverged from what the cache entry holds
|
|
188
|
+
* (recolour / move / removal) must never be cold-evicted: restoring it
|
|
189
|
+
* from disk would resurrect the pre-edit geometry. */
|
|
190
|
+
private markBucketDirty;
|
|
191
|
+
/**
|
|
192
|
+
* Demote warm buckets (GPU-evicted, CPU kept) to cold (shell only) until
|
|
193
|
+
* bucket CPU bytes fit the host budget. Same LRU policy as the GPU tier.
|
|
194
|
+
* Eligibility is strict: pristine, non-overflow ("#N" sub-buckets are
|
|
195
|
+
* excluded — their piece membership cannot be re-derived unambiguously),
|
|
196
|
+
* GPU-evicted, provider present. Cold eviction removes the bucket's meshes
|
|
197
|
+
* from meshDataMap/meshDataBucket too — that is what actually frees the
|
|
198
|
+
* typed arrays.
|
|
199
|
+
*/
|
|
200
|
+
private enforceHostBudget;
|
|
201
|
+
/**
|
|
202
|
+
* Restore EVERY cold bucket to warm (used before the cold provider goes
|
|
203
|
+
* away, e.g. a federated add invalidates the entry-backed provider while
|
|
204
|
+
* primary chunks are cold — without this they would be stranded shells).
|
|
205
|
+
* Resolves when all in-flight restores settle; failures are logged by the
|
|
206
|
+
* per-bucket restore path and leave those buckets cold.
|
|
207
|
+
*/
|
|
208
|
+
drainColdTier(): Promise<void>;
|
|
209
|
+
/** Kick off the async disk restore for a cold bucket the draw loop wants.
|
|
210
|
+
* On completion the bucket is warm again and re-queued for GPU rebuild. */
|
|
211
|
+
private startColdRestore;
|
|
212
|
+
/**
|
|
213
|
+
* Synchronously rebuild EVERY evicted bucket batch (no time budget) —
|
|
214
|
+
* for one-shot capture renders (IDS/clash/BCF snapshots) whose isolation
|
|
215
|
+
* options may reveal batches that aged out under the budget. The live
|
|
216
|
+
* view never needs this: visible batches are never evicted. The budget
|
|
217
|
+
* pass re-evicts unused batches after the usual idle age.
|
|
218
|
+
* Returns the number of batches restored.
|
|
219
|
+
*/
|
|
220
|
+
restoreAllEvicted(device: GPUDevice, pipeline: RenderPipeline): number;
|
|
221
|
+
/**
|
|
222
|
+
* Evict least-recently-drawn bucket batches until the resident set fits
|
|
223
|
+
* the budget. Called after each frame's submit; destroying just-submitted
|
|
224
|
+
* buffers is safe (WebGPU defers destruction past in-flight work). Never
|
|
225
|
+
* evicts a batch drawn this frame — a visible set larger than the budget
|
|
226
|
+
* renders correctly and stays over budget (warned once).
|
|
227
|
+
*/
|
|
228
|
+
enforceGpuBudget(): void;
|
|
229
|
+
/** Destroy + drop cached partial sub-batches derived from `batch` (their
|
|
230
|
+
* sourceBatchKeys embed the batch id, so they are stale once it is
|
|
231
|
+
* evicted/replaced). */
|
|
232
|
+
private dropPartialCacheForBatch;
|
|
233
|
+
/**
|
|
234
|
+
* Bucket BASE key for a mesh: colour key, prefixed with the mesh's grid
|
|
235
|
+
* cell when spatial chunking is on. EVERY bucket-key derivation
|
|
236
|
+
* (streaming append, fragment grouping, finalize re-group, recolour move,
|
|
237
|
+
* partial-batch piece filter) must go through this so a mesh always
|
|
238
|
+
* resolves to the same bucket. `color` overrides the mesh's own colour for
|
|
239
|
+
* recolour routing.
|
|
240
|
+
*/
|
|
241
|
+
private bucketBaseKey;
|
|
102
242
|
/**
|
|
103
243
|
* Store MeshData for lazy GPU buffer creation (used for selection highlighting)
|
|
104
244
|
* This avoids creating 2x GPU buffers during streaming
|
|
@@ -234,6 +374,15 @@ export declare class Scene {
|
|
|
234
374
|
* Translate every flat (non-instanced) mesh for `expressId` by `delta`. See
|
|
235
375
|
* {@link translateMeshesForEntity} for the full contract; this is the flat half.
|
|
236
376
|
*/
|
|
377
|
+
/**
|
|
378
|
+
* Mark a mesh's bucket for rebuild after its positions were mutated in
|
|
379
|
+
* place (move/rotate), migrating it to a new bucket when spatial chunking
|
|
380
|
+
* is on and the mesh crossed a grid-cell boundary. Without the migration
|
|
381
|
+
* the mesh would keep its stale cell key, so the partial-batch piece
|
|
382
|
+
* filter (which re-derives keys from CURRENT positions) would silently
|
|
383
|
+
* drop it under hide/isolate. Same move mechanics as updateMeshColors.
|
|
384
|
+
*/
|
|
385
|
+
private rebucketMovedMesh;
|
|
237
386
|
private translateFlatMeshesForEntity;
|
|
238
387
|
/**
|
|
239
388
|
* Translate every GPU-instanced occurrence of `expressId` by `delta` in the
|
|
@@ -265,6 +414,27 @@ export declare class Scene {
|
|
|
265
414
|
private evictHighlightMeshes;
|
|
266
415
|
/** Bulk variant of `translateMeshesForEntity`. */
|
|
267
416
|
translateMeshesForEntities(updates: Map<number, [number, number, number]>): number;
|
|
417
|
+
/**
|
|
418
|
+
* Rotate every flat mesh for `expressId` by `angleRad` about the renderer
|
|
419
|
+
* vertical (+Y) axis through `pivot` (renderer world, Y-up). This is the Y-up
|
|
420
|
+
* image of an IFC yaw about the storey-up Z axis. Modifies `positions` and
|
|
421
|
+
* `normals` in place and marks the affected bucket(s) for re-batch.
|
|
422
|
+
*
|
|
423
|
+
* Positions may live in a per-element local frame (`MeshData.origin`, world =
|
|
424
|
+
* origin + position), so the pivot is folded into each mesh's local frame
|
|
425
|
+
* before rotating; normals are direction vectors and rotate as-is.
|
|
426
|
+
*
|
|
427
|
+
* Same colour-merge caveat as `translateFlatMeshesForEntity` (skips meshes
|
|
428
|
+
* whose vertices belong to more than this entity). GPU-instanced occurrences
|
|
429
|
+
* are not rotated (the collab edit path only rotates flat/authored meshes).
|
|
430
|
+
* Returns true when a mesh was modified.
|
|
431
|
+
*/
|
|
432
|
+
rotateMeshesForEntity(expressId: number, angleRad: number, pivot: [number, number, number]): boolean;
|
|
433
|
+
/** Bulk variant of `rotateMeshesForEntity`. */
|
|
434
|
+
rotateMeshesForEntities(updates: Map<number, {
|
|
435
|
+
angle: number;
|
|
436
|
+
pivot: [number, number, number];
|
|
437
|
+
}>): number;
|
|
268
438
|
/**
|
|
269
439
|
* Queue meshes for deferred GPU upload.
|
|
270
440
|
* Instant (no GPU work) — safe to call from React effects.
|
|
@@ -279,6 +449,10 @@ export declare class Scene {
|
|
|
279
449
|
* re-batched (e.g. by a move) the fragment becomes a stale duplicate, so the
|
|
280
450
|
* caller should `finalizeStreaming` to merge fragments away. */
|
|
281
451
|
hasStreamingFragments(): boolean;
|
|
452
|
+
/** True while a finalize rebuild (sync or time-sliced) is mid-flight —
|
|
453
|
+
* the fragment list is already cleared then, so settle-sensitive callers
|
|
454
|
+
* must check BOTH this and hasStreamingFragments(). */
|
|
455
|
+
isFinalizeInProgress(): boolean;
|
|
282
456
|
/** True when streaming runs in ephemeral mode (huge files) — fragments render
|
|
283
457
|
* directly from GPU and geometry is NOT retained for re-batch, so callers
|
|
284
458
|
* must NOT finalize (there's nothing to rebuild the batches from). */
|
|
@@ -311,6 +485,7 @@ export declare class Scene {
|
|
|
311
485
|
* meshData by their CURRENT color to produce correct batches.
|
|
312
486
|
*/
|
|
313
487
|
finalizeStreaming(device: GPUDevice, pipeline: RenderPipeline): void;
|
|
488
|
+
private finalizeStreamingInner;
|
|
314
489
|
/**
|
|
315
490
|
* Time-sliced version of finalizeStreaming.
|
|
316
491
|
* Re-groups mesh data and rebuilds GPU batches in small chunks,
|
|
@@ -437,6 +612,17 @@ export declare class Scene {
|
|
|
437
612
|
*/
|
|
438
613
|
/** Textured meshes (#961) for the renderer's dedicated textured sub-pass. */
|
|
439
614
|
getTexturedMeshes(): readonly TexturedMesh[];
|
|
615
|
+
/**
|
|
616
|
+
* GPU bytes currently held by the scene's mesh collections (issue #1682
|
|
617
|
+
* observability). Sums actual `GPUBuffer.size` values across colour batches
|
|
618
|
+
* (streaming fragments are members of `batchedMeshes`, so they are counted
|
|
619
|
+
* exactly once), cached partial sub-batches, hydrated individual meshes,
|
|
620
|
+
* textured meshes (plus a 4 B/texel texture estimate) and instanced
|
|
621
|
+
* templates. Instanced templates are counted even while hidden in the Types
|
|
622
|
+
* view: hiding does not free their buffers. O(collections) walk with no GPU
|
|
623
|
+
* calls, intended for on-demand telemetry, not per-frame use.
|
|
624
|
+
*/
|
|
625
|
+
getResidentGpuBytes(): ResidentGpuBytes;
|
|
440
626
|
/**
|
|
441
627
|
* Toggle the instanced draw pass. Instanced geometry is class-0 occurrences
|
|
442
628
|
* (the Model view); hide it in the Types view mode, where the flat path shows
|
package/dist/scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EAKhB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
|