From 2e61fc298629faf4189d8958d973d85bc3acd027 Mon Sep 17 00:00:00 2001 From: sockmaster27 <61235930+sockmaster27@users.noreply.github.com> Date: Thu, 31 Oct 2024 12:52:58 +0100 Subject: [PATCH] Add tests using Svelte 5 compiler --- package-lock.json | 151 ++++++++++++++++++ package.json | 16 +- .../src/routes/remount/webgl/+page.svelte | 7 + packages/tests-svelte4/vite.config.js | 4 + packages/tests-svelte5/package.json | 23 +++ packages/tests-svelte5/src/app.d.ts | 13 ++ packages/tests-svelte5/src/app.html | 12 ++ .../src/routes/+layout.server.js | 1 + .../tests-svelte5/src/routes/+page.svelte | 9 ++ .../src/routes/hello-world/+page.svelte | 4 + .../src/routes/hello-world/webgl/+page.svelte | 22 +++ .../src/routes/hello-world/webgl/shader.frag | 13 ++ .../routes/hello-world/webgpu/+page.svelte | 24 +++ .../src/routes/hello-world/webgpu/shader.wgsl | 9 ++ .../routes/landing-page-bubbles/+page.svelte | 4 + .../landing-page-bubbles/webgl/+page.svelte | 98 ++++++++++++ .../landing-page-bubbles/webgl/shader.frag | 64 ++++++++ .../landing-page-bubbles/webgpu/+page.svelte | 97 +++++++++++ .../landing-page-bubbles/webgpu/shader.wgsl | 56 +++++++ .../src/routes/landing-page-halo/+page.svelte | 4 + .../landing-page-halo/webgl/+page.svelte | 73 +++++++++ .../landing-page-halo/webgl/shader.frag | 69 ++++++++ .../landing-page-halo/webgpu/+page.svelte | 75 +++++++++ .../landing-page-halo/webgpu/shader.wgsl | 66 ++++++++ .../src/routes/logo/+page.svelte | 4 + .../src/routes/logo/logoDark.png | Bin 0 -> 3899 bytes .../src/routes/logo/webgl/+page.svelte | 87 ++++++++++ .../src/routes/logo/webgl/shader.frag | 82 ++++++++++ .../src/routes/logo/webgpu/+page.svelte | 90 +++++++++++ .../src/routes/logo/webgpu/shader.wgsl | 75 +++++++++ .../src/routes/oversized-canvas/+page.svelte | 4 + .../oversized-canvas/webgl/+page.svelte | 22 +++ .../routes/oversized-canvas/webgl/shader.frag | 13 ++ .../oversized-canvas/webgpu/+page.svelte | 24 +++ .../oversized-canvas/webgpu/shader.wgsl | 9 ++ .../src/routes/remount/+page.svelte | 4 + .../src/routes/remount/webgl/+page.svelte | 28 ++++ .../src/routes/remount/webgl/shader.frag | 13 ++ .../src/routes/remount/webgpu/+page.svelte | 30 ++++ .../src/routes/remount/webgpu/shader.wgsl | 9 ++ .../src/routes/slider/+page.svelte | 4 + .../src/routes/slider/webgl/+page.svelte | 78 +++++++++ .../src/routes/slider/webgl/shader.frag | 63 ++++++++ .../src/routes/slider/webgpu/+page.svelte | 81 ++++++++++ .../src/routes/slider/webgpu/shader.wgsl | 59 +++++++ packages/tests-svelte5/static/favicon.png | Bin 0 -> 1571 bytes packages/tests-svelte5/svelte.config.js | 10 ++ packages/tests-svelte5/tsconfig.json | 13 ++ packages/tests-svelte5/vite.config.js | 10 ++ playwright.config.ts | 17 +- .../svelte4.spec.ts/hello-world-webgl.png | Bin 35642 -> 0 bytes .../svelte4.spec.ts/hello-world-webgpu.png | Bin 4471 -> 0 bytes .../landing-page-bubbles-webgl.png | Bin 93509 -> 0 bytes .../landing-page-bubbles-webgpu.png | Bin 66392 -> 0 bytes .../landing-page-halo-webgl.png | Bin 680457 -> 0 bytes .../landing-page-halo-webgpu.png | Bin 575936 -> 0 bytes .../svelte4.spec.ts/logo-webgl.png | Bin 125521 -> 0 bytes .../svelte4.spec.ts/logo-webgpu.png | Bin 71617 -> 0 bytes .../oversized-canvas-webgl-1.png | Bin 40591 -> 0 bytes .../oversized-canvas-webgl-2.png | Bin 44860 -> 0 bytes .../oversized-canvas-webgpu-1.png | Bin 4422 -> 0 bytes .../svelte4.spec.ts/remount-webgl-2.png | Bin 36827 -> 0 bytes .../svelte4.spec.ts/remount-webgpu-2.png | Bin 5342 -> 0 bytes .../svelte4.spec.ts/slider-webgl-1.png | Bin 21948 -> 0 bytes .../svelte4.spec.ts/slider-webgl-2.png | Bin 22037 -> 0 bytes .../svelte4.spec.ts/slider-webgl-3.png | Bin 21357 -> 0 bytes .../svelte4.spec.ts/slider-webgpu-1.png | Bin 8672 -> 0 bytes .../svelte4.spec.ts/slider-webgpu-2.png | Bin 9163 -> 0 bytes .../svelte4.spec.ts/slider-webgpu-3.png | Bin 7696 -> 0 bytes .../test-sites.spec.ts/hello-world-webgl.png | Bin 0 -> 32767 bytes .../hello-world-webgpu-unsupported.png | Bin .../test-sites.spec.ts/hello-world-webgpu.png | Bin 0 -> 4465 bytes .../landing-page-bubbles-webgl.png | Bin 0 -> 93436 bytes ...anding-page-bubbles-webgpu-unsupported.png | Bin .../landing-page-bubbles-webgpu.png | Bin 0 -> 66435 bytes .../landing-page-halo-webgl.png | Bin 0 -> 681596 bytes .../landing-page-halo-webgpu-unsupported.png | Bin .../landing-page-halo-webgpu.png | Bin 0 -> 576851 bytes .../test-sites.spec.ts/logo-webgl.png | Bin 0 -> 123711 bytes .../logo-webgpu-unsupported.png | Bin .../test-sites.spec.ts/logo-webgpu.png | Bin 0 -> 70983 bytes .../oversized-canvas-webgl-1.png | Bin 0 -> 4432 bytes .../oversized-canvas-webgl-2.png | Bin 0 -> 43129 bytes .../oversized-canvas-webgpu-1.png | Bin 0 -> 4429 bytes .../oversized-canvas-webgpu-2.png | Bin 4427 -> 4434 bytes .../oversized-canvas-webgpu-unsupported-1.png | Bin .../oversized-canvas-webgpu-unsupported-2.png | Bin .../remount-webgl-1.png | Bin .../test-sites.spec.ts/remount-webgl-2.png | Bin 0 -> 34972 bytes .../remount-webgpu-1.png | Bin 5086 -> 5077 bytes .../test-sites.spec.ts/remount-webgpu-2.png | Bin 0 -> 5460 bytes .../remount-webgpu-unsupported-1.png | Bin .../remount-webgpu-unsupported-2.png | Bin .../test-sites.spec.ts/slider-webgl-1.png | Bin 0 -> 22514 bytes .../test-sites.spec.ts/slider-webgl-2.png | Bin 0 -> 23013 bytes .../test-sites.spec.ts/slider-webgl-3.png | Bin 0 -> 21362 bytes .../test-sites.spec.ts/slider-webgpu-1.png | Bin 0 -> 8659 bytes .../test-sites.spec.ts/slider-webgpu-2.png | Bin 0 -> 9192 bytes .../test-sites.spec.ts/slider-webgpu-3.png | Bin 0 -> 7719 bytes .../slider-webgpu-unsupported-1.png | Bin .../slider-webgpu-unsupported-2.png | Bin .../slider-webgpu-unsupported-3.png | Bin tests/svelte4.spec.ts | 121 -------------- tests/test-sites.spec.ts | 140 ++++++++++++++++ 104 files changed, 1872 insertions(+), 132 deletions(-) create mode 100644 packages/tests-svelte5/package.json create mode 100644 packages/tests-svelte5/src/app.d.ts create mode 100644 packages/tests-svelte5/src/app.html create mode 100644 packages/tests-svelte5/src/routes/+layout.server.js create mode 100644 packages/tests-svelte5/src/routes/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/hello-world/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/hello-world/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/hello-world/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/hello-world/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/hello-world/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/landing-page-bubbles/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-bubbles/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-bubbles/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/landing-page-bubbles/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-bubbles/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/landing-page-halo/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-halo/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-halo/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/landing-page-halo/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/landing-page-halo/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/logo/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/logo/logoDark.png create mode 100644 packages/tests-svelte5/src/routes/logo/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/logo/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/logo/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/logo/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/oversized-canvas/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/oversized-canvas/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/oversized-canvas/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/oversized-canvas/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/oversized-canvas/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/remount/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/remount/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/remount/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/remount/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/remount/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/src/routes/slider/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/slider/webgl/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/slider/webgl/shader.frag create mode 100644 packages/tests-svelte5/src/routes/slider/webgpu/+page.svelte create mode 100644 packages/tests-svelte5/src/routes/slider/webgpu/shader.wgsl create mode 100644 packages/tests-svelte5/static/favicon.png create mode 100644 packages/tests-svelte5/svelte.config.js create mode 100644 packages/tests-svelte5/tsconfig.json create mode 100644 packages/tests-svelte5/vite.config.js delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/hello-world-webgl.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/hello-world-webgpu.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/landing-page-bubbles-webgl.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/landing-page-bubbles-webgpu.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/landing-page-halo-webgl.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/landing-page-halo-webgpu.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/logo-webgl.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/logo-webgpu.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/oversized-canvas-webgl-1.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/oversized-canvas-webgl-2.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/oversized-canvas-webgpu-1.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/remount-webgl-2.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/remount-webgpu-2.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgl-1.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgl-2.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgl-3.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgpu-1.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgpu-2.png delete mode 100644 tests/.generated-screenshots/svelte4.spec.ts/slider-webgpu-3.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/hello-world-webgl.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/hello-world-webgpu-unsupported.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/hello-world-webgpu.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/landing-page-bubbles-webgl.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/landing-page-bubbles-webgpu-unsupported.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/landing-page-bubbles-webgpu.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/landing-page-halo-webgl.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/landing-page-halo-webgpu-unsupported.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/landing-page-halo-webgpu.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/logo-webgl.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/logo-webgpu-unsupported.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/logo-webgpu.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/oversized-canvas-webgl-1.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/oversized-canvas-webgl-2.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/oversized-canvas-webgpu-1.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/oversized-canvas-webgpu-2.png (56%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/oversized-canvas-webgpu-unsupported-1.png (100%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/oversized-canvas-webgpu-unsupported-2.png (100%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/remount-webgl-1.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/remount-webgl-2.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/remount-webgpu-1.png (68%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/remount-webgpu-2.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/remount-webgpu-unsupported-1.png (100%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/remount-webgpu-unsupported-2.png (100%) create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgl-1.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgl-2.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgl-3.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgpu-1.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgpu-2.png create mode 100644 tests/.generated-screenshots/test-sites.spec.ts/slider-webgpu-3.png rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/slider-webgpu-unsupported-1.png (100%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/slider-webgpu-unsupported-2.png (100%) rename tests/.generated-screenshots/{svelte4.spec.ts => test-sites.spec.ts}/slider-webgpu-unsupported-3.png (100%) delete mode 100644 tests/svelte4.spec.ts create mode 100644 tests/test-sites.spec.ts diff --git a/package-lock.json b/package-lock.json index 5b38e4f..e5ab536 100644 --- a/package-lock.json +++ b/package-lock.json @@ -881,6 +881,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1134,6 +1144,17 @@ "dev": true, "license": "MIT" }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -2128,6 +2149,10 @@ "resolved": "packages/tests-svelte4", "link": true }, + "node_modules/tests-svelte5": { + "resolved": "packages/tests-svelte5", + "link": true + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -2272,6 +2297,13 @@ "dev": true, "license": "ISC" }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true, + "license": "MIT" + }, "packages/svader": { "version": "0.4.1", "license": "MIT", @@ -2324,6 +2356,125 @@ "svelte": "^4.0.0 || ^5.0.0-next.0", "typescript": ">=5.0.0" } + }, + "packages/tests-svelte5": { + "devDependencies": { + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^5.0.11" + } + }, + "packages/tests-svelte5/node_modules/@sveltejs/vite-plugin-svelte": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.0.tgz", + "integrity": "sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", + "debug": "^4.3.7", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.12", + "vitefu": "^1.0.3" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "packages/tests-svelte5/node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", + "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "packages/tests-svelte5/node_modules/svelte": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.1.6.tgz", + "integrity": "sha512-bYS/DpkqXk0j5UZgiNXrEjZYPRZ4Ncd87w4KUSbcZGyojA0+i/Ls9OGUjETHmdLe8RcQ0G8SX/T0PypPpAA/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "packages/tests-svelte5/node_modules/svelte-check": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.0.5.tgz", + "integrity": "sha512-icBTBZ3ibBaywbXUat3cK6hB5Du+Kq9Z8CRuyLmm64XIe2/r+lQcbuBx/IQgsbrC+kT2jQ0weVpZSSRIPwB6jQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "packages/tests-svelte5/node_modules/vitefu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.3.tgz", + "integrity": "sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index ee9078d..5492f31 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,18 @@ "scripts": { "package": "cd packages/svader && npm run package", "dev:v4": "npm run package && cd packages/tests-svelte4 && npm run dev", - "preview:v4": "npm run package && cd packages/tests-svelte4 && npm run preview", - "check": "npm run package && npm run check:formatting && npm run check:svader && npm run check:tests-svelte4", + "dev:v5": "npm run package && cd packages/tests-svelte5 && npm run dev", + "preview:v4": "cd packages/tests-svelte4 && npm run preview", + "preview:v5": "cd packages/tests-svelte5 && npm run preview", + "check": "npm run package && npm run check:formatting && npm run check:svader && npm run check:v4 && npm run check:v5", "check:formatting": "prettier . --check", "check:svader": "cd packages/svader && npm run check", - "check:tests-svelte4": "cd packages/tests-svelte4 && npm run check", - "build": "npm run package && npm run build:tests-svelte4", - "build:tests-svelte4": "cd packages/tests-svelte4 && npm run build", - "test": "playwright test" + "check:v4": "cd packages/tests-svelte4 && npm run check", + "check:v5": "cd packages/tests-svelte5 && npm run check", + "build": "npm run package && npm run build:v4 && npm run build:v5", + "build:v4": "cd packages/tests-svelte4 && npm run build", + "build:v5": "cd packages/tests-svelte5 && npm run build", + "test": "npm run package && playwright test" }, "devDependencies": { "@playwright/test": "^1.48.1", diff --git a/packages/tests-svelte4/src/routes/remount/webgl/+page.svelte b/packages/tests-svelte4/src/routes/remount/webgl/+page.svelte index e556fc8..42fd42e 100644 --- a/packages/tests-svelte4/src/routes/remount/webgl/+page.svelte +++ b/packages/tests-svelte4/src/routes/remount/webgl/+page.svelte @@ -3,6 +3,13 @@ import shaderCode from "./shader.frag?raw"; let show = true; + // async function f() { + // while (true) { + // show = !show; + // await new Promise(resolve => requestIdleCallback(resolve)); + // } + // } + // if (typeof window !== "undefined") f(); diff --git a/packages/tests-svelte4/vite.config.js b/packages/tests-svelte4/vite.config.js index 4a79a4b..1fdf1ca 100644 --- a/packages/tests-svelte4/vite.config.js +++ b/packages/tests-svelte4/vite.config.js @@ -3,4 +3,8 @@ import { defineConfig } from "vite"; export default defineConfig({ plugins: [sveltekit()], + preview: { + port: 4173, + strictPort: true, + }, }); diff --git a/packages/tests-svelte5/package.json b/packages/tests-svelte5/package.json new file mode 100644 index 0000000..bb3cc0e --- /dev/null +++ b/packages/tests-svelte5/package.json @@ -0,0 +1,23 @@ +{ + "name": "tests-svelte5", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite build && vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "typescript": "^5.0.0", + "vite": "^5.0.11" + }, + "svelte": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module" +} diff --git a/packages/tests-svelte5/src/app.d.ts b/packages/tests-svelte5/src/app.d.ts new file mode 100644 index 0000000..c7c0ed1 --- /dev/null +++ b/packages/tests-svelte5/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/packages/tests-svelte5/src/app.html b/packages/tests-svelte5/src/app.html new file mode 100644 index 0000000..faf2db7 --- /dev/null +++ b/packages/tests-svelte5/src/app.html @@ -0,0 +1,12 @@ + + +
+ + + + %sveltekit.head% + + +D(rF(`-4*AKi;9@`vsZDj6&>ca_5i{2>l z!xOWbKjdZ4_;6zDS~ew~W%0|n9y_cy4?yOMK#t*zFpKVHFfwuA6p0H~rd_n)-J|U8 z&dEHBB~k`FolrunxKGx*e_!?#nI4x#ZVdPw=S)>^gU`Vh{KMy9mHo}K+ zh=l~2Co)sc^*L=08A;>PH&f~b-qoA58}rSZR-acCvDNNCyb?Yo4Q@vSq1$m()_b@f zdnvwe6&vmwEK-c7?1R1T3o4bxjVvux1sz=2`Gd6{=IR*Wsxi`4@1->> eoQ^T3ZBk0DZ!zHAT^AUqb!*JyDC91GLJ^emaVMy2dAukwRV?^ zIdq4r?}#+3_Rl<8!-+1Kk#U=fYa5ff8?$#Auy+( %n`h50!Y+&M0Wbq&!3^BIGG6woncCQnH+!@r z-|U`l#Vg;)KjOa7wmLe&!?Vd@ajNpDM^b{|M?t!@`yzKopn}|;$e=sD?)!|&q2lsv zHwKkVrG#5|#w%d1$^%z@fUE4Sk_z3HQMMbRiYpoVVTavKy*8M>=QvhJ`@NFjX1z5y zgE49y07|(e&|r)8gFGp_$R;F69Z@GTG?dayto5xZ*Ur4?#)aU>$L7}_E&q)wZ0Tb? z6SH>?uy-(GZzDX~eX=kA806>FC5x*@_OW=~l2F_9Ng6*Cawy5;X*(Bva`|;nMuI1M z-2!>CAquk^JIqCa0+ls`%QG9ypJD2;@`9efxipomcyi-{o>QY2f?ZDqpJ$Dkztq#o z!9%@VZk<@+GWX~dZTl;n4E~wK#{8n$X{||M-u+%maC2FPQTV<*bl)d|_g2Au4Xk?I zcQf@nRai6g3Nk&-vvi8~V_66Qu4)5UWoPg3)z~eelK1@K{%(jIir1cbc$XiUc3EXB z`&wgudXt!1O`q|rFh&X}LJ*ScVxjBSc$!1 hL% 4YSyCPOcfRc4MezySaZ|MtX~wnoxSYIlk{Rr2cC}>c1xZVlUe> zlbTL#Y#Lb{o(No3II(da<|^{mt^il1Lg%E*-`pNpQ(twv+gv4WnwtB2c}ZUBlOI!M zEqJxVTv@@+{f4pe6W}1P-SHK%6Wy$-Rpf)&8v^W|jM&SENBiRT)uT79x`I|JUviFV zTf30gBaO39$$D>zP-6}2u>)1(KriZw^rB7Q!F-({6pu-II}8ji$)9Wc0J%vI$H|Hd zjP#U?d#wAAyTb|-)2hk*=wWWGU>E6OG ueck{2^v%d7`q*b_Plp44}iYl*8C*B#vN&Z;j zDI+dWRaQQR@7eDMP-**CCRLf{oA?}zE lB%LL zJY$dMKlgWI6;=z^j>J;G1z4h&F-f)^%u(FMCeai1T3LWZ*vkw;hxMAS*V^AIuGDV+ zz1^(%(jZCiEk3=(NC~)eTf`mfOWEO_7GT2%E%p)LJ-wwg&$RVbV0LP2q8@}JqPQ|h zCrQ?uKghTlv-i+=kVBIw`-@Rg!=0+V3R1gNxoWqbYIrf^oki(0(@yQKB+6uQ!KG=z zt~BF=BvL3*7AaemUTLww(tYs?C(nXwfi-cz*hZt^=b@RyN6w7sn-TS5amCdc3ozI> z5ZK#SsI~^qs2j2FU~5a4yIJ>{%U3mxe2QK}+}L0{OuG@$hN!aX1|$gzs(<3=BI%NY zoYA=B?OC;xo79U{Af{Ys>#>MUwJC%OX^O)DG~78;^cEUwlr9!P0D_zZ4`cy7!bRfc zT7<+a!KjyFTngfK8pLbNv44oy-}TLMVD{UOYgI6_mm+2-O(J$o)M_ZYMbHNKn(a#F zn4ITRLO1VtS*+~FfnyT(tH^{EU7uT*-Q_iwnTwxIY|8oMGv21usy`~N#6Q^rXl8>m zM3NPm&Y_&O=M){lZ{iSG>ZMVPI(>() YCJXT>#Ke}t7fiRB#3XCfo zm6qZA9!K{j3}LEMz^B?x_o?I%#wN@dSJW#l!8G}ZCh(O6<3 _#TX!$FR{4#bbe zax9H7He$y3Wx3KKOj8`3dSk-uo*{=Cq^?(V1k3SGgz;HMjK>b*Y{wX@{Q?;8B*fUA zrT${HwK4v|{Sn52UxD%Sr%DU(@wsqcKf)kpbqXbKe oa3qR;V-&)3ib~ zfv+TT9L1r0H5L^G_Fyddh%S6kl(hX)6cf_ Q`r#1@$QvmfjYtnaY0+`=5S+3X1ZVI6d)s?WNdz# zMtlhnKMBMMlGUO2qy*b4Cz@e5JNQ?y^An62Qyw9$0ws0)o5zBR8ce8?pMogQT2gcj zi}HO4Z`%e!V30IkRvqrw^6JN8)7fn`rHV}-kaIJW+WI=VpsnpxV#(6bY%5B=VVl85 z>=!LS!Dg$d5LPGEP}GiUL*SZprLA+QdZBHFD4!( KRKW8V&!J+a*pTsK1#`mn?rNVR7ACvSe5TXxI;b z8MtDYcca8|BcqbDD_oO#2cKFeTbNi1>3@<+hLkHyz3r62R(yH^qWMll^GkUIUrmFe zAk3LY;A=8jHq0_dN>FWVAx1Mp`tSn0W67W29KDIfIDZ#x2@H-Pdw!O8r34@REPkR9 zUjW4ILFSr`C{NYYWD*Q~AR7gE1 z>pfJNJqI&OZZxR(lgvp4R{8`peCqBH5a}8+k=_qUg)NOTwCr#Py1N@=QlZ^=sWX;~ zAwL0!yTVq+q{3}TDrmU(r(xs*nrcUi{lpkBVyw-*j2P5Tp+cB;EpYbvsPk{~cow2e z;Hc9Z^>NN z b(BK;#gFSc|NTw*lJbWG6h9` zFiI6ce?#Kp1tShVO>Q+yzR_~pz}90mn+h}HZpTV4XDO&gK@7QG_Dxqdqp??}FwwG> ztU)5EK}@Z--}qm#f76b1WUWX?eyRPWu&!~fGCs8i?9c|VLnO5}H#T)Mi+h81-^Fm> zlcJpRmuhWs#n0(EqFmsrDT-s5{rlAIvfk@`)ZSvnR;2{$P@lZk#*Izz_rUDEh1d&^ zmZa9E0<|`m0mIaA3}pm*v9BYe<0*7>j30 A z*V-z}*UDn9ZUe5W5PBCyQUZZP@FA=Y9fyKC4E~B*+r8@< L^H0byJfu U4@ndnz=NRVToASU)vfqi-=NVMJZ1~i#Gk|}Y-lAd& &UppR+=7d~4nXe;JL1sFWK{^+$|OI*!Gz1q?zXPwkQjC|-~glZJKMBGsg^H6QC zgZ@UR-! )2?ag%7|b6cp1`u_V)4pF<>Zi3j6&lT2v$zZ|*eg zaY#=3fkcY2DNDYt&g{CWtxq;wxX_TCA8q3EBX2`E++csn(U&b3)+?k!rOU&YUYt3k z3}8QwvVRyG 8|5;gz;~T7|S_+l$nHIeJWr)jm&PA7D@?H z^(G|K+&5%5|M&`wH6qxDY4`mv+!q>Oh%km8)5>W9udy88>IWEyGh;l(hrNwPb289; zK!`C^R$InodSW?VhA>{lh;guevy3vv_zhsZoKTMMO9|dYOc;rOa6g3cfUm%Kj2?Rp zK3)Z_bUG+TB?w|{-$-yftpXIVqp%iX?8J=maAkV8lpJI}bim0Xk>kXAF*|`q=ARhj zpAg1V88MdIQcrIR8wwcv6UuR}lwfGziS8IAedG^aFd^3!{VP?c;Nx i!sK15XSSFF=nN!j-k;U3p7!1N|0SjY! Z33F7@<0p zMiT;Jof4o)&_uBb$}x_A()%i_QKdj;1$ob4qmL?!MjUzsbg~FRu9YY|caz>xdLNYx zOhhGvFLtzLLGSD+{BlvOXoZ|eg1$^GHsy2t>_+UBaP5&trOTKnHS#Q{_v>y!Gzldc zn6V{&q81LGg3;8=IpfbH@%|-om*w$7hSpDq!l*E$st9`820?`pQunkrX_UGTlcur< ziI+eVyhIi>DeiK+-Ar%aFzxUi*__s#oZFgQ3TYyRf&ZSs|BT}uvO)ify*5mSNK<_k zBQ`GX@jkhm!Tmi9jVn5X9<02!YG#stsrQ18XVCtaHW<3{(9DjSxni4wXF |W<|ix_sK21EJ7Y?D?x1Bq _7@bUp ze8e0Mxu@`K@Y0`g#o!Ql3Z 0)d&8ZJPs`o^tHYetkvI{SM7}ln0V0#qFQp%ptShB{ZSMmb2hc01GDZj2?I~H?w zJ#h6I@`aekH*{`E2` 2&Q0j@-l8-Nk%g(3Ab GsNAcKN#(3 CmbDx{ ~fZvfnvut2H|o!SkQ zH5 FrZChT|+bp-CoFQ33=P&hhwcd8ezPO5o1Y(UIS;bfUy)I#?4}J zbwe{ZW033-#=m|A##z<$Njpu5R%gPyC6VI@DA9b7w${QJPeB-;XU6#cbAyxkC-V?Z z=xZR6W5~`5J@&-YGCw~cjF&NDd^UuCiyj>S#>)vYhM(3pkv_8d3&Qx9ufX{3LxW&^ z-&S;A!al+X(8rx}^jX#62;<|-7~jb-2*5NY!O@=y!a{;ER2k&$eCZ>(C|nIQWW;!Z zd`cgTF&BEvJkXRW!8~GiqnO>TIhiN$50*g~Px=asZzLHUz{hu^`x1J-HjrZ~A7{NB z%P|^U);r9MvEZV?9!&ENq6tcm1Y@X{$vXtZt6*L60cBlBFlN)$JI@>J#55(r2B0b) zK>*h-&!+kw58sHjIhTj{I*;5jQ*S?I;EjndK*R~B!z-atyGG605`&z8g5)2W)9DGJ zNw@IE3~n$;l?6x@!R)e5wv=E^#Ke)btgAVMa1)j==6d``CGDiqgwab61wu(~5wm-` zB{K`7RDoLfYL=5{A{;`m&Z7}O3B)%c;>>fOp4()-#j}@R!2^nFmr+~B3C1{Cy=j|) z9sbP=!0Z(eHV{gID7&4EpNU2JFC@w}CTOhjOGRY$1~+;i`ffxMJz3`Vw)USOg@5AQ zMx&mT822|M%IaSs%5S$A{Ejbt2N5Uqk!7K`yIJ4b1&eY6oHm_F&C-%~ZR>8rPyAaG zzU2q4&4ry$>K4`3dBQ+4bl8NnTvej&S+PP1jZVa g8c67F)?F`GMj#X zrwuzl+)u}AVXXH;N;}exG{~@oZ11hg$)|8-SZ)$T-1VY}yYAW#zFkw1Gtao`$mhzb zmcm+}(qg>2z^-arW(5Xq-G2%bW1*9mB!k0l5VNZg4=Tjr%>mR%)5x5MyxS1K$Kk6X zl!Yx(nUtWM#)h|8Gc2eK)09Ru>luSzdDoD5T8B~+V5~yc73jH3*4trJ68-zzbYs zN&fs_8ZCFGJ>VpG{z`<;KU~(^KeU(T3PxE_OUC5|J_^0+Va^ck?<36N1j>3RjJihG z&;dYmjELr!np;1!NyZYDNeN1pk^d8$WbP661wu#aH`^rh3iTy1S1dpN`t3H!+#{P_ z^F01Put_F}(CLM~>TkA5CYMl*VF%Z@+9VTBRufKxMucy^NydP1nE2SY+a%-BpUfLe zgGQ5YwMpg$St_y=YJ%T y-CJ{Md(r_{&SN|oNZ_+ zjD@O|y{?48Pnds-?(DrGG4`XvOrh6nm+&T+H0a@Ik)xbpl?| ~4A5(L@7npAGHTFz=^!-4RksQ6kP3E| zq%ZH;3`Gbx!XktRY^KoCF4}`DHpmTI8pjxg$vO8Kriy)gPehZ@MezK>%8@TF30 0`8kcs9kr!W{O$5^z~Oq z5XRAr7zaCc$k5U*F+fv;up&H$O(mb`wdG46r4v>%rW59*vro}5RsoC&R~-33zSDhY z{74LvJi>S-ImW>btunM-3t4bqSPnpB!N!6d!{RtRw5@vpVSIrRV>yTSG86DmE z>F|D(pj zBHD 0ZqVU+q6;rzOrmFb)yU99aSqU|M)zdy zZSaEKy>o1OP1AD_Uzd_MnHqUj$&AK=yc7{96yyZhOQC5<-y bUtf&772*koOWUEz! z9vbcNg*AIOVCS7^MsS3d>+5&N+6ts88|{sI@fuRW??@oT0{44@FI`yJ^ c*2LRiC5MuNK@%2 z&I#!?3y5dti82}gm<0VH?VppNGvUhbQ $8~*C z;=%s8cU?SOEZbYUzq}z$`6%`(nyiB#uoEqj+~x^OBpWXmn5?LDiAIas8}qxzebeh! zJktCKdq-_%+wDDwUx7Ywd2ZU*OoD!9dr*J$2;V~xscCV>bcACRT1P*7$C-puH-5OH zjr%LuJ5(K=_FAIsv9juQnp~r<$TCsQ0&l+$&6|m4jZH=JwL3^8Uu9b|^RawYK)J%N z4&>|ZKjrK1UqH~}P+1=3^nnYsI@8C4T<3gdFZ^3Vodb(>Kff9teemIno3#JA5B??L z7CLvhuxAy0qz0{z^x4Yj6NY6iYsNjYYJ4bHK%tqW=wAxunbze&6gFnks28)0ycg3h zXKCgY8iQe3k{|5%AgM>`z&KlnRZu@n`~Yf Ers4*{Ql6pCF5oE0yj1ou{k!6D2bNz@2hCGr)%v=r1%Foiy6I2HOR!=O4tvgl8l zL#>nN&%>e3$uzj{8s@(E&gJxR%ALSfJ+f6R?a)RvH;Z!vW0Ye7?#bw{Sb_D%hdxKD z4`UC0gjH48&9C;VUdafX1U@neZy6(-!ZvAZ9efH!HcJUzKnFHuWn?La-+az$xG%-{ zS%bKSp_$HD7VLqmW66rD9Z*!&Nbfa}j7+cVSM ccerN8BZ}_;D*7AtL zx1k~v%Q%+b2?5BtVZmIi*c?%*JdRu!$Gv<@@AZra_TD5cslxYC?rUz}`)7}Lp{oOW z@g{R$d^2QO_u^BiHAtPT7}W_8X52LTc4tSl>fsz?Yk<(%HGU}e9H#?U Fh1Q-Zg|SMGMRe9q-jG?GJj9#r# wnOCgCqD{jF{=lA?WC2|mFjba154Ak0F6#X6EjmH%8i z;-Qax66nog_}oP&1e-=S^d0znkX$TU$rO5VpN=sUVC}{O4da9Qi3pmRY#`;Sa6(8! z8SSn*w~E}?JbV25E!@_3@)*1WJF@yt$9`GwXGX?9(?6>Ks^*8NFDDcriLhJY`c4|n zP@t(s`1T+#>zS^sg&q34$nUFJ!H98wf5S@{V@>F~f{(EgVLX#fX`Kk&IKQW1Y&81d z(F9X+j29>f`q1th0rwq3h;g#4xAx#A%^2fDXvEeek`d$a$J6Lr<0643mk?v{(PES* z9K#s*Lm2O4#yICKeK}q$!Wdaf0y#E@5|rX8A?+h5dPt5}kYijCl1kqSm;m?HCBzuM z%6L3`$rajCKr~4laDfryJMz88C=-DuO#YFymv%y(ti)$R8^%~4g%FdNG0rTaPm5lY z5++uztE=6zrtYF%?EYe_&_Me|qK^;iiYup?b=IZ1+oY!3%ywwDJ=kIHZ{FbtZ`PPT ztvci<^kzkO9qv&*-A;4n?{XFq ql7J=zM;y=&PM0sjTj=+`*RLzpq8#*6xwmd9U9JT8}yQuTr3?@co70Y@D*|S=fcd zP vG+ZHDbv@bX7T=9{uu>i!eYhkEBcJmQkNM*`JH%08$a(6 z%@w*-)Niy*eUB3K?bAmPW}|^WIe_DoABRwp!8rZg!`f|QS*-f1)kZk9?)lKr_v`fg z&K q z10>#UkhjVI%@{7b?HU8ahnE%qV}W)w?EiMB7H9`UO*0b@(8i|0Kr(_|qJ9DBEESCd zqa w ViO+z(>e; z7#8qnG-%-o2*dz-q$sEFXTF_}-D1#p()STEUc;bNHJ(cvP#-HT@a{8}b;9LG-;!=3 zYq3+J05K 3Tqce1-(#@2b@q6<61#Wc`q0*HWNyhfh~cb2=qUGSZDe~k zVCOy-t<9Z?aXF5u &Mjk$KUX7$=t=#8(>quU!V=0$>vH<#b&t&Nxpudu5tqLj zrq1be%n+s&66B0Pv{_Uu_jAeCn%OG9Z;A-0V$lPL7k=LHo7sle4gNOkfW~~2Qct%9 z1E@TE1Cl264S~nW4K@G5b{KN1YqZ%nZ>o3ueAw(i-bg5doRATq7U$ZmVGHQU{U|bD zV(|WKashbnPsaVg?AiOh6K ^O0s@Z2Q_AUqn>{4u;3%q0U-<3G8Jj zniF1>5qB($Jk7l+)hPZrISh 4&H7ff6u)VcomqS%#x zu*9$w1~w`CW)TzZd7JY-dc@$Eqpjttm VZcGlL AuQNoJY-l*|v LoYgAz7i9X&IO4F4Wn{zA$E9NZVm%H$9YS#eU9LU37p%|qpcZq?MOX2mSI{RY zu-_`EF*bg}ajTAJ*mWm!q{G_~4$BV(RF~{taC2pqH0vfi@Xuhjw2fUmj!!;DG2hn} z0_4TSzJFggBw2}S;H)6CMxqrj;;daMNrjvQ4Brn0Rn-3$NKRDe%&%i&as>JBqbg&W zQUsB<{oq?x{AU%s8WoIY)Y;OlxwBClKh1qfkwrNDV2b1YwWZcbu9SkP*kHP2P|&+M z_iO2{Xye?r&L*QB;LRMbQ7S^iBbQCzwOY@D%Nkq6*ql;fEJ_yNs5ry3@l`3;`I)M8 zW`Yz^&mfbL_NRR=HkPH98qNxW;DArc&EqZYyPOb9;uH-2?E{`l->$14+efpQK`bX? zOI>NR)5E%MQB({NCPHE)Ia`j|nXNjx*8cmeH=zDz4k!~b7~W5Z{H8XPL}BqEZ{U)X zx(vqghynPT5LpcyvPG(jgD4qZMNLI?PE54tdOM|jS@70^!*T&}S|+>6b+miFp0&2d zy;R+F>!j(qjDBP!d*Y#up~%1skr`1-f44qEBT*yyS?SRXDH!gajbfmwD~MBgLcVRk zGt9g7TV8Dv3vdEM9Cd}wJwB`~9);rt2WfW0^{$k!2)4%JW zGYB xkP*awD0o;cC>=$5B z1BlPTH|<<`24I=65(-Ot&8yEY%e62*ilZ{o9^6x7m+JW*I0vA5SUiGKS34 S&OF&zNFm6-Nl+-68!`{ZtUl>0h8HpWe%dTj^8sWKaIIoyU|28i@RspJRlS#WL-lp4EYtM|y3R@r&mi<8{E}CV zflE8LS9MEYTneXmKkD%St`U=jin*|3XG-6_687A9;1!*_*=4D>V4AzRj%92}ghaul zgci3m>c{scJ0x>X=EZM(DlwS|iO|48H4M8vl!~Z!b62dCSlZ1SpGx3E8 J829@l+0`$2Rwx9aUXiIJxuOX+KriPkrNf+^Eqbk zl*Dgzw1Drc+1>vTHfDCcy$yQQ`Fnb2$Y+7&o8+cBAUGL#3)NPA$is%)xsvqR;rUBN z&F7@xGXO!>Zz)*k >YKWsvFeGx;(k++gv(~d(ET0K2j{LsN6 ^!RaKza;W^;+aBM5jf6jrNdvGHIV6FW=e z*(MgX5_h`*zLSzTT3z dv;0c*+Mi*SZr z5vg-Wvy-Gi7BSBIGg7kWq#wh}Sqf`00 a}MJ^e6*PvMh_-ie@(Z zFmxAOJ0G6bmX*KA^C`GW1uz0xmIhd^z0-qsA|<_d-lkmAu_Ai*wfQ!{PfXgWDAm$i zL5kG?6+wQ{x_rq72Yt2QEC8@$0-7r+qWB?Fhv;hyk$m#5PU185^O#8qZaYbi<~j-e zOJBHq0ca+Vo$`9H&w+DJWMK7^vkQM>NhyV&-i>)%i8WEUnEPOEHz zAvXvq{-HS=KijL@7h5}KlX!kQrI|28I*C#+zR#q_zgzeiXnQ(zPT@v4QC9zBe0zD= zs;z~W3t(0h$XSl-12u R68Uce|oD9Qxo+ z&{QaTJoFMLeqh{E2FPV@XKC8~J@u+ma*BtYt0C|aAzyhvWGtOE&xV&+w+FhA%fLpu zxK^OAV?$x*8W!JO8uesP+X)Ps3rKh9RFv9xs~yPKKsAO;AP9G*4^8!5lJPokl8nYM z-QukJ0OxK}stFs!k+20$#66l`=JB_BZ?-jcmbg7 9KFUt%lMCD$t#~P zHS ~=PpU%*L4otbHk&}!sEs(j5_5E)oHHJmwAyUL }>PhSOUyGkd^;l DHzq9fg@5bz&eC`Cu0a2$C$&*ROci>1H%B-)ack&|dkDubtBGzbUF1?N~U z-Mc#-8;O$n?D0J|1ue-(76K3K=~f*63{}QFFnRdkRa+9QMP<2tZ#XGrY3F$9h0{3L zYwtoQUXeiq(wLEZ1ECtKwc5=&ae9@;V SqA$glNK9s zK1Pd-9l4^KZ;fe@srUCW>tNrO^*ETDv_ysvqDe#{^>y2qKKorx>(;bwV%-ys=apvk z51O^0M2v`wurwKW&)Z*8Cmdd&cI(Agz*I@J5csHHvzS-k><5Qj4}~EOI&bsJHR9*G z@slOkAacZhPI >qyQs1z^lCt%-yx8&0Y#xq9)+b;lsjilNwWH+v`t}mYtojTHP?^jwg5eg%Zu(LZP zdDeOBc7O8bW-WX$JHOE n$B=ps_E@4{Rh>YoLzRnF&-cz ze@N-wxvjm|tzW(Uo9hzcV5`rwWHdIgOORp00eMN}7Zf*Z8-5hn$m}-nZ{66n?NH8b zp@OA2Oo$}GX)yw~FyW8romq9xksW2AwIq(#(pR2!tqa|bx@x%}O$D<;Ka6H-;K%$` zo=k)^NVg%^UF+SA*F%)H+B{K7-| yZ)(LIu9Jq6pE_pCf{Ht<>)0W)j6nSN`697bU`}w;)s_C|#^>*1 z 6k$WO4J|G4&%zcZnm1axfRhV(7XXQOIjCVsm&vp9sK&pHQW$sS{zx(!WQ z!DDhzpZn}o81cf>hs-{Zc@GsV4%c!Da-yv}5+K42?snZFzs^*jT@Z{L1%9x8WABOY z^&I_cFrh`?&{FY>HA4OGLvhV@x$#e2wS~B(pU5gPm_mHzB>w2AR-QX_ rBQOd zMhElvk1RmPnS7!6jRaqM_2`Px(G?fX6<3DB?mll6W(A23?z#H7X4SZSOjWeHp;K*^ z5rSsDctP^{D6?)zJ=4(lbtJ-wQ1Kto0F&K`p9VE@CRL0WC}kyeVXuI;F;viw!;lLN z9O(J+;b9ZVH^s+Mv{3(~O&^U2kNF!$g*LA!TzXXa_S>zgtpu*Vj~ES!9< r=Si(&ycPm+}wSRi*fHa;iXT>)PDDvEc B3H%V1{J`cT`@zd%u z_IfK%;}P9Z<&jZRfy>2`*jnSApKp}#uF-K~6%85J# !Tj1H}{S9Tn z1eFL|=;BAZEDy2`tVt~jtlUiaYM_&D@clFthvINvgu=ugM-fe^faNbu*w!8hiDoqj zAK3BN#XZt(aF7sLP@oriql8GHb1M)OHUKc^mp;{8yhuu|ERdZ3R!%xqIegH!A5je^ z@6)6wLbAZPBX`&9wf!8%f3fVY?Mjb);XL(_==1RnofL#uMxdI-KluqX^x`S8Z0V2# zI$H*R88eF3Fj}?ms$ZCM=@Je8VD^>_DGV$t3(Grt@1^MYzKo)TImefY?W>fL_rqV_ z9IM_CA{$`$B7&zkkn8s8f`aHYBrMLSS(N+FgUi}~0utNu_plt}_##WHSI;9J#!QI> zSZSh>JVMLjSe^#a18x~-zUhi9dCzm|cV mTKv(gu!%g%| z^5eX*%T{H@34bxDUG%{z?qwc8PWhnn95ziVT#dOOPa<39I3XJV%iuS=)m*q~{$`gM zvZ9~H v+f^8CLlOpg zxI3OlGvGFK6@%2UtGHr9d!b}?!jev*v&XjhVuH!#Q;N5ITv=z&bH3)Dkiq-K0f7qL zg7mj<@AnQD@Zk~1Fgf?o7@iEcL1q~LtVW`s$7-~2175!LA|Ns!5M>Rl%R1Z*8`JFt zjd%J#R|Ly6q&0yi=&%=_L4UFEyMLH )Y^^=W6q{Go zM`tN4?&QUHboZq$>+{<2wafw`Q*7vjFh6UQ4$nrWCXoY$t&iepi&iki%>Z(VZv5w# zwALb$u3s{-%kK @ z_|p8C-f`{byXi7BjLl2mH{v?7v0LpY4Amk`gkUgM2!GB?eMC1swyT}bR0bS1#;V9* z0pK#0R7<4S4m~kk^v0I4aDT7ksc5(iblg~ 2;`#9*&^ z1g}n_?eK)e-2{rGQbo{k><*I>B^$X(T{*7!#4a02woG4!NwJ8kR!K#Jh~Vp6^O!1b z6{Z_8FFEI=@2RRa?SvcN=m(EsQcvxCh~x0TRkM93#wI0Mt|(7LN30;oOtHgQJSC6G zBsl#WeGk~ldYuy;Gq2fEMO}I_g4BXv?>d1jC$Yh`O^X!SOKo(*AqdD$Icj_fujAp= z_N&pG=OK(dOHd^QI*7+YPw~3T&*Bg^&?g>au^c&XJek{V8pwa)h-$t6Cnq7I04H+0 zW@LIm1}pO?`?il=DR(}#@j#GpibleXuD#qKa_vjEKE}EB=Gpu6P*I1?B$%Qi0Q@nC z%fRfxqP`RVsHT?N(8)H1bd$eF%rzeZ)R)!7Z-e6#h5IUOx7feq>4Z-57?2bdkib Frj8x*c8%6|0p*nu`$5w~_LMP~wG-cKP4bpSRROYCjz-7Nb7BE&W6gMH zy7ACPt9cg}A3m~o1GR$#F*Sv}@D_Mg*Jyg{B-6+F7pzSm@n4;0%!ijwV`?m?8Qa;1 zR4d@&AEKG$xE7{dSn%>x>oQL5XYlr;{?8NweA{*CI+Tw%xOoXLAaAO@2Te@H8;fKP zn5ys0sr^otys;B1 5VopgoA zM5C?I{p45m>mczH>&EWJ4hPrL#MNKv@kZz%^#c0dZW)cM$xX9vR8?LPyY=F@x`l5qYDNw@yXEX%&GsTNFJ6kH21k*m_epWX{w{ zjc>==$L~tFzIZeq@vlMw-tM=;l*=pMQjq=B$hxbK)!*7v^BXdx4bDCJ(u0k{h{6{{ z
zXEfAN7;H8^M)G>WE)f!LkAI%11N_6r}NPrCJ zjEY)V_p8e _5a=* +kUKO rOS|ny7RNw^DoX>2Rm81gF_U2zvRmQg<4>o^ zfDakX$X*bZO5(CV%gHP%Uf|Oo<83Dh^{1moc3E|{86O#R2VMyeKLk@xbDx)7h63IL zfzm0GeF^IS(%<$RIaD9u!(a1OVX{^hH+#2>CX|voI0$_0hkD86ML!<;u_rSOZFUk6 zHN)&1D)~!mGDTkvvv0KqW)3a8Hq%tHXsjF~wD1t#v>rAk8$NmOlg=!WWi~14-0>tt z2^9o6(%wISD&Bb{rDdCizTD&(G6aP904+q}Lp{RVAfn z)L%l8feOOKP;@7$I1%_zEN5%ufh-HE|4%NXSwqdS+KEF9;v00a5Luamw5!oSFJZ~h z5F03ioH>||+a6m2Au9$bQOBy^gND53iCYgtny%UJ4DoJJtJ+WAhjXL={)Y)UI@#&f zzPxEl9?oE7)q3&}c|(Zl_qG^x;unKpfiC7a`5gRBHGNE86^0OVdA}E#p}`!pj}C5e z%&7Z ;>h}L9J7jW1{CW&d5(c7xFqdr$Idbsy*0{jL%9grA@@t zt!j=PGKOZCCIy=2J7tgT4DWltcN`IMs-LzKbNy}FILQFtk3&gL4Dr&e8l-hR=jNJS zh;zu@$qAUp6fuSBG9zNcgk(gXhH)T_o1i0mwmx289qOxU0H(64wfyd#oo~|6-HmbJ zUrKR=G#tAMFduZ?9fN*nqteb7*Q-VUg0l-*UPpG~{9(pULe|1R6IQEW!CG>cqIuRw z^X5?;VwBC!*K$#Jz)bhEcOfB+`)+aDMf?tnQ}Ek-mbzcE>JM*ctMXXztPj z`y|k}J>DG|q`b$Qj}piq8rd X@$|&0BkaPCYLNw}i%g^k zz0cT?W*o$06#uJ&z%~t3l1S;ztrm^A!g?sTmEk?!+O_)tB15<=*VkH@4HPJ%r=!Nc z6u#l;FXO;1hUM~q(d%%}1eJ@mQ&0gFm5e`HMFwV#SMT T#Ls@m)yW^= z{US79twGIRp5hdW)61r6`tdLu1$mNt^}W_5b+lu@Ye#l=a(nY_)7WVU%T#y^OiBtX z=}^bR%xvauT AEpGLFlKN;2L=Hd^7dc@E% zO4RCQ)7b@%o!Gs>---T%{y4%l&rcaN!{;8gD{IBU^wki#n@(`n( k8C=}!l}%Nwdk2vTgV z!oxTK2F&jpo+Q$Wk{j$awAczK)p|j&-#)zm;O22#7%W0 sn_7?27LGa3c$jocr;O~Al)d|oC);)FmzWeOa977>l4 zlgL-;ilN=~h8(0VEK!#Y^MC<)1q2?tE z_9|2O+y|@JscGG7@0+-V2DCBaY=N4(nZp?3rYX{Xug$22B_W;r{K4)A1-!;Boo3T? zWIhGHNRKDvDD}i!qB y!pNmqUyVA0$qga~OHiPHRbw5S1%fkm?VPb`D z)~qWc>jX2LrIViW`-y2Kws7 S82x8?b@Tl!8Xyv?7`V>5Sr4K9Re{Y_fw$ z@77PSCS{2QGgVAiKFc4U{5CW!;mc8%zN$C2xD7+Hkgq<1k`)ypJ5S=#8_amx@FOW3 zm3!G~d+f(D dWch#D^5ffZ)O|rmEt@-%j`f6M#V^Am@U_ zU$_xJO|Qyk)zYM#{VawT9EnL}QI6iUO5;$`_nRY^F#cc3@gte(ms>mGJz=@_yjP*BFV_Gibn@>E`buXOX$A zzFG^9puf M4Y;`@mO(CiL;mi4V+B z>=PM2FYjJWWbIN(<+P#lG9$@#3wflh%`MT7M$%6E4}vA4Xu4~`gZ$S2$-?W%$g!*9 z&`3C3zdK(Qb9b5}eSWK)iI5VIGqVEaUS!Kkr*-Kpu{An6707}Musn!^ROhc{OMrM( z5BC7z?Idp}HstJ#?G+-9Lc8k=PV Sp!m5NEO4lF^}JRj-*uQlp^L;y<65 z?@~a;3P~ljXl})G-@HB;Qsu3P7nirN&a-=l$G$9@(?vrG7b!7<{3P-89MX8teGk&L z>v9^h(7PV*&j=|aJjZu#s9|`%FM ?PlrZ*#8cnVP+dlpxIQ4FuI-;<^Mi4eh_)vKz zzm7J>$gl_=87*_ic+nSwe9i>WpF-ED>j_WW$RN$Vq|AT0?4GojH#`RIvL304%WZkb zd-8L8zaL*EhT46~T#qL@AgOarilG9ARa_pfQuU^ O6?Xkxhy-Rc h^ zn^&;+0l}lF%=^~fPT{ZrB3wk)4dMm4#fb(g^DDe=cK+59Kq>RH?+&@$o|e|%+cxL- zP@|wDiH&qNJTqUlbX0hX*#+LJq5cHNlx5}V8aM6>Awg7*tNzZ@6D+tpy2D`Po>Cp7 z>7@Bt*=$I;_%y!=yBh?% LJ~f-!gU4~M8s_EzYG1)lenfhIb$$?aeHw9+KyjN zuK6H5uX-gTi^bjhw)7LtU$TcFT7OuUo$vj;5c*;FN*$-iI#7Hh@xIkVaJ*FoL75gp zNp_q*T=;1Nr|6tvH%<#{lZGwRG7(tf?)I}&mIRBpqY;tw;93et(c+7M^^5^U24P6n z;x?Vbtu))P>|WHVA;%Lh-Z-)+9~N?92=>u$0=@^DJe#Yl_k3JdthOf0xrvMt z77m(U+}e7qhkOUN>WqQ`$-L!P`KHJ~0{NM@gu8RrWqF_NC=Hb@J*4^L=jex;DNEua zyTioZA)_CuY}iE@zi%#R6mKncBpu&jB o K#77UzMR0THCIAtS%D*hWQ+2T#yo`tEi-_Y@C*gY!eZ?dk5lI1^oA z sPo4;jJ&{w0d;2XYoU)2v{u}DlBQn>PEOWth}8jlv9>Q-P*Eg zIMC0|){^K4KHiip!>e-d1^%lF^GLbnl5D$70@0_Tk(KJu0UYg#HSW@8nkhMTMFv_( zV`d31H$Iz8iqvBXjOBGRUpWJdC)lnr54r{6`{}5UY7EYy!xt#y&Qrurooc8OLwy9@ zvJ4EA8Vl@DEoMhCi9E~Jcy`&F0qmZP_w#q`9=x+Vd($(4`#^9Yj15(t;{|zaB)e{T z`oXhsRJrs)UdT^}K}8EQ$Yj&Q&c@lQg(0U$%gO|*VbGR`om3-T-B~3zObxtXJ7f1o zGecc2e{m@meiHaYfKDnzByrO~?x#w3_r{uu;#6pD#y$i3A;*q6niT1kMGgk8)n9 Du6sXCX$Oz<-43 zHRAbaix|x1)4hhm67mW?ZxhW^P{Uq$Za6fcjz5D8&ALxX#XD$wxkaz1zS(_b5VS84 zM1|1=*QM1V)w@soA!)IQS5UT< j^Pn-!{5U!ervJk(!-S10Q=$&v$+uadGc2?d~H$y0k45Awh)z3Qcoy)u@ zp8RSntlJVpD$HA%hY@ST2ZEEW$xQBO-*?g}>f>|W)af=i7expDo@-S_JeC6t7zgq? zqa9DqPH*PXh1uES3lN(CmGka_fbfUPvkEJE9C_d4C$e%Z!?WL~oRECj*|1W%&}c%# z;=^-wrQ0&((pG?Ln8Vr;9H;+SG8?9-vFz5L)PjNcgS9^+B^J>M4PKPVwAImzuDM{E zxFTZX$IN}9eDju1kbQ-1!$*L)h M7Qb(sii3R}R#XC}2HauVBpGc&kEL|p #K-e=!ydBAvYfo3M zt=Y1;pF*?n12LN(m*Hf+_0TH*Xv)=rtdyO8&0*u3iow4&wt|(*K6@9Y@`MetMO1lz z#i<-a&!Ve9vGydC1+h$@74Is?@*ba=C^R4Ww1J47KyYqm6k$Kr_XFm>GVs`&zG~df zC86RAfs55sI?kLBT2k*_>qc_^`m z*cNZ1%U^)LocG_$jmG2=oqM)Yp$?r^u^6 zyaneE)y_V41dTWIHkn9&b15Wv!ZTGMjnR~c7|8* @_sNM!<-6jeEssD(x*xJFal zF&GH&ky&aN)`TOHkNEj+KACAR=-LypHMmF4dfK*bk6Q_~0v)K9-`68;BbVA!58FZE zfL8><_TyJnxlNK4Ow5Q4W{0q|7t`1Q$Qrj&stnN_I>PYJg^{RQD6G5Q+>4*nYs=9& z0(!ru;1(o;1gr&$1NBVS)g@&ie6K-&OYq*{aKwhmf7`ezBQioJE;s(j^9-JlY0%HH z3@X56Xw|$FS=B2oAe#R1Wr2Ex>rU>(U70x9%xG?56~vvmlq@4n&6MEVeQ@?lH<+0% zH-FIEC1ql2j$ll $ywI3?-}&um%;2@=z~oZ73-fG`P#(^(!*CLau)C zp9ng*iBwXa<$K+56B{L{ `DAN>D+;!oKh=lSU>&pKJOt0@=)Lg1Edko$HZd}Ccz-gA zXh?y8@nn^A=n+@R^_Tv=Q*_CS?R&ZT2#(*f-T1F@W=l~o*Sdi{1{!oEegtV}Vrso3 zv#b5WNsO$-2@L(Ebf)m^WrXlji8A%|NtTF*K=JF3v*PD<)!{FRmOFP8hB!wvvxA~e z#?J({e*^nPp8VDR^BlOJm=bM^$eLJRO@5tG3EkjQ$B`)xr$PGbPHS15=S;R$_I&Pp z3VqDl0Hoe&D=?dP%*Lm%p$lGe(%!z>>STMjYqO1m=^qx)TFZ)`n^Gnd&go#qk}3;z zVVUug8sb?hPHbS5q-jNa;c{g$Bjq!6APF?V*x64*qRp=|#rYE_07H7k+tFByIwaH# zT;obCQ;oYcdINRpg}111>8FJGK)JBg5FfO|Ryqq)`$Lqn&P&u~$MQ&a5dm{TxCiw2 zr0c9Dvzy=UIkHb~hrzTPE}Pv1*e%1QEIs7tr*f4T$RG<;0KG{!CRbeOS1bZZ``H2F zcRj2A3is*arD+SaMOgwP2|=oh=bON_HOo?)Y@Ta%iaV`#?McLjZ2^C+QgS%35OZnW z|4|(}&VY)`y+ 88)G;AU^6WY=Y4%x)Nkyfs?-xa$syvY1K1c9PJigtq z0grh9*NE8%lQl2zC3VTcah_n~JkEa{2?9V5|I=IDUEP(vBaN W#$kWKvF9Y>oW`vph6g^VRKxzt vF%Fjw{uyjA znAhCAmX1_i^{wD!turz5S8#$-O%25E?GZSVX2bMVLI-Qkj3SA*-o6ocPme|9L9+x7 zxNOuK2umSSzgY6On_r4c;LF*#F%O? 0=AITPhK zK9>DXo(ft*{&tJRXMT)b&GlI`RB2js%g*QLnuK^F?S~4n<*58C88ZF&Hr$E|)yZur z&aqS2LtM^oNnx%1@-~B2XgTjN=?U5;VZ2ZmV9RotpYOABF7e%j(GOl7 7~tueAb|g1*P1rH+Xw zfO7cD5^{F(z5c_ZvwD7HIXU^o8;76hqPD>9r05+tF&K>mhnS-lZ~Iz#k{;wS@jx!n z1yRfX*A~JSYP7G`!iQqdzHfZR?Zj~BxWvp0u5)Z01h*7?wE^{X(1+Gd&&)YU9t@T$ zlc*HQRI443II1XOo`&nCu>Pgw;W&y0aoKl9rZJPzQ6U{{fc))o5#3tNg1ft%fXimy z^y_k@r^0Z!PWkyQar$PIh2`Mzdm!InLv*}VOCkD1c?`ClWkoIjLH=lJZ279 tn#2taK1~`%!z&dBDXe|V_3Mr# zRqFgp@iWPCtaL;XmgvOfy`PY(o}Z>?QPwG8Kjv&QK_Xw0N08I&A^Ze47}Prg5-~BU zO}sl);L96-tKdtVCXF-2Kb}rl1LLgxSpFjQ3Jp0r{Y$)$KJv7+1I#AWxg_5IcZ2?~ zE1eSWTYoN(xNZ$euB#Uq^&N#r3K_Flr;fNP3^sT^U)xlJQC{@neXx;pe;FHy_Hn|| z7qRn3yp4_v?Np2g2y20pY_wjXz5cXxp}oo;PAG^O+`9fpxt*_5A1HL*m=!l}+~+NE zr0~9eFwpH;B8?F#W5bkU3nAIIhaPou_%z*TxlhIPSUck$(s*!K=F68XY %m{M4f>p9bC(KgxLQ6iV+s=*T`+^QfPTD@%8IU*FhG{Iy|s#!Yt zfeur)j x4Nb7%5fWc^gi`Oom%fo<74%uC7yL*0O2^@bbAT=T8Ph_a288<8QyXgs z5ARScL$TMzdsxv7dQp`Anr3oA-#&}E{&YBkUdjSTrV{wbHyr!Eni!sDg8ni|U{txy zk*5y5z*3gY@Pxm-ewY`;y?#Kc`QgGBsFlT{f;q~4@V&qWSsX(;f4euGjhs6otel1} zfv%`zXp4Ob^L`9|YvI6JoDa#ykKd+p8?1G)>*v1%-_c-WcRpRC4JCOQ ?&O z_$bt|`?a9Ol;;yfCc?)f8BE@)=N>l teU2F*P5g6xJ}D3M_yb^7c4 zC^co3g`Jb|tktLDP2I7|@{PD{2uiWI;%ize!X$!)v_FL(LGyzq52*1r()#e7FGy$f zq=drp4+USm`*C}_=c)cKfCwJq#&8_Ks)8<;YZHPCghj%vQ`lE0;V$vy`C-?dYA!>$ zD@#V95pCh`X^^Bp9Q9Z-sCSY*)=~Qh7cVY14hWI2aP}FBC5tn%nLde-^_cD3m*Wot zErY#Sb>V)XZt`YlBNtWR?F|_qF85npM;~^%z``xc>=0;%rTK6Ft!M7nIyGC8I~Ui~ zip}C~ke|^z$uK)*0k@>0`^HmHaq|6rPnK!fpUFXys$GKHV;Ru({im7oYc!#@@xuj? zUzWPw)Tc*+r};X8^q`21Y*>BRISSTI=1wT68(kG}-HKzLKx3oNNIq$55xvR08kJ*p zagUxpF0It^JS-dNfD4;I*TT _fyvY*8&!CJ8LeT1>pD30KI=bIJ^+Z48q`T))XRCua8k3} {b&uVlkftj{~~nxbJW)_n1;-z{&*E z;YZ1E35|oY&xsFdBLhYL;)VRZb4v)Z=Ln$vbWUkV8~M}1(>yzhk4X94!}I38`E_x2 zWTKe2@;`k!@MX*1@)*tCdld|{;rT0sHr*wO0!x!Ps=c9Oyh5p+gW*_CR6+x8+~y>8 zPa>ZAj~4E3%Yt1ilQ$iFAP?LhwEY-9FpY{SkW0~fi77`%FE?VLgT?gnCk;;X04wBP zOOcSfm;?I}VK|tQk@} *AHf@KW5nhxy*IdEp1Qk>x8 zPd7QOuM}nRG8c0cxfT8j&bW(9Lq+ebO7s%Rr*r$w3!X1sgEN1>9+f?b1Bo3ckd$_E z<|B8CE|l0AnbR-s9{$~z=Dh$q! ?gy~)u9rsO(Sj{@Eg6h>Omh8~}Gio;iyU^mk^DdqBTSRsh~mq>$N zee)L&Rd$Q#*Bw78Rihau60-}2git-FLsJ!$xG3564!%@{vf~od2@Rt^ac#GKn{p z`RIJ~m4DWANS@lJ#ck0SP6BEUTSPQNi0=IBXo71oIth1y;j?j_mdo#NdamWau3$M! zL9caWeBC?WFz*G7NS ~20D_ 5BI1^?F@cIJyOy|Z5#_#`elJc^g@dX%|1uo=YmF%DSweHE{R_@zHu zW&+h`;9L;;0y0Lw6ch%gGWEoT;eq|jV}X#m4{=FdhYHwq-23~M!&-IL>lEl_ycVs{ zXi&6oe;Jm&nKf7JSTXT3-a4nyc=Cv>ojKaHikVTp>JlL1AF1iz=j*>E6a`BXD85{O z^w&avY}9mjAN0CwUh3Q?gS0HI{C8ghmecV;-`&?38Cx+$p=mjBQ1+apMb50+_p_4k zozo*@QZ#LG|2fNl&2 D^^ta z$lW8sx2eyp*q{^9TME39cglZPHq~oH-m4vd-AANh=Xw1Uc iJO8GVwE!L*#6QaHuF=++!y2mIfzN5l@;JY&y%_$A$i9zxVCwTvTl z+%G$@qv?g(DtF5I*L7ny8_^FmWQ6+SBQ}=;LmT$)PzPcZW5I_cTOMS t0d zfc-`}pfHwUKcO35KzmO^*k0w!R_VoPzi%6c(n1{y=o5EwjLVT2?u_yZ*b4J|&m%%Y zq=eWZoakez|Lr2jY4H0V%t7{oFb}z){ao)<0rJ|NN>uFc{*?>a=NraNK1z0JR`mP` z`M~zHq1U<;VKCWE=|D&YeN87?g8%J8kwZv^_hx=>SH!@6Rw?;Rgd10$J#{!2s0 sZ?ucoequzy5`*IT*nt?nfAC=IM%sVaXQ@1c2sXptTT1tRoz)Y(K*sL}UxByB zpc{+-WxoG1j2Ngk$HbgGmpis1boW!Nv70ysbxBV7=$8)Ka53c))!*8sr-E75_ijId zjLpz(VZbE@WBCOtEx=Hd(o&9C5<6!)$7QOQx}O7j8{Kz)_ph7&@AUhbkZa%ZN{QX) z6XBFUhH4cs8vT=0uysp<4vDsR8Y-xDEZx3J7XrKkkRZ?}l_~);?4D4GrsF!%jI^Vt z4NTaiPA*JazRtbMA82X6pr|zXcdMG1dCl>ky#T=Xj>JC*SCBk9(k()`(Z?>YxESQ4 zE%2_p+Bn5AGnpjg1H>h+27p21E%2Xg{8@BOI`wgs CHNRsz>puNad1aHt@xS2Jdpm((~Ieaq+zyzP<*|? z&!rWD!IkBw5yEEWn=k0U-q6JJX?8n5$P51Ydkoxv_RoJ60D=))1Gtmp_GvgiO5_>Y z`R}{hpWyy}8HwZbG<>;qhqHk1Q~v)~1OI644(I!dA$2N}o1+IN*Li++2ueQepgnW@ zBS(90yJ%OU KH*c6GOu^7j4*OrC`A P;5i9|7G<5wS *7ZBNW~a;9yk Xp EVel@dSdX%M36)**L8EB!;a>B8b*o*WQK!mkfjjGI^wLUm zUcEsp`Q6A}eTUW5XgE#i?Ok0ZHq$Z I=z4Rhlczp1ZX zGrjS|QtZCLQTPbW$JEQRcV@rWxeAvJEd-xM&5Wnp#qXQ!=g&%gTH_YWjhq>>Z7saM z3L|ah1OGc(B2J(!-|E8e`$~5<$kfD>- u)ssx2*GfAglU zK8tvc$!}w{s;qXpW1U7%WMpZWIf>GS6eP}A4H+00l&^v&_sRicHwG1F^z3ncx>Re8 z(WrTUc<#5ov-&! c_(lxx9H rinu2*vs?~<{b?mPd<3--c#ar0z>C@FV6{hXl0)ej*_ z@67Gm(7Jd@wpI7Y&*MhqzO!K6@cU02BXf=Aw|1EzT3?<90+(p%m9-z#b&K>?ohzmj z(7P_p3rG2$m?svHUsA%fM`O?-HEZ&$MDwh9cEOYg&ClFfG@-^6wkJAJCMHBQ9c`dA zRqlzC)iiKEt~~4eOB1~XCV^r$k|4?g{NcXRQA|$uE1jd^&i}*HSB6#D1#53$BPre8 zAxKMicXvr6At9Z6(@29T4N7+-4O^sJK)R9cZulPFbIx~N`~~KjHEU+p%suz~ijLNj z#d`sX|L+gbsEt|QfO|V*zf|M2AEUyb6*#iGlNZ9yypf%5Kq{O}9{c)Q?|fL+;;{$8 zQ1;*@A9`Sb{YDVH^|i>}{rqTdJ1pRSbqf21v?1J${L7g`>~&5?MqaOZAnLmh(iq~D z*@_JsU`-mBmYM2~(YxOc8;kHsyKN|yq?U&QgayJS6bKQkF3MN$M+a1%>ae+92LJyr zMS73S;ai2qyKKbMgSOB6l$IF4RypU*H1wK}Zyv!mEg cJ2CVUZLe5~TU)l&K)|)mjFnhsQBFu!){fB#^M} #`fJJHqWUnT_;333lQDX`$8hb* z)%SP*Pbt{)>7X(Tt`R5O@)>XSA=X&KN{4DZ 8uBH^EI zp^p~Rn5ts-H}oa@*^bU=tqWxQ&rOW}gy*=lsRoYSj9(DOi~eXD$xuncmyZwiYyf;d zKYMpM%dQ5e)u1HU=t$crmwo(jx!+<{i!Z1Cf3)tFf%*otV=px_PCE!$axY_$p2GYC zb#g7u`JAesA3w64g+pGRRozlh!@xz{qd0`{k82l}VWx9;Km|6zZOTY%MD({BWo<97 z_{|oixy1UC;iJ`MWVHA!n5awTZRg{{KZ3;aDHfJEkXmtC?irk>&a%;$N}9v;b^Sdp zngm`rU7qa$UcUKE##@X0kv+ZJoZIJ9uP4%#KE085IUBY zCUFjL3tKeg!X4P1YzzdxK(?Zvb9DB2Qt}_Acb;ex*x*L#@g`PCRXartHz$s3*DuPV z9=xUDC$Mk!{u$$|y{L5;tl#fSdhpr@26N=lJ^qR>2W=@_#C<|?!)w?yxvcnja`kle zo=w~U(T!R-_58#_e}gQPOA{GFFtKuD>&sUX+W 2x>y+=^<+%&2?@v&7)KLu-mTTvXPyv3L|7p{mLxDkDA{i z+l%ZHFo~qmvq-A>RPy@jbL|c?hkDxIPyw~}kbd!*C?zM3o$n9R3C5Xh63$IboAAkK z8omNWCydhAJ~+QeUDry#?C(%enJ9px=wYu}%3$P+yk5SnCY=@v1XltS#puCoU^Pf; zWmgF9i<;}f{GES8>f+*rbs3z)dK}7pZG;b2SBRH}A$e}`e}{=nwp)R+#EwMe@1|E7 zp$&w5o#o1Mv8;k9yW%fz^BWoHq!#;!kK|3nxh~bF=M4#R6H|ni9UHIin`;+^Ul?rk z#e#k&V9uhsp_4<(*E0%e;_XC8FEThqZZ;K=34&sh(Y`ezRJZhU!G{Zs372HY$m~i> z!#K1vqBRAPeGE73iL5*VCOe~{Y5 J$ja}w(oM1M4Bq1oK#iA~b z%)026^t$>2nzY~T&$Eng(IZcIB}cudvUcDACr3$plbV#_u|X0Ott<#G(HguB$A9Oe zUe=&Dor7_?q6077ZC1ZR&0lPdnmz5%6N?w3*3=wm zK)s`Qt(ubII;W9)KTeArz!WzL*ftcWREq~t&SPcbzLf5O!3ri3!ArreftlBuh$fuz z9*!Vvd;VwsPDHHkl$``Et%Qi0sUNpw=a^+_=i<6Z*q<>%oEYH6XvEDQb7 kGgVm`#xQ7 z&y$a4$}}{hqwp#se+y*n#nbf4`i?_OkBIraCo?k}L9O~f?J>Zn8be%sAAlLc;$5oq zXpmabO83CniYxrTD2CAY;J=0|$kn-QEC!!k2i^H(-*B(1B?b({)6Ezw6BerOg8K1J zuyhfZlPHmvI7z|2YY7{K @WwM#nX0=hAb-wEn>Ow8;b=3_)kFoiYmH6#?di zfPH$N#!b7=hf`s)peibUIuyC@+!(MyvfvdOO&esgAmNfNH9=$mN#y}Q74t*=B9R 1USw8WjZ1gpDYsORa(P0|~-#(?kK73M;nRz*T^&um8c8Kme BUFD 0 zaX&*38|I)eY 6Ve%cGCkBu%xo5nDlG`PqyCb0=%dP0?4K@rMeV_J1Ije)7N4HTX%hzgzk@jRByME0D%ZH)`|rJ_OiOH<@T z3cg%75S ^TuTcLjs}ZCjOwl512yRLgB_V;xtrlD~*USEj zy+2bA!4)G9DxU{H67?wRZZ=|Mit1j4W&e;TDB`-0#=2ziiUTW^<6zz2_hnUaSB<^# zrtQR}q~oUTRWbj@ll0vlP~ah(BdS^(-n{cPus 1fbA+TuF^(>*~X=N2n$f4Kv+EwldhX zprYrDY?1RsIiX7{67Cb ^VyWdj;@hwyb-&w^~w7(D%kA~KbgEs9!p;i#TS2M^@v*!`6^-P H!s(&WEK-rplE$S&Tjrht4`^eo#%CYssrO;kAi-g<%ilz=} z6dlS34h-1?uG!A!ui0T*-IYU !lPXEy2ULOyqu9O1Q%7R?4O!ERpx=B z9u8$3@1q(lNQ?5@f%^=Ffre$gVtH7!sDC1V*uw!%CjNJVRzj8pIa|R!gUU+mJ%G_q zXCLY41+rmj1vA?N1cQS_{6OIF-vybU4L%K?gOevg?vwUA zwjni%+JGV|F*T@rbt0?R`=jYL49$gVERpgo_a}d1ZpwuLDc#Dlqi|Xm3JgZzTD}Ql zEAF_3EV;?VThXYinxXKH@d2b?JrWnn0B+ELK+dxt-_J4F450I(lUe |4% zlE?@33`4mowXCQBUxKVWw1NG|kdagh1EvU4Gm7dbhFZt~VGK{{JGbhWu|vC`BDv4N z{{Z^OwU&Y$gjH{Rlc$-QTvufIeQa9T%SK9Csz@!93Ur61{xmGee*e_08C=J6pnBaP zqIovjZH~;64S@3m;nire;vz~}HWAA)bhe(`5o=k!i(Qy%S?TVRZ~Le{K$*3s;;y`d zwX85h0O0#3JT${b7uAOOhW@X%rb2-BU(hx(S DmMA9kiO=bH6lzO{~46tnUbGb$-uP`p*Mm5(~=>A%Mb_UIl3j+0wZyIZgqI4Le*R zJa>8;i4j0!69anpq}pTdV5D>X7h#OjZln)?hN%(J6>#`f0H3rT=J_2ZlG2aX%RF@ime~{zg26yEJZ6g!)Oy zfVMaVwGwcK!}gFS&%NuGlMLWv%A3D88c@p2T3r#J{MZn#543QsJiGOZf}NW8M>)}k z6%l_{4q$mJ8{J!s*(+_ 6sX;EjA>XD^LbEaza0Xws78gzWWmYrb#K2y-3!B)_D9da z8FsAP8cfmz6hSJ9zMt$U>&Oj5XZS9e$l$GAo=n2z)6M0T05_QlCOYkt-|3ACjl*>- ztP~-NAbRZN$n$Jt%>X|YRV>2I56(${H}#VT+5zydV&S9WX+Le5A~Pw1eu7-!Ivdz* z?kB6i3zz0;D!@~0nYGG_z#OoG&Kum}LP#w49!)yJ3>c9YhooU1@WP=0E*e*Q3P3a1 z!(U>fsPyH~{K#V{+fM`@X1ve8&FY*}BITx$<&6X!Xem@701D57^?h(40j;ezSw6Bi zTtNQEfV${}v(`KsM|hII2Oidfyel(ZC^u^{2bUt<6vxXG2iE~QP^Rvh*Uf5E6L$d1 z(=ip70Ry}Sw%ON}=o;09N*`^#DUTO0jd!ZAKqeHIAX=3GSzR*>2^Ae=7m4r+NGM;X z;ArFyOm^Tt)d;G=Ps`w3+*=wen+9LBc)Gw3O2fS10fc>~&JR;r523V9Fh(#Q947r9 zGiJ|<#IVayin#rz8h?y;z^8EP;{8PI+3bBDvT*q?EL{05 OoR`=rrrZz`qJaUk&B0~M!(OdrhddxXn8(0Bu#(B*j$QVG4_QV z#eXx@M~B ^U4IL+)geNo0y T3`q_ zN6$I8C?<4@yZib{gJs#J;VQ=fBs{jNEnA%}i z*lM BhgRbLk>?a2>=_r&j@8juKDB`JXV5$EPrA~Z!4S3MDGhap9Gz192%(?Bg^ zc}3RngG`q;p+XK6Kn} eS=%&9 z5~{1hW;F-{5OgVR=d0+RqhyOQ1(nUH>lN-H=2xOTDb_FZ>%#f%cz*=$>j@aKU4Tpt z@6``nmn77XCQd4u`e2Ms?nDz;p6Qoytj{n1Ic^K7IM+vjpe$N_L=^yDnW_v|&Q6r$ zz8L`K7aYLZVYnw_pWp=r4k9Erq6~T7eZAWMcT=qK2P-v1(jkQ^%ZUTS00=O|K?EMv zsta9?5d`bB@J`r7qU=Q|{MMh14mBN08OMutonjkuxH?NC3cS4Kfa8vgIJjhPuK#-6 z5r5OwV!RIa?6x?=)Yo WcxP?KmI5{6`cUuG^m^#j7cK_Ag^gKm_fp4$?#OGTw{s?;|2aI<5-`9 z_$~ZvB&D~k>41V|@{FF5jw!6K`cqTcDu;R%p(P%KxvO#?KezV|8W3Jb!`h3{AF$ql zhbCypu{FVvWehZJ>2|=d9KfPI4C%WtH2S)vh9A!wkY j${ z`X_t26u93@;b=2*Sk9YpDfqHzuKAoDety+l5`Lk~(1vG+I9&Dpc%!QQMlMHetbS#G z^+D@j&RAaR$j`b`f$Q+{Pi$_{ur0uYNBe{UBq0BBtXq<;`S2Im3=WP9a4t)y#Kpi) zGcvM*?A3Z+J&i=@-*O;7>DtCD+g0V#{57BG6q1L|7wTD@-cf$Y8cd>92XL5oQt=nC zk)+n5BRcp>9B&W+0hf@jW%UE=pKJ)qQ#sD@_yy?2|E4;@!QiZXoNx@QU(X^|x6yMk z-DTa*;kL{T?*=$rVcxg%sbK)qkv(sK!7$&%rV@>dg)NQBFW3LW0@OY4JN@hkPT$1n zP_x~7BjV;rSjCf}FX>U`>GEniVw9@Wo#gxa)D@F34U)NnR0(FEvYBZ1WAv-EfXdQL z&M&5ZKBH>3W`QrXa{qFlD`oLkJ8KfZSx1OlmM5lOmDzXB5udC3-OX_I`}h~E+q1 |p?EI!Uwfb?mCE;gmE z@`wdwmqCg|PQk_uL(c=7Xjn;Gt0{fRfbuY->= zQ30=y+ZFgi;y HS#vHd;?qjRr#oVtmeEXc2cD^CjQYo@U9 zmcK%I(s$MU2#Q`L{^?0xOSpwPmtA$Y +L{gR{OR2Ao8%uU1J%UQiPz-eJjGi#8KyV$oebu1h;K=q#*=vWK6F&uPI!$R z2O?-xBzLkG5P3YO9&IUgqh+CwC4Zf;d=@p*==$+4Q%wZBVF{^<2jjy-o}PC!^Y2qs z)H030?+*!aos^5+B`$h@g&PA(T&8aWEyjP{cGTTmi^Ry6_>n~?@6{A4GSNotc-!=b zW4wx@+$axBLZq$wO|qAxuQZTE3%mRa&}m`VWh{z#0IvSUo1?__(tYU3ic?veDnMD* zZY)iP{Yt%P759qQNta_gA;ihD5Oa3+w2HXl%NmQ}YqgecDW_Ow&WJwvi`_j7F0j+f zLzc0|u+26TOYB17rB#bNN@hsBT=6@e8QH03n$}Nz2nOdmM15Ro$r;K;sD9&_nZo>r z4JG13Hk)jUXqZ4@DMImNOWI?h63;d2=^IfYP}*0Cb~!;se-6P{yLkE8=WJ1|XXgEy z&Ko$=Kd+v<96`15Rs&dOSMohE->i;GTO*-Dfd5kVW?dFfCcXqsMy4t>m5nYR&B)&e zkZ*9%Q^~RB!DD{3_2lA}aFxj!Ppi2m-No4dm62`&NB+HhZfu3QVph4N?Z&_TdUCL; z7Cm|<8f)o61I%0%R{!PC_Yn>337uAJewy`F9`;@)*^#ODQOoxhpFp}InwuI63*wWP zpkZ^@kv|>6EVn Ko=Gtyf2ZH`*8+lv5t^(HA^X6MstzzEyzp_L(n4qn>H!*PmyMW}q@tP# zv-M7l5_>nL$YEDv%f&eH0ysvoJGT61-EHqIXfBnlf0D5~w^jwkGW~50)4#Z$Lb#b= z?v3fdC!LmL1divTJW85S&yei0%pe`^R{O{~rO5HInc^=#*H<>mJ>MP^pz#>6-J#*p zrzuBtcM7TMPqwS4{7~Ie7i3zJ0LoN)PdKt=O9Y>-JVxz1{Cl&*{!5)Nc vSNSSMTm@UsrWEj?+=S0VU3f*l({RY?9u zzMX**0-HN6S>Nox- l}X&_o9ty$U+9b^rg|c|7#Yh78I