From e81085f9442304c39ed73ec740fa77115495de91 Mon Sep 17 00:00:00 2001 From: Phil Date: Sun, 8 Jan 2023 16:00:55 +0100 Subject: [PATCH] feat(rotate): add new way to rotate the led matrix closes #3 --- frontend/package-lock.json | 1749 ++++++++--------- frontend/package.json | 12 +- frontend/src/app.css.ts | 1 - frontend/src/app.tsx | 44 +- frontend/src/components/LedMatrix.tsx | 43 +- .../src/{Creator.css.ts => creator.css.ts} | 0 frontend/src/{Creator.tsx => creator.tsx} | 2 +- frontend/src/helpers.ts | 52 +- frontend/src/main.tsx | 2 +- include/screen.h | 58 +- src/screen.cpp | 119 +- src/webgui.cpp | 1168 +++++------ src/websocket.cpp | 4 +- 13 files changed, 1544 insertions(+), 1710 deletions(-) rename frontend/src/{Creator.css.ts => creator.css.ts} (100%) rename frontend/src/{Creator.tsx => creator.tsx} (99%) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b1654f..9ba5d28 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15,14 +15,14 @@ }, "devDependencies": { "@gfx/zopfli": "^1.0.15", - "@preact/preset-vite": "^2.4.0", + "@preact/preset-vite": "^2.5.0", "@vanilla-extract/css": "^1.9.2", "@vanilla-extract/vite-plugin": "^3.7.0", - "sass": "^1.56.1", - "terser": "^5.15.1", - "typescript": "^4.9.3", - "vite": "^3.2.4", - "vite-plugin-singlefile": "^0.13.1" + "sass": "^1.57.1", + "terser": "^5.16.1", + "typescript": "^4.9.4", + "vite": "^4.0.4", + "vite-plugin-singlefile": "^0.13.2" } }, "node_modules/@ampproject/remapping": { @@ -51,34 +51,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -90,12 +90,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz", - "integrity": "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -130,14 +130,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -194,9 +195,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -204,9 +205,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -273,14 +274,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -301,9 +302,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -343,16 +344,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -377,45 +378,45 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -424,9 +425,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -444,9 +445,9 @@ "dev": true }, "node_modules/@esbuild/android-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", - "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz", + "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==", "cpu": [ "arm" ], @@ -459,10 +460,154 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz", + "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz", + "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz", + "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz", + "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz", + "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz", + "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz", + "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz", + "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz", + "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-loong64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", - "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz", + "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==", "cpu": [ "loong64" ], @@ -475,6 +620,182 @@ "node": ">=12" } }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz", + "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz", + "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz", + "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz", + "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz", + "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz", + "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz", + "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz", + "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz", + "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz", + "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz", + "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@gfx/zopfli": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@gfx/zopfli/-/zopfli-1.0.15.tgz", @@ -559,9 +880,9 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.4.0.tgz", - "integrity": "sha512-EiUMHuiCThuTuK+eH2r5uDg+CJbbt4aWJGePuszrHuXUpRv6WAeO4S+/DTJsEHtPtGmPRR3cLQ68N5097eOSRA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", + "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.14.9", @@ -575,7 +896,7 @@ }, "peerDependencies": { "@babel/core": "7.x", - "vite": "2.x || 3.x" + "vite": "2.x || 3.x || 4.x" } }, "node_modules/@prefresh/babel-plugin": { @@ -750,16 +1071,6 @@ "outdent": "^0.8.0" } }, - "node_modules/@vanilla-extract/integration/node_modules/esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - } - }, "node_modules/@vanilla-extract/private": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", @@ -812,9 +1123,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -909,9 +1220,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true, "funding": [ { @@ -1013,408 +1324,61 @@ "cssesc": "bin/cssesc" }, "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-object-diff": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", - "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", - "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.13", - "@esbuild/linux-loong64": "0.15.13", - "esbuild-android-64": "0.15.13", - "esbuild-android-arm64": "0.15.13", - "esbuild-darwin-64": "0.15.13", - "esbuild-darwin-arm64": "0.15.13", - "esbuild-freebsd-64": "0.15.13", - "esbuild-freebsd-arm64": "0.15.13", - "esbuild-linux-32": "0.15.13", - "esbuild-linux-64": "0.15.13", - "esbuild-linux-arm": "0.15.13", - "esbuild-linux-arm64": "0.15.13", - "esbuild-linux-mips64le": "0.15.13", - "esbuild-linux-ppc64le": "0.15.13", - "esbuild-linux-riscv64": "0.15.13", - "esbuild-linux-s390x": "0.15.13", - "esbuild-netbsd-64": "0.15.13", - "esbuild-openbsd-64": "0.15.13", - "esbuild-sunos-64": "0.15.13", - "esbuild-windows-32": "0.15.13", - "esbuild-windows-64": "0.15.13", - "esbuild-windows-arm64": "0.15.13" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", - "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", - "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", - "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", - "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", - "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", - "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", - "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", - "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", - "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", - "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", - "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", - "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", - "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", - "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", - "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", - "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", - "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/esbuild-windows-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", - "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", - "cpu": [ - "ia32" - ], + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esbuild-windows-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", - "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", - "cpu": [ - "x64" - ], + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", - "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", - "cpu": [ - "arm64" - ], + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" } }, "node_modules/escalade": { @@ -1553,9 +1517,9 @@ } }, "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, "node_modules/is-binary-path": { @@ -1621,7 +1585,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/jsesc": { "version": "2.5.2", @@ -1636,9 +1601,9 @@ } }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -1683,16 +1648,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "yallist": "^3.0.2" } }, "node_modules/media-query-parser": { @@ -1736,9 +1698,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node_modules/normalize-path": { @@ -1820,9 +1782,9 @@ } }, "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "funding": [ { @@ -1881,31 +1843,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/react-intersection-observer": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz", @@ -1936,9 +1873,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/require-like": { @@ -1968,11 +1905,10 @@ } }, "node_modules/rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", "dev": true, - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -1985,9 +1921,9 @@ } }, "node_modules/sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -2001,15 +1937,6 @@ "node": ">=12.0.0" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2072,9 +1999,9 @@ } }, "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -2111,9 +2038,9 @@ } }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2150,15 +2077,15 @@ } }, "node_modules/vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "dev": true, "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", + "esbuild": "^0.16.3", + "postcss": "^8.4.20", "resolve": "^1.22.1", - "rollup": "^2.79.1" + "rollup": "^3.7.0" }, "bin": { "vite": "bin/vite.js" @@ -2199,9 +2126,9 @@ } }, "node_modules/vite-plugin-singlefile": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.1.tgz", - "integrity": "sha512-JS4pHPIEAdRtHPi1Aw4ro2KuzpSNR9R/7dFIgrOBwRSVIgbqtskTAidNm3bzlISf6VfGBYvkT+IOl4eJHYQ+lQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", + "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", "dev": true, "dependencies": { "micromatch": "^4.0.5" @@ -2210,24 +2137,52 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "rollup": "^3.2.5", - "vite": "^3.2.3" + "rollup": ">=2.79.0", + "vite": ">=3.2.0" } }, - "node_modules/vite/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", + "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==", "dev": true, + "hasInstallScript": true, "bin": { - "rollup": "dist/bin/rollup" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.2" - } + "@esbuild/android-arm": "0.16.15", + "@esbuild/android-arm64": "0.16.15", + "@esbuild/android-x64": "0.16.15", + "@esbuild/darwin-arm64": "0.16.15", + "@esbuild/darwin-x64": "0.16.15", + "@esbuild/freebsd-arm64": "0.16.15", + "@esbuild/freebsd-x64": "0.16.15", + "@esbuild/linux-arm": "0.16.15", + "@esbuild/linux-arm64": "0.16.15", + "@esbuild/linux-ia32": "0.16.15", + "@esbuild/linux-loong64": "0.16.15", + "@esbuild/linux-mips64el": "0.16.15", + "@esbuild/linux-ppc64": "0.16.15", + "@esbuild/linux-riscv64": "0.16.15", + "@esbuild/linux-s390x": "0.16.15", + "@esbuild/linux-x64": "0.16.15", + "@esbuild/netbsd-x64": "0.16.15", + "@esbuild/openbsd-x64": "0.16.15", + "@esbuild/sunos-x64": "0.16.15", + "@esbuild/win32-arm64": "0.16.15", + "@esbuild/win32-ia32": "0.16.15", + "@esbuild/win32-x64": "0.16.15" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -2272,41 +2227,41 @@ } }, "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true }, "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz", - "integrity": "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -2334,14 +2289,15 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" } }, @@ -2380,9 +2336,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -2390,9 +2346,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, "@babel/helper-plugin-utils": { @@ -2438,14 +2394,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/highlight": { @@ -2460,9 +2416,9 @@ } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/plugin-syntax-jsx": { @@ -2484,16 +2440,16 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.20.7" } }, "@babel/plugin-transform-react-jsx-development": { @@ -2506,47 +2462,47 @@ } }, "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -2561,16 +2517,156 @@ "dev": true }, "@esbuild/android-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", - "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz", + "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz", + "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz", + "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz", + "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz", + "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz", + "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz", + "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz", + "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz", + "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz", + "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", - "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz", + "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz", + "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz", + "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz", + "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz", + "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz", + "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz", + "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz", + "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz", + "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz", + "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz", + "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz", + "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==", "dev": true, "optional": true }, @@ -2645,9 +2741,9 @@ } }, "@preact/preset-vite": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.4.0.tgz", - "integrity": "sha512-EiUMHuiCThuTuK+eH2r5uDg+CJbbt4aWJGePuszrHuXUpRv6WAeO4S+/DTJsEHtPtGmPRR3cLQ68N5097eOSRA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", + "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.14.9", @@ -2670,8 +2766,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", - "dev": true, - "requires": {} + "dev": true }, "@prefresh/utils": { "version": "1.1.3", @@ -2802,14 +2897,6 @@ "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "outdent": "^0.8.0" - }, - "dependencies": { - "esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "dev": true - } } }, "@vanilla-extract/private": { @@ -2852,9 +2939,9 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -2865,8 +2952,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", - "dev": true, - "requires": {} + "dev": true }, "base64-js": { "version": "1.5.1", @@ -2908,9 +2994,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true }, "chalk": { @@ -2995,9 +3081,9 @@ } }, "deep-object-diff": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", - "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", "dev": true }, "deepmerge": { @@ -3013,174 +3099,10 @@ "dev": true }, "esbuild": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", - "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.13", - "@esbuild/linux-loong64": "0.15.13", - "esbuild-android-64": "0.15.13", - "esbuild-android-arm64": "0.15.13", - "esbuild-darwin-64": "0.15.13", - "esbuild-darwin-arm64": "0.15.13", - "esbuild-freebsd-64": "0.15.13", - "esbuild-freebsd-arm64": "0.15.13", - "esbuild-linux-32": "0.15.13", - "esbuild-linux-64": "0.15.13", - "esbuild-linux-arm": "0.15.13", - "esbuild-linux-arm64": "0.15.13", - "esbuild-linux-mips64le": "0.15.13", - "esbuild-linux-ppc64le": "0.15.13", - "esbuild-linux-riscv64": "0.15.13", - "esbuild-linux-s390x": "0.15.13", - "esbuild-netbsd-64": "0.15.13", - "esbuild-openbsd-64": "0.15.13", - "esbuild-sunos-64": "0.15.13", - "esbuild-windows-32": "0.15.13", - "esbuild-windows-64": "0.15.13", - "esbuild-windows-arm64": "0.15.13" - } - }, - "esbuild-android-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", - "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", - "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", - "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", - "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", - "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", - "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", - "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", - "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", - "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", - "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", - "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", - "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", - "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", - "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", - "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", - "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", - "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", - "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", - "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", - "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", - "dev": true, - "optional": true + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "dev": true }, "escalade": { "version": "3.1.1", @@ -3278,9 +3200,9 @@ "dev": true }, "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, "is-binary-path": { @@ -3331,7 +3253,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "jsesc": { "version": "2.5.2", @@ -3340,9 +3263,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "kolorist": { @@ -3372,13 +3295,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "yallist": "^3.0.2" } }, "media-query-parser": { @@ -3413,9 +3336,9 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "normalize-path": { @@ -3473,9 +3396,9 @@ "dev": true }, "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -3498,36 +3421,15 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==" }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, "react-intersection-observer": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz", - "integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==", - "requires": {} + "integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==" }, "react-use-websocket": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.2.0.tgz", - "integrity": "sha512-ZovaTlc/tWX6a590fi3kMWImhyoWj46BWJWvO5oucZJzRnVVhYtes2D9g+5MKXjSdR7Es3456hB89v4/1pcBKg==", - "requires": {} + "integrity": "sha512-ZovaTlc/tWX6a590fi3kMWImhyoWj46BWJWvO5oucZJzRnVVhYtes2D9g+5MKXjSdR7Es3456hB89v4/1pcBKg==" }, "readdirp": { "version": "3.6.0", @@ -3539,9 +3441,9 @@ } }, "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "require-like": { @@ -3562,19 +3464,18 @@ } }, "rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", "dev": true, - "peer": true, "requires": { "fsevents": "~2.3.2" } }, "sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -3582,15 +3483,6 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3635,9 +3527,9 @@ "dev": true }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -3662,9 +3554,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, "update-browserslist-db": { @@ -3678,38 +3570,65 @@ } }, "vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "dev": true, "requires": { - "esbuild": "^0.15.9", + "esbuild": "^0.16.3", "fsevents": "~2.3.2", - "postcss": "^8.4.18", + "postcss": "^8.4.20", "resolve": "^1.22.1", - "rollup": "^2.79.1" + "rollup": "^3.7.0" }, "dependencies": { - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "esbuild": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", + "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==", "dev": true, "requires": { - "fsevents": "~2.3.2" + "@esbuild/android-arm": "0.16.15", + "@esbuild/android-arm64": "0.16.15", + "@esbuild/android-x64": "0.16.15", + "@esbuild/darwin-arm64": "0.16.15", + "@esbuild/darwin-x64": "0.16.15", + "@esbuild/freebsd-arm64": "0.16.15", + "@esbuild/freebsd-x64": "0.16.15", + "@esbuild/linux-arm": "0.16.15", + "@esbuild/linux-arm64": "0.16.15", + "@esbuild/linux-ia32": "0.16.15", + "@esbuild/linux-loong64": "0.16.15", + "@esbuild/linux-mips64el": "0.16.15", + "@esbuild/linux-ppc64": "0.16.15", + "@esbuild/linux-riscv64": "0.16.15", + "@esbuild/linux-s390x": "0.16.15", + "@esbuild/linux-x64": "0.16.15", + "@esbuild/netbsd-x64": "0.16.15", + "@esbuild/openbsd-x64": "0.16.15", + "@esbuild/sunos-x64": "0.16.15", + "@esbuild/win32-arm64": "0.16.15", + "@esbuild/win32-ia32": "0.16.15", + "@esbuild/win32-x64": "0.16.15" } } } }, "vite-plugin-singlefile": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.1.tgz", - "integrity": "sha512-JS4pHPIEAdRtHPi1Aw4ro2KuzpSNR9R/7dFIgrOBwRSVIgbqtskTAidNm3bzlISf6VfGBYvkT+IOl4eJHYQ+lQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", + "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", "dev": true, "requires": { "micromatch": "^4.0.5" } }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6c26e28..f9646e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,13 +16,13 @@ }, "devDependencies": { "@gfx/zopfli": "^1.0.15", - "@preact/preset-vite": "^2.4.0", + "@preact/preset-vite": "^2.5.0", "@vanilla-extract/css": "^1.9.2", "@vanilla-extract/vite-plugin": "^3.7.0", - "sass": "^1.56.1", - "terser": "^5.15.1", - "typescript": "^4.9.3", - "vite": "^3.2.4", - "vite-plugin-singlefile": "^0.13.1" + "sass": "^1.57.1", + "terser": "^5.16.1", + "typescript": "^4.9.4", + "vite": "^4.0.4", + "vite-plugin-singlefile": "^0.13.2" } } diff --git a/frontend/src/app.css.ts b/frontend/src/app.css.ts index beb072c..43b4466 100644 --- a/frontend/src/app.css.ts +++ b/frontend/src/app.css.ts @@ -1,5 +1,4 @@ import { style } from '@vanilla-extract/css'; -import { multiplier } from './main.css'; export const wrapper = style({ display: 'grid', diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx index 3bc6b0c..8a233c4 100644 --- a/frontend/src/app.tsx +++ b/frontend/src/app.tsx @@ -1,11 +1,7 @@ -import { useEffect, useState } from 'preact/hooks'; +import { useMemo, useState } from 'preact/hooks'; import { ReadyState } from 'react-use-websocket/dist/lib/constants'; import { useWebSocket } from 'react-use-websocket/dist/lib/use-websocket'; -import { - loadImageAndGetDataArray, - rotateArray, - rotateArrayByDegree, -} from './helpers'; +import { loadImageAndGetDataArray, rotateArray } from './helpers'; import { MODE } from './types'; import { controlColumn, wrapper } from './app.css'; import { LedMatrix } from './components/LedMatrix'; @@ -22,6 +18,11 @@ export function App() { const [leds, setLeds] = useState([...new Array(256)].fill(0)); const [mode, setMode] = useState(MODE.NONE); + const rotatedMatrix = useMemo( + () => rotateArray(indexMatrix, rotation), + [rotation, indexMatrix] + ); + const { sendMessage, readyState } = useWebSocket( `${ import.meta.env.PROD @@ -46,14 +47,10 @@ export function App() { setMode(Object.values(MODE)[json.mode as number]); setRotation(json.rotation); - setIndexMatrix([ - ...rotateArrayByDegree( - [...new Array(256)].map((_, i) => i), - json.rotation - ), - ]); + setIndexMatrix([...new Array(256)].map((_, i) => i)); + if (json.data) { - setLeds(rotateArrayByDegree(json.data, json.rotation)); + setLeds(json.data); } break; @@ -77,18 +74,17 @@ export function App() { }; const rotate = (turnRight = false) => { - if (turnRight) { - setRotation(rotation + 90); - } else { - setRotation(rotation - 90); - } + let currentRotation = rotation; - if (rotation <= -360 || rotation >= 360) { - setRotation(0); - } + currentRotation = turnRight + ? currentRotation > 3 + ? 1 + : currentRotation + 1 + : currentRotation <= 0 + ? 3 + : currentRotation - 1; - setLeds((state: number[]) => rotateArray(state, turnRight)); - setIndexMatrix((state: number[]) => rotateArray(state, turnRight)); + setRotation(currentRotation); sendMessage( JSON.stringify({ @@ -151,7 +147,7 @@ export function App() { { wsMessage('led', data); }} diff --git a/frontend/src/components/LedMatrix.tsx b/frontend/src/components/LedMatrix.tsx index a2234a6..91bb9f4 100644 --- a/frontend/src/components/LedMatrix.tsx +++ b/frontend/src/components/LedMatrix.tsx @@ -18,8 +18,6 @@ export function LedMatrix(props: Props) { const [isMouseDown, setMouseIsDown] = useState(false); const setLed = (index: number) => { - const rotatedIndex = props.indexData[index]; - const status = Number(!props.data[index]); const newState = props.data.map((led, i) => i === index ? Number(status) : led @@ -27,7 +25,7 @@ export function LedMatrix(props: Props) { if (props.onSetLed) { props.onSetLed({ - index: rotatedIndex, + index, status, }); } @@ -53,23 +51,28 @@ export function LedMatrix(props: Props) { setMouseIsDown(false); }} > - {props.data.map((status, index) => ( -
{ - setLed(index); - setMouseIsDown(true); - }} - onPointerEnter={() => { - if (isMouseDown) { - setLed(index); - } - }} - > -
-
- ))} + {props.data.map((_, index) => { + const rIndex = props.indexData[index]; + return ( +
{ + setLed(rIndex); + setMouseIsDown(true); + }} + onPointerEnter={() => { + if (isMouseDown) { + setLed(rIndex); + } + }} + > +
+
+ ); + })} ); diff --git a/frontend/src/Creator.css.ts b/frontend/src/creator.css.ts similarity index 100% rename from frontend/src/Creator.css.ts rename to frontend/src/creator.css.ts diff --git a/frontend/src/Creator.tsx b/frontend/src/creator.tsx similarity index 99% rename from frontend/src/Creator.tsx rename to frontend/src/creator.tsx index 7283cfe..cbe9955 100644 --- a/frontend/src/Creator.tsx +++ b/frontend/src/creator.tsx @@ -10,7 +10,7 @@ import { screenHeader, screensWrapper, wrapper, -} from './Creator.css'; +} from './creator.css'; import { chunkArray, matrixToHexArray } from './helpers'; import { connectionInformation } from './main.css'; diff --git a/frontend/src/helpers.ts b/frontend/src/helpers.ts index d3612f1..9cddf80 100644 --- a/frontend/src/helpers.ts +++ b/frontend/src/helpers.ts @@ -35,46 +35,30 @@ export const loadImageAndGetDataArray = (cb: (data: number[]) => void) => { }; }; -export const rotateArrayByDegree = (data: number[], degree: number) => { - const numRotations = degree / 90; - const isRight = numRotations > 0; - - [...new Array(Math.abs(numRotations))].forEach(() => { - data = rotateArray(data, isRight); - }); - - return data; -}; - -export const rotateArray = (matrix: number[], turnRight = false) => { +export const rotateArray = (matrix: number[], rotations: number) => { const SIZE = 16; const newState = [...matrix]; - for (let i = 0; i < SIZE; i++) { - for (let j = i; j < SIZE; j++) { - let temp = newState[i * SIZE + j]; - newState[i * SIZE + j] = newState[j * SIZE + i]; - newState[j * SIZE + i] = temp; - } - } - for (let i = 0; i < SIZE; i++) { - let col1 = 0; - let col2 = SIZE - 1; - while (col1 < col2) { - let index1 = i * SIZE + col1; - let index2 = i * SIZE + col2; - if (!turnRight) { - index1 = col1 * SIZE + i; - index2 = col2 * SIZE + i; - } + const swap = (arr: number[], i: number, j: number) => { + const temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + }; - let temp = newState[index1]; - newState[index1] = newState[index2]; - newState[index2] = temp; - col1++; - col2--; + for (let row = 0; row < SIZE / 2; row++) { + for (let col = row; col < SIZE - row - 1; col++) { + for (let r = 0; r < rotations; r++) { + swap(newState, row * SIZE + col, col * SIZE + (SIZE - 1 - row)); + swap( + newState, + row * SIZE + col, + (SIZE - 1 - row) * SIZE + (SIZE - 1 - col) + ); + swap(newState, row * SIZE + col, (SIZE - 1 - col) * SIZE + row); + } } } + return newState; }; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index cfb1e5a..c487b6b 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,6 +1,6 @@ import { render } from 'preact'; import { App } from './app'; -import { Creator } from './Creator'; +import { Creator } from './creator'; import './main.css'; import { useEffect, useState } from 'preact/hooks'; diff --git a/include/screen.h b/include/screen.h index 80aa308..d24aee9 100644 --- a/include/screen.h +++ b/include/screen.h @@ -10,44 +10,28 @@ class Screen_ { private: Screen_() = default; - uint8_t defaultPositions[ROWS * COLS] = { - 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; int findPosition(uint8_t count); + void rotate(); uint8_t renderBuffer_[ROWS * COLS]; - uint8_t positions[ROWS * COLS] = { - 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; - uint8_t rotatedPositions[ROWS * COLS]; + uint8_t rotatedRenderBuffer_[ROWS * COLS]; uint8_t cache[ROWS * COLS]; + uint8_t positions[ROWS * COLS] = { + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; public: static Screen_ &getInstance(); @@ -59,14 +43,14 @@ class Screen_ int currentRotation; void setRenderBuffer(const uint8_t *renderBuffer); - const uint8_t *getRenderBuffer() const; + uint8_t *getRenderBuffer(); + uint8_t *getRotatedRenderBuffer(); void clear(bool rerender = true); void drawLine(uint8_t line, bool isHorizontal); void setPixel(uint8_t x, uint8_t y, uint8_t value); void setPixelAtIndex(uint8_t index, uint8_t value); void render(); - void rotate(int degree = 90); void loadFromStorage(); void persist(); void cacheCurrent(); diff --git a/src/screen.cpp b/src/screen.cpp index dbc73d4..81ad5a4 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -10,7 +10,20 @@ void Screen_::setRenderBuffer(const uint8_t *renderBuffer) } } -const uint8_t *Screen_::getRenderBuffer() const +uint8_t *Screen_::getRotatedRenderBuffer() +{ + this->rotatedRenderBuffer_[ROWS * COLS]; + for (int i = 0; i < ROWS * COLS; i++) + { + this->rotatedRenderBuffer_[i] = this->renderBuffer_[i]; + } + + this->rotate(); + + return this->rotatedRenderBuffer_; +} + +uint8_t *Screen_::getRenderBuffer() { return this->renderBuffer_; } @@ -22,7 +35,8 @@ uint8_t Screen_::getBufferIndex(int index) void Screen_::loadFromStorage() { - // https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/ +// https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/ +#ifdef ENABLE_STORAGE storage.begin("led-wall", false); if (currentMode == NONE) { @@ -35,78 +49,24 @@ void Screen_::loadFromStorage() storage.getBytes("data", this->cache, ROWS * COLS); } storage.end(); +#endif } -void Screen_::rotate(int degree) +void Screen_::rotate() { - uint8_t SIZE = 16; - uint8_t tempPositions[ROWS * COLS]; - - bool turnRight = degree > 0; - int rotations = abs(floor(degree / 90)); - - this->currentRotation = degree; - if (this->currentRotation <= -360 || this->currentRotation >= 360) - { - this->currentRotation = 0; - } - - if (rotations == 0) + for (int row = 0; row < ROWS / 2; row++) { - this->currentRotation = 0; - - for (int i = 0; i < ROWS * COLS; i++) + for (int col = row; col < COLS - row - 1; col++) { - this->positions[i] = defaultPositions[i]; - } - } - else - { - for (int i = 0; i < ROWS * COLS; i++) - { - tempPositions[i] = this->defaultPositions[i]; - } - for (int r = 0; r < rotations; r++) - { - for (uint8_t i = 0; i < SIZE; i++) - { - for (uint8_t j = i; j < SIZE; j++) - { - uint8_t temp = tempPositions[i * SIZE + j]; - tempPositions[i * SIZE + j] = tempPositions[j * SIZE + i]; - tempPositions[j * SIZE + i] = temp; - } - } - - for (uint8_t i = 0; i < SIZE; i++) + for (int r = 0; r < this->currentRotation; r++) { - uint8_t col1 = 0; - uint8_t col2 = SIZE - 1; - while (col1 < col2) - { - uint8_t index1 = i * SIZE + col1; - uint8_t index2 = i * SIZE + col2; - if (turnRight) - { - index1 = col1 * SIZE + i; - index2 = col2 * SIZE + i; - } - - uint8_t temp = tempPositions[index1]; - tempPositions[index1] = tempPositions[index2]; - tempPositions[index2] = temp; - col1++; - col2--; - } + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[col * ROWS + (ROWS - 1 - row)]); + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[(ROWS - 1 - row) * ROWS + (ROWS - 1 - col)]); + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[(ROWS - 1 - col) * ROWS + row]); } } - - for (int i = 0; i < ROWS * COLS; i++) - { - this->positions[i] = tempPositions[i]; - } } -}; +} void Screen_::clear(bool rerender) { @@ -142,36 +102,23 @@ void Screen_::setPixel(uint8_t x, uint8_t y, uint8_t value) } } -int Screen_::findPosition(uint8_t count) -{ - uint8_t wantedpos = 0; - for (uint8_t i = 0; i < ROWS * COLS; i++) - { - if (count == this->positions[i]) - { - wantedpos = i; - break; - } - } - - return wantedpos; -} - void Screen_::render() { - for (uint8_t row = 0; row < ROWS; row++) + for (uint8_t idx = 0; idx < ROWS * COLS; idx++) { - for (uint8_t col = 0; col < COLS; col++) + digitalWrite(PIN_DATA, this->getRotatedRenderBuffer()[positions[idx]]); + digitalWrite(PIN_CLOCK, HIGH); + digitalWrite(PIN_CLOCK, LOW); + + // TODO: this is a workaround, because the loop runs infinite. Don't know why ... + if (idx >= (ROWS * COLS) - 1) { - digitalWrite(PIN_DATA, this->renderBuffer_[this->findPosition(row * 16 + col)]); - digitalWrite(PIN_CLOCK, HIGH); - digitalWrite(PIN_CLOCK, LOW); + break; } } digitalWrite(PIN_LATCH, HIGH); digitalWrite(PIN_LATCH, LOW); - delayMicroseconds(10); } void Screen_::cacheCurrent() diff --git a/src/webgui.cpp b/src/webgui.cpp index 9077221..22fc924 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -4,590 +4,590 @@ #include -const uint32_t GUI_HTML_SIZE = 17461; -const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,76,17,69,98,227,48,240,222,87,168,186,44,218,42,179,82,102,230,246,168, -149,199,241,180,242,40,149,38,124,221,159,237,199,54,156,8,134,121,118,230,143,110,15,159,222,239,142,69,193,165, -171,204,237,244,145,112,134,170,90,2,201,202,156,16,59,5,152,172,79,244,200,18,216,8,91,152,16,129,181,124, -126,58,73,54,164,80,179,74,50,37,104,217,64,104,214,124,96,41,172,39,6,234,25,55,49,227,66,103,208,64, -11,201,128,249,45,144,144,209,184,36,90,227,64,47,166,11,211,96,14,233,179,71,245,79,0,167,101,228,182,131, -88,0,176,28,137,139,0,185,150,5,115,45,110,41,101,51,250,136,169,117,190,158,229,206,4,72,173,47,149,249, -48,45,229,240,79,84,121,175,140,196,52,33,250,18,212,90,186,148,46,42,27,163,50,206,165,37,82,218,163,199, -97,145,24,170,1,185,221,203,89,152,213,197,165,228,250,101,253,114,227,87,251,87,245,234,252,192,191,28,173,110, -186,251,243,119,180,15,107,171,104,190,234,159,157,70,174,168,105,226,201,2,125,21,119,166,189,218,84,155,238,162, -124,185,94,42,174,143,44,93,46,222,210,245,233,97,246,114,249,11,239,195,197,186,235,220,93,220,103,139,77,173, -199,25,109,240,49,250,128,85,36,45,13,121,106,151,190,62,169,39,64,14,33,64,168,121,135,182,87,20,249,100, -44,26,154,140,39,198,200,14,42,183,7,199,167,15,255,254,222,60,238,31,137,67,79,28,188,219,81,67,213,208, -44,218,128,53,22,220,174,129,150,165,207,234,14,228,108,9,149,185,249,188,78,150,209,211,247,31,93,235,41,178, -0,157,121,91,47,129,56,181,1,12,195,177,131,62,247,93,246,215,36,127,164,1,220,21,70,222,198,252,63,103, -78,194,212,56,175,228,95,33,169,87,126,82,209,227,97,190,189,157,209,231,154,5,118,31,181,51,12,69,216,51, -197,82,78,44,18,47,137,156,149,101,66,22,231,191,111,183,218,114,28,8,239,248,230,176,117,244,161,62,213,237, -136,129,208,81,164,227,170,94,147,3,84,253,177,104,249,173,17,188,204,242,161,148,242,245,177,180,162,101,114,82, -62,158,116,124,254,183,214,118,59,214,75,61,115,165,253,182,92,138,223,19,171,9,249,194,27,42,247,191,151,210, -9,45,71,70,111,78,126,212,46,163,163,255,156,86,218,62,107,43,132,86,191,246,152,24,98,162,37,158,115,56, -91,20,203,156,78,61,84,74,153,152,20,34,223,156,198,196,89,158,235,252,186,204,117,37,135,223,175,174,255,133, -96,117,236,178,249,117,182,66,57,15,143,194,155,56,142,34,58,208,78,202,184,228,115,136,32,23,188,118,108,147, -193,25,84,245,212,89,173,113,184,147,187,160,246,19,66,126,197,35,234,88,175,165,213,174,182,102,68,99,53,56, -27,241,233,156,10,192,4,26,214,94,119,35,134,62,209,113,231,198,81,36,220,126,166,122,59,18,116,124,224,93, -12,27,150,110,216,225,222,194,72,24,214,149,254,132,126,144,107,67,209,91,177,216,61,23,74,93,220,219,86,195, -194,204,150,117,174,135,73,231,221,127,26,167,92,21,110,152,188,89,172,80,233,159,24,126,8,110,71,70,127,212, -110,182,64,77,81,54,0,39,119,59,33,71,207,153,61,209,224,192,128,133,18,10,152,161,102,160,86,147,123,200, -212,231,108,86,184,70,191,136,52,169,154,121,99,154,117,243,59,217,216,245,162,65,157,228,77,185,169,154,149,153, -53,198,109,154,194,232,201,108,113,223,252,95,89,54,255,93,218,188,41,156,182,217,231,98,212,25,106,41,144,13, -251,48,241,52,39,5,26,79,234,137,185,87,14,31,157,53,246,166,173,200,94,4,235,80,252,117,102,81,52,242, -174,145,139,34,210,252,170,124,214,231,228,32,8,182,71,122,16,94,22,70,244,2,65,77,198,246,222,74,60,141, -28,62,233,45,234,116,150,150,202,76,102,247,201,16,213,225,231,5,207,107,124,248,17,133,104,102,231,222,25,171, -120,169,205,220,45,126,253,5,13,95,199,222,51,241,68,234,221,254,95,165,104,43,204,149,123,76,248,69,38,22, -93,33,156,17,121,81,0,97,204,160,36,166,94,46,7,202,197,185,126,204,234,165,187,177,229,186,146,221,97,223, -172,63,151,69,126,114,166,148,162,35,226,57,232,245,6,23,87,100,208,229,163,112,80,123,171,18,151,158,146,48, -92,130,185,89,81,168,34,58,82,162,97,77,68,18,11,168,163,164,4,212,76,82,192,195,195,83,66,20,112,16, -222,211,228,12,159,58,76,243,132,143,134,195,89,88,91,240,192,7,156,173,41,53,237,129,158,147,89,154,158,158, -154,46,8,9,20,77,176,215,199,179,65,83,71,81,59,16,181,132,122,127,254,28,179,45,35,190,206,106,75,142, -225,121,237,246,16,107,242,157,224,82,157,181,246,251,11,246,70,183,40,170,216,139,172,52,248,137,191,131,95,156, -114,123,216,103,134,69,103,224,83,58,217,17,126,120,72,113,23,95,64,143,24,21,133,41,35,215,47,63,81,195, -242,244,139,244,199,26,117,62,63,114,95,181,7,98,95,25,185,211,83,74,175,44,179,48,202,111,78,220,189,12, -122,48,184,160,3,59,63,105,21,118,196,153,116,76,3,58,15,179,221,11,176,237,2,9,204,104,207,79,123,126, -129,151,159,204,56,64,105,168,121,33,158,102,149,86,222,146,78,157,253,70,1,94,223,17,100,89,166,86,103,79, -59,150,200,159,178,103,193,49,29,90,12,8,39,71,87,247,111,76,234,72,217,198,235,186,66,3,226,112,176,194, -101,123,122,218,52,229,64,249,72,152,150,72,64,223,106,180,130,45,204,28,97,132,40,143,238,52,77,165,221,93, -177,210,101,237,164,88,245,194,99,37,246,121,74,143,60,11,101,131,200,82,227,24,19,177,19,34,32,176,127,244, -156,226,25,255,79,63,185,48,218,73,9,150,82,170,70,196,149,238,35,118,118,9,241,56,10,2,23,10,207,45, -156,210,146,200,208,67,131,152,41,34,122,67,82,25,34,40,172,90,10,76,216,165,244,80,170,164,231,233,23,184, -21,51,36,103,129,160,13,112,216,161,130,102,113,185,49,218,142,255,237,159,219,162,4,216,74,132,182,72,39,197, -61,135,172,129,34,69,63,42,37,248,13,9,119,194,64,59,211,3,85,68,209,22,55,165,220,201,158,210,166,162, -127,141,100,176,132,10,30,88,188,28,22,176,133,49,172,96,10,115,184,86,22,109,72,142,210,52,53,156,171,235, -160,89,82,185,161,117,146,44,71,103,203,191,186,176,151,31,56,218,88,121,184,73,126,175,56,36,113,197,225,12, -109,58,156,150,229,82,103,189,184,24,167,4,147,96,85,76,102,239,173,35,176,169,87,83,109,15,215,166,116,101, -186,62,62,243,69,1,252,139,199,50,249,102,109,182,141,139,202,191,197,88,34,216,26,94,67,170,73,198,187,14, -156,31,50,25,147,51,252,122,134,128,99,31,171,48,230,220,131,111,76,183,248,196,116,155,250,103,194,76,200,154, -136,38,125,242,161,153,50,224,137,40,67,79,52,52,139,175,196,86,93,179,252,88,151,120,106,74,109,241,133,51, -102,165,104,78,3,73,112,138,61,98,164,151,149,62,33,181,47,80,219,139,175,231,163,5,170,153,120,121,122,139, -123,249,167,136,189,18,84,160,198,209,188,245,38,217,221,10,20,15,182,106,219,52,179,3,143,128,149,26,179,51, -47,148,151,21,153,108,233,61,80,11,116,235,121,211,136,57,58,128,4,191,24,69,115,142,118,63,11,186,135,118, -113,225,181,49,107,154,21,46,202,214,153,87,105,155,167,167,72,110,170,86,71,111,94,22,132,4,34,127,35,121, -240,157,210,44,87,149,186,20,99,60,171,150,73,165,126,178,28,112,141,222,91,29,37,101,90,82,194,48,182,68, -52,18,137,50,158,194,81,213,171,93,6,138,0,43,245,44,182,24,59,193,225,181,154,66,174,206,71,249,167,79, -35,201,66,144,149,162,232,70,208,27,188,105,41,113,207,37,161,112,104,204,251,161,113,37,230,4,56,159,156,158, -118,175,94,108,94,114,108,238,179,26,6,41,231,106,40,144,88,25,69,197,215,50,208,43,144,158,176,170,156,20, -100,127,65,145,170,16,93,29,17,221,242,149,115,41,172,39,159,252,20,20,255,148,1,8,11,145,100,87,139,244, -238,211,249,65,190,116,202,53,13,6,60,219,76,31,139,96,92,20,135,209,166,101,122,44,151,50,229,29,90,192, -133,59,66,66,143,243,207,126,142,226,220,52,131,26,50,210,109,151,36,29,153,81,206,248,13,254,121,16,47,93, -29,96,252,173,83,52,13,79,203,158,157,165,78,2,24,1,20,7,46,160,112,59,206,214,107,109,114,174,95,75, -9,51,31,53,158,129,55,82,173,48,98,208,52,56,168,99,131,5,201,184,152,46,249,62,203,190,118,119,81,118, -170,190,80,90,172,145,187,244,225,135,247,21,117,45,149,182,238,31,53,18,210,2,37,37,242,69,184,102,247,151, -65,58,75,202,62,237,189,158,174,131,191,12,63,81,243,225,38,103,247,164,111,237,75,76,36,189,21,222,220,122, -226,66,2,54,233,112,152,132,116,58,232,66,163,105,178,216,233,202,9,39,83,147,152,211,225,250,101,184,103,115, -190,55,7,27,163,24,121,189,241,7,12,207,153,164,123,151,185,13,234,207,131,208,183,136,59,170,214,12,107,238, -24,176,69,31,126,11,110,213,112,40,193,250,104,114,84,103,91,105,162,136,70,116,228,235,0,15,14,16,206,87, -76,123,80,35,145,162,33,201,149,178,248,58,132,167,13,185,11,126,50,44,131,250,176,253,53,60,254,114,47,11, -229,80,255,194,41,106,99,214,203,108,166,197,231,243,108,141,230,209,191,251,76,44,37,208,158,43,191,151,27,109, -207,179,74,11,137,156,117,250,102,45,174,150,5,226,98,123,225,186,33,232,120,137,225,130,79,236,122,252,108,226, -78,11,52,19,152,212,54,141,166,46,253,242,89,27,71,109,181,54,26,165,130,34,221,36,152,9,208,160,109,91, -245,17,192,168,19,44,207,204,92,91,108,78,151,219,177,118,87,6,225,254,112,247,227,59,154,94,113,169,92,202, -3,241,94,232,139,132,248,67,147,44,36,74,184,24,202,253,86,69,159,7,72,238,106,216,99,64,61,170,167,134, -154,91,226,73,194,24,237,176,10,99,151,77,175,168,218,14,243,28,171,27,250,182,192,115,182,167,150,206,110,95, -217,83,83,116,210,81,27,38,187,89,70,205,48,22,188,187,99,57,189,105,246,65,62,248,162,240,29,69,159,240, -237,186,250,30,67,67,166,65,97,223,28,122,221,180,118,90,56,153,248,72,233,173,128,145,253,194,246,73,104,110, -60,208,52,92,179,159,14,190,220,11,23,107,210,122,218,190,17,40,233,247,181,155,35,88,103,127,18,235,86,132, -130,12,179,28,60,192,35,228,28,105,92,142,93,194,28,126,194,53,60,193,6,110,225,14,174,224,6,190,195,11, -92,40,206,236,253,188,136,75,189,86,78,246,250,182,81,175,136,196,96,203,121,4,143,202,95,2,126,166,129,198, -11,238,35,50,53,121,188,151,32,182,62,197,78,37,149,147,86,142,200,78,28,254,239,237,113,225,125,234,73,217, -182,96,218,40,196,190,8,205,218,29,2,33,149,98,178,165,106,224,30,110,213,54,221,164,27,134,141,159,179,101, -173,19,218,74,10,40,9,34,189,166,130,209,210,80,249,5,137,15,95,149,92,38,98,136,88,174,36,190,67,116, -159,139,40,186,136,187,149,216,250,238,33,101,212,177,162,175,104,23,226,9,110,101,34,250,107,11,191,6,227,190, -198,212,5,206,25,95,125,147,176,137,162,77,92,213,83,49,150,161,12,84,79,56,170,92,230,232,190,107,71,62, -136,199,65,80,117,235,11,30,163,10,174,162,124,71,228,151,22,88,50,209,160,154,226,128,43,33,229,33,42,180, -136,127,171,150,98,40,147,46,226,185,118,23,218,22,207,58,31,211,198,63,217,114,69,249,125,143,17,80,194,2, -247,26,126,40,37,44,121,17,62,38,36,158,2,176,132,75,21,138,221,121,32,11,43,201,231,252,99,71,225,195, -146,6,86,235,210,104,227,254,189,88,46,127,148,181,193,0,63,182,42,36,188,67,185,40,242,128,65,170,226,210, -224,200,190,236,110,145,63,125,174,39,140,136,203,15,142,119,171,103,26,113,90,200,63,178,201,110,50,240,245,240, -158,86,181,40,235,101,126,30,144,254,117,157,123,27,80,26,250,104,55,104,26,201,53,141,245,173,160,226,102,144, -107,190,119,30,166,24,220,131,14,90,80,54,51,249,212,23,201,189,135,178,240,54,134,159,252,248,137,199,49,210, -190,204,102,139,195,42,76,183,237,186,178,84,138,193,29,150,49,119,95,189,111,134,186,229,14,75,204,190,41,104, -111,114,135,53,110,240,96,224,93,6,143,162,135,22,78,118,217,251,168,222,131,166,142,46,239,85,116,220,67,2, -114,239,92,162,247,113,255,24,176,240,249,211,183,193,232,51,253,40,237,235,155,245,72,239,27,101,224,202,39,61, -11,55,234,12,254,140,84,19,204,215,55,90,48,18,92,69,209,149,176,18,182,42,100,150,96,232,96,230,125,234, -144,240,29,237,240,253,208,14,223,143,217,225,123,207,14,92,201,228,229,235,111,228,121,112,240,221,6,171,93,205, -62,22,69,167,167,55,95,127,249,27,57,58,0,9,150,161,192,243,181,241,57,83,242,223,67,150,194,231,159,66, -194,187,125,65,41,102,21,42,113,191,61,54,217,26,99,165,45,131,217,96,152,87,127,30,223,13,230,68,50,47, -138,15,177,197,123,41,180,187,107,142,206,182,15,78,183,237,213,210,53,251,91,152,10,3,135,61,202,139,76,95, -146,201,203,253,187,11,24,198,252,13,204,190,189,24,63,112,122,184,110,35,243,82,209,211,195,114,128,106,180,8, -155,136,79,151,69,209,65,240,167,162,31,178,189,80,150,9,79,58,7,119,208,47,20,150,92,36,248,227,194,186, -187,117,241,152,237,104,139,35,254,130,129,78,229,171,238,103,42,185,213,214,27,106,112,22,66,172,246,117,243,104, -252,181,14,46,55,230,15,57,226,65,213,147,49,53,152,195,126,177,68,113,240,160,212,96,64,132,182,233,67,188, -44,103,217,146,10,68,34,158,252,21,62,31,98,250,32,236,175,124,44,136,212,3,16,29,175,147,246,3,68,239, -59,109,72,229,132,28,42,150,55,191,206,81,63,64,109,153,88,200,145,83,69,122,252,199,187,235,177,240,191,158, -226,143,167,155,205,38,222,252,85,92,218,249,231,95,206,206,206,62,147,228,176,149,201,113,68,177,133,5,122,68, -20,45,36,212,108,229,37,25,173,127,176,53,62,23,77,179,164,175,221,232,135,25,79,69,59,89,236,111,165,90, -213,81,212,254,186,224,216,249,248,231,54,120,84,162,51,83,211,204,100,252,65,125,14,185,90,124,184,55,88,178, -194,122,150,91,99,253,65,54,70,11,186,56,11,86,170,250,198,92,79,250,59,104,139,216,160,185,238,213,155,85, -46,195,70,34,111,154,71,73,85,34,254,127,140,162,156,92,222,173,80,17,143,237,168,105,246,107,84,110,135,227, -73,84,73,111,170,114,70,102,148,225,144,115,112,240,231,247,141,37,73,83,180,191,255,132,176,37,143,45,16,25, -67,186,29,122,8,215,52,212,153,22,237,167,187,73,129,33,44,247,4,156,44,209,107,3,167,125,179,235,16,16, -137,125,76,124,232,85,192,19,130,211,179,39,157,183,83,226,130,35,166,193,220,105,28,184,239,132,131,5,172,113, -21,35,63,151,225,43,105,215,46,141,149,121,147,146,96,138,40,239,62,81,142,19,52,69,8,117,238,166,116,49, -199,95,128,255,71,207,124,139,181,245,241,95,167,53,246,172,137,79,30,81,244,44,44,96,68,47,15,131,122,172, -246,49,189,255,110,69,193,24,69,149,160,183,28,81,39,202,82,83,96,99,78,235,154,9,68,95,176,75,72,74, -110,184,226,120,138,154,65,65,230,86,87,85,155,80,6,99,92,43,215,94,217,188,66,224,235,14,251,28,5,109, -153,192,24,218,117,160,26,38,232,248,40,243,118,79,50,57,23,230,76,47,96,50,197,118,66,52,229,174,251,158, -37,184,40,234,103,247,92,142,124,87,147,23,143,143,58,111,27,155,182,211,252,33,95,57,55,123,175,162,56,96, -141,101,164,128,54,27,183,151,193,96,144,67,54,201,186,86,243,81,114,130,147,224,8,78,252,32,166,253,150,242, -78,104,250,90,67,187,179,40,242,47,97,64,203,247,63,56,16,20,245,89,202,16,39,240,207,143,126,153,104,51, -141,145,59,25,132,176,204,68,11,235,81,159,229,238,224,55,128,43,58,7,88,230,113,236,39,170,84,11,67,13, -114,251,171,157,50,45,221,50,208,45,193,246,5,187,17,250,224,215,92,186,107,92,92,155,21,151,243,221,16,143, -11,162,228,223,223,73,159,37,115,32,152,110,136,86,214,196,163,105,174,68,217,198,246,255,179,114,52,76,141,227, -186,223,210,204,14,147,12,94,62,222,247,75,159,175,195,66,217,101,143,165,28,133,101,239,56,174,19,82,3,57, -74,194,57,46,44,183,233,127,127,146,108,199,78,107,120,159,243,209,38,142,45,203,146,44,203,146,236,214,105,28, -87,38,254,165,157,23,75,6,164,238,132,60,9,225,79,177,37,80,110,7,146,51,160,91,165,23,250,74,219,126, -216,35,117,98,220,137,168,176,140,27,150,102,20,186,98,151,252,176,232,132,69,55,48,254,35,33,154,38,160,120, -132,246,197,247,165,22,169,118,152,117,76,15,9,117,170,11,185,240,220,153,142,204,59,90,95,58,159,44,69,66, -221,222,149,196,203,85,63,140,125,213,74,14,84,28,180,150,60,252,134,107,93,92,132,60,198,85,162,163,49,21, -50,134,66,64,18,255,88,134,66,120,130,98,197,227,94,1,31,225,67,66,90,110,18,63,104,102,65,146,0,192, -197,112,66,206,156,83,98,37,162,69,173,7,23,21,196,241,117,87,114,227,186,144,181,54,23,109,108,94,250,171, -103,170,189,18,166,101,5,237,230,72,171,78,67,86,96,20,44,235,144,225,171,246,99,31,18,241,190,122,31,246, -66,57,8,100,187,42,173,165,147,255,46,29,193,112,231,255,151,146,128,147,137,204,184,57,3,130,43,138,66,21, -248,96,99,45,222,160,62,233,209,82,28,155,127,195,56,191,226,17,252,237,70,235,32,169,152,26,32,216,46,136, -12,116,32,211,112,100,180,69,49,86,201,130,193,14,248,177,152,118,42,27,240,76,246,125,65,92,178,245,155,198, -198,62,209,57,130,142,61,172,197,66,85,157,125,219,34,33,23,84,51,188,141,118,245,141,179,205,119,33,161,254, -160,39,220,170,107,117,57,78,44,180,249,85,167,109,105,195,15,125,147,191,18,212,26,253,112,177,143,53,116,244, -64,158,221,210,75,44,96,219,9,67,237,167,153,42,80,9,51,47,201,193,37,85,108,88,26,211,182,97,195,178, -199,247,155,129,10,22,124,174,221,199,76,33,99,69,186,108,69,185,184,145,14,81,43,218,195,246,201,142,175,232, -57,199,88,60,78,104,210,145,88,94,240,170,227,47,180,238,141,34,228,83,25,74,89,73,82,219,181,80,84,26, -191,92,143,130,58,218,113,55,181,234,187,234,236,206,119,81,21,3,184,64,105,44,80,137,130,220,56,8,185,221, -25,224,251,144,87,70,147,207,147,111,64,152,133,186,149,213,19,56,28,22,172,228,91,236,214,109,208,91,84,29, -187,220,4,233,151,102,19,137,210,161,189,112,246,169,199,117,97,141,109,7,182,52,181,15,90,79,184,26,193,144, -35,121,88,184,136,169,110,153,48,39,170,64,26,248,56,211,171,191,70,65,232,190,141,135,71,217,183,250,74,203, -40,238,210,99,44,130,133,188,51,62,224,121,46,130,243,194,1,211,143,2,189,144,174,155,91,43,252,97,192,214, -9,250,160,115,34,116,122,197,22,5,34,145,118,103,236,156,125,102,31,216,62,148,253,138,21,222,227,207,71,237, -43,102,239,140,251,228,77,107,101,177,223,180,4,178,239,121,107,14,184,172,179,223,157,101,4,18,65,127,241,57, -19,108,191,105,128,110,251,166,79,201,207,225,203,7,208,44,244,143,179,32,133,78,161,50,252,45,218,24,166,248, -142,246,236,237,14,29,95,244,88,161,193,231,244,61,72,21,22,93,136,75,167,54,127,244,18,145,246,249,54,251, -33,158,10,230,187,232,127,176,107,175,70,228,247,248,12,180,233,31,40,234,36,55,20,23,172,71,158,101,27,137, -189,40,7,168,62,211,169,48,158,121,166,18,182,146,79,66,120,30,13,232,215,90,242,240,207,74,248,160,98,5, -8,244,209,30,42,13,212,35,0,171,81,223,190,188,164,135,220,205,196,111,104,226,153,82,126,206,122,231,27,115, -176,146,224,151,247,52,245,42,126,30,86,167,253,23,202,121,87,193,144,201,165,71,137,212,55,211,209,0,47,120, -251,1,169,125,93,204,148,144,93,59,213,75,188,201,23,9,81,174,192,112,136,124,14,213,235,9,28,48,212,179, -253,192,202,87,105,77,74,235,136,70,137,250,206,97,167,110,121,95,4,125,157,136,57,193,115,137,138,68,232,126, -107,114,29,49,250,229,150,89,61,110,235,0,237,115,32,33,153,208,172,23,247,114,45,80,185,113,29,114,78,91, -163,48,122,208,200,224,69,236,211,86,148,147,169,159,98,177,44,81,127,76,250,61,165,53,209,181,32,166,127,96, -165,23,223,151,27,5,47,25,137,191,155,194,210,55,238,191,172,2,253,211,191,13,52,4,80,136,206,220,248,51, -43,133,35,238,106,134,159,192,101,238,194,79,107,80,194,10,208,62,255,11,251,18,104,28,220,131,196,34,70,135, -33,91,53,14,68,172,141,158,36,133,90,110,151,162,226,80,101,247,29,27,65,27,99,85,219,232,75,137,17,111, -92,3,243,76,197,194,31,120,41,124,91,74,147,242,175,46,107,19,176,32,74,170,100,64,79,159,185,192,168,6, -208,82,153,13,155,96,84,158,164,101,135,237,82,195,117,36,253,91,136,164,136,58,32,169,60,132,42,225,52,199, -185,181,14,46,132,142,166,89,12,255,158,56,187,34,7,20,148,205,179,65,36,76,250,11,46,4,138,194,90,231, -24,196,246,205,39,160,105,7,217,66,88,213,60,175,197,158,184,154,223,124,214,182,213,82,65,12,116,92,14,107, -230,34,214,232,10,131,219,246,54,77,123,154,219,206,90,81,164,214,31,77,124,18,67,194,36,173,247,214,22,49, -102,140,210,255,154,27,84,1,93,77,248,207,47,182,216,214,101,162,103,115,116,28,173,151,48,111,215,163,183,248, -176,125,185,190,110,39,97,119,100,115,209,201,31,20,252,87,80,131,197,181,138,147,126,98,244,197,49,248,241,144, -199,58,56,221,78,58,171,98,106,145,176,213,210,137,43,165,77,187,49,84,128,134,126,169,241,17,148,76,152,13, -58,190,119,173,211,115,189,23,253,184,182,246,17,173,71,106,33,59,53,222,173,173,189,131,127,118,102,22,72,197, -227,115,179,65,198,174,250,232,144,255,204,57,63,31,196,202,246,123,238,35,16,214,150,164,10,161,169,211,142,122, -68,159,249,123,163,38,5,72,185,157,71,73,146,198,106,133,46,106,133,38,22,131,36,97,159,249,249,130,89,203, -160,51,162,55,107,107,111,172,61,94,234,161,244,97,249,163,153,102,132,247,67,199,253,30,111,131,128,252,170,213, -22,234,180,15,228,142,148,2,14,91,212,106,167,44,238,51,4,189,47,179,123,12,43,196,31,94,250,152,128,103, -87,36,241,28,173,86,234,229,21,234,20,134,54,31,144,14,134,52,128,197,123,159,100,159,19,230,136,100,169,183, -72,104,240,154,177,154,161,185,27,62,205,179,50,224,225,33,233,11,74,222,45,167,223,240,122,235,214,209,166,1, -81,19,190,131,40,220,17,1,195,81,88,86,45,144,26,78,90,165,149,86,44,255,109,109,237,55,237,113,96,173, -69,215,225,229,247,107,107,223,183,188,100,210,112,211,100,149,34,55,229,171,116,198,81,215,136,182,193,89,1,206, -92,81,215,212,208,210,22,196,195,206,37,73,216,37,11,234,50,19,33,207,70,144,249,222,241,7,225,37,251,250, -59,188,124,38,50,105,210,144,49,176,150,129,10,204,179,50,23,179,46,40,52,212,93,194,50,205,91,201,189,130, -146,109,111,109,37,125,108,30,43,30,196,38,46,253,85,168,246,149,62,179,115,34,148,12,99,24,151,183,132,193, -213,243,220,79,145,159,248,176,250,186,50,254,198,75,245,174,59,43,84,15,102,142,48,19,14,181,177,121,108,26, -181,44,66,29,231,20,84,197,99,35,29,207,227,180,3,56,48,8,53,160,228,24,181,64,36,241,56,215,188,156, -138,235,162,20,83,231,72,187,153,85,87,217,236,20,204,172,129,123,76,67,53,159,138,18,146,141,6,250,47,125, -25,150,129,19,172,81,139,217,245,0,127,210,111,11,39,39,183,30,37,133,61,217,209,15,103,197,88,19,34,224, -230,80,152,96,56,123,214,54,99,235,246,1,1,46,221,70,140,43,247,108,162,136,222,177,40,29,19,216,208,104, -183,121,127,37,3,159,143,168,63,233,179,112,236,27,46,237,250,72,22,211,13,208,135,132,7,119,2,83,79,89, -227,209,212,188,17,106,244,84,90,208,123,66,159,182,171,36,113,178,255,82,255,138,73,108,57,144,233,55,81,162, -55,35,187,154,33,6,12,10,211,85,66,96,230,215,98,161,245,13,241,254,81,176,103,193,198,2,135,250,40,248, -88,176,112,79,80,239,197,161,62,130,6,174,41,73,110,92,205,101,46,198,250,208,158,152,114,250,114,34,178,92, -29,101,10,124,23,88,0,175,211,103,220,75,209,219,217,209,241,206,201,120,231,221,225,112,242,113,60,58,154,140, -222,125,28,238,158,226,151,189,225,254,206,217,225,233,228,100,184,59,58,58,130,194,201,193,209,233,240,228,243,206, -225,228,211,56,92,225,240,224,211,1,181,29,143,118,191,31,66,131,209,228,248,224,232,253,100,119,180,55,92,42, -222,57,253,16,168,104,123,240,193,15,63,15,143,78,39,227,209,217,201,238,112,50,58,62,61,24,29,81,247,195, -79,199,167,63,154,175,31,118,142,246,14,135,39,62,90,174,170,214,18,129,47,224,173,8,195,49,159,94,71,225, -219,83,161,110,119,221,25,183,180,183,205,4,50,161,78,95,128,186,96,175,140,248,15,127,22,127,100,171,52,138, -54,235,10,162,61,106,163,168,54,7,195,131,17,255,227,154,146,89,89,35,131,249,147,184,210,95,35,246,2,209, -163,63,68,236,21,86,253,97,139,253,75,78,27,188,194,130,130,132,138,159,187,114,133,6,72,87,206,112,207,126, -241,140,48,14,142,198,167,59,71,167,7,59,167,195,61,254,118,251,146,71,221,178,8,102,3,214,52,136,192,56, -248,22,84,114,175,182,194,232,120,120,196,177,61,62,180,173,14,71,99,108,242,7,40,55,207,254,39,232,242,143, -230,11,246,180,50,57,66,106,177,204,30,139,155,76,161,63,48,114,117,41,108,218,126,66,189,53,157,231,234,149, -137,216,91,238,108,109,205,41,7,52,1,236,82,225,90,83,144,210,41,126,99,29,56,131,103,187,61,48,121,47, -184,175,179,175,196,127,124,182,113,24,106,162,207,218,194,118,90,99,163,29,52,189,216,128,115,126,17,219,72,210, -135,149,70,64,57,113,33,47,225,73,193,159,107,214,14,195,101,226,139,174,131,158,211,38,41,198,192,10,200,212, -246,38,20,108,111,42,176,96,133,118,35,246,184,159,76,47,186,94,114,238,13,239,200,0,110,11,156,115,159,187, -22,20,102,144,188,228,58,112,103,17,196,252,106,50,201,209,235,49,40,245,158,60,45,59,219,237,132,169,65,79, -197,14,22,67,67,187,39,211,161,232,22,58,156,100,236,70,250,74,8,160,100,19,194,221,57,88,166,5,248,224, -179,103,202,66,137,62,137,251,42,142,214,99,225,23,163,25,83,194,127,178,30,37,17,147,110,89,181,34,216,118, -130,27,100,52,38,175,233,97,17,143,132,171,172,83,71,19,104,115,60,151,98,181,157,95,247,5,228,131,113,151, -161,88,166,147,45,209,249,90,202,216,181,187,66,59,89,251,171,59,70,97,206,184,232,127,196,31,159,233,124,78, -44,28,51,53,31,25,253,26,54,237,66,171,93,17,11,211,199,93,120,210,143,159,239,175,42,72,128,209,255,104, -59,248,207,113,36,145,24,248,248,148,201,233,4,3,100,48,138,63,254,125,123,219,77,194,39,18,71,239,92,120, -107,29,93,9,114,169,183,238,139,169,152,9,5,198,142,198,21,77,10,124,210,193,83,23,223,223,120,243,70,35, -199,239,4,83,214,105,173,152,122,141,187,202,178,86,117,165,102,95,99,126,34,174,255,133,236,104,251,244,228,5, -78,154,240,174,142,107,222,196,55,104,103,221,103,15,177,66,23,251,41,40,37,120,73,79,4,51,182,23,62,230, -184,123,74,67,238,210,1,54,55,38,119,186,181,96,85,57,123,78,87,61,201,88,11,237,207,109,207,66,79,40, -42,18,237,154,136,211,6,54,141,44,121,241,184,3,144,187,162,164,147,244,102,193,14,180,92,137,62,253,242,213, -232,18,57,69,212,173,40,19,47,206,196,85,191,224,133,23,103,42,76,156,169,162,127,159,34,26,60,136,162,238, -160,196,95,134,207,119,244,124,151,48,106,163,237,202,3,97,59,54,34,121,44,66,129,131,29,83,205,209,203,238, -130,80,242,141,71,218,22,189,186,221,12,24,238,62,156,152,108,211,22,140,153,54,246,136,174,17,94,145,36,212, -196,245,119,140,235,97,231,93,25,40,6,130,160,241,211,175,238,233,14,69,37,180,147,119,99,37,55,130,240,2, -253,65,34,184,44,150,255,160,15,11,202,141,22,91,184,177,40,3,25,131,171,221,3,76,84,74,77,166,166,165, -13,57,185,246,101,23,239,175,34,110,227,84,115,190,197,232,81,105,156,77,241,21,189,121,49,123,127,223,5,223, -17,116,43,209,218,17,144,153,191,88,248,97,113,209,57,196,235,4,168,138,43,146,108,133,206,68,244,224,38,36, -226,93,226,148,110,143,215,52,232,149,237,146,142,11,114,74,36,58,8,41,201,197,89,154,55,101,177,195,140,139, -170,213,91,85,87,241,28,102,191,63,71,172,178,106,169,114,136,159,181,52,154,123,132,169,52,89,194,126,23,71, -157,188,111,104,114,98,254,98,138,72,247,240,110,2,231,235,65,105,55,210,120,12,124,61,166,101,128,197,95,3, -107,30,128,12,197,81,77,104,79,146,209,208,215,147,93,110,160,172,192,47,157,116,128,127,235,163,51,193,40,224, -164,118,215,176,2,19,150,61,184,192,15,96,70,129,132,40,17,105,61,238,106,80,197,243,36,157,199,232,223,209, -229,57,129,154,251,45,145,244,111,223,34,224,57,189,72,189,120,162,60,88,87,180,87,212,39,12,112,66,128,50, -228,40,251,78,88,219,167,81,66,202,94,145,61,39,189,128,27,0,72,165,147,81,76,76,165,97,86,15,232,66, -86,126,100,54,6,151,25,203,56,17,158,252,160,212,243,28,79,196,103,77,19,6,234,227,134,153,3,90,46,115, -150,3,115,124,222,188,158,156,96,165,7,217,208,109,103,214,202,46,63,145,102,118,234,185,23,131,136,225,246,139, -55,231,76,139,199,40,49,82,224,33,175,5,177,91,198,119,68,219,15,211,142,187,17,141,248,56,89,116,167,190, -150,22,51,177,219,44,35,136,123,131,213,121,149,229,119,173,189,80,97,42,1,210,214,200,242,69,91,153,26,235, -213,216,229,95,36,172,186,212,43,203,121,48,210,185,78,193,3,84,223,128,46,42,193,106,67,91,36,232,225,115, -198,212,163,200,102,35,9,116,132,222,35,202,205,12,124,3,8,96,245,34,136,186,248,93,36,180,126,162,78,153, -247,203,190,222,92,244,203,54,11,168,159,148,90,134,98,90,208,17,139,127,32,14,250,228,104,95,160,34,0,164, -254,112,185,240,246,54,159,253,32,221,191,153,99,35,108,8,105,193,66,119,111,124,240,84,45,66,100,136,113,209, -87,255,82,222,14,99,67,245,89,130,63,220,188,21,173,215,187,64,109,84,232,125,83,24,92,140,36,166,204,120, -69,231,36,169,53,1,251,102,211,202,211,109,230,78,235,166,37,115,153,98,152,19,224,157,219,77,87,178,34,92, -85,155,2,129,72,109,120,109,72,3,250,203,155,7,132,149,255,25,24,119,5,206,235,168,152,12,162,229,98,151, -79,244,221,119,223,109,179,109,221,137,7,212,100,22,29,198,147,248,179,96,223,12,79,83,229,115,23,245,44,49, -36,73,225,247,101,170,59,238,239,119,130,159,147,248,3,128,6,40,169,96,69,170,92,174,69,73,189,100,69,41, -228,65,121,93,97,232,115,17,159,5,87,142,204,201,200,146,92,225,90,160,52,142,18,102,122,133,178,27,139,182, -15,156,62,16,60,108,91,219,140,198,142,142,91,157,116,131,88,106,190,84,9,59,135,14,152,96,18,198,95,193, -40,251,24,172,44,146,180,32,189,124,246,170,82,12,175,190,120,47,87,246,208,111,109,111,167,86,250,162,171,21, -162,43,244,137,116,10,73,161,40,42,145,120,64,216,221,60,211,154,238,253,18,147,181,117,111,184,58,196,232,160, -96,6,147,139,109,182,101,158,221,45,66,14,133,238,136,2,7,162,248,139,223,63,117,231,178,89,50,245,178,174, -145,9,57,140,113,70,156,83,156,24,55,169,54,254,242,235,255,178,135,20,122,77,193,253,227,95,182,182,183,254, -200,222,11,190,249,75,60,72,179,60,135,242,38,155,21,55,229,61,61,129,103,185,200,27,204,224,157,65,79,77, -158,61,52,249,172,120,136,7,189,227,76,221,158,37,77,94,205,42,217,76,171,251,162,204,160,193,53,8,124,115, -61,171,170,105,115,93,193,251,205,236,249,225,22,106,159,36,205,109,37,139,223,27,136,197,220,136,102,38,148,18, -178,129,126,110,85,81,222,52,247,153,188,19,18,234,125,104,206,27,128,90,1,243,168,195,135,172,0,40,15,85, -81,98,253,250,54,123,16,77,173,170,7,248,145,197,157,64,51,112,126,115,139,111,213,157,104,112,70,2,144,195, -164,33,119,37,158,147,110,144,74,4,11,158,138,188,154,210,191,170,155,199,230,145,238,138,131,63,169,154,39,188, -175,235,73,22,132,205,87,128,177,11,206,195,157,183,63,93,110,178,143,97,82,219,117,154,189,19,124,213,214,143, -95,227,78,84,211,67,196,187,31,226,100,176,9,244,107,242,91,209,200,108,186,89,164,222,235,102,145,232,91,4, -68,226,173,76,111,186,155,19,127,47,120,71,123,65,164,200,174,189,82,49,66,69,134,138,135,133,35,92,37,174, -12,3,50,205,150,110,79,250,109,185,159,175,255,17,156,219,87,252,5,232,204,189,136,86,15,177,70,44,122,241, -204,232,242,55,61,243,162,203,240,230,51,28,219,240,112,98,90,179,95,23,55,243,215,35,41,180,248,95,128,247, -120,188,179,63,156,68,235,2,172,190,218,175,168,94,234,13,27,134,186,65,145,179,207,20,92,65,253,175,99,53, -52,207,191,23,92,31,107,247,243,249,112,215,226,101,215,137,46,126,27,58,114,250,110,126,5,112,189,28,187,165, -106,238,198,52,2,47,166,11,211,81,64,154,1,13,202,182,252,94,64,25,25,104,66,214,69,173,248,239,130,33, -71,113,152,217,77,134,141,198,170,130,37,122,202,127,212,95,246,150,58,225,63,96,121,73,222,232,33,245,38,180, -66,251,73,176,47,130,255,7,108,216,200,103,89,93,195,10,35,148,189,42,173,111,254,131,27,54,98,116,105,13, -72,116,185,246,67,87,101,40,221,162,130,56,1,95,186,234,192,45,37,116,6,74,162,228,150,186,122,206,241,144, -82,255,35,144,169,123,248,9,222,203,74,7,245,240,93,185,19,80,250,163,97,194,103,123,62,168,180,135,44,115, -48,204,220,87,175,197,227,74,213,114,131,202,6,5,55,31,83,119,11,4,54,50,123,210,124,144,131,10,72,55, -171,114,90,205,129,188,160,199,243,187,205,66,107,149,34,193,230,240,233,106,70,229,80,239,151,170,204,111,241,152, -92,140,74,36,147,34,107,138,242,97,174,146,182,205,186,74,0,246,59,17,151,68,93,3,130,42,233,246,215,160, -35,235,55,221,62,76,105,81,234,42,87,179,185,12,215,168,44,148,24,34,248,205,169,204,154,211,106,222,104,139, -241,160,124,104,72,131,36,155,94,203,162,123,53,8,30,176,120,47,252,239,238,194,13,212,237,91,111,255,126,185, -121,195,162,183,111,214,162,100,169,169,166,44,71,111,147,13,249,39,12,145,161,209,121,8,67,133,149,142,153,164, -35,43,177,35,135,185,217,36,74,244,55,14,219,204,168,166,203,74,81,242,48,105,227,30,248,92,60,204,64,128, -186,7,214,164,59,33,102,30,193,34,42,157,69,20,86,121,118,155,164,251,16,83,144,230,30,55,237,157,209,235, -167,166,105,191,87,7,41,164,1,182,242,165,240,127,68,195,141,115,128,24,57,216,175,32,150,118,107,113,222,249, -76,104,155,18,46,89,169,213,66,143,155,7,125,237,106,252,69,108,184,64,57,143,236,39,61,143,140,163,177,219, -66,234,55,191,52,121,33,74,46,153,7,144,125,193,52,71,225,60,231,191,10,38,128,152,66,181,254,127,165,125, -228,178,191,154,115,166,160,166,194,154,236,39,115,85,160,110,130,203,164,94,54,117,252,103,15,252,91,24,153,19, -50,109,115,67,65,57,102,102,67,26,116,118,255,132,240,74,147,209,216,33,225,194,223,236,74,229,181,153,108,92, -1,83,244,150,211,247,248,85,94,165,94,15,232,229,13,152,195,144,93,205,194,213,52,205,6,123,58,47,67,67, -117,121,25,169,215,42,239,194,55,230,204,161,69,132,245,182,60,100,230,174,178,245,206,162,193,218,52,168,193,133, -61,42,13,31,48,236,211,186,61,50,21,142,47,8,58,152,51,123,245,107,173,248,131,163,216,132,250,23,254,6, -239,186,131,146,43,159,170,216,22,95,128,95,110,162,46,117,46,142,226,95,28,188,91,213,241,254,161,62,225,63, -198,223,110,83,76,201,47,217,99,170,112,75,90,113,137,238,159,91,86,192,195,118,27,95,237,102,0,87,250,190, -188,106,227,145,43,6,154,28,223,25,64,4,66,20,8,177,66,75,131,93,208,230,226,18,132,46,148,40,107,154, -33,144,78,67,38,58,181,195,213,16,190,238,226,178,77,62,1,89,158,215,130,92,114,233,143,12,30,15,166,105, -46,240,225,68,64,68,91,200,244,7,124,25,66,254,98,174,210,159,240,249,48,123,174,230,202,148,124,161,54,232, -63,192,174,77,225,131,194,210,83,52,251,11,44,78,167,84,176,167,239,34,158,146,234,72,175,169,108,252,92,230, -195,175,74,200,50,155,141,21,250,31,110,21,176,52,147,202,107,62,81,26,161,235,84,8,234,239,30,38,59,153, -45,31,178,114,58,19,169,162,98,12,133,166,37,61,238,26,159,89,42,245,171,153,137,149,96,157,92,222,180,16, -12,183,166,216,73,180,253,215,141,173,13,200,150,176,81,164,244,84,48,189,73,78,223,8,118,251,60,149,72,164, -223,4,211,174,104,103,53,239,104,207,76,174,152,118,19,30,87,82,101,179,116,95,176,142,219,48,157,152,119,139, -205,39,243,190,159,225,222,231,57,149,0,96,86,149,109,253,194,2,196,145,79,217,190,204,110,168,252,129,21,53, -160,95,76,109,197,74,49,80,130,211,189,209,39,66,100,174,88,139,91,122,203,48,120,235,222,71,130,221,35,157, -142,4,51,225,75,132,254,4,111,51,112,33,32,59,210,153,130,33,214,100,10,79,174,72,179,153,237,116,157,102, -138,141,149,44,114,245,9,59,170,225,109,94,63,8,96,127,250,85,180,207,116,65,246,153,96,51,240,245,167,159, -4,155,76,198,195,221,147,161,73,42,57,218,57,28,79,246,70,147,163,209,233,228,108,12,217,52,39,147,31,71, -103,147,243,131,195,195,201,187,225,100,255,224,100,184,151,150,106,97,110,203,126,86,252,86,196,70,217,95,75,33, -192,226,14,171,126,152,145,180,139,48,151,2,251,124,92,161,193,127,48,138,255,10,251,48,35,29,167,87,69,197, -44,171,233,227,10,47,59,140,233,242,204,9,101,64,36,52,249,29,187,157,44,7,230,215,75,50,253,138,40,132, -231,116,88,29,132,103,122,64,77,172,206,70,39,201,254,12,8,207,36,127,166,185,137,243,31,233,131,101,109,71, -71,252,222,1,109,166,153,12,133,163,77,190,63,222,48,2,11,131,187,94,82,31,56,57,95,61,241,215,52,113, -160,148,59,200,24,129,118,199,151,233,157,161,111,60,22,164,188,209,67,238,159,254,160,79,198,42,94,92,46,156, -14,15,43,202,176,6,119,170,211,233,125,79,231,186,37,98,193,140,11,75,85,99,218,173,157,102,55,54,21,49, -50,169,137,139,196,108,152,199,228,80,184,199,223,126,239,95,123,1,94,73,112,68,175,98,45,212,185,184,26,83, -186,91,205,49,227,36,3,193,115,69,54,207,47,240,5,176,88,129,224,40,110,130,65,107,107,171,45,55,110,179, -218,203,9,133,170,137,201,214,88,173,123,161,204,253,23,126,14,85,160,94,242,175,187,193,252,254,151,251,41,33, -32,18,223,43,77,227,43,162,241,144,104,28,38,235,80,189,76,215,161,66,159,235,217,131,6,125,48,58,6,142, -114,40,212,174,253,31,230,66,62,31,103,50,187,175,177,16,162,16,181,176,53,207,228,204,16,156,208,184,81,124, -44,250,161,74,221,211,105,110,226,108,254,130,23,216,212,205,83,93,155,125,163,192,57,36,220,190,240,151,152,106, -12,176,202,32,137,211,159,55,127,222,76,6,116,33,101,91,9,138,222,80,137,189,135,60,178,39,156,36,87,131, -8,90,70,41,252,70,12,182,175,155,81,98,63,150,237,211,141,90,74,184,164,123,91,34,114,101,219,252,224,216, -98,107,49,213,121,214,116,25,16,14,77,123,175,192,251,154,36,126,151,21,95,169,87,73,64,42,109,113,12,125, -79,210,40,90,29,140,195,63,216,240,182,170,21,37,237,216,10,213,107,3,108,109,97,22,100,117,215,216,214,76, -54,25,17,40,102,246,204,202,230,207,131,248,226,231,167,203,117,78,191,137,227,162,228,14,115,35,147,162,84,178, -16,117,172,144,117,168,96,226,56,24,94,71,229,6,156,243,140,104,177,238,128,149,44,226,81,226,17,101,45,66, -157,24,69,246,234,209,45,246,118,59,89,149,5,225,24,63,128,54,105,52,240,160,36,139,224,52,8,239,57,150, -168,129,196,13,167,243,38,204,240,168,6,128,232,48,135,89,23,60,250,134,12,10,36,238,226,184,108,34,220,136, -230,248,209,255,79,143,142,231,87,232,7,187,18,178,230,246,202,80,87,198,233,82,86,255,29,245,83,183,205,77, -23,136,167,9,8,87,60,74,211,95,169,213,162,46,237,240,129,97,203,192,19,248,58,208,126,151,107,89,221,199, -148,51,154,150,139,149,138,43,158,197,178,111,128,218,75,200,81,158,4,94,66,222,114,173,28,232,199,180,212,1, -234,239,182,16,110,119,180,221,0,40,66,32,48,77,131,177,176,177,80,12,223,176,77,140,39,130,28,249,94,1, -96,2,234,216,32,192,130,21,21,137,43,255,210,138,32,218,133,7,225,5,214,25,149,168,87,86,17,165,23,141, -35,245,146,223,100,244,202,34,49,82,26,229,247,148,138,172,19,186,161,44,171,209,204,59,168,219,149,201,151,130, -93,197,239,21,187,83,252,72,245,131,117,87,146,49,122,184,0,195,72,106,149,149,57,122,127,93,93,190,101,114, -140,144,3,250,206,133,8,38,126,16,49,159,150,241,22,96,176,66,238,4,85,20,124,218,85,203,38,65,210,186, -133,158,20,71,39,5,165,150,2,238,16,130,107,154,149,185,139,181,12,53,87,234,8,239,212,39,43,249,54,147, -43,215,160,244,203,127,200,126,185,190,238,146,12,137,143,174,30,240,44,49,240,93,200,166,203,99,115,16,155,85, -232,147,20,23,21,138,106,229,133,74,23,236,233,197,147,55,97,65,184,122,69,16,174,232,14,53,240,44,154,171, -152,187,19,255,68,241,161,98,167,104,8,176,3,160,140,234,7,234,59,2,5,47,62,103,51,78,170,248,48,171, -213,39,81,215,217,141,96,181,46,114,167,9,236,232,218,12,108,82,20,86,119,147,151,24,216,123,18,208,233,73, -92,36,9,235,226,128,158,209,170,188,215,157,117,29,128,45,252,170,212,200,128,72,4,10,227,240,165,24,174,166, -62,180,136,174,255,30,231,203,197,49,121,194,40,183,129,2,203,179,101,4,153,212,40,2,131,202,23,241,27,193, -71,139,156,43,161,197,216,150,113,60,40,119,170,220,177,12,125,134,194,246,91,179,42,97,243,0,131,90,113,135, -182,225,195,13,75,19,215,171,50,240,38,205,34,141,129,45,7,1,101,144,64,103,14,245,250,174,120,216,161,42, -9,195,113,195,86,186,238,50,198,136,11,198,140,252,17,239,66,69,199,33,87,4,77,86,70,174,143,128,36,174, -91,147,192,126,34,242,170,44,69,174,8,78,248,19,192,211,56,100,220,156,219,142,115,143,173,210,214,219,81,74, -220,63,168,26,230,102,231,146,251,83,245,210,113,156,126,101,161,252,35,27,20,214,124,116,135,42,187,254,68,91, -23,246,159,50,70,123,193,98,51,15,97,99,141,16,31,155,249,96,142,216,188,122,252,39,73,125,130,182,68,192, -216,34,209,40,252,41,206,48,225,100,85,101,66,0,204,140,170,115,206,244,159,237,93,233,158,219,54,146,255,158, -167,144,57,23,57,13,201,146,186,237,216,148,217,90,95,57,157,56,227,142,231,82,250,103,179,37,200,205,12,5, -42,36,212,199,104,244,6,251,2,251,105,95,113,31,97,235,15,16,32,68,145,138,236,185,15,167,35,146,64,225, -42,20,10,85,5,160,144,4,165,88,153,24,98,4,225,177,56,106,119,160,88,102,8,10,225,152,18,42,208,169, -6,129,27,48,183,126,165,83,159,157,32,130,103,239,79,218,68,104,135,17,223,181,196,31,201,68,84,204,122,10, -163,202,160,223,191,207,114,30,23,176,115,60,22,29,85,253,78,54,85,41,103,29,156,42,235,200,75,238,22,22, -118,172,44,75,217,92,199,197,83,194,158,8,233,236,76,208,78,219,188,55,85,53,32,16,151,30,100,126,251,210, -32,195,175,8,206,183,212,115,40,45,131,122,218,105,57,248,51,8,56,62,148,128,227,113,252,215,34,224,125,72, -8,222,143,180,93,154,118,19,22,13,29,71,242,63,177,97,159,104,223,119,122,144,209,226,167,202,213,170,18,211, -96,83,30,23,80,2,247,227,131,4,150,199,255,4,2,203,227,247,20,88,190,217,35,176,124,99,4,144,51,101, -67,105,20,91,94,40,73,245,70,137,45,207,32,175,178,175,32,200,140,90,211,238,206,206,10,23,63,42,149,100, -144,74,190,106,148,74,242,154,84,210,46,147,248,125,170,100,77,175,10,124,217,114,188,89,246,180,159,210,130,236, -120,205,194,76,21,127,184,92,227,38,106,22,113,218,33,148,180,83,23,241,148,101,83,15,19,89,71,68,179,74, -0,226,49,162,193,95,30,63,150,151,183,199,2,55,53,177,212,191,105,226,194,96,208,165,18,246,66,54,217,12, -217,251,85,217,56,36,132,236,227,214,175,93,140,57,0,202,74,52,153,149,104,68,189,23,15,152,16,224,97,232, -166,93,184,113,82,63,197,98,131,157,122,178,113,203,12,209,146,2,19,70,21,101,67,183,166,144,188,189,254,173, -179,73,62,206,195,155,3,102,147,42,223,246,137,229,16,40,255,64,20,43,167,182,65,243,240,48,138,193,135,14, -130,118,36,71,125,214,220,8,163,108,180,71,238,31,29,86,243,104,31,244,187,66,157,248,11,141,109,43,5,182, -199,82,89,236,230,195,4,194,15,231,39,143,37,254,96,58,251,203,136,137,162,38,38,30,198,174,64,103,31,216, -120,43,171,212,187,20,146,94,93,122,201,8,170,197,18,117,182,103,62,63,51,39,113,94,230,95,100,137,216,53, -59,189,86,147,249,111,212,100,254,107,25,93,72,246,153,140,72,66,248,68,25,162,26,147,55,154,36,224,33,87, -91,165,126,211,142,139,220,118,34,175,226,95,234,46,46,13,86,72,237,30,250,31,59,22,44,39,211,78,82,116, -68,38,59,133,201,28,130,149,147,204,11,194,3,19,234,235,193,108,205,244,132,227,106,171,35,107,11,125,221,56, -29,141,253,230,240,104,95,107,117,179,170,96,95,178,125,224,186,53,54,123,23,218,46,165,20,1,227,38,176,165, -170,76,248,191,113,105,216,241,25,17,176,24,210,214,103,45,50,92,224,183,228,72,53,97,43,248,249,58,160,236, -230,136,94,110,235,83,174,130,166,209,122,91,220,9,51,182,53,18,67,193,42,198,16,230,108,155,29,135,211,42, -32,76,54,198,198,221,39,154,222,54,92,7,190,132,241,104,143,1,103,251,248,160,206,162,110,189,14,244,224,189, -163,99,235,166,121,30,104,95,21,74,5,111,66,13,140,211,73,155,200,150,52,138,108,98,151,83,138,38,113,43, -247,127,211,44,96,177,196,178,158,234,18,53,56,244,246,173,232,213,92,211,205,102,3,156,17,142,4,139,177,238, -87,117,251,223,158,220,247,82,243,29,91,177,93,75,184,205,184,51,143,147,148,120,135,204,58,23,188,3,78,167, -25,130,165,152,95,239,216,99,131,170,197,236,71,169,116,67,136,74,12,56,56,164,57,255,162,52,208,79,93,13, -244,58,78,36,39,199,198,117,98,52,164,136,250,251,66,121,206,38,198,191,72,10,34,44,103,250,86,70,225,106, -3,162,113,146,22,251,185,186,31,146,190,29,95,105,137,47,93,23,253,43,23,90,33,107,47,120,108,12,138,240, -126,61,203,4,31,103,62,55,187,93,125,25,149,239,76,186,68,45,198,82,245,105,237,244,52,71,214,129,57,88, -173,16,20,251,36,137,230,165,70,203,153,186,90,52,8,116,43,244,133,197,236,11,7,113,239,208,43,177,204,106, -168,211,53,116,174,196,79,227,11,158,134,125,86,96,183,203,246,176,30,252,60,195,25,74,77,38,153,179,144,138, -247,13,35,204,168,115,131,217,18,143,141,137,76,162,53,234,20,174,252,126,192,84,90,122,29,4,76,71,211,251, -48,216,52,41,131,230,24,141,159,76,244,107,47,145,186,5,231,81,243,89,1,140,215,145,211,91,201,46,123,90, -237,6,37,170,109,194,161,126,108,35,45,71,192,167,6,107,152,14,227,84,113,224,14,191,225,211,21,142,16,245, -202,195,2,163,233,200,120,3,87,246,13,165,146,15,127,158,224,50,209,188,87,54,180,252,82,197,16,121,18,132, -137,130,167,135,210,89,127,192,250,65,168,73,17,155,238,9,200,196,176,132,144,28,4,138,144,2,131,247,81,113, -157,128,248,224,85,58,3,170,162,137,46,150,101,154,184,206,3,134,207,96,61,141,11,222,233,135,234,49,8,179, -40,25,233,163,176,42,224,36,44,51,156,246,84,247,31,29,25,217,8,133,50,20,9,73,79,3,223,11,43,168, -60,82,0,73,68,101,96,87,29,33,101,197,53,216,199,97,130,75,184,151,133,62,136,203,166,61,208,135,254,168, -64,205,222,52,200,67,64,9,253,105,192,192,156,229,237,19,114,38,89,249,69,94,157,112,154,141,20,170,68,29, -0,28,150,111,1,53,48,234,219,108,193,111,143,35,3,164,28,11,163,158,167,153,250,198,235,163,108,114,140,84, -101,83,84,51,170,75,149,238,219,180,101,252,35,80,120,5,141,47,6,28,218,20,153,11,58,116,64,241,197,128, -135,242,128,107,18,148,137,16,129,68,123,49,132,166,68,198,249,61,155,6,149,195,118,66,249,125,182,194,142,134, -254,134,132,92,2,184,93,139,40,163,47,170,205,61,106,163,29,168,73,53,80,77,167,130,18,17,92,250,241,45, -59,184,79,115,214,36,161,76,137,137,181,153,196,190,223,35,66,127,175,52,168,218,238,157,39,202,226,101,163,154, -183,62,124,42,141,135,239,237,71,197,2,119,174,75,248,66,123,68,114,64,72,24,41,71,67,166,113,111,137,94, -39,105,186,78,100,60,57,102,195,243,112,114,194,184,31,156,143,202,209,97,38,18,26,123,133,82,254,25,129,29, -151,209,195,80,68,156,149,69,68,199,58,240,216,164,201,35,217,104,164,27,251,125,246,100,119,11,83,128,59,98, -4,155,12,89,149,236,135,106,191,140,78,181,187,143,38,240,243,230,4,196,59,224,2,176,58,64,250,211,191,200, -206,14,235,11,238,55,57,234,146,151,29,220,20,211,216,191,96,170,84,210,13,138,89,187,103,189,92,63,219,188, -114,31,230,89,177,20,155,165,48,37,54,121,33,221,94,1,204,107,103,244,182,14,50,222,193,153,158,114,23,17, -24,171,175,111,201,101,218,39,249,134,89,215,36,209,110,147,54,254,79,203,13,113,63,28,100,9,255,225,159,192, -18,254,67,155,37,156,125,249,97,178,214,127,100,173,63,254,71,214,250,143,172,245,31,89,235,63,178,214,251,203, -90,236,119,14,239,72,22,48,183,61,51,158,178,154,220,217,193,34,90,77,214,99,30,174,77,215,242,86,193,109, -209,62,193,171,185,237,87,50,90,112,92,71,80,223,115,199,126,47,163,91,201,126,171,126,185,128,249,83,210,175, -100,66,68,36,13,230,116,54,65,98,134,100,153,192,198,172,134,124,234,83,114,109,163,43,23,117,231,185,1,179, -32,202,59,38,174,14,41,47,175,241,81,31,100,175,205,96,106,103,129,57,36,87,30,145,99,211,29,168,245,6, -251,143,166,128,137,233,65,48,105,5,131,3,10,238,172,101,238,244,183,126,83,59,240,73,171,69,55,63,83,55, -149,26,218,112,250,68,180,56,177,221,56,30,27,168,22,152,135,89,81,21,78,102,57,211,136,55,141,161,243,90, -168,91,79,181,0,88,139,239,7,108,89,11,130,239,176,203,198,204,175,106,161,144,115,170,171,64,20,202,111,163, -194,132,184,251,51,38,54,244,124,236,126,132,229,34,25,47,79,163,139,49,23,205,150,167,208,141,168,187,239,101, -103,209,182,32,172,186,64,31,226,79,230,183,190,27,105,110,181,91,216,198,216,51,57,65,227,86,240,81,141,0, -137,186,24,23,173,182,248,55,166,113,45,235,19,152,95,170,109,193,22,186,121,111,176,107,195,165,8,46,234,43, -87,99,24,79,51,209,180,147,205,102,205,174,26,119,180,217,120,104,45,51,136,75,33,53,112,105,66,141,131,165, -64,223,45,195,46,14,193,215,46,166,22,126,173,47,176,32,167,242,92,80,166,207,247,103,106,229,113,16,209,213, -214,82,2,225,241,207,232,132,177,5,8,77,103,92,154,16,164,182,175,31,142,94,155,31,154,152,11,163,49,184, -9,231,65,5,166,113,98,165,110,139,22,125,54,106,135,225,212,199,141,113,180,152,195,177,95,70,152,103,211,6, -73,236,203,131,21,103,108,106,44,19,253,113,71,117,78,173,234,156,54,169,206,80,133,11,70,74,50,53,66,136, -82,147,135,53,255,106,87,103,182,72,74,141,238,60,221,246,52,66,195,165,79,179,73,207,158,61,108,162,143,78, -82,110,220,96,171,15,73,29,55,108,108,24,89,245,204,167,63,229,37,151,21,46,93,8,28,64,113,88,89,196, -213,237,83,250,79,73,124,170,231,165,216,93,233,3,17,84,153,177,21,187,98,83,117,161,248,34,32,26,24,86, -42,185,145,135,13,104,213,56,221,54,135,102,171,119,199,79,170,114,45,162,144,10,181,3,191,204,205,1,100,146, -129,96,14,206,39,41,175,129,218,56,244,55,160,39,148,186,153,179,92,239,98,212,106,90,117,140,242,26,70,229, -14,70,197,238,42,11,147,10,55,246,128,250,25,3,31,217,59,92,110,27,57,167,195,234,140,31,184,126,139,195, -138,5,168,75,23,121,75,133,173,193,47,205,218,196,130,225,235,139,34,19,38,228,130,165,238,218,133,250,114,227, -83,86,49,245,240,150,189,115,246,253,135,207,55,230,180,241,84,68,138,167,70,167,107,29,32,34,121,247,97,31, -30,106,78,141,195,242,73,175,215,131,82,164,125,130,124,21,203,203,94,124,81,224,46,19,199,231,145,143,44,120, -180,210,231,57,149,143,89,26,38,58,119,234,123,183,128,193,125,202,30,153,242,115,165,59,165,92,118,50,146,221, -179,71,98,148,145,141,193,132,241,40,27,113,10,227,20,182,70,128,36,73,42,251,165,56,162,116,230,133,66,56, -189,100,231,204,188,68,114,179,147,169,201,128,171,107,14,7,247,84,177,148,119,50,210,225,211,72,229,198,86,234, -153,140,224,50,118,26,169,252,40,44,193,51,24,1,48,166,242,166,40,125,138,146,33,124,211,79,20,51,170,34, -75,186,221,234,82,184,13,139,45,102,185,61,1,166,47,83,174,112,145,69,10,155,112,89,150,251,249,221,202,67, -54,204,35,84,7,60,148,147,85,188,24,47,171,140,107,22,174,215,90,81,74,116,234,243,222,215,47,191,126,30, -121,30,227,61,18,88,232,62,7,15,135,158,11,124,191,248,252,235,231,244,13,55,100,234,251,201,171,231,143,191, -124,249,250,219,200,83,122,72,182,146,8,253,244,241,87,207,95,126,242,226,243,79,40,151,119,241,130,102,178,52, -153,115,196,60,253,252,213,211,23,20,58,77,242,105,170,67,94,208,249,45,10,72,137,156,212,247,235,179,111,95, -126,69,1,171,66,102,11,132,188,254,230,25,73,76,145,183,210,206,177,80,139,151,143,159,225,166,2,15,174,129, -224,245,136,193,44,147,10,125,25,104,33,140,231,61,246,70,191,254,134,170,134,207,185,160,78,155,209,79,165,215, -47,65,100,187,103,41,104,92,171,142,93,149,215,250,234,107,124,87,227,105,36,168,151,194,152,126,212,155,89,164, -134,149,33,228,76,57,35,9,99,70,247,166,168,181,232,121,56,101,228,242,67,137,111,244,98,158,23,97,159,126, -185,249,156,105,205,9,97,83,19,118,169,95,156,91,87,43,160,171,176,219,157,9,102,174,9,8,19,188,226,238, -153,108,211,114,185,12,87,7,59,184,117,149,165,111,23,181,13,156,6,86,12,66,203,8,88,53,112,74,63,150, -140,180,75,42,202,168,124,161,41,149,57,142,213,46,21,219,81,213,93,163,221,146,37,226,215,9,191,14,197,102, -215,139,21,19,145,45,144,143,201,180,201,193,36,96,204,224,197,101,150,206,88,22,65,250,72,227,91,150,32,60, -39,33,235,215,73,145,92,36,105,34,111,217,148,194,242,44,147,95,145,89,47,17,108,85,126,178,88,193,38,239, -222,241,252,165,152,114,150,210,55,228,27,86,208,75,34,18,92,52,242,185,170,21,169,34,194,250,134,45,131,230, -145,192,138,185,242,20,197,200,239,87,169,65,44,163,25,180,170,75,122,144,86,117,21,113,236,40,190,165,232,117, -217,192,59,119,10,134,19,154,183,213,157,129,103,209,45,210,44,232,49,32,18,169,230,194,154,99,18,125,167,28, -172,21,41,241,118,99,135,105,241,170,94,211,24,65,233,54,40,167,32,99,179,174,130,205,22,114,181,115,168,224, -42,203,151,23,5,207,175,120,238,168,58,102,19,174,62,153,136,227,250,24,83,79,211,132,170,252,138,82,57,7, -243,253,156,173,147,194,230,71,96,68,230,196,27,40,29,124,126,58,229,188,138,233,55,244,196,106,113,193,243,138, -16,157,78,30,59,239,52,30,100,178,224,244,184,216,41,62,204,182,51,214,65,232,112,85,213,66,185,112,113,117, -198,13,90,147,236,80,93,163,63,184,218,61,71,69,150,83,115,119,47,74,147,54,129,197,154,186,139,40,80,46, -251,27,1,229,145,71,142,245,124,15,21,85,30,211,198,202,153,47,62,131,177,255,70,192,162,237,139,128,56,243, -92,28,69,3,70,33,240,224,41,136,73,89,255,0,126,16,4,136,120,135,136,32,8,189,190,23,162,220,242,20, -49,138,175,64,55,250,12,120,161,193,101,160,232,202,172,61,176,204,242,196,68,189,237,210,68,189,193,114,223,30, -90,216,145,182,9,1,91,186,118,239,138,179,204,99,135,54,78,149,63,244,17,175,143,110,67,152,81,164,138,80, -17,41,248,151,243,21,37,70,200,35,156,102,186,189,61,77,134,240,216,35,90,156,120,249,137,210,227,244,31,131, -235,216,40,169,104,176,160,174,216,118,89,198,171,200,96,236,124,132,19,231,227,79,127,234,159,3,239,235,100,22, -74,150,149,168,12,19,86,58,39,5,125,178,66,119,46,140,67,214,92,178,193,252,59,165,26,36,51,182,162,135, -73,202,98,250,48,137,137,135,197,165,163,91,88,228,237,173,241,138,122,16,22,171,140,57,3,55,182,119,64,175, -76,102,4,226,14,141,212,136,141,169,117,81,38,213,5,228,192,118,90,221,150,24,155,51,183,28,121,173,68,149, -155,6,141,213,1,96,2,92,193,65,189,217,7,141,153,215,36,156,170,221,169,75,86,243,255,186,176,92,83,150, -60,83,128,141,85,34,181,125,85,240,76,236,16,25,185,247,70,193,96,194,220,48,60,202,98,141,113,21,174,88, -53,45,132,83,86,117,88,206,106,84,70,253,163,230,23,116,206,155,45,28,81,238,148,185,186,158,182,230,192,46, -24,231,206,112,163,60,151,108,197,166,56,119,201,104,6,102,89,57,44,47,162,146,52,101,116,214,83,141,12,140, -113,196,16,233,104,123,26,88,146,219,239,11,229,227,157,188,88,47,246,76,44,168,212,146,93,168,34,139,178,184, -231,209,228,146,157,245,116,26,86,150,104,9,229,185,186,189,229,57,102,163,231,37,12,125,13,240,165,0,233,99, -72,31,27,127,93,33,171,247,240,33,10,202,169,69,52,205,145,188,141,209,238,200,220,92,19,207,179,88,198,19, -9,155,241,215,138,201,227,194,214,153,14,131,189,82,127,128,61,106,89,149,36,85,161,216,96,9,157,227,22,216, -192,61,137,118,198,229,11,88,66,170,119,127,173,74,10,5,131,51,254,85,17,230,84,177,50,154,164,221,60,185, -1,180,243,233,103,84,180,85,66,151,66,123,155,103,165,68,98,157,219,133,111,223,60,204,110,30,252,97,214,239, -252,116,45,198,94,34,186,87,132,25,47,244,188,13,133,112,80,53,220,246,204,198,158,121,83,113,111,153,241,19, -24,86,121,87,185,122,101,174,3,143,101,226,27,237,234,247,245,50,84,234,76,6,68,110,170,240,23,60,190,226, -110,84,149,117,13,115,16,251,247,149,54,116,74,123,150,93,11,157,105,130,145,77,57,247,221,66,159,227,71,199, -147,0,0,144,205,97,45,58,238,224,166,155,177,23,79,177,163,22,184,192,158,122,40,182,120,6,27,77,26,87, -68,27,186,174,23,43,41,51,177,157,213,77,241,46,93,45,251,30,131,182,230,182,214,188,82,223,222,218,28,22, -113,34,106,85,25,220,63,185,77,127,88,14,189,42,241,4,160,122,86,105,134,70,121,110,81,218,131,48,149,132, -132,243,44,35,124,52,167,27,108,165,211,144,155,128,102,252,74,117,56,19,126,41,241,78,56,147,24,43,125,184, -24,98,185,25,54,147,140,37,120,223,86,122,135,247,238,7,231,91,189,11,52,178,9,233,29,109,192,112,70,237, -247,1,68,35,31,64,169,80,58,90,77,177,47,92,53,253,205,38,250,149,244,223,254,116,173,151,91,122,11,78, -52,245,205,171,151,207,198,149,227,19,26,22,214,25,140,7,31,45,30,131,243,149,32,164,95,114,153,50,120,56, -236,13,238,63,232,13,62,166,255,251,131,187,222,230,186,120,203,214,176,101,42,159,182,181,131,48,138,176,40,120, -231,12,70,56,64,96,237,236,72,120,204,143,153,123,160,18,57,86,38,7,78,52,74,113,150,233,56,43,20,122, -124,4,102,181,82,232,93,163,218,160,231,45,178,25,209,103,106,92,167,168,53,160,130,240,21,76,68,15,113,231, -129,179,84,73,3,127,158,237,135,102,210,135,118,33,21,198,2,150,168,254,153,138,67,250,148,57,9,33,34,160, -218,52,125,173,124,74,174,63,92,136,96,163,151,92,72,126,221,168,69,17,81,154,58,224,119,133,31,61,236,135, -188,251,144,8,204,231,143,162,238,241,253,62,25,147,79,35,122,6,164,145,129,240,86,62,148,119,101,51,17,160, -167,164,246,93,212,173,218,107,133,182,208,83,53,224,30,155,37,185,30,72,33,113,196,28,14,205,105,156,167,124, -46,61,101,30,156,25,19,68,91,70,28,3,91,18,44,233,74,235,201,25,111,94,20,57,15,189,167,154,16,148, -222,14,184,154,149,139,32,112,12,102,39,14,198,180,50,131,52,43,76,234,93,115,27,1,124,155,223,98,35,175, -165,57,5,217,186,22,131,20,175,133,182,186,203,68,237,251,221,76,222,216,41,244,13,9,251,187,181,28,19,3, -185,21,108,93,114,148,22,238,57,248,225,251,98,54,152,58,76,168,13,112,152,45,227,227,119,46,215,161,105,221, -35,140,122,231,106,222,215,28,8,169,151,148,210,205,44,166,172,48,146,67,239,39,119,149,221,54,203,157,92,60, -19,164,248,116,16,254,5,170,237,4,93,82,86,102,134,12,99,66,84,201,152,24,168,59,156,50,43,40,132,25, -51,147,186,26,218,51,223,195,164,10,95,172,204,153,191,85,220,202,215,6,61,8,97,123,218,62,217,91,247,193, -238,44,145,42,74,88,27,29,63,228,86,166,145,145,221,201,253,45,4,180,146,19,140,82,76,162,51,95,51,21, -182,198,67,185,53,47,61,156,199,181,34,244,65,4,187,242,108,112,81,245,197,44,143,175,169,35,88,51,176,178, -181,85,208,218,232,214,14,14,83,156,11,14,155,92,59,184,181,212,85,41,172,201,174,61,81,101,200,115,146,193, -162,215,33,93,30,54,189,246,164,218,210,87,37,51,38,191,246,4,48,4,186,240,176,8,182,131,107,59,97,5, -111,12,134,106,146,70,154,43,161,250,26,78,192,213,204,68,253,88,122,123,239,170,254,12,92,84,195,30,91,116, -74,243,152,201,227,112,250,218,45,109,14,9,96,123,248,36,38,167,208,155,199,221,34,75,73,168,167,23,205,127, -187,37,167,69,185,141,185,245,223,43,55,240,111,100,247,190,45,137,35,59,134,201,34,101,6,92,123,51,215,190, -51,138,96,141,111,191,247,73,187,83,15,70,218,199,122,228,205,19,162,6,248,185,70,102,62,230,71,227,167,29, -50,160,182,51,40,27,6,55,170,189,102,200,35,93,90,30,89,11,128,1,232,33,203,194,106,91,112,246,88,90, -59,62,161,8,48,112,158,143,18,181,64,253,184,0,87,122,253,234,5,54,73,37,84,50,44,201,145,95,153,211, -185,182,146,224,146,15,95,50,9,67,69,145,79,35,164,46,136,68,24,111,72,35,84,154,151,243,121,65,77,231, -226,105,44,174,226,66,165,134,10,95,250,205,244,189,33,206,149,232,202,11,24,43,192,21,116,65,156,245,233,63, -36,168,53,82,216,54,33,39,5,140,250,251,22,28,231,214,2,91,245,201,121,229,225,159,140,221,201,163,92,137, -27,102,3,102,114,20,157,4,182,211,116,220,36,57,63,50,111,71,3,231,125,120,254,40,58,126,112,60,30,132, -253,17,55,22,134,141,175,25,181,143,214,103,90,240,33,21,81,217,166,130,64,241,76,141,3,34,57,53,21,112, -144,34,214,164,240,47,240,131,205,65,196,140,254,236,42,249,181,117,104,160,22,187,178,152,145,152,113,167,28,140, -96,168,144,58,68,233,29,88,178,204,227,226,210,150,217,206,74,188,224,176,134,164,217,114,121,219,165,169,242,15, -251,50,5,65,29,152,35,77,248,208,215,221,33,126,184,36,112,174,254,54,142,159,239,133,240,43,242,225,188,180, -125,79,36,19,86,153,201,15,87,101,140,222,115,238,168,53,231,149,246,210,255,23,215,91,180,0,175,87,49,43, -211,150,123,76,31,113,102,41,100,100,249,152,5,86,54,76,26,64,89,154,126,155,249,107,153,45,195,62,195,4, -17,150,176,178,130,117,140,75,58,197,111,146,153,188,100,23,252,50,190,74,168,118,94,177,200,50,89,210,242,144, -204,1,48,62,169,242,193,91,13,83,237,108,31,49,142,3,150,250,102,37,97,238,7,163,114,197,115,100,24,157, -51,242,178,9,63,63,15,212,178,37,105,36,89,101,69,228,17,74,19,126,197,204,92,119,142,130,157,244,251,214, -254,227,198,228,1,83,217,111,87,41,47,171,52,47,141,115,242,220,228,59,251,143,186,161,103,116,158,159,220,220, -92,125,152,178,49,123,127,101,195,229,45,88,71,59,76,197,104,170,166,33,154,113,11,44,213,20,101,242,42,133, -28,27,237,163,174,104,228,84,131,172,217,120,86,211,29,46,149,64,208,132,194,147,31,17,238,212,236,151,168,41, -207,250,102,161,47,109,228,196,218,80,160,12,99,190,12,222,123,178,105,239,215,123,110,165,228,209,64,193,22,203, -88,108,53,204,163,110,49,232,60,55,156,158,185,200,226,46,178,92,173,76,53,73,80,235,4,13,174,73,105,229, -61,55,214,93,222,211,54,216,128,85,166,152,186,37,64,160,221,117,141,206,230,43,202,94,209,219,22,114,101,12, -214,154,94,40,84,186,13,147,168,45,80,215,70,53,199,46,209,61,85,2,102,7,171,78,242,146,170,208,137,175, -57,62,238,116,254,239,127,255,231,191,189,125,186,227,29,121,152,120,171,173,40,62,183,251,199,199,165,12,164,42, -62,225,213,78,242,243,32,172,162,218,45,120,115,127,31,2,21,225,28,40,162,44,211,85,209,42,76,212,69,65, -253,41,160,182,101,65,89,207,88,248,130,61,208,43,152,104,229,219,254,205,79,215,170,90,196,116,169,201,223,103, -137,128,175,80,54,116,150,25,7,247,3,170,250,236,12,94,240,253,33,243,250,36,81,189,13,2,195,139,101,171, -248,31,147,208,171,188,104,60,150,148,19,25,136,49,117,99,91,5,243,20,89,66,54,190,75,83,122,66,2,254, -37,42,33,163,149,156,119,31,48,239,136,11,248,244,120,253,234,115,235,207,222,127,91,200,89,24,234,139,239,30, -185,239,137,144,167,167,157,121,78,3,167,232,68,100,204,223,193,112,229,254,218,195,165,73,158,19,112,142,128,141, -27,242,221,4,65,107,106,228,232,59,241,157,160,220,59,88,250,162,156,117,17,61,124,209,12,167,163,212,253,236, -20,215,199,247,188,227,43,208,211,78,63,248,78,172,191,19,29,250,87,175,106,231,34,145,168,231,153,146,150,149, -106,242,228,86,242,194,215,217,79,84,142,231,200,95,167,167,190,236,248,40,42,81,197,208,227,17,178,48,245,160, -0,218,159,164,65,117,137,248,103,114,39,156,126,147,220,240,244,177,252,28,67,219,79,152,74,59,73,84,1,0, -220,152,114,108,125,8,48,247,77,180,170,205,209,145,173,13,218,168,219,124,26,41,188,236,22,93,161,196,150,128, -135,90,124,243,33,1,80,56,8,136,213,105,195,222,252,197,188,88,36,11,45,249,77,151,75,79,129,202,219,212, -94,188,31,121,130,136,194,99,150,242,46,178,217,237,214,5,171,18,105,140,158,105,220,54,28,170,132,152,138,180, -143,181,86,211,234,106,169,91,160,117,161,194,206,115,218,60,150,217,145,71,35,145,187,35,209,14,194,31,27,141, -1,27,244,53,203,56,148,107,232,42,89,181,33,115,14,198,52,52,77,64,66,60,40,95,90,31,146,99,15,55, -90,122,161,135,94,241,180,237,14,140,246,0,193,65,171,35,47,124,2,213,194,169,187,174,178,235,177,157,230,203, -186,191,251,159,192,147,61,9,206,152,0,115,37,159,202,230,116,70,208,42,197,96,3,20,207,102,106,183,181,113, -239,224,123,128,214,6,9,202,145,65,7,2,188,6,47,105,232,199,82,4,129,158,210,141,58,166,15,123,46,68, -120,70,136,70,147,241,107,9,23,186,125,201,47,159,220,126,62,35,164,129,220,131,209,71,31,61,186,171,175,222, -59,253,8,131,231,145,34,255,211,143,122,214,80,187,46,135,66,248,46,79,102,163,37,181,5,91,115,142,239,45, -111,58,195,254,242,102,116,201,97,15,130,87,164,159,141,190,95,21,146,136,180,107,228,179,41,135,136,61,82,119, -165,118,19,201,23,69,25,180,177,249,15,214,239,226,101,56,64,78,166,160,121,202,111,54,255,181,224,179,36,238, -248,139,248,166,123,13,181,35,236,156,124,76,80,193,218,169,154,169,205,0,181,233,143,22,122,117,190,191,217,252, -114,125,145,221,116,137,109,32,246,34,195,157,183,93,10,217,132,88,196,95,119,187,70,78,237,135,157,65,15,251, -44,133,236,206,227,69,146,222,134,159,241,244,138,203,100,26,179,199,121,18,167,172,136,69,209,45,120,158,204,53, -24,120,81,56,184,79,245,85,159,215,186,249,39,253,170,120,131,36,122,3,9,190,203,177,151,168,171,46,129,13, -127,242,240,226,193,236,193,176,204,234,86,200,75,94,36,69,8,46,51,194,52,213,213,108,17,169,97,151,92,80, -97,47,248,187,114,103,193,22,174,53,82,240,186,185,148,139,148,129,51,177,159,80,183,174,155,161,26,170,183,209, -134,107,139,70,244,130,219,72,190,216,244,172,68,191,86,213,83,93,105,250,181,2,29,242,197,168,108,224,124,62, -215,45,177,215,203,134,43,156,4,198,162,152,219,128,173,238,62,156,114,246,16,70,13,13,166,85,46,93,244,204, -226,252,122,153,149,151,219,228,60,85,190,156,70,90,197,237,22,34,94,110,55,211,36,239,196,43,153,141,80,93, -122,215,95,182,17,137,128,141,188,123,1,195,114,137,244,105,156,78,125,90,69,35,210,252,101,135,20,114,223,33, -187,32,48,168,80,80,247,134,109,80,187,4,52,24,12,70,154,162,117,218,193,73,115,210,142,230,159,63,233,19, -101,82,216,20,59,83,136,212,101,117,173,79,25,218,233,29,23,21,98,236,254,132,117,121,161,112,87,77,56,154, -68,171,140,142,239,104,27,74,44,164,147,182,220,236,176,54,96,3,27,55,216,102,35,248,233,194,18,146,42,139, -114,70,182,21,98,183,60,150,36,4,178,193,60,15,106,16,212,246,213,66,212,129,92,234,118,41,203,165,103,91, -131,161,37,8,221,49,45,8,119,169,210,166,61,94,107,66,196,78,88,67,21,78,217,187,157,52,28,14,71,187, -20,230,224,62,78,211,78,111,88,84,37,244,244,254,135,245,78,94,24,80,21,88,24,207,169,112,171,0,123,158, -105,108,151,166,199,237,113,165,104,113,31,31,109,31,11,53,146,183,77,189,186,222,34,91,127,63,137,119,238,118, -246,83,119,64,129,200,245,242,47,69,231,113,177,228,83,226,161,106,131,104,239,99,154,21,104,200,151,155,67,214, -21,58,27,74,235,15,238,61,136,47,76,129,253,45,18,234,96,122,105,231,105,181,89,65,241,129,18,75,195,19, -4,112,137,97,84,96,76,32,71,10,34,251,90,65,165,150,35,108,107,34,249,184,223,183,85,14,75,154,168,74, -85,111,24,17,191,243,187,68,193,65,5,122,137,235,192,205,192,163,182,111,122,118,187,73,51,77,109,81,250,46, -177,182,113,100,203,85,59,67,96,5,147,247,49,225,168,129,83,187,67,210,69,82,175,154,44,208,105,78,69,59, -241,186,145,159,42,212,219,59,202,187,182,174,42,72,199,206,248,52,83,221,46,186,242,146,68,76,193,73,138,172, -149,84,82,117,87,89,59,79,80,233,157,81,221,218,203,85,45,135,63,202,201,136,53,17,89,215,100,163,77,175, -180,77,185,211,243,46,218,13,216,96,237,78,71,234,8,192,77,103,17,139,25,68,189,219,237,190,195,15,150,1, -174,67,229,23,32,187,206,227,229,136,232,233,226,15,137,236,130,44,16,215,213,249,161,235,100,182,154,94,142,108, -196,77,136,65,174,123,242,222,118,165,221,145,191,219,195,46,49,232,33,10,184,78,183,211,206,18,40,242,30,96, -142,58,190,6,186,59,12,26,57,131,193,195,176,98,78,115,210,47,103,35,116,30,4,171,76,202,108,161,73,207, -69,134,106,6,198,171,169,122,187,88,106,138,56,126,15,201,230,47,32,192,152,98,79,214,123,211,131,93,16,253, -115,121,205,185,48,105,238,253,141,171,10,237,160,84,8,72,53,184,11,171,166,122,131,144,85,234,11,100,72,235, -36,179,72,233,19,167,143,238,210,167,142,80,9,52,28,37,36,201,236,244,163,255,7,106,62,239,65,24,209,0, -0}; +const uint32_t GUI_HTML_SIZE = 17462; +const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,76,16,197,98,44,33,236,190,95,65,57,174,12,117,103,235,238,222,30,121, +76,102,73,203,132,41,100,245,252,254,172,31,86,151,133,184,39,171,19,219,103,91,215,15,231,59,194,113,233,219, +181,213,15,38,188,161,142,150,64,178,93,19,98,213,129,201,63,132,119,177,4,54,194,58,19,19,176,150,55,215, +187,173,69,41,212,184,147,76,9,90,246,16,250,85,136,44,133,13,196,64,239,193,125,204,217,233,28,122,104,161, +245,169,52,5,18,50,26,223,74,214,120,208,83,217,228,95,49,143,244,244,46,125,188,8,94,203,196,67,15,201, +1,176,252,54,187,8,133,150,142,185,74,203,74,217,156,30,83,102,125,232,230,133,55,17,50,27,74,101,30,205, +64,121,252,151,84,17,136,91,166,15,41,148,160,230,179,233,108,74,217,148,148,241,62,43,145,178,119,249,167,44, +18,67,39,34,15,223,123,58,51,55,53,221,58,185,93,56,90,108,12,27,157,227,131,205,112,187,61,183,228,47, +14,30,208,94,206,207,161,121,238,62,141,122,133,162,190,73,187,147,244,236,206,205,112,174,175,150,252,97,121,123, +50,237,78,182,45,29,77,157,209,201,222,86,126,123,212,192,139,120,184,224,71,231,135,23,249,84,95,235,159,142, +54,134,148,66,196,14,146,150,134,2,13,203,208,253,157,39,66,1,49,66,172,130,71,251,62,20,133,214,143,233, +43,228,231,98,140,236,161,125,182,185,179,119,249,242,255,244,106,99,91,108,5,226,24,252,170,250,114,125,133,37, +27,177,98,193,195,10,180,44,67,222,245,32,199,71,104,215,38,138,46,89,198,240,198,153,211,53,55,142,35,247, +87,44,213,21,15,40,247,112,60,187,149,23,106,176,172,141,207,201,185,50,99,187,44,59,121,80,57,46,138,132, +37,198,20,168,144,160,101,197,212,127,79,55,154,160,40,91,190,189,218,7,17,95,141,110,244,39,186,33,35,228, +27,170,175,182,39,90,101,101,218,172,80,143,97,90,233,196,234,139,66,211,72,140,73,77,99,25,162,138,126,228, +181,157,228,79,98,36,116,16,232,176,110,214,100,0,245,176,47,58,122,107,4,47,147,108,44,165,124,123,42,43, +209,17,57,41,159,78,122,58,255,219,232,106,59,213,133,78,109,89,253,94,20,226,175,68,106,70,182,240,14,203, +195,95,165,180,66,203,137,209,155,147,159,141,77,232,232,215,243,90,87,47,186,18,66,171,223,6,68,12,17,209, +18,207,57,78,151,121,145,209,169,199,74,41,19,146,64,228,187,211,152,48,201,50,157,93,149,153,174,229,248,199, +229,213,127,16,172,14,109,178,184,66,59,15,130,195,163,240,34,246,131,128,14,180,147,50,44,249,28,194,243,5, +111,61,217,104,116,6,117,51,183,149,214,216,221,201,157,23,251,9,109,126,195,35,234,80,175,101,165,109,83,153, +9,245,213,232,108,194,167,179,202,3,19,168,159,123,219,77,24,250,68,135,189,25,7,129,176,251,145,26,172,72, +208,225,129,117,49,172,159,186,97,131,123,15,35,97,220,212,250,11,218,65,166,13,121,111,205,108,15,76,40,182, +225,96,89,141,115,147,22,77,166,199,81,111,221,127,188,167,92,229,118,28,189,155,172,81,232,95,24,126,12,118, +71,74,127,210,54,93,162,164,40,26,128,149,187,157,144,147,151,164,58,209,96,193,64,5,37,228,144,162,100,160, +81,179,7,72,212,215,36,205,109,171,95,69,28,213,237,162,53,237,186,253,139,108,171,245,178,69,153,100,109,185, +169,219,149,73,91,99,55,109,110,244,44,93,62,180,255,87,150,237,127,151,85,214,230,86,87,201,215,124,210,43, +170,16,72,134,109,152,104,154,147,28,149,39,245,204,60,40,139,159,94,27,123,213,214,164,47,130,181,200,254,58, +169,144,53,178,174,137,13,2,146,252,170,124,209,231,100,32,8,182,223,244,40,28,47,188,209,49,4,13,41,219, +89,43,209,52,114,252,172,183,40,211,52,46,149,153,165,15,209,24,197,225,198,57,143,27,252,184,30,185,104,82, +45,156,49,214,97,161,205,194,46,127,251,5,21,223,132,206,50,241,68,234,195,250,175,49,234,10,99,229,126,39, +252,34,163,10,77,193,159,17,105,145,3,161,207,32,39,166,41,138,145,178,97,166,159,146,166,176,55,85,185,174, +101,127,216,119,243,47,101,158,157,156,41,165,232,136,120,14,106,222,237,197,25,233,101,249,36,44,52,78,171,68, +101,32,36,116,23,175,110,22,20,138,136,142,20,105,88,19,146,168,2,148,81,84,2,74,38,202,225,241,241,57, +34,12,216,241,237,60,58,195,175,246,195,44,226,163,97,55,245,115,75,238,56,135,171,26,10,77,123,160,151,40, +141,227,211,83,211,59,33,129,162,10,246,242,120,49,168,234,32,232,58,162,145,208,236,207,159,97,180,229,141,111, +105,83,145,97,56,90,187,61,196,154,108,199,155,84,175,173,253,250,146,173,209,46,243,58,116,44,43,13,110,224, +238,224,87,171,236,30,246,133,97,209,24,248,148,86,246,136,31,31,99,92,197,6,232,19,162,160,48,100,100,250, +245,26,37,44,79,191,73,119,172,73,111,243,19,251,93,59,32,182,149,137,61,61,149,29,218,145,18,70,185,197, +153,125,144,94,14,6,39,180,39,231,6,157,192,142,24,147,14,169,67,231,97,178,123,6,182,189,35,129,153,236, +233,105,71,207,211,114,131,148,29,148,186,154,39,194,121,82,107,229,52,105,213,217,159,100,224,237,3,66,230,101, +94,233,228,121,199,28,185,83,14,52,56,165,67,139,17,237,201,208,212,93,139,65,29,49,87,225,186,169,81,129, +216,29,173,112,186,58,61,109,219,114,164,156,39,204,75,68,160,111,53,106,161,202,205,2,97,132,40,143,174,180, +109,173,237,93,190,210,101,99,165,88,13,220,99,37,246,113,74,79,28,9,85,121,150,165,198,62,6,98,43,132, +223,192,246,49,48,138,23,252,205,191,88,223,219,73,9,21,133,84,29,82,78,53,220,216,235,197,251,227,196,51, +156,43,60,183,176,74,75,66,67,31,13,34,85,132,244,134,184,50,132,80,84,170,16,24,176,75,233,160,84,73, +223,211,111,112,43,82,68,87,1,65,27,96,183,67,1,165,97,185,49,186,154,254,231,191,119,73,9,176,150,104, +219,50,158,229,15,236,178,6,242,24,237,168,148,224,22,36,220,9,3,221,72,143,84,30,4,91,92,148,114,39, +7,66,155,139,225,53,146,64,1,53,60,50,123,25,44,97,11,83,88,193,28,22,112,173,42,212,33,25,74,219, +54,112,174,174,189,100,73,228,134,230,137,179,12,141,45,251,110,253,90,118,96,104,83,229,224,102,217,131,98,151, +196,25,139,35,212,233,120,94,150,133,78,6,126,49,141,9,38,194,172,152,212,62,152,71,96,211,172,230,186,58, +156,155,211,149,105,135,251,153,46,50,224,26,238,203,232,247,170,74,182,97,94,187,86,76,37,130,173,225,205,135, +154,104,186,99,200,254,35,163,41,25,195,111,103,8,56,117,190,10,83,142,61,216,98,184,197,47,134,219,216,125, +89,15,4,255,130,219,164,11,62,52,82,6,28,18,101,232,139,138,102,246,149,216,170,107,230,31,243,18,135,77, +169,45,53,52,34,82,138,198,212,145,4,167,216,34,38,186,168,245,9,137,125,137,210,94,126,63,159,44,81,204, +68,203,225,91,62,200,63,66,246,70,80,30,27,123,243,214,169,100,119,43,144,61,216,170,109,219,166,7,22,1, +43,53,101,99,94,42,199,43,18,217,82,59,82,75,52,235,69,219,138,5,26,128,4,55,25,4,11,246,118,55, +242,178,135,110,114,233,164,145,182,237,10,39,101,103,204,171,184,139,211,115,68,55,87,171,163,55,47,51,130,12, +145,29,17,63,212,198,52,202,84,173,46,196,20,207,170,101,84,171,43,230,3,174,209,122,235,163,168,76,135,74, +24,222,45,113,27,177,68,17,79,97,175,30,228,46,35,69,128,181,122,17,91,244,29,111,240,90,205,33,83,231, +147,236,203,151,137,100,38,72,75,65,112,35,168,5,167,90,10,220,11,73,91,216,53,22,67,215,184,20,11,2, +92,204,78,79,251,102,224,155,23,236,155,251,168,86,65,201,177,26,114,68,86,6,65,254,189,244,248,114,196,39, +42,85,206,114,210,191,32,79,85,184,93,29,97,189,226,43,231,66,84,14,125,116,37,200,255,41,2,208,46,138, +138,125,46,50,184,79,23,7,241,210,42,219,182,232,240,172,51,125,204,131,113,82,28,122,155,150,241,177,88,202, +152,119,168,1,235,239,8,9,3,202,87,195,24,197,177,41,133,6,18,146,109,31,36,45,169,81,166,220,130,251, +30,248,75,159,7,24,119,235,228,109,203,195,114,160,103,169,35,15,70,0,249,129,9,40,92,14,147,245,90,155, +140,243,215,82,66,234,188,198,17,112,74,106,20,122,12,170,6,59,77,104,48,33,153,230,243,130,239,179,228,123, +127,23,37,167,234,27,133,197,6,169,75,231,126,120,95,81,213,82,235,202,254,171,70,68,90,32,167,132,62,247, +215,236,254,50,136,211,168,28,226,222,203,233,218,219,203,248,11,21,31,118,118,246,64,242,214,46,197,68,212,91, +225,212,173,103,214,7,96,19,143,199,145,15,167,163,222,53,218,54,9,173,174,173,176,50,54,145,57,29,175,95, +199,123,50,231,123,117,176,50,242,137,147,27,63,96,56,202,196,221,135,200,109,80,126,14,132,222,34,238,40,91, +51,44,185,99,192,21,218,240,123,240,74,141,199,18,42,231,77,150,242,236,74,154,32,160,30,29,249,218,195,131, +5,132,115,25,211,30,212,72,196,104,136,115,165,42,108,14,225,105,65,238,188,157,140,75,47,62,44,127,13,247, +191,61,200,92,89,148,191,176,138,202,152,117,145,164,90,124,61,79,214,168,30,253,151,175,68,82,2,173,217,242, +71,185,209,213,121,82,107,33,145,178,142,223,205,133,117,145,227,94,44,47,108,223,5,29,22,232,46,248,197,170, +199,141,102,246,52,71,53,129,137,171,182,213,84,165,95,188,104,99,169,172,214,70,35,87,144,199,155,8,35,1, +42,180,43,171,62,3,152,244,140,101,137,89,232,170,108,234,98,59,213,246,210,32,220,223,239,126,254,64,213,43, +78,149,75,121,192,222,43,189,72,136,191,183,209,82,34,135,203,177,220,47,213,244,60,64,124,215,227,1,1,170, +81,29,54,148,92,129,39,241,125,212,195,202,247,109,50,191,164,108,219,143,51,204,110,232,109,129,199,172,79,45, +109,181,125,99,75,141,209,72,39,157,155,236,210,132,138,97,76,120,119,199,98,122,219,238,157,124,244,77,97,27, +4,95,176,181,125,126,143,174,33,99,47,176,223,45,90,221,188,177,90,88,25,57,79,25,204,128,145,195,196,246, +89,104,46,60,80,53,156,179,159,142,190,61,8,27,106,146,122,220,181,148,197,15,235,218,205,145,93,103,127,184, +235,86,248,132,172,129,4,30,225,9,50,246,52,78,199,46,96,1,87,112,13,207,176,129,91,184,131,75,184,129, +31,240,10,247,138,35,251,48,46,226,212,160,148,147,131,186,109,50,72,34,209,217,50,238,193,147,114,151,128,27, +105,160,254,146,235,136,68,205,158,30,36,136,173,11,177,115,73,233,100,37,39,164,39,118,255,143,250,184,119,54, +245,172,170,46,97,218,40,220,125,239,139,181,59,4,66,44,249,140,46,221,244,1,110,213,54,222,196,27,134,13, +95,146,162,209,17,45,69,57,148,4,17,95,83,194,88,81,87,185,9,137,31,151,149,92,68,98,140,187,108,73, +116,199,104,62,247,65,112,31,246,51,97,229,170,135,152,183,78,21,189,162,221,139,103,184,149,145,24,206,45,221, +28,76,135,18,83,247,56,230,253,234,119,9,155,32,216,132,117,51,23,83,233,211,64,245,140,189,218,38,150,238, +187,174,231,156,120,234,25,85,183,46,225,49,42,119,89,20,87,68,110,106,73,57,51,118,234,57,118,56,19,82, +14,162,70,141,184,86,117,24,125,154,116,31,46,180,253,155,174,242,23,157,77,105,225,223,170,114,69,241,125,191, +195,111,241,19,92,107,184,174,148,80,240,36,124,142,72,60,123,96,9,23,202,39,187,11,143,22,86,146,207,249, +143,142,194,135,37,9,172,214,165,209,198,254,87,94,20,63,203,198,160,131,31,155,21,18,62,108,249,91,158,249, +29,36,42,78,13,142,172,203,254,22,249,227,115,61,163,71,92,124,114,188,91,157,106,220,211,65,254,131,69,54, +147,145,203,135,247,184,234,101,217,20,217,185,223,116,191,206,156,14,40,12,125,182,234,37,141,232,218,182,114,165, +160,226,98,144,115,190,15,22,166,24,220,129,142,58,80,86,51,217,212,55,201,181,135,170,224,189,15,63,187,254, +51,247,67,196,125,145,164,203,195,44,76,119,229,186,170,40,21,131,59,76,99,238,190,59,219,244,121,203,29,166, +152,67,85,208,218,236,14,115,92,111,193,192,171,12,30,4,143,29,156,236,163,247,81,185,123,73,29,157,222,139, +232,184,133,248,205,131,115,137,193,227,254,49,96,225,226,167,43,131,209,102,14,189,212,203,219,203,145,218,27,101, +224,210,5,189,10,110,212,25,252,19,161,198,171,111,168,52,175,36,184,12,130,75,81,73,216,42,31,89,188,162, +189,154,247,161,67,194,15,212,195,143,67,61,252,56,166,135,31,3,61,112,38,147,149,111,127,146,230,193,193,119, +27,204,118,53,219,88,16,156,158,222,124,255,229,95,228,228,0,196,107,134,28,207,229,198,231,140,201,189,135,20, +194,197,159,92,194,135,117,65,33,102,229,51,113,183,60,53,201,26,125,165,75,131,89,97,109,43,174,142,175,122, +117,34,154,87,197,135,216,226,189,228,203,221,53,123,103,87,7,199,219,238,106,233,139,253,45,204,133,129,195,26, +229,85,198,175,209,236,245,225,195,5,12,83,126,3,171,222,95,140,159,24,61,92,119,158,121,161,232,235,96,217, +65,53,106,132,85,196,167,75,130,224,192,249,99,49,116,217,129,43,203,136,7,189,129,91,24,38,10,5,39,9, +238,184,176,238,111,93,60,102,215,219,98,143,95,48,208,168,92,214,253,66,41,183,218,58,69,141,206,188,139,53, +46,111,158,76,191,55,222,228,166,252,144,35,30,85,51,155,82,129,57,30,38,75,228,7,143,74,141,70,132,104, +27,63,134,69,153,38,5,37,136,132,60,250,21,191,143,33,61,8,187,43,95,190,89,245,8,132,199,201,164,123, +128,24,188,211,250,80,78,155,125,198,242,238,223,57,170,7,168,44,19,75,57,177,42,143,143,255,121,119,53,21, +238,223,83,252,243,116,179,217,132,155,95,195,178,90,124,253,229,236,236,236,43,113,14,91,25,29,223,40,182,176, +68,139,8,130,165,132,134,181,92,144,210,134,7,91,227,119,217,182,5,189,118,163,29,38,60,20,221,96,185,191, +149,26,213,4,65,247,239,130,101,227,227,191,219,224,73,137,94,77,109,155,202,240,147,252,28,50,181,252,116,109, +84,244,2,243,154,91,99,254,65,58,70,13,218,48,241,90,170,135,202,92,207,134,43,168,139,208,160,186,30,212, +187,89,78,195,38,34,107,219,39,73,89,34,254,158,130,32,35,147,183,43,20,196,83,215,107,219,253,28,165,219, +254,120,146,68,178,31,170,204,111,166,45,227,49,199,96,111,207,31,11,75,226,38,239,254,255,241,110,75,22,155, +227,102,116,233,174,235,32,108,219,82,101,154,119,79,119,179,28,93,88,238,17,88,89,162,213,122,74,251,98,215, +34,32,34,251,28,249,216,137,128,7,4,167,211,103,157,117,67,162,130,61,194,225,169,83,223,83,223,9,11,75, +88,227,108,33,33,147,254,149,180,47,151,166,202,188,11,73,48,199,45,31,158,40,167,17,170,194,187,58,87,83, +58,95,152,235,249,255,232,212,149,88,91,231,255,77,220,96,205,26,185,224,17,4,47,162,2,244,232,226,208,169, +167,106,239,211,251,119,43,114,198,32,168,5,181,114,66,149,40,115,77,142,141,49,173,47,38,112,251,146,77,66, +82,112,195,25,203,67,148,12,50,178,168,116,93,119,1,101,52,197,185,114,237,132,205,51,4,190,238,119,159,35, +163,29,17,152,66,55,15,148,195,120,25,31,37,222,173,73,70,103,253,152,241,249,157,140,177,27,16,78,185,235, +223,179,4,39,69,195,232,158,201,137,171,106,178,252,233,73,103,93,97,211,85,154,63,229,27,199,102,103,85,228, +7,44,177,132,4,208,69,227,238,50,24,141,50,72,102,73,95,106,62,201,135,46,232,91,130,19,63,137,232,176, +164,188,19,154,94,107,104,53,13,2,215,8,3,90,126,252,195,129,160,168,206,82,134,40,129,251,126,246,207,68, +23,105,140,220,73,207,68,197,68,180,168,220,214,23,185,59,248,15,224,146,206,1,21,211,56,246,23,85,172,133, +161,2,185,251,215,78,153,14,111,233,241,150,80,13,25,187,17,250,224,223,92,186,107,108,216,152,21,167,243,125, +87,104,9,162,228,255,223,73,158,37,83,32,152,190,139,90,214,68,163,109,47,69,217,249,182,244,54,77,155,93, +37,200,143,23,239,18,72,38,34,137,171,227,75,194,11,40,245,140,164,128,114,43,249,162,47,41,247,99,189,59, +34,221,115,34,5,172,238,25,214,121,20,61,197,190,123,135,165,71,88,122,6,166,150,4,209,182,71,2,143,230, +183,248,73,197,38,213,179,89,11,215,145,142,40,79,170,255,103,239,91,212,218,184,157,71,95,5,246,159,47,223, +234,160,16,147,244,186,238,198,31,1,210,208,18,72,3,9,109,93,126,116,177,101,216,198,104,233,174,76,66,193, +111,112,94,224,124,183,243,138,231,17,206,204,232,186,182,236,146,252,239,151,94,240,174,52,146,70,163,209,104,102, +36,205,138,192,157,233,201,188,105,253,125,134,185,209,207,16,218,174,196,94,30,124,47,13,69,43,57,80,177,211, +154,243,48,15,215,186,180,140,121,140,43,166,119,99,42,28,24,218,2,170,241,135,23,200,132,111,144,173,242,116, +181,132,76,200,96,36,229,78,211,43,61,88,125,121,2,245,226,118,194,128,123,167,196,220,142,22,149,238,245,43, +216,199,215,77,213,235,163,178,110,180,186,104,247,230,235,112,245,204,180,87,194,148,172,160,220,4,105,213,42,200, +75,220,5,43,90,100,248,168,253,216,123,68,188,143,65,198,219,216,25,4,210,93,149,150,210,236,243,142,35,152, +209,249,151,59,146,128,147,137,212,184,9,7,130,43,218,133,42,225,193,237,181,4,157,122,165,123,75,251,216,249, +45,238,243,171,60,129,159,173,100,13,56,21,143,6,8,14,218,120,3,13,212,89,124,103,212,161,152,42,54,229, +96,1,95,151,195,22,176,169,158,215,221,128,17,103,117,253,187,59,183,247,9,206,17,116,236,33,20,143,129,122, +253,214,33,81,79,9,50,110,70,59,120,231,108,11,92,72,36,63,240,9,77,117,45,46,15,153,173,109,114,214, +42,43,237,246,67,215,156,95,137,74,141,110,60,57,196,26,26,186,34,207,174,12,14,22,240,13,198,81,250,233, +65,21,40,132,121,112,200,193,31,170,88,183,52,38,179,97,221,14,79,232,55,3,17,44,242,137,118,31,115,133, +3,43,178,89,45,202,239,27,233,45,106,69,54,108,151,244,248,138,158,7,184,23,143,19,154,100,36,166,151,121, +21,74,16,119,32,160,140,249,84,118,234,186,170,73,108,55,66,81,106,186,24,142,54,117,180,227,110,104,197,119, +213,178,206,183,80,20,99,117,243,169,169,64,33,122,59,13,106,24,88,203,160,34,19,171,50,146,124,194,110,129, +48,83,117,81,87,31,192,225,48,229,50,239,240,11,111,160,59,84,253,112,249,9,210,149,198,136,68,238,208,94, +56,251,180,154,235,196,6,203,246,108,106,102,31,140,156,112,16,209,45,71,242,176,228,34,37,88,201,184,103,85, +32,13,100,142,245,234,175,81,16,174,109,244,240,40,251,214,156,105,30,69,43,61,197,36,198,166,173,254,193,152, +15,68,124,94,184,202,244,163,64,47,164,111,230,194,50,127,188,98,235,4,189,210,103,34,244,241,138,14,109,68, +34,237,182,249,49,127,199,95,240,151,144,246,7,2,124,143,127,126,208,190,98,254,220,184,79,30,56,45,139,255, +168,57,144,255,149,59,117,192,159,58,251,211,107,70,192,17,244,147,30,115,193,95,194,90,201,176,13,106,179,206, +143,33,7,210,82,250,197,89,144,65,163,0,12,63,83,183,135,41,158,145,205,238,44,116,124,209,125,133,2,239, +178,239,129,171,48,169,47,78,188,216,252,37,56,136,244,50,223,224,63,165,67,193,67,23,253,79,118,237,213,136, +252,153,110,131,52,125,66,187,78,245,186,202,5,95,37,207,178,221,137,237,203,30,138,207,108,40,140,103,158,43, +198,231,206,147,16,158,251,61,250,107,53,121,248,229,18,50,84,170,0,129,46,234,67,210,212,186,15,213,106,212, +55,78,78,232,97,224,103,226,45,170,120,38,53,63,230,171,199,235,19,208,146,224,111,190,170,169,87,229,199,113, +113,218,93,144,158,183,5,12,169,92,186,151,72,125,51,29,77,229,101,238,50,144,218,163,114,172,68,221,210,83, +195,131,55,131,41,35,202,149,184,29,82,223,196,224,86,5,118,24,224,108,59,176,242,85,90,146,210,58,162,81, +162,182,7,96,169,219,177,47,227,190,78,104,139,234,243,7,21,137,208,93,167,114,237,115,250,155,219,193,90,205, +45,12,208,30,26,232,144,10,205,87,211,213,129,102,168,129,113,29,230,57,153,70,113,244,160,144,193,139,134,79, +107,81,158,167,126,77,197,44,71,61,101,221,85,165,37,209,72,208,160,191,228,50,216,223,175,215,203,92,114,98, +127,63,133,235,80,185,255,121,190,210,47,238,89,105,188,66,33,90,115,227,75,46,3,3,100,254,132,159,192,101, +174,31,30,107,80,194,50,208,203,252,43,254,115,164,112,212,6,73,69,138,14,67,62,175,28,136,84,43,61,44, +67,40,103,165,168,52,10,236,242,177,16,148,49,90,181,221,125,145,184,227,141,107,32,172,39,169,8,59,46,69, +168,75,105,82,126,237,79,109,2,22,68,73,197,122,244,244,46,23,41,84,10,180,84,198,96,19,156,210,89,38, +91,195,94,155,122,29,73,191,137,147,116,69,0,146,42,64,168,18,94,114,28,91,237,160,47,244,110,154,197,240, +91,135,33,244,42,135,134,236,57,27,68,194,28,127,193,133,64,209,182,214,49,110,98,135,234,19,208,180,133,108, +41,172,104,158,52,98,91,156,77,206,223,105,221,106,38,33,5,58,206,110,107,14,68,170,209,21,6,183,141,13, +154,246,52,183,189,182,162,72,172,95,155,253,73,220,18,38,110,189,180,186,136,81,99,148,254,213,163,65,0,232, +106,194,223,188,223,225,157,19,166,103,115,242,58,89,147,48,111,215,146,71,248,176,113,178,182,102,39,97,187,103, +19,209,58,63,40,242,63,64,12,150,35,224,34,82,153,16,248,53,250,241,80,214,145,49,238,38,157,21,49,141, +96,124,62,245,52,76,133,69,209,40,42,64,195,48,213,248,8,36,23,198,64,199,247,182,118,122,172,109,209,31, +30,62,252,1,181,71,42,81,183,32,158,63,124,248,28,126,249,182,89,32,85,158,30,27,3,25,155,234,162,67, +254,93,158,231,199,189,84,217,118,143,67,4,226,210,146,68,33,20,245,210,17,123,132,28,254,189,17,147,2,184, +220,206,35,198,178,84,205,209,69,205,209,196,98,192,24,127,151,31,79,185,213,12,90,61,122,240,240,225,3,171, +143,75,221,149,46,44,127,52,211,0,35,250,109,185,223,211,13,96,144,63,180,216,66,153,246,130,220,145,181,128, +203,22,141,218,148,229,101,129,85,191,168,139,75,220,86,72,95,44,202,100,224,217,21,44,157,160,214,74,173,44, +161,78,105,104,243,18,233,96,72,3,88,124,31,146,236,29,227,158,72,150,122,83,70,157,215,3,171,7,116,16, +116,31,231,153,140,120,120,136,251,162,156,119,145,211,223,37,235,45,205,181,187,59,96,53,17,58,136,226,13,81, +101,216,11,59,84,83,164,134,231,214,218,113,43,164,255,248,240,225,143,218,227,192,157,70,215,26,203,191,30,62, +252,203,141,37,175,205,104,226,169,82,51,154,245,82,58,99,175,27,68,219,224,172,0,231,92,81,211,84,208,210, +22,216,195,206,165,154,176,99,83,106,178,16,49,207,70,116,240,131,235,15,34,56,236,27,90,120,131,177,40,106, +115,12,25,55,214,10,16,129,131,66,14,196,184,93,21,42,234,254,192,50,205,219,58,15,18,36,223,232,116,88, +23,139,167,42,143,98,147,202,112,21,106,66,161,207,237,156,136,244,76,154,129,27,56,194,224,234,121,28,30,145, +63,13,235,234,106,96,252,155,206,192,141,90,43,212,42,204,28,97,38,28,74,99,243,136,14,136,25,22,106,57, +167,0,20,175,141,180,60,143,195,86,197,145,78,168,30,29,142,81,83,68,18,175,115,77,228,80,140,74,41,134, +222,145,118,62,174,206,138,241,17,168,89,61,255,152,197,32,63,148,18,14,27,245,244,79,182,184,46,83,79,20, +162,17,227,81,15,255,100,183,83,207,39,23,34,80,43,69,243,138,238,76,185,11,7,206,157,96,174,124,116,227, +199,101,156,110,225,117,173,148,42,69,21,18,188,78,141,2,6,67,64,97,1,251,40,56,78,186,218,111,129,135, +19,199,55,169,228,206,95,196,140,153,244,194,212,183,126,6,61,55,96,164,46,27,4,241,240,75,237,92,228,6, +0,27,13,170,154,118,165,55,6,115,229,159,205,78,102,112,53,75,239,75,172,107,210,185,179,135,146,39,158,52, +9,191,69,245,66,95,11,227,186,0,250,177,240,242,80,100,250,43,171,192,106,72,116,50,28,124,144,182,234,109, +161,111,252,85,53,113,83,119,81,251,138,215,88,178,87,103,183,66,162,71,165,56,27,35,6,28,18,179,136,186, +5,78,170,233,84,203,60,226,191,107,193,111,4,63,20,216,213,107,145,31,10,30,111,9,224,22,118,245,26,86, +129,134,14,234,29,86,147,122,32,14,245,197,65,49,204,41,231,141,40,6,106,31,230,254,181,192,4,120,29,222, +144,61,135,111,111,247,95,111,190,57,220,124,190,183,115,250,195,225,193,254,233,193,243,31,118,182,142,48,103,123, +231,197,230,219,189,163,211,55,59,91,7,251,251,144,120,186,187,127,180,243,230,221,230,222,233,171,195,56,192,222, +238,171,93,42,123,120,176,245,227,14,20,56,56,125,189,187,255,253,233,214,193,246,206,76,242,230,209,203,121,64, +215,66,88,253,206,187,157,253,163,211,195,131,183,111,182,118,78,15,94,31,237,30,236,83,243,59,175,94,31,253, +98,114,95,110,238,111,239,237,188,9,209,114,160,70,82,69,114,192,99,18,175,199,100,45,71,225,246,67,169,46, +182,252,61,187,108,117,131,11,28,132,38,91,80,235,148,47,233,241,147,47,197,83,62,79,163,228,113,83,193,142, +147,90,47,171,199,189,157,221,131,252,233,67,85,23,178,193,1,206,63,136,51,157,155,240,5,68,79,158,36,124, +201,80,61,233,240,191,29,105,131,87,156,81,144,80,233,77,155,175,80,9,106,243,25,250,13,250,55,88,199,238, +254,225,209,230,254,209,238,230,209,206,118,254,104,227,36,79,218,105,9,204,6,132,52,136,64,63,242,14,0,249, +87,11,112,240,122,103,63,199,242,248,224,74,237,29,28,98,145,39,144,110,158,195,44,104,242,169,201,193,150,230, +38,71,76,52,203,226,186,60,47,20,250,36,147,0,22,183,31,93,22,202,173,33,248,54,151,76,196,213,153,198, +96,105,246,194,1,213,16,187,92,5,165,147,82,6,235,144,209,80,188,210,181,225,46,109,94,138,60,92,55,206, +196,39,223,175,220,137,21,209,247,125,193,164,215,216,104,39,209,106,106,170,243,190,25,91,168,166,140,185,66,64, +57,209,175,79,224,73,193,143,47,230,186,225,111,3,180,141,86,145,147,161,150,226,230,14,240,212,198,99,72,216, +120,172,64,139,22,218,149,185,154,135,7,250,69,219,83,159,7,221,59,48,21,187,4,191,193,144,251,18,180,213, +81,231,18,90,195,71,139,32,224,143,106,143,36,207,75,79,106,191,64,38,91,38,63,227,170,183,170,82,95,23, +71,101,127,181,206,118,68,59,49,176,208,83,223,211,37,219,16,146,159,18,238,222,201,51,44,97,31,160,184,161, +147,48,201,43,113,89,165,201,90,42,194,100,84,165,36,252,178,181,132,37,188,118,203,170,99,65,215,8,26,233, +168,208,142,232,97,154,238,11,15,172,143,175,50,40,243,122,82,139,249,114,33,236,61,156,123,174,179,59,98,150, +78,38,197,156,25,83,70,183,222,18,218,209,219,157,183,90,133,185,103,163,127,17,127,124,166,59,66,169,240,131, +169,199,145,211,95,51,76,91,80,106,75,164,194,180,241,62,62,233,15,111,46,207,42,56,132,163,127,81,119,8, +159,211,164,70,98,224,227,135,162,30,158,226,38,29,244,226,233,183,27,27,126,18,126,32,118,12,238,166,59,69, +236,76,144,91,223,41,74,67,49,22,10,148,29,141,43,170,20,248,164,55,112,153,87,160,30,60,208,200,229,239, +5,87,214,113,174,184,90,54,186,202,14,173,106,115,205,11,141,249,27,49,250,27,222,209,58,242,155,5,35,105, +182,152,245,222,234,121,122,142,122,214,101,113,149,42,116,243,31,129,80,130,151,236,141,224,70,247,194,199,1,90, +112,89,204,101,219,195,226,70,237,207,58,83,94,201,241,77,54,239,205,70,40,84,117,55,2,43,129,209,206,76, +178,101,118,189,214,177,104,98,201,139,87,46,128,220,21,29,124,201,206,167,124,87,243,149,232,210,223,124,126,135, +139,52,110,117,33,36,11,246,186,114,213,45,243,50,216,235,42,205,94,87,69,191,33,69,116,245,192,138,186,1, +137,127,185,162,29,108,137,127,25,167,50,90,175,220,21,174,97,205,146,175,69,108,243,98,211,128,121,122,89,75, +12,57,223,120,197,109,210,82,147,55,98,35,132,245,164,164,155,186,106,204,180,113,215,132,53,243,10,198,16,32, +104,239,53,174,135,173,119,101,106,49,53,8,234,63,253,213,45,189,71,86,137,122,239,93,95,201,149,33,130,195, +6,113,34,184,147,52,247,111,195,87,229,122,139,37,124,95,148,169,25,55,120,219,151,168,40,149,138,12,77,73, +183,237,229,202,203,54,222,31,69,234,246,202,38,121,135,211,163,210,56,155,228,51,122,11,206,13,4,86,52,214, +139,85,59,142,214,206,136,194,252,164,34,220,154,23,173,139,196,158,129,170,180,210,102,31,58,52,209,139,204,136, +197,219,196,145,206,156,4,48,244,12,183,73,151,11,114,140,48,189,17,90,147,155,85,154,55,101,177,195,83,31, +149,147,91,85,91,240,236,21,127,221,36,188,178,98,169,242,136,111,59,26,77,2,194,84,154,44,113,223,143,167, +206,160,107,104,242,198,252,164,180,43,190,138,241,17,188,191,9,185,221,112,227,107,24,215,215,180,12,240,244,227, +252,154,135,85,198,246,114,205,246,98,77,74,67,87,79,246,122,29,121,5,254,210,109,11,248,181,126,66,179,33, +6,35,169,93,70,188,196,67,211,65,189,48,30,48,24,37,18,66,34,210,186,223,85,175,74,39,44,155,164,232, +99,210,233,3,170,106,18,150,68,210,63,122,132,21,79,232,165,214,139,39,242,131,117,135,7,73,93,194,128,238, +73,131,54,141,188,239,153,213,61,29,176,41,81,148,244,185,58,216,244,131,10,178,218,243,40,30,142,165,110,86, +87,232,198,86,225,238,48,72,143,41,47,114,34,60,249,98,169,229,9,222,202,47,238,238,226,149,134,184,225,233, +5,205,151,3,62,128,193,9,199,102,249,1,9,203,61,56,12,237,114,118,173,12,199,211,121,64,16,131,240,133, +16,49,163,189,48,122,207,176,188,78,152,225,130,0,121,205,136,237,180,124,83,184,118,112,66,34,157,169,199,175, +217,180,61,245,53,183,152,137,237,78,58,193,222,59,104,157,103,197,224,189,211,23,42,60,206,224,78,138,51,222, +119,192,84,88,175,198,254,12,8,227,213,137,94,89,142,163,187,173,107,180,129,129,226,27,208,69,33,88,173,107, +141,4,189,140,94,153,186,22,197,248,160,6,58,66,235,9,157,15,141,228,65,13,160,245,98,21,77,249,151,96, +180,126,162,76,153,116,101,87,27,23,93,233,78,34,117,153,212,60,148,210,130,142,88,124,135,56,232,219,171,93, +129,130,0,144,122,114,50,13,108,155,119,225,70,225,61,207,249,8,187,141,53,229,177,248,31,47,2,81,139,53, +114,196,184,236,170,191,229,183,189,212,80,125,204,240,79,110,222,74,231,121,47,81,26,149,218,110,138,87,151,34, +137,233,116,190,162,187,154,84,154,42,187,181,71,219,179,13,238,111,12,103,146,251,211,106,120,46,33,184,59,156, +205,157,204,240,160,238,24,6,52,176,30,148,33,9,24,46,111,65,37,92,126,90,53,62,12,207,114,84,204,41, +166,217,100,127,166,233,217,179,103,27,124,67,55,18,84,106,78,55,237,165,167,233,59,193,111,205,152,102,42,28, +93,148,179,52,32,44,131,191,139,169,238,71,255,101,107,3,246,52,125,1,85,67,45,153,224,101,166,166,222,155, +73,173,20,165,20,245,174,28,85,184,253,58,77,183,163,43,71,225,120,100,142,175,96,45,80,26,199,26,102,122, +133,188,155,10,215,6,78,31,216,192,116,165,237,169,202,150,140,155,159,116,189,180,214,227,82,49,126,12,13,112, +193,107,232,127,149,226,250,209,147,105,201,178,146,228,242,246,82,161,24,95,125,49,54,88,113,213,117,186,183,23, +43,93,209,150,10,201,25,250,68,90,137,36,80,20,165,212,120,73,217,71,191,113,170,123,87,226,129,113,221,26, +174,14,41,58,40,184,193,164,191,193,59,230,217,71,50,242,40,180,123,20,185,148,149,47,204,127,213,158,203,118, +201,164,101,93,35,19,81,158,73,98,30,211,94,53,26,169,118,15,232,143,127,142,13,41,244,154,130,246,227,87, +157,141,206,83,254,189,200,31,255,35,237,101,197,96,0,233,119,197,184,60,151,151,244,4,158,229,114,112,135,167, +136,199,208,210,221,160,184,186,27,140,203,171,180,183,250,186,80,23,111,217,221,160,26,87,245,221,176,186,44,101, +1,5,70,192,240,119,163,113,85,13,239,70,21,188,159,143,111,174,46,0,26,238,5,94,84,117,249,215,29,236, +7,157,139,187,177,80,74,212,119,208,206,133,42,229,249,221,101,81,191,23,53,192,189,188,59,190,131,90,43,24, +60,106,240,170,40,161,150,171,170,148,8,223,92,20,87,226,174,81,213,21,252,169,203,247,2,213,192,201,249,5, +190,85,239,197,29,206,72,168,4,238,106,144,187,18,239,106,223,33,149,168,46,120,42,7,213,144,126,85,115,119, +125,119,77,241,234,224,167,86,119,31,48,102,216,135,186,36,108,62,66,29,91,140,245,55,31,253,122,242,152,255, +16,39,181,139,18,247,92,228,243,186,126,186,108,116,146,134,30,146,188,157,145,178,222,99,160,223,221,224,66,220, +213,197,240,113,153,5,175,143,75,166,35,25,8,22,172,76,15,156,113,50,103,11,190,39,91,16,41,178,101,195, +58,38,40,200,80,240,240,248,46,155,196,149,161,71,170,217,76,4,167,31,103,219,249,248,73,245,92,44,241,23, +160,51,183,159,204,95,164,77,120,178,240,222,234,108,158,158,121,201,73,220,248,140,239,109,4,56,113,45,217,71, +229,249,100,249,78,10,45,254,125,240,30,31,110,190,216,57,77,214,4,104,125,77,8,168,22,181,134,5,99,205, +32,203,217,103,218,92,65,249,175,247,106,104,158,255,37,114,125,181,62,60,83,136,86,75,112,194,79,180,241,91, +215,187,183,207,39,103,80,111,112,206,111,22,204,69,109,163,234,197,112,106,26,138,112,51,160,65,39,62,255,18, +144,70,10,154,168,155,178,81,249,159,130,227,136,98,55,139,243,2,11,29,170,10,150,232,97,254,139,206,217,158, +105,36,255,9,211,37,128,154,40,15,185,208,2,237,87,193,127,22,249,253,135,1,227,135,22,77,3,43,140,80, +54,92,91,215,252,70,13,54,26,104,105,21,72,116,185,118,99,225,58,148,46,81,193,62,65,62,27,110,193,45, +37,116,15,171,70,206,149,26,124,144,227,69,169,238,15,64,166,246,5,44,120,151,149,222,212,195,119,21,222,194, +194,76,51,8,239,236,29,37,105,47,122,14,64,49,11,115,93,137,235,57,80,185,78,105,189,50,55,153,153,143, +68,129,133,140,77,58,232,13,64,4,100,143,43,57,172,38,64,94,144,227,131,247,143,75,45,85,74,134,197,33, +235,108,76,233,0,247,143,74,14,46,240,170,94,138,66,164,168,69,113,87,202,171,137,98,174,204,154,98,80,247, +115,145,74,162,174,169,130,128,116,249,17,200,200,230,65,187,13,147,90,74,13,114,54,158,212,113,136,202,214,146, +110,202,242,238,168,46,238,142,170,201,157,214,24,119,229,213,29,73,16,246,56,40,89,182,195,147,224,37,143,239, +69,152,239,131,126,160,108,239,60,250,246,228,241,57,79,30,61,120,152,176,153,162,230,114,36,122,155,236,177,3, +198,17,25,234,93,128,48,0,204,53,204,107,186,54,147,122,114,152,232,42,9,211,121,57,152,153,73,67,1,83, +145,243,240,224,200,37,140,115,121,53,6,6,106,95,154,171,253,45,53,243,8,26,145,244,26,81,92,228,89,51, +73,183,33,134,192,205,171,185,41,239,149,222,240,120,156,246,123,181,144,66,26,96,169,144,11,255,153,104,248,126, +246,16,35,95,247,18,196,178,54,84,158,183,178,9,109,147,146,215,92,106,177,176,154,155,7,29,250,53,253,89, +172,251,141,242,60,113,89,52,143,200,142,157,45,81,235,183,48,149,45,216,37,175,121,80,33,72,49,198,166,194, +123,206,255,16,92,0,49,133,114,254,127,165,125,228,117,119,254,220,155,2,72,133,144,252,87,19,174,80,23,193, +101,82,47,155,122,255,103,27,252,91,184,51,39,234,204,157,79,5,225,88,24,131,52,234,236,254,21,235,147,230, +84,101,139,132,211,208,216,173,85,80,230,148,14,90,104,147,51,244,248,85,1,208,234,42,208,43,232,112,14,93, +246,144,165,135,52,197,122,111,237,249,14,172,213,159,203,200,130,82,131,118,253,70,157,217,179,136,240,213,78,128, +204,196,1,59,239,44,40,172,184,121,71,182,129,177,105,33,3,183,125,156,219,163,80,241,253,5,65,151,131,198, +75,115,27,149,95,121,138,157,82,251,34,52,240,70,45,148,124,250,80,185,69,172,15,126,185,83,117,162,207,3, +169,252,231,224,8,142,106,121,255,80,158,228,191,164,183,23,25,94,11,144,252,58,83,104,146,86,121,141,238,159, +11,94,194,195,134,219,95,109,159,66,174,116,204,190,106,253,58,87,28,36,57,190,115,168,17,8,81,98,141,21, +106,26,188,79,198,197,9,48,93,236,176,174,41,134,149,180,10,114,209,130,142,131,97,253,186,137,19,119,248,4, +120,121,210,8,114,201,101,191,112,120,220,29,102,3,129,15,111,4,236,104,3,79,255,132,47,59,163,145,24,168, +236,87,124,222,43,110,96,57,48,41,63,83,25,244,31,96,211,38,241,74,97,234,17,170,253,37,38,103,67,74, +216,214,241,144,135,36,58,178,17,165,29,222,200,193,206,71,37,106,89,140,15,21,250,31,46,20,12,105,81,171, +160,248,169,210,8,141,50,33,168,189,75,152,236,164,182,188,44,228,112,44,50,69,201,184,21,154,73,122,220,50, +62,179,172,166,87,59,19,43,193,91,231,137,179,82,112,52,77,177,145,100,227,235,245,206,250,147,132,219,93,164, +236,72,112,109,36,103,15,4,191,184,25,214,72,164,31,5,55,174,104,167,53,111,106,207,204,64,113,237,38,124, +93,213,170,24,103,47,5,111,185,13,179,83,253,238,176,121,101,222,95,20,104,251,220,100,53,84,48,174,164,131, +47,109,133,216,243,33,135,99,123,231,148,126,197,203,6,208,47,135,22,176,82,28,132,224,112,251,224,21,33,50, +81,220,225,150,93,112,220,188,245,239,251,130,95,34,157,14,4,55,219,151,88,251,7,120,27,131,11,1,135,35, +27,43,232,98,67,170,240,233,25,73,54,99,78,55,89,161,248,161,170,203,129,122,133,13,53,240,54,105,174,4, +12,127,246,81,184,103,10,210,189,45,248,24,124,253,217,43,193,79,79,15,119,182,222,236,152,67,37,251,155,123, +135,167,219,7,167,251,7,71,167,111,15,225,52,205,155,211,95,14,222,158,30,239,238,237,157,62,223,57,125,177, +251,102,103,59,147,106,106,34,118,223,168,252,66,164,70,216,143,106,33,64,239,141,139,126,152,145,100,69,216,192, +196,225,56,134,244,240,116,156,39,205,253,59,247,89,157,138,143,175,103,136,56,195,120,6,137,114,152,99,16,179, +50,103,215,115,236,208,26,219,112,216,67,190,142,112,149,25,65,199,49,110,58,68,166,232,146,105,177,132,155,62, +105,174,198,133,72,91,58,209,181,192,231,128,200,176,168,99,219,199,230,142,0,70,37,1,65,238,67,82,234,75, +42,199,243,183,4,65,247,143,164,134,43,82,205,110,131,43,207,248,206,209,151,157,10,18,182,232,209,14,111,140, +80,150,209,98,167,39,83,47,115,227,130,45,46,95,227,114,216,11,192,80,122,123,201,233,5,125,92,242,206,139, +237,57,233,56,229,198,133,165,170,67,178,214,142,138,115,123,20,49,49,71,19,167,204,24,204,135,228,80,184,196, +191,221,213,191,247,2,44,57,224,136,94,197,70,168,99,113,118,72,199,221,154,28,79,156,20,192,7,65,146,38, +42,159,207,129,246,35,53,56,132,244,102,16,234,133,115,37,215,47,138,38,56,19,10,160,204,156,214,152,135,237, +43,19,131,35,60,67,21,129,99,127,223,12,222,49,88,220,142,132,13,145,244,82,105,26,159,17,141,119,136,198, +113,178,238,168,133,116,133,114,232,115,125,123,165,171,222,61,120,13,35,154,67,162,118,237,255,132,223,146,120,93, +212,197,101,131,137,176,11,209,8,11,249,182,30,27,130,19,26,231,42,63,20,221,24,80,251,134,156,155,136,224, +228,164,79,144,220,125,104,26,99,55,10,156,147,194,219,133,255,72,9,162,135,32,61,150,102,191,61,254,237,49, +235,81,80,76,7,4,73,15,40,197,198,66,79,236,45,171,58,87,189,4,74,38,25,252,77,56,152,175,143,19, +102,51,165,123,58,87,51,7,46,41,118,76,66,174,108,123,62,56,117,216,26,76,245,89,111,10,72,132,93,211, +222,43,240,190,50,22,54,89,229,115,112,85,13,72,101,14,199,88,62,203,146,100,190,51,14,255,120,193,139,170, +81,120,104,199,1,84,203,58,232,116,97,30,29,234,182,178,173,7,217,156,136,64,54,179,247,102,30,255,214,75, +251,191,125,56,89,203,233,47,243,163,88,231,30,115,195,147,66,170,186,20,77,170,112,232,80,52,165,105,116,123, +29,133,37,140,92,160,68,139,53,95,153,228,73,158,176,128,40,15,19,148,177,73,98,195,159,118,248,163,13,54, +207,11,158,46,178,7,101,178,164,23,212,194,166,241,105,16,181,57,102,168,129,196,141,31,231,101,220,140,81,3, +21,162,195,28,102,93,244,250,29,14,80,228,224,46,244,203,29,132,219,167,57,126,240,47,39,71,15,39,103,232, +7,59,19,117,147,219,176,165,62,45,167,192,176,225,59,202,167,118,153,243,118,37,129,36,32,92,37,6,36,154, +131,114,168,215,206,53,223,225,179,149,51,200,237,105,191,203,168,174,46,83,58,51,154,201,233,28,224,156,103,81, +118,77,165,54,16,58,242,147,192,64,232,110,212,100,79,63,102,82,111,80,63,235,76,249,108,111,219,27,160,88, +3,85,115,119,135,123,97,135,66,113,124,195,50,24,13,135,59,242,45,171,192,108,168,99,129,200,16,204,137,72, +212,36,102,86,4,225,22,30,172,47,178,206,40,166,150,172,34,74,47,26,7,106,145,223,100,127,201,34,177,175, +52,202,223,211,81,100,125,160,27,210,138,6,181,146,221,198,173,76,33,23,108,169,252,82,241,247,42,63,80,221, +24,236,252,97,140,85,92,128,195,251,40,30,54,239,152,51,70,56,2,58,238,67,2,19,63,138,88,72,203,180, +3,24,204,145,155,161,136,130,172,45,53,171,18,48,231,22,250,160,114,116,82,208,209,82,192,189,60,151,119,119, +115,115,23,161,12,53,231,96,68,112,243,148,203,124,131,215,115,161,88,186,242,187,186,43,215,214,252,33,67,26, +71,15,135,65,110,76,253,126,203,166,61,198,230,50,56,175,208,39,41,250,21,178,106,21,108,149,78,249,135,133, +55,111,226,140,112,182,132,17,206,40,142,27,120,22,77,56,232,246,196,127,163,64,73,224,71,168,8,240,93,5, +28,210,141,192,59,2,197,131,175,243,113,78,162,120,175,104,212,43,209,52,197,185,224,141,78,242,183,9,108,239, +220,9,108,18,20,86,118,147,151,24,134,247,77,68,166,179,180,100,140,183,113,64,207,104,37,47,117,99,109,7, +160,171,191,146,26,25,96,137,72,98,26,15,204,225,32,205,197,73,116,253,175,230,249,108,114,74,158,48,58,219, +64,27,203,227,89,4,121,173,81,132,1,146,11,241,59,128,76,135,156,75,161,197,216,166,229,120,89,239,72,249, +107,25,250,14,133,109,183,225,21,227,147,200,0,57,118,135,178,241,203,13,51,19,55,0,233,5,147,102,154,165, +48,44,187,17,97,192,176,49,135,122,243,190,188,218,36,16,198,177,223,96,51,55,225,192,56,118,193,61,163,176, +199,91,8,232,137,224,146,160,200,92,207,245,21,16,22,54,75,7,216,97,103,179,146,82,12,64,24,45,204,130, +250,52,14,69,110,238,142,3,199,121,232,218,194,109,42,37,46,175,84,3,115,179,21,104,255,72,45,186,142,211, +173,108,45,223,21,189,210,170,143,193,197,206,80,129,112,176,96,207,214,41,234,11,22,155,73,4,27,167,132,132, +216,76,122,19,196,102,233,245,31,150,133,4,117,68,192,189,69,162,81,60,43,45,240,192,201,188,200,132,13,48, +211,171,214,93,215,146,25,181,178,180,204,136,140,199,139,124,113,16,71,83,33,114,136,192,37,193,131,14,52,8, +134,34,11,241,51,129,133,230,146,0,158,127,58,107,3,163,221,143,249,62,40,252,15,116,34,104,230,118,128,30, +17,184,155,251,21,175,69,209,160,93,189,41,87,8,253,149,106,64,37,135,43,120,171,12,118,85,69,216,88,182, +226,116,89,168,230,67,209,108,1,245,100,6,119,103,216,98,222,22,235,3,194,0,64,66,126,80,245,205,129,37, +70,234,25,46,141,115,79,156,151,151,115,15,241,50,251,103,48,112,113,95,6,46,122,197,191,22,3,47,35,2, +251,52,214,14,121,58,44,216,68,6,14,244,127,16,195,41,240,126,26,140,32,135,205,79,170,213,153,18,3,54, +53,215,5,72,225,222,188,151,194,178,249,159,64,97,217,252,68,133,229,245,18,133,229,181,85,64,14,201,135,18, +85,91,246,72,83,253,72,106,203,91,212,87,249,43,84,100,186,11,203,206,175,206,68,139,191,213,74,42,212,74, +94,69,181,146,122,70,43,89,172,147,164,29,64,114,198,174,98,169,90,112,189,25,184,250,10,159,27,240,0,198, +149,25,159,127,127,189,38,44,20,87,113,226,16,78,219,153,85,241,200,83,170,167,137,154,35,68,212,36,0,114, +58,213,224,95,158,62,70,150,47,203,69,218,204,168,165,233,199,152,20,70,1,109,140,176,61,21,243,25,242,79, +67,217,196,185,64,221,39,130,95,84,141,137,66,197,53,154,202,105,52,50,58,138,203,23,4,140,114,244,113,177, +114,19,148,222,194,157,2,183,244,84,189,5,43,68,188,4,45,24,62,203,165,182,150,144,58,138,255,242,213,164, +238,213,132,255,242,213,36,86,111,100,97,185,7,84,122,79,18,79,105,223,54,62,61,188,97,240,249,147,32,78, +228,188,195,99,248,57,99,99,73,230,210,217,225,44,143,37,147,126,94,169,147,255,66,115,219,40,62,203,114,161, +45,254,241,243,20,194,207,151,39,155,10,255,67,215,217,191,140,154,40,231,212,196,123,137,43,28,147,207,235,188, +211,85,252,144,122,77,111,86,123,169,0,106,129,39,234,112,201,122,126,104,111,226,28,212,63,84,165,156,119,59, +109,211,98,126,76,139,249,59,149,159,41,254,66,229,160,33,188,36,71,84,180,120,212,37,129,81,122,181,87,234, +120,49,45,106,55,136,194,231,31,232,33,54,14,43,44,29,94,250,239,5,30,172,160,210,149,178,89,145,149,90, +105,108,229,168,88,5,197,18,150,221,179,160,254,68,153,199,140,22,156,208,90,237,58,95,232,118,116,57,234,165, +241,244,124,89,111,117,183,124,114,170,248,50,112,221,27,87,125,8,237,182,82,26,198,133,77,92,128,42,151,233, +113,192,195,97,204,8,198,11,212,182,94,44,208,225,88,186,160,70,192,132,79,48,214,216,61,218,142,103,172,215, +14,31,179,11,58,206,111,219,234,78,86,241,214,76,204,36,247,130,33,171,121,91,28,103,3,159,144,149,211,174, +115,156,191,84,109,199,53,75,149,115,30,197,29,56,237,235,131,84,197,156,247,154,233,201,187,74,185,115,174,121, +193,116,172,10,50,193,99,164,65,231,116,185,72,101,43,163,42,155,156,151,148,50,166,110,213,233,113,92,193,226, +165,19,61,254,67,110,24,84,60,117,170,87,28,83,56,107,135,52,227,53,151,188,192,125,63,63,236,255,246,236, +190,148,155,87,29,98,243,158,112,87,241,202,168,40,199,32,59,84,181,114,38,86,72,210,161,64,240,28,243,110, +206,31,203,124,143,249,223,114,233,148,215,188,116,224,40,33,205,253,23,178,64,191,15,45,208,15,69,137,119,68, +238,230,109,37,31,28,42,149,20,189,27,4,255,101,217,8,198,130,229,155,156,194,254,0,162,13,212,86,164,53, +125,163,18,222,131,120,109,37,252,153,6,39,16,67,104,34,214,82,240,194,237,72,119,197,250,176,146,162,87,165, +194,158,118,77,85,110,158,185,10,153,90,246,20,141,233,204,237,105,129,85,51,123,177,154,8,84,164,105,157,215, +198,162,21,156,62,111,202,152,238,5,35,5,136,255,16,16,238,28,71,165,80,213,12,233,52,134,193,103,249,199, +197,153,24,103,29,222,224,65,157,246,180,222,120,88,193,38,170,97,147,42,216,72,197,231,41,7,202,208,189,193, +234,10,127,166,54,179,204,111,17,167,108,146,118,24,167,178,240,184,193,184,206,134,231,39,108,26,49,6,221,53, +154,180,236,235,199,245,82,233,30,156,228,241,187,2,56,95,187,193,104,149,243,226,105,50,159,84,82,223,100,192, +253,120,140,212,204,128,239,45,213,112,57,44,198,36,129,87,196,71,49,152,224,21,162,117,115,89,160,59,232,218, +136,228,228,223,32,147,252,201,195,18,168,213,171,215,77,71,205,27,53,3,236,9,16,54,11,35,61,152,15,6, +48,222,97,153,102,69,72,93,5,32,155,195,75,32,50,99,196,72,204,210,189,219,124,40,145,249,48,178,117,133, +164,202,251,186,89,94,105,230,58,97,28,95,217,237,160,104,4,108,78,210,207,70,86,229,101,87,95,133,165,132, +47,50,83,225,96,157,134,127,109,205,234,70,216,40,199,38,81,211,211,192,95,102,30,170,206,9,160,204,161,13, +60,85,7,68,153,8,13,246,117,86,230,131,117,224,5,125,17,151,15,214,129,66,230,197,131,218,131,101,168,15, +33,73,224,63,13,200,236,93,222,14,16,167,95,153,55,136,234,132,183,217,192,160,42,233,2,224,19,243,196,160, +131,121,199,85,139,242,246,105,110,129,40,184,49,226,249,172,162,119,124,252,174,234,63,197,82,166,43,212,13,255, +97,167,175,92,89,147,255,29,114,184,135,198,55,238,104,136,37,170,16,244,73,0,138,111,28,233,96,46,184,150, +204,20,194,12,44,180,148,66,216,149,220,6,224,231,3,230,131,198,3,201,191,226,19,60,209,208,153,130,146,11, +0,55,183,50,175,224,13,176,249,242,97,233,39,106,233,39,170,27,84,224,68,76,54,177,132,205,0,119,96,205, +234,151,80,41,8,177,69,46,177,63,150,168,208,127,144,5,53,115,122,231,57,121,188,92,86,252,232,195,247,42, +53,152,180,127,188,8,156,251,100,195,15,74,123,241,210,240,74,171,153,13,149,166,189,99,122,93,36,246,73,147, +94,255,41,127,114,146,245,191,224,34,101,39,93,51,59,236,66,2,115,175,33,227,159,3,216,83,147,253,36,147, +185,224,166,137,252,169,78,124,106,203,212,185,138,58,233,122,105,135,63,159,63,194,196,82,201,50,201,251,79,184, +47,246,167,63,47,67,165,34,231,104,88,90,199,11,176,172,198,16,128,254,2,233,131,127,145,147,29,46,22,220, +113,141,184,212,102,128,99,57,209,241,69,161,10,45,125,196,102,110,195,187,94,97,172,111,225,195,135,37,78,45, +197,195,82,184,36,198,34,161,182,119,0,235,246,29,189,246,69,198,85,188,211,99,78,17,161,96,77,245,151,122, +185,142,139,62,229,46,52,73,62,223,165,105,250,192,28,136,251,241,94,158,240,31,255,19,120,194,127,92,228,9, +231,127,253,143,174,245,121,186,214,159,255,163,107,253,143,174,245,63,186,214,255,232,90,159,174,107,241,95,2,217, +81,94,162,187,205,92,168,14,229,71,120,247,45,140,218,220,19,217,173,29,90,177,80,113,187,92,188,192,211,218, +246,147,202,47,5,126,18,97,246,204,29,255,85,229,55,138,255,76,127,133,68,247,167,130,191,138,75,153,131,54, +88,195,93,7,133,43,36,175,36,30,204,10,235,137,122,65,231,142,253,10,57,27,60,151,113,7,66,209,49,243, +213,142,141,12,157,34,62,88,189,118,131,209,201,2,123,73,206,92,145,227,131,57,168,219,41,158,63,26,32,76, +1,63,0,51,246,48,120,181,129,165,105,91,252,86,40,99,44,193,49,38,173,86,221,210,138,190,150,106,120,35, +28,19,185,32,136,237,52,136,216,0,88,224,58,204,27,223,56,184,229,108,39,78,163,169,163,153,212,16,79,218, +0,108,231,163,220,191,154,73,194,216,97,23,209,202,175,103,82,81,207,241,159,35,33,146,223,228,141,77,9,207, +103,244,93,234,73,47,124,201,204,38,153,48,183,209,101,79,200,184,231,41,11,51,102,195,247,242,195,188,173,8, +211,16,232,75,252,229,232,38,13,51,237,151,245,46,93,103,220,189,31,22,61,10,222,109,51,32,114,23,23,114, +161,47,254,212,118,110,193,254,4,174,47,254,88,176,131,142,159,13,14,125,184,144,33,228,236,206,85,15,157,167, +149,140,157,100,115,85,243,235,232,137,182,83,159,42,228,16,213,165,76,129,80,113,169,38,192,18,186,53,145,37, +206,238,65,175,8,165,46,211,246,88,208,134,28,213,121,9,149,238,44,175,212,233,227,200,68,215,237,173,132,187, +187,127,198,32,244,28,64,102,7,227,194,243,237,169,127,252,124,242,186,250,176,139,181,180,22,67,88,112,196,60, +152,166,137,211,186,29,89,244,173,170,57,129,51,59,111,108,160,197,26,3,251,85,64,121,62,136,104,98,127,221, +219,112,198,67,141,166,208,159,115,166,243,216,153,206,227,152,233,140,166,112,195,193,72,134,78,72,105,44,121,244, +230,95,207,219,204,142,72,99,107,59,15,218,145,70,96,186,116,96,53,89,119,23,7,99,252,177,82,154,131,27, +124,242,57,165,139,200,193,134,174,51,207,82,248,143,162,228,242,38,228,11,137,23,80,2,81,150,163,109,202,140, +49,77,26,31,141,188,146,243,59,125,200,4,190,50,62,225,215,124,64,31,53,191,100,12,140,123,111,146,91,125, +216,130,250,206,233,190,5,60,235,159,131,56,169,20,90,132,136,138,102,7,254,229,97,13,200,38,21,50,204,189, +235,41,205,167,168,166,1,255,109,192,47,26,117,195,96,187,62,160,168,179,180,230,40,42,102,40,170,230,40,42, +231,119,89,184,34,218,184,11,234,135,28,229,200,210,233,114,19,149,156,161,168,51,113,224,58,11,2,86,92,34, +119,233,38,111,160,177,91,148,151,118,111,226,146,227,219,15,77,37,109,202,25,31,135,123,23,244,22,230,143,185, +23,234,217,13,63,15,206,253,103,59,83,123,219,120,32,115,146,169,249,51,225,238,41,233,207,14,67,210,173,134, +169,242,87,133,186,0,230,174,48,76,230,99,31,199,25,141,120,24,17,252,161,80,160,248,96,99,129,114,97,4, +13,157,76,197,86,242,103,169,88,223,63,216,223,201,147,132,139,245,195,35,208,75,242,4,239,213,54,248,190,183, +187,191,3,239,24,44,139,222,159,191,217,217,252,241,224,237,81,158,144,182,92,77,20,166,126,191,249,106,231,224, +197,222,238,11,168,229,188,184,4,121,59,46,71,2,115,182,118,223,108,237,65,234,160,172,7,99,157,178,7,183, +140,32,97,12,157,166,247,183,135,71,7,175,32,97,210,168,234,18,83,222,190,222,222,60,130,50,19,186,159,75, +88,28,108,110,99,60,253,4,3,216,96,108,30,142,206,131,137,212,159,205,44,100,158,156,110,168,230,171,206,205, +215,27,9,31,7,175,157,132,55,210,70,143,227,167,250,241,24,16,199,215,145,204,65,197,134,63,222,54,189,146, +169,136,220,7,0,222,36,123,114,98,62,143,171,63,135,59,233,97,140,159,201,73,86,192,31,122,178,27,173,104, +41,103,130,83,64,141,172,224,239,197,13,237,167,142,178,1,135,176,21,164,130,192,131,253,61,203,58,240,87,216, +215,161,214,254,49,109,96,211,46,244,67,240,245,82,15,116,157,61,122,52,148,220,134,186,207,74,124,196,111,184, +84,211,5,223,98,17,116,57,65,248,112,79,244,149,78,215,193,1,115,75,57,246,12,128,169,131,3,248,227,152, +76,135,85,130,138,204,3,44,11,60,8,14,118,65,83,135,208,189,197,126,43,94,202,119,165,248,144,201,105,75, +70,91,239,150,107,80,244,192,61,39,48,20,19,26,228,162,185,168,198,67,94,229,184,130,142,139,27,94,98,122, +13,138,194,187,178,41,207,202,113,169,110,248,0,210,234,170,82,175,192,53,85,74,62,49,175,188,32,216,242,252, +92,212,7,114,32,248,56,151,180,70,243,6,30,74,89,226,199,50,118,9,43,80,167,165,139,111,106,146,70,185, +196,93,95,138,118,196,33,118,149,209,130,175,242,33,90,6,23,240,3,150,193,117,46,240,84,236,13,100,223,154, +14,174,174,54,28,111,25,222,248,111,239,29,230,55,88,230,50,191,129,50,129,210,60,106,7,215,32,98,8,10, +102,60,6,249,100,125,9,11,34,131,207,88,61,56,15,92,82,13,73,214,239,234,147,237,49,104,58,253,210,8, +170,242,224,172,17,245,181,168,3,117,221,30,36,213,183,235,240,10,59,206,184,173,113,9,40,191,129,82,193,101, +245,180,230,183,101,227,234,3,48,96,115,144,28,232,181,21,188,12,218,121,83,192,223,44,145,147,203,51,81,123, +70,12,6,185,23,60,195,124,80,229,165,128,159,179,185,230,179,170,93,177,78,194,1,39,84,27,10,67,18,218, +61,83,236,77,57,207,117,177,152,102,51,223,234,105,170,26,186,59,255,193,49,229,10,56,170,209,247,116,24,133, +157,143,2,170,181,4,130,195,165,9,34,74,81,191,122,20,144,22,95,89,47,61,149,232,149,77,37,3,185,61, +146,107,249,6,135,20,140,66,41,65,72,185,59,238,41,99,12,51,206,49,131,177,44,233,36,25,182,107,110,194, +98,243,30,116,170,239,49,55,26,92,49,226,43,235,63,231,149,147,137,37,61,197,120,162,221,15,181,236,28,40, +250,66,218,140,128,199,146,230,191,185,230,132,199,28,111,60,163,152,222,93,49,59,187,45,99,230,57,53,65,25, +99,148,95,193,91,94,90,69,5,104,90,233,254,174,107,54,100,120,169,41,190,174,139,180,36,91,196,44,238,2, +216,58,47,61,15,54,48,20,237,176,91,194,103,178,94,240,146,245,131,151,187,187,206,9,210,253,182,28,102,138, +87,134,148,89,201,77,128,77,228,79,222,232,193,69,7,135,51,249,167,184,58,15,0,131,114,200,39,240,99,139, +242,2,94,108,97,144,97,133,9,214,138,94,101,247,245,117,226,30,76,43,168,98,193,81,26,187,111,41,79,108, +101,169,104,77,141,177,85,125,198,46,204,150,162,15,121,35,181,199,254,171,131,133,189,55,42,176,174,137,244,181, +105,208,130,46,177,2,224,4,131,172,219,179,188,12,187,105,10,14,232,132,229,21,159,137,97,122,233,164,166,50, +50,83,162,24,243,106,161,123,36,120,46,231,152,12,66,84,99,195,40,132,133,21,120,80,197,45,206,171,108,194, +253,178,144,13,184,31,176,154,207,112,25,140,15,173,47,56,56,167,45,26,65,237,80,57,125,230,181,205,13,53, +235,213,193,116,131,58,175,248,132,15,240,238,32,135,21,152,87,102,90,158,229,134,53,85,126,184,78,157,100,214, +192,183,76,218,109,47,3,87,16,186,250,140,226,148,67,36,230,203,37,11,11,34,117,197,207,168,201,198,52,183, +147,247,47,248,225,186,46,195,77,139,142,81,118,232,11,36,59,184,26,237,24,24,120,219,192,55,2,132,151,39, +240,50,77,111,61,177,214,191,253,22,27,170,161,71,176,204,173,110,48,156,237,78,11,5,63,30,201,244,116,85, +144,183,11,197,17,175,115,253,162,165,97,42,72,109,173,73,234,25,104,201,50,193,88,120,121,234,80,168,61,52, +222,253,115,122,75,92,153,81,32,38,53,105,136,57,76,54,168,190,117,249,17,161,131,87,244,210,215,206,110,186, +146,58,64,58,55,10,136,139,199,150,253,126,250,109,245,241,155,247,195,206,202,131,91,217,75,74,249,232,26,8, +145,100,73,50,133,20,129,76,140,97,98,134,189,196,62,81,222,239,220,134,182,203,124,221,190,214,196,212,10,26, +104,37,95,235,232,180,111,175,178,20,53,246,10,233,54,245,233,123,162,184,22,97,150,175,58,164,28,113,189,35, +53,106,108,68,145,109,164,179,116,131,186,12,153,39,1,50,219,213,7,169,219,44,241,246,22,52,220,9,113,218, +193,63,58,31,212,1,4,153,222,175,195,79,87,96,97,51,163,63,56,233,37,197,128,206,138,102,120,55,26,235, +32,1,139,255,234,110,92,203,28,140,14,172,240,108,162,84,37,219,117,126,108,206,199,147,43,80,219,215,215,215, +69,72,21,243,136,60,112,227,106,184,44,74,57,131,211,198,87,95,220,140,255,188,130,142,187,194,125,4,213,139, +77,28,26,219,11,155,210,193,113,161,37,44,56,170,42,32,76,188,220,70,171,156,134,156,178,19,227,38,63,36, +67,228,73,117,85,60,61,223,72,188,145,113,41,83,163,27,247,5,87,56,171,58,24,160,135,215,118,130,245,43, +94,226,115,31,136,128,171,179,150,56,79,190,252,138,157,184,41,133,198,161,98,12,128,193,66,89,4,140,161,151, +211,14,2,129,140,64,160,137,36,91,143,161,14,44,210,20,71,219,84,230,39,244,198,87,188,206,177,54,129,123, +41,152,27,114,97,77,170,78,23,255,208,46,60,199,63,121,173,237,163,177,80,43,248,209,252,242,187,111,186,37, +238,75,155,52,145,151,93,241,157,124,84,62,218,232,138,32,157,246,134,190,83,221,1,164,85,184,149,246,191,228, +154,224,2,254,166,27,95,62,42,1,113,159,170,83,76,150,152,203,18,152,85,58,145,2,195,144,86,28,193,128, +198,213,172,221,126,26,90,225,163,105,254,147,74,127,127,112,59,23,205,4,4,135,139,240,146,96,224,149,132,99, +68,21,54,253,208,252,206,111,209,17,73,1,105,103,110,177,208,28,130,228,185,11,20,217,134,75,244,23,63,178, +167,226,41,15,111,67,98,141,222,95,32,128,240,144,231,6,199,111,47,152,41,199,236,86,163,212,71,62,181,55, +46,185,172,134,34,201,198,54,238,9,109,224,52,48,252,172,47,215,49,239,132,5,251,140,32,2,71,213,114,104, +174,82,52,171,20,81,134,241,242,126,188,41,17,69,88,163,39,169,126,98,83,189,25,2,90,249,148,182,35,36, +56,160,144,183,198,130,56,11,84,48,217,171,159,61,237,129,143,112,13,254,255,46,239,244,224,184,204,163,13,174, +80,184,159,206,186,147,111,169,203,89,66,136,137,132,15,203,90,79,243,12,228,122,141,145,196,65,12,141,197,72, +37,228,151,187,176,94,149,69,21,9,20,59,10,96,193,178,187,237,31,138,248,110,196,73,150,108,233,65,36,87, +132,131,243,238,37,128,192,251,39,46,47,244,98,153,10,198,85,19,43,173,253,92,0,112,84,223,224,9,90,199, +47,14,50,186,9,130,37,222,74,237,238,86,37,29,184,157,246,71,110,137,24,129,133,50,143,101,15,196,219,141, +228,183,70,222,69,133,252,88,46,95,4,14,131,252,254,53,79,128,126,201,9,169,38,90,26,98,161,43,40,16, +214,81,64,13,56,183,178,228,159,30,147,123,180,170,3,57,154,216,36,90,51,88,246,249,72,6,73,23,80,131, +93,204,179,2,168,97,4,33,71,174,204,6,220,173,171,89,195,173,254,65,115,239,34,77,160,8,250,155,166,60, +80,53,40,111,146,106,41,137,234,225,146,46,247,99,40,23,114,110,125,26,211,40,223,90,167,67,38,156,204,85, +185,59,30,125,132,26,163,153,161,221,113,138,91,13,41,77,118,40,137,63,20,43,220,132,13,47,102,154,208,167, +251,221,118,174,37,129,167,252,176,46,62,0,217,121,28,152,92,131,30,90,251,8,23,131,163,231,48,4,71,23, +226,98,112,231,88,244,37,156,135,113,113,33,239,119,12,138,161,3,114,5,156,11,232,130,92,92,148,28,147,97, +49,242,80,46,43,128,126,203,16,30,29,152,75,192,201,173,25,194,107,255,38,170,7,84,230,90,210,88,99,100, +109,90,49,96,28,77,8,245,71,52,158,44,36,53,136,199,162,89,49,254,58,95,199,114,182,138,52,50,68,253, +162,61,89,74,91,65,150,140,138,71,77,53,6,227,2,30,180,72,125,100,132,39,54,23,173,173,243,73,181,161, +72,198,234,238,217,129,34,119,19,245,225,67,61,171,150,246,238,54,13,230,12,234,49,139,63,157,164,35,146,179, +174,14,83,158,39,160,41,137,4,67,69,99,101,41,131,39,27,234,28,117,77,237,230,32,23,138,176,158,5,45, +90,187,86,43,114,14,8,11,176,142,85,54,206,216,195,248,139,198,217,242,2,50,80,20,139,186,91,210,30,239, +102,131,162,231,237,155,61,92,228,74,104,25,221,220,121,234,149,46,161,157,52,151,120,73,89,113,133,126,146,166, +30,228,88,186,1,134,224,34,82,70,82,153,131,209,168,129,174,11,185,85,200,235,162,161,210,232,65,48,225,45, +211,228,9,94,205,208,200,75,244,149,160,12,208,13,9,222,129,127,177,64,187,147,193,14,53,214,68,192,136,127, +234,192,241,234,23,115,168,247,79,124,144,124,210,13,107,210,5,236,25,198,114,45,255,130,185,65,211,121,253,242, +100,205,62,173,109,4,207,79,78,190,203,159,126,131,250,65,167,43,172,131,99,154,106,105,76,234,108,165,181,16, +176,80,201,53,198,24,73,72,162,1,206,79,146,247,2,57,16,183,117,240,31,150,178,233,189,120,24,199,243,17, +157,184,89,52,35,16,139,136,98,100,213,112,180,140,209,7,135,8,209,61,196,228,158,45,171,186,104,46,168,205, +229,130,35,97,247,235,200,184,186,186,186,121,4,235,225,251,101,149,34,67,221,179,70,88,204,209,93,16,206,236, +251,175,242,39,244,31,252,75,238,18,153,39,162,254,226,227,199,235,78,96,49,237,200,212,243,147,16,198,23,223, +87,92,58,147,169,190,183,193,228,172,171,147,192,120,58,241,54,82,103,198,88,104,66,99,225,244,63,156,177,128, +122,135,158,247,194,59,206,194,139,236,152,103,55,90,186,78,76,57,96,242,144,194,252,168,198,227,163,42,189,85, +213,85,214,225,40,246,51,3,171,60,172,119,93,153,18,199,229,80,93,240,51,113,81,92,151,128,77,210,92,86, +149,50,172,250,4,220,11,221,95,77,251,20,89,205,110,105,180,47,225,22,140,143,83,187,79,49,74,89,87,91, +140,157,174,149,99,193,196,170,250,226,4,134,10,108,72,46,158,229,149,247,81,138,28,91,147,169,151,85,97,192, +67,201,191,232,116,156,109,24,230,212,140,83,245,109,148,106,131,210,200,184,254,212,137,173,119,248,95,192,46,56, +117,118,193,233,103,219,5,103,159,98,23,12,63,221,46,8,69,5,238,202,221,207,26,104,161,101,185,163,55,11, +100,4,204,70,194,177,49,225,75,168,158,49,21,230,172,130,26,154,174,90,162,196,87,218,86,178,47,104,97,15, +105,97,219,251,34,89,174,155,209,42,86,210,210,101,195,148,56,23,160,196,45,38,70,39,31,82,197,62,99,209, +64,92,99,72,125,25,34,165,214,54,8,182,185,42,100,171,99,9,140,135,37,231,137,149,216,60,36,150,8,137, +21,154,80,212,37,9,189,147,48,139,250,198,131,121,98,189,198,98,93,251,118,25,247,142,141,89,219,92,98,191, +35,230,151,174,87,154,81,145,129,147,89,155,101,153,164,114,83,174,16,91,70,220,19,231,132,167,33,183,109,145, +162,184,130,155,87,234,2,80,88,41,62,8,124,89,93,249,127,255,247,255,252,239,100,153,161,183,170,238,167,166, +150,169,62,119,225,142,82,247,140,46,67,136,247,133,63,84,125,194,50,157,181,220,189,55,74,151,17,144,24,231, +158,170,198,213,120,210,44,84,10,102,85,58,253,42,209,216,170,152,193,115,32,83,201,191,209,27,161,216,203,223, +59,31,31,220,18,90,32,93,161,203,127,84,37,180,158,192,242,16,236,86,110,124,197,0,245,33,136,160,90,165, +79,120,210,129,101,243,119,198,172,208,85,11,213,248,2,148,87,10,40,177,169,160,38,112,40,227,218,139,167,51, +120,66,108,137,58,238,99,88,147,75,80,212,47,16,9,149,79,212,232,209,55,60,89,19,18,195,91,188,125,179, +235,34,197,167,191,55,106,152,101,250,27,112,223,133,207,165,84,207,158,173,140,106,152,56,205,74,14,155,4,115, +20,246,145,160,147,199,231,237,208,208,39,152,48,13,83,126,235,99,210,45,116,178,251,155,252,77,66,237,43,184, +131,6,53,235,38,214,241,13,150,50,157,69,159,42,135,188,14,190,143,86,82,2,125,6,27,93,191,201,219,223, +228,10,252,51,139,234,202,89,169,16,207,67,210,122,201,196,120,126,163,68,147,234,234,251,84,227,9,214,175,203, +195,88,174,164,216,84,73,205,192,207,119,88,133,195,99,5,125,185,26,20,91,52,255,232,218,145,248,175,203,143, +98,188,169,118,113,106,167,37,167,178,253,18,27,32,224,169,105,199,227,3,128,117,106,179,9,155,181,53,135,13, +246,81,247,249,89,78,116,153,111,218,147,196,181,128,63,180,135,151,226,82,15,233,200,64,124,150,55,220,71,176, +120,82,200,242,82,171,110,131,171,171,132,64,213,205,216,125,131,62,79,100,37,69,194,29,231,157,85,195,155,214, +183,70,21,148,113,246,162,141,96,112,95,99,194,33,178,112,174,53,139,156,157,147,43,221,3,109,211,52,110,157, +211,190,172,202,205,60,152,137,34,156,137,110,18,254,221,108,100,124,163,163,69,198,125,165,134,70,201,169,255,85, +112,71,36,210,53,137,170,224,189,234,133,141,37,213,75,240,227,142,73,150,224,168,36,218,209,134,130,246,30,26, +131,54,43,246,82,0,37,45,180,189,233,50,167,193,195,122,57,27,250,253,159,40,168,251,221,29,46,128,53,41, +162,42,90,206,233,150,70,223,53,64,24,25,131,14,30,219,72,7,105,130,208,218,177,0,53,114,52,93,16,222, +128,107,30,250,187,18,140,233,37,221,153,85,255,191,183,235,220,118,16,5,194,255,243,20,108,191,13,91,146,91, +228,110,239,229,5,246,39,81,188,113,215,118,148,180,195,241,221,151,1,68,217,152,108,223,63,41,56,192,148,111, +6,25,199,131,170,26,255,186,138,75,169,104,16,25,62,45,112,97,143,110,226,229,23,167,239,83,169,52,128,251, +45,89,44,94,125,125,10,221,39,11,112,158,87,5,255,79,22,158,173,157,19,198,21,226,183,54,79,73,35,101, +129,10,159,229,186,57,162,40,104,142,100,203,32,157,19,135,65,240,1,249,101,215,113,9,82,60,220,152,37,242, +131,181,68,29,27,138,115,206,202,206,52,245,118,252,80,188,209,38,14,97,164,97,162,172,96,199,254,179,146,165, +57,69,55,37,61,226,3,236,47,98,180,122,146,84,183,98,194,218,192,77,8,220,4,164,212,15,249,131,190,191, +19,155,250,136,101,216,128,171,155,26,142,127,197,178,165,143,161,22,64,96,60,60,144,11,98,20,122,107,146,73, +126,113,70,203,188,56,197,223,177,98,207,120,158,208,135,207,219,156,22,15,29,173,58,220,177,54,207,52,25,196, +162,56,124,108,142,250,239,65,139,191,10,198,233,173,146,2,2,16,124,107,161,36,9,171,243,80,227,247,94,54, +207,233,115,100,134,58,85,124,203,186,188,139,33,202,16,88,166,176,14,139,208,27,178,137,165,156,236,39,246,102, +10,20,28,93,107,165,192,207,126,203,203,226,1,34,211,195,123,210,172,98,158,106,134,189,94,167,155,173,26,193, +10,83,33,89,217,123,246,209,165,80,236,41,83,14,118,29,73,35,86,18,35,96,150,101,90,18,123,210,106,188, +131,151,98,225,17,147,35,192,212,220,127,1,57,151,129,225,170,193,74,53,197,133,55,60,244,23,77,109,206,21, +105,89,65,225,81,53,209,123,89,220,85,180,113,196,180,221,17,221,241,154,0,187,242,183,254,103,133,200,43,200, +108,227,13,164,131,141,210,19,90,36,55,203,71,201,26,186,67,123,218,222,76,96,119,123,107,84,161,169,214,209, +37,170,115,0,133,97,72,52,162,117,223,112,53,223,21,233,248,249,94,32,145,41,219,18,40,112,145,80,231,227, +137,42,166,21,121,203,110,84,140,173,123,16,230,108,93,172,22,28,3,81,59,208,242,29,157,3,163,21,159,244, +53,69,20,98,32,11,237,181,208,13,35,240,129,33,197,81,168,132,112,125,232,164,29,26,70,249,141,204,215,134, +89,123,235,82,128,236,187,178,58,35,26,209,237,32,107,138,103,203,65,100,1,161,13,51,175,53,7,149,182,239, +82,104,32,66,65,173,65,197,116,238,115,35,69,81,68,206,16,54,213,61,45,10,228,69,221,56,131,167,11,38, +132,59,150,113,168,145,44,166,153,156,220,238,124,223,125,119,16,22,243,186,113,253,74,97,241,138,187,92,243,5, +23,242,86,212,253,193,129,237,205,117,136,35,31,93,71,247,173,108,132,81,183,255,22,206,105,215,176,132,227,86, +213,153,122,79,107,105,254,222,51,197,36,98,84,231,204,108,65,184,126,166,155,97,194,192,129,16,130,229,229,114, +76,251,221,170,160,226,128,209,82,180,130,6,198,193,141,58,240,9,24,81,54,37,187,182,147,179,26,15,115,22, +146,167,32,176,44,199,6,19,227,172,234,23,120,196,207,55,120,41,141,56,146,110,225,100,108,97,253,243,169,247, +108,121,202,60,166,28,164,159,131,245,82,68,182,81,21,69,160,21,88,188,151,82,71,51,145,218,113,201,137,146, +188,113,177,0,163,77,24,69,84,204,197,83,173,122,123,92,55,182,188,170,38,125,53,101,73,173,204,94,97,190, +149,183,152,21,235,186,216,153,201,46,208,88,165,53,87,150,105,199,171,47,89,121,228,50,250,195,72,38,67,19, +192,218,189,55,234,61,147,208,118,150,231,51,181,15,100,161,152,46,71,234,77,130,35,42,105,149,82,56,124,205, +181,29,124,64,58,255,16,171,87,228,235,67,75,27,34,241,180,249,53,231,24,96,1,215,176,30,15,76,199,235, +93,178,37,246,194,49,6,39,215,150,92,187,76,59,158,239,90,216,5,131,118,116,69,135,48,186,18,18,48,90, +3,205,61,186,209,68,126,116,59,27,25,6,61,68,99,112,202,242,35,75,137,50,94,32,29,149,243,186,212,208, +115,148,1,98,128,191,78,227,243,60,148,135,41,150,127,229,206,230,31,223,192,216,105,87,226,106,127,8,23,18, +255,140,31,24,171,134,62,235,255,153,85,216,29,152,13,1,66,175,62,100,53,213,47,184,201,50,251,133,52,223, +163,60,253,88,237,39,62,121,245,229,95,125,65,117,208,116,178,35,47,139,79,22,191,1,135,213,7,155,167,208, +0,0}; void startGui(AsyncWebServerRequest *request) { diff --git a/src/websocket.cpp b/src/websocket.cpp index 450ffa8..8096411 100644 --- a/src/websocket.cpp +++ b/src/websocket.cpp @@ -107,7 +107,9 @@ void onWsEvent( else if (!strcmp(event, "rotate")) { bool isRight = (bool)!strcmp(wsRequest["direction"], "right"); - Screen.rotate(Screen.currentRotation + (90 * (isRight ? 1 : -1))); + + Screen.currentRotation = isRight ? (Screen.currentRotation > 3 ? 1 : Screen.currentRotation + 1) : (Screen.currentRotation <= 0 ? 3 : Screen.currentRotation - 1); + Screen.render(); } else if (!strcmp(event, "info"))