From a1640366e2a4d49baea88b428f2563e182239935 Mon Sep 17 00:00:00 2001 From: Maroun Najjar <60901592+thecolormaroun@users.noreply.github.com> Date: Thu, 12 Nov 2026 06:46:53 -0800 Subject: [PATCH] feat(stageshow): enable validated UI showcase workflow --- THIRD_PARTY_NOTICES.md | 13 + .../capability-reconciliation.json | 6 +- .../validation/stageshow/2026-11-01.json | 134 ++ .../stageshow/2026-11-09-accepted.json | 98 + .../validation/stageshow/2026-11-09.json | 53 + .../local-2026-11-09/audit-hooks.mjs | 21 + .../local-2026-11-09/browser-acceptance.mjs | 66 + .../local-2026-11-09/browser-download.log | 12 + .../local-2026-11-09/browser-test.log | 0 .../local-2026-11-09/build-offline.log | 211 ++ .../stageshow/local-2026-11-09/build.log | 211 ++ .../local-2026-11-09/compact-final.log | 4 + .../stageshow/local-2026-11-09/deb-pins.txt | 56 + .../stageshow/local-2026-11-09/deb-sha256.txt | 56 + .../stageshow/local-2026-11-09/film-final.log | 4 + .../film-run-representative.log | 8 + .../stageshow/local-2026-11-09/film-run.log | 17 + .../local-2026-11-09/fixture-entry.tsx | 16 + .../local-2026-11-09/fixture-scene.css | 11 + .../stageshow/local-2026-11-09/fontconfig.xml | 3 + .../stageshow/local-2026-11-09/guest-deps.log | 87 + .../local-2026-11-09/guest-final-state.txt | 150 ++ .../stageshow/local-2026-11-09/loop-video.log | 0 .../stageshow/local-2026-11-09/loop-video.mjs | 19 + .../stageshow/local-2026-11-09/npm-setup.log | 2 + .../local-2026-11-09/offline-exec.py | 41 + .../local-2026-11-09/outputs/animated.log | 9 + .../outputs/browser-acceptance.json | 110 + .../outputs/caption-audit.json | 11 + .../local-2026-11-09/outputs/compact.log | 7 + .../outputs/decoded-final.png | Bin 0 -> 40065 bytes .../local-2026-11-09/outputs/decoded-loop.png | Bin 0 -> 81451 bytes .../outputs/decoded-storyboard.png | Bin 0 -> 183990 bytes .../local-2026-11-09/outputs/failure.json | 35 + .../outputs/film-results.json | 22 + .../outputs/loop-probe-final.json | 20 + .../local-2026-11-09/outputs/loop-ui.mp4 | Bin 0 -> 52939 bytes .../local-2026-11-09/outputs/loop-video.json | 27 + .../local-2026-11-09/outputs/loop.log | 7 + .../representative-compact-initial.json | 30 + .../outputs/representative-compact.json | 28 + .../outputs/representative-compact.png | Bin 0 -> 21521 bytes .../outputs/representative-loop-final.json | 31 + .../outputs/representative-loop-final.png | Bin 0 -> 135314 bytes .../outputs/representative-still-initial.json | 30 + .../outputs/representative-still.json | 28 + .../outputs/representative-still.png | Bin 0 -> 29961 bytes .../local-2026-11-09/outputs/sample-ui.mp4 | Bin 0 -> 98461 bytes .../outputs/video-probe-final.json | 20 + .../publication-redactions.json | 20 + .../stageshow/local-2026-11-09/run-films.py | 39 + .../stageshow/local-2026-11-09/run-offline.sh | 4 + .../shutdown-verification.txt | 140 ++ .../local-2026-11-09/source-doctor.json | 1 + .../local-2026-11-09/stack-tests.log | 5 + .../local-2026-11-09/still-final.log | 4 + .../local-2026-11-09/typecheck-offline.log | 3 + .../stageshow/local-2026-11-09/typecheck.log | 3 + .../stageshow/local-2026-11-09/vm-final.json | 1 + .../stageshow/local-2026-11-09/vm-restart.log | 15 + .../stageshow/local-2026-11-09/vm-start.log | 15 + .../stageshow/local-2026-11-09/vm-stop.log | 9 + .../stageshow/local-2026-11-09/vm.yaml | 22 + config/runtime-targets.json | 2 +- registry/capabilities.json | 75 +- .../migrations/2026-07-23-skill-layout.json | 5 + registry/routing-rules.json | 2 +- skills/design/cdo/SKILL.md | 5 + .../design/cdo/instructions/skill-routing.md | 18 + skills/imported/benjitaylor/stageshow/LICENSE | 21 + .../imported/benjitaylor/stageshow/NOTICE.md | 26 + .../imported/benjitaylor/stageshow/README.md | 75 + .../imported/benjitaylor/stageshow/SKILL.md | 198 ++ .../benjitaylor/stageshow/STACK-REVIEW.md | 176 ++ .../benjitaylor/stageshow/capability.json | 71 + .../stageshow/examples/ai-cards/cards.css | 273 +++ .../stageshow/examples/ai-cards/index.tsx | 133 ++ .../stageshow/examples/ai-chat/chat.css | 111 + .../stageshow/examples/ai-chat/index.tsx | 134 ++ .../examples/annotations/annotations.css | 190 ++ .../examples/annotations/composed.css | 81 + .../examples/annotations/composed.tsx | 123 ++ .../stageshow/examples/annotations/index.tsx | 281 +++ .../examples/backgrounds/backgrounds.css | 81 + .../stageshow/examples/backgrounds/index.tsx | 85 + .../stageshow/examples/brand-marks/brands.css | 10 + .../stageshow/examples/brand-marks/index.tsx | 49 + .../stageshow/examples/calendar/calendar.css | 320 +++ .../stageshow/examples/calendar/index.tsx | 215 ++ .../stageshow/examples/chart-scrub/index.tsx | 133 ++ .../stageshow/examples/chart-scrub/scrub.css | 92 + .../examples/choreography/choreography.css | 81 + .../stageshow/examples/choreography/index.tsx | 115 + .../stageshow/examples/chrome/chrome.css | 39 + .../stageshow/examples/chrome/index.tsx | 68 + .../stageshow/examples/close-up/close.css | 51 + .../stageshow/examples/close-up/index.tsx | 76 + .../stageshow/examples/controls/controls.css | 155 ++ .../stageshow/examples/controls/index.tsx | 201 ++ .../stageshow/examples/corner-chip/chip.css | 60 + .../stageshow/examples/corner-chip/index.tsx | 55 + .../stageshow/examples/cursor-morph/README.md | 15 + .../examples/cursor-morph/cursor-morph.css | 52 + .../examples/cursor-morph/cursor-morph.tsx | 127 ++ .../stageshow/examples/cursor-morph/index.tsx | 53 + .../examples/cursor-resize/cursor-resize.css | 80 + .../examples/cursor-resize/index.tsx | 57 + .../stageshow/examples/cursors/cursors.css | 150 ++ .../stageshow/examples/cursors/index.tsx | 146 ++ .../stageshow/examples/dark-bento/bento.css | 218 ++ .../stageshow/examples/dark-bento/index.tsx | 100 + .../stageshow/examples/dark-hero/hero.css | 238 ++ .../stageshow/examples/dark-hero/index.tsx | 174 ++ .../stageshow/examples/device-pair/index.tsx | 83 + .../examples/device-pair/payments.css | 150 ++ .../examples/dynamic-island/index.tsx | 260 +++ .../examples/dynamic-island/island.css | 289 +++ .../stageshow/examples/excel/excel.css | 596 +++++ .../stageshow/examples/excel/index.tsx | 376 ++++ .../stageshow/examples/fade-crop/fade.css | 80 + .../stageshow/examples/fade-crop/index.tsx | 58 + .../stageshow/examples/figma/figma.css | 668 ++++++ .../stageshow/examples/figma/index.tsx | 446 ++++ .../examples/finder-glass/finder-glass.css | 430 ++++ .../stageshow/examples/finder-glass/index.tsx | 349 +++ .../stageshow/examples/finder/finder.css | 376 ++++ .../stageshow/examples/finder/index.tsx | 329 +++ .../stageshow/examples/form-error/form.css | 127 ++ .../stageshow/examples/form-error/index.tsx | 97 + .../stageshow/examples/freeform-drag/drag.css | 131 ++ .../examples/freeform-drag/index.tsx | 135 ++ .../stageshow/examples/glass/glass.css | 93 + .../stageshow/examples/glass/index.tsx | 43 + .../stageshow/examples/gmail/gmail.css | 491 +++++ .../stageshow/examples/gmail/index.tsx | 285 +++ .../examples/google-calendar/gcal.css | 753 +++++++ .../examples/google-calendar/index.tsx | 443 ++++ .../stageshow/examples/google-docs/docs.css | 564 +++++ .../stageshow/examples/google-docs/index.tsx | 358 +++ .../stageshow/examples/hero-grid/grid.css | 112 + .../stageshow/examples/hero-grid/index.tsx | 211 ++ .../stageshow/examples/imessage/imessage.css | 253 +++ .../stageshow/examples/imessage/index.tsx | 180 ++ .../stageshow/examples/linear/index.tsx | 366 ++++ .../stageshow/examples/linear/linear.css | 676 ++++++ .../stageshow/examples/loading/index.tsx | 107 + .../stageshow/examples/loading/loading.css | 164 ++ .../stageshow/examples/looks/index.tsx | 54 + .../stageshow/examples/looks/looks.css | 44 + .../stageshow/examples/looks/radix.css | 39 + .../stageshow/examples/looks/skeuomorphic.css | 36 + .../stageshow/examples/looks/skeuomorphic.tsx | 21 + .../stageshow/examples/looks/studies.css | 107 + .../stageshow/examples/looks/studies.tsx | 82 + .../stageshow/examples/many-of-one/index.tsx | 64 + .../stageshow/examples/many-of-one/many.css | 88 + .../stageshow/examples/messages/index.tsx | 90 + .../stageshow/examples/messages/messages.css | 128 ++ .../stageshow/examples/monochrome/index.tsx | 52 + .../stageshow/examples/monochrome/mono.css | 98 + .../stageshow/examples/notion/index.tsx | 321 +++ .../stageshow/examples/notion/notion.css | 417 ++++ .../examples/opposite-corners/corners.css | 47 + .../examples/opposite-corners/index.tsx | 61 + .../stageshow/examples/overlap/index.tsx | 78 + .../stageshow/examples/overlap/overlap.css | 134 ++ .../examples/panel-annotation/index.tsx | 110 + .../examples/panel-annotation/panel.css | 152 ++ .../stageshow/examples/payout-flow/index.tsx | 136 ++ .../stageshow/examples/payout-flow/pace.css | 249 +++ .../examples/phone-touch/fitness.css | 434 ++++ .../stageshow/examples/phone-touch/index.tsx | 229 ++ .../stageshow/examples/powerpoint/index.tsx | 381 ++++ .../stageshow/examples/powerpoint/pp.css | 514 +++++ .../stageshow/examples/presence/index.tsx | 130 ++ .../stageshow/examples/presence/presence.css | 135 ++ .../stageshow/examples/raycast/index.tsx | 249 +++ .../stageshow/examples/raycast/raycast.css | 430 ++++ .../stageshow/examples/reorder/index.tsx | 94 + .../stageshow/examples/reorder/reorder.css | 76 + .../stageshow/examples/ruled-bento/grid.css | 541 +++++ .../stageshow/examples/ruled-bento/index.tsx | 347 +++ .../stageshow/examples/share/index.tsx | 221 ++ .../stageshow/examples/share/share.css | 209 ++ .../stageshow/examples/slack/index.tsx | 462 ++++ .../stageshow/examples/slack/slack.css | 847 ++++++++ .../stageshow/examples/spotify/index.tsx | 320 +++ .../stageshow/examples/spotify/spotify.css | 709 ++++++ .../examples/stacked-cards/index.tsx | 56 + .../examples/stacked-cards/stacked.css | 89 + .../examples/staggered-bento/grid.css | 534 +++++ .../examples/staggered-bento/index.tsx | 370 ++++ .../stageshow/examples/static-card/card.css | 192 ++ .../stageshow/examples/static-card/index.tsx | 82 + .../stageshow/examples/story/index.tsx | 150 ++ .../stageshow/examples/story/story.css | 168 ++ .../examples/subscriptions/index.tsx | 252 +++ .../stageshow/examples/subscriptions/subs.css | 352 +++ .../stageshow/examples/swipe/index.tsx | 195 ++ .../stageshow/examples/swipe/swipe.css | 169 ++ .../stageshow/examples/table-edit/index.tsx | 114 + .../stageshow/examples/table-edit/table.css | 138 ++ .../stageshow/examples/telegram/index.tsx | 227 ++ .../stageshow/examples/telegram/telegram.css | 422 ++++ .../stageshow/examples/tilted-stack/index.tsx | 49 + .../examples/tilted-stack/tilted.css | 63 + .../stageshow/examples/upload/index.tsx | 257 +++ .../stageshow/examples/upload/upload.css | 310 +++ .../stageshow/examples/wikipedia/PHOTOS.md | 17 + .../stageshow/examples/wikipedia/fuji.jpg | Bin 0 -> 23667 bytes .../stageshow/examples/wikipedia/index.tsx | 428 ++++ .../examples/wikipedia/kawaguchiko.jpg | Bin 0 -> 30233 bytes .../stageshow/examples/wikipedia/wiki.css | 577 +++++ .../stageshow/examples/window-row/index.tsx | 87 + .../stageshow/examples/window-row/row.css | 63 + .../imported/benjitaylor/stageshow/kit/act.ts | 669 ++++++ .../stageshow/kit/brands/1password-dark.svg | 1 + .../stageshow/kit/brands/1password.svg | 1 + .../kit/brands/LICENSE-CRYPTO-FLAT.txt | 121 ++ .../kit/brands/LICENSE-PAYMENT-ICONS.txt | 201 ++ .../kit/brands/LICENSE-SIMPLE-ICONS.txt | 30 + .../stageshow/kit/brands/LICENSE-SVGL.txt | 21 + .../stageshow/kit/brands/SOURCES.md | 57 + .../kit/brands/bankofamerica-dark.svg | 1 + .../stageshow/kit/brands/bankofamerica.svg | 1 + .../stageshow/kit/brands/barclays.svg | 1 + .../stageshow/kit/brands/bitcoin.svg | 1 + .../stageshow/kit/brands/chase.svg | 1 + .../stageshow/kit/brands/discover.svg | 2 + .../stageshow/kit/brands/dropbox-glyph.svg | 1 + .../stageshow/kit/brands/dropbox.svg | 1 + .../stageshow/kit/brands/ethereum.svg | 1 + .../stageshow/kit/brands/figma.svg | 14 + .../stageshow/kit/brands/github-dark.svg | 3 + .../stageshow/kit/brands/github.svg | 1 + .../stageshow/kit/brands/gmail.svg | 11 + .../stageshow/kit/brands/google-calendar.svg | 17 + .../stageshow/kit/brands/google-docs.svg | 1 + .../stageshow/kit/brands/google-drive.svg | 8 + .../stageshow/kit/brands/google-meet.svg | 16 + .../stageshow/kit/brands/google-sheets.svg | 55 + .../stageshow/kit/brands/google-slides.svg | 61 + .../benjitaylor/stageshow/kit/brands/hsbc.svg | 1 + .../benjitaylor/stageshow/kit/brands/index.ts | 210 ++ .../stageshow/kit/brands/mastercard.svg | 5 + .../stageshow/kit/brands/monzo-dark.svg | 1 + .../stageshow/kit/brands/monzo.svg | 1 + .../stageshow/kit/brands/notion.svg | 1 + .../stageshow/kit/brands/paypal.svg | 1 + .../stageshow/kit/brands/revolut-dark.svg | 1 + .../stageshow/kit/brands/revolut.svg | 1 + .../stageshow/kit/brands/shopify.svg | 5 + .../stageshow/kit/brands/slack.svg | 24 + .../stageshow/kit/brands/solana.svg | 1 + .../stageshow/kit/brands/stripe.svg | 1 + .../stageshow/kit/brands/tether.svg | 1 + .../stageshow/kit/brands/vercel-dark.svg | 1 + .../stageshow/kit/brands/vercel.svg | 1 + .../benjitaylor/stageshow/kit/brands/visa.svg | 3 + .../stageshow/kit/brands/wellsfargo.svg | 1 + .../benjitaylor/stageshow/kit/brands/zoom.svg | 1 + .../benjitaylor/stageshow/kit/chart.css | 59 + .../benjitaylor/stageshow/kit/chart.tsx | 221 ++ .../benjitaylor/stageshow/kit/clock.ts | 265 +++ .../benjitaylor/stageshow/kit/code.css | 87 + .../benjitaylor/stageshow/kit/code.tsx | 70 + .../stageshow/kit/controls/Badge.css | 56 + .../stageshow/kit/controls/Badge.tsx | 17 + .../stageshow/kit/controls/Field.css | 201 ++ .../stageshow/kit/controls/Field.tsx | 94 + .../stageshow/kit/controls/Segmented.css | 40 + .../stageshow/kit/controls/Segmented.tsx | 21 + .../stageshow/kit/controls/Slot.css | 39 + .../stageshow/kit/controls/Slot.tsx | 25 + .../stageshow/kit/controls/Tabs.css | 33 + .../stageshow/kit/controls/Tabs.tsx | 26 + .../stageshow/kit/controls/Toggle.css | 46 + .../stageshow/kit/controls/Toggle.tsx | 11 + .../stageshow/kit/controls/index.ts | 11 + .../benjitaylor/stageshow/kit/cursor.css | 256 +++ .../benjitaylor/stageshow/kit/cursor.tsx | 103 + .../benjitaylor/stageshow/kit/cursors.tsx | 106 + .../benjitaylor/stageshow/kit/ease.ts | 65 + .../benjitaylor/stageshow/kit/index.ts | 45 + .../benjitaylor/stageshow/kit/ios.css | 177 ++ .../benjitaylor/stageshow/kit/ios.tsx | 137 ++ .../benjitaylor/stageshow/kit/keys.css | 60 + .../benjitaylor/stageshow/kit/keys.tsx | 36 + .../benjitaylor/stageshow/kit/looks.ts | 23 + .../benjitaylor/stageshow/kit/measure.ts | 122 ++ .../benjitaylor/stageshow/kit/messages.css | 462 ++++ .../benjitaylor/stageshow/kit/messages.tsx | 259 +++ .../stageshow/kit/motion/Camera.css | 27 + .../stageshow/kit/motion/Camera.tsx | 51 + .../stageshow/kit/motion/Collapse.css | 97 + .../stageshow/kit/motion/Collapse.tsx | 69 + .../stageshow/kit/motion/Connector.css | 128 ++ .../stageshow/kit/motion/Connector.tsx | 182 ++ .../stageshow/kit/motion/Count.css | 68 + .../stageshow/kit/motion/Count.tsx | 141 ++ .../stageshow/kit/motion/Expand.css | 80 + .../stageshow/kit/motion/Expand.tsx | 109 + .../benjitaylor/stageshow/kit/motion/Fly.css | 51 + .../benjitaylor/stageshow/kit/motion/Fly.tsx | 91 + .../stageshow/kit/motion/Follow.css | 17 + .../stageshow/kit/motion/Follow.tsx | 139 ++ .../stageshow/kit/motion/Popover.css | 65 + .../stageshow/kit/motion/Popover.tsx | 38 + .../benjitaylor/stageshow/kit/motion/Roll.css | 77 + .../benjitaylor/stageshow/kit/motion/Roll.tsx | 191 ++ .../stageshow/kit/motion/Scroll.css | 49 + .../stageshow/kit/motion/Scroll.tsx | 24 + .../stageshow/kit/motion/States.css | 49 + .../stageshow/kit/motion/States.tsx | 29 + .../stageshow/kit/motion/Stream.css | 32 + .../stageshow/kit/motion/Stream.tsx | 30 + .../benjitaylor/stageshow/kit/motion/Swap.css | 48 + .../benjitaylor/stageshow/kit/motion/Swap.tsx | 103 + .../benjitaylor/stageshow/kit/motion/index.ts | 22 + .../stageshow/kit/parts/Avatar.css | 102 + .../stageshow/kit/parts/Avatar.tsx | 46 + .../stageshow/kit/parts/BrandMark.css | 45 + .../stageshow/kit/parts/BrandMark.tsx | 43 + .../benjitaylor/stageshow/kit/parts/Check.css | 94 + .../benjitaylor/stageshow/kit/parts/Check.tsx | 21 + .../benjitaylor/stageshow/kit/parts/Chip.css | 66 + .../benjitaylor/stageshow/kit/parts/Chip.tsx | 29 + .../stageshow/kit/parts/Facepile.css | 17 + .../stageshow/kit/parts/Facepile.tsx | 26 + .../benjitaylor/stageshow/kit/parts/Icon.css | 8 + .../benjitaylor/stageshow/kit/parts/Icon.tsx | 65 + .../benjitaylor/stageshow/kit/parts/Menu.css | 34 + .../benjitaylor/stageshow/kit/parts/Menu.tsx | 15 + .../benjitaylor/stageshow/kit/parts/Meter.css | 46 + .../benjitaylor/stageshow/kit/parts/Meter.tsx | 16 + .../benjitaylor/stageshow/kit/parts/Pin.css | 58 + .../benjitaylor/stageshow/kit/parts/Pin.tsx | 39 + .../benjitaylor/stageshow/kit/parts/Row.css | 211 ++ .../benjitaylor/stageshow/kit/parts/Row.tsx | 67 + .../stageshow/kit/parts/Spinner.css | 12 + .../stageshow/kit/parts/Spinner.tsx | 12 + .../benjitaylor/stageshow/kit/parts/Toast.css | 35 + .../benjitaylor/stageshow/kit/parts/Toast.tsx | 22 + .../stageshow/kit/parts/Tooltip.css | 42 + .../stageshow/kit/parts/Tooltip.tsx | 20 + .../benjitaylor/stageshow/kit/parts/index.ts | 22 + .../benjitaylor/stageshow/kit/phone.css | 539 +++++ .../benjitaylor/stageshow/kit/phone.tsx | 366 ++++ .../stageshow/kit/reduced-motion.ts | 18 + .../benjitaylor/stageshow/kit/stage.css | 448 ++++ .../benjitaylor/stageshow/kit/stage.tsx | 611 ++++++ .../benjitaylor/stageshow/kit/stageshow.css | 43 + .../benjitaylor/stageshow/kit/util.ts | 25 + .../benjitaylor/stageshow/kit/window.css | 612 ++++++ .../benjitaylor/stageshow/kit/window.tsx | 276 +++ .../benjitaylor/stageshow/package-lock.json | 1932 +++++++++++++++++ .../benjitaylor/stageshow/package.json | 34 + .../stageshow/playground/catalog.ts | 94 + .../stageshow/playground/index.html | 5 + .../benjitaylor/stageshow/playground/main.tsx | 111 + .../stageshow/playground/playback.ts | 110 + .../stageshow/playground/preview.css | 6 + .../stageshow/playground/preview.tsx | 18 + .../stageshow/playground/tsconfig.json | 4 + .../stageshow/playground/viewer.css | 58 + .../stageshow/playground/viewer.tsx | 89 + .../stageshow/playground/vite.config.ts | 3 + .../stageshow/references/annotations.md | 76 + .../stageshow/references/backgrounds.md | 30 + .../benjitaylor/stageshow/references/bento.md | 63 + .../stageshow/references/brands.md | 32 + .../stageshow/references/choreography.md | 32 + .../benjitaylor/stageshow/references/craft.md | 158 ++ .../stageshow/references/framing.md | 106 + .../benjitaylor/stageshow/references/kit.md | 175 ++ .../benjitaylor/stageshow/references/looks.md | 66 + .../stageshow/references/motion.md | 170 ++ .../stageshow/references/products.md | 26 + .../stageshow/references/rehearse.md | 116 + .../stageshow/references/review.md | 26 + .../stageshow/references/teaching.md | 110 + .../stageshow/references/verify.md | 83 + .../benjitaylor/stageshow/scripts/browser.mjs | 21 + .../stageshow/scripts/class-clash-core.mjs | 130 ++ .../stageshow/scripts/class-clash.mjs | 52 + .../benjitaylor/stageshow/scripts/dev.mjs | 63 + .../stageshow/scripts/film-checks.mjs | 1920 ++++++++++++++++ .../benjitaylor/stageshow/scripts/film.mjs | 674 ++++++ .../stageshow/scripts/jumps-core.mjs | 191 ++ .../benjitaylor/stageshow/scripts/jumps.mjs | 68 + .../stageshow/scripts/layout-core.mjs | 161 ++ .../benjitaylor/stageshow/scripts/layout.mjs | 65 + .../stageshow/scripts/motion-watch.mjs | 557 +++++ .../stageshow/scripts/verification.mjs | 97 + .../benjitaylor/stageshow/source.json | 1833 ++++++++++++++++ .../stageshow/teaching/composition.css | 195 ++ .../stageshow/teaching/composition.tsx | 183 ++ .../stageshow/teaching/continuity.css | 29 + .../stageshow/teaching/continuity.tsx | 68 + .../stageshow/teaching/contrasts.css | 103 + .../stageshow/teaching/contrasts.tsx | 201 ++ .../stageshow/teaching/details.css | 90 + .../stageshow/teaching/details.tsx | 225 ++ .../benjitaylor/stageshow/teaching/edges.css | 26 + .../benjitaylor/stageshow/teaching/edges.tsx | 60 + .../stageshow/teaching/relationships.css | 54 + .../stageshow/teaching/relationships.tsx | 122 ++ .../benjitaylor/stageshow/teaching/scenes.css | 220 ++ .../benjitaylor/stageshow/teaching/scenes.tsx | 149 ++ .../benjitaylor/stageshow/teaching/style.css | 84 + .../benjitaylor/stageshow/teaching/style.tsx | 130 ++ .../stageshow/teaching/text-settle.css | 10 + .../stageshow/teaching/text-settle.tsx | 44 + tests/test_intent_routing.py | 20 + tests/test_stageshow_browser_launcher.py | 96 + tests/test_stageshow_intake.py | 156 ++ 416 files changed, 54381 insertions(+), 6 deletions(-) create mode 100644 artifacts/validation/stageshow/2026-11-01.json create mode 100644 artifacts/validation/stageshow/2026-11-09-accepted.json create mode 100644 artifacts/validation/stageshow/2026-11-09.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/audit-hooks.mjs create mode 100644 artifacts/validation/stageshow/local-2026-11-09/browser-acceptance.mjs create mode 100644 artifacts/validation/stageshow/local-2026-11-09/browser-download.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/browser-test.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/build-offline.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/build.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/compact-final.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/deb-pins.txt create mode 100644 artifacts/validation/stageshow/local-2026-11-09/deb-sha256.txt create mode 100644 artifacts/validation/stageshow/local-2026-11-09/film-final.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/film-run-representative.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/film-run.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/fixture-entry.tsx create mode 100644 artifacts/validation/stageshow/local-2026-11-09/fixture-scene.css create mode 100644 artifacts/validation/stageshow/local-2026-11-09/fontconfig.xml create mode 100644 artifacts/validation/stageshow/local-2026-11-09/guest-deps.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/guest-final-state.txt create mode 100644 artifacts/validation/stageshow/local-2026-11-09/loop-video.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/loop-video.mjs create mode 100644 artifacts/validation/stageshow/local-2026-11-09/npm-setup.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/offline-exec.py create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/animated.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/browser-acceptance.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/caption-audit.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/compact.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/decoded-final.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/decoded-loop.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/decoded-storyboard.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/failure.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/film-results.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/loop-probe-final.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/loop-ui.mp4 create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/loop-video.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/loop.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-compact-initial.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-compact.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-compact.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-loop-final.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-loop-final.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-still-initial.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-still.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/representative-still.png create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/sample-ui.mp4 create mode 100644 artifacts/validation/stageshow/local-2026-11-09/outputs/video-probe-final.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/publication-redactions.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/run-films.py create mode 100644 artifacts/validation/stageshow/local-2026-11-09/run-offline.sh create mode 100644 artifacts/validation/stageshow/local-2026-11-09/shutdown-verification.txt create mode 100644 artifacts/validation/stageshow/local-2026-11-09/source-doctor.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/stack-tests.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/still-final.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/typecheck-offline.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/typecheck.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/vm-final.json create mode 100644 artifacts/validation/stageshow/local-2026-11-09/vm-restart.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/vm-start.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/vm-stop.log create mode 100644 artifacts/validation/stageshow/local-2026-11-09/vm.yaml create mode 100644 skills/imported/benjitaylor/stageshow/LICENSE create mode 100644 skills/imported/benjitaylor/stageshow/NOTICE.md create mode 100644 skills/imported/benjitaylor/stageshow/README.md create mode 100644 skills/imported/benjitaylor/stageshow/SKILL.md create mode 100644 skills/imported/benjitaylor/stageshow/STACK-REVIEW.md create mode 100644 skills/imported/benjitaylor/stageshow/capability.json create mode 100644 skills/imported/benjitaylor/stageshow/examples/ai-cards/cards.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/ai-cards/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/ai-chat/chat.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/ai-chat/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/annotations/annotations.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/annotations/composed.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/annotations/composed.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/annotations/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/backgrounds/backgrounds.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/backgrounds/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/brand-marks/brands.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/brand-marks/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/calendar/calendar.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/calendar/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/chart-scrub/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/chart-scrub/scrub.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/choreography/choreography.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/choreography/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/chrome/chrome.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/chrome/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/close-up/close.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/close-up/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/controls/controls.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/controls/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/corner-chip/chip.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/corner-chip/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-morph/README.md create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-morph/cursor-morph.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-morph/cursor-morph.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-morph/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-resize/cursor-resize.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursor-resize/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursors/cursors.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/cursors/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/dark-bento/bento.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/dark-bento/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/dark-hero/hero.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/dark-hero/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/device-pair/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/device-pair/payments.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/dynamic-island/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/dynamic-island/island.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/excel/excel.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/excel/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/fade-crop/fade.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/fade-crop/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/figma/figma.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/figma/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/finder-glass/finder-glass.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/finder-glass/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/finder/finder.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/finder/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/form-error/form.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/form-error/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/freeform-drag/drag.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/freeform-drag/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/glass/glass.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/glass/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/gmail/gmail.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/gmail/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/google-calendar/gcal.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/google-calendar/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/google-docs/docs.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/google-docs/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/hero-grid/grid.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/hero-grid/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/imessage/imessage.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/imessage/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/linear/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/linear/linear.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/loading/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/loading/loading.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/looks.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/radix.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/skeuomorphic.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/skeuomorphic.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/studies.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/looks/studies.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/many-of-one/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/many-of-one/many.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/messages/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/messages/messages.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/monochrome/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/monochrome/mono.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/notion/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/notion/notion.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/opposite-corners/corners.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/opposite-corners/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/overlap/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/overlap/overlap.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/panel-annotation/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/panel-annotation/panel.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/payout-flow/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/payout-flow/pace.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/phone-touch/fitness.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/phone-touch/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/powerpoint/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/powerpoint/pp.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/presence/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/presence/presence.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/raycast/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/raycast/raycast.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/reorder/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/reorder/reorder.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/ruled-bento/grid.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/ruled-bento/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/share/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/share/share.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/slack/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/slack/slack.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/spotify/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/spotify/spotify.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/stacked-cards/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/stacked-cards/stacked.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/staggered-bento/grid.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/staggered-bento/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/static-card/card.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/static-card/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/story/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/story/story.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/subscriptions/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/subscriptions/subs.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/swipe/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/swipe/swipe.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/table-edit/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/table-edit/table.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/telegram/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/telegram/telegram.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/tilted-stack/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/tilted-stack/tilted.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/upload/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/upload/upload.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/wikipedia/PHOTOS.md create mode 100644 skills/imported/benjitaylor/stageshow/examples/wikipedia/fuji.jpg create mode 100644 skills/imported/benjitaylor/stageshow/examples/wikipedia/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/wikipedia/kawaguchiko.jpg create mode 100644 skills/imported/benjitaylor/stageshow/examples/wikipedia/wiki.css create mode 100644 skills/imported/benjitaylor/stageshow/examples/window-row/index.tsx create mode 100644 skills/imported/benjitaylor/stageshow/examples/window-row/row.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/act.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/1password-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/1password.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/LICENSE-CRYPTO-FLAT.txt create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/LICENSE-PAYMENT-ICONS.txt create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/LICENSE-SIMPLE-ICONS.txt create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/LICENSE-SVGL.txt create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/SOURCES.md create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/bankofamerica-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/bankofamerica.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/barclays.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/bitcoin.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/chase.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/discover.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/dropbox-glyph.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/dropbox.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/ethereum.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/figma.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/github-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/github.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/gmail.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-calendar.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-docs.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-drive.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-meet.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-sheets.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/google-slides.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/hsbc.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/index.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/mastercard.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/monzo-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/monzo.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/notion.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/paypal.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/revolut-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/revolut.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/shopify.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/slack.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/solana.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/stripe.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/tether.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/vercel-dark.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/vercel.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/visa.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/wellsfargo.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/brands/zoom.svg create mode 100644 skills/imported/benjitaylor/stageshow/kit/chart.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/chart.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/clock.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/code.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/code.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Badge.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Badge.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Field.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Field.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Segmented.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Segmented.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Slot.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Slot.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Tabs.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Tabs.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Toggle.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/Toggle.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/controls/index.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/cursor.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/cursor.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/cursors.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/ease.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/index.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/ios.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/ios.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/keys.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/keys.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/looks.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/measure.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/messages.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/messages.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Camera.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Camera.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Collapse.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Collapse.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Connector.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Connector.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Count.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Count.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Expand.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Expand.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Fly.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Fly.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Follow.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Follow.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Popover.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Popover.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Roll.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Roll.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Scroll.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Scroll.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/States.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/States.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Stream.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Stream.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Swap.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/Swap.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/motion/index.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Avatar.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Avatar.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/BrandMark.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/BrandMark.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Check.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Check.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Chip.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Chip.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Facepile.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Facepile.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Icon.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Icon.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Menu.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Menu.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Meter.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Meter.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Pin.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Pin.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Row.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Row.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Spinner.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Spinner.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Toast.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Toast.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Tooltip.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/Tooltip.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/parts/index.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/phone.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/phone.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/reduced-motion.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/stage.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/stage.tsx create mode 100644 skills/imported/benjitaylor/stageshow/kit/stageshow.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/util.ts create mode 100644 skills/imported/benjitaylor/stageshow/kit/window.css create mode 100644 skills/imported/benjitaylor/stageshow/kit/window.tsx create mode 100644 skills/imported/benjitaylor/stageshow/package-lock.json create mode 100644 skills/imported/benjitaylor/stageshow/package.json create mode 100644 skills/imported/benjitaylor/stageshow/playground/catalog.ts create mode 100644 skills/imported/benjitaylor/stageshow/playground/index.html create mode 100644 skills/imported/benjitaylor/stageshow/playground/main.tsx create mode 100644 skills/imported/benjitaylor/stageshow/playground/playback.ts create mode 100644 skills/imported/benjitaylor/stageshow/playground/preview.css create mode 100644 skills/imported/benjitaylor/stageshow/playground/preview.tsx create mode 100644 skills/imported/benjitaylor/stageshow/playground/tsconfig.json create mode 100644 skills/imported/benjitaylor/stageshow/playground/viewer.css create mode 100644 skills/imported/benjitaylor/stageshow/playground/viewer.tsx create mode 100644 skills/imported/benjitaylor/stageshow/playground/vite.config.ts create mode 100644 skills/imported/benjitaylor/stageshow/references/annotations.md create mode 100644 skills/imported/benjitaylor/stageshow/references/backgrounds.md create mode 100644 skills/imported/benjitaylor/stageshow/references/bento.md create mode 100644 skills/imported/benjitaylor/stageshow/references/brands.md create mode 100644 skills/imported/benjitaylor/stageshow/references/choreography.md create mode 100644 skills/imported/benjitaylor/stageshow/references/craft.md create mode 100644 skills/imported/benjitaylor/stageshow/references/framing.md create mode 100644 skills/imported/benjitaylor/stageshow/references/kit.md create mode 100644 skills/imported/benjitaylor/stageshow/references/looks.md create mode 100644 skills/imported/benjitaylor/stageshow/references/motion.md create mode 100644 skills/imported/benjitaylor/stageshow/references/products.md create mode 100644 skills/imported/benjitaylor/stageshow/references/rehearse.md create mode 100644 skills/imported/benjitaylor/stageshow/references/review.md create mode 100644 skills/imported/benjitaylor/stageshow/references/teaching.md create mode 100644 skills/imported/benjitaylor/stageshow/references/verify.md create mode 100644 skills/imported/benjitaylor/stageshow/scripts/browser.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/class-clash-core.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/class-clash.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/dev.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/film-checks.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/film.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/jumps-core.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/jumps.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/layout-core.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/layout.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/motion-watch.mjs create mode 100644 skills/imported/benjitaylor/stageshow/scripts/verification.mjs create mode 100644 skills/imported/benjitaylor/stageshow/source.json create mode 100644 skills/imported/benjitaylor/stageshow/teaching/composition.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/composition.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/continuity.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/continuity.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/contrasts.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/contrasts.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/details.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/details.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/edges.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/edges.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/relationships.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/relationships.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/scenes.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/scenes.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/style.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/style.tsx create mode 100644 skills/imported/benjitaylor/stageshow/teaching/text-settle.css create mode 100644 skills/imported/benjitaylor/stageshow/teaching/text-settle.tsx create mode 100644 tests/test_stageshow_browser_launcher.py create mode 100644 tests/test_stageshow_intake.py diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 957294e..f7867bf 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -12,3 +12,16 @@ Stack owns command mappings and package metadata, not the upstream skill impleme | Stewdio blank-page skill | StewdioAI/blank-page | `cd42b37fa7cd0a5550e51f45cc8f82f63377b98c` | MIT | Stack-Codex is Stack-owned repository content, bundled under `packages/stack-codex/content` so a GitHub clone contains the complete eight-skill package. Its package pin, `483015638591618e884d4c21f1fa037b645bb872e33acf063fa7a5f802c80df3`, is a deterministic SHA-256 digest over sorted relative paths and exact file bytes. It is not an external upstream and does not appear in the third-party table above. + +## Stageshow + +The pinned integration in `skills/imported/benjitaylor/stageshow` imports +Benji Taylor's Stageshow 0.1.0 from `benjitaylor/skills` at +`802057409787133703c56001080169e347305572`. Its MIT license, upstream notices, +retained artwork licenses/source records and CC0 photograph attribution remain +with the import. The MIT license does not cover app-bundle artwork or grant +trademark rights. App-bundle icons and five official-only brand SVGs are omitted; +copied phone glyph paths are replaced with independently authored generic +geometry. `source.json` and `STACK-REVIEW.md` record the exact subset, modifications +and representative isolated runtime validation. Local compiler/installer receipts +record managed-runtime availability; dependencies are not bundled into exports. diff --git a/artifacts/audits/phase1-architecture/capability-reconciliation.json b/artifacts/audits/phase1-architecture/capability-reconciliation.json index a8b2a70..7951563 100644 --- a/artifacts/audits/phase1-architecture/capability-reconciliation.json +++ b/artifacts/audits/phase1-architecture/capability-reconciliation.json @@ -39,6 +39,7 @@ "skills/engineering/react-doctor/SKILL.md": "skills/engineering/react-doctor/capability.json", "skills/engineering/simplify/SKILL.md": "skills/engineering/simplify/capability.json", "skills/engineering/tdd/SKILL.md": "skills/engineering/tdd/capability.json", + "skills/imported/benjitaylor/stageshow/SKILL.md": "skills/imported/benjitaylor/stageshow/capability.json", "skills/imported/david/david-agent-self-scheduling/SKILL.md": "skills/imported/david/david-agent-self-scheduling/capability.json", "skills/imported/david/david-anti-sleep/SKILL.md": "skills/imported/david/david-anti-sleep/capability.json", "skills/imported/david/david-brain-to-docs/SKILL.md": "skills/imported/david/david-brain-to-docs/capability.json", @@ -199,6 +200,7 @@ "skills/engineering/react-doctor/SKILL.md", "skills/engineering/simplify/SKILL.md", "skills/engineering/tdd/SKILL.md", + "skills/imported/benjitaylor/stageshow/SKILL.md", "skills/imported/david/david-agent-self-scheduling/SKILL.md", "skills/imported/david/david-anti-sleep/SKILL.md", "skills/imported/david/david-brain-to-docs/SKILL.md", @@ -330,8 +332,8 @@ "missing": [] }, "counts": { - "callable_skills": 158, - "manifests": 158, + "callable_skills": 159, + "manifests": 159, "package_exports": 20, "private_declarations": 1, "unclassified": 0 diff --git a/artifacts/validation/stageshow/2026-11-01.json b/artifacts/validation/stageshow/2026-11-01.json new file mode 100644 index 0000000..67a5236 --- /dev/null +++ b/artifacts/validation/stageshow/2026-11-01.json @@ -0,0 +1,134 @@ +{ + "activation": { + "lifecycle": "candidate", + "performed": false, + "publish_targets": [], + "validation_status": "blocked" + }, + "browser_launcher_sha256": "48e9ee06dc76b378bf6f3b701f72a844a2db33f5056086cd5ab2642fa394d271", + "browser_video_acceptance": { + "limitation": "film.mjs exports PNG stills/contact sheets; an actual video-recording and decode/visual inspection step is still required", + "required_checks": [ + "matching official browser for locked playwright-core 1.48.2", + "browser sandbox active", + "no host mounts or private content", + "test network denial proven", + "representative still and loop", + "compact layout", + "reduced motion", + "truthful failed rehearsal status", + "caption escaping at runtime", + "video decodes with expected duration, dimensions, changing frames and final state", + "output containment", + "browser/server shutdown", + "independent visual review" + ], + "status": "not run", + "video_artifact": null, + "visual_review": "not performed" + }, + "capability": "stageshow", + "changes": [ + "Preserved existing candidate, notices, omitted-asset policy, lockfile and two film.mjs patches.", + "Enabled chromiumSandbox explicitly for both browser-selection paths; no weaker retry.", + "Updated source hashes and validation-status prose without changing candidate lifecycle or publication targets." + ], + "checks": [ + { + "browser_launched": false, + "failures": 3, + "name": "launcher regression before fix", + "status": "expected failure", + "tests": 4 + }, + { + "browser_launched": false, + "command": "PATH=/opt/homebrew/opt/python@3.11/libexec/bin:$PATH /opt/homebrew/bin/python3.11 -m unittest tests.test_stageshow_intake tests.test_stageshow_browser_launcher tests.test_capability_registry tests.test_audit_capabilities tests.test_compile_runtime tests.test_install_runtime tests.test_documented_commands", + "failures": 0, + "name": "focused Stack tests", + "python": "3.11.15", + "status": "passed", + "tests": 59 + }, + { + "command": "node --check skills/imported/benjitaylor/stageshow/scripts/browser.mjs", + "name": "JavaScript syntax", + "status": "passed" + }, + { + "command": "python3 scripts/build-capability-registry.py --check", + "name": "capability registry", + "status": "passed" + }, + { + "command": "git diff --check -- skills/imported/benjitaylor/stageshow tests/test_stageshow_browser_launcher.py", + "name": "patch whitespace", + "status": "passed" + }, + { + "name": "fresh-reader check", + "scope": "changed integration-contract prose and validation follow-up; one ambiguous phrase clarified", + "status": "passed" + }, + { + "failures": 1, + "name": "initial default-Python test run", + "reason": "Python 3.9 lacked tomllib for an existing documented command; Python 3.11 rerun passed", + "status": "failed", + "tests": 59 + }, + { + "name": "bun skill guards", + "reason": "This Stack repository uses Python unittest and has no root Bun package or test:skill-guards script.", + "status": "not applicable" + }, + { + "name": "Claude/Codex behavioral skill evaluation", + "reason": "Candidate remains inactive; changed prose records validation status and the sandbox patch. Cross-runtime video acceptance requires the blocked isolated setup.", + "status": "not run" + } + ], + "imported_file_hashes_digest": "a9c16b987382624e4d7e80eec0990376488f73da1b3808e0000d725b6f1916ef", + "isolation_attempt": { + "booted": false, + "browser_launched": false, + "cleanup": "Unbooted VM definition deleted; Lima reports no instance", + "container_runtime": false, + "download_probes": [ + { + "result": "curl exit 6: could not resolve host", + "url": "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-arm64.qcow2" + }, + { + "result": "curl exit 6: could not resolve host", + "url": "https://mcr.microsoft.com/v2/playwright/manifests/v1.48.2-jammy" + } + ], + "host_mounts": [], + "host_public_key_loading": false, + "proxy_environment_propagation": false, + "result": "VM creation stopped on a denied default image-cache write", + "ssh_agent_forwarding": false, + "test_listener_started": false, + "vm": "Lima plain-mode Debian 12 arm64" + }, + "prior_validation": { + "browser_video": "user-reported incomplete after guest DNS failure; prior VM removed", + "checked_in_review": "skills/imported/benjitaylor/stageshow/STACK-REVIEW.md", + "install_typecheck_build": "user-reported pass; newer receipts not located; not independently rerun", + "prohibited_diagnostic": "not retried; no privilege elevation or bypass attempted" + }, + "recorded_at": "2026-11-01T22:24:22.668125+00:00", + "resume_requirements": [ + "Use a supported runner that permits setup-only official VM/browser/dependency downloads and VM image-cache writes, or supply a verified offline image/bundle.", + "Bind browser and dependency assets to the existing lockfile and verify their identity before executing them.", + "Copy only the pinned candidate and synthetic fixture into a fresh isolated environment; enforce and prove network denial before any test execution.", + "Keep the browser sandbox enabled and stop on isolation failure; do not reuse signed-in browsers, alter host security controls or retry the denied diagnostic.", + "Record and inspect a real video before changing the hold. Review catalog activation separately from runtime publication; publication is prohibited in this task." + ], + "schema_version": 1, + "source_state": "existing staged candidate plus uncommitted follow-up; no commit or publication performed", + "stack_base_commit": "0da4f2e3c8598bbb807db2a90e014366094124eb", + "status": "blocked-before-browser-video-validation", + "upstream_revision": "802057409787133703c56001080169e347305572" +} diff --git a/artifacts/validation/stageshow/2026-11-09-accepted.json b/artifacts/validation/stageshow/2026-11-09-accepted.json new file mode 100644 index 0000000..4aa7cd6 --- /dev/null +++ b/artifacts/validation/stageshow/2026-11-09-accepted.json @@ -0,0 +1,98 @@ +{ + "artifact_root": "artifacts/validation/stageshow/local-2026-11-09", + "artifacts_sha256": { + "outputs/browser-acceptance.json": "83abf1e2f03d92f7af74fb45c010440c320787ea28f7afd91ddddb64d3326ae9", + "outputs/caption-audit.json": "7d97a352845fc22bcf3c53b00108e159d965beacd2e1ba222a7d70ce078e040d", + "outputs/failure.json": "4d472b836a19c52239e078dbf26ef565705b0b697c07326dbe65babf8b7adedd", + "outputs/loop-probe-final.json": "3e03a910ad32941a329985ee5e77b558bfbdfc2c61076f7d69024341c69c37fb", + "outputs/loop-ui.mp4": "d06a9415c941242b355bcfe0cb253582cd54671153e6a96cd4a18444981cbd82", + "outputs/loop-video.json": "69ee8648dc6cadf67de36cff4966eb0d4935872bbdfb7874cd0dddaf4355e09f", + "outputs/representative-compact.json": "7230a75fd54713b135cb75ddee4c803643ea983971038b1abee92807131c7f1d", + "outputs/representative-loop-final.json": "4182b772d8fe7d1e627a496359d636cbf6287b52957eb912b67f2a985a3f6246", + "outputs/representative-still.json": "7230a75fd54713b135cb75ddee4c803643ea983971038b1abee92807131c7f1d", + "outputs/sample-ui.mp4": "407a130327cdce1833285fbe592c4c0ff95b2ac7e004718a756032204be8b320", + "outputs/video-probe-final.json": "6e85b73639860f8a240a93510aa5a147b08318ebab8cae488e57fdc8bc02088b" + }, + "capability": "stageshow", + "checks": { + "build": "passed offline in VM", + "caption_escape": "markup label round-tripped; zero inserted tags or executed handlers", + "compact": "390px, 358px design, no overflow; passed gate", + "dependencies": "exact lockfile npm ci --ignore-scripts; Debian signed-index version pins and SHA-256 list retained", + "failed_rehearsal": "exit 1 preserved in process and report; no success claim", + "official_node_sha256": "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7", + "output_containment": "all named exports under approved validation outputs; no source helper/lockfile mutation, output symlink or HTTP listener; arbitrary hostile --out paths are not a supported safety boundary", + "reduced_motion": "wide and compact posters stable; final success state", + "representative_loop": "complete sampling, no findings, rehearsal passed with unchanged thresholds", + "representative_still": "passed gate", + "shutdown": "no remaining browser/node/listener processes; VM stopped", + "typecheck": "passed offline in VM", + "video": { + "decode": "both entire streams decoded without errors", + "loop": { + "codec": "h264", + "decoded_frames": 200, + "dimensions": [ + 640, + 360 + ], + "duration_seconds": 8, + "fps": 25, + "states": "saved/reset twice" + }, + "native_recording": "official Playwright VP8 encoder; native tail trimmed when producing declared-duration H.264 exports", + "sample": { + "codec": "h264", + "decoded_frames": 300, + "dimensions": [ + 640, + 480 + ], + "duration_seconds": 12, + "final_state": "Account created", + "fps": 25 + }, + "visual_inspection": "decoded sequence, final frame and loop contact sheets inspected by primary; fresh independent review recorded separately" + }, + "visual_review": "Primary decoded-frame inspection and independent Sol High review verified both MP4s; corrected still/compact evidence reviewed separately before install." + }, + "isolation": { + "chromium_sandbox": "verified PID namespace and additional renderer seccomp; no unsandboxed retry", + "content": "fully inlined synthetic local file pages; no listener", + "environment": "allowlisted env -i", + "host_mounts": [], + "image_digest": "sha512:52eb678130e85a9bf9f3cf4f7181e060fa60a5db45373717474c5ff9305645c5e6cab8b05ca042bcfa7921d2ca29cf9fd2e815f75abe2d168557ad7207af127b", + "network_probes": { + "external_browser_navigation": "denied", + "ipv4": "EPERM", + "ipv6": "EPERM" + }, + "private_credentials": false, + "privilege_elevation_used": false, + "signed_in_state": false, + "test_network": "inherited seccomp denies all non-UNIX/non-netlink sockets and io_uring_setup; NNP; no inherited sockets", + "vm": "Lima 2.2.0 VZ Debian 12 arm64" + }, + "limitations": [ + "Representative routes only; full retained example catalog not certified.", + "Exploratory form/loading helper scans reported sampling gaps and/or compact framing findings; preserved as failed/inconclusive.", + "film.mjs exports PNGs; encoded video remains a separate recording/decode step.", + "Host-side preparatory typecheck/build ran before VM acceptance; authoritative typecheck/build were repeated under the VM offline rule." + ], + "recorded_date": "2026-11-09", + "schema_version": 1, + "scope": "representative synthetic browser/video validation; local runtime installation separately receipted", + "source": { + "browser_revision": "1140", + "browser_version": "130.0.6723.31", + "helper_sha256": { + "package-lock.json": "092ee4aa51f4f38df3c5ba35708ef288a533a6c9b7078fcb5b71897d6ac5e731", + "scripts/browser.mjs": "48e9ee06dc76b378bf6f3b701f72a844a2db33f5056086cd5ab2642fa394d271", + "scripts/film.mjs": "354200847958a4573eeb0da9ba4e061fc4f2ec1eecebf3df9b91f05e747f08a3" + }, + "playwright_core": "1.48.2", + "upstream_revision": "802057409787133703c56001080169e347305572" + }, + "status": "passed", + "thread_id": "01a1c1bb-c674-7013-a1ee-dcaf8ede8354" +} diff --git a/artifacts/validation/stageshow/2026-11-09.json b/artifacts/validation/stageshow/2026-11-09.json new file mode 100644 index 0000000..d3a3f44 --- /dev/null +++ b/artifacts/validation/stageshow/2026-11-09.json @@ -0,0 +1,53 @@ +{ + "activation_performed": false, + "authorization": "User requested local availability in Claude and Codex. Isolated validation and local installation are authorized; no additional confirmation of those actions is required.", + "browser_video_test": "not run", + "capability": "stageshow", + "observed_blockers": [ + { + "check": "dependency setup", + "result": "curl exit 6: registry.npmjs.org could not be resolved" + }, + { + "check": "offline validation assets", + "result": "No cached matching browser or Lima VM image; package node_modules absent" + }, + { + "check": "normal runtime compiler", + "result": "refusing to stage a dirty source tree" + }, + { + "check": "runtime stage write probe", + "result": "Operation not permitted" + }, + { + "check": "Claude runtime parent write probe", + "result": "Operation not permitted" + }, + { + "check": "Codex runtime parent write probe", + "result": "Operation not permitted" + }, + { + "check": "runtime receipt write probe", + "result": "Operation not permitted" + } + ], + "preserved": { + "browser_sandbox_required": true, + "candidate_lifecycle": true, + "isolated_video_acceptance_required": true, + "prior_changes": true, + "prior_receipt": "artifacts/validation/stageshow/2026-11-01.json" + }, + "recorded_at": "2026-11-09T19:09:17.331164+00:00", + "resume": [ + "Run setup with access to official dependency and browser-image hosts, or supply verified offline assets.", + "Validate a real synthetic UI video in isolation with the browser sandbox enabled and test network access denied.", + "Prepare a clean isolated source commit containing only the reviewed integration changes; preserve the dirty working checkout.", + "Use the normal compiler and atomic installer with permitted runtime staging, Claude/Codex target and receipt writes." + ], + "runtime_installation_performed": false, + "schema_version": 1, + "status": "blocked-by-execution-environment" +} diff --git a/artifacts/validation/stageshow/local-2026-11-09/audit-hooks.mjs b/artifacts/validation/stageshow/local-2026-11-09/audit-hooks.mjs new file mode 100644 index 0000000..10dac9a --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/audit-hooks.mjs @@ -0,0 +1,21 @@ +// Validation-only observer: actual film source/launcher stay byte-for-byte intact. +import {chromium} from 'playwright-core'; +import fs from 'node:fs'; +import assert from 'node:assert/strict'; +const original=chromium.launch.bind(chromium); +chromium.launch=async options=>{ + assert.equal(options.chromiumSandbox,true); + const browser=await original(options);const newPage=browser.newPage.bind(browser); + browser.newPage=async options=>{ + const page=await newPage(options);const setContent=page.setContent.bind(page); + page.setContent=async html=>{ + const result=await setContent(html); + const payloads=await page.locator('figcaption').allTextContents(); + const injected=await page.locator('figcaption img, figcaption script').count(); + const executed=await page.evaluate(()=>window.__captionExecuted||0); + assert.equal(injected,0);assert.equal(executed,0); + if(process.env.CAPTION_AUDIT)fs.writeFileSync(process.env.CAPTION_AUDIT,JSON.stringify({payloads,injected,executed,escaped:html.includes('<img')},null,2)); + return result; + };return page; + };return browser; +}; diff --git a/artifacts/validation/stageshow/local-2026-11-09/browser-acceptance.mjs b/artifacts/validation/stageshow/local-2026-11-09/browser-acceptance.mjs new file mode 100644 index 0000000..7435e5f --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/browser-acceptance.mjs @@ -0,0 +1,66 @@ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import {launch} from './scripts/browser.mjs'; +const out=new URL('../outputs/',import.meta.url).pathname; +fs.mkdirSync(out,{recursive:true}); +const url=new URL('./acceptance.html',import.meta.url).href; +const result={browser:null,sandbox:null,network:[],pages:[],durationTargetMs:12000}; +// Kernel filter must deny both IP families before the browser starts. +const net=await import('node:net'); +for(const host of ['1.1.1.1','::1']){ + const error=await new Promise(resolve=>{const s=net.connect({host,port:443});s.on('error',e=>resolve(e.code));s.on('connect',()=>{s.destroy();resolve('CONNECTED')});}); + assert.equal(error,'EPERM'); result.network.push({host,error}); +} +const browser=await launch(); +try{ + result.browser=browser.version();assert.equal(result.browser,'130.0.6723.31'); + const page=await browser.newPage(); + await page.goto('data:text/html,
Sandbox validation
'); + const renderers=[]; + for(const pid of fs.readdirSync('/proc').filter(x=>/^\d+$/.test(x))){ + try{const command=fs.readFileSync(`/proc/${pid}/cmdline`,'utf8'); + if(!command.includes('--type=renderer'))continue; + const status=fs.readFileSync(`/proc/${pid}/status`,'utf8'); + renderers.push({pid,command:command.split('\0'),status}); + }catch{} + } + assert(renderers.length>0); + for(const r of renderers){ + assert.match(r.status,/Seccomp:\s+2/);assert.match(r.status,/NoNewPrivs:\s+1/); + assert(Number(r.status.match(/Seccomp_filters:\s+(\d+)/)?.[1])>=2); + assert(r.status.match(/NSpid:([^\n]+)/)[1].trim().split(/\s+/).length>=2); + } + result.sandbox={renderers,verified:'renderer PID namespace + additional Chromium seccomp filter + NNP, no sandbox-disabling flags'}; + const cdp=await browser.newBrowserCDPSession(); + result.commandLine=(await cdp.send('Browser.getBrowserCommandLine')).arguments; + assert(!result.commandLine.some(x=>/--no-sandbox|--disable-seccomp-filter-sandbox/.test(x))); + await assert.rejects(page.goto('https://example.com',{timeout:3000})); + await page.close(); + const context=await browser.newContext({viewport:{width:640,height:480},recordVideo:{dir:out,size:{width:640,height:480}},reducedMotion:'no-preference'}); + const started=Date.now();const clip=await context.newPage();const errors=[];const requests=[]; + clip.on('pageerror',e=>errors.push(e.message));clip.on('request',r=>requests.push(r.url())); + await clip.goto(url);await clip.locator('.ss-stage').waitFor(); + for(const at of [0,3000,7000,11000]){ + await clip.waitForTimeout(Math.max(0,started+at-Date.now())); + const state=await clip.locator('.ss-stage').innerText(); + result.pages.push({at:Date.now()-started,state}); + await clip.screenshot({path:out+`video-${at}.png`}); + } + assert.equal(await clip.locator('[data-target="create"]').getAttribute('data-done'),'true'); + assert.equal(errors.length,0,errors.join('\n'));assert(requests.every(x=>x.startsWith('file:'))); + await clip.waitForTimeout(Math.max(0,started+12000-Date.now())); + const video=clip.video();await context.close();await video.saveAs(out+'sample-ui.webm'); + result.recordedWallMs=Date.now()-started;result.resources=requests;result.pageErrors=errors; + for(const width of [640,390]){ + const p=await browser.newPage({viewport:{width,height:500},reducedMotion:'reduce'});await p.goto(url);await p.waitForTimeout(500); + const state=await p.locator('[data-target="create"]').getAttribute('data-done');assert.equal(state,'true'); + const layout=await p.locator('.ss-stage').getAttribute('data-layout');assert.equal(layout,width===390?'compact':'wide'); + assert(await p.evaluate(()=>document.documentElement.scrollWidth<=innerWidth)); + const a=await p.screenshot({path:out+`reduced-${width}.png`});await p.waitForTimeout(700);const b=await p.screenshot();assert(a.equals(b),'reduced motion must be stable'); + result.pages.push({reduced:true,width,layout,state,stable:true});await p.close(); + } + result.passed=true; +}finally{ + await browser.close();result.browserClosed=!browser.isConnected(); + fs.writeFileSync(out+'browser-acceptance.json',JSON.stringify(result,null,2)+'\n'); +} diff --git a/artifacts/validation/stageshow/local-2026-11-09/browser-download.log b/artifacts/validation/stageshow/local-2026-11-09/browser-download.log new file mode 100644 index 0000000..ccbcbb7 --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/browser-download.log @@ -0,0 +1,12 @@ +Downloading Chromium 130.0.6723.31 (playwright build v1140)[2m from https://playwright.azureedge.net/builds/chromium/1140/chromium-mac-arm64.zip[22m +| | 0% of 140.8 MiB +|■■■■■■■■ | 10% of 140.8 MiB +|■■■■■■■■■■■■■■■■ | 20% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 140.8 MiB +|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 140.8 MiB diff --git a/artifacts/validation/stageshow/local-2026-11-09/browser-test.log b/artifacts/validation/stageshow/local-2026-11-09/browser-test.log new file mode 100644 index 0000000..e69de29 diff --git a/artifacts/validation/stageshow/local-2026-11-09/build-offline.log b/artifacts/validation/stageshow/local-2026-11-09/build-offline.log new file mode 100644 index 0000000..89fadb5 --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/build-offline.log @@ -0,0 +1,211 @@ + +> stageshow@0.1.0 build +> vite build playground --config playground/vite.config.ts + +vite v6.4.5 building for production... +transforming... +✓ 1832 modules transformed. +rendering chunks... +computing gzip size... +dist/index.html 0.38 kB │ gzip: 0.28 kB +dist/assets/google-sheets-C6gOto98.svg 5.07 kB │ gzip: 0.95 kB +dist/assets/google-slides-B6uumWEX.svg 5.08 kB │ gzip: 0.95 kB +dist/assets/fuji-6u2eUW7w.jpg 23.67 kB +dist/assets/kawaguchiko-ZVc1ITuN.jpg 30.23 kB +dist/assets/preview-BtPcMLHE.css 0.27 kB │ gzip: 0.23 kB +dist/assets/index-BMNMwAK1.css 0.50 kB │ gzip: 0.30 kB +dist/assets/index-WKcunGLc.css 0.57 kB │ gzip: 0.34 kB +dist/assets/index-DJV5L_eC.css 0.70 kB │ gzip: 0.40 kB +dist/assets/index-Btff5qfu.css 0.71 kB │ gzip: 0.36 kB +dist/assets/index-CkYXjZ9w.css 0.73 kB │ gzip: 0.42 kB +dist/assets/index-mEYhPiZ3.css 0.81 kB │ gzip: 0.43 kB +dist/assets/index-sVljeUwB.css 0.82 kB │ gzip: 0.44 kB +dist/assets/index-C-WfQKN3.css 0.86 kB │ gzip: 0.42 kB +dist/assets/index-Z-xdbY0f.css 0.88 kB │ gzip: 0.45 kB +dist/assets/index-CWW18H9B.css 0.95 kB │ gzip: 0.46 kB +dist/assets/index-BB3vhgYC.css 1.01 kB │ gzip: 0.46 kB +dist/assets/index-DI210Dwb.css 1.11 kB │ gzip: 0.52 kB +dist/assets/index-CN1oFMiv.css 1.12 kB │ gzip: 0.54 kB +dist/assets/index-BBcAHwHh.css 1.18 kB │ gzip: 0.44 kB +dist/assets/index-C5dlaaEf.css 1.25 kB │ gzip: 0.58 kB +dist/assets/index-tBx-WLPU.css 1.35 kB │ gzip: 0.61 kB +dist/assets/index-DXicioAR.css 1.49 kB │ gzip: 0.69 kB +dist/assets/index-zXiq_2JM.css 1.55 kB │ gzip: 0.64 kB +dist/assets/index-D9i7dlpw.css 1.62 kB │ gzip: 0.58 kB +dist/assets/index-BnOSLZr1.css 1.88 kB │ gzip: 0.72 kB +dist/assets/index-DOQPcLFd.css 1.90 kB │ gzip: 0.78 kB +dist/assets/index-e-lqpHu8.css 1.97 kB │ gzip: 0.74 kB +dist/assets/index-CIQP2Yrs.css 1.97 kB │ gzip: 0.81 kB +dist/assets/index-C0nyNUTb.css 2.05 kB │ gzip: 0.86 kB +dist/assets/index-BLeagJA2.css 2.08 kB │ gzip: 0.78 kB +dist/assets/index-7avUzOCM.css 2.09 kB │ gzip: 0.87 kB +dist/assets/index-C3XsDPCF.css 2.11 kB │ gzip: 0.87 kB +dist/assets/index-B_pE6vfB.css 2.20 kB │ gzip: 0.84 kB +dist/assets/index-BvsNKx75.css 2.32 kB │ gzip: 0.81 kB +dist/assets/index-DaJDlkXk.css 2.35 kB │ gzip: 0.78 kB +dist/assets/index-C7xKh9wp.css 2.63 kB │ gzip: 1.06 kB +dist/assets/index-BRVWJzQW.css 2.77 kB │ gzip: 0.97 kB +dist/assets/index-GSPMmA7o.css 3.22 kB │ gzip: 1.14 kB +dist/assets/index-BhQYk_j_.css 3.38 kB │ gzip: 1.14 kB +dist/assets/index-CDVYuwwk.css 3.53 kB │ gzip: 1.15 kB +dist/assets/index-nagszGfi.css 3.69 kB │ gzip: 1.28 kB +dist/assets/index-qwVGhSiz.css 3.84 kB │ gzip: 1.17 kB +dist/assets/index-BRXWcRUe.css 4.14 kB │ gzip: 1.49 kB +dist/assets/index-Di2oLIK4.css 4.40 kB │ gzip: 1.40 kB +dist/assets/index-CIDlKy9v.css 4.45 kB │ gzip: 1.36 kB +dist/assets/index-ChZ75Max.css 4.88 kB │ gzip: 1.46 kB +dist/assets/index-tebhUVRK.css 4.95 kB │ gzip: 1.58 kB +dist/assets/index-B5udcqeD.css 5.60 kB │ gzip: 1.67 kB +dist/assets/index-C-Vqya12.css 5.63 kB │ gzip: 1.80 kB +dist/assets/index-FZMtGqxO.css 5.71 kB │ gzip: 1.77 kB +dist/assets/index-1H1mqjB8.css 5.91 kB │ gzip: 1.83 kB +dist/assets/index-CIkEmTmZ.css 5.96 kB │ gzip: 1.73 kB +dist/assets/viewer-Bzq4_yHu.css 6.01 kB │ gzip: 1.95 kB +dist/assets/index-D5KfkQeT.css 6.32 kB │ gzip: 1.76 kB +dist/assets/index-CsaMaQmR.css 6.72 kB │ gzip: 1.97 kB +dist/assets/index-BAVb0BmT.css 6.98 kB │ gzip: 2.20 kB +dist/assets/index-CRrUTti0.css 7.26 kB │ gzip: 2.35 kB +dist/assets/index-BgRMxk_x.css 7.33 kB │ gzip: 2.16 kB +dist/assets/index-BpWJBKE3.css 7.41 kB │ gzip: 1.85 kB +dist/assets/index-BnmlW51U.css 7.54 kB │ gzip: 1.94 kB +dist/assets/index-CktOeJNl.css 8.02 kB │ gzip: 2.09 kB +dist/assets/index-DaMxCVDY.css 8.42 kB │ gzip: 2.51 kB +dist/assets/index-BywSxTv1.css 8.56 kB │ gzip: 2.63 kB +dist/assets/index-B-xGLnU5.css 8.63 kB │ gzip: 2.55 kB +dist/assets/index-DSpZcqt3.css 9.52 kB │ gzip: 2.56 kB +dist/assets/index-D3jS-pTN.css 9.74 kB │ gzip: 2.52 kB +dist/assets/index-Bxq8GSwZ.css 9.79 kB │ gzip: 2.65 kB +dist/assets/index-CUJvBIJv.css 10.61 kB │ gzip: 2.65 kB +dist/assets/index-BjMmjRnb.css 15.44 kB │ gzip: 3.77 kB +dist/assets/index-t9PtY9ee.css 25.46 kB │ gzip: 5.20 kB +dist/assets/contrasts-DjgXvEt5.css 67.27 kB │ gzip: 12.82 kB +dist/assets/chart-D7j8BSt6.css 74.43 kB │ gzip: 15.13 kB +dist/assets/Toggle-DH9xMdfD.js 0.29 kB │ gzip: 0.23 kB +dist/assets/chevron-down-CDXDCLUy.js 0.31 kB │ gzip: 0.25 kB +dist/assets/chevron-right-CBbg3seD.js 0.31 kB │ gzip: 0.25 kB +dist/assets/chevron-left-D6yTe_0r.js 0.31 kB │ gzip: 0.25 kB +dist/assets/plus-4b9ZT-Gr.js 0.33 kB │ gzip: 0.26 kB +dist/assets/x-DH73QEN6.js 0.33 kB │ gzip: 0.26 kB +dist/assets/arrow-left-9lS-pYeG.js 0.34 kB │ gzip: 0.27 kB +dist/assets/search-Cbkx1iiu.js 0.35 kB │ gzip: 0.27 kB +dist/assets/clock-BwOd0xPI.js 0.36 kB │ gzip: 0.28 kB +dist/assets/Meter-5oSEw5mx.js 0.37 kB │ gzip: 0.28 kB +dist/assets/Menu-BItRuhLp.js 0.37 kB │ gzip: 0.27 kB +dist/assets/Badge-D6mejYQ6.js 0.38 kB │ gzip: 0.26 kB +dist/assets/pause-BV1zeNDR.js 0.39 kB │ gzip: 0.27 kB +dist/assets/file-DWQ1ZC3q.js 0.40 kB │ gzip: 0.29 kB +dist/assets/ellipsis-BcdHwcKp.js 0.40 kB │ gzip: 0.27 kB +dist/assets/folder-D7JVyY8K.js 0.41 kB │ gzip: 0.30 kB +dist/assets/type-CRHtIOBo.js 0.42 kB │ gzip: 0.30 kB +dist/assets/app-window-e4mgBJtT.js 0.44 kB │ gzip: 0.31 kB +dist/assets/image-SDs3cGWp.js 0.45 kB │ gzip: 0.33 kB +dist/assets/mic-XSrj4FIE.js 0.45 kB │ gzip: 0.32 kB +dist/assets/git-branch-DzdNWBDe.js 0.45 kB │ gzip: 0.32 kB +dist/assets/inbox-R6j6o4UJ.js 0.47 kB │ gzip: 0.34 kB +dist/assets/house-DvZxuiBV.js 0.47 kB │ gzip: 0.32 kB +dist/assets/States-DsWfAkaM.js 0.47 kB │ gzip: 0.32 kB +dist/assets/Segmented-CWaXIoYJ.js 0.48 kB │ gzip: 0.33 kB +dist/assets/list-pC7aY4XJ.js 0.48 kB │ gzip: 0.29 kB +dist/assets/square-pen-DZxXkyrB.js 0.50 kB │ gzip: 0.35 kB +dist/assets/tag-W3AqdRgu.js 0.51 kB │ gzip: 0.36 kB +dist/assets/list-ordered-DGh1gOAH.js 0.51 kB │ gzip: 0.32 kB +dist/assets/file-text-GRTeCqRD.js 0.51 kB │ gzip: 0.32 kB +dist/assets/Spinner-DYyN-rp9.js 0.52 kB │ gzip: 0.35 kB +dist/assets/Facepile-DDzwswcs.js 0.60 kB │ gzip: 0.42 kB +dist/assets/layers-CuRLVtyV.js 0.60 kB │ gzip: 0.35 kB +dist/assets/Popover-CAlF461p.js 0.61 kB │ gzip: 0.39 kB +dist/assets/Toast-fcx7lzJP.js 0.65 kB │ gzip: 0.41 kB +dist/assets/Check-B_2qDvF9.js 0.68 kB │ gzip: 0.38 kB +dist/assets/user-h3K1lIem.js 0.75 kB │ gzip: 0.39 kB +dist/assets/bell-Cnehlm9w.js 0.75 kB │ gzip: 0.40 kB +dist/assets/Collapse-DH0-dLlq.js 0.87 kB │ gzip: 0.52 kB +dist/assets/Avatar-BhvUqnLt.js 0.87 kB │ gzip: 0.60 kB +dist/assets/share-DDvO90JV.js 0.90 kB │ gzip: 0.41 kB +dist/assets/BrandMark-Brt4HwD6.js 0.98 kB │ gzip: 0.61 kB +dist/assets/index-BNVnzbwa.js 1.03 kB │ gzip: 0.58 kB +dist/assets/Row-LDXN40Zt.js 1.06 kB │ gzip: 0.49 kB +dist/assets/index-BhU3dYIQ.js 1.13 kB │ gzip: 0.58 kB +dist/assets/monitor-Dg5xjMxR.js 1.14 kB │ gzip: 0.47 kB +dist/assets/Camera-CE2SJRw4.js 1.22 kB │ gzip: 0.70 kB +dist/assets/index-17Eal28G.js 1.26 kB │ gzip: 0.48 kB +dist/assets/index-DULxjZmt.js 1.30 kB │ gzip: 0.69 kB +dist/assets/index-BItmLtVQ.js 1.33 kB │ gzip: 0.63 kB +dist/assets/star-Ccnmopt9.js 1.38 kB │ gzip: 0.54 kB +dist/assets/Fly-6m4FuaYB.js 1.40 kB │ gzip: 0.77 kB +dist/assets/index-DJwEv1B6.js 1.47 kB │ gzip: 0.78 kB +dist/assets/index-DahCuGPY.js 1.49 kB │ gzip: 0.70 kB +dist/assets/index-DyNMKAPE.js 1.57 kB │ gzip: 0.72 kB +dist/assets/createLucideIcon-CevK7Nqt.js 1.58 kB │ gzip: 0.66 kB +dist/assets/index-CBD-vhmv.js 1.62 kB │ gzip: 0.77 kB +dist/assets/settings-aymoTyAq.js 1.64 kB │ gzip: 0.60 kB +dist/assets/index-B7JFiZZa.js 1.82 kB │ gzip: 0.80 kB +dist/assets/index-t5-HV-fJ.js 1.85 kB │ gzip: 0.86 kB +dist/assets/index-BSmWQvsJ.js 1.85 kB │ gzip: 0.89 kB +dist/assets/index-pT3XKYUr.js 1.88 kB │ gzip: 0.91 kB +dist/assets/Field-CbupDgeD.js 1.91 kB │ gzip: 0.92 kB +dist/assets/Swap-BfCSa3-S.js 1.91 kB │ gzip: 0.92 kB +dist/assets/Follow-B212EkR6.js 2.14 kB │ gzip: 1.09 kB +dist/assets/index-BkVOqeck.js 2.38 kB │ gzip: 1.21 kB +dist/assets/index-Dp3tooaZ.js 2.42 kB │ gzip: 0.84 kB +dist/assets/Count-BKnLxNXk.js 2.43 kB │ gzip: 1.20 kB +dist/assets/index-BjTWbvYA.js 2.44 kB │ gzip: 0.93 kB +dist/assets/index-GmAy1Lag.js 2.59 kB │ gzip: 1.06 kB +dist/assets/index-XhiyJi1L.js 2.64 kB │ gzip: 1.16 kB +dist/assets/index-D46kave6.js 2.71 kB │ gzip: 1.09 kB +dist/assets/index-wYojaRhh.js 2.73 kB │ gzip: 1.12 kB +dist/assets/index-DukhqrQd.js 2.78 kB │ gzip: 1.32 kB +dist/assets/index-Ccu7ncj_.js 2.78 kB │ gzip: 1.32 kB +dist/assets/index-STPqlYZ-.js 3.08 kB │ gzip: 1.24 kB +dist/assets/index-JMQFwPnM.js 3.10 kB │ gzip: 1.30 kB +dist/assets/index-DbBpfK61.js 3.13 kB │ gzip: 1.26 kB +dist/assets/index-BHDZipZT.js 3.24 kB │ gzip: 1.45 kB +dist/assets/index-DmMHHpIW.js 3.52 kB │ gzip: 1.74 kB +dist/assets/Connector-BLcn0yKH.js 3.79 kB │ gzip: 1.74 kB +dist/assets/index-DQ1aggjS.js 4.06 kB │ gzip: 1.58 kB +dist/assets/index-qFTv_boN.js 4.08 kB │ gzip: 1.68 kB +dist/assets/chart-C1OCzOoE.js 4.35 kB │ gzip: 1.91 kB +dist/assets/index-DbDdEsYQ.js 4.42 kB │ gzip: 1.69 kB +dist/assets/index-DSZ-XoXb.js 4.55 kB │ gzip: 1.61 kB +dist/assets/index-uB5zMjp6.js 4.68 kB │ gzip: 1.82 kB +dist/assets/index-CaMLOwNA.js 4.71 kB │ gzip: 1.84 kB +dist/assets/index-BfpUTDPT.js 5.18 kB │ gzip: 2.33 kB +dist/assets/index-Bw0erUII.js 5.30 kB │ gzip: 2.06 kB +dist/assets/window-j2-AUrNc.js 5.40 kB │ gzip: 1.59 kB +dist/assets/index-q0VC-rZK.js 5.44 kB │ gzip: 1.79 kB +dist/assets/index-D1jkxcac.js 5.51 kB │ gzip: 2.33 kB +dist/assets/index-C29QqZEr.js 5.83 kB │ gzip: 2.27 kB +dist/assets/index-C0AxiUF2.js 5.93 kB │ gzip: 2.33 kB +dist/assets/index-DtnBkCud.js 6.16 kB │ gzip: 2.62 kB +dist/assets/index-DvJ4xvR6.js 6.23 kB │ gzip: 2.30 kB +dist/assets/index-DApFXPSI.js 6.74 kB │ gzip: 2.40 kB +dist/assets/phone-Ebq3SgOF.js 7.37 kB │ gzip: 2.83 kB +dist/assets/index-DzL5-cGK.js 7.57 kB │ gzip: 2.81 kB +dist/assets/index-CPGreSAx.js 7.79 kB │ gzip: 2.40 kB +dist/assets/index-C_PdLQB-.js 8.03 kB │ gzip: 3.08 kB +dist/assets/index-iCrr1hxc.js 8.07 kB │ gzip: 3.08 kB +dist/assets/index-B8Iv4zFm.js 8.17 kB │ gzip: 3.32 kB +dist/assets/Icon-Cno-jIB6.js 8.59 kB │ gzip: 3.06 kB +dist/assets/index-dKLDTUYt.js 8.65 kB │ gzip: 3.23 kB +dist/assets/index-NBtoNPoJ.js 8.66 kB │ gzip: 2.91 kB +dist/assets/index-Bw0kOyMt.js 8.68 kB │ gzip: 3.31 kB +dist/assets/index-BA2viUDK.js 8.82 kB │ gzip: 3.92 kB +dist/assets/index-BeVyuVqi.js 8.94 kB │ gzip: 3.00 kB +dist/assets/index-o9bFnczy.js 9.42 kB │ gzip: 3.22 kB +dist/assets/index-BbxfOB_q.js 9.74 kB │ gzip: 2.82 kB +dist/assets/index-CC0nBO__.js 10.63 kB │ gzip: 4.02 kB +dist/assets/index-DutvMX6V.js 11.33 kB │ gzip: 3.18 kB +dist/assets/index-C39hyzk6.js 11.54 kB │ gzip: 4.34 kB +dist/assets/index-BUBvd-i3.js 11.73 kB │ gzip: 3.31 kB +dist/assets/index-E1FFadmz.js 12.65 kB │ gzip: 4.47 kB +dist/assets/index-CD7pdwMG.js 14.04 kB │ gzip: 4.05 kB +dist/assets/index-t17EbUAR.js 14.11 kB │ gzip: 4.13 kB +dist/assets/index-zkEASSt3.js 14.16 kB │ gzip: 3.79 kB +dist/assets/index-E3vR2dk7.js 15.48 kB │ gzip: 3.82 kB +dist/assets/preview-9vlU2Ys7.js 15.85 kB │ gzip: 4.43 kB +dist/assets/index-D-tLFkDb.js 16.68 kB │ gzip: 6.34 kB +dist/assets/viewer-BQau-TCz.js 19.11 kB │ gzip: 5.98 kB +dist/assets/index-CWCb39Fv.js 29.53 kB │ gzip: 8.15 kB +dist/assets/contrasts-lYeVirZF.js 70.17 kB │ gzip: 19.78 kB +dist/assets/chart-AUUfhDck.js 126.98 kB │ gzip: 33.51 kB +dist/assets/client-DiRHWdFC.js 142.78 kB │ gzip: 45.72 kB +✓ built in 2.63s diff --git a/artifacts/validation/stageshow/local-2026-11-09/build.log b/artifacts/validation/stageshow/local-2026-11-09/build.log new file mode 100644 index 0000000..b420eb5 --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/build.log @@ -0,0 +1,211 @@ + +> stageshow@0.1.0 build +> vite build playground --config playground/vite.config.ts + +vite v6.4.5 building for production... +transforming... +✓ 1832 modules transformed. +rendering chunks... +computing gzip size... +dist/index.html 0.38 kB │ gzip: 0.28 kB +dist/assets/google-sheets-C6gOto98.svg 5.07 kB │ gzip: 0.95 kB +dist/assets/google-slides-B6uumWEX.svg 5.08 kB │ gzip: 0.95 kB +dist/assets/fuji-6u2eUW7w.jpg 23.67 kB +dist/assets/kawaguchiko-ZVc1ITuN.jpg 30.23 kB +dist/assets/preview-BtPcMLHE.css 0.27 kB │ gzip: 0.23 kB +dist/assets/index-BMNMwAK1.css 0.50 kB │ gzip: 0.30 kB +dist/assets/index-WKcunGLc.css 0.57 kB │ gzip: 0.34 kB +dist/assets/index-DJV5L_eC.css 0.70 kB │ gzip: 0.39 kB +dist/assets/index-Btff5qfu.css 0.71 kB │ gzip: 0.36 kB +dist/assets/index-CkYXjZ9w.css 0.73 kB │ gzip: 0.42 kB +dist/assets/index-mEYhPiZ3.css 0.81 kB │ gzip: 0.43 kB +dist/assets/index-sVljeUwB.css 0.82 kB │ gzip: 0.44 kB +dist/assets/index-C-WfQKN3.css 0.86 kB │ gzip: 0.42 kB +dist/assets/index-Z-xdbY0f.css 0.88 kB │ gzip: 0.45 kB +dist/assets/index-CWW18H9B.css 0.95 kB │ gzip: 0.46 kB +dist/assets/index-BB3vhgYC.css 1.01 kB │ gzip: 0.46 kB +dist/assets/index-DI210Dwb.css 1.11 kB │ gzip: 0.52 kB +dist/assets/index-CN1oFMiv.css 1.12 kB │ gzip: 0.54 kB +dist/assets/index-BBcAHwHh.css 1.18 kB │ gzip: 0.44 kB +dist/assets/index-C5dlaaEf.css 1.25 kB │ gzip: 0.58 kB +dist/assets/index-tBx-WLPU.css 1.35 kB │ gzip: 0.61 kB +dist/assets/index-DXicioAR.css 1.49 kB │ gzip: 0.68 kB +dist/assets/index-zXiq_2JM.css 1.55 kB │ gzip: 0.64 kB +dist/assets/index-D9i7dlpw.css 1.62 kB │ gzip: 0.58 kB +dist/assets/index-BnOSLZr1.css 1.88 kB │ gzip: 0.72 kB +dist/assets/index-DOQPcLFd.css 1.90 kB │ gzip: 0.78 kB +dist/assets/index-e-lqpHu8.css 1.97 kB │ gzip: 0.74 kB +dist/assets/index-CIQP2Yrs.css 1.97 kB │ gzip: 0.81 kB +dist/assets/index-C0nyNUTb.css 2.05 kB │ gzip: 0.85 kB +dist/assets/index-BLeagJA2.css 2.08 kB │ gzip: 0.78 kB +dist/assets/index-7avUzOCM.css 2.09 kB │ gzip: 0.87 kB +dist/assets/index-C3XsDPCF.css 2.11 kB │ gzip: 0.87 kB +dist/assets/index-B_pE6vfB.css 2.20 kB │ gzip: 0.84 kB +dist/assets/index-BvsNKx75.css 2.32 kB │ gzip: 0.80 kB +dist/assets/index-DaJDlkXk.css 2.35 kB │ gzip: 0.78 kB +dist/assets/index-C7xKh9wp.css 2.63 kB │ gzip: 1.06 kB +dist/assets/index-BRVWJzQW.css 2.77 kB │ gzip: 0.97 kB +dist/assets/index-GSPMmA7o.css 3.22 kB │ gzip: 1.13 kB +dist/assets/index-BhQYk_j_.css 3.38 kB │ gzip: 1.14 kB +dist/assets/index-CDVYuwwk.css 3.53 kB │ gzip: 1.14 kB +dist/assets/index-nagszGfi.css 3.69 kB │ gzip: 1.27 kB +dist/assets/index-qwVGhSiz.css 3.84 kB │ gzip: 1.17 kB +dist/assets/index-BRXWcRUe.css 4.14 kB │ gzip: 1.49 kB +dist/assets/index-Di2oLIK4.css 4.40 kB │ gzip: 1.40 kB +dist/assets/index-CIDlKy9v.css 4.45 kB │ gzip: 1.36 kB +dist/assets/index-ChZ75Max.css 4.88 kB │ gzip: 1.45 kB +dist/assets/index-tebhUVRK.css 4.95 kB │ gzip: 1.58 kB +dist/assets/index-B5udcqeD.css 5.60 kB │ gzip: 1.67 kB +dist/assets/index-C-Vqya12.css 5.63 kB │ gzip: 1.80 kB +dist/assets/index-FZMtGqxO.css 5.71 kB │ gzip: 1.76 kB +dist/assets/index-1H1mqjB8.css 5.91 kB │ gzip: 1.84 kB +dist/assets/index-CIkEmTmZ.css 5.96 kB │ gzip: 1.72 kB +dist/assets/viewer-Bzq4_yHu.css 6.01 kB │ gzip: 1.94 kB +dist/assets/index-D5KfkQeT.css 6.32 kB │ gzip: 1.76 kB +dist/assets/index-CsaMaQmR.css 6.72 kB │ gzip: 1.98 kB +dist/assets/index-BAVb0BmT.css 6.98 kB │ gzip: 2.20 kB +dist/assets/index-CRrUTti0.css 7.26 kB │ gzip: 2.34 kB +dist/assets/index-BgRMxk_x.css 7.33 kB │ gzip: 2.17 kB +dist/assets/index-BpWJBKE3.css 7.41 kB │ gzip: 1.86 kB +dist/assets/index-BnmlW51U.css 7.54 kB │ gzip: 1.93 kB +dist/assets/index-CktOeJNl.css 8.02 kB │ gzip: 2.09 kB +dist/assets/index-DaMxCVDY.css 8.42 kB │ gzip: 2.50 kB +dist/assets/index-BywSxTv1.css 8.56 kB │ gzip: 2.62 kB +dist/assets/index-B-xGLnU5.css 8.63 kB │ gzip: 2.54 kB +dist/assets/index-DSpZcqt3.css 9.52 kB │ gzip: 2.55 kB +dist/assets/index-D3jS-pTN.css 9.74 kB │ gzip: 2.51 kB +dist/assets/index-Bxq8GSwZ.css 9.79 kB │ gzip: 2.62 kB +dist/assets/index-CUJvBIJv.css 10.61 kB │ gzip: 2.64 kB +dist/assets/index-BjMmjRnb.css 15.44 kB │ gzip: 3.79 kB +dist/assets/index-t9PtY9ee.css 25.46 kB │ gzip: 5.22 kB +dist/assets/contrasts-DjgXvEt5.css 67.27 kB │ gzip: 12.86 kB +dist/assets/chart-D7j8BSt6.css 74.43 kB │ gzip: 15.11 kB +dist/assets/Toggle-DH9xMdfD.js 0.29 kB │ gzip: 0.23 kB +dist/assets/chevron-down-CDXDCLUy.js 0.31 kB │ gzip: 0.25 kB +dist/assets/chevron-right-CBbg3seD.js 0.31 kB │ gzip: 0.25 kB +dist/assets/chevron-left-D6yTe_0r.js 0.31 kB │ gzip: 0.25 kB +dist/assets/plus-4b9ZT-Gr.js 0.33 kB │ gzip: 0.26 kB +dist/assets/x-DH73QEN6.js 0.33 kB │ gzip: 0.26 kB +dist/assets/arrow-left-9lS-pYeG.js 0.34 kB │ gzip: 0.27 kB +dist/assets/search-Cbkx1iiu.js 0.35 kB │ gzip: 0.27 kB +dist/assets/clock-BwOd0xPI.js 0.36 kB │ gzip: 0.27 kB +dist/assets/Meter-5oSEw5mx.js 0.37 kB │ gzip: 0.28 kB +dist/assets/Menu-BItRuhLp.js 0.37 kB │ gzip: 0.27 kB +dist/assets/Badge-D6mejYQ6.js 0.38 kB │ gzip: 0.26 kB +dist/assets/pause-BV1zeNDR.js 0.39 kB │ gzip: 0.27 kB +dist/assets/file-DWQ1ZC3q.js 0.40 kB │ gzip: 0.29 kB +dist/assets/ellipsis-BcdHwcKp.js 0.40 kB │ gzip: 0.27 kB +dist/assets/folder-D7JVyY8K.js 0.41 kB │ gzip: 0.30 kB +dist/assets/type-CRHtIOBo.js 0.42 kB │ gzip: 0.30 kB +dist/assets/app-window-e4mgBJtT.js 0.44 kB │ gzip: 0.31 kB +dist/assets/image-SDs3cGWp.js 0.45 kB │ gzip: 0.33 kB +dist/assets/mic-XSrj4FIE.js 0.45 kB │ gzip: 0.32 kB +dist/assets/git-branch-DzdNWBDe.js 0.45 kB │ gzip: 0.32 kB +dist/assets/inbox-R6j6o4UJ.js 0.47 kB │ gzip: 0.34 kB +dist/assets/house-DvZxuiBV.js 0.47 kB │ gzip: 0.32 kB +dist/assets/States-DsWfAkaM.js 0.47 kB │ gzip: 0.32 kB +dist/assets/Segmented-CWaXIoYJ.js 0.48 kB │ gzip: 0.33 kB +dist/assets/list-pC7aY4XJ.js 0.48 kB │ gzip: 0.29 kB +dist/assets/square-pen-DZxXkyrB.js 0.50 kB │ gzip: 0.34 kB +dist/assets/tag-W3AqdRgu.js 0.51 kB │ gzip: 0.35 kB +dist/assets/list-ordered-DGh1gOAH.js 0.51 kB │ gzip: 0.32 kB +dist/assets/file-text-GRTeCqRD.js 0.51 kB │ gzip: 0.32 kB +dist/assets/Spinner-DYyN-rp9.js 0.52 kB │ gzip: 0.35 kB +dist/assets/Facepile-DDzwswcs.js 0.60 kB │ gzip: 0.42 kB +dist/assets/layers-CuRLVtyV.js 0.60 kB │ gzip: 0.34 kB +dist/assets/Popover-CAlF461p.js 0.61 kB │ gzip: 0.39 kB +dist/assets/Toast-fcx7lzJP.js 0.65 kB │ gzip: 0.41 kB +dist/assets/Check-B_2qDvF9.js 0.68 kB │ gzip: 0.38 kB +dist/assets/user-h3K1lIem.js 0.75 kB │ gzip: 0.39 kB +dist/assets/bell-Cnehlm9w.js 0.75 kB │ gzip: 0.40 kB +dist/assets/Collapse-DH0-dLlq.js 0.87 kB │ gzip: 0.52 kB +dist/assets/Avatar-BhvUqnLt.js 0.87 kB │ gzip: 0.60 kB +dist/assets/share-DDvO90JV.js 0.90 kB │ gzip: 0.41 kB +dist/assets/BrandMark-Brt4HwD6.js 0.98 kB │ gzip: 0.61 kB +dist/assets/index-BNVnzbwa.js 1.03 kB │ gzip: 0.58 kB +dist/assets/Row-LDXN40Zt.js 1.06 kB │ gzip: 0.49 kB +dist/assets/index-BhU3dYIQ.js 1.13 kB │ gzip: 0.58 kB +dist/assets/monitor-Dg5xjMxR.js 1.14 kB │ gzip: 0.47 kB +dist/assets/Camera-CE2SJRw4.js 1.22 kB │ gzip: 0.70 kB +dist/assets/index-17Eal28G.js 1.26 kB │ gzip: 0.48 kB +dist/assets/index-DULxjZmt.js 1.30 kB │ gzip: 0.69 kB +dist/assets/index-BItmLtVQ.js 1.33 kB │ gzip: 0.63 kB +dist/assets/star-Ccnmopt9.js 1.38 kB │ gzip: 0.54 kB +dist/assets/Fly-6m4FuaYB.js 1.40 kB │ gzip: 0.76 kB +dist/assets/index-DJwEv1B6.js 1.47 kB │ gzip: 0.78 kB +dist/assets/index-DahCuGPY.js 1.49 kB │ gzip: 0.70 kB +dist/assets/index-DyNMKAPE.js 1.57 kB │ gzip: 0.72 kB +dist/assets/createLucideIcon-CevK7Nqt.js 1.58 kB │ gzip: 0.66 kB +dist/assets/index-CBD-vhmv.js 1.62 kB │ gzip: 0.77 kB +dist/assets/settings-aymoTyAq.js 1.64 kB │ gzip: 0.60 kB +dist/assets/index-B7JFiZZa.js 1.82 kB │ gzip: 0.79 kB +dist/assets/index-t5-HV-fJ.js 1.85 kB │ gzip: 0.85 kB +dist/assets/index-BSmWQvsJ.js 1.85 kB │ gzip: 0.89 kB +dist/assets/index-pT3XKYUr.js 1.88 kB │ gzip: 0.91 kB +dist/assets/Field-CbupDgeD.js 1.91 kB │ gzip: 0.92 kB +dist/assets/Swap-BfCSa3-S.js 1.91 kB │ gzip: 0.92 kB +dist/assets/Follow-B212EkR6.js 2.14 kB │ gzip: 1.08 kB +dist/assets/index-BkVOqeck.js 2.38 kB │ gzip: 1.20 kB +dist/assets/index-Dp3tooaZ.js 2.42 kB │ gzip: 0.83 kB +dist/assets/Count-BKnLxNXk.js 2.43 kB │ gzip: 1.19 kB +dist/assets/index-BjTWbvYA.js 2.44 kB │ gzip: 0.93 kB +dist/assets/index-GmAy1Lag.js 2.59 kB │ gzip: 1.06 kB +dist/assets/index-XhiyJi1L.js 2.64 kB │ gzip: 1.16 kB +dist/assets/index-D46kave6.js 2.71 kB │ gzip: 1.08 kB +dist/assets/index-wYojaRhh.js 2.73 kB │ gzip: 1.12 kB +dist/assets/index-DukhqrQd.js 2.78 kB │ gzip: 1.30 kB +dist/assets/index-Ccu7ncj_.js 2.78 kB │ gzip: 1.31 kB +dist/assets/index-STPqlYZ-.js 3.08 kB │ gzip: 1.24 kB +dist/assets/index-JMQFwPnM.js 3.10 kB │ gzip: 1.29 kB +dist/assets/index-DbBpfK61.js 3.13 kB │ gzip: 1.26 kB +dist/assets/index-BHDZipZT.js 3.24 kB │ gzip: 1.45 kB +dist/assets/index-DmMHHpIW.js 3.52 kB │ gzip: 1.74 kB +dist/assets/Connector-BLcn0yKH.js 3.79 kB │ gzip: 1.72 kB +dist/assets/index-DQ1aggjS.js 4.06 kB │ gzip: 1.57 kB +dist/assets/index-qFTv_boN.js 4.08 kB │ gzip: 1.69 kB +dist/assets/chart-C1OCzOoE.js 4.35 kB │ gzip: 1.90 kB +dist/assets/index-DbDdEsYQ.js 4.42 kB │ gzip: 1.69 kB +dist/assets/index-DSZ-XoXb.js 4.55 kB │ gzip: 1.61 kB +dist/assets/index-uB5zMjp6.js 4.68 kB │ gzip: 1.82 kB +dist/assets/index-CaMLOwNA.js 4.71 kB │ gzip: 1.83 kB +dist/assets/index-BfpUTDPT.js 5.18 kB │ gzip: 2.31 kB +dist/assets/index-Bw0erUII.js 5.30 kB │ gzip: 2.05 kB +dist/assets/window-j2-AUrNc.js 5.40 kB │ gzip: 1.59 kB +dist/assets/index-q0VC-rZK.js 5.44 kB │ gzip: 1.78 kB +dist/assets/index-D1jkxcac.js 5.51 kB │ gzip: 2.33 kB +dist/assets/index-C29QqZEr.js 5.83 kB │ gzip: 2.25 kB +dist/assets/index-C0AxiUF2.js 5.93 kB │ gzip: 2.33 kB +dist/assets/index-DtnBkCud.js 6.16 kB │ gzip: 2.62 kB +dist/assets/index-DvJ4xvR6.js 6.23 kB │ gzip: 2.29 kB +dist/assets/index-DApFXPSI.js 6.74 kB │ gzip: 2.41 kB +dist/assets/phone-Ebq3SgOF.js 7.37 kB │ gzip: 2.81 kB +dist/assets/index-DzL5-cGK.js 7.57 kB │ gzip: 2.80 kB +dist/assets/index-CPGreSAx.js 7.79 kB │ gzip: 2.40 kB +dist/assets/index-C_PdLQB-.js 8.03 kB │ gzip: 3.08 kB +dist/assets/index-iCrr1hxc.js 8.07 kB │ gzip: 3.05 kB +dist/assets/index-B8Iv4zFm.js 8.17 kB │ gzip: 3.31 kB +dist/assets/Icon-Cno-jIB6.js 8.59 kB │ gzip: 3.05 kB +dist/assets/index-dKLDTUYt.js 8.65 kB │ gzip: 3.21 kB +dist/assets/index-NBtoNPoJ.js 8.66 kB │ gzip: 2.90 kB +dist/assets/index-Bw0kOyMt.js 8.68 kB │ gzip: 3.27 kB +dist/assets/index-BA2viUDK.js 8.82 kB │ gzip: 3.92 kB +dist/assets/index-BeVyuVqi.js 8.94 kB │ gzip: 2.99 kB +dist/assets/index-o9bFnczy.js 9.42 kB │ gzip: 3.21 kB +dist/assets/index-BbxfOB_q.js 9.74 kB │ gzip: 2.81 kB +dist/assets/index-CC0nBO__.js 10.63 kB │ gzip: 4.00 kB +dist/assets/index-DutvMX6V.js 11.33 kB │ gzip: 3.19 kB +dist/assets/index-C39hyzk6.js 11.54 kB │ gzip: 4.27 kB +dist/assets/index-BUBvd-i3.js 11.73 kB │ gzip: 3.28 kB +dist/assets/index-E1FFadmz.js 12.65 kB │ gzip: 4.44 kB +dist/assets/index-CD7pdwMG.js 14.04 kB │ gzip: 4.04 kB +dist/assets/index-t17EbUAR.js 14.11 kB │ gzip: 4.12 kB +dist/assets/index-zkEASSt3.js 14.16 kB │ gzip: 3.77 kB +dist/assets/index-E3vR2dk7.js 15.48 kB │ gzip: 3.81 kB +dist/assets/preview-9vlU2Ys7.js 15.85 kB │ gzip: 4.44 kB +dist/assets/index-D-tLFkDb.js 16.68 kB │ gzip: 6.29 kB +dist/assets/viewer-BQau-TCz.js 19.11 kB │ gzip: 5.98 kB +dist/assets/index-CWCb39Fv.js 29.53 kB │ gzip: 8.13 kB +dist/assets/contrasts-lYeVirZF.js 70.17 kB │ gzip: 19.77 kB +dist/assets/chart-AUUfhDck.js 126.98 kB │ gzip: 33.58 kB +dist/assets/client-DiRHWdFC.js 142.78 kB │ gzip: 45.68 kB +✓ built in 1.52s diff --git a/artifacts/validation/stageshow/local-2026-11-09/compact-final.log b/artifacts/validation/stageshow/local-2026-11-09/compact-final.log new file mode 100644 index 0000000..9128d44 --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/compact-final.log @@ -0,0 +1,4 @@ +still -> /home/maroun.guest/validation/outputs/representative-compact.png +coverage stage-1: 1 frames, 0.00s, largest gap 0.0ms (complete) +film: no-issues-detected; still capture only, motion was not judged +rehearsal passed (necessary, not sufficient: references/verify.md and the fresh eye in review.md still stand) diff --git a/artifacts/validation/stageshow/local-2026-11-09/deb-pins.txt b/artifacts/validation/stageshow/local-2026-11-09/deb-pins.txt new file mode 100644 index 0000000..a7d930b --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/deb-pins.txt @@ -0,0 +1,56 @@ +alsa-topology-conf=1.2.5.1-2 +libasound2-data=1.2.8-1 +libasound2=1.2.8-1+b1 +alsa-ucm-conf=1.2.8-1 +at-spi2-common=2.46.0-5 +libxau6=1:1.0.9-1 +libxdmcp6=1:1.1.2-3 +libxcb1=1.15-1 +libx11-data=2:1.8.4-2+deb12u2 +libx11-6=2:1.8.4-2+deb12u2 +libxext6=2:1.3.4-1+b1 +libxi6=2:1.8-1+b1 +libatspi2.0-0=2.46.0-5 +x11-common=1:7.7+23 +libxtst6=2:1.2.3-1.1 +dbus-user-session=1.14.10-1~deb12u1 +libdconf1=0.40.0-4 +dconf-service=0.40.0-4 +dconf-gsettings-backend=0.40.0-4 +gsettings-desktop-schemas=43.0-1 +at-spi2-core=2.46.0-5 +fonts-dejavu-core=2.37-6 +fonts-liberation=1:1.07.4-11 +fontconfig-config=2.14.1-4 +libfontconfig1=2.14.1-4 +fontconfig=2.14.1-4 +libatk1.0-0=2.46.0-5 +libatk-bridge2.0-0=2.46.0-5 +libavahi-common-data=0.8-10+deb12u1 +libavahi-common3=0.8-10+deb12u1 +libavahi-client3=0.8-10+deb12u1 +libpixman-1-0=0.42.2-1 +libxcb-render0=1.15-1 +libxcb-shm0=1.15-1 +libxrender1=1:0.9.10-1.1 +libcairo2=1.16.0-7 +libcups2=2.4.2-3+deb12u9 +libdatrie1=0.2.13-2+b1 +libdrm-common=2.4.114-1 +libdrm2=2.4.114-1+b1 +libfribidi0=1.0.8-2.1 +libwayland-server0=1.21.0-1 +libgbm1=22.3.6-1+deb12u2 +libgraphite2-3=1.3.14-1+deb12u1 +libharfbuzz0b=6.0.0+dfsg-3 +libnspr4=2:4.35-1 +libnss3=2:3.87.1-1+deb12u4 +libthai-data=0.1.29-1 +libthai0=0.1.29-1 +libpango-1.0-0=1.50.12+ds-1 +libxcomposite1=1:0.4.5-1 +libxdamage1=1:1.1.6-1 +libxfixes3=1:6.0.0-2 +xkb-data=2.35.1-1 +libxkbcommon0=1.5.0-1 +libxrandr2=2:1.5.2-2+b1 diff --git a/artifacts/validation/stageshow/local-2026-11-09/deb-sha256.txt b/artifacts/validation/stageshow/local-2026-11-09/deb-sha256.txt new file mode 100644 index 0000000..327a6cf --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/deb-sha256.txt @@ -0,0 +1,56 @@ +1e4503ae66ad9cbe2a024ec403cb453af07ff1d07a62e795aab24539a307ad8a alsa-topology-conf_1.2.5.1-2_all.deb +abc7ac211bde60fb90fae9f8dc3f207818d6faadb4b3f76037785235f9284e67 alsa-ucm-conf_1.2.8-1_all.deb +441bc1c6cefdc01f519310abf55823deb868898480dee09a05aa44e8c83cabc2 at-spi2-common_2.46.0-5_all.deb +b148eb6f97380148b3fd6d582d528ca80a135fae0bdab3348974f999d60e8b0c at-spi2-core_2.46.0-5_arm64.deb +98daefc769d77230c07c50bd9c3b3c593c91af55e03c0116d3c83d2083b66b3f dbus-user-session_1.14.10-1~deb12u1_arm64.deb +2a7af3c4aed1421a0ce5c82e8ec16d40fffbf6cc313dce1ed261a499aa68ccdf dconf-gsettings-backend_0.40.0-4_arm64.deb +48330ba150692aa402877587d85c67ffc92c34880826bfe746fad0cc60864376 dconf-service_0.40.0-4_arm64.deb +297b5a63f9214ffebe08892cdf2effdaf2b408e719811d5e8e98870f710cd35c fontconfig-config_2.14.1-4_arm64.deb +5fe5ce908c360fb5e9376ce26484477948f8182c982fee495b8ab024a0f22c6f fontconfig_2.14.1-4_arm64.deb +8892669e51aab4dc56682c8e39d8ddb7d70fad83c369344e1e240bf3ca22bb76 fonts-dejavu-core_2.37-6_all.deb +efd381517f958b01969343634ffcbdd60056be7779af84c6f53a005090430204 fonts-liberation_1%3a1.07.4-11_all.deb +15cc7142c3ddea0551b834c53c4d3b5cd8f5485e695100966877f2be50def7af gsettings-desktop-schemas_43.0-1_all.deb +fe0780d2d3674b2977e0acb0d48b448ad72ba1642564b7dc537f55e839984c2d libasound2-data_1.2.8-1_all.deb +9fa889400fcee4b92c8f4a2fafbb7f2cd33444d9ec1665a71002ab67c06114bb libasound2_1.2.8-1+b1_arm64.deb +3f2229723e1f8337282f74c44f139eda2aab5829fc0bca9adb2976f3a8d83b44 libatk-bridge2.0-0_2.46.0-5_arm64.deb +c7508adb33e42c35b516e8456d801d5d246e36f1ebb2f1ebb8d2ce7a70ce1d2b libatk1.0-0_2.46.0-5_arm64.deb +5408f7d48e84f3b140fb4496215078cb9da997937e3702086476690374d60311 libatspi2.0-0_2.46.0-5_arm64.deb +1bd0aa97b536ae39a90a44988b4fbb903352aa7c91d7cd914727b82f39ff0d81 libavahi-client3_0.8-10+deb12u1_arm64.deb +9fb985c54d65586b1e13d734852c9cc26d91f2ea4922b90cb6d684a52a46f449 libavahi-common-data_0.8-10+deb12u1_arm64.deb +f55666f45c6ccf6853fd444524ff2c255292cbb3c5b49d8aa0afffa3510a9d9f libavahi-common3_0.8-10+deb12u1_arm64.deb +48b5c5ae1972ea0757c6285463d611d0ca32c9c808957961e5c7924126f30289 libcairo2_1.16.0-7_arm64.deb +41c9220d57d9eb3b5245f17038c830053f12176f6eef611c6f6941fcbf6d507f libcups2_2.4.2-3+deb12u9_arm64.deb +d7c52aa971278e7f298b7e74f8ed50ad25579f9b344212fd4a91744cffa58cc9 libdatrie1_0.2.13-2+b1_arm64.deb +8b657994e74328804b2f7d65ec11a293be962e9b5f47428912190d46199101fd libdconf1_0.40.0-4_arm64.deb +32f9664138b38b224383c6986457d5ad2ec8efd559b1a0ce7749405f7a451aad libdrm-common_2.4.114-1_all.deb +f5f15a46d02cf5d9fa52d4f1c54b8cf80c398711ad771a9938b12399b8d8090c libdrm2_2.4.114-1+b1_arm64.deb +4836d9deca824883f0de33d4f8f3718ba776c6e7c80cd7c418b5a0f86c009b9e libfontconfig1_2.14.1-4_arm64.deb +8ab3adcf64b318252d37669468fecb8e0478e1cf5f096d065611ac7dda68ccf4 libfribidi0_1.0.8-2.1_arm64.deb +f5c8fdddbf365259d74af270fb10f30d7fddb3fbe7b2ff62f0fdd556f8db0dc8 libgbm1_22.3.6-1+deb12u2_arm64.deb +fca82a3f01cb2cfe607efb6f21f489081716ddcf8a71e2f588d3d67ad39107a2 libgraphite2-3_1.3.14-1+deb12u1_arm64.deb +64b1d4aa672dc4eda5e11b9ff8061122060fc7aba6ad16908c89a269ffa174ee libharfbuzz0b_6.0.0+dfsg-3_arm64.deb +3aa6bc5a1a3f83627f735b9712eed74ed2c345ae9148e9d876887a97982ae28d libnspr4_2%3a4.35-1_arm64.deb +aaa1b291b6330590079a0eb1404650c7c4f6c788f9213ab6911149dc22b2b6d0 libnss3_2%3a3.87.1-1+deb12u4_arm64.deb +88afa1481f9e520a3068e85dad776ed09a3751c7638a877333af6cec927db3ee libpango-1.0-0_1.50.12+ds-1_arm64.deb +a18db1a3bdbad168c7168b528bbb07b47316ff9fe977206a780dcc21b376e501 libpixman-1-0_0.42.2-1_arm64.deb +eed65a75269411e47d7b393d82bc30471da5c499e9f311abbfd8c54ca1a42d9e libthai-data_0.1.29-1_all.deb +1374f50f4e96397f2830f3fdf09e95a5fe8e4d584fdc70dd187eec5f8832d08c libthai0_0.1.29-1_arm64.deb +4d99e7e0503fdaa999e67d47d8612c0465e775eafa47819573da50bdb09064f2 libwayland-server0_1.21.0-1_arm64.deb +d1d533e983582282a9ea82c87ac5ce715a9b67bd6d1acbd2439a11c63c36549b libx11-6_2%3a1.8.4-2+deb12u2_arm64.deb +987a848aeb1c358e4186368871b0526f10bb14c6b53214ab3bf8b69abb830191 libx11-data_2%3a1.8.4-2+deb12u2_all.deb +36c2bf400641a80521093771dc2562c903df4065f9eb03add50d90564337ea6c libxau6_1%3a1.0.9-1_arm64.deb +8d431caeae9dd0f7490caef1d66de0b7a7d3817afe021b6d55bedbba7b19bf43 libxcb-render0_1.15-1_arm64.deb +825931950d42f51cd795cf2e5b9399d840225491e95ec530e0c5a9145c4ba5a0 libxcb-shm0_1.15-1_arm64.deb +041d9a68415c3ccf3ce8f4f8b88e4bbfb5dc1f0d97013c6ef8423e620ea50f84 libxcb1_1.15-1_arm64.deb +cfe39326fdb822e9d060ed5eb3f95b14459dd6b73793c5290000f9b27f8bad37 libxcomposite1_1%3a0.4.5-1_arm64.deb +489d20cf78c8ee4428f3e26c5b3edcd87a71b5beb6bed992c45f47c6d01a1c92 libxdamage1_1%3a1.1.6-1_arm64.deb +e92569ac33247261aa09adfadc34ced3994ac301cf8b58de415a2d5dbf15ccfc libxdmcp6_1%3a1.1.2-3_arm64.deb +5e9c0ad606eb4674c645fe8e0e64330c47d2729f7a59ed569848610efd5d5b62 libxext6_2%3a1.3.4-1+b1_arm64.deb +d47bda8fed01b19b41d503e2df05d9166c58e30e2376f2f8784ceb7a834befe6 libxfixes3_1%3a6.0.0-2_arm64.deb +b26383c9929d8bfba051eee22301e064d17039ed022bbf31990feb0d7a03b36c libxi6_2%3a1.8-1+b1_arm64.deb +ec518d8a19796a399ab95e7bc4dfbb6bd2ed8e151f77b222df26208db412d852 libxkbcommon0_1.5.0-1_arm64.deb +f0bc7f79fee182caae176652fdb1bf349d13b9591b10ad4dc1c896521da8e49f libxrandr2_2%3a1.5.2-2+b1_arm64.deb +f260193deb4eaf0b410a1c61e1f84804366ee3372b8bad9f38005f7dbcd89aae libxrender1_1%3a0.9.10-1.1_arm64.deb +ef2a1b9ac3f2620d96e17744e41c4eefb7f491eee3bcc5bc1e592180b2d94128 libxtst6_2%3a1.2.3-1.1_arm64.deb +fc97c2f4495eb33a77501c7960928c0d2001e5c4b2aa438f1713e2082c23bacd x11-common_1%3a7.7+23_all.deb +28a79c61b785f403da93af58c39aed13c022032935e3e54362c6707169cfe982 xkb-data_2.35.1-1_all.deb diff --git a/artifacts/validation/stageshow/local-2026-11-09/film-final.log b/artifacts/validation/stageshow/local-2026-11-09/film-final.log new file mode 100644 index 0000000..e53821e --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/film-final.log @@ -0,0 +1,4 @@ +8 frames every 1000ms -> /home/maroun.guest/validation/outputs/representative-loop-final.png +coverage stage-1: 468 frames, 7.78s, largest gap 23.4ms (complete) +film: no-issues-detected; watch the motion and inspect every image before approval +rehearsal passed (necessary, not sufficient: references/verify.md and the fresh eye in review.md still stand) diff --git a/artifacts/validation/stageshow/local-2026-11-09/film-run-representative.log b/artifacts/validation/stageshow/local-2026-11-09/film-run-representative.log new file mode 100644 index 0000000..ffc4a67 --- /dev/null +++ b/artifacts/validation/stageshow/local-2026-11-09/film-run-representative.log @@ -0,0 +1,8 @@ +{"case": "representative-still", "exitCode": 0, "expectedFailure": false} +{"case": "representative-compact", "exitCode": 0, "expectedFailure": false} +{"case": "representative-loop", "exitCode": 2, "expectedFailure": false} +{"case": "failure", "exitCode": 1, "expectedFailure": true} +Traceback (most recent call last): + File "/home/maroun.guest/validation/runtime/../run-films.py", line 39, inOne local draft, ready to share.
yFJB7 z?TW={!g3QxbSK7>XTu?u?D4LQO?GadIzAE8puF4O+0nRT!5^|2zE*`&ktW`x{IzpD zN{di}AVjRcHfl~Chmx$SI?hhQsH%`4L{o^5;*T9Uf8Ww`dD*@O%KqWNo7BIGweRSd9LG(_7)?K96( zmbG(?YahF;it_X4Ro&KTA%8w&F5r|ywc&l~ta6!aA&k~ HFm{pbQhDuS_LsorUP&4kGil)V3z`E6{D8-(FnU*VZ(E zZK}^5_xPN@y)93^4ZT{xz1W{D5hx5(R#gC{ZBKf~{y9y;_+P(_g+ mN4pAZ~d^`qu$tgQlBpSUt12wP6LGW9}D#3WLQ`bG*VL1IIK$*3&OmX7pK&9 zm=~C|Xm!09FxM3gW|N~e>%UU)ay^t_y31s{npP7#x7W*8Boaw}Uryq9Nj!GH;oM|) z5n2$BQ7q$Xznm9^hID=&<=?Q4A)P$EA?g0^E67gc*18q+)IsnyE(8}J>#APaS9(0E zBW5s)SyiQMk-fu~%NTZ(3U`_( d`*mX+7y|%4Wc ktuA zZy$)F5ogog>xhVm?d@#|^1oLn)2C@aC|#3PM3z<5K&*J%w#t%LkNOUp8n3pt_R0I3 zIs=V+k+U#48WQxQX${l$oW=Kroe~+5t4LH$9YGO=YvHg`+t!gfv?Lo>y@=C;-(_9` zSu1SEH%5M5&%^8twKX}f+f2!g8sqxN{QG%e&*v;AnpF+DH``&xqIe)2buqL^SbRq0 z@G$nrZJX=Tz#{pPkg)A=zjx%shi0o21uqQKWIHM?^s$vsPQc7p&)q$hb%X&URKyEz zN#*N7n^i!uYCw+(+7e*^ljK-S-Np^)WhS+Ws6wZS@$bggizq{pmg-WKvW9O<92yMa zwex3*zas{`P%+nqY&&yDXx7_M(`>(f#f>&(!(~1cq#`Zs$91NTmtBh!sd4zsJ9pc< z!q|&W_OUOx>K5rp1V_4}s1^tp{aX>bjvk !1-{FVB zuj``n(9qCGXyCx7oH-xX@lU9-H=!u|h712$i6K$r5;Nm2mw+ouIj!Ldt{*{Y&Xr|y zmAJ<639A=Bj@ilYn8q~5G(bGQrk nUnBWc2RN(n=1(6}j`3EI9wN zE# rre4Ai9i4>n`nU$6l zcQ_QOX(2F@EN1LB{t`bkXstV$wm~sYUM7{p+4bd-!By_!;vz0S{;vJoN((y~ng4xx zMiOgdbXL;Z>BP_w95j>_FKZ1c{^lWA@KV(ZTB#l?R8tcZl`7qg`FE1-T%4S9-dSM| zv*f)r%1Ifz&JTMGoo?OeIgSeGx?g8J6D5%f358`PNEsL+Ary5b`1berwHmCd=Z2+a zchPRYN yTZAd+GNa zasF+nn5F*8()xEIcw7V-=!jeN93qyY)sv>E+ eGBrK9lD*P2KH_-4?Xw2E>bLi*U! $(@$&4Ax z+2U%88A=70DTxcQAO>;09Wm6N-LW*wKjlM3^q+|nArupw-*a%OU5_AcXrDm9#lqv+ z;}zh34&tVrp{CHW#`Va*WpyGR3R-+$&>bQowRq8J 6O=Zgasb>)TP2c6Rv+gN 2sM^ zXf-;XZ@P2) -X838oS7Xz$;7%F8fy>mwmz^7Rg0`D-i#9YRgT* H=`i)3R?y~qcOE{bye5Bp_2u8SX z@Negcz7g2|YS@NNsQG=QD>Q;WUvoC0;Q&?pX8(J>1a)dc-B2q9FYn$+q)&k{6@kuH zwglVXYWri#!x)`maj#a3$53wCT yyIBqL`EZaOjkEHf!EpelY1y zkLLq_={zbH#!GlVRONpCe*^nJ>xZ!ARxiEt3g#&WX*7Nhpy zTn`d&xy4K&HIe3gwUIdaw}aUdaRMg{jVEwtNRi!Ee^tl*!FrcJs@f*s<5|xTt7Ht~ zJ{sjpmd~?>Y;ss&^BYBmPul`7j}GT~#wBk5cEholo}X^kxT|&B-L+vhgT=zWpZux7 zV;)WCcKBVYk}iZM!Q^5zoi8aIj6^|R5|7WB ^^AL_3oK5~I*gYVt(X56ks~g)Bxc0>SJhuUK7U%D z!=yv{I&GZ%w_ b$UAIScKP4i?J{ik zZG*||&n#?kl3I1 K<`O_65siz?HV)H<$KR`AL3nk?n%;igKf@uYFhJKXVVf9CC2ysk<^0iiEimcux= zNYp5obT-KhD$Rd!0V1;8I~dT&6k-ji7i-=Rk%J0`vb`%DR`W66dJ!rTRrSbKwRyvu z4Ew@xSWVO24@yM1KqesMcW1MhHXcvsHdgWE%i5N2(Jb-F{v#qWJ*^fQqNwoqcNvz8 z|EL4^au%qd9NMiOujcf$F=8DUd1#N9$VD=n)z*Ao__0L2xzs+;p=@lUoZGGy%4K {(aNE{GI#wo@e)cb|Ji)$7X{O^r83jUh&_TFU`rFlunR;WY%qG zQ*kd?y48{{K%S;=CnU5XX3$%fwKeqqajHr** K?6s5Uta=jJ!0+d9FrR6}4ZHKh@Gr!b_poOatuA)S={;qTieb;e#vSd@CpxhMz; zEWZHn!D6HB6bF!4yS%mamm0oJAuF()cNJr__>~D;PEpAk%Yj3t;7Cuvp%%oR!-;Kf zvG1hozaeg#Kb3f^RsS{6G3PML`<@08942A35d3Lr^6j^G DSQajm A|IcZF>hz$(k xEIld}zc`~HTMUs*aV<~dBQ*%GXx#91fyJUP_vk3y zSa1H~fnNc++Y0NFhL_E5AWV7V=iGjM9;?3)D47kCDGI=?@;t-3S~Cm!!e2Be~z krn(6IT7!-% zTKCb 2g_^hrL$Kbn_OwL)u!x#%uFL`tds#mHCFtsZkYgd2SjZzsrRP{AYe~?g(R!I| zY~vM-b}`~{=sK5lHKDi^QipGDHB=Hdr&LyHAu!kZ3w~0~7`br-pL^1%9Ny0nEp}X$ zBIYb#jhB AM}O`N_DE>B1;+Q^!A@Rqu`ukn9hJ-HNz zyqej(qIddkWQKIbo` rH^~uM4 F?}JgK=`@aYmg*5Plo;4|0t zyivh@0l_aRZjz@C(+zctpP?>=*PoSrM}8QaiB;}g5&Uj-aU6DB3U;#>{*g)hyShwe z`jCofj#cd-k#vJ_gi$n&Lwac0ddHQlxtZqoH>!YpMR<=i&c^PIkO_rh&sNs;{AamQ z&!h{im0V+&q`wyhMMYOuGw3tP@!txLPDEu)F{Aucf0!#Iyg}weVdXR##&AS6=z-R{ zLyE}SoGnp`MK}IrdMe>^+IreCl0z27)onlflou_)^Ecby>TQ 8+2jNavaS z9u4!Km6clfVigsWe--0Oc0OK=uoMp2o34fVV7i2}pz8lA*9a!^=HiW2Ie=urND0V) zljhL(X(XRO!@$4p{&HU!aeYQkkpFU0n8C~hLC9W5M52G*VOo;P>)#lsp7$L^bK>eI zqfX0cmf%ZSRR?LjIFT0{R-lB#hsF>-ht}Qk47&IJwm11t8mcrUN<~PGCcC34(3UGL z_1M<2p7zxLLX2nYBKq$E#^7Ge5q^7(l5^{={8-Vrx)~3_;;h*paL7hppsj$eUHP}F z@k^*!d>+ZsmtGqaQxnt2n_X@qpY)5TxZ{)*t+;mVfj2?v*ogTLJpvvUbbDRnk_|D^ zHi}twWbPF&cavjj9A?%}=rX0=zZ6y}WxBujclfq5s`fsU H}?ma2ZJe+Uxr|FZ4$JGG^dTK1cz}*c=&-4Lf z?N5NyWXba>bha3@8XV<*?<_;Ufek6J2FqWjTG8~W^xbS({^y695yp7CZ^pON(oC4l zg|MH-LxVpSv$NwVXs|4lC{am q5WkNHjt!}H9=G@ zgk$l$e7R!9 D7~O+!47(;qx_1aFTRTiZn{x25pKln0#Zhltzu+Qi6v` zaC+$wf7bZsT6{{%Di{q+grPLaPaO40B$UG8fSH~NH4>9HjyeTQT>e-RdY}8SuWkxD z{n*Mh9_@(xU>p`prgXn#b+EZ;`n=@F^FO&6ET^iBQoAdfQJQ$Q)J7F>Of!Bara#$4 zMh=vdjKnN|ms0d(7*p4jTTnDg@bNf7#r_*h PD*p7 z)g{^0xPjU1oJQI~LaUAqZ61?x;6X~Q bFY!{MDYj#+PUxRBxCo ziL`+w87RmHRKmp`?v0-iTg_znk&}>{i|OBqIlY*ucqsEMcUUx+96Meni>KNcKX+ zT(|Gins3FmN?##7l|ApN7wd_&mFhh`hiQY1J{0K;Oy3r5r#SF0QEHcsN;Gnzet#t6=YU+rLk+--etd z8>{JY7 kOuMf+`jo^yX-klq2lyYNC%;c z!G@pH9QUJrsnc$2owv5&+w(??aM+ QOg=2aMjiXYVi;~K1tr7K%X>ZjO;N@qHMGMO1A){DxBrv>W z#pr1yU37Ye{bL*E>=~z& d?o3&fD4w;tC=-)%5)d68V7|0Wue4GJi}rOj2fzcP1D(BIk40 zHvL6^4EZ}2YuzOxSOg|fT9?!eK2oy|%niF7vtW!jp%~>A>}Wq$FW<#Iwqh0#_q{7+ zZrxS--N*;n$fn!xSGzg^ls}K-A7PY#h7>Wchw&Xajfb6Z%@O8M@a8tqt4#O^7Ct>! zZtLXMDn%DAQXSRABp!R2m^-u_ot@m)@t0+g _x! zWs|f5 P8U4(GM-M?LZ^b`B7kW!5yN9SD$Dvty(4u^Q-S5^=rWZF=1l;Z zLDfK+&L9k6&ACpRhz#WnCX6lU(oV9ZBxR#pba| I_8NU_msCf6c7%;0Lj`t?QZ z&VPFh+_V-1@$04`WlUSySBO&zV2K=tgL1
jsh#x2?s`qCFl~ruP|q3GxXloN^|IjHOn0 z3JFi|kK<_(X@3 bCsU%DqeYc=01rF+=5oK9RO9 zml`vgQ!{k99a;#c31cwLY`V>YYh9mO+x&-A6Nk+ZyH)hD(H%t&lu-M3-T&eO%Bd5H z I!82&o$RUB7@W9MGK;i7?lvQ5L2~4W$!G6M&dsg9VDiRIiB(TJS4o^ncW0 zMO_g`U&pCph*Q)|A>G^(aFq|5Q#L!FeEQ(%NDD5oblo{fA(9TMLQDD^4J&CrJ7I zf3*hupGEBd#hk#1Iwirjsv-ZX L`eL#nE zGwbio!<|hMpES_X;b?y)5-6}3(_ ~OIV-x8X2Fb@kQJY7Hcgs-QCR!7 z)KE}Rfci~Av@L|OTkck#x|c?@r0SEz5I6U7JY6&$g#~)Ua3$O#fq{bfNGaT+BgLSY zy?u?!=AjBk0fJ;(oSh&vqVQu3zrZV=juyE83u==27ALyZ0?Bwv0K-8+*#iKyq9?iH z?guAoppSq3UD}r(^%xJy<^(i9fQYF)-QDj2_ZS`)|0I?<)Sx0VVAjR>6%&HfWXYAd z`kdS6`LTAKC;a98OCGnwZj+72m$3U&`2=t}xgb%_mwp=bsHo{&9XGB?^)R`Ieyjp4 z<4_z$@r5-^ll&J8I*xZ5iIILWNr_dP#@WUCury6W+~0w?v~#(lXl|$X<+nkj_y}HO zVuTu@RFtuzCJR`LnwlCQ#SVy_GvI*9M5p})2XP=x6MCu*s6E3!*`NI#CiolWvIGD@ z^vY}k+VpmquF7h$u0*v$Gijzk{1&@QSc7|N>nBi6d-2BJ1qyAJj)_T0NjW=nkW@f@ zi_2vbp&Of>hG+PrI?b{~`DVJF{#wV7x>ymd!uXfHX2pWoO2IgZ&LCQxxr|2%K6@<6 z8;?hCLC7!3wc8x5tms9IONH*Jb} v+hZyA2A<4da^erBVLa@C47xspwW3_WwX|yQ_8C-ZB+Ci)Fc|` zhV$u@K(nCznn=(NN7COMWek(5DIzVyv+nmy ygU28kZ%}Uk7_(l+g$*o1rT=@n+4j&RFImU*HyfnK#HJ`0E}Hv z5TcyG-8P^!->&R9j;HduT@bh|S34c5!vE!QIv|D+Sp^ct2vaBinEoE1o0FOJqByc| zie1w z4Pl=7HTBaJ=X0Ti!+LGP9;(k~$OBk|E^m02O_;M!~ zhmv@(P`jt+^Awn5yOF``B4#oFvg|Msdk4NsgaA~-@qG0b43_p}!#AzVph27Foup87 zDzu}z8QIpu%2tVtQ3N~=tG+NyZLagnzf=AQd|S>RTGp~fV@VzwAn z&1=6PSyMJrg#7NcfZhdrICbfFrB16+6nD^)A?&Ab^FKEtIahCwY9|I6NHuFsW$dLP zp5K!e7;j~`tZoRhIR2GyDCqyy>5tJo`f$=(<@55aO|am)9V^}hSCr{ai~NiKX8B(q zmfl%CVA+?^zgne>A^`b-0&hFg2PGN>a`4RpnYx?cP*^UuvM;(n;8cFtr=T^cRq0X( zbCKKGkV4>ZIy~K9Vf;BVcw-{kGYJ=_NggmWA@E?OKxW6?v IQupWsL<(CHfHSm%N1<&sT2c##A-E^*s_^VX8)KnTmH&DT+gKbbG-=A zvG<2nC5R}A M^zaC6%Qr+spJg$rTN6LKzxG7JU2_xueaPrT #}2vuw@>QL9I}J2}a+pk>koGRX4@Og1x$iq)o{;|qR3uPpLrIgB?x^!G zvy#LH2zcE`5b!ntavq#Wa%Xe~DyLpud&5t#D5tCK9$TM714gdF(*?@`U_2;qq|mh48>tt*w-I< (^0iSW i(ZEq1KLu8NqmTP$yNI~^xy6n9+z$Qym>=Gh1T+; zwZ{#nC=H#mFCEPZE&2Ud?pz6)&_gsl;~hMV{nmQ?8~>IwNsA?LoPh|2BljkrO0FSY z_t%njYX!)5A}sEg=AI0}rlUW;!;$S0=;S+h=1{H60jj32q$smN|C#h?r`)FF(4kvW zpmXk2x?2m@zuBV1Vk(3RV_`}od_tHj^aC;{xE~O-p*=lLId1{w-DBSW?x!*Gl<4~* z*3@1OyqO}oWYZ-;?XB29;s>L^u|z);xUPR+4hCV$8fa+HTf5nTWMUC0(bW87g;eT1 zi7WAOeRQ>1w1a?`)W_{Nf+bCPU_!NLy!-sj+=|S9iIRvw9)D!_JAXXT*1~unNL9q# z2XAM+$@e^8xk8gae?UwM%SiN@1ObwGUlDV?LvoKf5iU-j3U6L-nHx?fg9r15X@T-3 zH-WUL*QjCa%D!>ollC1`%m@2b5Kv2{@HLz5DK41!H%~g;SR=<)WU?v67K}!##IkZX z6~NB_8JeWjKpN8|iBo7CgxXvHRVI=%I>qsA5&Nn@xeqzzTs&bn;flpIn19+clJj7- zo%hc%n9~$iv+=5Mp91{kYQChrgwBdb27EY=?&~-48HqA{8mdWiW^P`PILiUN7)1Rv zf2m``L&5~fkU^{w-de$>AFlz?%~gJxL*N#KyLG53xCmZZophoU@!;v1nY&)HIGm{; z!bsfEE)udpPWzOr$Yh5c5!a!G%6Ic5QaU6DWCLg3^$>}(@^|DkhFzjC3t6$T=RiY< z!>@-|q#~>t3mjahbjj(dAC#3P?@`o<^@)TgBaDhuG2A*3k%Ife|0XgSySMA#+Q!LH zI O%w!O5zf}Ta{2Xy+a-DNeMi(n;%1b#69ezKda zrgCARf}qASc;~+0pfR%^(#mJ%IxBWd-Q@4M;=;Q~=?e5g<%Wmgd@oZe6AMT;xkC8HQS$CO!)V7`AYwTZa9K(S0 zqb-MLI@yZbIzj@l27_W>1k21JRMA+6Ib^Yz#`ld?Qu7#!kTJW^S2hnK22pi!bqZ88 zL_~QEMHS}zL3z$LZO^_MhtmKAv<*U&V=-$QI7A`=ZP;>DszkWv0%N($%qne+WTqP> zRm#|~@X)XrMG8^~W(mBiB^(sw6yu_19oT(6l$+80>Dw;RYNh_~|7;R9qtw;m +j%LT8tl?JYO zkopJ&pF8CQuN-wh%6*~AO^VMj!rFoKQFTtr<6PJ*2C5zL5S%@i)4^<^OxkcaLDEd9 zCAYnzZ9=@n1wb)GUY81_ZX1DE^Zrjey&$@VucFkl*^$v2*8mlpB^9of9*SOaB$AX* zR-rN+B0W%~ubi3G(oIU*iMi1W$b@U2{~{w$yn#`>#c{v;8XbU;%NaSF)iw>&hZr_a z$nSgqY9|D?ghpRP*$~L2C888Rr!X6db$UOQKZa`Ax8ibIf5H6jgJUZc8 zQ*POy`u>2+o+eo=Q)9w_VsE+nqh-@}-Ve^YygHM16G~(X$VOT=?G&soUb;lg@{CIA zFSk8%&Mzih7;xf>Gm2yeB7LPmkbwGt0E4=S*;!#eoge#!T=ZQDMcecJA=gN?(ZH(r z!!dC8hzJg{cK-uXX~)Gd9kWaZ?B=%ps@IJUV-ZMo(7am_ti9b*|D3V}yjDF<`4!!O z!y WUPFO5k~ra)%kpHc|qwvcz<&$w;LMv zcy{$SFPhQ@q>#dH08NPfVtt 1{lB;Xnj;cXLTp1a`;q{S zyOGMoC*g8xDM$eBAi@;FjKZFQNaqURIrUnT-PQ@PiHz9A9L`nkDY=J;GL%1J=9^Fl zu&F8PA_L$HTpH#*0M#3_Tjcu*%cQbxU`TBM^7rX+M!RZ)*Rc1UojuhJ{~f4>8XrQ* z6sl%g7mF2oaM>-(b!r=&D;A4Qx$vzfv%5fSl%=c!lhF*YCs3XMis YsIh6FX z8vIlw6nvNNb-e%}4P;GMq7+k2If@_QPjRu&OuB794xn-=79-%%cE7(RjG Yoi zd_ww_sAFUm0D#v4ARoefj#9LY5+MKO+xdtfY8*T?v%FIb+++>P%@9@ABM=_Ze?z{- zC%(BpD64wz`~IT}$T2B3UpOk;uQeT`9@lJp5JT`GC#@P7ikN+A$6s@vbW{Wmt5{H~ z647RoRBbcD&u&|?coCtNzm0XSS+?D9M_sX7o!knVEcqE4t1%?^Uw5MMVjAoYbnQ2` zV{j41(+-e=Ln6 +u54zmztQsTFBBqxrAr^P+f$ zF;ZEOe_ZGkrfbUPd`XcWq){qtyPTF*r)EP7Bt{723bI=N^_|6S|86gf2t*_GZvo9f z;eB_oDH@Kteyp+d&qGcavh(E*Zh~wNU>qZ4#qYzKQHDA7Hawp9`$gt(U#Ea#=S=7@ z$}Aj&fO@KxutiRO5$#5Sm%-yi>U8d4dU^UP;Q}l!1FEg5T+w&1$w5Wp4YBGY=bp<% z-SX_8i~88~9LCt8V?K9oQuZODV>3}BPW9CZ#h=`sZ=E*p5q`y-wLdEyq?!vH+4Cli zSF8oKG44w;sFnO*-gBxJ&MQh2TUdCk3pmK>df%DQKZjw`%?mpP(E5#{Q6fNwe24!7 zL{m85F$$Yywgau%u-+1~o=2CHwtwTmkWw4$gY!aAsX(i^{FTn u^6B4@ z_srw3IpCXmd{}$g4f=<%Z>%R8`W}QRUj%`;?;KwE^aINh;#F+e!y#z^rk}k^XOJQ+ z3;pFL=G?XVFXz!dDE-5Fi}IVXQ{6R`Jq(S@B10!VFc0PCy$ANasAS?%XWQY*ig8cB z*eq9%cGPr77c=8iQ_ QpQl=f}_QiFg;+5SC?sg#(~01E4Ta4E!QSj*+ng3{$Q z8)|rj0S+odDH6*&=?f;Z{3bRULwc$Z Q`D~vjc{ua|gxmQ (QtePq2duinW(fRGMIJtr`)d;AvjHNXUN$pR(?2CjZ`YiG?8I(0{}UnpBQ~qf zF7qiO&xW|dwU)APVpyR(TovFf5@}WB*A()^Qk*jAe;1+UaRQ)#gsESEKrOj{`bP&{ z00W-DdEVeX7GvE7)-il=&yJZQoo<11n&CMlElUsWMwnt3U_8l=O!hTOXKuI{T*Pav zeyD^n6me@}MXO+#ynOzj{W^*o@~36g!`^}LwxROhsI@M=0euSYhD`}6@l){r+pdz} z6(Qj|kk-7F5jz|Ou9{5tc %zoTIHfBkV6?TRSjUJT&s4!wME4rBAD5 z#`&C^^0R64?-eI+Red3ZRaI5Lel2Ya&&+qQw+9^MFs}mOa78`?{2BARY5SX(HO|QR zxY)*g^dRN|)5 nl1XN<^JCle+dqTBRD%kP!Me!YiY^JuK-yWqlRDiqiJW6 oiZuziRm4u?1~M-%*{;*JI(z_h-5 zJ^pK_$&}jXRfcY{%s4PQ7p^T%hu1(a2idmtvF0mryr-1eKR{(Uu6f-!{hj>&zQi{l zG-aVdF`!6`uqnc4&^cs+%mfNix5wM_+}1a5k;;KfF8~gmeqfx?=ka__&xfD1amm%N zkRy@KxE>Hx$b4rIEnvXX4SlU;PoSF&^_79XOiLOzPvQm~S}(|6e!e-`z$iRAI;!32 z-F~|si4;uW{3Bp=WTeMLDyuq{2M5-KyEbuBXe1>~`Xjn;m7$7^1Sw}6joq+_E{ndH z+E6o0T7t|rC>7C% +zOf|vpmlMWgl`2ZyWxB0n{`;pf;Ax;2F#0 zZv~|}psP|iZ3y*zZa0E~a;hJqR;lea!q7;s{xciY@xXm{2XcOlq)-(2^ 5~Ufwq=E-IzUINbKz+ vejA zM7eoTxPEHQb@A!98H2gzBe*SE^#y?Qi@tpm71NPcGKpi93 z%0SThz&d;(Y5;NzXh^e#@*N~GdiDK;y_%HrQeUYh5#Zez83*X{LtrZada+9nr=3I= zB4l{%UmgGE1m~8&+XL^R(CYlHjfu7ckluhs*0$@zRR8K(+oW<-{&y2tN!`IDtl13^ z9Ep3Sv02zJ+YMAl&I{fwJ3wRext;-jdLR-{tw=V*vZ~#Avo{n=#}SqJOA3o<+ZC|$ zNRtEhr6UDjlu+J_v1?Q)YAZt-L$rkNb=OO%B{S-rb%4PAD>JtWdkk!ojH+7Gv6gke z_b7dUf4l+=URTMMZ*?cA?QP~N38*q%R^39X>32}!1G%06XXgp(1 DdIzQFw) z{cgU{e{270De|~EiG(o91GcJ|loYo?l3?4-&u uf{lZ2iK-Av}qMEbB=&* zHTKU)7is~`7+ok1QZV!oK+%b#etpAt Cyx1Bz9l%`}+XL`B zdN@5n SC!1ogWS>?Me$EpFEtMod==_YHMmf) r>2my=~VuoVHUWDA#XdF62rUZF7bRl37?b-Ehmx_ot8?<>0YIBDM73}+G> z0i*UpxSY%pUT8>{@{NE^hBbS$SE<*zT3*X+w<&VO)eI>0QZ_rRPQ}9ivEfYy*p{3R zX5s8!tz4+m0Vq>_w*Yyo==S^GuR6}iObEVs##747|6OioH88G;v3M3mV(!ZA+Vn-W z8m;@n;|Eyyn~h+ileJF4U|GKN-m=P;Vf!RVW+m76Jo@8(8OXS7e*qOv0k|BT>(S>J zVNqED5V0kRUwJT?R%si@kKzy9Kk@()^x8>OGc*L}Hz-k1C3ynSFT*5kuE5f&`aF#< zmIDd}R}eh=@-4^xf(hLRMFd83^jG0CZvjqiWh|xUm%ZGVd^m8TF$ou-8kSY|y|IkA zJUF8U`2=1JM!iJ;`giJchr5o{LheLp4f< rcg;1ZP=AlS5|d z%SXEN0)$MWl%=Y6u?J|{UlgP#?fEck_eIoUn_|+T0m3k@oP(AKw9nO1V#4EV1XU}M zBBZ;RZ7@P7HOne6#!fc6 Axs2~%7lSURn$4eB)y}k
+WYbcnliW3vS&j=`}J zSt+Sf0B(p;^gE~CXcRA$ULrM7huQxsNNl}u{-qg1gDKf-!Fs_RUBwr)>6@oJ=Rg=L zPcSh)K0ZA9MMlPn>6b2{ph^M4D 5kXu}7F zVPQpejdY)Fs^YSbTo=>bi>YcHlC{*lkp5P-RkC5g54AR`c+mlulwH^H0Q`+>CV@;I zFPqcD^|5Z2+A0@DUaM+gnV*}uQc3qI<*4pXv8Te6%4T0wEb;X05ioC6jpI2#-Fxy% z!5MRrkhRQE_r&K~}Dp(|Q1O3iWFubi!9~{pN1xt-2;0JuF{6LKT9MiARkYq}=3reZ zOD>4lAz-g1myVeFlc|%6g5#=5C-%7CTn8vN+b5?PUMa2kq}MYL-X_j z^Ib26a?n9|ZURb41(qP?l($afzYn%;HXpIs9 WU!-Q1|AP6C|1o2SCTDv9U4N zL+;%SgbOVF5R=2{=W65L`UP8br$Um{Cy$T#qe{IJTPvlma7yRRJmX_YDQVd8s?659 zBP<1*=RsuGZ|E!42uFRN@K0FWCic^6(&2fa($mt)Ccf^71330BxF`49HB)I^%WzFP zu@+?A-Qo0qaRGl)v<_|_!lf#w-CayxdV8YF5+;n@zWh-e#>ZTDRjQHtTA*Xhc%bQ5 zl)f3gpmgyde^w}IrBIX-B|K EyET!uNJk+ye>dvnoNwX8Y@h&H znXmi^74IST5j#QS1%%Tw(25I_-(=<#D|A|vBK<93flWYd5wG${ZSZu&(yhW)UGKR1 zGzUss((e5$DkD@adSMahUMFk{urp56Ua<7vcF6;C|C?5bK)N+9AyfpduVOe;3G_Jt z_;I?@dSm@>s6BU^G&micEKqvU-X(mCCvqvOpVD^*(X;~q6%dDX+}>O@13uFp@ub zsd6Rk-MB(!R;X4^T-?+9%)?V~i@H2-9X_s@#MH%M7elBiF6WvwY%QUDtNU~4+f6}5 zHQ*{P09p{ID%yvrfc^gB0`3mun9AGJ`Ft RuBDMt$51G!3761>5c*z92 zca_DzC-E((5c!y*QgTq%ix_?Eou|;6OtpT_>tCL(Qy@MUSQ!9JBn6+8KZ1SjW@H3( zMNo)#zsjQk9sDj 48llNISVlzmyjb=-aLq x%h-o!9v{eBpBck zSYDrxFy35>Q^!j$+rSDv{=5+^`W{QQO803>oG63c@`L@4_(Wd)U%pz_&3*R0`#= %;`>lGy;;- zM>F{!G=f2Uq*fHqA5gUd PzVafV%vA(R1 zd<~>l@H}o)7ts0h3J5JwkvF2bcd? 3| zVmcHP6BEfb2RA`HDX7>zPbu+=34R4?!>W7yt6|c!@xQyalh#(( z!KAB$U+C_;9+6G=p8phDro|q6aEX)QucRBk+?Vmj79N!j@=Y`Mz`Y-LVG< zBFANB!d5ws{tV+v)U|ih`83XpEO;ruH=ZH>a;Rs9h!+Gc>-KOw%8+8^xIewK9WS@L zFK#)7R=zr%NEgd*dz5Yt1?DagQ 0a*IB-juuPr<7Qr_rs~gs|q->xGUWsS)K!eO=IdR$v3BMK2Nta2SIN+%qD#Q z?Y(!q0bLl&iN6Fd7=JS6R&~8-kdCKiEt5_OlKL^c@gCoMGnghQ {REOsoG`=k+HYCQ8=NoxMVUCAJpluvLd2~~Bj z`4W02D*9}B58p5j7R+vdJ&Svhx%r2pB4<(yF1&wK8^(EuAKBTlzjZ}2YE;483Moc# zZNl#>5d(rBNIwgHu`&t@f?!f*+bdfVCBgyhb5_`cbwAV{Ok**K6xOZK{L3hxGl~5G z8J>YkY?{?_gJOVCC19$M&BKO inymFz~K!WJDHU z#+X|iCps4WiwePK=>>%;ywk;6OGDWr9J}vIVqe?0RVXAiR}-XffUO3|EpbPKNHSNL z&zrrWQi-84`>LYGjhY8sp^wWSEts`)j<8hwJRO?cq}b|H9_iG}D7}*t^WHc2Z-qHW zoS4O2X{?^CM5bIWq%gJLus*JjzBs-5N`EIJH >C1=DP ze;NRy5vVh7cBMH6IzSWs`Ew%-TV)8rYy5X&22m0E!;0FQLPtf9Xc(m9W55<8^C TBm4F2=-FJ;ohP$F|08Ox$nN}C zRQ(BzkFNy-l|@yesF29@#l!Hv?WVifthGG?UK#s)G;Sy`CcUvv<#k~k3V)8>7zNof z-8g{d0d<$O?HH81)=M>&3P3)4_DZ1w+15QmN*+eH&7SecT$Qm*&r=&P9D#}y)e3A8 zmw@D!%^hGnjYTG+JPY7M#bf@o%)A@29gmw%4NQoy#c}gSlM(k9YY%~k!3&hA;X)I9 z0R~%1Dn1s>zP}QS^NmEb_@JwA2X?Ze{AHi#$E1~t)~hI|X*o_s^(1C}VZhi$00e@_ z*ziIjiTV{NWJWah+r{1ieAFEbvvYP^ysG|zo$oTMaLtXtYb+`cY4`;1?rICyHA8Er zp4a%uxztQIPIw9POw9OQ;_NX7A?P*zk2N$R46Aqd?@ygIG_vf_lF>8!$vDsgSPc8L zT~?fKR4D&}+H?=dk-Sjc%6%|Y58O1i%UYoO?$O&k=!+ocwfOViTwh?r9}|aB`@O~8 zxX+UVaEraHKR`%S^lma4R{6(mQd70Of4>>%QAd;|3`*Sb@E8z%LR5mFJ*1%qku *9MtO10;l0$xy7``C;(*IBqB+sLge|#Tg6*OHHoHZ z84<%*0HF9oStw!$_x`5Pj*IE*Rn*%lx>gW2^bd*~P&wz^FLc}sQ~8a2>95axg}zaS zXeQWrZy)>V5Pl-5UIA-&nkD7BRX~nzrYT*#u#dg iiHeDdH6UVETHMahesun!^w^;B z{Ea6R2b<~v_<4;n1KdJHcPp4LT!3Mt5_Znk0;vc%&T6F XMX|siT3|Y|DzRX#+zyk1#m6^IQI;4!~{I!+ T|Z=tTG-RX)JF!3$cot0p2Qlou)rSKA~8ZK*t>P_XK-ERx<4rl%Q=o z>Kj1j#9diW5pdh*%Kq&r8YY>vJ(+)jOa%im#Pg0Hzbw{s>(D!CJZi;1LPzqCbv&JB zw+XbJKDhEdh^FhqPioW6bzM`FHD1xd oXMjbsjR-R|jpXK2FW4VovkQFQn(Ti t#UAo>E>Vo6kFzov+^mgSi2d{Ozx98vydtkJHmC0OVRI|*^?-8B2_J({ $U-UPy**tYCj*0Asy=q_ zXoQX4uFKYw^#HjdH1`n^`~aa(Ix%-dp4_0bcjSk$X1uf=#>`=<0^Zb4`;lfPUC >rNmkxn^%dMI=FWcB-EOZwTS2SOyj;HLIx zA$rSS0X_AoG;rJDx7-J>PsX0m(%dh~?Z6(1cD|d8!ons_j8d}tIm!Kx)Av9X5;eZ5 zQC2$|JsgMw!Ao4w9ePT6wc6b=!|`X+imGPD&tj`Lho0^_wb~05{0+?yEyR({hS791 zEe%Ha>Cth`=l=8(7RuU>Lhmcv5Glz(7Sd0%Tvlh@kkj~|$!~l4fgP&sV?LQXq`DZR z _Bo5TRgy@ZJ^;ivi~DH-4SKe{0%bwbTD!F2Kl0 zGQo&4&dv09{2B$}c?sQx1RmzCZgKu3BxVGjc1~D-oH6&IDt89mm}b*UXX(cgdUMn8 z*(fW|VlBg}i-Z&<^2k_h>JE{_MUU_lXV$grAahoBW525=3RK%~d z35yl_uL%Jd3)kp17$^F-s=SCzL%YFLfng%0D2>8n+I~hyLxcC0da0Zc8A}^VqA2a9 z0jzoji>+mDun4?kHa2CI87FUk|D}4n)02(UGntrogrBGLRT5HNWtv38ATBZL?@@j1 zQn6OO*}_xW v!=$xke74B)S}8v{R8@&KtMBO@M}|EjjSZr3vX7 a4`Os)p%!8gJwG N46-@a{mLni*fY^@*pNP=NIQql-?ouPlm zD>0<>=3#dUJr)pWVRUFp6QiU>Kaa=qhEMVh=SKNJkV{z90|Of ^i_nFTRflJ;iPIDS%0{i|a8tPXp7v{2n^>*1j zbswSoemwV9V- S8t|PnJj>PV8MggUh&s}5qSZiI-s)xcyo6Gm?h?4hNOvk zq6Ps==4Pq?9!oeE*ni3hZCfS}YtzlLygJ@c^{>cU%cFPeFo!Mt<3StoXQ5M ~F=?pc0dh z#=99JYa6ouh>o!YxEi}f^MY^PfUF|*IAV$3$YxGt3g4v`Jdq(}GZ_Jxpug{hSpo!u zq$I zd7J0$nUEhWFr!`q;cyKcJYt?e=%3h{)Ab040x@KOpaVuG>^vVSwXZZIpgVmT{Vmg~ zF9TGg>t}h fY0rxul^4 6RbzbLAJv#|kMQvDC07l&6;kH3hgFLIeZ z<}(oYdPq)a=3YF=AX$d2Qk2*EXdV~`z3z|emuCQ?PCxVlVj*ZpE&xI#?}jPVYk!(i z*OTM00VX@(2N_FYKdk6RIRw)Xz}4#x@HYV1*WT@<&3vX~X+IHhV|KwrMgidamT{7Y zthi%~m`^A#fK^JGjaS2XT$c}|bW&o_b_7G0C1wjUFaR~x+Eq^lTKVTZxF*>DiOB-J zxCMwBn|$G~QY_1|;w11wzIDK3lpO-*MAW^!>428a4<6YS2veegTo*um%0hz?X8^IY z0MWKuEwHNm10Y-CFR%q|%P_UZMFE>{m>WXMg_0iFaC>On4}dj_Dg^ytV un zH~RNo+P*OSYJ=Xlals|b`U4}NGg!`%Ky}dR5qE;o5p55KcDQ{wA9tXe7zSovS3nN} zI9chcXKp0U8*K{H2HG188kaMm1Ox0xc^URH%mf}?`(AdaEaAP|ZhD}Kvc$%o;L~ZO zX{J|#1 24P2>?O!rUz3&a+sl) zCx6 x82QUPpZ#+!7k2ffL8o%^` zj#(dOPysAs!TTdNmj`E>rnyk`G=2{brO|zW2O{y=)$Ga`3hct?ZG>Z}=-R*ICJK5# z+yFm9l}sYzz)LJsIBaTwLDvJgXSqM_VnnRoYiu&+<>yO72|V9yp@s>l&0N%#Y1SS9 z%i{K8@IjJcgwTL-Hu@>Wl-1YLMw+R=5q-+l`ZVgI%v}|MNm4Q?<;FG6V6Y_!86rQW z)9g%zcS-4=33al%N8F8gmf9)D)UnFX^`E x`NTkQd{1%UxXx?^2iF7}T^gb?$@+PDK13R$r zalpv3OC~Qc$6jr)z+;e-(LCY(#>*4ud9ldG_`=0=m@bq3bOJKDp6kY&k5J&c3n#%* z)NVFO-ts|DOmG4r)34{N(R^z{teH4ybU(9eZ-Ip#47EPP+ynFh?A0cd(G+;8&iG<9 zl{8Y-?_d)jf~l+Sh!+=!K{GNdlytzmZ#>c?8NxI59sWByQ4zY?n_Z0~;5^6}5^{E~ z3##cEr;6es12%^$u+PDsud`Z+xr4!XP_WBh{amigPtTOh{WnS^=(|~?`HNW-G*Dp9 zp2O?T(E{TrvCo1ckh1?VZgP%QIy84d3aW;KpFf?5V0+9dYGe82ySbQ7&PVJZ|KST@ z|GvTmV9W0SWdNy{{|$ePU)nnotYv(BeBe7w=5eCE^SAm%3VuRK7&If7;*6DDT$JP_ zFQmm!8vSJ<8r;KzL_QF429m4L2&G>b@}4xh;*q%*MnB~v!uBU(z;a8}H~o@TAz(fM zd-lDB|2hb_q29@s6|@=guB_gfK{WVyyV&mY4CLyUrYcd}KG;J@n%tDe=?5SzK(!0A zfc}oIViOuBj>8>S!h2X+Jz;W!9T i*kK%X-gO4@@dw=$5r`#K?JcquRvaV z{IqmSar+FKH4VVhX(-Qm;L%U)B8j*Q*e;uoB7e3e1C#uNj atcS|bL2Kl?vY`%(? zWhjr%a2 z-RPODGdr4f;{nR7KmaJS71wlZSZgDMdbIip%W;$*RPFxK-j!fXn(}|o$YMtF+bMeN z`)-%6WN0l87-lng2dRl|%GW#)*rRL4-Ihz@+djkLBM+f`Ro!3FH5qBu*6S2FXyx zDR(Pp#-PdsaJHWEbFe1xkO64>e-$~tJ|yoJMi>@cokTf8hL6t(shs;32L9ILWoX&q zHSo)Ud~&;ODvV&)R$WDj>pCr_?Ul Ywg2121uuVr~*l;sUF?PoDJ7nJWLvjSjH|d8sda}4?6?HsJ-Y5&jMDk z7%PA#-e5`%B(oixQO2aj#fd^uvaP?f4X8i6RM5T3NK6d$tQu9MXgVU(G>EDZo%2FD z!X?I@*)2)K{uZSSpP8PXo{|#65vmz09ro~Y2SEC!wv^CrMO_fl8Fdw>_k*jEE8y&2 z{8|9&xg7qk50NFnMB0p5iT)KDL`C>MFIs7M@@q{(x)ntqCD~ZgBl!XOQbNv2nmjG} zZBHLrSI}L^RVts#L%0$!etZVYl|9?7irCo Bkftw2 zJ&*>w`4WmA2V`sMaB~Q@;ZPqqnyBSc9D)1kS2@uOORfxt57?a!RIt!5y@26uQohR* zz@x$~VAQ(rLSzCOUTQdqxTL5I`k2yWv%=%(4knR%Zb4BXKL#_)yAC5sEH7zDRik93 zS1*i*WGp~-)1*MI0la_gCKzu(zX9W+-at&6({>mI(roQ1SOIxJe*tb_E^3a7BmgeH zfg*a^(=a2$*eDtxvGGkJg6J0D8c+f?o9s_}B-yhEu7JggJDM4QQ{c~v?bKdaSOE7@ z+!y$|9s!tR_+|#YOuD)ts4;XtgU^jM0^h|0L^z?dNt3?)IpI3OnJo1CwA0Li8SiMW zoK!k;)pDyE>=1LH$+tAXVcb7H0o7{{u$I+l5(Li>pXV1Rl5QXmc&WgD-Xj2}SW$<~ z({;hUW$7pKBYn}LD(h&{>|T+F8@*(5a)Nmipvt_MpG2{sPbPEV$U_KEfE`X;ybnAl zK>!+0R+=e}fras97zsUl(-R0lU%{jTWq;P)<)Mtk+12sVAsD7sbWC?lWw#8V!8x9b z9tX>q>czCskqSzXDlGT#Ct9ovfZ4!cEH0SD=};^!4of58vith{^mtnSGGGhN#|St6 z73d8je)kK&^bLDEUV}#_-U#qyF)%2$fRPC>g-#KXJbhZlWsapD@Nvr#P>^!jp1m-b z2;Kyv)JPJ>cymBzT&lMnhwa?-%6u`-B4Dq72@7Y#wA(T}ic$i`uLM9GP$U@tVaZI` z5<=er=6f*roR9;|c@jzETw6$84& %$q|CUW1)0)hqeP{=X~m|9HK zamL?3xBrh>>~Qu)a|F+x8`v#Dfr1ZDO#A9%T;l+iH23LgKPl LXO&1>9a z^}1yj@)RMv3& d?bs7cYHtvB#|K*cG3lMQZ->3)dl#h>(pjuw_3tX|V+6^|f9#suXMk?^^ z=K{-Qg3%cOh*{eJNfgSuw}4shvDSVSR_o_mz>()MdF_KKAgZ6#gem@w+KjO?!>@lx z4VZ7|r`p^B8M|NaVG|dqr)MBXi`QXC)&g!q;2+FusE(WOP@Er#ZjWds2|zEQJC-Vx zU?Y%OKwJhe%edExgHgPF4Dv||wa&wlso=1mdt>;6nAjJ37pz#?z@k#na+#bgQ|pYI zR0C_{{R+ezSMwPrUO|FpDRC(GSmir#rLF+r-y$Ew$NCx L__w2jhDCq?hJ zYa#O>>@WkQo0O$AqNQt})t?}@X9~|o-;mRyxQa7T_OCW04Y`i4J~;~GcLL}KC;5|3 z!|VoDJQyS>C|hWFyVx#{_o2pSzauIO@J4mw292_dGP+m9PX_O31L$p8C`a@U_V;20 z-y&K$I)WE~7(zkYK=&nV?Ahs~M|T@kN{SyBHr>qL)xN8Qg0h1Gw}O33aYzyQv(lOs z2VpwrKEuFnp#-TDMGd~MpVURLUuJ_7_(x1zinToFoc_d3;m+QOVUy5L3Bxc@z9RVG zf-taKSo+8%te3@k! L3sBQl~9YAs2gjwv^7emzu zX~DzW(FrN& *)j-OP9Q_il)-R8iSwx8K1xr(va} z)a14;*ZuVWXz)N$0Bz>o$3}<&>87^jNoPzPu8Alb)O@v^i_@Vtff+ALy;UYtjd_{O ze( a$MpW^0U2d%RfhS`V)~Y5q z?5eG27y13er LMv|MR02&*||M?9vxosQT@ZZ$o zpeAzvAgjU1p};h-|LUWEXoK>tM1Z4Ss3UgK>3Dki2}aNkCC*`KaZpelUlQIx+aSDr zfoB4g?>7ulc+TvN)wEB(T1XAwp`pH7KtT)q!7s=rwcGGXeKTwPir|@yz^l?`_f&<6 zhXqzs49Yk76*R1EsECFK%C-ZXTquXAqfFQ(^vgnY&eovm_uk@-5aFf72 9H7%VQ>Q4Sidmge!~TgSK>2LJ6<|JIXx}?cb5_w){gszGMPMt z_+&~=s@3lt)Ui@c@RLRtD$pcEg9|;````D_w5^iL-<9gGBu7L~u{KqAq@qAEqrdA= zhQWZsp~)Z*j`LOfVk?;}X~-qUTY^=R^Lax@5r4;1t0nz8mkM|I-oNR~Z#Aj?oTf1) zT)DPxpDN08n+ ny0Ub#(ll4aV z`3Ji !IJ)}?n0#{a6C}AJae@BfyZZrAZ&ej7V7hM9tB4pt3#|uW@O{6|<1mxTEw%$`- zPR^F8;Qa!S%WkwNxznTqLmn6B+Bh6`Mlzo+3c!cHP 7fWAe z8Tee5=uHY_;Y bO>>K}R|K~{?Q?Xcd?T@=@3ffX1$n<`L2Aug-0PaJya<7`7u30r26z5Ea_ z4L}yvAmsw$sEy|B4re DuSYnRi(6-6mA!QN4pYZH}TGy4^@eHNrRtPIEdEmyK78mfiDo zS0Kh`L}x;UI=MhQc0x+_a)Z&V7?szu(N6PrNWHB~XX2u_qF5gWXD0SgM8b%W|KesU zzHuXfuxjDxWj$6rqN~M+Y%}gDfQ9B5SAm#vAig`GGw~9>k|SVShN`1_w+Zlb(Y%@O zyiofsl%((_vd>bb8r%^ayd5HQMnO>Aj)54Sf3HwG5s|3Y7=ZpSw4aE-nP~(L&Oz{F z2b{n^&};}=j89I>xc3Qt!ToUXBUUP-C~X+4g(Zv=< 0 zIg_aI9;8Z~Kp}dQPv>vJ_?dW5>%tsQ6PvNo=uYhmDGSz{zD#e)PVBAFZU%(5x sp eaL>;hVAoiA^R4eJ9@)zJ9g*N0dDvuz@H_&yGUToPk>9Trri}_V>Ja zI4aa8Rmx$2MBx_A;@?lcsVRj}hVqn99p1rx;-Z-2LSdF<@k0JSV<8KqE<=)L>_teD09j#Xr>?pILxM&;*&{UzX`m`S>lJU=d{61{v2 zvbQ`XMw(f+O~gAWs3457FbsKIScokffMph42tiz};(v0KIW2Wp#GyLKgdGPAxSlfL zRuEb+QwU!WSI(YmIzjb}MXfet!SsHU1l_XF-v)g?rE0&5lkZJ_VLtGE}x^fG}eH z!~*NKtS3OhOeK&v?G$I`SFic`k?Y~(q8xFV=x=>!eAutWm=Te`jI%!D;nxKxewuy- zuwk~;%>K8{54H$6>xIcB$fJ^^S~}2BqtFEgR0n5yB7Uiu@OH}G3Mej&r-f}985u@E z*~sfE!s<%z&pbkaVm4lvjJBxNq>X1yMrvggMr>dtqcY=o*C8jZqm9ikpJv3BIX)dL z&N>o7x+q|=`1fCPb}wmra2*Zxz0qVFG+gZILk2fG5BpH{0zJbirZpM3kurFS*y(8G zMep!YOzQ-FxwE067>4jzNL{% wq&-6 S;3V>gz9w-<*@DT(J&kR1$UZZ^lAMaq_ zb%2jgNS}Pc`|f=4{$Kv^5TT&Ns!roOzJiMQN*Q}Y{HQAml<#SF h%9pA01D6s y>z?KjY!A*LXN63 w)B08&O~dpm+(-P+H_QM3jw~CPeJ9W?n0-uvlYH7LvUWd)Y&g~Yd}H-$qRJJ> z!8DpBPR{tknjKTHWed&FKE)kDO9`)DZlqjDxj#oCdm~wyGBUhfXx2hi-f#}oH9n$Q zL_@rg5rQ4@Cq#oHBc<=unKle}E%(uAW|7BVYcsf#YG2#p!rPT(y$UR){x26G@rvo9 z@0Jq^D)5#5FviX|M6jIMYa}V=5;-U4MA6{Oao&uszT191>*~Unh?GM6s~6rMg52oQ z8wKL{&Gzru|FDtl5j^I7;H=O;b8%IlzyMei&DQK^?p#UU&OeG*r4m!MBHn?%P<{!b zh+8EDay7q7XjUDJVQ_v_XubtMpmOr4`sZ k>$#NA41pm#ge<#3`DAuA8k>;w%x_qsvWWfES1M?y!u-| zzr5nKlnUyOq97=V0IEF!n{T3y(Pc0-Sl&IW+Y65$Nxb$-^d&R2$MdI%iHQ+W1P!jz z79@7%gA20P8NSy$@PFT2Csz3IqkO665ApU2d#(;$jeexO;@ZjEYi~uJMwjjMLz1Zb zdc;Y_AEz}&ej+6@#YTg9_EEuM?y9FvzXxTCaJrPjF?D_?BHc#jxnB} X)gy#O *8kJBS`&q|9xi=s7?yt1B>I`?$!MN!V#8iE^ z8c!D`oPe|p)pkQKdUl-#QnW?}!Q_wiZxS$JZb=vU7Oof*F99OO#hgZY|ESFQNi~iP zhBCZ8_-v1+RJF{ zTr&r0`$bHhwid_9kniIw=!j%RB-q;C4b>UlWwIJ+XMEs`9U84xuh(bNS4Jn~I-QFF&Rp(DWu0mJAzHoyBQIAM8c1 zDTv4@YCL<2PeSaIg?jEB{~+Y4Xm?2x#E;{6Hdnb=w<%i;f9{Cp%QZz>Q*J9}4^8tR z7Ec>)F#8*3c4}HY?&yAP<6}1*YD(;&*4!lF=~WuN%g$ZLl!S)1j z#4DkX~#H5}}}ZRuH?JCIW+Nt1E>g^nlnKzC5Vugp##l`<|+`vWf{ laC>)ozEPTv{J{G@9tvLYmC*X_iBp)#P* d2ZG$X;Iq=Q{|m772z-q>DbUTT%Y4Hu-(`y=?9%|Hm0`{;SdJhhj31f9|aI z!=*wR!huzO*YDY8CufvOl52#}L`8U%hgeNAskFi)#;zSN4t;(-TpK%)yJ?Y7<)Nr5 z)_s_pRmxb8yORnh4qP6HK>9=XWBhw-#p{Ctb0ortT0ASKFN)Ud=O&OF$%gcaOronB zdvhyOxC1DW@t`xf!^z~ftH{~)24(F23%)g ;H3G zehPo5|2p?xl{P*%SYqdsu=LTrP-sNNx{0XKK)+D (bcqRKh}15yB?B^81ZK?wSZXO=z@a zB0fCsW6xaG$3vFi(swygS|1h3MGbznw4XPMni5;Tcjq~7vSIlEkyQ `|8H4T5>>vK#hdlLm1I}FH^f<^9FkX7D`f07UKG)i z@Cq4Deb 3%Y+Zk*=d%F=bWF8kDwV4wiM;j}o_{Vp-3XqTc>BMoS67Qy6v*Q=Ii2 zXA6U2N3m*-k C9k52HrzAv?)dZ# zTG(Z~f0gVe=opunpJ79I 3F6z8u(#vJhz(J-1MaiR2^msuc_HO*f;*;>84m8~X&H9X zw2x;7R>F#hB=y~8ys(`YrkxDm6)mC?EYvTCbvSBs=1FfoXdfvUFR|>)9lg&d^}pog zuk+o8Fz*iwTT8gMsgEe#_tBbnRa_kW5}6yF@Gr6qh>jC)Du_-e`m;!5bw9*DhP#86 zuHD3-TDoUEDs9qA>(x1mKe&?Os4a2G<48<%b#FUwkZ$I9;h$4PbC*Vvw3}jhxgCDy zw->fv8-eF_^JQY!1PXA1d%yP!!iej-bHfV{ldX1u$w51Tmye=~&A)bL^=|594tPdB zRF6{9C4?Dbm~7mYZQbqcF{wo&nd$KG4ob7}F-1$_H9eH+f84XoFruHXv0hSVpS;AH z@jnnZskEc6%o4|tnQfOUPOYHV$Bw7?8LqRKZP|3FqEq!_1_#94br*8{Qy_%Z_=l1@ z*+xSsD?fu`R1~Z31(os!-Y%@rReoC$^9bEYFa3 ?!HnAICl36keZ|1=gzQXqBR;oB9%-aQm8Y`z0qXtkmE$2LxdCi_Sx@j zr`SnBVX~FWp;~6UR4a=5^d#q1tdxk`+Ct*E`b>CFWn^Xmj$L=zX=NXs!q?}db%97T zXJ`_x(RT63>fj<&WF#1ySMNH0!?cdU{Bilg6(Lf7vlZb1GJhD;s9D>NLT8ZER|PXt zPDbT|FR1!;4e;(>^JZ4k%P0^`!ErB!2B!!ZjqO*>P>#y;7sgDfq!|>c$oF4R8zwqu zeV%X(4^vpF`Z%hPr<}1PuPa+sW}e$7ys+ko#i|Ym3oFY8X(CUTSI!arX=-U-W`S>1 z_Nq2)@@GiMK?=(jqN#Q))*zGB%_W%6N;w%xkQU<)R>w@bTURIHWY3W-U+P+jQ=)zQ zCpO?q$7u |TaKmyAx+(V|2>7! zKOeH~A7Vl|tz0v#%6F$;8?TLNPMxvEEvT|?8%~w6{(3ODiU-jY3ydw{kA$|a7jpsT zM>cbkTlZ6Z>XFN)W;W#bZ?{hjd5B#t2h(ONOO!lq+ns __|0_m-_f4jbiPRQ#I%N1N>3Dyf;=Q zaVA!+MG;6fpczWut2q #Ng0w2|;-2!+;hm~n#GC}FgH$vG z5iW^3CNoP*LL#D4m7yXP_dPMr;6Hg!UyD_%x~ALK6r8y=vYTu^TYhq{5_3DV5XMc= zBq71C%TTBVQ8p2DI$hAU7GX7qjYg+R#77;|PAg8 w0 z4vsq9y$VW} YS0Nj#+Seho|P>Sytl*pD7TZ^l2AXuHuysU)7?b->#Ml~;W} z9jR)I9;Q6^E02%#8n42?2q{-{F&WIQG9|>`xMvEU8k$oRXt^%}lF+tj;)j|yD-vbJ zr9&a!`iSGHjJd5;5MgdrO4U^M2``|}=JnJF=V5)(Y7UQ}i15A!d3=WjX+m?27LP1I zI7_~LV{IONg1vpOw*0)d7;B`ES?4qc!d*|t$`;Z!cL~Tyyf-%r5M4eeL-6>Vfs`6* zI&O=5tTwa!aCf-2=5AT3!q=7lw2$iTo|WX>PvNqRRho@)qVt3;vWMGlC!(M*t~dVR z&Xe4BJL>WBO13g5Z7~%a@7pn8mGVCGdF*y%@rvNe&hc3F$+$ ow>{n>VvCgMYgLHz&(ry1g5y$vR8uSR5b z98TCxL)feo9&8Qoc2^&tYP;G_eV)AJi;h8>p`iXw3;tc0uA=+Sf~mJ!>v-MqmCh}A zlc3jrp-fX#e))_$sn@NdB3BH3y@7@A)3AGj{Lry8yt%1uLEhHzUn2yqy!X?zIjh$@ zgqbd1>Gu&L4b`}70?)n=Uuw$p&u|<5 TYYZ1ur6LUnQ$6oZIQ|XTuB0-B0tI3ZxWV|{V`WK!Ok940 zjpd(p5S#gmET&8MokBx}G^b6>E6j{T4TM7w4Zb%vs;%mM1_r9GYX6>saboMQhDF*< zcV{J125@(rYo~L(b-6siR$S+7xJcFcw65yVlV-Z=dQn7^*>ckmDz9z7sTxXG|Fk_T z-B>CGDU!u8xaSzm_^?tC0CD>cna-@UBo(~BSzCT2oUA-d+uqe~`&*?xTi(81U$1@c zGB<)FGuu{kMPunL?o@~K#V9T2PBS4{=I_8z%bkc%D*FEMqy2FrU}gT}3n+iOdRjx- z`K`R_G<1Nw`tEhpfeM?N^ZrAgPXpu%*InJk#l`2Wcs$?#a;i^I0L(P1>)Zra%X6I* zRc@TpkX-X!qoOW94eYFaX2+=+bpuL-%h(SG>AbTQTfRFz)aN 4DHi- z!;&TAiCK1aT{bz{r7G*o@{_jhDVcJf=iKwTpf0`VJM|_C+%)G-{mlwfUH2Va!jqRg zJh7tLJ4&_`%ARxPSrj6`Hl+GjE@gFF&)l%y*T7 hN(wUBG zPN?ho&?~5Yb228oo1?JCfBdg3li}He%=Ere#n!KKZq>3b^|AMfk%lRNl}y3GVMb@> zoK}Vjx4$+2z8>OTw&qcLSZKT(H1>Ppwtdch$9bHG&Bebkq1^KTrF9gq5UF(W!L_Pk z*FOi>=QGh30wmqCZDVI8B+<=#>+tTE^Tp=Y8ZJE<+eVd~%bV%Pi~M-R1R{^BFHN;u ze|8_k`Lo^q_gFCoed*(6c^G0MOd%J=I~OSJ2ly%8rjT={Tfg8-ri`|S?ENl5GKY)l zu|>|G@#wl!^?G0ShB_tHI$c`j&E=XJ`S0`tNxwz-a1o#OsM{VKE~k#y{C0m@jS<)* zIFY404&EfKE1i#f|Ap8*hrvx=BjVNFY*S#X^K%|AMBtKw^s&XesqJvTKsB+7gJ0b- z4TvE}dv51dZVusNz3oKW8*o3Rv$e5K=p5)Q^RF)v90plr O&xS2dAk`54i#(-_X~ zQ(C%+lo9&Amd`T8Yn46?Un^8sq2cEi%qygPdLme>r7N3Ct)P7q>c^*E2q-pmYNZn& zk1MXOA{m~)C{dRDcrpzYHE6EnkCsG2LW=r{o9>*<5tGZny8)wc<7EKZ87-%29$M us{xaJDc{fm6bf5>NCFdRhJlP6GMj>grf}`|;~R zK6WGr$W^Oxay6?yUI65Nx~RD8J$9&=V(z0Gs{m`K%gMY@Jj4QWu+*%s{JGU>UyR+H zQ!Y6w!d^!?%Xn@J< asL zMp|K&^*}~>1CBoFtfE{rKJR*li4x}tHXWa;mRkrWP4uHnn`EZ@#dDMO`Xn%V`)tIN zRFPA_4(CEYnok`J?M#hHv+g0WCYZVf&
&u^3d*=0^PT?vQ zY~lcQ+HIoW74?FdgET*7hW1s5bZgOq&U6(oUU`@oGnD7G{sLgKrtN#~A)H(JJJ=ZW z@`EF%vxTY(xeYUu3B$%_W0bv+ Yi xuplx_RG zVbrPb^T$ISl@^Pf{>oT>HdAiOSoxMeSC62qpM4@9d~<6wtsp70?4LcQ>M!Up3Us&+ ze^lW;Jhs;JKkpE#gBURh`~HLyO)UYr7>z1ePkqyTIVQxFRkkk+S`|&~Q|sd^=MWVi zi3KAg%G7{cM(a9;(rz*P%GI_N?`kjc1dEJ;!}xUL`UB*NQwI&X-9r15OU2uDi&-rs zL0Twk1bF78p}i*gzQg=ET}&CtH9jqe0bNf>^6s`+wj7MjdX$?ChkaCqtUeg(mY*~J zoCbklPKn^G0`*q{R$B_I{k|EZI)pvB?Ox_G<)$~XZ4VOeroez{h4oe4LVER@%iXPu zpnd)7YTb*I2V5<%;~(>Xv)!#Jt4_$g+*7726+Hn-AUfv*A|MiUQ@--$MS#PJOa+iO zhbvyEtm~i*@PFqou{HOUz1ftc-N=$F2X#zVa&j`){A4)F5JYeJvF%^1{`P8Oj_Epp zKv2Vek<+G3{1(m5$w@D@TzS`9BRQVCZJqp*%s@E1L(vr3vR;Eo;(3>)&H5__;<`gZ z`?-(xP$2clYnvaK1-)&ZZB5J0)2`F14Yos;Ys$DCcD1>l{nrF9Jf;*yc3j~HO!&hF zh{X?8VvBz;va<`ZlG9cDncsl|duMVzdC3htzQCmTjiv(30^DqwjI pj_JZ3NJQ{ zfM10$Qma-urLJsxO=a MHQ0&N->f>%c&x{8&tonn?xk6~=%TpD_=vma>6vH9urG#lCGBh&SXe6*w7ux2@-x&B3ipNH6>2D70| 3;#$nxexrRBe=IkvOVO?N1c;xw9b)N*lLQco7->;wf6o+`D!{BY_N3xLQm7P zT6?g-OclZ>l6^THSw4zIYF}$7ma?!OnQeolj`vt^A$$*ADjalc;@=0Tx5NC5=5WML z>*;`v)hl&v!^P1NDZ$zGNuc~zxboi`-P3*WYJ1EKUGDWPL!vdUTd!f{ik{mqmw+_i zfy(rINb@sxeIk hyx3mwyPr9X@Y#+cx%jYZ$(WjH z{P~1`EnO|X+x~}5C9p*<>9wTK)>GCG(J{*q;^7ShnXABAFn>nyxVu*uXj8HxrWA3n zRva^_HmP?MTJzi;{qt^~y~HX-yiq$p<>K;EF UUo+XOI zdm{{3!%p4q?^t?tIrMzh4V=b!hqx-bi~= MlFeH;IQ*f_TGDTk^`gUJ&c#}JT8LV*#w%T5LU(U3`hKq|<4?^W6ipvx zuVMDTd#Z9fEf=BF(kW`I$r~;G!jAAFe;?mT7B_~dk4LYnU42R1k089W8OA0a#1+dd z_Q`+0%o(Y|R$|H8J6Be^d}3}NH2KLrYS!g_ri(bN1YG3Ug6JW!@$F|CK3;u`_)mAm z3{^L;_47kA-V3nksZE|KwRR2jrr13s^14hVkgNW%dJe&Xx%=eu?7O!{JuOAephv<_ zg=&Ce^tK8`Vn}e27NKc`$Uz_{>VH*tUO`R0>mCjWSO{Gy(nawP7|=i htQ=rks6AkdvRuO=iHt%b1u$RX4YhVGkMp{H!JV= z{GOLb_vjGuF3w9(`|uOypQEjG#oN=FYTdfIP`R)aD0FhV`>|W}P^uX^!B$_GTl%R4 zME&4S(hbf}HW^UZ?6{u0gss7SX6?l#p69zsYv^`Ceb4JIry#;xB_tN|{wxADh7$h9 zGkR6!ycy8EulyeAGxS1mTxhvF3}fzlSmSx{o&{wSYb*6dtxYcr(L~mg(3^87C<$@T zhrjS6MbF|M1;7ag&h*v`Mod|ny69kR^JTM$w?;bZC$}3Sp4)t{t}~GQdEuE?1I?4L z+TQF~ig8U=FzB2>xH_^`p<8w`0tNR7tC@WUDG;V7;vNd4NUvSZQOnoHz@ymd!~_$y zm%P`AJF#88V|&7U&hYEWc6M^dA;mNWX)QH^ve(gBh@9vQ-qo*krjJpR@hzcVD{MkL zFpC}|@`v@)qB>WIhMXjevcr`z-{d_mlC4dbjIszJ0A{uvS-7>YQ2Xurs`iTHDcFg9 z$G0{m+z~gVt-wbU|JjQ7)^~L?TZ-XP1Nh}}u=+g8rZUuv8Y{EvO}gPd2Tx@*NfU@? zlK$QaJ;8%{AtRqozip#p|9HfWKAtM0wbeKNdLpPC(_?ENzsZM5eV7YNVnu$b$A_97 z)nvG->!zdS%-|NI#9#+;TDX;ItmGobnW;W1MD{6J& @-UcK8Nq zlh-Bd?ITUt@3!s1>#dL6uUM;g(yJO#q&1b~N5v^y@2#+q&j)_MKF;;+Q0|ad2dF-p z<53ZAL6yd&lCzPVLe Gq2 zYt3T#7y}0jPqpI|24Tpdd5=)B%>&8M*!r|xl(yk^vd&4W%yRKea_mo!a1FEGgdC^} z6ekk0HNR$BBmaVS6}gX|m9ELLQ~lY(?5M{%u5)%v+TBeOql27$F>zE_nVbI26+gY$ zTrOVf+3$`xd7ns%ZtJZqp4L;HDCl?VF&|BAoFbAS$udC|ds`a?><hdDzA7 zsf4`{d+KLmm7S9I6{hwLhqyvhf?+oEPKh?&E|sc9ywotv2@-5uTaTCCw_Ue~2okU# zBUATAYm&Bhmrp7}zBc%lPK<9V(3-QmVoB@j`QDzs-iH(1X*xYGKh+|;pHJbQo*^FB z^a?~3Ye=Xz0GuW7Su5@oH?5~T1(C?!R_trQ^?OYGz%Ae~6$_iaV Cs46@#=s7z3 e8+a8kuXzz(9dia3=`f5tx$T zVgv&!d90J5tUL4SY3pR3%XGeI-SRMzZhCL8|K|!R8l3BA*1k~Cc%u>wR~nBf eToJ=a0G8x%&{kmg4p)Ru+edkET_EjA886){P7j+N z=Gr}oim_LV7dV@icbBI*Bm x9=NIt^srLhBRN#EnrgfyAhn$ z)hlh^h6@fkIM9_MN7_4nt36%y0g>*w?~6U_`NyXN8Eyutnc!FRy%P3jMd{tL6nt*u zXvDpZj06J_75 KPYEO^VR)v z3Ph7VhkfIH?m}y?Y9N6~aQl;>Ai6)lmD=;z(dxpf1%_Ch$*6{VQz|eqdY_PVL@U2T z5nnO;b`pC7dhxFLSs!Ryj(YyGh(JtYx-YSNT}Z;QL3(=w1WLJ-5fOUTNSptBO51Zz zlCasDTLNa_064*I4^1&BXzQ+0h>$6I+&=R%oDX4Et|hx5Z_izSaHyGT?sKyIyB=w> zlQ;ZCp7owFNaI%4Z#`%3fFfTKQ9Es j(!&Lp;&Gkgf(#%I5I@uH@ zw8mvq82IBaFBwqAQc_g6B^C9he6<{Npw=2Tppv&Z&H%umyD*}1Am1j8EJ3K2Ioai| zKuqw5Xc|WPu>=q~2lt>#LFZy~RqOcjDu*`)?q*_+2 y^F1tS;}t4AQ?8 zN!sBf4tOEj&>UK^;=jmU^|IvadAcK2-b#@iK8!OCXe$*p0jIeVA}Pq5Llw45-|`p6 z$Xq&Gg8VT-^=pLtq_Fi`7sQjtu7==ny1KT-AoijP<~(j;PyYggXS{@g7EVuwWWwux z#BO4i-H%RU%ynXGNjw0tEMc2qA&w^IB%$wHoy0f4Oz9?}UBRJuaCq zae_^(Qtk9E7M#9+i6U$M6dzP(VNoqU2<91teqxvwon((Lj@V&$XdnCHQC%VJ)*z3t zW(M`qG*F|zTJUiJK6P+;u2jZXKO~s5t>UEOx*rP%upmT9ENaRtrdE-wUbpfBC?%G+ zBi5LE_XA(%;s{Vd(P>uLt0(fK glE$iC@pp>zNW8$>U_xff*`@PF8{NP?^(!C3l%qeG7I~2Jg)9nEhnx z;WvxwwD4NqTu5%>ZOEanARYSex>aD55;-UYwS#1puC(UHusX*9sgi#qYfgr=kK&+{ zH6TzM()n5)+rq{F;A_>Y`4OvOHOv6(#ZUbg9^=m`{Z5Sqny8=2|0hVBmnnrm{qt+U zS{ed8jV&eJdt!}sSJ6K6_ZjT_&aX=HG%o%Z@HO8E5c$BB|IX13?1{NCI!uzKK4J$n zkpHRtU$Cx`_W?b{+IuR^^M^99XCQb@{u`Y3vLnE+L-63|mpYE*gC6Xk!)SQ%JGjpd zla*fqCt-FJvbL(KDmy#dxClV=`*T`)sxem@k>_=TfNvM5-(-A2+Ul|^KhMJhBlEHV z14eaman$bvKa26h>di}yz}x!ySEnk1<#^-O;(L~Xo`CN+Y73s0qr&ojE9r@{JJ3jP zi38c7&*wi4^-zu=tebBzw2t4b1q=wkfw6J{0LdOh6}u249t(b>I`gsVgZDWUXnaji zf9}X3Si_vr*!cFlQO|U-W5Bd=PL2Bk8jQirPks2C`tXB`9cHeeoAmQO^o3;iF%N1t z;k4`6C#*JP!&e+110n~bhSO2*vo&QPUMLi=Mtmxc59Dq9pc)8@qLwKIiAf$r^D|zC z20Kpie>5wxYyzTMe}FznDFeq9(RX6u^Ih%kh`s`t2QX~}*4h-I1t!;!XxT>)pD&%H zAb+s}kMwMRUS4@s;3eDd8F+!R&;aG=!+Cp(`})nCMm86Rhkby!K+f 0y3 z0;O>DH@l8LGy zf_l3{sNMhoG0A2Y6**nOc&~Kven7YiNaZlj&bJ3|Ey82FN=|Rk`;>jesMCCyRHUW2 zQPR$%MV*w5lN*dcT%raI7?(s|4|(AH%dI9&EeFn=0=Ak&I?u`&=W6@S*{?5O%M(E{ zE|drQo!niss&>5@Kfy9!353J)BRq8%!!AKzL3*+vH{0=A&AsVEbqpKSDWMY-k0d 1K<5fve^xS37 zDP<=Prfg%}NWHqIw`>X6zs9>B(=+5dcbIlIrV#G+=e3oLlHbOxrEc*m1tE)g?;zyV zxI*Ya0J2I*=X82%lgB}SAw lSrmQ|{ot zzojQeCWq#S=x)_PXI015;Td|uQTv~K-!2RjeP`AE>?4vwPt>M=+ZZKhMu{;0 W7#2=*pbG`*m&_$RZM4N}q%<@%n zqs?}iD9?9LprfLj>0#O`(%AP*5d?yCK5DV%r+ehZtLZ6VtZ2Bv0^A9jrw6+Jz~}!N jEd0NwjQ_vgc>G83U5k3DFZ41{PLQgimI6-B^3}fpD6KGY literal 0 HcmV?d00001 diff --git a/artifacts/validation/stageshow/local-2026-11-09/outputs/decoded-loop.png b/artifacts/validation/stageshow/local-2026-11-09/outputs/decoded-loop.png new file mode 100644 index 0000000000000000000000000000000000000000..87b496b67efcaf2f0ebe78c1e4905a9f9391d0c1 GIT binary patch literal 81451 zcmY(K2Q(aE8}E@Ih#p;t-lBx)JtA84UYA7gy<07M^xmUK@4c)px)2d{_0C#?#o|uB zd%knO`<^pr9cFjNyifi8pNek;BEN#703u!BvoduYrPs4*ZB}{R|CwiE!-u0=!^3 z%j>)S`|W=YRi?q;C@2Id3h$-0ymOAbvD&D$GamyhDmr0#+iS;I`dEy?jK@#uQ2Uwb zUwz$Im6KMJle=f*i`!rCiM x0l%+RhU%5#6jMU9hIuNBHA7jd*U$t=HOt|(&GPJZ-1xSdZMNLe~XfC2Ze*} ze^x9G8>XJZ|129LdEs8g|6N<}#!z)M{%28=Y2ei*{m+_hOK=TJ{oe}>hkX+5%_@zW zZgCJiUeQsX2^hULxhiYGAEA213Klk(r(`GiRO9f4{Q*NBPQ^7;8x45_*RA#4j%~Yv zpqU(23>UMAK+-ItP_U*|6mb)V5A6iETo3&eiDUilk8`it)i-O`eb}25Dh^TOH0a{8 zqeik5&$>a>&oN)$YR-DBUVC4{V&2_`m;DIfF4)A6ZimZOY_|HcfkzyWKjRk^E=@UE zRkZPbROCSqKa)nM9t|5J>#>8M`ttXz+34SCC?l(K?up9YE6A+Kab9SYEzo5Z9ufw2 zi(>sdQ3Qis-gz=yisOkw#eBexWeTN4Q-?$#yVQ|aluo?lc42H+;nAT7E|gsZ+3 zk_{=KdwGiLNHV`wqC4R9#JA}%ciK=KTuY=U^t41SJ 7N3(P*@YUMvwM5iH169e zuLWBhp0nSEVn0$Aw^g&%`zF{v3yRKHKqp0yTvk%!h}!V!(Lj!AAS)2v8|71kNe+kX z!poYJ>_5C~&Rm46gN};fh5}Qzh}a{Pk;!}){ kKUiDD_II~-SAEH5Ch&C$g(Ag4*F}_1 zKrZM8VYNQqI*dPfzG|`0^H9CMPvC7LVgIHw{Ce9Z<97 035wSD)z8+$s z5P!O#6ha9NUC{;AaJY39jnKMc3D+HM40b?S;hp`M=ruz3>YMR*;1N%xdE?UZGH_M( z9r4~aXNi14<+)Vm+Ad3G#+XQ}?FK#R#F1PET_@T08ji0pwzW`K 5E#(%bu_yxFSXO3OG@i%rWUmP}a}g7!g3kIf-e zsi@ss3xgZLsdfw+i1wx8<`LQB+@lR2mFJ92jN~PrZ!8FQy@n3go`DUZh|l7OZLpFo zM3God+clLEJ?c+YEF0^ySjp21>SQ<$j>W~)LV}=)&U_8pi9=8niA+j C@f=B9mw`3fxxu0 zHlM^)#tifM*R_dXg`0Wow$7LQ=Z@&RbP7n9bG%+8LfJ{yE)KE>49B0|RjeU@pApXA z5mnO!s% %O*P;^Gwi&M)+)r@|{fpt|NL7P5n#ug94|(v=Q4ti1U{#dd3waIZ9; zRkesr#dF$+_aT(+RQjiFNn|Nt-MTRow{Doy5J(@H^>!-Zx!GseZ|QhH-REC}yRm&J zaX;|0;-2dc!Mx)@Z=bTHLG_}wv#~@3#Xim=E@`eEq-@%wn>8Z0hqFr0I2KmzyboB_ z`H6Z<)2FfGA&CpNmk8s9B&>=ID5ZU9O0UX7g4M>I=A3eal7dpa#{I8#Iz1C6+%@Os zr<9zD@+IsRBl&P`d^WIMO`3eMMyetj1glDngRS|CZNC#PwJCaCl7>anf$}@3{JY}3 zP>u7QLl!M0J6m(Y3y7j(b!FC>;gf$cznrq1nUSePCnaM@?gA@2mzs&Ggk0m_i8W6l zO%+DyZ&-oT%57$&D@U4*F5D0+ySGC{{gr15&!!c#a}04zN)ZlPh&Dxo+Yxi`pI#~c zV26X2w`{SOQxS@a3Tgz98c?<3jW&=gG?JOp>eV$gY_ZCtOOrH?6ycRxPEjAyL@Zi- zNAk@{SWpbJbmk@2IJZ#z#J{*8ey0w99en;!YPH2!EUi%9T#V3;F8mhUJh^nQ5|w%? z{1)R6p^}2GGk3*KH*c7v?ZS@`Y#P_@Ehif|9z$h=c$0C(B>T+ICwF+F@GI-_M9f&c zW^uoAS%svo(=Pwjgv|lLhXguSek|IQhi`x1<5Pnby}cLQh|2~ipRD}|%?q5FY#CIm z{C4KL&glO5;bRc2?#%-3E&VaBP9-BhM_22yD;5b lGI`NQ`MM>tSAl=3YBgD0uTNpW39$lC)R`;w|5v1?E-F!|zT%cI#tm0X5 zl5Fpr%R^WA+F-0U>@f%G9+P^pI#xl1sRtI^;jW4$tx^##wrd%(L$+9EG2eellD~R# zAcQxIc|-Kek=;Psm}RV?&0mv|60}1lZ3_Lcm_YShq=b2+JmV@H|BbxM)-}!ZcKt3K zsQ-sf^}D>yfCrIun1`%oLUP1b_y)~}l;n_uzN&$@&IJB>j9m~#nuEFbyv}DPTwE<8 z_z=d&S5+m?{Wrqm%iqXs#YE1;B6ej^`8gyi6IdAbFm+GgfuEH>ol&hp1T3q)Thpz= zU &zp(W7hdOP`Ue_@Ip zNnmpJS1riC?C$IUyjNqL{l-G$fqEJleb&?Eom_^f_VFfFlT|>2JT;~$aw6%EAr@{V z<=Ewju*>FSvS5d4CS@i`90|Bd3TCO4k5othk }!Stst;$ZCf!D~&iosrASIJv(q7rK`{ tkFH|mD?svVZRm$U_5ymf!(zBa)}tUq$Y?O^^s zG-v&{HVsxMy@|g>z86uh;;323b5%87|A5cBsqdz;*1o?V3)oWC^4^rLiJMtPN5^wQ z@74c{y`3K-BHW$+jQ4w$^*Y_cXIdH>>ZFT8*%C@x0!%6s)-ecjjb5% s*h* z@hW`odOkrB#w42!@Z~<`J68|=m0BZh5Al2>F0!Ps@2syT7;1bE8)p7~-&sy%AVWqs z8svhKj>#jJ%R&)LYim 5Pb-%cu}^Ahdu1JEth@WVrRF`N4P49R3Gn>-0&3 z)B{?i6RAJPFC(b;lk;nHMZ(ra1}eT y9p_-oN2qW8tO| zoW4l0gk-IXRZi(V6?W5BjR$9YiQ1^+{Wdnk6svLu>|~v%L4?Rx|eW4kzbO_m+*j zr`D8HD7C3;jx*KwBh~%vAeQWD{r DB(Cd4Lv0wigP@x##xiF*g$-` zO_#P3rmmIo47c4(C^$rRbWeH8$#-@zYKjhX O+r}Gj z9OBwSt%|~~EZ-5@ox}OTt-F~ne4g(oi@H&hv-3*7*w7(S+D72}PijaVs=$;=4lq?I z>1MhMElJe-`}U%u0UmdRUGqlzjl1+kT7q}>nDy+{QTGbp?1<9N|t}kl=+_AILTj zpYD;=m$TDxjBQL||6+`1Q2AnCW;fq0H Cs;FmJFTHbea`N*NWzy!eHlpC(#V*1g)73u8 zQ<3~ku)up0j$i(Cf&U>ve#~S+TRL5|YOuZ8*Ulw3qMq(B;#c8w3;T)}kjYKKZ3T94 zc1_ww`a(X7O3t6(zlZlN4pNpXZmQ=e=G8D~4d?N(V9R{e99?c1=$BH%anQ%MYNlwY z)R1S8Qr@!ld0`l>_?va_6~sM5BF(qZy3E=P=-A8kNGF`_a{+ 8h(` zh?_z6&nRt!a&?OP*Cahz&>RBN+La=^)K bdlUu4kSV2IJpxN>)TcI@=q~rd_yP@c8+&J!)nw|TR zO0+-i=lVD`*RP^O4KjL^Ys>9pA*5X-8g*uSRM^5IE `_9Bt1a}N zq u*l2 z4wJQp#9$8cV4@fCf%rbk1D#V9rrxzW)MU?hD%V?2@p!tR{t}Wdo9`F0EQ`O1a I|8>I6m^?@?=czG~5`0lLomt+Ios)^h03vE?XT(_s;`h_2FdI zy%>?x^TpC}ay_}eP~BPYkIX^Zig1n*&_WD5IGLhn-ojui&^gd1r^U_M=zJXM*w~`$ zPIu5@6giz{4(3qfm(~A!HZM5)lcC~VdVT@5bTDdXcSxL!s>Z%Fb0vMxkMHax@Aa~N z!|TxLLfssZAmIs05bDHkOhNrj1o *zbs&Ay!MD4d*e&xYe?MN zA*a ?EN5EBwhQE6?ZaPScwS}1nI@Y-&i5;I$No?*(+L|JLT zGxU4TFkh}bo1@XUNI%In5qSo!uF2}8qDpe$krMGfGZn}lTFB(HvK?xs{o*$fjZ-dp z_2;wQLXG%dj@#~3ZuY48;1&6&Eerpb6cnR7uExg3g>^GAqT>w6T(7mLPzMKxPA^yw z@_f9xKhL8@%url$gX)^8MaLV?L-pH)!6a?v%l4-3HpSdqPAk$RKC=Y)%dXtssV4GR zm6t7da^Z5b2d7^X3zAkgiAn$FH0JmTloVL5SYA|XR&@>32K4H;tet*N%UocCSu`au zu_hH`{Q5b7-+>@$`}rZA7osY0v;72L%=v23YC4loZa1Ao*_!~;q!7AJws*SNh>7HV z=-HW+55vL_d|f^CdBvM@2DXtjQM=M}plqlQP9zL}0r7|f!IxLgHsEi=K)Pl5f)tyL z7FjKhhTb>fVfgPeCty5Ol%9vvco0fx9&hCv87org6Siy>hC%_+h; 12LB-;`XqUiOj;jQD!x>M&nK zL`1@Eurof_$KI)D)rOkyE&qFw=rio_@bEQwoY!lUF7j!fT$Mn?0If=iMi2ojeee3Z zsh{6nlg%97OOd}f(}Ccd^BsimytZyPJl4s7E_;oUe67`qR_f&B @xDw%YTOh zbZ~Sup!)3VY(ZHWrWpnX#sgwRl72~vtKIzZ;lAzf#z4f~-5sIu$+fjo?kw)beTsQ% zz;0o$g(EnZ)Oxk4F#=N*jF?ND%#J8kJu>KK_dBITE;+))+U%^BTjGn{7w*=6^9Kgc zyVN*Z+r>Iu*KnWRm1n|)EwA1rH|9nPI5~qlYFb5@U&KJC15Vw>(>U$y?A+in@)a9i zw|@^tLG}JQ-wnW=er>eKhu07rVz_7(qPh&|aO$_K9AgBB$b9BKmY$~6=4q~{@7!W8 z2mYN~*`2(zQps$z)xNTifZ`pM$cTbeoE}+`P3}Fc&Ue)L`@VdV2k+F!XFadG zy>a^RW0{`gcps 23lRu{ZwE-08KR0J!INKS-R{;hbsCx7uf_ zZhy08_p&oFEzSGkSJ&Ue%Gx}?({?gvPQ5x5y$9r;BxE ##RyS z{r7Q9%RH5@aIp>sVeH)nI=yK;8h=aU-EvXhgNZ)z+9qhDA;`m0E~2l&5YN#>G>`yU z3R=4{*BuFJITMq*-9NkcvPV=8z}9Ct<0p=@#T}yCd!r;vzB*;FZ+TsxuFBE)n2RI2 zPdkpja9R=mq25#erL08(mcsxA_^zHM2ckjlqoExNK+_nT<3OaW1V%>(M_^t_HgjDd zXn8ZA``KL2NsHTMXp`< zkhz$+jxr&R9R@X0n2m@a{+sz0jk;Ht&ka7LOR&{?P){`2>)0Kc+CSE{r+d8gMDTky zXq8QlXQX3Z<6EiScp}8D@o?+9=FNUscI#iyzl)xNeWl<#9E1fxZ&E6ztp79Pz0~ zvx2~#m=jv*0&i-YX(yJVp(0A~N=A+jH+nCu7YK{2`bVkjy4>HFsQxF@r5F0cA{h^3 zYG9TllyAGwmiwB%+6WbZXhei&hwT}PteOTGLI+-t@J2(uHIQ-Q+B+x_PpIF%%Pq2R zJthEmxJ^&%^ES;HM?C!X+Qn$7ggNH!KYAT1yvCZu8SNX;6q^R>cN?ksW8CqMw zas7xhS6q>`H)10qKk&iF`=@YCiBkIJ(NeRWU%OsA)7Z9H(FeH&Rg#ONCV*9ms_NUX z^z8Tc1aNzKs2F%=2^UPx+KaoHPg8Sr9*|mPj!mK4pJV4P|JDv*={9%tb$R5-$`d|` z)MRNi3Hb9VoTje(yN0yF78yj~K!LSgn*?Hf6Q@a5=4j|{`uMQAYTP}p!wx>88>-c? zn9Y$j%U$g-enECPo!kC*RIbF)xQ+JkAg|>G(o>IeE|w{`@#{u)t4Q$DUj68}`zc5D zv8YXUx653gxD98(;Yw SXF+t)(2kQ)^&`7kDwhw)PN=?{8{tZGH5+8hU@~mHt{kq~GlUd4o6*hxtr1#EZ?& z%{4l2^nYY_o8(^rf*#O>Er0^=fruvHu;l*tr`* 5!fubEhTFH)N*87eouvIYBj