@toriistudio/shader-ui 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -30,13 +30,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
+ AnimatedDrawingSVG: () => AnimatedDrawingSVG,
33
34
  EFECTO_ASCII_COMPONENT_DEFAULTS: () => EFECTO_ASCII_COMPONENT_DEFAULTS,
34
35
  EFECTO_ASCII_POST_PROCESSING_DEFAULTS: () => EFECTO_ASCII_POST_PROCESSING_DEFAULTS,
35
36
  Efecto: () => Efecto,
36
37
  FractalFlower: () => FractalFlower,
37
38
  MenuGlitch: () => MenuGlitch,
38
39
  OranoParticles: () => OranoParticles,
39
- ShaderArt: () => ShaderArt
40
+ ShaderArt: () => ShaderArt,
41
+ Snow: () => Snow,
42
+ WANDY_HAND_DEFAULTS: () => WANDY_HAND_DEFAULTS,
43
+ WandyHand: () => WandyHand
40
44
  });
41
45
  module.exports = __toCommonJS(src_exports);
42
46
 
@@ -2111,13 +2115,1371 @@ function Efecto({
2111
2115
  }
2112
2116
  );
2113
2117
  }
2118
+
2119
+ // src/components/Snow.tsx
2120
+ var import_react7 = require("react");
2121
+ var THREE7 = __toESM(require("three"));
2122
+
2123
+ // src/shaders/snow/fragment.glsl
2124
+ var fragment_default7 = "precision mediump float;\n\nuniform vec3 uColor;\n\nvarying float vAlpha;\n\nvoid main() {\n vec2 uv = gl_PointCoord - 0.5;\n float dist = length(uv);\n float mask = smoothstep(0.5, 0.0, dist);\n if (mask <= 0.01) {\n discard;\n }\n\n float centerGlow = smoothstep(0.22, 0.0, dist);\n vec3 color = mix(uColor * 1.2, uColor, centerGlow);\n\n gl_FragColor = vec4(color, mask * vAlpha);\n}\n";
2125
+
2126
+ // src/shaders/snow/vertex.glsl
2127
+ var vertex_default6 = "uniform float uTime;\nuniform float uFallSpeed;\nuniform float uWindStrength;\nuniform float uTurbulence;\nuniform float uSize;\nuniform float uTwinkleStrength;\nuniform vec3 uArea;\n\nattribute float aSpeed;\nattribute float aSize;\nattribute float aSeed;\n\nvarying float vAlpha;\n\nfloat wrap(float value, float size) {\n return mod(value + size * 0.5, size) - size * 0.5;\n}\n\nvoid main() {\n float height = uArea.y;\n float width = uArea.x;\n float depth = uArea.z;\n\n float fall = uFallSpeed * (0.3 + aSpeed);\n float droppedY = position.y - uTime * fall;\n float wrappedY = wrap(droppedY, height);\n\n float sway =\n sin((wrappedY + aSeed) * 0.45 + uTime * 0.8) * uTurbulence +\n cos(uTime * 0.35 + aSeed) * 0.15;\n float wind = uWindStrength * (0.4 + aSpeed);\n float displacedX = wrap(position.x + sway + wind, width);\n\n float driftZ =\n sin(uTime * 0.25 + aSeed * 1.7) * 0.5 +\n cos((wrappedY + aSeed) * 0.2) * 0.4;\n float displacedZ = wrap(position.z + driftZ, depth);\n\n vec4 modelPosition =\n modelMatrix * vec4(displacedX, wrappedY, displacedZ, 1.0);\n vec4 viewPosition = viewMatrix * modelPosition;\n\n float baseSize = mix(0.45, 1.0, aSize) * uSize;\n float twinkle =\n 1.0 + sin(uTime * (0.6 + aSpeed) + aSeed) * uTwinkleStrength;\n float perspective = clamp(15.0 / max(1.0, -viewPosition.z), 0.5, 3.0);\n gl_PointSize = baseSize * twinkle * perspective;\n gl_Position = projectionMatrix * viewPosition;\n\n vAlpha = mix(0.35, 1.0, aSize);\n}\n";
2128
+
2129
+ // src/components/Snow.tsx
2130
+ var import_jsx_runtime8 = require("react/jsx-runtime");
2131
+ var AREA_BOUNDS = {
2132
+ width: 36,
2133
+ height: 44,
2134
+ depth: 26
2135
+ };
2136
+ function createSnowGeometry(count) {
2137
+ const geometry = new THREE7.BufferGeometry();
2138
+ const positions = new Float32Array(count * 3);
2139
+ const speeds = new Float32Array(count);
2140
+ const sizes = new Float32Array(count);
2141
+ const seeds = new Float32Array(count);
2142
+ for (let i = 0; i < count; i += 1) {
2143
+ const x = (Math.random() - 0.5) * AREA_BOUNDS.width;
2144
+ const y = (Math.random() - 0.5) * AREA_BOUNDS.height;
2145
+ const z = (Math.random() - 0.5) * AREA_BOUNDS.depth;
2146
+ positions[i * 3] = x;
2147
+ positions[i * 3 + 1] = y;
2148
+ positions[i * 3 + 2] = z;
2149
+ speeds[i] = Math.random();
2150
+ sizes[i] = Math.random();
2151
+ seeds[i] = Math.random() * 100;
2152
+ }
2153
+ geometry.setAttribute("position", new THREE7.BufferAttribute(positions, 3));
2154
+ geometry.setAttribute("aSpeed", new THREE7.BufferAttribute(speeds, 1));
2155
+ geometry.setAttribute("aSize", new THREE7.BufferAttribute(sizes, 1));
2156
+ geometry.setAttribute("aSeed", new THREE7.BufferAttribute(seeds, 1));
2157
+ geometry.computeBoundingSphere();
2158
+ return geometry;
2159
+ }
2160
+ function buildUniforms2({
2161
+ color,
2162
+ fallSpeed,
2163
+ windStrength,
2164
+ turbulence,
2165
+ flakeSize,
2166
+ twinkleStrength
2167
+ }) {
2168
+ return {
2169
+ uTime: { value: 0 },
2170
+ uFallSpeed: { value: fallSpeed },
2171
+ uWindStrength: { value: windStrength },
2172
+ uTurbulence: { value: turbulence },
2173
+ uSize: { value: flakeSize },
2174
+ uTwinkleStrength: { value: twinkleStrength },
2175
+ uColor: { value: new THREE7.Color(color) },
2176
+ uArea: {
2177
+ value: new THREE7.Vector3(
2178
+ AREA_BOUNDS.width,
2179
+ AREA_BOUNDS.height,
2180
+ AREA_BOUNDS.depth
2181
+ )
2182
+ }
2183
+ };
2184
+ }
2185
+ function Snow({
2186
+ className,
2187
+ style,
2188
+ width,
2189
+ height,
2190
+ color,
2191
+ fallSpeed,
2192
+ windStrength,
2193
+ turbulence,
2194
+ flakeSize,
2195
+ twinkleStrength,
2196
+ flakeCount,
2197
+ mouseWindInteraction = false,
2198
+ ...divProps
2199
+ }) {
2200
+ const snowRef = (0, import_react7.useRef)(null);
2201
+ const uniformsRef = (0, import_react7.useRef)({
2202
+ color,
2203
+ fallSpeed,
2204
+ windStrength,
2205
+ turbulence,
2206
+ flakeSize,
2207
+ twinkleStrength,
2208
+ flakeCount
2209
+ });
2210
+ uniformsRef.current = {
2211
+ color,
2212
+ fallSpeed,
2213
+ windStrength,
2214
+ turbulence,
2215
+ flakeSize,
2216
+ twinkleStrength,
2217
+ flakeCount
2218
+ };
2219
+ const pointerWindOffsetRef = (0, import_react7.useRef)(0);
2220
+ const pointerWindTargetRef = (0, import_react7.useRef)(0);
2221
+ const pointerStateRef = (0, import_react7.useRef)({
2222
+ lastX: 0,
2223
+ lastTime: 0,
2224
+ timeoutId: null
2225
+ });
2226
+ const pointerActiveRef = (0, import_react7.useRef)(false);
2227
+ const baseWindRef = (0, import_react7.useRef)(windStrength);
2228
+ (0, import_react7.useEffect)(() => {
2229
+ baseWindRef.current = windStrength;
2230
+ }, [windStrength]);
2231
+ const handleCreate = (0, import_react7.useCallback)(({ scene }) => {
2232
+ const uniforms = buildUniforms2(uniformsRef.current);
2233
+ const geometry = createSnowGeometry(
2234
+ Math.max(1, Math.floor(uniformsRef.current.flakeCount))
2235
+ );
2236
+ const material = new THREE7.ShaderMaterial({
2237
+ fragmentShader: fragment_default7,
2238
+ vertexShader: vertex_default6,
2239
+ uniforms,
2240
+ transparent: true,
2241
+ depthWrite: false,
2242
+ blending: THREE7.AdditiveBlending
2243
+ });
2244
+ const points = new THREE7.Points(geometry, material);
2245
+ points.frustumCulled = false;
2246
+ scene.add(points);
2247
+ snowRef.current = { points, geometry, material, uniforms };
2248
+ return () => {
2249
+ scene.remove(points);
2250
+ geometry.dispose();
2251
+ material.dispose();
2252
+ snowRef.current = null;
2253
+ };
2254
+ }, []);
2255
+ const handleRender = (0, import_react7.useCallback)(
2256
+ (_context, delta, elapsedTime) => {
2257
+ const assets = snowRef.current;
2258
+ if (!assets) return;
2259
+ assets.uniforms.uTime.value = elapsedTime;
2260
+ const currentOffset = pointerWindOffsetRef.current;
2261
+ const targetOffset = pointerWindTargetRef.current;
2262
+ const nextOffset = THREE7.MathUtils.damp(
2263
+ currentOffset,
2264
+ targetOffset,
2265
+ 3.5,
2266
+ delta
2267
+ );
2268
+ if (Math.abs(nextOffset - currentOffset) > 5e-5) {
2269
+ pointerWindOffsetRef.current = nextOffset;
2270
+ assets.uniforms.uWindStrength.value = baseWindRef.current + nextOffset;
2271
+ }
2272
+ },
2273
+ []
2274
+ );
2275
+ const { containerRef } = useScene({
2276
+ camera: {
2277
+ position: [0, 0, 18]
2278
+ },
2279
+ onCreate: handleCreate,
2280
+ onRender: handleRender
2281
+ });
2282
+ (0, import_react7.useEffect)(() => {
2283
+ const assets = snowRef.current;
2284
+ if (!assets) return;
2285
+ assets.uniforms.uColor.value.set(color);
2286
+ }, [color]);
2287
+ (0, import_react7.useEffect)(() => {
2288
+ const assets = snowRef.current;
2289
+ if (!assets) return;
2290
+ assets.uniforms.uFallSpeed.value = fallSpeed;
2291
+ }, [fallSpeed]);
2292
+ (0, import_react7.useEffect)(() => {
2293
+ const assets = snowRef.current;
2294
+ if (!assets) return;
2295
+ assets.uniforms.uWindStrength.value = windStrength + pointerWindOffsetRef.current;
2296
+ }, [windStrength]);
2297
+ (0, import_react7.useEffect)(() => {
2298
+ const assets = snowRef.current;
2299
+ if (!assets) return;
2300
+ assets.uniforms.uTurbulence.value = turbulence;
2301
+ }, [turbulence]);
2302
+ (0, import_react7.useEffect)(() => {
2303
+ const assets = snowRef.current;
2304
+ if (!assets) return;
2305
+ assets.uniforms.uSize.value = flakeSize;
2306
+ }, [flakeSize]);
2307
+ (0, import_react7.useEffect)(() => {
2308
+ const assets = snowRef.current;
2309
+ if (!assets) return;
2310
+ assets.uniforms.uTwinkleStrength.value = twinkleStrength;
2311
+ }, [twinkleStrength]);
2312
+ (0, import_react7.useEffect)(() => {
2313
+ const assets = snowRef.current;
2314
+ if (!assets) return;
2315
+ const geometry = createSnowGeometry(Math.max(1, Math.floor(flakeCount)));
2316
+ assets.points.geometry.dispose();
2317
+ assets.points.geometry = geometry;
2318
+ assets.geometry = geometry;
2319
+ }, [flakeCount]);
2320
+ (0, import_react7.useEffect)(() => {
2321
+ const pointerState = pointerStateRef.current;
2322
+ const clearTimeoutIfNeeded = () => {
2323
+ if (pointerState.timeoutId !== null) {
2324
+ window.clearTimeout(pointerState.timeoutId);
2325
+ pointerState.timeoutId = null;
2326
+ }
2327
+ };
2328
+ if (!mouseWindInteraction) {
2329
+ clearTimeoutIfNeeded();
2330
+ pointerWindOffsetRef.current = 0;
2331
+ pointerWindTargetRef.current = 0;
2332
+ pointerState.lastTime = 0;
2333
+ pointerActiveRef.current = false;
2334
+ const assets = snowRef.current;
2335
+ if (assets) {
2336
+ assets.uniforms.uWindStrength.value = windStrength;
2337
+ }
2338
+ return;
2339
+ }
2340
+ const container = containerRef.current;
2341
+ if (!container) return;
2342
+ const scheduleReset = () => {
2343
+ clearTimeoutIfNeeded();
2344
+ pointerState.timeoutId = window.setTimeout(() => {
2345
+ pointerWindTargetRef.current = 0;
2346
+ pointerState.timeoutId = null;
2347
+ }, 220);
2348
+ };
2349
+ const handlePointerMove = (event) => {
2350
+ const isMouse = event.pointerType === "mouse";
2351
+ if (!isMouse && !pointerActiveRef.current) return;
2352
+ const now = performance.now();
2353
+ if (pointerState.lastTime === 0) {
2354
+ pointerState.lastX = event.clientX;
2355
+ pointerState.lastTime = now;
2356
+ return;
2357
+ }
2358
+ const dx = event.clientX - pointerState.lastX;
2359
+ const dt = Math.max(1, now - pointerState.lastTime);
2360
+ const velocity = dx / dt;
2361
+ const offset = THREE7.MathUtils.clamp(velocity * 0.9, -1.6, 1.6);
2362
+ pointerWindTargetRef.current = offset;
2363
+ pointerState.lastX = event.clientX;
2364
+ pointerState.lastTime = now;
2365
+ scheduleReset();
2366
+ };
2367
+ const handlePointerDown = (event) => {
2368
+ pointerActiveRef.current = true;
2369
+ pointerState.lastX = event.clientX;
2370
+ pointerState.lastTime = performance.now();
2371
+ scheduleReset();
2372
+ };
2373
+ const handlePointerUp = () => {
2374
+ pointerActiveRef.current = false;
2375
+ pointerState.lastTime = 0;
2376
+ pointerWindTargetRef.current = 0;
2377
+ scheduleReset();
2378
+ };
2379
+ const handlePointerLeave = () => {
2380
+ pointerActiveRef.current = false;
2381
+ pointerState.lastTime = 0;
2382
+ pointerWindTargetRef.current = 0;
2383
+ clearTimeoutIfNeeded();
2384
+ };
2385
+ container.addEventListener("pointermove", handlePointerMove);
2386
+ container.addEventListener("pointerdown", handlePointerDown);
2387
+ container.addEventListener("pointerup", handlePointerUp);
2388
+ container.addEventListener("pointercancel", handlePointerUp);
2389
+ container.addEventListener("pointerout", handlePointerLeave);
2390
+ container.addEventListener("pointerleave", handlePointerLeave);
2391
+ return () => {
2392
+ container.removeEventListener("pointermove", handlePointerMove);
2393
+ container.removeEventListener("pointerdown", handlePointerDown);
2394
+ container.removeEventListener("pointerup", handlePointerUp);
2395
+ container.removeEventListener("pointercancel", handlePointerUp);
2396
+ container.removeEventListener("pointerout", handlePointerLeave);
2397
+ container.removeEventListener("pointerleave", handlePointerLeave);
2398
+ pointerState.lastTime = 0;
2399
+ pointerWindOffsetRef.current = 0;
2400
+ pointerWindTargetRef.current = 0;
2401
+ pointerActiveRef.current = false;
2402
+ clearTimeoutIfNeeded();
2403
+ const assets = snowRef.current;
2404
+ if (assets) {
2405
+ assets.uniforms.uWindStrength.value = windStrength;
2406
+ }
2407
+ };
2408
+ }, [containerRef, mouseWindInteraction, windStrength]);
2409
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2410
+ "div",
2411
+ {
2412
+ ref: containerRef,
2413
+ className,
2414
+ style: {
2415
+ width: width ?? "100%",
2416
+ height: height ?? "100%",
2417
+ ...style
2418
+ },
2419
+ ...divProps
2420
+ }
2421
+ );
2422
+ }
2423
+
2424
+ // src/components/AnimatedDrawingSVG.tsx
2425
+ var import_clsx = __toESM(require("clsx"));
2426
+ var import_react8 = require("react");
2427
+ var import_jsx_runtime9 = require("react/jsx-runtime");
2428
+ var PATH_SELECTOR = "path, line, polyline, polygon, circle, ellipse";
2429
+ function AnimatedDrawingSVG({
2430
+ svgMarkup,
2431
+ animated = true,
2432
+ size,
2433
+ onAnimated,
2434
+ delay,
2435
+ className,
2436
+ style,
2437
+ ...divProps
2438
+ }) {
2439
+ const containerRef = (0, import_react8.useRef)(null);
2440
+ const animationsRef = (0, import_react8.useRef)([]);
2441
+ const parserRef = (0, import_react8.useRef)(null);
2442
+ const onAnimatedRef = (0, import_react8.useRef)(onAnimated);
2443
+ const animationRunIdRef = (0, import_react8.useRef)(0);
2444
+ const onAnimationCompleteRef = (0, import_react8.useRef)(false);
2445
+ const timeoutRef = (0, import_react8.useRef)([]);
2446
+ const monitorRafRef = (0, import_react8.useRef)(null);
2447
+ const sanitizedMarkup = (svgMarkup ?? "").toString().trim();
2448
+ const normalizedDelay = typeof delay === "number" && delay > 0 ? delay : 0;
2449
+ (0, import_react8.useEffect)(() => {
2450
+ onAnimatedRef.current = onAnimated;
2451
+ }, [onAnimated]);
2452
+ (0, import_react8.useEffect)(() => {
2453
+ return () => {
2454
+ animationsRef.current.forEach((animation) => animation.cancel());
2455
+ animationsRef.current = [];
2456
+ timeoutRef.current.forEach((id) => window.clearTimeout(id));
2457
+ timeoutRef.current = [];
2458
+ if (monitorRafRef.current !== null) {
2459
+ cancelAnimationFrame(monitorRafRef.current);
2460
+ monitorRafRef.current = null;
2461
+ }
2462
+ };
2463
+ }, []);
2464
+ (0, import_react8.useLayoutEffect)(() => {
2465
+ const container = containerRef.current;
2466
+ if (!container) return;
2467
+ let rafId = null;
2468
+ let delayId = null;
2469
+ let started = false;
2470
+ if (normalizedDelay > 0) {
2471
+ container.style.visibility = "hidden";
2472
+ } else {
2473
+ container.style.removeProperty("visibility");
2474
+ }
2475
+ animationRunIdRef.current += 1;
2476
+ const currentRunId = animationRunIdRef.current;
2477
+ onAnimationCompleteRef.current = false;
2478
+ timeoutRef.current.forEach((id) => window.clearTimeout(id));
2479
+ timeoutRef.current = [];
2480
+ const markComplete = () => {
2481
+ if (animationRunIdRef.current === currentRunId && !onAnimationCompleteRef.current) {
2482
+ onAnimationCompleteRef.current = true;
2483
+ onAnimatedRef.current?.();
2484
+ }
2485
+ };
2486
+ animationsRef.current.forEach((animation) => animation.cancel());
2487
+ animationsRef.current = [];
2488
+ if (monitorRafRef.current !== null) {
2489
+ cancelAnimationFrame(monitorRafRef.current);
2490
+ monitorRafRef.current = null;
2491
+ }
2492
+ if (!sanitizedMarkup) {
2493
+ container.replaceChildren();
2494
+ markComplete();
2495
+ return;
2496
+ }
2497
+ const parser = parserRef.current ?? new DOMParser();
2498
+ parserRef.current = parser;
2499
+ let parsed;
2500
+ try {
2501
+ parsed = parser.parseFromString(sanitizedMarkup, "image/svg+xml");
2502
+ } catch {
2503
+ return;
2504
+ }
2505
+ if (parsed.querySelector("parsererror")) {
2506
+ return;
2507
+ }
2508
+ const parsedSvg = parsed.querySelector("svg");
2509
+ if (!parsedSvg) {
2510
+ container.replaceChildren();
2511
+ onAnimatedRef.current?.();
2512
+ return;
2513
+ }
2514
+ const svgElement = document.importNode(parsedSvg, true);
2515
+ svgElement.setAttribute("preserveAspectRatio", "xMidYMid meet");
2516
+ if (size !== void 0) {
2517
+ svgElement.removeAttribute("width");
2518
+ svgElement.removeAttribute("height");
2519
+ const sizeValue = typeof size === "number" ? `${Math.max(0, size)}px` : `${size}`;
2520
+ svgElement.style.width = sizeValue;
2521
+ svgElement.style.height = "auto";
2522
+ } else {
2523
+ svgElement.style.width = "100%";
2524
+ svgElement.style.height = "100%";
2525
+ svgElement.style.maxWidth = "100%";
2526
+ svgElement.style.maxHeight = "100%";
2527
+ }
2528
+ svgElement.style.display = "block";
2529
+ container.replaceChildren(svgElement);
2530
+ const runAnimations = () => {
2531
+ const drawTargets = Array.from(
2532
+ svgElement.querySelectorAll(PATH_SELECTOR)
2533
+ );
2534
+ const scheduleFallback = (delay2) => {
2535
+ const fallbackId = window.setTimeout(markComplete, delay2);
2536
+ timeoutRef.current.push(fallbackId);
2537
+ };
2538
+ if (!drawTargets.length) {
2539
+ if (!animated) {
2540
+ markComplete();
2541
+ } else {
2542
+ Promise.resolve().then(() => {
2543
+ markComplete();
2544
+ });
2545
+ }
2546
+ return;
2547
+ }
2548
+ let maxDuration = 0;
2549
+ const resolveTimingValue = (value, fallback) => {
2550
+ if (typeof value === "number") {
2551
+ return value;
2552
+ }
2553
+ if (typeof value === "string") {
2554
+ const parsed2 = Number.parseFloat(value);
2555
+ return Number.isFinite(parsed2) ? parsed2 : fallback;
2556
+ }
2557
+ if (typeof value === "object" && value !== null) {
2558
+ const parsed2 = Number.parseFloat(value.toString());
2559
+ return Number.isFinite(parsed2) ? parsed2 : fallback;
2560
+ }
2561
+ return fallback;
2562
+ };
2563
+ drawTargets.forEach((element, index) => {
2564
+ const length = typeof element.getTotalLength === "function" ? element.getTotalLength() : null;
2565
+ if (!length || Number.isNaN(length)) {
2566
+ element.style.removeProperty("stroke-dasharray");
2567
+ element.style.removeProperty("stroke-dashoffset");
2568
+ return;
2569
+ }
2570
+ const dashValue = `${length}`;
2571
+ element.style.strokeDasharray = dashValue;
2572
+ element.style.strokeDashoffset = animated ? dashValue : "0";
2573
+ if (!element.style.strokeLinecap) {
2574
+ element.style.strokeLinecap = "round";
2575
+ }
2576
+ if (!animated) {
2577
+ return;
2578
+ }
2579
+ const animation = element.animate(
2580
+ [{ strokeDashoffset: dashValue }, { strokeDashoffset: "0" }],
2581
+ {
2582
+ duration: Math.min(6500, Math.max(1200, length * 12)),
2583
+ delay: index * 120,
2584
+ easing: "ease-in-out",
2585
+ fill: "forwards"
2586
+ }
2587
+ );
2588
+ const timing = animation.effect?.getTiming();
2589
+ const baseDuration = Math.min(6500, Math.max(1200, length * 12));
2590
+ const total = resolveTimingValue(timing?.delay, index * 120) + resolveTimingValue(timing?.duration, baseDuration);
2591
+ if (total > maxDuration) {
2592
+ maxDuration = total;
2593
+ }
2594
+ animationsRef.current.push(animation);
2595
+ });
2596
+ if (!animated) {
2597
+ markComplete();
2598
+ return;
2599
+ }
2600
+ const startMonitor = () => {
2601
+ const monitor = () => {
2602
+ if (animationRunIdRef.current !== currentRunId) {
2603
+ return;
2604
+ }
2605
+ const allFinished = animationsRef.current.every((animation) => {
2606
+ const state = animation.playState;
2607
+ return state === "finished" || state === "idle";
2608
+ });
2609
+ if (allFinished) {
2610
+ if (monitorRafRef.current !== null) {
2611
+ cancelAnimationFrame(monitorRafRef.current);
2612
+ monitorRafRef.current = null;
2613
+ }
2614
+ markComplete();
2615
+ return;
2616
+ }
2617
+ monitorRafRef.current = requestAnimationFrame(monitor);
2618
+ };
2619
+ if (monitorRafRef.current !== null) {
2620
+ cancelAnimationFrame(monitorRafRef.current);
2621
+ }
2622
+ monitorRafRef.current = requestAnimationFrame(monitor);
2623
+ };
2624
+ startMonitor();
2625
+ if (animated && maxDuration > 0) {
2626
+ scheduleFallback(maxDuration + 50);
2627
+ }
2628
+ };
2629
+ const triggerStart = () => {
2630
+ if (started) return;
2631
+ started = true;
2632
+ container.style.removeProperty("visibility");
2633
+ rafId = requestAnimationFrame(runAnimations);
2634
+ };
2635
+ if (normalizedDelay > 0) {
2636
+ delayId = window.setTimeout(triggerStart, normalizedDelay);
2637
+ } else {
2638
+ triggerStart();
2639
+ }
2640
+ return () => {
2641
+ if (delayId !== null) {
2642
+ window.clearTimeout(delayId);
2643
+ }
2644
+ if (rafId !== null) {
2645
+ cancelAnimationFrame(rafId);
2646
+ }
2647
+ };
2648
+ }, [sanitizedMarkup, animated, size, normalizedDelay]);
2649
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2650
+ "div",
2651
+ {
2652
+ ref: containerRef,
2653
+ className: (0, import_clsx.default)(
2654
+ "flex items-center justify-center [&_svg]:block",
2655
+ className
2656
+ ),
2657
+ style: {
2658
+ ...style
2659
+ },
2660
+ ...divProps
2661
+ }
2662
+ );
2663
+ }
2664
+
2665
+ // src/components/WandyHand.tsx
2666
+ var import_react9 = require("react");
2667
+ var import_opentype = __toESM(require("opentype.js"));
2668
+
2669
+ // src/assets/fonts/waltographUI.ttf
2670
+ var waltographUI_default = "data:font/ttf;base64,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L2xpY2Vuc2VzL25jLXNhLzEuMC9XYWx0b2dyYXBoIFVJQm9sZE1HQkY6IFdhbHQgRGlzbmV5IFNjcmlwdDogMjAwMldhbHRvZ3JhcGggVUkgQm9sZDEuMFdhbHRvZ3JhcGhVSS1Cb2xkaHR0cDovL21pY2tleWF2ZW51ZS5jb20vZm9udHNUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4NCg0KQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4NCg0KMS4gRGVmaW5pdGlvbnMNCg0KICAgMS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLg0KICAgMy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCiAgIDQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4NCiAgIDUuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgNi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4NCg0KMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLg0KDQozLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6DQoNCiAgIDEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsNCiAgIDIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7DQogICAzLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOw0KICAgNC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7DQoNClRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLg0KDQo0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6DQoNCiAgIDEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4NCiAgIDIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQogICAzLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4NCg0KNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyDQoNCiAgIDEuIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yJ3Mga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToNCiAgICAgICAgIDEuIExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsNCiAgICAgICAgIDIuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4NCiAgIDIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4NCg0KNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCg0KNy4gVGVybWluYXRpb24NCg0KICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuDQoNCjguIE1pc2NlbGxhbmVvdXMNCg0KICAgMS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4NCiAgIDQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuDQogICA1LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9uYy1zYS8xLjAvAEQAaQBnAGkAdABpAHoAZQBkACAAZABhAHQAYQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADAAMAAtADIAMAAwADQAIABtAGkAYwBrAGUAeQBhAHYAZQBuAHUAZQAuAGMAbwBtACAAOgA6ACAAUwBvAG0AZQAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkACAAOgA6ACAARgBvAHIAIABwAGUAcgBzAG8AbgBhAGwALAAgAG4AbwBuAGMAbwBtAG0AZQByAGMAaQBhAGwAIAB1AHMAZQAgAG8AbgBsAHkAIAA6ADoAIABSAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIABDAHIAZQBhAHQAaQB2AGUAIABDAG8AbQBtAG8AbgBzACAATgBvAG4AQwBvAG0AbQBlAHIAYwBpAGEAbAAtAFMAaABhAHIAZQBBAGwAaQBrAGUAIABsAGkAYwBlAG4AcwBlACAAaAB0AHQAcAA6AC8ALwBjAHIAZQBhAHQAaQB2AGUAYwBvAG0AbQBvAG4AcwAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8AbgBjAC0AcwBhAC8AMQAuADAALwBXAGEAbAB0AG8AZwByAGEAcABoACAAVQBJAEIAbwBsAGQATQBHAEIARgA6ACAAVwBhAGwAdAAgAEQAaQBzAG4AZQB5ACAAUwBjAHIAaQBwAHQAOgAgADIAMAAwADIAVwBhAGwAdABvAGcAcgBhAHAAaAAgAFUASQAgAEIAbwBsAGQAMQAuADAAVwBhAGwAdABvAGcAcgBhAHAAaABVAEkALQBCAG8AbABkAGgAdAB0AHAAOgAvAC8AbQBpAGMAawBlAHkAYQB2AGUAbgB1AGUALgBjAG8AbQAvAGYAbwBuAHQAcwBUAEgARQAgAFcATwBSAEsAIAAoAEEAUwAgAEQARQBGAEkATgBFAEQAIABCAEUATABPAFcAKQAgAEkAUwAgAFAAUgBPAFYASQBEAEUARAAgAFUATgBEAEUAUgAgAFQASABFACAAVABFAFIATQBTACAATwBGACAAVABIAEkAUwAgAEMAUgBFAEEAVABJAFYARQAgAEMATwBNAE0ATwBOAFMAIABQAFUAQgBMAEkAQwAgAEwASQBDAEUATgBTAEUAIAAoACIAQwBDAFAATAAiACAATwBSACAAIgBMAEkAQwBFAE4AUwBFACIAKQAuACAAVABIAEUAIABXAE8AUgBLACAASQBTACAAUABSAE8AVABFAEMAVABFAEQAIABCAFkAIABDAE8AUABZAFIASQBHAEgAVAAgAEEATgBEAC8ATwBSACAATwBUAEgARQBSACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXAC4AIABBAE4AWQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACAATwBUAEgARQBSACAAVABIAEEATgAgAEEAUwAgAEEAVQBUAEgATwBSAEkAWgBFAEQAIABVAE4ARABFAFIAIABUAEgASQBTACAATABJAEMARQBOAFMARQAgAEkAUwAgAFAAUgBPAEgASQBCAEkAVABFAEQALgANAAoADQAKAEIAWQAgAEUAWABFAFIAQwBJAFMASQBOAEcAIABBAE4AWQAgAFIASQBHAEgAVABTACAAVABPACAAVABIAEUAIABXAE8AUgBLACAAUABSAE8AVgBJAEQARQBEACAASABFAFIARQAsACAAWQBPAFUAIABBAEMAQwBFAFAAVAAgAEEATgBEACAAQQBHAFIARQBFACAAVABPACAAQgBFACAAQgBPAFUATgBEACAAQgBZACAAVABIAEUAIABUAEUAUgBNAFMAIABPAEYAIABUAEgASQBTACAATABJAEMARQBOAFMARQAuACAAVABIAEUAIABMAEkAQwBFAE4AUwBPAFIAIABHAFIAQQBOAFQAUwAgAFkATwBVACAAVABIAEUAIABSAEkARwBIAFQAUwAgAEMATwBOAFQAQQBJAE4ARQBEACAASABFAFIARQAgAEkATgAgAEMATwBOAFMASQBEAEUAUgBBAFQASQBPAE4AIABPAEYAIABZAE8AVQBSACAAQQBDAEMARQBQAFQAQQBOAEMARQAgAE8ARgAgAFMAVQBDAEgAIABUAEUAUgBNAFMAIABBAE4ARAAgAEMATwBOAEQASQBUAEkATwBOAFMALgANAAoADQAKADEALgAgAEQAZQBmAGkAbgBpAHQAaQBvAG4AcwANAAoADQAKACAAIAAgADEALgAgACIAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHAAZQByAGkAbwBkAGkAYwBhAGwAIABpAHMAcwB1AGUALAAgAGEAbgB0AGgAbwBsAG8AZwB5ACAAbwByACAAZQBuAGMAeQBjAGwAbwBwAGUAZABpAGEALAAgAGkAbgAgAHcAaABpAGMAaAAgAHQAaABlACAAVwBvAHIAawAgAGkAbgAgAGkAdABzACAAZQBuAHQAaQByAGUAdAB5ACAAaQBuACAAdQBuAG0AbwBkAGkAZgBpAGUAZAAgAGYAbwByAG0ALAAgAGEAbABvAG4AZwAgAHcAaQB0AGgAIABhACAAbgB1AG0AYgBlAHIAIABvAGYAIABvAHQAaABlAHIAIABjAG8AbgB0AHIAaQBiAHUAdABpAG8AbgBzACwAIABjAG8AbgBzAHQAaQB0AHUAdABpAG4AZwAgAHMAZQBwAGEAcgBhAHQAZQAgAGEAbgBkACAAaQBuAGQAZQBwAGUAbgBkAGUAbgB0ACAAdwBvAHIAawBzACAAaQBuACAAdABoAGUAbQBzAGUAbAB2AGUAcwAsACAAYQByAGUAIABhAHMAcwBlAG0AYgBsAGUAZAAgAGkAbgB0AG8AIABhACAAYwBvAGwAbABlAGMAdABpAHYAZQAgAHcAaABvAGwAZQAuACAAQQAgAHcAbwByAGsAIAB0AGgAYQB0ACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAdwBpAGwAbAAgAG4AbwB0ACAAYgBlACAAYwBvAG4AcwBpAGQAZQByAGUAZAAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgACgAYQBzACAAZABlAGYAaQBuAGUAZAAgAGIAZQBsAG8AdwApACAAZgBvAHIAIAB0AGgAZQAgAHAAdQByAHAAbwBzAGUAcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgACIARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACAAYgBhAHMAZQBkACAAdQBwAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAG8AcgAgAHUAcABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAG4AZAAgAG8AdABoAGUAcgAgAHAAcgBlAC0AZQB4AGkAcwB0AGkAbgBnACAAdwBvAHIAawBzACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHQAcgBhAG4AcwBsAGEAdABpAG8AbgAsACAAbQB1AHMAaQBjAGEAbAAgAGEAcgByAGEAbgBnAGUAbQBlAG4AdAAsACAAZAByAGEAbQBhAHQAaQB6AGEAdABpAG8AbgAsACAAZgBpAGMAdABpAG8AbgBhAGwAaQB6AGEAdABpAG8AbgAsACAAbQBvAHQAaQBvAG4AIABwAGkAYwB0AHUAcgBlACAAdgBlAHIAcwBpAG8AbgAsACAAcwBvAHUAbgBkACAAcgBlAGMAbwByAGQAaQBuAGcALAAgAGEAcgB0ACAAcgBlAHAAcgBvAGQAdQBjAHQAaQBvAG4ALAAgAGEAYgByAGkAZABnAG0AZQBuAHQALAAgAGMAbwBuAGQAZQBuAHMAYQB0AGkAbwBuACwAIABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGYAbwByAG0AIABpAG4AIAB3AGgAaQBjAGgAIAB0AGgAZQAgAFcAbwByAGsAIABtAGEAeQAgAGIAZQAgAHIAZQBjAGEAcwB0ACwAIAB0AHIAYQBuAHMAZgBvAHIAbQBlAGQALAAgAG8AcgAgAGEAZABhAHAAdABlAGQALAAgAGUAeABjAGUAcAB0ACAAdABoAGEAdAAgAGEAIAB3AG8AcgBrACAAdABoAGEAdAAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAHcAaQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABmAG8AcgAgAHQAaABlACAAcAB1AHIAcABvAHMAZQAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADMALgAgACIATABpAGMAZQBuAHMAbwByACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAHQAaABhAHQAIABvAGYAZgBlAHIAcwAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAANAAuACAAIgBPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAiACAAbQBlAGEAbgBzACAAdABoAGUAIABpAG4AZABpAHYAaQBkAHUAYQBsACAAbwByACAAZQBuAHQAaQB0AHkAIAB3AGgAbwAgAGMAcgBlAGEAdABlAGQAIAB0AGgAZQAgAFcAbwByAGsALgANAAoAIAAgACAANQAuACAAIgBXAG8AcgBrACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0AGEAYgBsAGUAIAB3AG8AcgBrACAAbwBmACAAYQB1AHQAaABvAHIAcwBoAGkAcAAgAG8AZgBmAGUAcgBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADYALgAgACIAWQBvAHUAIgAgAG0AZQBhAG4AcwAgAGEAbgAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAGUAeABlAHIAYwBpAHMAaQBuAGcAIAByAGkAZwBoAHQAcwAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAdwBoAG8AIABoAGEAcwAgAG4AbwB0ACAAcAByAGUAdgBpAG8AdQBzAGwAeQAgAHYAaQBvAGwAYQB0AGUAZAAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAsACAAbwByACAAdwBoAG8AIABoAGEAcwAgAHIAZQBjAGUAaQB2AGUAZAAgAGUAeABwAHIAZQBzAHMAIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAZgByAG8AbQAgAHQAaABlACAATABpAGMAZQBuAHMAbwByACAAdABvACAAZQB4AGUAcgBjAGkAcwBlACAAcgBpAGcAaAB0AHMAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGQAZQBzAHAAaQB0AGUAIABhACAAcAByAGUAdgBpAG8AdQBzACAAdgBpAG8AbABhAHQAaQBvAG4ALgANAAoADQAKADIALgAgAEYAYQBpAHIAIABVAHMAZQAgAFIAaQBnAGgAdABzAC4AIABOAG8AdABoAGkAbgBnACAAaQBuACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABpAHMAIABpAG4AdABlAG4AZABlAGQAIAB0AG8AIAByAGUAZAB1AGMAZQAsACAAbABpAG0AaQB0ACwAIABvAHIAIAByAGUAcwB0AHIAaQBjAHQAIABhAG4AeQAgAHIAaQBnAGgAdABzACAAYQByAGkAcwBpAG4AZwAgAGYAcgBvAG0AIABmAGEAaQByACAAdQBzAGUALAAgAGYAaQByAHMAdAAgAHMAYQBsAGUAIABvAHIAIABvAHQAaABlAHIAIABsAGkAbQBpAHQAYQB0AGkAbwBuAHMAIABvAG4AIAB0AGgAZQAgAGUAeABjAGwAdQBzAGkAdgBlACAAcgBpAGcAaAB0AHMAIABvAGYAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAbwB3AG4AZQByACAAdQBuAGQAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAIABsAGEAdwAgAG8AcgAgAG8AdABoAGUAcgAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABsAGEAdwBzAC4ADQAKAA0ACgAzAC4AIABMAGkAYwBlAG4AcwBlACAARwByAGEAbgB0AC4AIABTAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABhAG4AZAAgAGMAbwBuAGQAaQB0AGkAbwBuAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAaABlAHIAZQBiAHkAIABnAHIAYQBuAHQAcwAgAFkAbwB1ACAAYQAgAHcAbwByAGwAZAB3AGkAZABlACwAIAByAG8AeQBhAGwAdAB5AC0AZgByAGUAZQAsACAAbgBvAG4ALQBlAHgAYwBsAHUAcwBpAHYAZQAsACAAcABlAHIAcABlAHQAdQBhAGwAIAAoAGYAbwByACAAdABoAGUAIABkAHUAcgBhAHQAaQBvAG4AIABvAGYAIAB0AGgAZQAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABjAG8AcAB5AHIAaQBnAGgAdAApACAAbABpAGMAZQBuAHMAZQAgAHQAbwAgAGUAeABlAHIAYwBpAHMAZQAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABpAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABzAHQAYQB0AGUAZAAgAGIAZQBsAG8AdwA6AA0ACgANAAoAIAAgACAAMQAuACAAdABvACAAcgBlAHAAcgBvAGQAdQBjAGUAIAB0AGgAZQAgAFcAbwByAGsALAAgAHQAbwAgAGkAbgBjAG8AcgBwAG8AcgBhAHQAZQAgAHQAaABlACAAVwBvAHIAawAgAGkAbgB0AG8AIABvAG4AZQAgAG8AcgAgAG0AbwByAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzACwAIABhAG4AZAAgAHQAbwAgAHIAZQBwAHIAbwBkAHUAYwBlACAAdABoAGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrAHMAOwANAAoAIAAgACAAMgAuACAAdABvACAAYwByAGUAYQB0AGUAIABhAG4AZAAgAHIAZQBwAHIAbwBkAHUAYwBlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgAgACAAIAAzAC4AIAB0AG8AIABkAGkAcwB0AHIAaQBiAHUAdABlACAAYwBvAHAAaQBlAHMAIABvAHIAIABwAGgAbwBuAG8AcgBlAGMAbwByAGQAcwAgAG8AZgAsACAAZABpAHMAcABsAGEAeQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAcABlAHIAZgBvAHIAbQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAYQBuAGQAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAYQAgAGQAaQBnAGkAdABhAGwAIABhAHUAZABpAG8AIAB0AHIAYQBuAHMAbQBpAHMAcwBpAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzADsADQAKACAAIAAgADQALgAgAHQAbwAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABjAG8AcABpAGUAcwAgAG8AcgAgAHAAaABvAG4AbwByAGUAYwBvAHIAZABzACAAbwBmACwAIABkAGkAcwBwAGwAYQB5ACAAcAB1AGIAbABpAGMAbAB5ACwAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACwAIABhAG4AZAAgAHAAZQByAGYAbwByAG0AIABwAHUAYgBsAGkAYwBsAHkAIABiAHkAIABtAGUAYQBuAHMAIABvAGYAIABhACAAZABpAGcAaQB0AGEAbAAgAGEAdQBkAGkAbwAgAHQAcgBhAG4AcwBtAGkAcwBzAGkAbwBuACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgANAAoAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAG0AYQB5ACAAYgBlACAAZQB4AGUAcgBjAGkAcwBlAGQAIABpAG4AIABhAGwAbAAgAG0AZQBkAGkAYQAgAGEAbgBkACAAZgBvAHIAbQBhAHQAcwAgAHcAaABlAHQAaABlAHIAIABuAG8AdwAgAGsAbgBvAHcAbgAgAG8AcgAgAGgAZQByAGUAYQBmAHQAZQByACAAZABlAHYAaQBzAGUAZAAuACAAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAGkAbgBjAGwAdQBkAGUAIAB0AGgAZQAgAHIAaQBnAGgAdAAgAHQAbwAgAG0AYQBrAGUAIABzAHUAYwBoACAAbQBvAGQAaQBmAGkAYwBhAHQAaQBvAG4AcwAgAGEAcwAgAGEAcgBlACAAdABlAGMAaABuAGkAYwBhAGwAbAB5ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABlAHgAZQByAGMAaQBzAGUAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAaQBuACAAbwB0AGgAZQByACAAbQBlAGQAaQBhACAAYQBuAGQAIABmAG8AcgBtAGEAdABzAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAbgBvAHQAIABlAHgAcAByAGUAcwBzAGwAeQAgAGcAcgBhAG4AdABlAGQAIABiAHkAIABMAGkAYwBlAG4AcwBvAHIAIABhAHIAZQAgAGgAZQByAGUAYgB5ACAAcgBlAHMAZQByAHYAZQBkAC4ADQAKAA0ACgA0AC4AIABSAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwAuACAAVABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGkAbgAgAFMAZQBjAHQAaQBvAG4AIAAzACAAYQBiAG8AdgBlACAAaQBzACAAZQB4AHAAcgBlAHMAcwBsAHkAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAGEAbgBkACAAbABpAG0AaQB0AGUAZAAgAGIAeQAgAHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcAIAByAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwA6AA0ACgANAAoAIAAgACAAMQAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAuACAAWQBvAHUAIABtAGEAeQAgAG4AbwB0ACAAcwB1AGIAbABpAGMAZQBuAHMAZQAgAHQAaABlACAAVwBvAHIAawAuACAAWQBvAHUAIABtAHUAcwB0ACAAawBlAGUAcAAgAGkAbgB0AGEAYwB0ACAAYQBsAGwAIABuAG8AdABpAGMAZQBzACAAdABoAGEAdAAgAHIAZQBmAGUAcgAgAHQAbwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AG8AIAB0AGgAZQAgAGQAaQBzAGMAbABhAGkAbQBlAHIAIABvAGYAIAB3AGEAcgByAGEAbgB0AGkAZQBzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIAB0AGgAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGkAbgAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAsACAAYgB1AHQAIAB0AGgAaQBzACAAZABvAGUAcwAgAG4AbwB0ACAAcgBlAHEAdQBpAHIAZQAgAHQAaABlACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIABhAHAAYQByAHQAIABmAHIAbwBtACAAdABoAGUAIABXAG8AcgBrACAAaQB0AHMAZQBsAGYAIAB0AG8AIABiAGUAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgANAAoAIAAgACAAMgAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAZQBhAGMAaAAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrAHMAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAsACAAYQBuAGQAIABZAG8AdQAgAG0AdQBzAHQAIABrAGUAZQBwACAAaQBuAHQAYQBjAHQAIABhAGwAbAAgAG4AbwB0AGkAYwBlAHMAIAB0AGgAYQB0ACAAcgBlAGYAZQByACAAdABvACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABhAG4AZAAgAHQAbwAgAHQAaABlACAAZABpAHMAYwBsAGEAaQBtAGUAcgAgAG8AZgAgAHcAYQByAHIAYQBuAHQAaQBlAHMALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAGIAdQB0ACAAdABoAGkAcwAgAGQAbwBlAHMAIABuAG8AdAAgAHIAZQBxAHUAaQByAGUAIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAYQBwAGEAcgB0ACAAZgByAG8AbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABpAHQAcwBlAGwAZgAgAHQAbwAgAGIAZQAgAG0AYQBkAGUAIABzAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAuAA0ACgAgACAAIAAzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABlAHgAZQByAGMAaQBzAGUAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABnAHIAYQBuAHQAZQBkACAAdABvACAAWQBvAHUAIABpAG4AIABTAGUAYwB0AGkAbwBuACAAMwAgAGEAYgBvAHYAZQAgAGkAbgAgAGEAbgB5ACAAbQBhAG4AbgBlAHIAIAB0AGgAYQB0ACAAaQBzACAAcAByAGkAbQBhAHIAaQBsAHkAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuAC4AIABUAGgAZQAgAGUAeABjAGgAYQBuAGcAZQAgAG8AZgAgAHQAaABlACAAVwBvAHIAawAgAGYAbwByACAAbwB0AGgAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAZQBkACAAdwBvAHIAawBzACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAZABpAGcAaQB0AGEAbAAgAGYAaQBsAGUALQBzAGgAYQByAGkAbgBnACAAbwByACAAbwB0AGgAZQByAHcAaQBzAGUAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIAB0AG8AIABiAGUAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuACwAIABwAHIAbwB2AGkAZABlAGQAIAB0AGgAZQByAGUAIABpAHMAIABuAG8AIABwAGEAeQBtAGUAbgB0ACAAbwBmACAAYQBuAHkAIABtAG8AbgBlAHQAYQByAHkAIABjAG8AbQBwAGUAbgBzAGEAdABpAG8AbgAgAGkAbgAgAGMAbwBuAG4AZQBjAHQAaQBvAG4AIAB3AGkAdABoACAAdABoAGUAIABlAHgAYwBoAGEAbgBnAGUAIABvAGYAIABjAG8AcAB5AHIAaQBnAGgAdABlAGQAIAB3AG8AcgBrAHMALgANAAoADQAKADUALgAgAFIAZQBwAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBzACwAIABXAGEAcgByAGEAbgB0AGkAZQBzACAAYQBuAGQAIABEAGkAcwBjAGwAYQBpAG0AZQByAA0ACgANAAoAIAAgACAAMQAuACAAQgB5ACAAbwBmAGYAZQByAGkAbgBnACAAdABoAGUAIABXAG8AcgBrACAAZgBvAHIAIABwAHUAYgBsAGkAYwAgAHIAZQBsAGUAYQBzAGUAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAcwAgAGEAbgBkACAAdwBhAHIAcgBhAG4AdABzACAAdABoAGEAdAAsACAAdABvACAAdABoAGUAIABiAGUAcwB0ACAAbwBmACAATABpAGMAZQBuAHMAbwByACcAcwAgAGsAbgBvAHcAbABlAGQAZwBlACAAYQBmAHQAZQByACAAcgBlAGEAcwBvAG4AYQBiAGwAZQAgAGkAbgBxAHUAaQByAHkAOgANAAoAIAAgACAAIAAgACAAIAAgACAAMQAuACAATABpAGMAZQBuAHMAbwByACAAaABhAHMAIABzAGUAYwB1AHIAZQBkACAAYQBsAGwAIAByAGkAZwBoAHQAcwAgAGkAbgAgAHQAaABlACAAVwBvAHIAawAgAG4AZQBjAGUAcwBzAGEAcgB5ACAAdABvACAAZwByAGEAbgB0ACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAcgBpAGcAaAB0AHMAIABoAGUAcgBlAHUAbgBkAGUAcgAgAGEAbgBkACAAdABvACAAcABlAHIAbQBpAHQAIAB0AGgAZQAgAGwAYQB3AGYAdQBsACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAgAHcAaQB0AGgAbwB1AHQAIABZAG8AdQAgAGgAYQB2AGkAbgBnACAAYQBuAHkAIABvAGIAbABpAGcAYQB0AGkAbwBuACAAdABvACAAcABhAHkAIABhAG4AeQAgAHIAbwB5AGEAbAB0AGkAZQBzACwAIABjAG8AbQBwAHUAbABzAG8AcgB5ACAAbABpAGMAZQBuAHMAZQAgAGYAZQBlAHMALAAgAHIAZQBzAGkAZAB1AGEAbABzACAAbwByACAAYQBuAHkAIABvAHQAaABlAHIAIABwAGEAeQBtAGUAbgB0AHMAOwANAAoAIAAgACAAIAAgACAAIAAgACAAMgAuACAAVABoAGUAIABXAG8AcgBrACAAZABvAGUAcwAgAG4AbwB0ACAAaQBuAGYAcgBpAG4AZwBlACAAdABoAGUAIABjAG8AcAB5AHIAaQBnAGgAdAAsACAAdAByAGEAZABlAG0AYQByAGsALAAgAHAAdQBiAGwAaQBjAGkAdAB5ACAAcgBpAGcAaAB0AHMALAAgAGMAbwBtAG0AbwBuACAAbABhAHcAIAByAGkAZwBoAHQAcwAgAG8AcgAgAGEAbgB5ACAAbwB0AGgAZQByACAAcgBpAGcAaAB0ACAAbwBmACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkAIABvAHIAIABjAG8AbgBzAHQAaQB0AHUAdABlACAAZABlAGYAYQBtAGEAdABpAG8AbgAsACAAaQBuAHYAYQBzAGkAbwBuACAAbwBmACAAcAByAGkAdgBhAGMAeQAgAG8AcgAgAG8AdABoAGUAcgAgAHQAbwByAHQAaQBvAHUAcwAgAGkAbgBqAHUAcgB5ACAAdABvACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkALgANAAoAIAAgACAAMgAuACAARQBYAEMARQBQAFQAIABBAFMAIABFAFgAUABSAEUAUwBTAEwAWQAgAFMAVABBAFQARQBEACAASQBOACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABPAFQASABFAFIAVwBJAFMARQAgAEEARwBSAEUARQBEACAASQBOACAAVwBSAEkAVABJAE4ARwAgAE8AUgAgAFIARQBRAFUASQBSAEUARAAgAEIAWQAgAEEAUABQAEwASQBDAEEAQgBMAEUAIABMAEEAVwAsACAAVABIAEUAIABXAE8AUgBLACAASQBTACAATABJAEMARQBOAFMARQBEACAATwBOACAAQQBOACAAIgBBAFMAIABJAFMAIgAgAEIAQQBTAEkAUwAsACAAVwBJAFQASABPAFUAVAAgAFcAQQBSAFIAQQBOAFQASQBFAFMAIABPAEYAIABBAE4AWQAgAEsASQBOAEQALAAgAEUASQBUAEgARQBSACAARQBYAFAAUgBFAFMAUwAgAE8AUgAgAEkATQBQAEwASQBFAEQAIABJAE4AQwBMAFUARABJAE4ARwAsACAAVwBJAFQASABPAFUAVAAgAEwASQBNAEkAVABBAFQASQBPAE4ALAAgAEEATgBZACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAFIARQBHAEEAUgBEAEkATgBHACAAVABIAEUAIABDAE8ATgBUAEUATgBUAFMAIABPAFIAIABBAEMAQwBVAFIAQQBDAFkAIABPAEYAIABUAEgARQAgAFcATwBSAEsALgANAAoADQAKADYALgAgAEwAaQBtAGkAdABhAHQAaQBvAG4AIABvAG4AIABMAGkAYQBiAGkAbABpAHQAeQAuACAARQBYAEMARQBQAFQAIABUAE8AIABUAEgARQAgAEUAWABUAEUATgBUACAAUgBFAFEAVQBJAFIARQBEACAAQgBZACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXACwAIABBAE4ARAAgAEUAWABDAEUAUABUACAARgBPAFIAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAEYAUgBPAE0AIABMAEkAQQBCAEkATABJAFQAWQAgAFQATwAgAEEAIABUAEgASQBSAEQAIABQAEEAUgBUAFkAIABSAEUAUwBVAEwAVABJAE4ARwAgAEYAUgBPAE0AIABCAFIARQBBAEMASAAgAE8ARgAgAFQASABFACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAEkATgAgAFMARQBDAFQASQBPAE4AIAA1ACwAIABJAE4AIABOAE8AIABFAFYARQBOAFQAIABXAEkATABMACAATABJAEMARQBOAFMATwBSACAAQgBFACAATABJAEEAQgBMAEUAIABUAE8AIABZAE8AVQAgAE8ATgAgAEEATgBZACAATABFAEcAQQBMACAAVABIAEUATwBSAFkAIABGAE8AUgAgAEEATgBZACAAUwBQAEUAQwBJAEEATAAsACAASQBOAEMASQBEAEUATgBUAEEATAAsACAAQwBPAE4AUwBFAFEAVQBFAE4AVABJAEEATAAsACAAUABVAE4ASQBUAEkAVgBFACAATwBSACAARQBYAEUATQBQAEwAQQBSAFkAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAE8AVQBUACAATwBGACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABUAEgARQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACwAIABFAFYARQBOACAASQBGACAATABJAEMARQBOAFMATwBSACAASABBAFMAIABCAEUARQBOACAAQQBEAFYASQBTAEUARAAgAE8ARgAgAFQASABFACAAUABPAFMAUwBJAEIASQBMAEkAVABZACAATwBGACAAUwBVAEMASAAgAEQAQQBNAEEARwBFAFMALgANAAoADQAKADcALgAgAFQAZQByAG0AaQBuAGEAdABpAG8AbgANAAoADQAKACAAIAAgADEALgAgAFQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAdQBuAGQAZQByACAAdwBpAGwAbAAgAHQAZQByAG0AaQBuAGEAdABlACAAYQB1AHQAbwBtAGEAdABpAGMAYQBsAGwAeQAgAHUAcABvAG4AIABhAG4AeQAgAGIAcgBlAGEAYwBoACAAYgB5ACAAWQBvAHUAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4AIABJAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAB3AGgAbwAgAGgAYQB2AGUAIAByAGUAYwBlAGkAdgBlAGQAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawBzACAAbwByACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAcwAgAGYAcgBvAG0AIABZAG8AdQAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABoAG8AdwBlAHYAZQByACwAIAB3AGkAbABsACAAbgBvAHQAIABoAGEAdgBlACAAdABoAGUAaQByACAAbABpAGMAZQBuAHMAZQBzACAAdABlAHIAbQBpAG4AYQB0AGUAZAAgAHAAcgBvAHYAaQBkAGUAZAAgAHMAdQBjAGgAIABpAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAByAGUAbQBhAGkAbgAgAGkAbgAgAGYAdQBsAGwAIABjAG8AbQBwAGwAaQBhAG4AYwBlACAAdwBpAHQAaAAgAHQAaABvAHMAZQAgAGwAaQBjAGUAbgBzAGUAcwAuACAAUwBlAGMAdABpAG8AbgBzACAAMQAsACAAMgAsACAANQAsACAANgAsACAANwAsACAAYQBuAGQAIAA4ACAAdwBpAGwAbAAgAHMAdQByAHYAaQB2AGUAIABhAG4AeQAgAHQAZQByAG0AaQBuAGEAdABpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgAFMAdQBiAGoAZQBjAHQAIAB0AG8AIAB0AGgAZQAgAGEAYgBvAHYAZQAgAHQAZQByAG0AcwAgAGEAbgBkACAAYwBvAG4AZABpAHQAaQBvAG4AcwAsACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAIABpAHMAIABwAGUAcgBwAGUAdAB1AGEAbAAgACgAZgBvAHIAIAB0AGgAZQAgAGQAdQByAGEAdABpAG8AbgAgAG8AZgAgAHQAaABlACAAYQBwAHAAbABpAGMAYQBiAGwAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAaQBuACAAdABoAGUAIABXAG8AcgBrACkALgAgAE4AbwB0AHcAaQB0AGgAcwB0AGEAbgBkAGkAbgBnACAAdABoAGUAIABhAGIAbwB2AGUALAAgAEwAaQBjAGUAbgBzAG8AcgAgAHIAZQBzAGUAcgB2AGUAcwAgAHQAaABlACAAcgBpAGcAaAB0ACAAdABvACAAcgBlAGwAZQBhAHMAZQAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAGQAaQBmAGYAZQByAGUAbgB0ACAAbABpAGMAZQBuAHMAZQAgAHQAZQByAG0AcwAgAG8AcgAgAHQAbwAgAHMAdABvAHAAIABkAGkAcwB0AHIAaQBiAHUAdABpAG4AZwAgAHQAaABlACAAVwBvAHIAawAgAGEAdAAgAGEAbgB5ACAAdABpAG0AZQA7ACAAcAByAG8AdgBpAGQAZQBkACwAIABoAG8AdwBlAHYAZQByACAAdABoAGEAdAAgAGEAbgB5ACAAcwB1AGMAaAAgAGUAbABlAGMAdABpAG8AbgAgAHcAaQBsAGwAIABuAG8AdAAgAHMAZQByAHYAZQAgAHQAbwAgAHcAaQB0AGgAZAByAGEAdwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAKABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGwAaQBjAGUAbgBzAGUAIAB0AGgAYQB0ACAAaABhAHMAIABiAGUAZQBuACwAIABvAHIAIABpAHMAIAByAGUAcQB1AGkAcgBlAGQAIAB0AG8AIABiAGUALAAgAGcAcgBhAG4AdABlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACkALAAgAGEAbgBkACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAbABsACAAYwBvAG4AdABpAG4AdQBlACAAaQBuACAAZgB1AGwAbAAgAGYAbwByAGMAZQAgAGEAbgBkACAAZQBmAGYAZQBjAHQAIAB1AG4AbABlAHMAcwAgAHQAZQByAG0AaQBuAGEAdABlAGQAIABhAHMAIABzAHQAYQB0AGUAZAAgAGEAYgBvAHYAZQAuAA0ACgANAAoAOAAuACAATQBpAHMAYwBlAGwAbABhAG4AZQBvAHUAcwANAAoADQAKACAAIAAgADEALgAgAEUAYQBjAGgAIAB0AGkAbQBlACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACAAbwByACAAcAB1AGIAbABpAGMAbAB5ACAAZABpAGcAaQB0AGEAbABsAHkAIABwAGUAcgBmAG8AcgBtACAAdABoAGUAIABXAG8AcgBrACAAbwByACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACwAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMgAuACAARQBhAGMAaAAgAHQAaQBtAGUAIABZAG8AdQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABvAHIAaQBnAGkAbgBhAGwAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMwAuACAASQBmACAAYQBuAHkAIABwAHIAbwB2AGkAcwBpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAaQBzACAAaQBuAHYAYQBsAGkAZAAgAG8AcgAgAHUAbgBlAG4AZgBvAHIAYwBlAGEAYgBsAGUAIAB1AG4AZABlAHIAIABhAHAAcABsAGkAYwBhAGIAbABlACAAbABhAHcALAAgAGkAdAAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYQBmAGYAZQBjAHQAIAB0AGgAZQAgAHYAYQBsAGkAZABpAHQAeQAgAG8AcgAgAGUAbgBmAG8AcgBjAGUAYQBiAGkAbABpAHQAeQAgAG8AZgAgAHQAaABlACAAcgBlAG0AYQBpAG4AZABlAHIAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAHcAaQB0AGgAbwB1AHQAIABmAHUAcgB0AGgAZQByACAAYQBjAHQAaQBvAG4AIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB0AG8AIAB0AGgAaQBzACAAYQBnAHIAZQBlAG0AZQBuAHQALAAgAHMAdQBjAGgAIABwAHIAbwB2AGkAcwBpAG8AbgAgAHMAaABhAGwAbAAgAGIAZQAgAHIAZQBmAG8AcgBtAGUAZAAgAHQAbwAgAHQAaABlACAAbQBpAG4AaQBtAHUAbQAgAGUAeAB0AGUAbgB0ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABtAGEAawBlACAAcwB1AGMAaAAgAHAAcgBvAHYAaQBzAGkAbwBuACAAdgBhAGwAaQBkACAAYQBuAGQAIABlAG4AZgBvAHIAYwBlAGEAYgBsAGUALgANAAoAIAAgACAANAAuACAATgBvACAAdABlAHIAbQAgAG8AcgAgAHAAcgBvAHYAaQBzAGkAbwBuACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABzAGgAYQBsAGwAIABiAGUAIABkAGUAZQBtAGUAZAAgAHcAYQBpAHYAZQBkACAAYQBuAGQAIABuAG8AIABiAHIAZQBhAGMAaAAgAGMAbwBuAHMAZQBuAHQAZQBkACAAdABvACAAdQBuAGwAZQBzAHMAIABzAHUAYwBoACAAdwBhAGkAdgBlAHIAIABvAHIAIABjAG8AbgBzAGUAbgB0ACAAcwBoAGEAbABsACAAYgBlACAAaQBuACAAdwByAGkAdABpAG4AZwAgAGEAbgBkACAAcwBpAGcAbgBlAGQAIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAeQAgAHQAbwAgAGIAZQAgAGMAaABhAHIAZwBlAGQAIAB3AGkAdABoACAAcwB1AGMAaAAgAHcAYQBpAHYAZQByACAAbwByACAAYwBvAG4AcwBlAG4AdAAuAA0ACgAgACAAIAA1AC4AIABUAGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAHQAaABlACAAZQBuAHQAaQByAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAgAGIAZQB0AHcAZQBlAG4AIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAGwAaQBjAGUAbgBzAGUAZAAgAGgAZQByAGUALgAgAFQAaABlAHIAZQAgAGEAcgBlACAAbgBvACAAdQBuAGQAZQByAHMAdABhAG4AZABpAG4AZwBzACwAIABhAGcAcgBlAGUAbQBlAG4AdABzACAAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAG4AbwB0ACAAcwBwAGUAYwBpAGYAaQBlAGQAIABoAGUAcgBlAC4AIABMAGkAYwBlAG4AcwBvAHIAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGIAbwB1AG4AZAAgAGIAeQAgAGEAbgB5ACAAYQBkAGQAaQB0AGkAbwBuAGEAbAAgAHAAcgBvAHYAaQBzAGkAbwBuAHMAIAB0AGgAYQB0ACAAbQBhAHkAIABhAHAAcABlAGEAcgAgAGkAbgAgAGEAbgB5ACAAYwBvAG0AbQB1AG4AaQBjAGEAdABpAG8AbgAgAGYAcgBvAG0AIABZAG8AdQAuACAAVABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABtAGEAeQAgAG4AbwB0ACAAYgBlACAAbQBvAGQAaQBmAGkAZQBkACAAdwBpAHQAaABvAHUAdAAgAHQAaABlACAAbQB1AHQAdQBhAGwAIAB3AHIAaQB0AHQAZQBuACAAYQBnAHIAZQBlAG0AZQBuAHQAIABvAGYAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAGEAbgBkACAAWQBvAHUALgBoAHQAdABwADoALwAvAGMAcgBlAGEAdABpAHYAZQBjAG8AbQBtAG8AbgBzAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBuAGMALQBzAGEALwAxAC4AMAAvAAIAAAAAAAD/6QAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAMABgAHAAgACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIgAjAD4APwBAAEEAQgBGAEcASABJAEoASwBMAE4ATwBQAFEAUgBWAFcAWABaAFsAXABdAGEAqwDYALYAtAC1AIcAsgCzANkAjACsAKMAhACFAL0AhgCOAIsAigECAI0BAwDeAKIABAAFAEUAVQC3AAkAsQAgAL4AvwCpAKoAiACkAMQAxQCmAB8AxgAhAF4AYACdAFQAUwBNALsAlgCJALAAkABfAK0AyQDHAK4AYgBjAGoAaQBrAG0AbABuAKAAZABvAMsAZQDIAMoAcQBwAHIAcwDPAMwAzQDOAHUAdAB2AHcA0wDQANEArwBnAJEAegB5AHsAfQB8AKEA1gDUANUAaAB/AH4AgACBALoAZgB4AEQAWQEEAAIBBQEGAOgA8QDyAPMBBwDnAOYA9QD0APYA6wDsAOQA5QDqAO4GbWFjcm9uDnBlcmlvZGNlbnRlcmVkBS5udWxsBGEuMDEEdi4wMgRFdXJvAAAAAAH//wADAAAAAQABAQEBAQAMAPgI/wAIAAf//QAJAAj//QAKAAj//QALAAn//AAMAAr//AANAAv//AAOAAz/+wAPAAz/+wAQAA3/+wARAA7/+wASAA//+gATABD/+gAUABD/+gAVABH/+QAWABL/+QAXABP/+QAYABT/+QAZABT/+AAaABX/+AAbABb/+AAcABf/9wAdABj/9wAeABj/9wAfABn/9gAgABr/9gAhABv/9gAiABz/9gAjABz/9QAkAB3/9QAlAB7/9QAmAB//9AAnACD/9AAoACD/9AApACH/9AAqACL/8wArACP/8wAsACT/8wAtACT/8gAuACX/8gAvACb/8gAwACf/8gAxACj/8QAyACj/8QAzACn/8QA0ACr/8AA1ACv/8AA2ACz/8AA3ACz/7wA4AC3/7wA5AC7/7wA6AC//7wA7ADD/7gA8ADD/7gA9ADH/7gA+ADL/7QA/ADP/7QBAADT/7QBBADT/7QBCADX/7ABDADb/7ABEADf/7ABFADj/6wBGADj/6wBHADn/6wBIADr/6wBJADv/6gBKADz/6gBLADz/6gBMAD3/6QBNAD7/6QBOAD//6QBPAED/6QBQAED/6ABRAEH/6ABSAEL/6ABTAEP/5wBUAET/5wBVAET/5wBWAEX/5gBXAEb/5gBYAEf/5gBZAEj/5gBaAEj/5QBbAEn/5QBcAEr/5QBdAEv/5ABeAEz/5ABfAEz/5ABgAE3/5ABhAE7/4wBiAE//4wBjAFD/4wBkAFD/4gBlAFH/4gBmAFL/4gBnAFP/4gBoAFT/4QBpAFT/4QBqAFX/4QBrAFb/4ABsAFf/4ABtAFj/4ABuAFj/3wBvAFn/3wBwAFr/3wBxAFv/3wByAFz/3gBzAFz/3gB0AF3/3gB1AF7/3QB2AF//3QB3AGD/3QB4AGD/3QB5AGH/3AB6AGL/3AB7AGP/3AB8AGT/2wB9AGT/2wB+AGX/2wB/AGb/2wCAAGf/2gCBAGj/2gCCAGj/2gCDAGn/2QCEAGr/2QCFAGv/2QCGAGz/2QCHAGz/2ACIAG3/2ACJAG7/2ACKAG//1wCLAHD/1wCMAHD/1wCNAHH/1gCOAHL/1gCPAHP/1gCQAHT/1gCRAHT/1QCSAHX/1QCTAHb/1QCUAHf/1ACVAHj/1ACWAHj/1ACXAHn/1ACYAHr/0wCZAHv/0wCaAHz/0wCbAHz/0gCcAH3/0gCdAH7/0gCeAH//0gCfAID/0QCgAID/0QChAIH/0QCiAIL/0ACjAIP/0ACkAIT/0AClAIT/zwCmAIX/zwCnAIb/zwCoAIf/zwCpAIj/zgCqAIj/zgCrAIn/zgCsAIr/zQCtAIv/zQCuAIz/zQCvAIz/zQCwAI3/zACxAI7/zACyAI//zACzAJD/ywC0AJD/ywC1AJH/ywC2AJL/ywC3AJP/ygC4AJT/ygC5AJT/ygC6AJX/yQC7AJb/yQC8AJf/yQC9AJj/yQC+AJj/yAC/AJn/yADAAJr/yADBAJv/xwDCAJz/xwDDAJz/xwDEAJ3/xgDFAJ7/xgDGAJ//xgDHAKD/xgDIAKD/xQDJAKH/xQDKAKL/xQDLAKP/xADMAKT/xADNAKT/xADOAKX/xADPAKb/wwDQAKf/wwDRAKj/wwDSAKj/wgDTAKn/wgDUAKr/wgDVAKv/wgDWAKz/wQDXAKz/wQDYAK3/wQDZAK7/wADaAK//wADbALD/wADcALD/vwDdALH/vwDeALL/vwDfALP/vwDgALT/vgDhALT/vgDiALX/vgDjALb/vQDkALf/vQDlALj/vQDmALj/vQDnALn/vADoALr/vADpALv/vADqALz/uwDrALz/uwDsAL3/uwDtAL7/uwDuAL//ugDvAMD/ugDwAMD/ugDxAMH/uQDyAML/uQDzAMP/uQD0AMT/uAD1AMT/uAD2AMX/uAD3AMb/uAD4AMf/twD5AMj/twD6AMj/twD7AMn/tgD8AMr/tgD9AMv/tgD+AMz/tgD/AMz/tQ==";
2671
+
2672
+ // src/components/WandyHand.tsx
2673
+ var import_jsx_runtime10 = require("react/jsx-runtime");
2674
+ function dist(a, b) {
2675
+ const dx = a.x - b.x;
2676
+ const dy = a.y - b.y;
2677
+ return Math.hypot(dx, dy);
2678
+ }
2679
+ function polylineLength(points) {
2680
+ let L = 0;
2681
+ for (let i = 1; i < points.length; i++) L += dist(points[i - 1], points[i]);
2682
+ return L;
2683
+ }
2684
+ function lerp(a, b, t) {
2685
+ return a + (b - a) * t;
2686
+ }
2687
+ function mulberry32(seed) {
2688
+ let t = seed >>> 0;
2689
+ return function() {
2690
+ t += 1831565813;
2691
+ let r = Math.imul(t ^ t >>> 15, t | 1);
2692
+ r ^= r + Math.imul(r ^ r >>> 7, r | 61);
2693
+ return ((r ^ r >>> 14) >>> 0) / 4294967296;
2694
+ };
2695
+ }
2696
+ function hashStringToSeed(str) {
2697
+ let h = 1779033703 ^ str.length;
2698
+ for (let i = 0; i < str.length; i++) {
2699
+ h = Math.imul(h ^ str.charCodeAt(i), 3432918353);
2700
+ h = h << 13 | h >>> 19;
2701
+ }
2702
+ return h >>> 0;
2703
+ }
2704
+ function randomBetween(rng, min, max) {
2705
+ return min + (max - min) * rng();
2706
+ }
2707
+ function randomOffset(rng, magnitude) {
2708
+ return {
2709
+ x: randomBetween(rng, -magnitude, magnitude),
2710
+ y: randomBetween(rng, -magnitude, magnitude)
2711
+ };
2712
+ }
2713
+ function easeInOut(t) {
2714
+ if (t <= 0) return 0;
2715
+ if (t >= 1) return 1;
2716
+ return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
2717
+ }
2718
+ function sampleCubic(p0, p1, p2, p3, steps) {
2719
+ const pts = [];
2720
+ for (let i = 0; i <= steps; i++) {
2721
+ const t = i / steps;
2722
+ const mt = 1 - t;
2723
+ const x = mt * mt * mt * p0.x + 3 * mt * mt * t * p1.x + 3 * mt * t * t * p2.x + t * t * t * p3.x;
2724
+ const y = mt * mt * mt * p0.y + 3 * mt * mt * t * p1.y + 3 * mt * t * t * p2.y + t * t * t * p3.y;
2725
+ pts.push({ x, y });
2726
+ }
2727
+ return pts;
2728
+ }
2729
+ function sampleQuadratic(p0, p1, p2, steps) {
2730
+ const pts = [];
2731
+ for (let i = 0; i <= steps; i++) {
2732
+ const t = i / steps;
2733
+ const mt = 1 - t;
2734
+ const x = mt * mt * p0.x + 2 * mt * t * p1.x + t * t * p2.x;
2735
+ const y = mt * mt * p0.y + 2 * mt * t * p1.y + t * t * p2.y;
2736
+ pts.push({ x, y });
2737
+ }
2738
+ return pts;
2739
+ }
2740
+ function pathToPolylines(commands, samplesPerCurve = 16) {
2741
+ const polylines = [];
2742
+ let current = [];
2743
+ let pen = { x: 0, y: 0 };
2744
+ let start = { x: 0, y: 0 };
2745
+ const pushCurrent = () => {
2746
+ if (current.length > 1) polylines.push(current);
2747
+ current = [];
2748
+ };
2749
+ for (const cmd of commands) {
2750
+ if (cmd.type === "M") {
2751
+ pushCurrent();
2752
+ pen = { x: cmd.x, y: cmd.y };
2753
+ start = { ...pen };
2754
+ current.push({ ...pen });
2755
+ } else if (cmd.type === "L") {
2756
+ pen = { x: cmd.x, y: cmd.y };
2757
+ current.push({ ...pen });
2758
+ } else if (cmd.type === "C") {
2759
+ const p0 = pen;
2760
+ const p1 = { x: cmd.x1, y: cmd.y1 };
2761
+ const p2 = { x: cmd.x2, y: cmd.y2 };
2762
+ const p3 = { x: cmd.x, y: cmd.y };
2763
+ const pts = sampleCubic(p0, p1, p2, p3, samplesPerCurve);
2764
+ current.push(...pts.slice(1));
2765
+ pen = p3;
2766
+ } else if (cmd.type === "Q") {
2767
+ const p0 = pen;
2768
+ const p1 = { x: cmd.x1, y: cmd.y1 };
2769
+ const p2 = { x: cmd.x, y: cmd.y };
2770
+ const pts = sampleQuadratic(p0, p1, p2, samplesPerCurve);
2771
+ current.push(...pts.slice(1));
2772
+ pen = p2;
2773
+ } else if (cmd.type === "Z") {
2774
+ current.push({ ...start });
2775
+ pushCurrent();
2776
+ }
2777
+ }
2778
+ pushCurrent();
2779
+ return polylines;
2780
+ }
2781
+ function polygonSignedArea(points) {
2782
+ let area = 0;
2783
+ for (let i = 0; i < points.length; i++) {
2784
+ const a = points[i];
2785
+ const b = points[(i + 1) % points.length];
2786
+ area += a.x * b.y - b.x * a.y;
2787
+ }
2788
+ return area / 2;
2789
+ }
2790
+ function polylineBounds(points) {
2791
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
2792
+ for (const p of points) {
2793
+ minX = Math.min(minX, p.x);
2794
+ minY = Math.min(minY, p.y);
2795
+ maxX = Math.max(maxX, p.x);
2796
+ maxY = Math.max(maxY, p.y);
2797
+ }
2798
+ if (!points.length) return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
2799
+ return { minX, minY, maxX, maxY };
2800
+ }
2801
+ function getEndDirection(points) {
2802
+ for (let i = points.length - 1; i > 0; i--) {
2803
+ const curr = points[i];
2804
+ const prev = points[i - 1];
2805
+ const dx = curr.x - prev.x;
2806
+ const dy = curr.y - prev.y;
2807
+ const mag = Math.hypot(dx, dy);
2808
+ if (mag > 0) return { x: dx / mag, y: dy / mag };
2809
+ }
2810
+ return { x: 1, y: 0 };
2811
+ }
2812
+ function drawPolylineStamped(ctx, pts, visibleLen, totalLen, strokeWidth, strokeColor, baselineOffset, offsets, poolingStrength) {
2813
+ if (pts.length < 2 || visibleLen <= 0 || totalLen <= 0) return;
2814
+ const maxDistance = Math.min(visibleLen, totalLen);
2815
+ if (maxDistance <= 0) return;
2816
+ const spacing = Math.max(0.5, strokeWidth * 0.3);
2817
+ let nextStamp = 0;
2818
+ let segmentIndex = 1;
2819
+ let segmentStartLen = 0;
2820
+ let segmentLength = dist(pts[0], pts[1]);
2821
+ const lastIndex = pts.length - 1;
2822
+ const advanceSegment = () => {
2823
+ while (segmentLength === 0 && segmentIndex < lastIndex) {
2824
+ segmentIndex++;
2825
+ segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
2826
+ }
2827
+ };
2828
+ advanceSegment();
2829
+ const stampAt = (distance) => {
2830
+ const targetDistance = Math.min(distance, maxDistance);
2831
+ while (segmentIndex < pts.length && targetDistance > segmentStartLen + segmentLength && segmentIndex < lastIndex) {
2832
+ segmentStartLen += segmentLength;
2833
+ segmentIndex++;
2834
+ segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
2835
+ advanceSegment();
2836
+ }
2837
+ const clampedSegmentLen = segmentLength || 1;
2838
+ const segmentDistance = Math.max(0, targetDistance - segmentStartLen);
2839
+ const t = segmentLength === 0 ? 0 : segmentDistance / clampedSegmentLen;
2840
+ const a = pts[segmentIndex - 1];
2841
+ const b = pts[segmentIndex];
2842
+ const point = {
2843
+ x: lerp(a.x, b.x, t),
2844
+ y: lerp(a.y, b.y, t)
2845
+ };
2846
+ const localProgress = maxDistance > 0 ? Math.min(1, targetDistance / maxDistance) : 1;
2847
+ const delta = localProgress < 0.5 ? {
2848
+ x: lerp(offsets.start.x, offsets.mid.x, localProgress * 2),
2849
+ y: lerp(offsets.start.y, offsets.mid.y, localProgress * 2)
2850
+ } : {
2851
+ x: lerp(offsets.mid.x, offsets.end.x, (localProgress - 0.5) * 2),
2852
+ y: lerp(offsets.mid.y, offsets.end.y, (localProgress - 0.5) * 2)
2853
+ };
2854
+ point.x += baselineOffset.x + delta.x;
2855
+ point.y += baselineOffset.y + delta.y;
2856
+ const pressure = Math.max(0, Math.sin(Math.PI * localProgress));
2857
+ const poolingFactor = localProgress >= 0.7 ? Math.pow((localProgress - 0.7) / 0.3, 1.1) : 0;
2858
+ const radius = Math.max(
2859
+ 0.1,
2860
+ strokeWidth * (0.35 + 0.65 * pressure) * (1 + poolingStrength * poolingFactor)
2861
+ );
2862
+ ctx.moveTo(point.x + radius, point.y);
2863
+ ctx.arc(point.x, point.y, radius, 0, Math.PI * 2);
2864
+ };
2865
+ ctx.save();
2866
+ ctx.fillStyle = strokeColor;
2867
+ ctx.beginPath();
2868
+ while (nextStamp <= maxDistance) {
2869
+ stampAt(nextStamp);
2870
+ nextStamp += spacing;
2871
+ }
2872
+ if (nextStamp - spacing < maxDistance) {
2873
+ stampAt(maxDistance);
2874
+ }
2875
+ ctx.fill();
2876
+ ctx.restore();
2877
+ }
2878
+ function drawOvershootTail(ctx, basePoint, direction, overshootPx, strokeWidth, strokeColor) {
2879
+ if (overshootPx <= 0) return;
2880
+ const dirMag = Math.hypot(direction.x, direction.y) || 1;
2881
+ const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
2882
+ const spacing = Math.max(1, strokeWidth * 0.4);
2883
+ ctx.save();
2884
+ ctx.fillStyle = strokeColor;
2885
+ ctx.beginPath();
2886
+ for (let traveled = 0; traveled <= overshootPx; traveled += spacing) {
2887
+ const progress = Math.min(1, traveled / Math.max(overshootPx, 1e-4));
2888
+ const radius = Math.max(0.1, strokeWidth * (0.25 + 0.35 * (1 - progress)));
2889
+ const x = basePoint.x + dir.x * traveled;
2890
+ const y = basePoint.y + dir.y * traveled;
2891
+ ctx.moveTo(x + radius, y);
2892
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
2893
+ }
2894
+ ctx.fill();
2895
+ ctx.restore();
2896
+ }
2897
+ function createFlourishPath(endPoint, direction, rng) {
2898
+ const dirMag = Math.hypot(direction.x, direction.y);
2899
+ if (!dirMag) return null;
2900
+ const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
2901
+ const normal = { x: -dir.y, y: dir.x };
2902
+ const flourishLen = randomBetween(rng, 6, 14);
2903
+ const curl = randomBetween(rng, -0.6, 0.6);
2904
+ const control = {
2905
+ x: endPoint.x + dir.x * (flourishLen * 0.5) + normal.x * flourishLen * 0.3 * curl,
2906
+ y: endPoint.y + dir.y * (flourishLen * 0.5) + normal.y * flourishLen * 0.3 * curl
2907
+ };
2908
+ const finalPoint = {
2909
+ x: endPoint.x + dir.x * flourishLen + normal.x * flourishLen * 0.15 * curl,
2910
+ y: endPoint.y + dir.y * flourishLen + normal.y * flourishLen * 0.15 * curl
2911
+ };
2912
+ const flourishPoints = sampleQuadratic(endPoint, control, finalPoint, 12);
2913
+ const length = polylineLength(flourishPoints);
2914
+ if (length <= 0) return null;
2915
+ return { points: flourishPoints, length };
2916
+ }
2917
+ var ZERO_OFFSETS = {
2918
+ start: { x: 0, y: 0 },
2919
+ mid: { x: 0, y: 0 },
2920
+ end: { x: 0, y: 0 }
2921
+ };
2922
+ function resolveCurveSamples(controlValue) {
2923
+ return Math.max(2, Math.round(controlValue * controlValue * 0.75));
2924
+ }
2925
+ function computeBounds(polylines) {
2926
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
2927
+ for (const line of polylines) {
2928
+ for (const p of line) {
2929
+ minX = Math.min(minX, p.x);
2930
+ minY = Math.min(minY, p.y);
2931
+ maxX = Math.max(maxX, p.x);
2932
+ maxY = Math.max(maxY, p.y);
2933
+ }
2934
+ }
2935
+ if (minX === Infinity || minY === Infinity || maxX === -Infinity || maxY === -Infinity) {
2936
+ return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
2937
+ }
2938
+ return { minX, minY, maxX, maxY };
2939
+ }
2940
+ function prepareText(font, text, fontSize, samplesPerCurve) {
2941
+ const glyphs = font.stringToGlyphs(text);
2942
+ const characters = Array.from(text);
2943
+ const contours = [];
2944
+ let totalLen = 0;
2945
+ let penX = 0;
2946
+ const scale = fontSize / font.unitsPerEm;
2947
+ let currentWordIndex = 0;
2948
+ let hasGlyphInCurrentWord = false;
2949
+ const lengthThreshold = Math.max(fontSize * 0.65, 20);
2950
+ const areaThreshold = Math.max(fontSize * fontSize * 0.02, 40);
2951
+ const punctuationRegex = /[!?,.;:'"()]/;
2952
+ for (let i = 0; i < glyphs.length; i++) {
2953
+ const glyph = glyphs[i];
2954
+ const char = characters[i] ?? "";
2955
+ const isWhitespaceChar = /\s/.test(char);
2956
+ const isPunctuationGlyph = punctuationRegex.test(char);
2957
+ if (isWhitespaceChar) {
2958
+ if (hasGlyphInCurrentWord) {
2959
+ currentWordIndex++;
2960
+ hasGlyphInCurrentWord = false;
2961
+ }
2962
+ const advanceWidth2 = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
2963
+ penX += advanceWidth2 * scale;
2964
+ continue;
2965
+ }
2966
+ hasGlyphInCurrentWord = true;
2967
+ const commands = glyph.getPath(penX, 0, fontSize).commands;
2968
+ const glyphLines = pathToPolylines(commands, samplesPerCurve);
2969
+ for (let contourIndex = 0; contourIndex < glyphLines.length; contourIndex++) {
2970
+ const pl = glyphLines[contourIndex];
2971
+ if (pl.length < 2) continue;
2972
+ const length = polylineLength(pl);
2973
+ if (length <= 0) continue;
2974
+ const bounds2 = polylineBounds(pl);
2975
+ const boundsArea = (bounds2.maxX - bounds2.minX) * (bounds2.maxY - bounds2.minY);
2976
+ const signedArea = polygonSignedArea(pl);
2977
+ const isHole = signedArea < 0;
2978
+ const isSecondary = isPunctuationGlyph || length < lengthThreshold || boundsArea < areaThreshold;
2979
+ contours.push({
2980
+ id: `word${currentWordIndex}-glyph${i}-contour${contourIndex}`,
2981
+ points: pl,
2982
+ length,
2983
+ bounds: bounds2,
2984
+ boundsArea,
2985
+ glyphIndex: i,
2986
+ wordIndex: currentWordIndex,
2987
+ signedArea,
2988
+ isHole,
2989
+ isSecondary,
2990
+ isPunctuation: isPunctuationGlyph
2991
+ });
2992
+ totalLen += length;
2993
+ }
2994
+ const advanceWidth = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
2995
+ penX += advanceWidth * scale;
2996
+ if (i < glyphs.length - 1) {
2997
+ const kern = font.getKerningValue(glyph, glyphs[i + 1]);
2998
+ penX += kern * scale;
2999
+ }
3000
+ }
3001
+ const polylines = contours.map((c) => c.points);
3002
+ const bounds = computeBounds(polylines);
3003
+ return { contours, polylines, totalLen, bounds };
3004
+ }
3005
+ function createStrokePlan(contours, totalLen, durationMs, text, imperfectionsEnabled) {
3006
+ if (!contours.length || totalLen <= 0) {
3007
+ return { strokes: [], totalMs: 0 };
3008
+ }
3009
+ const seed = hashStringToSeed(text);
3010
+ const rng = mulberry32(seed || 1);
3011
+ const effectiveDuration = durationMs > 0 ? durationMs : Math.max(totalLen, 1);
3012
+ const baseSpeed = totalLen / Math.max(effectiveDuration, 1);
3013
+ const wordGroups = /* @__PURE__ */ new Map();
3014
+ for (const contour of contours) {
3015
+ const existing = wordGroups.get(contour.wordIndex) ?? {
3016
+ primaries: [],
3017
+ secondaries: [],
3018
+ baselineDrift: { x: 0, y: 0 }
3019
+ };
3020
+ if (!wordGroups.has(contour.wordIndex)) {
3021
+ existing.baselineDrift = imperfectionsEnabled ? {
3022
+ x: randomBetween(rng, -1, 1),
3023
+ y: randomBetween(rng, -1, 1)
3024
+ } : { x: 0, y: 0 };
3025
+ }
3026
+ if (contour.isSecondary) existing.secondaries.push(contour);
3027
+ else existing.primaries.push(contour);
3028
+ wordGroups.set(contour.wordIndex, existing);
3029
+ }
3030
+ const sortContours = (items) => items.sort((a, b) => {
3031
+ if (a.glyphIndex !== b.glyphIndex) {
3032
+ return a.glyphIndex - b.glyphIndex;
3033
+ }
3034
+ if (a.isHole !== b.isHole) {
3035
+ return Number(a.isHole) - Number(b.isHole);
3036
+ }
3037
+ return b.boundsArea - a.boundsArea;
3038
+ });
3039
+ const wordIndices = Array.from(wordGroups.keys()).sort((a, b) => a - b);
3040
+ const strokes = [];
3041
+ let cursor = 0;
3042
+ let lastWordIndex = null;
3043
+ const scheduleContour = (contour, kind, baselineDrift, isLastInWord) => {
3044
+ const length = contour.length;
3045
+ const durationMultiplier = lerp(0.8, 1.2, rng());
3046
+ const baseDuration = baseSpeed > 0 ? length / baseSpeed : length / Math.max(totalLen, 1);
3047
+ const durationMsForStroke = Math.max(baseDuration * durationMultiplier, 24);
3048
+ const isNewWord = lastWordIndex === null || contour.wordIndex !== lastWordIndex;
3049
+ let pauseBeforeMs = 0;
3050
+ if (strokes.length > 0) {
3051
+ if (isNewWord) {
3052
+ pauseBeforeMs = randomBetween(rng, 120, 250);
3053
+ } else if (contour.isPunctuation) {
3054
+ pauseBeforeMs = randomBetween(rng, 60, 140);
3055
+ } else {
3056
+ pauseBeforeMs = randomBetween(rng, 10, 60);
3057
+ if (kind === "secondary") {
3058
+ pauseBeforeMs += randomBetween(rng, 40, 110);
3059
+ }
3060
+ }
3061
+ }
3062
+ cursor += pauseBeforeMs;
3063
+ const startMs = cursor;
3064
+ cursor += durationMsForStroke;
3065
+ const offsets = imperfectionsEnabled ? {
3066
+ start: randomOffset(rng, 0.8),
3067
+ mid: randomOffset(rng, 0.6),
3068
+ end: randomOffset(rng, 0.8)
3069
+ } : ZERO_OFFSETS;
3070
+ const poolingStrength = imperfectionsEnabled ? randomBetween(rng, 0.05, 0.32) : 0;
3071
+ const overshootPx = imperfectionsEnabled ? kind === "secondary" ? randomBetween(rng, 1.5, 4) : randomBetween(rng, 2, 6) : 0;
3072
+ const endDirection = getEndDirection(contour.points);
3073
+ let flourish;
3074
+ if (imperfectionsEnabled && isLastInWord && kind === "main" && rng() < 0.35) {
3075
+ const flourishPath = createFlourishPath(
3076
+ contour.points[contour.points.length - 1],
3077
+ endDirection,
3078
+ rng
3079
+ );
3080
+ if (flourishPath) {
3081
+ flourish = flourishPath;
3082
+ }
3083
+ }
3084
+ strokes.push({
3085
+ id: contour.id,
3086
+ points: contour.points,
3087
+ length,
3088
+ startMs,
3089
+ durationMs: durationMsForStroke,
3090
+ pauseBeforeMs,
3091
+ wordBoundary: isNewWord,
3092
+ kind,
3093
+ wordIndex: contour.wordIndex,
3094
+ baselineDrift,
3095
+ offsets,
3096
+ poolingStrength,
3097
+ overshootPx,
3098
+ endDirection,
3099
+ flourish
3100
+ });
3101
+ lastWordIndex = contour.wordIndex;
3102
+ };
3103
+ for (const wordIndex of wordIndices) {
3104
+ const group = wordGroups.get(wordIndex);
3105
+ if (!group) continue;
3106
+ const orderedPrimaries = sortContours(group.primaries).map((contour) => ({
3107
+ contour,
3108
+ kind: "main"
3109
+ }));
3110
+ const orderedSecondaries = sortContours(group.secondaries).map(
3111
+ (contour) => ({
3112
+ contour,
3113
+ kind: "secondary"
3114
+ })
3115
+ );
3116
+ const orderedContours = [...orderedPrimaries, ...orderedSecondaries];
3117
+ orderedContours.forEach(({ contour, kind }, idx) => {
3118
+ const isLastInWord = idx === orderedContours.length - 1;
3119
+ scheduleContour(contour, kind, group.baselineDrift, isLastInWord);
3120
+ });
3121
+ }
3122
+ const totalMs = cursor;
3123
+ return { strokes, totalMs };
3124
+ }
3125
+ var WANDY_HAND_DEFAULTS = {
3126
+ fontSize: 160,
3127
+ durationMs: 2200,
3128
+ strokeWidth: 3.2,
3129
+ penOpacity: 1,
3130
+ strokeColor: "#fff",
3131
+ lineCap: "round",
3132
+ lineJoin: "round",
3133
+ samplesPerCurve: 5,
3134
+ strokeMode: "outline",
3135
+ canvasPadding: 8,
3136
+ backgroundColor: "transparent",
3137
+ imperfectionsEnabled: false,
3138
+ animate: true
3139
+ };
3140
+ function WandyHand({
3141
+ text,
3142
+ fontUrl,
3143
+ fontSize,
3144
+ durationMs = WANDY_HAND_DEFAULTS.durationMs,
3145
+ strokeWidth = WANDY_HAND_DEFAULTS.strokeWidth,
3146
+ penOpacity = WANDY_HAND_DEFAULTS.penOpacity,
3147
+ strokeColor = WANDY_HAND_DEFAULTS.strokeColor,
3148
+ lineCap = WANDY_HAND_DEFAULTS.lineCap,
3149
+ lineJoin = WANDY_HAND_DEFAULTS.lineJoin,
3150
+ samplesPerCurve = WANDY_HAND_DEFAULTS.samplesPerCurve,
3151
+ strokeMode = WANDY_HAND_DEFAULTS.strokeMode,
3152
+ canvasPadding = WANDY_HAND_DEFAULTS.canvasPadding,
3153
+ backgroundColor = WANDY_HAND_DEFAULTS.backgroundColor,
3154
+ imperfectionsEnabled = WANDY_HAND_DEFAULTS.imperfectionsEnabled,
3155
+ size,
3156
+ animate = WANDY_HAND_DEFAULTS.animate,
3157
+ onDrawn
3158
+ }) {
3159
+ const canvasRef = (0, import_react9.useRef)(null);
3160
+ const rafRef = (0, import_react9.useRef)(null);
3161
+ const [font, setFont] = (0, import_react9.useState)(null);
3162
+ const resolvedFontUrl = fontUrl ?? waltographUI_default;
3163
+ const onDrawnRef = (0, import_react9.useRef)(onDrawn);
3164
+ const drawRunRef = (0, import_react9.useRef)(0);
3165
+ const drawNotifiedRef = (0, import_react9.useRef)(false);
3166
+ const resolvedFontSize = typeof fontSize === "number" && fontSize > 0 ? fontSize : 160;
3167
+ const sizeValue = size !== void 0 ? typeof size === "number" ? `${Math.max(0, size)}px` : `${size}` : null;
3168
+ const LINE_CAP_MAP = {
3169
+ round: "round",
3170
+ butt: "butt",
3171
+ square: "square"
3172
+ };
3173
+ const LINE_JOIN_MAP = {
3174
+ round: "round",
3175
+ miter: "miter",
3176
+ bevel: "bevel"
3177
+ };
3178
+ const STROKE_MODE_MAP = {
3179
+ outline: "outline",
3180
+ "outline reveal": "outline",
3181
+ "full stroke": "full",
3182
+ full: "full"
3183
+ };
3184
+ const normalizeLineCap = (value) => {
3185
+ if (!value) return "round";
3186
+ const lower = value.toLowerCase();
3187
+ return LINE_CAP_MAP[lower] ?? "round";
3188
+ };
3189
+ const normalizeLineJoin = (value) => {
3190
+ if (!value) return "round";
3191
+ const lower = value.toLowerCase();
3192
+ return LINE_JOIN_MAP[lower] ?? "round";
3193
+ };
3194
+ const normalizeStrokeMode = (value) => {
3195
+ if (!value) return "outline";
3196
+ const lower = value.toLowerCase();
3197
+ return STROKE_MODE_MAP[lower] ?? "outline";
3198
+ };
3199
+ const resolvedLineCap = normalizeLineCap(lineCap);
3200
+ const resolvedLineJoin = normalizeLineJoin(lineJoin);
3201
+ const resolvedStrokeMode = normalizeStrokeMode(strokeMode);
3202
+ const resolvedSamplesPerCurve = resolveCurveSamples(samplesPerCurve);
3203
+ (0, import_react9.useEffect)(() => {
3204
+ onDrawnRef.current = onDrawn;
3205
+ }, [onDrawn]);
3206
+ (0, import_react9.useEffect)(() => {
3207
+ let cancelled = false;
3208
+ const loadFont = async () => {
3209
+ try {
3210
+ const response = await fetch(resolvedFontUrl);
3211
+ if (!response.ok) {
3212
+ throw new Error(
3213
+ `Failed to load font (${response.status} ${response.statusText})`
3214
+ );
3215
+ }
3216
+ const contentType = response.headers.get("content-type") ?? "";
3217
+ if (contentType && !contentType.includes("font") && !contentType.includes("application/octet-stream") && !resolvedFontUrl.startsWith("data:")) {
3218
+ throw new Error(
3219
+ `Unexpected font content-type "${contentType}" for ${resolvedFontUrl}`
3220
+ );
3221
+ }
3222
+ const buffer = await response.arrayBuffer();
3223
+ const loaded = import_opentype.default.parse(buffer);
3224
+ if (!cancelled) setFont(loaded);
3225
+ } catch (err) {
3226
+ if (!cancelled) {
3227
+ console.error(err);
3228
+ setFont(null);
3229
+ }
3230
+ }
3231
+ };
3232
+ loadFont();
3233
+ return () => {
3234
+ cancelled = true;
3235
+ };
3236
+ }, [resolvedFontUrl]);
3237
+ const prepared = (0, import_react9.useMemo)(() => {
3238
+ if (!font) return null;
3239
+ const safe = text.trim().length ? text : " ";
3240
+ return prepareText(font, safe, resolvedFontSize, resolvedSamplesPerCurve);
3241
+ }, [font, text, resolvedFontSize, resolvedSamplesPerCurve]);
3242
+ const aspectRatio = (0, import_react9.useMemo)(() => {
3243
+ if (!prepared) return null;
3244
+ const width = prepared.bounds.maxX - prepared.bounds.minX;
3245
+ const height = prepared.bounds.maxY - prepared.bounds.minY;
3246
+ return width > 0 && height > 0 ? width / height : null;
3247
+ }, [prepared]);
3248
+ const strokePlan = (0, import_react9.useMemo)(() => {
3249
+ if (!prepared) return null;
3250
+ const safe = text.trim().length ? text : " ";
3251
+ return createStrokePlan(
3252
+ prepared.contours,
3253
+ prepared.totalLen,
3254
+ durationMs,
3255
+ safe,
3256
+ imperfectionsEnabled
3257
+ );
3258
+ }, [prepared, durationMs, text, imperfectionsEnabled]);
3259
+ (0, import_react9.useEffect)(() => {
3260
+ const canvas = canvasRef.current;
3261
+ if (!canvas || !prepared || !strokePlan) return;
3262
+ drawRunRef.current += 1;
3263
+ drawNotifiedRef.current = false;
3264
+ const ctx = canvas.getContext("2d");
3265
+ if (!ctx) return;
3266
+ const safeCanvas = canvas;
3267
+ const safeCtx = ctx;
3268
+ const { polylines, bounds } = prepared;
3269
+ const { strokes, totalMs } = strokePlan;
3270
+ const textW = bounds.maxX - bounds.minX;
3271
+ const textH = bounds.maxY - bounds.minY;
3272
+ const targetAspect = textW > 0 && textH > 0 ? textW / textH : null;
3273
+ function resize() {
3274
+ const dpr = Math.max(1, window.devicePixelRatio || 1);
3275
+ const host = safeCanvas.parentElement ?? safeCanvas;
3276
+ const rect = host.getBoundingClientRect();
3277
+ let nextWidth = rect.width;
3278
+ let nextHeight = rect.height;
3279
+ if (targetAspect) {
3280
+ const rectAspect = rect.width / Math.max(rect.height, 1);
3281
+ if (rectAspect > targetAspect) {
3282
+ nextWidth = rect.height * targetAspect;
3283
+ nextHeight = rect.height;
3284
+ } else {
3285
+ nextWidth = rect.width;
3286
+ nextHeight = rect.width / targetAspect;
3287
+ }
3288
+ }
3289
+ safeCanvas.style.width = `${Math.max(1, nextWidth)}px`;
3290
+ safeCanvas.style.height = `${Math.max(1, nextHeight)}px`;
3291
+ safeCanvas.width = Math.floor(Math.max(1, nextWidth) * dpr);
3292
+ safeCanvas.height = Math.floor(Math.max(1, nextHeight) * dpr);
3293
+ safeCtx.setTransform(dpr, 0, 0, dpr, 0, 0);
3294
+ if (!animate) {
3295
+ renderFrame(Number.POSITIVE_INFINITY, 1);
3296
+ rafRef.current = null;
3297
+ return;
3298
+ }
3299
+ if (rafRef.current === null) {
3300
+ rafRef.current = requestAnimationFrame(draw);
3301
+ }
3302
+ }
3303
+ resize();
3304
+ window.addEventListener("resize", resize);
3305
+ const start = performance.now();
3306
+ const totalTimeline = totalMs > 0 ? totalMs : Math.max(durationMs, 1);
3307
+ function renderFrame(timelineElapsed, timelineProgress) {
3308
+ safeCtx.clearRect(0, 0, safeCanvas.width, safeCanvas.height);
3309
+ safeCtx.lineCap = resolvedLineCap;
3310
+ safeCtx.lineJoin = resolvedLineJoin;
3311
+ safeCtx.lineWidth = strokeWidth;
3312
+ safeCtx.globalAlpha = penOpacity;
3313
+ safeCtx.strokeStyle = strokeColor;
3314
+ const pad = canvasPadding;
3315
+ const viewW = safeCanvas.clientWidth;
3316
+ const viewH = safeCanvas.clientHeight;
3317
+ const scaleToFit = Math.min(
3318
+ (viewW - pad * 2) / (textW || 1),
3319
+ (viewH - pad * 2) / (textH || 1)
3320
+ );
3321
+ const scale = sizeValue === null ? scaleToFit : Math.min(1, scaleToFit);
3322
+ const cx = viewW / 2;
3323
+ const cy = viewH / 2;
3324
+ safeCtx.save();
3325
+ safeCtx.translate(cx, cy);
3326
+ safeCtx.scale(scale, scale);
3327
+ safeCtx.translate(-(bounds.minX + textW / 2), -(bounds.minY + textH / 2));
3328
+ const filledContours = [];
3329
+ for (const stroke of strokes) {
3330
+ if (!stroke.points.length || stroke.length <= 0) continue;
3331
+ const strokeStart = stroke.startMs;
3332
+ const strokeEnd = stroke.startMs + stroke.durationMs;
3333
+ if (timelineElapsed >= strokeEnd) {
3334
+ drawPolylineStamped(
3335
+ safeCtx,
3336
+ stroke.points,
3337
+ stroke.length,
3338
+ stroke.length,
3339
+ strokeWidth,
3340
+ strokeColor,
3341
+ stroke.baselineDrift,
3342
+ stroke.offsets,
3343
+ stroke.poolingStrength
3344
+ );
3345
+ if (resolvedStrokeMode === "full") {
3346
+ filledContours.push(stroke.points);
3347
+ }
3348
+ const lastPoint = stroke.points[stroke.points.length - 1];
3349
+ const tipPoint = {
3350
+ x: lastPoint.x + stroke.baselineDrift.x + stroke.offsets.end.x,
3351
+ y: lastPoint.y + stroke.baselineDrift.y + stroke.offsets.end.y
3352
+ };
3353
+ drawOvershootTail(
3354
+ safeCtx,
3355
+ tipPoint,
3356
+ stroke.endDirection,
3357
+ stroke.overshootPx,
3358
+ strokeWidth,
3359
+ strokeColor
3360
+ );
3361
+ if (stroke.flourish) {
3362
+ drawPolylineStamped(
3363
+ safeCtx,
3364
+ stroke.flourish.points,
3365
+ stroke.flourish.length,
3366
+ stroke.flourish.length,
3367
+ strokeWidth * 0.9,
3368
+ strokeColor,
3369
+ stroke.baselineDrift,
3370
+ ZERO_OFFSETS,
3371
+ stroke.poolingStrength * 0.5
3372
+ );
3373
+ }
3374
+ continue;
3375
+ }
3376
+ if (timelineElapsed >= strokeStart) {
3377
+ const localElapsed = timelineElapsed - strokeStart;
3378
+ const localTLinear = Math.min(
3379
+ 1,
3380
+ localElapsed / Math.max(stroke.durationMs, 1)
3381
+ );
3382
+ const easedT = easeInOut(localTLinear);
3383
+ const partialLen = stroke.length * easedT;
3384
+ drawPolylineStamped(
3385
+ safeCtx,
3386
+ stroke.points,
3387
+ partialLen,
3388
+ stroke.length,
3389
+ strokeWidth,
3390
+ strokeColor,
3391
+ stroke.baselineDrift,
3392
+ stroke.offsets,
3393
+ stroke.poolingStrength
3394
+ );
3395
+ }
3396
+ break;
3397
+ }
3398
+ if (resolvedStrokeMode === "full") {
3399
+ const contoursToFill = timelineProgress >= 1 ? polylines : filledContours;
3400
+ if (contoursToFill.length) {
3401
+ safeCtx.save();
3402
+ safeCtx.fillStyle = strokeColor;
3403
+ safeCtx.beginPath();
3404
+ for (const pl of contoursToFill) {
3405
+ if (!pl.length) continue;
3406
+ safeCtx.moveTo(pl[0].x, pl[0].y);
3407
+ for (let i = 1; i < pl.length; i++) {
3408
+ safeCtx.lineTo(pl[i].x, pl[i].y);
3409
+ }
3410
+ safeCtx.closePath();
3411
+ }
3412
+ safeCtx.fill("evenodd");
3413
+ safeCtx.restore();
3414
+ }
3415
+ }
3416
+ safeCtx.restore();
3417
+ if (timelineProgress >= 1 && !drawNotifiedRef.current) {
3418
+ drawNotifiedRef.current = true;
3419
+ onDrawnRef.current?.();
3420
+ }
3421
+ }
3422
+ function draw(now) {
3423
+ const elapsedRaw = now - start;
3424
+ const timelineElapsed = Math.min(elapsedRaw, totalTimeline);
3425
+ const timelineProgress = totalTimeline > 0 ? timelineElapsed / totalTimeline : 1;
3426
+ renderFrame(timelineElapsed, timelineProgress);
3427
+ if (timelineProgress < 1) {
3428
+ rafRef.current = requestAnimationFrame(draw);
3429
+ } else {
3430
+ rafRef.current = null;
3431
+ }
3432
+ }
3433
+ if (rafRef.current) cancelAnimationFrame(rafRef.current);
3434
+ if (animate) {
3435
+ rafRef.current = requestAnimationFrame(draw);
3436
+ } else {
3437
+ renderFrame(Number.POSITIVE_INFINITY, 1);
3438
+ rafRef.current = null;
3439
+ }
3440
+ return () => {
3441
+ window.removeEventListener("resize", resize);
3442
+ if (rafRef.current) cancelAnimationFrame(rafRef.current);
3443
+ rafRef.current = null;
3444
+ };
3445
+ }, [
3446
+ prepared,
3447
+ strokePlan,
3448
+ durationMs,
3449
+ strokeWidth,
3450
+ strokeColor,
3451
+ canvasPadding,
3452
+ resolvedLineCap,
3453
+ resolvedLineJoin,
3454
+ penOpacity,
3455
+ resolvedStrokeMode,
3456
+ sizeValue,
3457
+ animate
3458
+ ]);
3459
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3460
+ "div",
3461
+ {
3462
+ className: "flex w-full flex-col text-white",
3463
+ style: {
3464
+ background: backgroundColor,
3465
+ ...sizeValue ? { width: sizeValue } : null,
3466
+ ...aspectRatio ? { aspectRatio } : null
3467
+ },
3468
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative flex flex-1 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("canvas", { ref: canvasRef, style: { display: "block" } }) })
3469
+ }
3470
+ );
3471
+ }
2114
3472
  // Annotate the CommonJS export names for ESM import in node:
2115
3473
  0 && (module.exports = {
3474
+ AnimatedDrawingSVG,
2116
3475
  EFECTO_ASCII_COMPONENT_DEFAULTS,
2117
3476
  EFECTO_ASCII_POST_PROCESSING_DEFAULTS,
2118
3477
  Efecto,
2119
3478
  FractalFlower,
2120
3479
  MenuGlitch,
2121
3480
  OranoParticles,
2122
- ShaderArt
3481
+ ShaderArt,
3482
+ Snow,
3483
+ WANDY_HAND_DEFAULTS,
3484
+ WandyHand
2123
3485
  });