From c8cd522c94b99c5d13e4721d13b54f478cadf77e Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Fri, 8 Aug 2025 22:58:43 +0200 Subject: [PATCH] circleBs: adding circleBs --- .github/workflows/build.yml | 6 + canvas-common/common.js | 7 + circleBs/package-lock.json | 872 ++++++++++++++++++++++++++++++++++++ circleBs/package.json | 19 + circleBs/src/index.html | 29 ++ circleBs/src/js/main.js | 83 ++++ circleBs/src/js/plugins.js | 24 + circleBs/vite.config.js | 9 + img/circleBs.png | Bin 0 -> 24505 bytes index.html | 1 + 10 files changed, 1050 insertions(+) create mode 100644 circleBs/package-lock.json create mode 100644 circleBs/package.json create mode 100644 circleBs/src/index.html create mode 100644 circleBs/src/js/main.js create mode 100644 circleBs/src/js/plugins.js create mode 100644 circleBs/vite.config.js create mode 100644 img/circleBs.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index af1ff20..a856e1e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -58,6 +58,12 @@ jobs: - name: bubbles Build run: npx vite build working-directory: bubbles + - name: circleBs Install dependencies + run: npm install + working-directory: circleBs + - name: circleBs Build + run: npx vite build + working-directory: circleBs - name: Move index run: cp index.html dist/ - name: Move overview images diff --git a/canvas-common/common.js b/canvas-common/common.js index 624f9f1..3c11be4 100644 --- a/canvas-common/common.js +++ b/canvas-common/common.js @@ -121,6 +121,13 @@ export function randomNumberButAtLeast(range, min) { return (rand < min) ? min : rand; } +export function randomNumber(n, cur) { + var rand = (Math.random() * n) - n / 2; + if (cur + rand < 0) return 0; + return rand; +} + + export function getIndexForCoordinate(config, x, y) { return (y * config.size.width + x) * 4; } diff --git a/circleBs/package-lock.json b/circleBs/package-lock.json new file mode 100644 index 0000000..f5ecbe9 --- /dev/null +++ b/circleBs/package-lock.json @@ -0,0 +1,872 @@ +{ + "name": "bubbles", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bubbles", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "canvas-common": "file:../canvas-common" + }, + "devDependencies": { + "vite": "^5.1.5" + } + }, + "../canvas-common": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/canvas-common": { + "resolved": "../canvas-common", + "link": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + } +} diff --git a/circleBs/package.json b/circleBs/package.json new file mode 100644 index 0000000..ef1fdd0 --- /dev/null +++ b/circleBs/package.json @@ -0,0 +1,19 @@ +{ + "name": "circleBs", + "version": "1.0.0", + "description": "", + "private": true, + "type": "module", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "dependencies": { + "canvas-common": "file:../canvas-common" + }, + "devDependencies": { + "vite": "^5.1.5" + } +} diff --git a/circleBs/src/index.html b/circleBs/src/index.html new file mode 100644 index 0000000..1ecbd96 --- /dev/null +++ b/circleBs/src/index.html @@ -0,0 +1,29 @@ + + +
+ + +l@PMNffBkwV{J`1wHa&`LyLO?S!~vdx zN@~T(_=kswzot{zl+VM+#MC=75`bj}75`dPbPrqwM1^#{@?Z|LU+E^Ak)oT8jg5hJ zuvrdEN-|(?Lxl)cyLRn*b@I6inB9F^ z4#lKK(sRGZ$dWOKFC{G;a90S>{@AfQujzV(6~@0ier;)K85$lA1w_V&pt1(htVVxj zcwsa^Lpp)q+`M`7kDotHuU_>}Nx9~FrNC*N6A&>(e)TD*tV +U@>KYpp;^OYM zx1T4} FpyiUo zCfSA!P7s-7r}J?=KX4b-`8jJLl#AwbiBxxG10d-yi+>KBzi?qaVZf>SW|o!}(}Uk} z!^OZ_ciy}a_;jPq7meq{6Tv+a5>J46-vdUFt5it<;L$|K!l#1s{QC8a4l)QD96_>V zW4E_Q;pXiYrY>Vbp%)|p>}=i6Ie|t5Xoa~BM%35e@2#6`KG|DZ{Y*Rn^GV`Ht9NWH z7dSc=amTJ*C(fT|zkByC_CS5Tapu#fEO`9b69it 7?GFp$dp2YFb)+fF~6dYAB#P`YAh`_AFmk zThrY7JT&w!m^!A-Tf+~&+vVohF))P9b{GN;0I{h64zAz0<&b#=9nH3F^;VgO4 +L4Zn>pK?jSAnOzZn7TaQjYutJw3gTX&o2QQ&7f}b8}ZP z^|EtvY^Q&p1Q8-rRepJ5qedb vpQW)ppNc!?)YeQ z5I;HEng1LJsxIZM@GGt8s(rC;MSq%7j^6si2=G{j&VDi9Wd}QZU_t`VL|XV|E?E~P zMa2!M_RnjpON5P#wTj0;xypB)8~T~L>)pF|*q9IgK#rCsS{0@di1H;9le+-1XwX3S zVF%8>TSo_82Z0QW>o#2@2}Qun+}s;$qpiIiBUvSwy|N+k1VO8OVNic7-e3MkNE|pO z*pRM~k-(ed^WWxA%U;aG&WG{_a3~5%1^Y!uARHJrD@`UWEX+$cxum$*3%Vx=GyVYb zK!SeCeqrH3i~wMVJz e&SPhUTyN?65zG zH-;Y3$skF7UYTvfx@VwBXE_Ylv;nSJ4_nefH5R=1`6 WI9D8&*7i9B>3X z%kSDu@FNJIv2yMdR8-u+C-@OEYuVV?pu=989c^*=^CQ`PHVR`urHMPNvaY#VHBndR z+_`T+Lq|PVWgra#ArZDv7R>PtW9BGC0(6Ga)=ZS-M8xiu4;<-$(x6x}?u(56N{Ucc zoL85L0*vwB(AxSyD=7gZ*+)^~#0hFlFu)M#)dJxU03ZLh=XjyZ&He4@TbLeP22Ff> zKIaj3 *$06Wp2t(0F=fx z0sYU Ji)jqZ$$AekWFP=y41I7MGm^O3S&jAL z=jXq)y1YQ@C`4|N0(Wa>mS8}sPs#`P3iS?O;OOW``ZWVXabI~z%cmQ=AaJ0hA(Nw% zL$^bdMgPOzd(k*-V{eZ_3fh1A)kKYC*C8T|uphaDMvIwTR9j0cEiEk|AfQy|Q{XM% zQIm}x?n}$@05Ae8fvw5F!cx(idF`m 9QVz6)RUoqH$B&F>xC!OBdKi_%_ABcq7qoE;U=ut@5szhO zASY*tZ^P|5Vt}GpcU|;BD0)x G6__KKpF8$2 zuZpfZICZqOwvui0Bl$FNj}M;PyNme`@KJ!Cq`aYe(8EUo`JMRpuM{p0KyZ6|JF59B zy2j$73xv610A9!qudqd`sx)wIaDYl%S`7a?G}TX>D29yl_%S0`Q2G31-|fC2N&Nh= zRQ<5$&%a@I;L#+Z1$_D>5f~Jt!_UaV#)hq72_clgSEz<>4Kg-Bs*jJ4Hz@Fs4dIfv zfRKUS?)RS-ssX_ei-4k?24ec)Fsutou%Dm5`*+QAVhX_GdZihOuC!4g{Eu;xknYu` zcW>|%h~EL=1F=;VJPc1uGgdAdSlh(hTnV%Tdx3k1BN4R2-IiRv+(JKtshL^jw{K=B z@tM( OPX!W?82qAWmgd01(VO(P1C*3HfBh{y5~=uoK3b!$d10fRCN;@>n`iAYGi zLaPJN1U`b~Uk-y1t(~wCG%uT5w+6tA;!~*O6P$Qq1z<%NX4`JsVx^##C+b#0;U`57 zcmUH3a_4afpTqSDTfvxtS8T>wGiQU?nykd}nV4x@5SY<$DenLzz`Ox&13Hhdx5P*E zefTbC1}Xyac%tP>?Br;R7~qo%w3nqT0RaK(nwtI4iUG~h7$c9`6C|vbsEeMu0GZ1_ zFtFsu4@P(QmDvw~91J=fMaE^Ze &EGjDE$Hc=D5%D)LkOs{+AR|L$czBrosGWCt z2-gPy1V{wwpFS~hTtJhlJ586&7^LE*pR)Jh!BlsxTmUcp8R!@UT$pf0&CSeUMQ`7} zg~?Ie(!vTxp{c1k-*caff`-N%qyZD|(SP}-RP?)*GiPD*2`G{Fwbp5S8Q6tg&W!~{ z4?D_FKjkvYW=yh^ii!$WEjJ1m%@>0l&>-$~k`|e>ZY%$qfi$NfNUSI2hG9miCk#HY zb=Wq_KBSysd~%_q-o3kCH~BGcOU$%{f*_Mfu`3g^vwTO7Mxr)CpFSn72-rWwLf{%r zsQb8a;O|og25P|Z41Aiq_wV=j_TIG4&dv@Sl~IAn?^Oj6*X5iicI)WqKnx1jmS1@c z32*|MlGvrM>#A#vYkvm(Zx*12Rmy=MAg2VCh6Z`@v$Fyqlhb(TKzE@RFbEKH2?Sh` zLx;Mn!VkzePmpDTfCz;0-%=##AR>Yp-60W@7IcTHiJs!w%+~MG(yES*5 +H^ zj+M0%qnKU007F(4ApOxmd=~q%ugg|SjQC9)I9wB6qt#?3X0Co z*}qPnnLn}6D68t^==ciVedETBU*>zMUunleN^=D#A=nClrV$Rj+{(;p45kkjHAQW0 z S(@a^h)dW?8Bm(i987KMC3qzXNOQt($md-OZ-C5Ro%mzRfs=kDX>rQ_friYRIw z<+%+P0u7gdXudEIQt!w}R-;rV*is 4-Ww55 EWyNiHV8Vf2GH*?2UwsPBd|NiSVQTySB&y;L#4k*LPbQ%X)h* zD|ozMjT4Oz600h})x^w92`~p>q07HNK3Q3kPy(>p!~sy^?g1#ql^k+kbO4?34+ #KfqG2JHfsIP2G<5C^ zD6Z`t9c}V!<2x;&m0;nx!8mVE{|4D5Itc}YV@XN0-UT11boi@eBBGA}GwU9pDZ#VA z2iwm5y)ZRBy#USwvhy1PMRknqt{|1;L@{gmun$lNB133YR5hRj(9&*RUed?1#w&lr zM%79(gIM6UFc3k*A*DC^N&u{%7mWcQPtf_fPsFq&oE|FRnKNfTFZ_Ov=5iW16?!e8 zapCvxA#um=zlSv*6&;OTdMxf#I$A9lFR}2^T%fz4#SZ;Q4l{68L|an>Dg)w&A95;L z4 WsyrhKa#F)42a!aFPGP1Hn z9>y{_-@ff%MQD^RG6!?xUFFr)G~kq-o@?$Ni^KbfvVF5)r3{^cd O*mm@nivRFe-(O29m_E4w_`I6zL& z71iO93k!#!Ri#7f)nO$%)WRH qyT2r6CaGMOX;c&KiZrOZGoA}~0~ zIGvkI!iGnL1Oir7&2vdyRq5BS>yT c-DCfhI0Tm_5+SRq{-;<67=iRtCbrFj0( zy3DU!33x-+6PVu|Rv%OcIwqzva5~ZtDnfYzIc1;0bRoa_@oJ-`we>4(Gxv9{W@bF- z9@zF!PC+wvV6qSw9ZJA`5dDVa)BE5y0as Kq4R#27-!QiUWN?p@V7mZ$RLiR1}K|0W_LY-aJ2ua;_dQ>EbDd?|Lx;d2KZlS z_kMEji+&I2lvKz0Q&Ur6^Tyn}w;|VY>;WDqHeNX>t3Sg&T^$_-@G8)8@G^`GRrDB$ zBpY`Fh@hX%%&f+CiNlMB1wu-;we=Yokv+)kB+Y-MmB$eg_OJsbuK)UqW=NJ)HJIH5 z=l~V6CFi^rG&Dk3FgXZS4^< V5n6 ziHw~g;tjYNaFr5FTTBChIJ8EfQ{uDZe#qm| +4PZk1V4%U@2XHP%zbGl&R%G08t>Cd9Ml{@U$i ?lh z9su?1C{~>GdY~ ScJKha@B{>Ru>d0MV+dszM=ER;K7>TRGEcm5HrNP$c#q98lPW)3Ami zZ`h)+F{mMMhebwKVtoxiU1x;`3Wjta8w0#g;o7wW*k5Rmkisgze^0``!tL4qZ9j^> zhCR^B;Q+_d$s5Q*^lAey02bkY=vKhjbx7Hf#1qEy 6=!aX_c*)eX2u2|blsUE_-~S5g>Tpq@|CF@0=B|vVy?gg6H}@Ij6MGnS zlLja0ngKQAPMtb)Mj5#$;!p3Axc;@G; DtunnKW>O+J4-Cr4Yz3WRfL~*}u zJ4rkRrZqe|C%EGK&{Pp^10}9PSQ0A@`~MzrB(wz=7Z<{h!8>}8c>>k~u*8^dgaA`e zAdg2+z%*py1}xb+gcK~VUNu22#nXEiNOWBLgB8qG4qzJAij_-!E_LgTHO%Z>Y_JPA zZlqc_zB-wUF1gk>NB(%1wBuW$qel(To;mZ6%TwRbF!@}bW9nZ7r*aV^>;PkN094OK zrX+gza(MnHrw-6LO-oCD>`7#;B0KV&80hIYEMKFq0nDeMq%;9wT^q=QvPKjj?6_$- z!OP?FR_xM_f$+c~86e6MCFlMOz4HNN|Mo!FCg3(CDSLtTXjnzP#jpLeLED>^pPQUC zfdl}TH67i2?fss3OfNVioPYqH%Y9sHwnuGHWgvf%@}6?&L?F(m_3rL|S1(PXp}6qR zlV!U|S^&=(OP~aS57Gm{SD2qfX>fG3fSpQUI%GtXYu5r0@>pD4Bn$%t1Sv;vaBd(d z1bUD$1Gpg3F%W5;&14GtA(q+N$_CSVYHAAJvpfOYqN0yrgRp=>66A?-f!aVc2KKLK zI+Aaol)f17@FFm}f`U#iJ*fm=BkmHO-xSoLOGrFjy7c1p1|meKASD1omU=Gh(c{M@ zuH*UT(19Z5+@(N+*pJxU!DNGO`$JCWcURlN3k4q0z{Vc{0ui7Af N&7cwpN3`L?-* zg)S^Y#kgY-hl!u08CeA0bbBz`={2&2Wo28;%*;rz6&`p+ZS8LusflmiP(fxyX%diz zdx86#nw`x8;0NEo6y4ex;2V5vOgIX09rzFx7#)CT@z6*B9z+3~F%&6jX@6rrlNo~f zg>B^w)(Pv$4GuIxEs(Tk|8{)CGg00Q+>rJRfl;(PjM{Y=VCC2c3%votzw(@fAybV} zA15l*=g%@)QAY|P4FOZ^!)P@r_N{MdPz3b^oRdI0ZwHSGk?4p81ulz9cAKi)hX(0K zMYqayF=cQFHAKXBWGnB(NR0wXMw#72dWvLqF|-@kMx^@ymHX~ x} zs{)cH#A~9va3k!Aikh0sP)to{HrJzQK^+i{g;+z+!O^k0Apn}ctm~{fzyd0p0Ym{v z5CZ9qwZDKXtViv5L5#>`1V9%<{+JlZ2wK=8nJp*Bi6 ##O}hv X~rGLoX1dXw1Au!s~=&z)m#z zdS^XU$nM@=;u%%e)>;fyg<}z+(I}-|%m)|NUFw)a%J=v8*zb4{{(gRhHsd$=w4(g7 zva*nZ1{`<^n>sWiLRC$T0%}Y=REIzok$YeiKi?WobLAyLsR>0NfrcV!-43rz6fqj~ z3urUEK$f^-uzO;W|NQxc?1!BP^!@&G#r*%JW!T+t3Ta6@#xVHoJh=ga;p6?MS)?5W zQQjqmh3oMdm`Uh28@e$B2(rF4@)N5 Q1DErw7|ov>sT&*$U^>_f-i$Pj$&DK)ot=+_@tur+_m0Ge zh}nfSL?w}E@b8`b_qU=m4uHnOhOS55l9&_*)?Ls1--{qQn5Y^^#~^C}C;epL`-!Z? z#;f~1*yjE;-)gqX{15)X26q6F$OXI|Mu_rVo^78m0_7gLZ{G?=Ya})d<4BHTTwSW+ z2Nh;Ix)*s4!;jvjr=LQMBXMb>c>66V-MQGi7cO5;v<5)R1%>znK$kN8?_X2X&!2zb zxV{Mp31Oyoq4qpy6l8Sv*^ab;7Llc v60@c<&X-P_>t7e}ClTC<$h0@91bCBxTrJJzQ(^TfsdwqosC&w;|4_4cQ-Y z6OwcTprT3DKY;)UIV}Up=>;q%A}RvPmd*agDwWLi9bM3 zMA=l4gDEI4s7c6_+aUvpxtN}j5eLDRz)a*`iPHf(hlme3NdxSQ>?a~P#f60m ujWUPNle#to%Czn8&cF@s%#e^k!exSPF9Zp?|2s$ATM$#{E zgs>z~P>2$N-G;Lny}--ofxe&~O!QYWkfQ*|YQT1a+7BLyU_7E3)bNqX(889T|C5qd z;z#W%{cq>O<5wMusn!W6Tf8-`k4=7Pd)jhj?YqMaAenX7mm1`uh(?0G`vSX+gr^Y( zMHZy(W^PVyE@?+#%iF(VlO2VI1T%y*3hcGA5U%Zn`a-@_0awBSn6!db4Mc2sRD;c7 zF(D%`1w$(!zt*RKBgja(v-ree$secAOt9GJ)gD>;cf9Gm_K=^`+LBjiLqidIatlJb z8@JG`TNRI8!El7dkDQC2689bv5%PFpLK2e*t%0ynSVr->$<7F+Lp;S25$8BB&vl6= z7bx6je!>LnmF>PHfxQp$Kn$Z2jF`uwh|*KKWv+HAo|hvn#w=OLO=Da=MI`H%vX1fQ zp;gzUud5IwueW~m$G`^y!Hznf)QG`V4se6Eh{e4NsS}l00Vi+)llK%qBb-=VeL3Xb z+b}gF5gdfz(E}JjGJ4RQV2Q%@AOaNl4kpPx*psAfLFlc1E~))?>%Qf&e%a5O7aK17 zRxhvxY4|6HZ`5rmh`%w=t$yM5Ur%jSPskw9MNC04VJ zDoiA%;O-8`mKb*svrQ}^^E1w$1X4Q1H}t%GZ8TxrqR)5w>Q z>>Gdz1?m!A2EsXsG7}Ax%X66=C%{uFgy0XKAS^n%=D%k!NDc~N5Fj61IML&Xe}Nz= zTEJ3)I4~G!4+$A)YlmRokxdVk0 m3px^1<<$pKy<%C{xmWFx}xNVVwzN279)`5-wR>_!s{3l(5AkYYk9 z0Tl_(H8 3=IvD zH1;8f7ebj=^?S9gzrH`sZ0@p{y=kWWXA{@yYy19G*&oVCFK;N^D7NcLV9nU-IN1e? zkiW2d`cX=R_>Ya%0GN<7NXY2mL<4w@4-7lZZxCC=WthOhaD{6r`O@1%a&wvGS7Y2C zRX;L+zmMU4n&2Mu9UJ)RPtk3ndO+o8c_83d%2eLiSX0XRlr!g&nIfo^>6rB%i&Iqy zohypbRIB)s7H0k^Qk^f%(9^Tzxx~(;_SxCAMR(clYt?QAU4s*DzxxHd?B(u*zL5hm zOo9eqQS~Ha4#13}LJcWE6(f+bx5OW A!6Ml*gzg=eH zPWlm*iG-ey+im`a4ch)nsDJ)NTEdfeTQ)W^Z|`Oqy;9fe#m7&T+`hHoPWsx4 zc~s%0ZdB&u$B&8b+3O%>2!VxQEAW4FYzRnyKi^%T#&M1 &F#KJEq*pI6Qa5Ov2hA7(1?5wDD`w?&z-{PKb(4?bW?lU`}yCd`)8XX< n$`GxPE!R37>Rgd=*CaKuJSw7xBE2aHN4nwru&hi&N-lMMd!>5x!r*BO@ukQ9! zwz$|T k5g*IvvMB15 dhV$x*y&7N#I^W;|~A5YA@~FG7I&hR-!~0Ea;hH7gip4 zKzt?#fWNHFo_ni*z%h>lkR3RJS?K&R?$C!2J<;f45cR~}=Zwcd2954^{ErHXK|-QL z7`Hgwur3>x^+IFpY6(aNC?{xMU44BaSfmJBQ1*EtwA+ONVb4lDG?F+{Q&a24(E2>z z8vvXY4j(BuH`f{UiF1*R9_#OM`S2C1KeLW1vyg~yOxi&&9piC&*J&=7&=(bqj2>*y zzSVNm2Mk*a6c5 K6~gk_MB%Q%@Z^v?wyM7UsC6ued?S&y7*fWbcgWl0FlR+*O` z+oBXwOAXEhRA!i!6ORyeN<&NAYnKDc*^6gIk~whbrKF@twgqQs3Jxvs%{Rw7>|%Q{ zU%_M~P%9?4rn4wzr5^o>F jD$UHZ zRxp0iGnP5D%;|1p^AINl-$SK_rQ8_0DPXSCRTx@4;@#q?G}t>TkeyHzzajpT%wcda zEmjiZ u+K~gO*FTW4N z0lKXU1QL=R@?2X1uw({LM;(%Z^FO!s;TgZ|myID=rh2aH)^Q1u_X2!VSbphR=NnjP zF `;9u7c_Fe>-a7<)%KT1)nZ)!BnJ_p z5z2BmID6@U-DKC=N*Ccy7KE7h!+bM?Zb#y+C>YrFgz7N`_@DtpoL9$&Kx`N-@6X5x zIrRam*AIe!2}g5yA}>DH*o$K?&;(eY*QmI DSn) zn?oOQjpFpRy?1x0zxJBpchCHBL0Z#tS&3*yyS5{>(qUb0no) *!7*`#r5y%u$J87br+C0wzKmh0vV7)lMq1{F)K^Q2_B#m)ko5ZjPIbQ zzt=o6fEWveguAG@J9&R|1CS>nph%F38f98+okci4weaU-a3kQ5kUlLlQ+FI^GeqGF z!Q(;uF~`J$^T+@T{o8 >wGDu#M9zR>He8 z*r){9m20luemjg@VhZDQP#i*AY(Y4-DFy?PWQ_Lj?@0)e eUeM#j$@J z-C@YTs0|APiX0$q2+;aE }|3zZ(=<-w5?`F@^9730e06YLb9$TH1D$98O$txlODm z@)JyIFxW}h;^a{N=ZnIQdC?fBA~#wO18+J*b$*K67Y>qNLE;qW>Zg `0qsI!Nm6neDd+)yF2p=4V?r#K`67%w&qbJ6AEMDdGT(-pl5;}jSBH?2b z2{yA~Yl=MyMe>5duNqDt?l_|C+O#*9ZQC!w4jQAA^RG9Y8s=V4cj9vQzXp9nZvZ7M z-jDM#eu^B&5dQgdN%qM*m1j5I0t|3o3 &GL zDgjH-8R?J>#U^8gmImn>?PvPy#_f1J#crjG6A9h6dD*s8$JxE~bI%D3zdfL^lTq2g zjVbHk>fZgQ{~i~7(tAsKf9o9Et+U(v*xv7<_ooPY?uUwN2$P=7?FfASkN+%nXVE}< z!VL9pJ~N51aaX2Fw6SdHY8gDk5s1Jb#I^^5D{L#`yWymg22NsuU6=zUku#$`MVk@S zTMu`qXv~pV&EUq6V_&>~PmeeW&TfOl!$P&g-vhO|UvFuS*?_TW1Ix0tjbJ&FKZ75m z<@dQ;wRp_#l>OwojlZ=R<*XWR8mlPI$}Au6V;LGz;y&}DF^P^Pvij+yn630E&5UDR zn@&Lan9@#`yPgK@+)9VT-2=)8c8lH?y%Daw$$Q^!rtJj}n7)~dqN79Oe_CS!D#$M& zumK0!Npu}A0|-BRkwhj=K9|VAu^(8xcr65W-X5HS9C?>#fM60iivxT`q6BCG9oD2I zWfuCw-Wp{-fO3XIwZ)(d @$sYR{myo)xD%N2Xp>TTt`J9$v={>N(V`Lt?s4|E{6&>w2!R zY|I~X&gU#apl2_U<}fX 1V6T(YLNl7;#VqG1H)f06b;)5n112oR%Ugm<`A|g5zpS#N& zA4zjWtt~5~UEfiXi&E9$4%^7>yJgXacH0ZR&2DM&2Ua#vP-wr%O7-=Q+FarO!$JHp ztz`8VHhO#JL$ h+9rU>?H6j}tY+8%t=wYEC9>z|8kTK+5>;@A8@28zjgx_F_- z>C+5&f5+;o2bu!Rdw>L-daZ&-34N^(&za=V(3%5Pc%an(XDflBeay<5ZaQlWHI_u+ z@#+pBL?X{-Ty5k-5W+Cangh_BAn+KGobr?QEm=T02ChZ~(V1|)Ncpm9>6oyE*+$tK z$>EXLr9X`Pi_Qi~sma?FXfXTNv@4vuyrZ@5NUMNQcM7FqGFwdZqY6e~+o i}iwL0`0hpX=b@&^ Cav9vq@VH&iA2q|{p6cBL+_ zBHW|fryGMO`eBIsS55OOb2vMb+k=#Mu^m4(WAKh~d3{b1^IG~5I)C&)%X D%`$BM%};V$e#im3|08( z2nKp%r-UMQ4dwCn-<-jrKYvW2>ktqMS%z3-h{9usVKp1t+P=YwJOWn-`hy4{$?~A* z>OQhb&?6OBZxx0Fo7GiChQ#hYV!_T}vGREK&k3cMnkpPGuT)r+iCFGci+!Nk6Hs*4 zD~*rhf}SV >emb!`fz z3&IaEwQp*|+k(tTBtxV$kuu62`_yJ56-`17K-SUl-$@`Iy9I;lcv^FxgH(>)02Nk_ zI9s?_438qP=(=HtBhgx)uD29T_LT!I@nQxK#<&K<{xk5)?p7^tZB%R-4%y*f(!biz z?6+69Re*{zDEdzOSuZu-S6Qi#x}Q!a{5?HyHL0`t(%-km*RLPzN#PiNwQ-Yj5(5ql zo;b_%<}1bZ{ODiRDlSF>YSsA>+3HR_M`19RK?q0Rf)9I{oD25$o&en@2UHN-Tqx#R z{Yu)8%Rd1ye+9m<4D4>$+ctR}2)O(=4;PP4oME8p I+I70?U7V-a@$mQ}i6iIWZP*Cu zZDWGQU!ow}At`e)v_c#^^Qn1jJ=AjHC#1}>hj039&YTaIl zkVx23gk9fI=#=~X+wj|b- VAK6e2g zocC+0O`fGT*LQI%(X=em1(a%jb`{@~!MaI_H%@QFhW20B)4Ye>Pi^P#m&Vijb+^Vj zof?Th<(c(vMYz)a$Nb`b)3?HWHx`e-z7<-*=#d@e$mp?JV&2d5q@vEdq|Rn#7Ze%) zBRDlUJL?$ZHl+@<4GXCksec}E@tyE95MjbN#$$UAMu@}TRUA(3#H}aU3X}>A4yC6G z%oNszCLb cRl9p z3eNblDXn}Ze{joi E*CSLLR-kb;2_T8YhSW+>^KKw>C4;N+@bsNA{W)eNU&!b zr5=`$n8Lf!5K-2GgO2tDWdR^%VOZO<3d6xxDjM4z=}hEROyDP?6exG>q_B=lo?+w= zKU=?PL_IQ>@s3Kd`r^sdmt7gAKQg_3a#A@JR7Zzc-z)g_?8f-`K(*?c`ovRPwE>Nf zCbrPmdYI|TYCgpFaM627scE0>+lF%Pvz7MODu|wsTHqOPgNq!*d+3mj8A7ID9!Ot) zz{I`i+_QOgtZOx>%{ng#FdW++{v{3>0@T*xWDCELkcv I$NDthsJohZ;S44{L9snxusZIcQ2@Kbs3^s4NXlx zO;)6flGvhOsVTCF$TP*Ir#}P%A_sI(sz``@I+Q0wx4bT-tuiyM)3n-K`f6IPlD7R( zq5Io#ji(&gW>+stSqYhaa4->(5UFeSM@tOhqxj5eR8@P4>reva14Ul?go&n0f30|( ztB=GtyrK^a{SMSRG=6ojOFPF G44M-zH7yU1MhuMY3=N+h14O!LPJh$ zlS64 oppb8iT%^wvr$w)j8}SKxIybSLk2Z~ax>VUYV=XHH4XVmbO_=jUUs zW8YN1%r*I*avGzsjda3}v`i7~Evwufd1xtVQ+c2&$J?aLWtp=D9=ni3UoP$qt#oJk z=$Jr7v-Ox@sENeSK9-LSI`-Q_+7xE*U3pmLt`c54=7{$JNV-+@p1YY}TClcMAcoPS z#J$5h>p9Zv(7m1_OI@%~a}(zww^I3-@`}7XwmbXZrt@P>$DvA~*w~ZY?^IE{s$A$x zpj1o^DEXnQVBV@{DmGqZ;1nI!CiyUHrr^}#X1Z9}kT11Tf8Mc|*<9aR8|SgSTuc!V zt8}(;+uM$Vzizm{)b{i%d&E#}G+le}TO*_*n30cEId7X|51Swq1KR*^F9OVghU2l+ z)&+lxydnwQ5;+I5XHBkSS?^3W#$L*rr3-&{AI*V2IqK5`YVQ)QV*+c_@AV75+63Ne zW<9j4ev@hfRp4$xp|C$Ewo(SFDRPG==xwHpd3+q=5%z}Z-?u!X;vqvbZT^)NNlD4< zH!4_gM`dSSN6O|9@#2-2=gMdtM$p~|XWB^9@R +5m6A;BEnTHlpg(G$^aJD_Nznn^stG-b&5y@-FWyGWl@Ib>TpD z*%pg5_lUar>d;b2&l_D|+z|x8%ZY-KSGbJVJ8~oD=jTTerL_+f3(td)>Mskwcd^rM z1xVyMbm)}d>ti<52X`|2Y36QAZoeP==fuae7mBQ`fYOzn`nE;U?n;%UMt{41rFrdM ztS3Lvz~S@q50W!Cgeoa^G!^?PnQlpiSRHUxNZPBTAt*7)=Wp4r_D}N>U@7tjK-{%> z|4Oara=9l>tna9Ul%%7B0|NY|5V>Hk^fVW&iX+Xf%pJO$-k+!vaQB&OWf?G?`W#K) z9w-w(d~CQf8nY6;;F0L9{daXL=kEtA06B4o>bg(vw!R x3__lHZbDS}z=^YK6X z>c{(rYL1RwY<*tlR<2Ci!Mb%l{w*_3S#*-a)*s_+J*TU^kZ6G0W$@9me&Un~=pH$? zLn4CzeG3Po&qS6aGz!dm3b32v+xgA+xVr6rfxsN+4zn+>YPONSKlC=|L9B$cc~1Zr zO>77goz}2Fhl6;>Zu`Fs{L3FbMVOcq^tQ(9ZKY?4)I?jey1>X85%#6l#X6>~W !NJ>1oDjfG^5#aAk*=Oz33(AA)FmHFs!j6UzgxcB z9K8-yQ8Te> sZZ_55=| zMB>NA1*(9IyQ2%*?rHlbye{Y7W`KYSof*=f8vNC3IEPt3@(-Hc`iO7JNPr?mfK4WX zp0wxDhQjT)LIXm29FI;kc?UjYq=wXynBxEYy_ix+exIw^RECqB<~8LV%En*rg&5rr zQBl2QF8b!H&D&Rwc`7+6H#><1C%8?kizWO5%9k$^i?-E14V|9jD;g?in5$`sIu? z60RXsBatW4oMd6H#JWq^y~{bao8`uftY}QwvKqHd5M^8I49p+Mr)i$vs$8$*&RTHi zka<=8^MVrk{jGH@CAzG+uk}E`OvlF)F$xl^V(-fFMA|o-j!TMID9TB>|LL0B`a13| zv^#QQ86_I*07{766NLTJ>D;%CaFJ$X&l)I0c&h Ljd*ywv@)t$b! O95WZ~p)~Ar4fYrvgS2(bz?5myaE?a4ZQ$k9GG}Xw za32?&ws}>Tyn|z22RY(^CPCiR^5fE>bR1$thg}DhjMv6ZLh7YH(7ov%*PEf*J?s+H zqKOX{N4n|^?C$-2WrzMVZ@EE4f(2{M^F&R(ItRHe@eBV-Uv^};>Gi7m>jkR`mR=nP zIFh;j)1mLMP*U{6Uz9`fx@&*mA7!T{ufW40WW0@Fof^y`HS`L+&(uJWiM+JwiLkMj zl9Km-hG2Ho@n3Ic8M#^%q0qHZ$HryGKm2j^glbR|hXi%R_Rk8=y0mi7c3Vd+)BQ(` zrF^}C2e{Q)Rw(!R&4wmD-^>*M+SZZ&gYLA^aw}W{=YUT0^Z)ZozYi@qw5;raFvB=e zGI7WQrw!AZPrxOn_g6xnoY;tIk$hxrbKjLU# ;AmsC_HMp_vrYS@e5tL9#2*~ zX%$WRx>-IR0!n}Y1p3tU<3XE CnG7!+ZcvZXPC?zh@0tCM`1 zvLOk@=AZ7}GwIwqb6>6c!ZBx4+8*_z-X$kX#@M+94vupPodaD!l8$7qVI;#u-g?Iw zaeav9I3xk$Sd{!~Lt$69c=)rV`l`Qeyg&${0!{ujppq1W#^@BEf#SXP((^TWQ%ZA><8&3e5? ^^wWz;l$+$gj{Ivdblv6?`{YxVqGswDy`6vY5+m<8g%O)?`=9gGADk-TO2imxG>` z3K~jIQgi7moJ0MHr3zA~J%H0bKzCEw|GAO_SS%LQYV}C#e(u~ke)F5(uy*ZQq!%w< zBsDda1q&7k(G&=7VQ9ci^`(P^C1hdltVgOCUgZ`PolaL{DUBs3h{>2W>Ynh#9Q?x) zXed5L?8Mo`eD@EAC-bU{_T%-qXevF;_*swsQ_49oFhF#4G&Y-!k3asHz`#KE?Ae1> zt3@0d8p^6wtAw$+K=1?O^0vxCLSn`f6rGO8?HaXRJL$GX4D@x-QFHZs_xh*<(dkoY zC^`OD--sBpS*R@B$Jjd`{+s*C|6Vqmjjda^5)l!>!i5V*cCd+KVq(b5%oHLj5ZtQb zn2q$C+E4{X;27-3F=)kDU(7(C5qp0x9*>*kDNE?Ay+&JQ5iW;))cqkb6R`Dl(%p1p z_z#E2%|KrV#s&l9XFf9Oob&%HrBcbslP8Ibi(}rrd84+Liv|Y=y-KB0h^Rnt3+3N_ z!a#2ae*U4j-7ZY6l>|kn lix0vi@kgI^2a~^kyEEmeeZjzP{{>?TWcvlN2B2s zWA9u^aLhQQG6gN==Lm{U$1flZ*U%tt*AS-GDk{!?PU;=Ya69bub=1<;e1qDnhj0v9 zk;;9rnT-tD%!DUqBaz8b>-7KBvYJdL3 UUat^Rf#5I4 L z&S2?kqOI~Gcdq&!QiU%7{XMNz742ifU5}5PZ3bZOtjBQj1G48oHL5%A^?DJBL|ps& zZN^NPiC8M*=C_|RW$AzYQ_H-0^JXF=BQcpw^!NAk^wUp|`d&x^ClLG !RpsuAuJ9VY2Rh z>YrNP=H_NjpFYjJdGomU-g~)x`7%zYQ>f?y!4Gi`TB$hq1#y$+f=GmYpqJjZ8a(bl zFK3NN${{c+nfhx-MlEyo)drJ%+aj6_C-JyPS2Sx+E4>{xBxKL~r_Qni?BBni*|TS( zP$&ou4J9`>mv6rLX5{<+{(hnBE)e_=kITu0-7g_k_%P7h0f=zeEGYc6IEQR#L&gx5 zHkHu$Nl0Z1sxKbIF=!z%cL6fxaNaks$4&L6gM`G4$3H9{kIPBFsf|+~{6DhpeVWLW zDgWFudps;yuz>B`w~xFcZ*Onswbx!_#*7&pJ9do5#zutHt^xtWi&$zdeT8GtO8Sfy z`1yw-_fb=E{tGn0(S*fiGGH;%*Iq;Ag)a$;PA6&dBDxw&slHS&yp&ZcL**Za*X^dN za4&uV;fN(t+|D7?x+o%&|M^K)+uPgG>-8g*yt1;Aef##&(b2)7Lx)(sdNpZjY5aer WfItl&1jX(E0000 ![]()
+
![]()