Commit e89882f9 authored by 董政锦's avatar 董政锦

feat: game4 PC端合并,(奖次排名数据渲染页面待做)

parent 298716ce
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
'@msgpack/msgpack':
specifier: ^3.1.3
version: 3.1.3
crypto-js:
specifier: ^4.2.0
version: 4.2.0
msgpack:
specifier: ^1.0.3
version: 1.0.3
socket.io-client:
specifier: ^4.8.3
version: 4.8.3
vue:
specifier: ^3.5.32
version: 3.5.35(typescript@6.0.3)
vue-router:
specifier: ^4.6.4
version: 4.6.4(vue@3.5.35(typescript@6.0.3))
devDependencies:
'@tsconfig/node24':
specifier: ^24.0.4
version: 24.0.4
'@types/node':
specifier: ^24.12.2
version: 24.12.4
'@vitejs/plugin-vue':
specifier: ^6.0.6
version: 6.0.7(vite@8.0.16(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3))
'@vue/tsconfig':
specifier: ^0.9.1
version: 0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))
npm-run-all2:
specifier: ^8.0.4
version: 8.0.4
typescript:
specifier: ~6.0.0
version: 6.0.3
vite:
specifier: ^8.0.8
version: 8.0.16(@types/node@24.12.4)
vite-plugin-vue-devtools:
specifier: ^8.1.1
version: 8.1.2(vite@8.0.16(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3))
vue-tsc:
specifier: ^3.2.6
version: 3.3.3(typescript@6.0.3)
packages:
'@babel/code-frame@7.29.7':
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
'@babel/compat-data@7.29.7':
resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==}
engines: {node: '>=6.9.0'}
'@babel/core@7.29.7':
resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.29.7':
resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.29.7':
resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.29.7':
resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==}
engines: {node: '>=6.9.0'}
'@babel/helper-create-class-features-plugin@7.29.7':
resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-globals@7.29.7':
resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==}
engines: {node: '>=6.9.0'}
'@babel/helper-member-expression-to-functions@7.29.7':
resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.29.7':
resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-transforms@7.29.7':
resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-optimise-call-expression@7.29.7':
resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==}
engines: {node: '>=6.9.0'}
'@babel/helper-plugin-utils@7.29.7':
resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==}
engines: {node: '>=6.9.0'}
'@babel/helper-replace-supers@7.29.7':
resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-skip-transparent-expression-wrappers@7.29.7':
resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.29.7':
resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.29.7':
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.29.7':
resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==}
engines: {node: '>=6.9.0'}
'@babel/helpers@7.29.7':
resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.7':
resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/plugin-proposal-decorators@7.29.7':
resolution: {integrity: sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-decorators@7.29.7':
resolution: {integrity: sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-import-attributes@7.29.7':
resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-import-meta@7.10.4':
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-jsx@7.29.7':
resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-typescript@7.29.7':
resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-transform-typescript@7.29.7':
resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/template@7.29.7':
resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
'@babel/traverse@7.29.7':
resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
engines: {node: '>=6.9.0'}
'@babel/types@7.29.7':
resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
engines: {node: '>=6.9.0'}
'@emnapi/core@1.10.0':
resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
'@emnapi/runtime@1.10.0':
resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
'@emnapi/wasi-threads@1.2.1':
resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@msgpack/msgpack@3.1.3':
resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==}
engines: {node: '>= 18'}
'@napi-rs/wasm-runtime@1.1.4':
resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
peerDependencies:
'@emnapi/core': ^1.7.1
'@emnapi/runtime': ^1.7.1
'@oxc-project/types@0.133.0':
resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==}
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
'@rolldown/binding-android-arm64@1.0.3':
resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@rolldown/binding-darwin-arm64@1.0.3':
resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.0.3':
resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
'@rolldown/binding-freebsd-x64@1.0.3':
resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.0.3':
resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.0.3':
resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.0.3':
resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-ppc64-gnu@1.0.3':
resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.0.3':
resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.0.3':
resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.0.3':
resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/binding-openharmony-arm64@1.0.3':
resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-wasm32-wasi@1.0.3':
resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
'@rolldown/binding-win32-arm64-msvc@1.0.3':
resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.0.3':
resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
'@rolldown/pluginutils@1.0.1':
resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
'@tsconfig/node24@24.0.4':
resolution: {integrity: sha512-2A933l5P5oCbv6qSxHs7ckKwobs8BDAe9SJ/Xr2Hy+nDlwmLE1GhFh/g/vXGRZWgxBg9nX/5piDtHR9Dkw/XuA==}
'@tybys/wasm-util@0.10.2':
resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
'@types/node@24.12.4':
resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==}
'@vitejs/plugin-vue@6.0.7':
resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
vue: ^3.2.25
'@volar/language-core@2.4.28':
resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
'@volar/source-map@2.4.28':
resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==}
'@volar/typescript@2.4.28':
resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==}
'@vue/babel-helper-vue-transform-on@1.5.0':
resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==}
'@vue/babel-plugin-jsx@1.5.0':
resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==}
peerDependencies:
'@babel/core': ^7.0.0-0
peerDependenciesMeta:
'@babel/core':
optional: true
'@vue/babel-plugin-resolve-type@1.5.0':
resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@vue/compiler-core@3.5.35':
resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==}
'@vue/compiler-dom@3.5.35':
resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==}
'@vue/compiler-sfc@3.5.35':
resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==}
'@vue/compiler-ssr@3.5.35':
resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/devtools-core@8.1.2':
resolution: {integrity: sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==}
peerDependencies:
vue: ^3.0.0
'@vue/devtools-kit@8.1.2':
resolution: {integrity: sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==}
'@vue/devtools-shared@8.1.2':
resolution: {integrity: sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==}
'@vue/language-core@3.3.3':
resolution: {integrity: sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ==}
'@vue/reactivity@3.5.35':
resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==}
'@vue/runtime-core@3.5.35':
resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==}
'@vue/runtime-dom@3.5.35':
resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==}
'@vue/server-renderer@3.5.35':
resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==}
peerDependencies:
vue: 3.5.35
'@vue/shared@3.5.35':
resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==}
'@vue/tsconfig@0.9.1':
resolution: {integrity: sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==}
peerDependencies:
typescript: '>= 5.8'
vue: ^3.4.0
peerDependenciesMeta:
typescript:
optional: true
vue:
optional: true
alien-signals@3.2.1:
resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==}
ansi-styles@6.2.3:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
ansis@4.3.1:
resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
engines: {node: '>=14'}
baseline-browser-mapping@2.10.33:
resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==}
engines: {node: '>=6.0.0'}
hasBin: true
birpc@2.9.0:
resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
birpc@4.0.0:
resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
browserslist@4.28.2:
resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
bundle-name@4.1.0:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
engines: {node: '>=18'}
caniuse-lite@1.0.30001793:
resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
default-browser-id@5.0.1:
resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
engines: {node: '>=18'}
default-browser@5.5.0:
resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
engines: {node: '>=18'}
define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
electron-to-chromium@1.5.366:
resolution: {integrity: sha512-OlRuhb688YTCzzU3gXPLn6nGyd+F+53INE1qaKKlu6kETErE8FYsyDh0XqXEU+uBRn0MpCzz2vfNwORhkap8qg==}
engine.io-client@6.6.5:
resolution: {integrity: sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==}
engine.io-parser@5.2.3:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'}
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
error-stack-parser-es@1.0.5:
resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
is-docker@3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
hasBin: true
is-in-ssh@1.0.0:
resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
engines: {node: '>=20'}
is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
hasBin: true
is-wsl@3.1.1:
resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
engines: {node: '>=16'}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
isexe@3.1.5:
resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
engines: {node: '>=18'}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
hasBin: true
json-parse-even-better-errors@4.0.0:
resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==}
engines: {node: ^18.17.0 || >=20.5.0}
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
lightningcss-android-arm64@1.32.0:
resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
lightningcss-darwin-arm64@1.32.0:
resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.32.0:
resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
lightningcss-freebsd-x64@1.32.0:
resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
lightningcss-linux-arm-gnueabihf@1.32.0:
resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
lightningcss-linux-arm64-gnu@1.32.0:
resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
lightningcss-linux-arm64-musl@1.32.0:
resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
lightningcss-linux-x64-gnu@1.32.0:
resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
lightningcss-linux-x64-musl@1.32.0:
resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
lightningcss-win32-arm64-msvc@1.32.0:
resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
lightningcss-win32-x64-msvc@1.32.0:
resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
lightningcss@1.32.0:
resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
engines: {node: '>= 12.0.0'}
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
engines: {node: '>= 0.10.0'}
mrmime@2.0.1:
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
msgpack@1.0.3:
resolution: {integrity: sha512-FX88+Pexuh+UItdqg68WhNPGPhqs57RlXAYyXNZ8eTQC/Tx5lzeIoxTxA2qAd7qU5a/crON5F0ADf4l6k2b7Jw==}
engines: {node: '>=0.12.7'}
hasBin: true
muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
nan@2.27.0:
resolution: {integrity: sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ==}
nanoid@3.3.12:
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
node-releases@2.0.47:
resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==}
engines: {node: '>=18'}
npm-normalize-package-bin@4.0.0:
resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
engines: {node: ^18.17.0 || >=20.5.0}
npm-run-all2@8.0.4:
resolution: {integrity: sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==}
engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'}
hasBin: true
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
open@11.0.0:
resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
engines: {node: '>=20'}
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
perfect-debounce@2.1.0:
resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@4.0.4:
resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
hasBin: true
postcss@8.5.15:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
powershell-utils@0.1.0:
resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
engines: {node: '>=20'}
read-package-json-fast@4.0.0:
resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==}
engines: {node: ^18.17.0 || >=20.5.0}
rolldown@1.0.3:
resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
run-applescript@7.1.0:
resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
engines: {node: '>=18'}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
shell-quote@1.8.4:
resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==}
engines: {node: '>= 0.4'}
sirv@3.0.2:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
engines: {node: '>=18'}
socket.io-client@4.8.3:
resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
engines: {node: '>=10.0.0'}
socket.io-parser@4.2.6:
resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==}
engines: {node: '>=10.0.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
tinyglobby@0.2.17:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
typescript@6.0.3:
resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
engines: {node: '>=14.17'}
hasBin: true
undici-types@7.16.0:
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
unplugin-utils@0.3.1:
resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
engines: {node: '>=20.19.0'}
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
vite-dev-rpc@2.0.0:
resolution: {integrity: sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0
vite-hot-client@2.2.0:
resolution: {integrity: sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==}
peerDependencies:
vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0
vite-plugin-inspect@11.4.1:
resolution: {integrity: sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': '*'
vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0
peerDependenciesMeta:
'@nuxt/kit':
optional: true
vite-plugin-vue-devtools@8.1.2:
resolution: {integrity: sha512-gt5h1CNryR9Hy0tvhSbqY3j0F7aj0pGxBxWLa1lXSiZVkhdWDf0vbCOZyjh8ivFGE6FDHTGy3zkcZGlMZdVHig==}
engines: {node: '>=v14.21.3'}
peerDependencies:
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
vite-plugin-vue-inspector@6.0.0:
resolution: {integrity: sha512-OpyITJLgZNibxlrik1EmRtvXHDjLRxNPsWkGFTERZs2LgMEdG4W0WoFt5GIgp3a3jRou+eJR8U1zOBk/XQgEbw==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
vite@8.0.16:
resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
'@vitejs/devtools': ^0.1.18
esbuild: ^0.27.0 || ^0.28.0
jiti: '>=1.21.0'
less: ^4.0.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
'@vitejs/devtools':
optional: true
esbuild:
optional: true
jiti:
optional: true
less:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
vue-router@4.6.4:
resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
peerDependencies:
vue: ^3.5.0
vue-tsc@3.3.3:
resolution: {integrity: sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
vue@3.5.35:
resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
which@5.0.0:
resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
engines: {node: ^18.17.0 || >=20.5.0}
hasBin: true
ws@8.20.1:
resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
wsl-utils@0.3.1:
resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
engines: {node: '>=20'}
xmlhttprequest-ssl@2.1.2:
resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines: {node: '>=0.4.0'}
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
snapshots:
'@babel/code-frame@7.29.7':
dependencies:
'@babel/helper-validator-identifier': 7.29.7
js-tokens: 4.0.0
picocolors: 1.1.1
'@babel/compat-data@7.29.7': {}
'@babel/core@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.7
'@babel/helper-compilation-targets': 7.29.7
'@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
'@babel/helpers': 7.29.7
'@babel/parser': 7.29.7
'@babel/template': 7.29.7
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
debug: 4.4.3
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/generator@7.29.7':
dependencies:
'@babel/parser': 7.29.7
'@babel/types': 7.29.7
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.29.7':
dependencies:
'@babel/types': 7.29.7
'@babel/helper-compilation-targets@7.29.7':
dependencies:
'@babel/compat-data': 7.29.7
'@babel/helper-validator-option': 7.29.7
browserslist: 4.28.2
lru-cache: 5.1.1
semver: 6.3.1
'@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-annotate-as-pure': 7.29.7
'@babel/helper-member-expression-to-functions': 7.29.7
'@babel/helper-optimise-call-expression': 7.29.7
'@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7)
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7
'@babel/traverse': 7.29.7
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/helper-globals@7.29.7': {}
'@babel/helper-member-expression-to-functions@7.29.7':
dependencies:
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.29.7':
dependencies:
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
'@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-module-imports': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
'@babel/traverse': 7.29.7
transitivePeerDependencies:
- supports-color
'@babel/helper-optimise-call-expression@7.29.7':
dependencies:
'@babel/types': 7.29.7
'@babel/helper-plugin-utils@7.29.7': {}
'@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-member-expression-to-functions': 7.29.7
'@babel/helper-optimise-call-expression': 7.29.7
'@babel/traverse': 7.29.7
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.29.7':
dependencies:
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.29.7': {}
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/helper-validator-option@7.29.7': {}
'@babel/helpers@7.29.7':
dependencies:
'@babel/template': 7.29.7
'@babel/types': 7.29.7
'@babel/parser@7.29.7':
dependencies:
'@babel/types': 7.29.7
'@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7)
transitivePeerDependencies:
- supports-color
'@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)':
dependencies:
'@babel/core': 7.29.7
'@babel/helper-annotate-as-pure': 7.29.7
'@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
'@babel/helper-plugin-utils': 7.29.7
'@babel/helper-skip-transparent-expression-wrappers': 7.29.7
'@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
transitivePeerDependencies:
- supports-color
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/parser': 7.29.7
'@babel/types': 7.29.7
'@babel/traverse@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.7
'@babel/helper-globals': 7.29.7
'@babel/parser': 7.29.7
'@babel/template': 7.29.7
'@babel/types': 7.29.7
debug: 4.4.3
transitivePeerDependencies:
- supports-color
'@babel/types@7.29.7':
dependencies:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
'@emnapi/core@1.10.0':
dependencies:
'@emnapi/wasi-threads': 1.2.1
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.10.0':
dependencies:
tslib: 2.8.1
optional: true
'@emnapi/wasi-threads@1.2.1':
dependencies:
tslib: 2.8.1
optional: true
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@msgpack/msgpack@3.1.3': {}
'@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
dependencies:
'@emnapi/core': 1.10.0
'@emnapi/runtime': 1.10.0
'@tybys/wasm-util': 0.10.2
optional: true
'@oxc-project/types@0.133.0': {}
'@polka/url@1.0.0-next.29': {}
'@rolldown/binding-android-arm64@1.0.3':
optional: true
'@rolldown/binding-darwin-arm64@1.0.3':
optional: true
'@rolldown/binding-darwin-x64@1.0.3':
optional: true
'@rolldown/binding-freebsd-x64@1.0.3':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.0.3':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.0.3':
optional: true
'@rolldown/binding-linux-arm64-musl@1.0.3':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.0.3':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.0.3':
optional: true
'@rolldown/binding-linux-x64-gnu@1.0.3':
optional: true
'@rolldown/binding-linux-x64-musl@1.0.3':
optional: true
'@rolldown/binding-openharmony-arm64@1.0.3':
optional: true
'@rolldown/binding-wasm32-wasi@1.0.3':
dependencies:
'@emnapi/core': 1.10.0
'@emnapi/runtime': 1.10.0
'@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
optional: true
'@rolldown/binding-win32-arm64-msvc@1.0.3':
optional: true
'@rolldown/binding-win32-x64-msvc@1.0.3':
optional: true
'@rolldown/pluginutils@1.0.1': {}
'@socket.io/component-emitter@3.1.2': {}
'@tsconfig/node24@24.0.4': {}
'@tybys/wasm-util@0.10.2':
dependencies:
tslib: 2.8.1
optional: true
'@types/node@24.12.4':
dependencies:
undici-types: 7.16.0
'@vitejs/plugin-vue@6.0.7(vite@8.0.16(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3))':
dependencies:
'@rolldown/pluginutils': 1.0.1
vite: 8.0.16(@types/node@24.12.4)
vue: 3.5.35(typescript@6.0.3)
'@volar/language-core@2.4.28':
dependencies:
'@volar/source-map': 2.4.28
'@volar/source-map@2.4.28': {}
'@volar/typescript@2.4.28':
dependencies:
'@volar/language-core': 2.4.28
path-browserify: 1.0.1
vscode-uri: 3.1.0
'@vue/babel-helper-vue-transform-on@1.5.0': {}
'@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.7)':
dependencies:
'@babel/helper-module-imports': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
'@babel/template': 7.29.7
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
'@vue/babel-helper-vue-transform-on': 1.5.0
'@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7)
'@vue/shared': 3.5.35
optionalDependencies:
'@babel/core': 7.29.7
transitivePeerDependencies:
- supports-color
'@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.7)':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/core': 7.29.7
'@babel/helper-module-imports': 7.29.7
'@babel/helper-plugin-utils': 7.29.7
'@babel/parser': 7.29.7
'@vue/compiler-sfc': 3.5.35
transitivePeerDependencies:
- supports-color
'@vue/compiler-core@3.5.35':
dependencies:
'@babel/parser': 7.29.7
'@vue/shared': 3.5.35
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.35':
dependencies:
'@vue/compiler-core': 3.5.35
'@vue/shared': 3.5.35
'@vue/compiler-sfc@3.5.35':
dependencies:
'@babel/parser': 7.29.7
'@vue/compiler-core': 3.5.35
'@vue/compiler-dom': 3.5.35
'@vue/compiler-ssr': 3.5.35
'@vue/shared': 3.5.35
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.15
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.35':
dependencies:
'@vue/compiler-dom': 3.5.35
'@vue/shared': 3.5.35
'@vue/devtools-api@6.6.4': {}
'@vue/devtools-core@8.1.2(vue@3.5.35(typescript@6.0.3))':
dependencies:
'@vue/devtools-kit': 8.1.2
'@vue/devtools-shared': 8.1.2
vue: 3.5.35(typescript@6.0.3)
'@vue/devtools-kit@8.1.2':
dependencies:
'@vue/devtools-shared': 8.1.2
birpc: 2.9.0
hookable: 5.5.3
perfect-debounce: 2.1.0
'@vue/devtools-shared@8.1.2': {}
'@vue/language-core@3.3.3':
dependencies:
'@volar/language-core': 2.4.28
'@vue/compiler-dom': 3.5.35
'@vue/shared': 3.5.35
alien-signals: 3.2.1
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.4
'@vue/reactivity@3.5.35':
dependencies:
'@vue/shared': 3.5.35
'@vue/runtime-core@3.5.35':
dependencies:
'@vue/reactivity': 3.5.35
'@vue/shared': 3.5.35
'@vue/runtime-dom@3.5.35':
dependencies:
'@vue/reactivity': 3.5.35
'@vue/runtime-core': 3.5.35
'@vue/shared': 3.5.35
csstype: 3.2.3
'@vue/server-renderer@3.5.35(vue@3.5.35(typescript@6.0.3))':
dependencies:
'@vue/compiler-ssr': 3.5.35
'@vue/shared': 3.5.35
vue: 3.5.35(typescript@6.0.3)
'@vue/shared@3.5.35': {}
'@vue/tsconfig@0.9.1(typescript@6.0.3)(vue@3.5.35(typescript@6.0.3))':
optionalDependencies:
typescript: 6.0.3
vue: 3.5.35(typescript@6.0.3)
alien-signals@3.2.1: {}
ansi-styles@6.2.3: {}
ansis@4.3.1: {}
baseline-browser-mapping@2.10.33: {}
birpc@2.9.0: {}
birpc@4.0.0: {}
browserslist@4.28.2:
dependencies:
baseline-browser-mapping: 2.10.33
caniuse-lite: 1.0.30001793
electron-to-chromium: 1.5.366
node-releases: 2.0.47
update-browserslist-db: 1.2.3(browserslist@4.28.2)
bundle-name@4.1.0:
dependencies:
run-applescript: 7.1.0
caniuse-lite@1.0.30001793: {}
convert-source-map@2.0.0: {}
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
crypto-js@4.2.0: {}
csstype@3.2.3: {}
debug@4.4.3:
dependencies:
ms: 2.1.3
default-browser-id@5.0.1: {}
default-browser@5.5.0:
dependencies:
bundle-name: 4.1.0
default-browser-id: 5.0.1
define-lazy-prop@3.0.0: {}
detect-libc@2.1.2: {}
electron-to-chromium@1.5.366: {}
engine.io-client@6.6.5:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
engine.io-parser: 5.2.3
ws: 8.20.1
xmlhttprequest-ssl: 2.1.2
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
engine.io-parser@5.2.3: {}
entities@7.0.1: {}
error-stack-parser-es@1.0.5: {}
escalade@3.2.0: {}
estree-walker@2.0.2: {}
fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
picomatch: 4.0.4
fsevents@2.3.3:
optional: true
gensync@1.0.0-beta.2: {}
hookable@5.5.3: {}
is-docker@3.0.0: {}
is-in-ssh@1.0.0: {}
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
is-wsl@3.1.1:
dependencies:
is-inside-container: 1.0.0
isexe@2.0.0: {}
isexe@3.1.5: {}
js-tokens@4.0.0: {}
jsesc@3.1.0: {}
json-parse-even-better-errors@4.0.0: {}
json5@2.2.3: {}
kolorist@1.8.0: {}
lightningcss-android-arm64@1.32.0:
optional: true
lightningcss-darwin-arm64@1.32.0:
optional: true
lightningcss-darwin-x64@1.32.0:
optional: true
lightningcss-freebsd-x64@1.32.0:
optional: true
lightningcss-linux-arm-gnueabihf@1.32.0:
optional: true
lightningcss-linux-arm64-gnu@1.32.0:
optional: true
lightningcss-linux-arm64-musl@1.32.0:
optional: true
lightningcss-linux-x64-gnu@1.32.0:
optional: true
lightningcss-linux-x64-musl@1.32.0:
optional: true
lightningcss-win32-arm64-msvc@1.32.0:
optional: true
lightningcss-win32-x64-msvc@1.32.0:
optional: true
lightningcss@1.32.0:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
lightningcss-android-arm64: 1.32.0
lightningcss-darwin-arm64: 1.32.0
lightningcss-darwin-x64: 1.32.0
lightningcss-freebsd-x64: 1.32.0
lightningcss-linux-arm-gnueabihf: 1.32.0
lightningcss-linux-arm64-gnu: 1.32.0
lightningcss-linux-arm64-musl: 1.32.0
lightningcss-linux-x64-gnu: 1.32.0
lightningcss-linux-x64-musl: 1.32.0
lightningcss-win32-arm64-msvc: 1.32.0
lightningcss-win32-x64-msvc: 1.32.0
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
memorystream@0.3.1: {}
mrmime@2.0.1: {}
ms@2.1.3: {}
msgpack@1.0.3:
dependencies:
nan: 2.27.0
muggle-string@0.4.1: {}
nan@2.27.0: {}
nanoid@3.3.12: {}
node-releases@2.0.47: {}
npm-normalize-package-bin@4.0.0: {}
npm-run-all2@8.0.4:
dependencies:
ansi-styles: 6.2.3
cross-spawn: 7.0.6
memorystream: 0.3.1
picomatch: 4.0.4
pidtree: 0.6.0
read-package-json-fast: 4.0.0
shell-quote: 1.8.4
which: 5.0.0
obug@2.1.1: {}
ohash@2.0.11: {}
open@11.0.0:
dependencies:
default-browser: 5.5.0
define-lazy-prop: 3.0.0
is-in-ssh: 1.0.0
is-inside-container: 1.0.0
powershell-utils: 0.1.0
wsl-utils: 0.3.1
path-browserify@1.0.1: {}
path-key@3.1.1: {}
pathe@2.0.3: {}
perfect-debounce@2.1.0: {}
picocolors@1.1.1: {}
picomatch@4.0.4: {}
pidtree@0.6.0: {}
postcss@8.5.15:
dependencies:
nanoid: 3.3.12
picocolors: 1.1.1
source-map-js: 1.2.1
powershell-utils@0.1.0: {}
read-package-json-fast@4.0.0:
dependencies:
json-parse-even-better-errors: 4.0.0
npm-normalize-package-bin: 4.0.0
rolldown@1.0.3:
dependencies:
'@oxc-project/types': 0.133.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
'@rolldown/binding-android-arm64': 1.0.3
'@rolldown/binding-darwin-arm64': 1.0.3
'@rolldown/binding-darwin-x64': 1.0.3
'@rolldown/binding-freebsd-x64': 1.0.3
'@rolldown/binding-linux-arm-gnueabihf': 1.0.3
'@rolldown/binding-linux-arm64-gnu': 1.0.3
'@rolldown/binding-linux-arm64-musl': 1.0.3
'@rolldown/binding-linux-ppc64-gnu': 1.0.3
'@rolldown/binding-linux-s390x-gnu': 1.0.3
'@rolldown/binding-linux-x64-gnu': 1.0.3
'@rolldown/binding-linux-x64-musl': 1.0.3
'@rolldown/binding-openharmony-arm64': 1.0.3
'@rolldown/binding-wasm32-wasi': 1.0.3
'@rolldown/binding-win32-arm64-msvc': 1.0.3
'@rolldown/binding-win32-x64-msvc': 1.0.3
run-applescript@7.1.0: {}
semver@6.3.1: {}
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
shell-quote@1.8.4: {}
sirv@3.0.2:
dependencies:
'@polka/url': 1.0.0-next.29
mrmime: 2.0.1
totalist: 3.0.1
socket.io-client@4.8.3:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
engine.io-client: 6.6.5
socket.io-parser: 4.2.6
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
socket.io-parser@4.2.6:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.3
transitivePeerDependencies:
- supports-color
source-map-js@1.2.1: {}
tinyglobby@0.2.17:
dependencies:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
totalist@3.0.1: {}
tslib@2.8.1:
optional: true
typescript@6.0.3: {}
undici-types@7.16.0: {}
unplugin-utils@0.3.1:
dependencies:
pathe: 2.0.3
picomatch: 4.0.4
update-browserslist-db@1.2.3(browserslist@4.28.2):
dependencies:
browserslist: 4.28.2
escalade: 3.2.0
picocolors: 1.1.1
vite-dev-rpc@2.0.0(vite@8.0.16(@types/node@24.12.4)):
dependencies:
birpc: 4.0.0
vite: 8.0.16(@types/node@24.12.4)
vite-hot-client: 2.2.0(vite@8.0.16(@types/node@24.12.4))
vite-hot-client@2.2.0(vite@8.0.16(@types/node@24.12.4)):
dependencies:
vite: 8.0.16(@types/node@24.12.4)
vite-plugin-inspect@11.4.1(vite@8.0.16(@types/node@24.12.4)):
dependencies:
ansis: 4.3.1
error-stack-parser-es: 1.0.5
obug: 2.1.1
ohash: 2.0.11
open: 11.0.0
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
vite: 8.0.16(@types/node@24.12.4)
vite-dev-rpc: 2.0.0(vite@8.0.16(@types/node@24.12.4))
vite-plugin-vue-devtools@8.1.2(vite@8.0.16(@types/node@24.12.4))(vue@3.5.35(typescript@6.0.3)):
dependencies:
'@vue/devtools-core': 8.1.2(vue@3.5.35(typescript@6.0.3))
'@vue/devtools-kit': 8.1.2
'@vue/devtools-shared': 8.1.2
sirv: 3.0.2
vite: 8.0.16(@types/node@24.12.4)
vite-plugin-inspect: 11.4.1(vite@8.0.16(@types/node@24.12.4))
vite-plugin-vue-inspector: 6.0.0(vite@8.0.16(@types/node@24.12.4))
transitivePeerDependencies:
- '@nuxt/kit'
- supports-color
- vue
vite-plugin-vue-inspector@6.0.0(vite@8.0.16(@types/node@24.12.4)):
dependencies:
'@babel/core': 7.29.7
'@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7)
'@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7)
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7)
'@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7)
'@vue/compiler-dom': 3.5.35
kolorist: 1.8.0
magic-string: 0.30.21
vite: 8.0.16(@types/node@24.12.4)
transitivePeerDependencies:
- supports-color
vite@8.0.16(@types/node@24.12.4):
dependencies:
lightningcss: 1.32.0
picomatch: 4.0.4
postcss: 8.5.15
rolldown: 1.0.3
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 24.12.4
fsevents: 2.3.3
vscode-uri@3.1.0: {}
vue-router@4.6.4(vue@3.5.35(typescript@6.0.3)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.35(typescript@6.0.3)
vue-tsc@3.3.3(typescript@6.0.3):
dependencies:
'@volar/typescript': 2.4.28
'@vue/language-core': 3.3.3
typescript: 6.0.3
vue@3.5.35(typescript@6.0.3):
dependencies:
'@vue/compiler-dom': 3.5.35
'@vue/compiler-sfc': 3.5.35
'@vue/runtime-dom': 3.5.35
'@vue/server-renderer': 3.5.35(vue@3.5.35(typescript@6.0.3))
'@vue/shared': 3.5.35
optionalDependencies:
typescript: 6.0.3
which@2.0.2:
dependencies:
isexe: 2.0.0
which@5.0.0:
dependencies:
isexe: 3.1.5
ws@8.20.1: {}
wsl-utils@0.3.1:
dependencies:
is-wsl: 3.1.1
powershell-utils: 0.1.0
xmlhttprequest-ssl@2.1.2: {}
yallist@3.1.1: {}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="utf-8"?>
<svg width="564" height="564" viewBox="0 0 564 564" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="564" height="564" fill="#ffffff"/>
<defs>
<rect id="p" width="12" height="12" />
</defs>
<g>
<use x="36" y="36" xlink:href="#p" fill="#000000" />
<use x="48" y="36" xlink:href="#p" fill="#000000" />
<use x="60" y="36" xlink:href="#p" fill="#000000" />
<use x="72" y="36" xlink:href="#p" fill="#000000" />
<use x="84" y="36" xlink:href="#p" fill="#000000" />
<use x="96" y="36" xlink:href="#p" fill="#000000" />
<use x="108" y="36" xlink:href="#p" fill="#000000" />
<use x="144" y="36" xlink:href="#p" fill="#000000" />
<use x="192" y="36" xlink:href="#p" fill="#000000" />
<use x="240" y="36" xlink:href="#p" fill="#000000" />
<use x="276" y="36" xlink:href="#p" fill="#000000" />
<use x="300" y="36" xlink:href="#p" fill="#000000" />
<use x="336" y="36" xlink:href="#p" fill="#000000" />
<use x="372" y="36" xlink:href="#p" fill="#000000" />
<use x="396" y="36" xlink:href="#p" fill="#000000" />
<use x="444" y="36" xlink:href="#p" fill="#000000" />
<use x="456" y="36" xlink:href="#p" fill="#000000" />
<use x="468" y="36" xlink:href="#p" fill="#000000" />
<use x="480" y="36" xlink:href="#p" fill="#000000" />
<use x="492" y="36" xlink:href="#p" fill="#000000" />
<use x="504" y="36" xlink:href="#p" fill="#000000" />
<use x="516" y="36" xlink:href="#p" fill="#000000" />
<use x="36" y="48" xlink:href="#p" fill="#000000" />
<use x="108" y="48" xlink:href="#p" fill="#000000" />
<use x="132" y="48" xlink:href="#p" fill="#000000" />
<use x="144" y="48" xlink:href="#p" fill="#000000" />
<use x="252" y="48" xlink:href="#p" fill="#000000" />
<use x="264" y="48" xlink:href="#p" fill="#000000" />
<use x="276" y="48" xlink:href="#p" fill="#000000" />
<use x="288" y="48" xlink:href="#p" fill="#000000" />
<use x="348" y="48" xlink:href="#p" fill="#000000" />
<use x="360" y="48" xlink:href="#p" fill="#000000" />
<use x="372" y="48" xlink:href="#p" fill="#000000" />
<use x="384" y="48" xlink:href="#p" fill="#000000" />
<use x="408" y="48" xlink:href="#p" fill="#000000" />
<use x="420" y="48" xlink:href="#p" fill="#000000" />
<use x="444" y="48" xlink:href="#p" fill="#000000" />
<use x="516" y="48" xlink:href="#p" fill="#000000" />
<use x="36" y="60" xlink:href="#p" fill="#000000" />
<use x="60" y="60" xlink:href="#p" fill="#000000" />
<use x="72" y="60" xlink:href="#p" fill="#000000" />
<use x="84" y="60" xlink:href="#p" fill="#000000" />
<use x="108" y="60" xlink:href="#p" fill="#000000" />
<use x="228" y="60" xlink:href="#p" fill="#000000" />
<use x="240" y="60" xlink:href="#p" fill="#000000" />
<use x="252" y="60" xlink:href="#p" fill="#000000" />
<use x="276" y="60" xlink:href="#p" fill="#000000" />
<use x="312" y="60" xlink:href="#p" fill="#000000" />
<use x="336" y="60" xlink:href="#p" fill="#000000" />
<use x="348" y="60" xlink:href="#p" fill="#000000" />
<use x="372" y="60" xlink:href="#p" fill="#000000" />
<use x="408" y="60" xlink:href="#p" fill="#000000" />
<use x="420" y="60" xlink:href="#p" fill="#000000" />
<use x="444" y="60" xlink:href="#p" fill="#000000" />
<use x="468" y="60" xlink:href="#p" fill="#000000" />
<use x="480" y="60" xlink:href="#p" fill="#000000" />
<use x="492" y="60" xlink:href="#p" fill="#000000" />
<use x="516" y="60" xlink:href="#p" fill="#000000" />
<use x="36" y="72" xlink:href="#p" fill="#000000" />
<use x="60" y="72" xlink:href="#p" fill="#000000" />
<use x="72" y="72" xlink:href="#p" fill="#000000" />
<use x="84" y="72" xlink:href="#p" fill="#000000" />
<use x="108" y="72" xlink:href="#p" fill="#000000" />
<use x="144" y="72" xlink:href="#p" fill="#000000" />
<use x="168" y="72" xlink:href="#p" fill="#000000" />
<use x="240" y="72" xlink:href="#p" fill="#000000" />
<use x="252" y="72" xlink:href="#p" fill="#000000" />
<use x="264" y="72" xlink:href="#p" fill="#000000" />
<use x="276" y="72" xlink:href="#p" fill="#000000" />
<use x="288" y="72" xlink:href="#p" fill="#000000" />
<use x="336" y="72" xlink:href="#p" fill="#000000" />
<use x="348" y="72" xlink:href="#p" fill="#000000" />
<use x="360" y="72" xlink:href="#p" fill="#000000" />
<use x="384" y="72" xlink:href="#p" fill="#000000" />
<use x="408" y="72" xlink:href="#p" fill="#000000" />
<use x="444" y="72" xlink:href="#p" fill="#000000" />
<use x="468" y="72" xlink:href="#p" fill="#000000" />
<use x="480" y="72" xlink:href="#p" fill="#000000" />
<use x="492" y="72" xlink:href="#p" fill="#000000" />
<use x="516" y="72" xlink:href="#p" fill="#000000" />
<use x="36" y="84" xlink:href="#p" fill="#000000" />
<use x="60" y="84" xlink:href="#p" fill="#000000" />
<use x="72" y="84" xlink:href="#p" fill="#000000" />
<use x="84" y="84" xlink:href="#p" fill="#000000" />
<use x="108" y="84" xlink:href="#p" fill="#000000" />
<use x="132" y="84" xlink:href="#p" fill="#000000" />
<use x="144" y="84" xlink:href="#p" fill="#000000" />
<use x="180" y="84" xlink:href="#p" fill="#000000" />
<use x="204" y="84" xlink:href="#p" fill="#000000" />
<use x="216" y="84" xlink:href="#p" fill="#000000" />
<use x="228" y="84" xlink:href="#p" fill="#000000" />
<use x="240" y="84" xlink:href="#p" fill="#000000" />
<use x="252" y="84" xlink:href="#p" fill="#000000" />
<use x="264" y="84" xlink:href="#p" fill="#000000" />
<use x="276" y="84" xlink:href="#p" fill="#000000" />
<use x="288" y="84" xlink:href="#p" fill="#000000" />
<use x="312" y="84" xlink:href="#p" fill="#000000" />
<use x="324" y="84" xlink:href="#p" fill="#000000" />
<use x="348" y="84" xlink:href="#p" fill="#000000" />
<use x="360" y="84" xlink:href="#p" fill="#000000" />
<use x="384" y="84" xlink:href="#p" fill="#000000" />
<use x="408" y="84" xlink:href="#p" fill="#000000" />
<use x="444" y="84" xlink:href="#p" fill="#000000" />
<use x="468" y="84" xlink:href="#p" fill="#000000" />
<use x="480" y="84" xlink:href="#p" fill="#000000" />
<use x="492" y="84" xlink:href="#p" fill="#000000" />
<use x="516" y="84" xlink:href="#p" fill="#000000" />
<use x="36" y="96" xlink:href="#p" fill="#000000" />
<use x="108" y="96" xlink:href="#p" fill="#000000" />
<use x="156" y="96" xlink:href="#p" fill="#000000" />
<use x="192" y="96" xlink:href="#p" fill="#000000" />
<use x="216" y="96" xlink:href="#p" fill="#000000" />
<use x="252" y="96" xlink:href="#p" fill="#000000" />
<use x="264" y="96" xlink:href="#p" fill="#000000" />
<use x="288" y="96" xlink:href="#p" fill="#000000" />
<use x="312" y="96" xlink:href="#p" fill="#000000" />
<use x="348" y="96" xlink:href="#p" fill="#000000" />
<use x="360" y="96" xlink:href="#p" fill="#000000" />
<use x="372" y="96" xlink:href="#p" fill="#000000" />
<use x="384" y="96" xlink:href="#p" fill="#000000" />
<use x="408" y="96" xlink:href="#p" fill="#000000" />
<use x="420" y="96" xlink:href="#p" fill="#000000" />
<use x="444" y="96" xlink:href="#p" fill="#000000" />
<use x="516" y="96" xlink:href="#p" fill="#000000" />
<use x="36" y="108" xlink:href="#p" fill="#000000" />
<use x="48" y="108" xlink:href="#p" fill="#000000" />
<use x="60" y="108" xlink:href="#p" fill="#000000" />
<use x="72" y="108" xlink:href="#p" fill="#000000" />
<use x="84" y="108" xlink:href="#p" fill="#000000" />
<use x="96" y="108" xlink:href="#p" fill="#000000" />
<use x="108" y="108" xlink:href="#p" fill="#000000" />
<use x="132" y="108" xlink:href="#p" fill="#000000" />
<use x="156" y="108" xlink:href="#p" fill="#000000" />
<use x="180" y="108" xlink:href="#p" fill="#000000" />
<use x="204" y="108" xlink:href="#p" fill="#000000" />
<use x="228" y="108" xlink:href="#p" fill="#000000" />
<use x="252" y="108" xlink:href="#p" fill="#000000" />
<use x="276" y="108" xlink:href="#p" fill="#000000" />
<use x="300" y="108" xlink:href="#p" fill="#000000" />
<use x="324" y="108" xlink:href="#p" fill="#000000" />
<use x="348" y="108" xlink:href="#p" fill="#000000" />
<use x="372" y="108" xlink:href="#p" fill="#000000" />
<use x="396" y="108" xlink:href="#p" fill="#000000" />
<use x="420" y="108" xlink:href="#p" fill="#000000" />
<use x="444" y="108" xlink:href="#p" fill="#000000" />
<use x="456" y="108" xlink:href="#p" fill="#000000" />
<use x="468" y="108" xlink:href="#p" fill="#000000" />
<use x="480" y="108" xlink:href="#p" fill="#000000" />
<use x="492" y="108" xlink:href="#p" fill="#000000" />
<use x="504" y="108" xlink:href="#p" fill="#000000" />
<use x="516" y="108" xlink:href="#p" fill="#000000" />
<use x="156" y="120" xlink:href="#p" fill="#000000" />
<use x="216" y="120" xlink:href="#p" fill="#000000" />
<use x="240" y="120" xlink:href="#p" fill="#000000" />
<use x="252" y="120" xlink:href="#p" fill="#000000" />
<use x="264" y="120" xlink:href="#p" fill="#000000" />
<use x="276" y="120" xlink:href="#p" fill="#000000" />
<use x="288" y="120" xlink:href="#p" fill="#000000" />
<use x="300" y="120" xlink:href="#p" fill="#000000" />
<use x="312" y="120" xlink:href="#p" fill="#000000" />
<use x="336" y="120" xlink:href="#p" fill="#000000" />
<use x="348" y="120" xlink:href="#p" fill="#000000" />
<use x="372" y="120" xlink:href="#p" fill="#000000" />
<use x="384" y="120" xlink:href="#p" fill="#000000" />
<use x="420" y="120" xlink:href="#p" fill="#000000" />
<use x="36" y="132" xlink:href="#p" fill="#000000" />
<use x="60" y="132" xlink:href="#p" fill="#000000" />
<use x="84" y="132" xlink:href="#p" fill="#000000" />
<use x="108" y="132" xlink:href="#p" fill="#000000" />
<use x="168" y="132" xlink:href="#p" fill="#000000" />
<use x="180" y="132" xlink:href="#p" fill="#000000" />
<use x="192" y="132" xlink:href="#p" fill="#000000" />
<use x="204" y="132" xlink:href="#p" fill="#000000" />
<use x="228" y="132" xlink:href="#p" fill="#000000" />
<use x="240" y="132" xlink:href="#p" fill="#000000" />
<use x="264" y="132" xlink:href="#p" fill="#000000" />
<use x="276" y="132" xlink:href="#p" fill="#000000" />
<use x="288" y="132" xlink:href="#p" fill="#000000" />
<use x="300" y="132" xlink:href="#p" fill="#000000" />
<use x="312" y="132" xlink:href="#p" fill="#000000" />
<use x="324" y="132" xlink:href="#p" fill="#000000" />
<use x="336" y="132" xlink:href="#p" fill="#000000" />
<use x="360" y="132" xlink:href="#p" fill="#000000" />
<use x="372" y="132" xlink:href="#p" fill="#000000" />
<use x="384" y="132" xlink:href="#p" fill="#000000" />
<use x="408" y="132" xlink:href="#p" fill="#000000" />
<use x="468" y="132" xlink:href="#p" fill="#000000" />
<use x="504" y="132" xlink:href="#p" fill="#000000" />
<use x="36" y="144" xlink:href="#p" fill="#000000" />
<use x="48" y="144" xlink:href="#p" fill="#000000" />
<use x="72" y="144" xlink:href="#p" fill="#000000" />
<use x="84" y="144" xlink:href="#p" fill="#000000" />
<use x="120" y="144" xlink:href="#p" fill="#000000" />
<use x="144" y="144" xlink:href="#p" fill="#000000" />
<use x="156" y="144" xlink:href="#p" fill="#000000" />
<use x="180" y="144" xlink:href="#p" fill="#000000" />
<use x="192" y="144" xlink:href="#p" fill="#000000" />
<use x="216" y="144" xlink:href="#p" fill="#000000" />
<use x="252" y="144" xlink:href="#p" fill="#000000" />
<use x="276" y="144" xlink:href="#p" fill="#000000" />
<use x="300" y="144" xlink:href="#p" fill="#000000" />
<use x="324" y="144" xlink:href="#p" fill="#000000" />
<use x="348" y="144" xlink:href="#p" fill="#000000" />
<use x="372" y="144" xlink:href="#p" fill="#000000" />
<use x="384" y="144" xlink:href="#p" fill="#000000" />
<use x="396" y="144" xlink:href="#p" fill="#000000" />
<use x="420" y="144" xlink:href="#p" fill="#000000" />
<use x="432" y="144" xlink:href="#p" fill="#000000" />
<use x="444" y="144" xlink:href="#p" fill="#000000" />
<use x="480" y="144" xlink:href="#p" fill="#000000" />
<use x="492" y="144" xlink:href="#p" fill="#000000" />
<use x="48" y="156" xlink:href="#p" fill="#000000" />
<use x="60" y="156" xlink:href="#p" fill="#000000" />
<use x="72" y="156" xlink:href="#p" fill="#000000" />
<use x="96" y="156" xlink:href="#p" fill="#000000" />
<use x="108" y="156" xlink:href="#p" fill="#000000" />
<use x="120" y="156" xlink:href="#p" fill="#000000" />
<use x="168" y="156" xlink:href="#p" fill="#000000" />
<use x="192" y="156" xlink:href="#p" fill="#000000" />
<use x="204" y="156" xlink:href="#p" fill="#000000" />
<use x="228" y="156" xlink:href="#p" fill="#000000" />
<use x="240" y="156" xlink:href="#p" fill="#000000" />
<use x="276" y="156" xlink:href="#p" fill="#000000" />
<use x="288" y="156" xlink:href="#p" fill="#000000" />
<use x="348" y="156" xlink:href="#p" fill="#000000" />
<use x="372" y="156" xlink:href="#p" fill="#000000" />
<use x="396" y="156" xlink:href="#p" fill="#000000" />
<use x="444" y="156" xlink:href="#p" fill="#000000" />
<use x="456" y="156" xlink:href="#p" fill="#000000" />
<use x="492" y="156" xlink:href="#p" fill="#000000" />
<use x="516" y="156" xlink:href="#p" fill="#000000" />
<use x="36" y="168" xlink:href="#p" fill="#000000" />
<use x="48" y="168" xlink:href="#p" fill="#000000" />
<use x="72" y="168" xlink:href="#p" fill="#000000" />
<use x="84" y="168" xlink:href="#p" fill="#000000" />
<use x="96" y="168" xlink:href="#p" fill="#000000" />
<use x="120" y="168" xlink:href="#p" fill="#000000" />
<use x="144" y="168" xlink:href="#p" fill="#000000" />
<use x="180" y="168" xlink:href="#p" fill="#000000" />
<use x="228" y="168" xlink:href="#p" fill="#000000" />
<use x="240" y="168" xlink:href="#p" fill="#000000" />
<use x="252" y="168" xlink:href="#p" fill="#000000" />
<use x="276" y="168" xlink:href="#p" fill="#000000" />
<use x="288" y="168" xlink:href="#p" fill="#000000" />
<use x="312" y="168" xlink:href="#p" fill="#000000" />
<use x="336" y="168" xlink:href="#p" fill="#000000" />
<use x="348" y="168" xlink:href="#p" fill="#000000" />
<use x="372" y="168" xlink:href="#p" fill="#000000" />
<use x="384" y="168" xlink:href="#p" fill="#000000" />
<use x="396" y="168" xlink:href="#p" fill="#000000" />
<use x="420" y="168" xlink:href="#p" fill="#000000" />
<use x="468" y="168" xlink:href="#p" fill="#000000" />
<use x="36" y="180" xlink:href="#p" fill="#000000" />
<use x="60" y="180" xlink:href="#p" fill="#000000" />
<use x="84" y="180" xlink:href="#p" fill="#000000" />
<use x="96" y="180" xlink:href="#p" fill="#000000" />
<use x="108" y="180" xlink:href="#p" fill="#000000" />
<use x="132" y="180" xlink:href="#p" fill="#000000" />
<use x="180" y="180" xlink:href="#p" fill="#000000" />
<use x="192" y="180" xlink:href="#p" fill="#000000" />
<use x="216" y="180" xlink:href="#p" fill="#000000" />
<use x="228" y="180" xlink:href="#p" fill="#000000" />
<use x="240" y="180" xlink:href="#p" fill="#000000" />
<use x="264" y="180" xlink:href="#p" fill="#000000" />
<use x="288" y="180" xlink:href="#p" fill="#000000" />
<use x="324" y="180" xlink:href="#p" fill="#000000" />
<use x="336" y="180" xlink:href="#p" fill="#000000" />
<use x="360" y="180" xlink:href="#p" fill="#000000" />
<use x="384" y="180" xlink:href="#p" fill="#000000" />
<use x="408" y="180" xlink:href="#p" fill="#000000" />
<use x="420" y="180" xlink:href="#p" fill="#000000" />
<use x="444" y="180" xlink:href="#p" fill="#000000" />
<use x="480" y="180" xlink:href="#p" fill="#000000" />
<use x="516" y="180" xlink:href="#p" fill="#000000" />
<use x="36" y="192" xlink:href="#p" fill="#000000" />
<use x="48" y="192" xlink:href="#p" fill="#000000" />
<use x="60" y="192" xlink:href="#p" fill="#000000" />
<use x="84" y="192" xlink:href="#p" fill="#000000" />
<use x="120" y="192" xlink:href="#p" fill="#000000" />
<use x="132" y="192" xlink:href="#p" fill="#000000" />
<use x="156" y="192" xlink:href="#p" fill="#000000" />
<use x="180" y="192" xlink:href="#p" fill="#000000" />
<use x="192" y="192" xlink:href="#p" fill="#000000" />
<use x="216" y="192" xlink:href="#p" fill="#000000" />
<use x="228" y="192" xlink:href="#p" fill="#000000" />
<use x="264" y="192" xlink:href="#p" fill="#000000" />
<use x="288" y="192" xlink:href="#p" fill="#000000" />
<use x="312" y="192" xlink:href="#p" fill="#000000" />
<use x="324" y="192" xlink:href="#p" fill="#000000" />
<use x="360" y="192" xlink:href="#p" fill="#000000" />
<use x="396" y="192" xlink:href="#p" fill="#000000" />
<use x="408" y="192" xlink:href="#p" fill="#000000" />
<use x="420" y="192" xlink:href="#p" fill="#000000" />
<use x="480" y="192" xlink:href="#p" fill="#000000" />
<use x="504" y="192" xlink:href="#p" fill="#000000" />
<use x="516" y="192" xlink:href="#p" fill="#000000" />
<use x="72" y="204" xlink:href="#p" fill="#000000" />
<use x="84" y="204" xlink:href="#p" fill="#000000" />
<use x="96" y="204" xlink:href="#p" fill="#000000" />
<use x="108" y="204" xlink:href="#p" fill="#000000" />
<use x="120" y="204" xlink:href="#p" fill="#000000" />
<use x="156" y="204" xlink:href="#p" fill="#000000" />
<use x="180" y="204" xlink:href="#p" fill="#000000" />
<use x="192" y="204" xlink:href="#p" fill="#000000" />
<use x="204" y="204" xlink:href="#p" fill="#000000" />
<use x="216" y="204" xlink:href="#p" fill="#000000" />
<use x="228" y="204" xlink:href="#p" fill="#000000" />
<use x="240" y="204" xlink:href="#p" fill="#000000" />
<use x="300" y="204" xlink:href="#p" fill="#000000" />
<use x="312" y="204" xlink:href="#p" fill="#000000" />
<use x="324" y="204" xlink:href="#p" fill="#000000" />
<use x="336" y="204" xlink:href="#p" fill="#000000" />
<use x="408" y="204" xlink:href="#p" fill="#000000" />
<use x="420" y="204" xlink:href="#p" fill="#000000" />
<use x="444" y="204" xlink:href="#p" fill="#000000" />
<use x="456" y="204" xlink:href="#p" fill="#000000" />
<use x="480" y="204" xlink:href="#p" fill="#000000" />
<use x="504" y="204" xlink:href="#p" fill="#000000" />
<use x="516" y="204" xlink:href="#p" fill="#000000" />
<use x="60" y="216" xlink:href="#p" fill="#000000" />
<use x="144" y="216" xlink:href="#p" fill="#000000" />
<use x="180" y="216" xlink:href="#p" fill="#000000" />
<use x="192" y="216" xlink:href="#p" fill="#000000" />
<use x="228" y="216" xlink:href="#p" fill="#000000" />
<use x="264" y="216" xlink:href="#p" fill="#000000" />
<use x="288" y="216" xlink:href="#p" fill="#000000" />
<use x="300" y="216" xlink:href="#p" fill="#000000" />
<use x="324" y="216" xlink:href="#p" fill="#000000" />
<use x="360" y="216" xlink:href="#p" fill="#000000" />
<use x="384" y="216" xlink:href="#p" fill="#000000" />
<use x="396" y="216" xlink:href="#p" fill="#000000" />
<use x="420" y="216" xlink:href="#p" fill="#000000" />
<use x="444" y="216" xlink:href="#p" fill="#000000" />
<use x="48" y="228" xlink:href="#p" fill="#000000" />
<use x="108" y="228" xlink:href="#p" fill="#000000" />
<use x="120" y="228" xlink:href="#p" fill="#000000" />
<use x="132" y="228" xlink:href="#p" fill="#000000" />
<use x="144" y="228" xlink:href="#p" fill="#000000" />
<use x="192" y="228" xlink:href="#p" fill="#000000" />
<use x="228" y="228" xlink:href="#p" fill="#000000" />
<use x="276" y="228" xlink:href="#p" fill="#000000" />
<use x="300" y="228" xlink:href="#p" fill="#000000" />
<use x="312" y="228" xlink:href="#p" fill="#000000" />
<use x="372" y="228" xlink:href="#p" fill="#000000" />
<use x="408" y="228" xlink:href="#p" fill="#000000" />
<use x="420" y="228" xlink:href="#p" fill="#000000" />
<use x="444" y="228" xlink:href="#p" fill="#000000" />
<use x="456" y="228" xlink:href="#p" fill="#000000" />
<use x="504" y="228" xlink:href="#p" fill="#000000" />
<use x="36" y="240" xlink:href="#p" fill="#000000" />
<use x="48" y="240" xlink:href="#p" fill="#000000" />
<use x="72" y="240" xlink:href="#p" fill="#000000" />
<use x="120" y="240" xlink:href="#p" fill="#000000" />
<use x="132" y="240" xlink:href="#p" fill="#000000" />
<use x="144" y="240" xlink:href="#p" fill="#000000" />
<use x="168" y="240" xlink:href="#p" fill="#000000" />
<use x="180" y="240" xlink:href="#p" fill="#000000" />
<use x="192" y="240" xlink:href="#p" fill="#000000" />
<use x="204" y="240" xlink:href="#p" fill="#000000" />
<use x="228" y="240" xlink:href="#p" fill="#000000" />
<use x="240" y="240" xlink:href="#p" fill="#000000" />
<use x="264" y="240" xlink:href="#p" fill="#000000" />
<use x="276" y="240" xlink:href="#p" fill="#000000" />
<use x="300" y="240" xlink:href="#p" fill="#000000" />
<use x="312" y="240" xlink:href="#p" fill="#000000" />
<use x="336" y="240" xlink:href="#p" fill="#000000" />
<use x="360" y="240" xlink:href="#p" fill="#000000" />
<use x="372" y="240" xlink:href="#p" fill="#000000" />
<use x="396" y="240" xlink:href="#p" fill="#000000" />
<use x="408" y="240" xlink:href="#p" fill="#000000" />
<use x="420" y="240" xlink:href="#p" fill="#000000" />
<use x="444" y="240" xlink:href="#p" fill="#000000" />
<use x="504" y="240" xlink:href="#p" fill="#000000" />
<use x="516" y="240" xlink:href="#p" fill="#000000" />
<use x="36" y="252" xlink:href="#p" fill="#000000" />
<use x="48" y="252" xlink:href="#p" fill="#000000" />
<use x="60" y="252" xlink:href="#p" fill="#000000" />
<use x="72" y="252" xlink:href="#p" fill="#000000" />
<use x="108" y="252" xlink:href="#p" fill="#000000" />
<use x="120" y="252" xlink:href="#p" fill="#000000" />
<use x="144" y="252" xlink:href="#p" fill="#000000" />
<use x="168" y="252" xlink:href="#p" fill="#000000" />
<use x="204" y="252" xlink:href="#p" fill="#000000" />
<use x="252" y="252" xlink:href="#p" fill="#000000" />
<use x="264" y="252" xlink:href="#p" fill="#000000" />
<use x="276" y="252" xlink:href="#p" fill="#000000" />
<use x="288" y="252" xlink:href="#p" fill="#000000" />
<use x="348" y="252" xlink:href="#p" fill="#000000" />
<use x="360" y="252" xlink:href="#p" fill="#000000" />
<use x="372" y="252" xlink:href="#p" fill="#000000" />
<use x="384" y="252" xlink:href="#p" fill="#000000" />
<use x="444" y="252" xlink:href="#p" fill="#000000" />
<use x="468" y="252" xlink:href="#p" fill="#000000" />
<use x="480" y="252" xlink:href="#p" fill="#000000" />
<use x="492" y="252" xlink:href="#p" fill="#000000" />
<use x="504" y="252" xlink:href="#p" fill="#000000" />
<use x="516" y="252" xlink:href="#p" fill="#000000" />
<use x="36" y="264" xlink:href="#p" fill="#000000" />
<use x="48" y="264" xlink:href="#p" fill="#000000" />
<use x="72" y="264" xlink:href="#p" fill="#000000" />
<use x="96" y="264" xlink:href="#p" fill="#000000" />
<use x="144" y="264" xlink:href="#p" fill="#000000" />
<use x="168" y="264" xlink:href="#p" fill="#000000" />
<use x="216" y="264" xlink:href="#p" fill="#000000" />
<use x="228" y="264" xlink:href="#p" fill="#000000" />
<use x="240" y="264" xlink:href="#p" fill="#000000" />
<use x="252" y="264" xlink:href="#p" fill="#000000" />
<use x="276" y="264" xlink:href="#p" fill="#000000" />
<use x="312" y="264" xlink:href="#p" fill="#000000" />
<use x="336" y="264" xlink:href="#p" fill="#000000" />
<use x="348" y="264" xlink:href="#p" fill="#000000" />
<use x="372" y="264" xlink:href="#p" fill="#000000" />
<use x="408" y="264" xlink:href="#p" fill="#000000" />
<use x="420" y="264" xlink:href="#p" fill="#000000" />
<use x="456" y="264" xlink:href="#p" fill="#000000" />
<use x="504" y="264" xlink:href="#p" fill="#000000" />
<use x="516" y="264" xlink:href="#p" fill="#000000" />
<use x="36" y="276" xlink:href="#p" fill="#000000" />
<use x="72" y="276" xlink:href="#p" fill="#000000" />
<use x="84" y="276" xlink:href="#p" fill="#000000" />
<use x="108" y="276" xlink:href="#p" fill="#000000" />
<use x="120" y="276" xlink:href="#p" fill="#000000" />
<use x="144" y="276" xlink:href="#p" fill="#000000" />
<use x="168" y="276" xlink:href="#p" fill="#000000" />
<use x="216" y="276" xlink:href="#p" fill="#000000" />
<use x="252" y="276" xlink:href="#p" fill="#000000" />
<use x="264" y="276" xlink:href="#p" fill="#000000" />
<use x="276" y="276" xlink:href="#p" fill="#000000" />
<use x="348" y="276" xlink:href="#p" fill="#000000" />
<use x="360" y="276" xlink:href="#p" fill="#000000" />
<use x="372" y="276" xlink:href="#p" fill="#000000" />
<use x="408" y="276" xlink:href="#p" fill="#000000" />
<use x="432" y="276" xlink:href="#p" fill="#000000" />
<use x="444" y="276" xlink:href="#p" fill="#000000" />
<use x="468" y="276" xlink:href="#p" fill="#000000" />
<use x="480" y="276" xlink:href="#p" fill="#000000" />
<use x="492" y="276" xlink:href="#p" fill="#000000" />
<use x="504" y="276" xlink:href="#p" fill="#000000" />
<use x="48" y="288" xlink:href="#p" fill="#000000" />
<use x="84" y="288" xlink:href="#p" fill="#000000" />
<use x="96" y="288" xlink:href="#p" fill="#000000" />
<use x="144" y="288" xlink:href="#p" fill="#000000" />
<use x="156" y="288" xlink:href="#p" fill="#000000" />
<use x="168" y="288" xlink:href="#p" fill="#000000" />
<use x="192" y="288" xlink:href="#p" fill="#000000" />
<use x="204" y="288" xlink:href="#p" fill="#000000" />
<use x="240" y="288" xlink:href="#p" fill="#000000" />
<use x="252" y="288" xlink:href="#p" fill="#000000" />
<use x="276" y="288" xlink:href="#p" fill="#000000" />
<use x="288" y="288" xlink:href="#p" fill="#000000" />
<use x="324" y="288" xlink:href="#p" fill="#000000" />
<use x="336" y="288" xlink:href="#p" fill="#000000" />
<use x="348" y="288" xlink:href="#p" fill="#000000" />
<use x="408" y="288" xlink:href="#p" fill="#000000" />
<use x="420" y="288" xlink:href="#p" fill="#000000" />
<use x="432" y="288" xlink:href="#p" fill="#000000" />
<use x="444" y="288" xlink:href="#p" fill="#000000" />
<use x="468" y="288" xlink:href="#p" fill="#000000" />
<use x="492" y="288" xlink:href="#p" fill="#000000" />
<use x="504" y="288" xlink:href="#p" fill="#000000" />
<use x="516" y="288" xlink:href="#p" fill="#000000" />
<use x="84" y="300" xlink:href="#p" fill="#000000" />
<use x="96" y="300" xlink:href="#p" fill="#000000" />
<use x="108" y="300" xlink:href="#p" fill="#000000" />
<use x="132" y="300" xlink:href="#p" fill="#000000" />
<use x="168" y="300" xlink:href="#p" fill="#000000" />
<use x="204" y="300" xlink:href="#p" fill="#000000" />
<use x="240" y="300" xlink:href="#p" fill="#000000" />
<use x="252" y="300" xlink:href="#p" fill="#000000" />
<use x="288" y="300" xlink:href="#p" fill="#000000" />
<use x="300" y="300" xlink:href="#p" fill="#000000" />
<use x="372" y="300" xlink:href="#p" fill="#000000" />
<use x="396" y="300" xlink:href="#p" fill="#000000" />
<use x="432" y="300" xlink:href="#p" fill="#000000" />
<use x="444" y="300" xlink:href="#p" fill="#000000" />
<use x="504" y="300" xlink:href="#p" fill="#000000" />
<use x="516" y="300" xlink:href="#p" fill="#000000" />
<use x="36" y="312" xlink:href="#p" fill="#000000" />
<use x="48" y="312" xlink:href="#p" fill="#000000" />
<use x="60" y="312" xlink:href="#p" fill="#000000" />
<use x="84" y="312" xlink:href="#p" fill="#000000" />
<use x="132" y="312" xlink:href="#p" fill="#000000" />
<use x="144" y="312" xlink:href="#p" fill="#000000" />
<use x="168" y="312" xlink:href="#p" fill="#000000" />
<use x="180" y="312" xlink:href="#p" fill="#000000" />
<use x="192" y="312" xlink:href="#p" fill="#000000" />
<use x="216" y="312" xlink:href="#p" fill="#000000" />
<use x="240" y="312" xlink:href="#p" fill="#000000" />
<use x="264" y="312" xlink:href="#p" fill="#000000" />
<use x="276" y="312" xlink:href="#p" fill="#000000" />
<use x="288" y="312" xlink:href="#p" fill="#000000" />
<use x="300" y="312" xlink:href="#p" fill="#000000" />
<use x="312" y="312" xlink:href="#p" fill="#000000" />
<use x="324" y="312" xlink:href="#p" fill="#000000" />
<use x="336" y="312" xlink:href="#p" fill="#000000" />
<use x="348" y="312" xlink:href="#p" fill="#000000" />
<use x="360" y="312" xlink:href="#p" fill="#000000" />
<use x="384" y="312" xlink:href="#p" fill="#000000" />
<use x="408" y="312" xlink:href="#p" fill="#000000" />
<use x="420" y="312" xlink:href="#p" fill="#000000" />
<use x="432" y="312" xlink:href="#p" fill="#000000" />
<use x="468" y="312" xlink:href="#p" fill="#000000" />
<use x="492" y="312" xlink:href="#p" fill="#000000" />
<use x="84" y="324" xlink:href="#p" fill="#000000" />
<use x="96" y="324" xlink:href="#p" fill="#000000" />
<use x="108" y="324" xlink:href="#p" fill="#000000" />
<use x="120" y="324" xlink:href="#p" fill="#000000" />
<use x="132" y="324" xlink:href="#p" fill="#000000" />
<use x="180" y="324" xlink:href="#p" fill="#000000" />
<use x="204" y="324" xlink:href="#p" fill="#000000" />
<use x="216" y="324" xlink:href="#p" fill="#000000" />
<use x="240" y="324" xlink:href="#p" fill="#000000" />
<use x="264" y="324" xlink:href="#p" fill="#000000" />
<use x="276" y="324" xlink:href="#p" fill="#000000" />
<use x="288" y="324" xlink:href="#p" fill="#000000" />
<use x="300" y="324" xlink:href="#p" fill="#000000" />
<use x="324" y="324" xlink:href="#p" fill="#000000" />
<use x="336" y="324" xlink:href="#p" fill="#000000" />
<use x="360" y="324" xlink:href="#p" fill="#000000" />
<use x="372" y="324" xlink:href="#p" fill="#000000" />
<use x="384" y="324" xlink:href="#p" fill="#000000" />
<use x="420" y="324" xlink:href="#p" fill="#000000" />
<use x="432" y="324" xlink:href="#p" fill="#000000" />
<use x="444" y="324" xlink:href="#p" fill="#000000" />
<use x="492" y="324" xlink:href="#p" fill="#000000" />
<use x="516" y="324" xlink:href="#p" fill="#000000" />
<use x="48" y="336" xlink:href="#p" fill="#000000" />
<use x="60" y="336" xlink:href="#p" fill="#000000" />
<use x="84" y="336" xlink:href="#p" fill="#000000" />
<use x="96" y="336" xlink:href="#p" fill="#000000" />
<use x="120" y="336" xlink:href="#p" fill="#000000" />
<use x="144" y="336" xlink:href="#p" fill="#000000" />
<use x="204" y="336" xlink:href="#p" fill="#000000" />
<use x="216" y="336" xlink:href="#p" fill="#000000" />
<use x="240" y="336" xlink:href="#p" fill="#000000" />
<use x="300" y="336" xlink:href="#p" fill="#000000" />
<use x="324" y="336" xlink:href="#p" fill="#000000" />
<use x="384" y="336" xlink:href="#p" fill="#000000" />
<use x="432" y="336" xlink:href="#p" fill="#000000" />
<use x="444" y="336" xlink:href="#p" fill="#000000" />
<use x="504" y="336" xlink:href="#p" fill="#000000" />
<use x="48" y="348" xlink:href="#p" fill="#000000" />
<use x="108" y="348" xlink:href="#p" fill="#000000" />
<use x="132" y="348" xlink:href="#p" fill="#000000" />
<use x="144" y="348" xlink:href="#p" fill="#000000" />
<use x="156" y="348" xlink:href="#p" fill="#000000" />
<use x="168" y="348" xlink:href="#p" fill="#000000" />
<use x="180" y="348" xlink:href="#p" fill="#000000" />
<use x="192" y="348" xlink:href="#p" fill="#000000" />
<use x="228" y="348" xlink:href="#p" fill="#000000" />
<use x="240" y="348" xlink:href="#p" fill="#000000" />
<use x="300" y="348" xlink:href="#p" fill="#000000" />
<use x="336" y="348" xlink:href="#p" fill="#000000" />
<use x="372" y="348" xlink:href="#p" fill="#000000" />
<use x="432" y="348" xlink:href="#p" fill="#000000" />
<use x="456" y="348" xlink:href="#p" fill="#000000" />
<use x="492" y="348" xlink:href="#p" fill="#000000" />
<use x="504" y="348" xlink:href="#p" fill="#000000" />
<use x="36" y="360" xlink:href="#p" fill="#000000" />
<use x="48" y="360" xlink:href="#p" fill="#000000" />
<use x="60" y="360" xlink:href="#p" fill="#000000" />
<use x="72" y="360" xlink:href="#p" fill="#000000" />
<use x="132" y="360" xlink:href="#p" fill="#000000" />
<use x="192" y="360" xlink:href="#p" fill="#000000" />
<use x="204" y="360" xlink:href="#p" fill="#000000" />
<use x="228" y="360" xlink:href="#p" fill="#000000" />
<use x="240" y="360" xlink:href="#p" fill="#000000" />
<use x="252" y="360" xlink:href="#p" fill="#000000" />
<use x="264" y="360" xlink:href="#p" fill="#000000" />
<use x="276" y="360" xlink:href="#p" fill="#000000" />
<use x="288" y="360" xlink:href="#p" fill="#000000" />
<use x="336" y="360" xlink:href="#p" fill="#000000" />
<use x="384" y="360" xlink:href="#p" fill="#000000" />
<use x="396" y="360" xlink:href="#p" fill="#000000" />
<use x="420" y="360" xlink:href="#p" fill="#000000" />
<use x="432" y="360" xlink:href="#p" fill="#000000" />
<use x="444" y="360" xlink:href="#p" fill="#000000" />
<use x="456" y="360" xlink:href="#p" fill="#000000" />
<use x="504" y="360" xlink:href="#p" fill="#000000" />
<use x="516" y="360" xlink:href="#p" fill="#000000" />
<use x="60" y="372" xlink:href="#p" fill="#000000" />
<use x="84" y="372" xlink:href="#p" fill="#000000" />
<use x="96" y="372" xlink:href="#p" fill="#000000" />
<use x="108" y="372" xlink:href="#p" fill="#000000" />
<use x="120" y="372" xlink:href="#p" fill="#000000" />
<use x="144" y="372" xlink:href="#p" fill="#000000" />
<use x="156" y="372" xlink:href="#p" fill="#000000" />
<use x="180" y="372" xlink:href="#p" fill="#000000" />
<use x="204" y="372" xlink:href="#p" fill="#000000" />
<use x="240" y="372" xlink:href="#p" fill="#000000" />
<use x="276" y="372" xlink:href="#p" fill="#000000" />
<use x="288" y="372" xlink:href="#p" fill="#000000" />
<use x="336" y="372" xlink:href="#p" fill="#000000" />
<use x="360" y="372" xlink:href="#p" fill="#000000" />
<use x="372" y="372" xlink:href="#p" fill="#000000" />
<use x="384" y="372" xlink:href="#p" fill="#000000" />
<use x="408" y="372" xlink:href="#p" fill="#000000" />
<use x="432" y="372" xlink:href="#p" fill="#000000" />
<use x="480" y="372" xlink:href="#p" fill="#000000" />
<use x="504" y="372" xlink:href="#p" fill="#000000" />
<use x="60" y="384" xlink:href="#p" fill="#000000" />
<use x="72" y="384" xlink:href="#p" fill="#000000" />
<use x="84" y="384" xlink:href="#p" fill="#000000" />
<use x="96" y="384" xlink:href="#p" fill="#000000" />
<use x="168" y="384" xlink:href="#p" fill="#000000" />
<use x="228" y="384" xlink:href="#p" fill="#000000" />
<use x="240" y="384" xlink:href="#p" fill="#000000" />
<use x="264" y="384" xlink:href="#p" fill="#000000" />
<use x="276" y="384" xlink:href="#p" fill="#000000" />
<use x="300" y="384" xlink:href="#p" fill="#000000" />
<use x="312" y="384" xlink:href="#p" fill="#000000" />
<use x="336" y="384" xlink:href="#p" fill="#000000" />
<use x="360" y="384" xlink:href="#p" fill="#000000" />
<use x="372" y="384" xlink:href="#p" fill="#000000" />
<use x="396" y="384" xlink:href="#p" fill="#000000" />
<use x="408" y="384" xlink:href="#p" fill="#000000" />
<use x="432" y="384" xlink:href="#p" fill="#000000" />
<use x="492" y="384" xlink:href="#p" fill="#000000" />
<use x="504" y="384" xlink:href="#p" fill="#000000" />
<use x="516" y="384" xlink:href="#p" fill="#000000" />
<use x="36" y="396" xlink:href="#p" fill="#000000" />
<use x="60" y="396" xlink:href="#p" fill="#000000" />
<use x="84" y="396" xlink:href="#p" fill="#000000" />
<use x="108" y="396" xlink:href="#p" fill="#000000" />
<use x="120" y="396" xlink:href="#p" fill="#000000" />
<use x="132" y="396" xlink:href="#p" fill="#000000" />
<use x="144" y="396" xlink:href="#p" fill="#000000" />
<use x="156" y="396" xlink:href="#p" fill="#000000" />
<use x="168" y="396" xlink:href="#p" fill="#000000" />
<use x="180" y="396" xlink:href="#p" fill="#000000" />
<use x="192" y="396" xlink:href="#p" fill="#000000" />
<use x="216" y="396" xlink:href="#p" fill="#000000" />
<use x="252" y="396" xlink:href="#p" fill="#000000" />
<use x="264" y="396" xlink:href="#p" fill="#000000" />
<use x="276" y="396" xlink:href="#p" fill="#000000" />
<use x="288" y="396" xlink:href="#p" fill="#000000" />
<use x="348" y="396" xlink:href="#p" fill="#000000" />
<use x="360" y="396" xlink:href="#p" fill="#000000" />
<use x="372" y="396" xlink:href="#p" fill="#000000" />
<use x="396" y="396" xlink:href="#p" fill="#000000" />
<use x="456" y="396" xlink:href="#p" fill="#000000" />
<use x="504" y="396" xlink:href="#p" fill="#000000" />
<use x="516" y="396" xlink:href="#p" fill="#000000" />
<use x="48" y="408" xlink:href="#p" fill="#000000" />
<use x="72" y="408" xlink:href="#p" fill="#000000" />
<use x="120" y="408" xlink:href="#p" fill="#000000" />
<use x="132" y="408" xlink:href="#p" fill="#000000" />
<use x="168" y="408" xlink:href="#p" fill="#000000" />
<use x="192" y="408" xlink:href="#p" fill="#000000" />
<use x="240" y="408" xlink:href="#p" fill="#000000" />
<use x="252" y="408" xlink:href="#p" fill="#000000" />
<use x="276" y="408" xlink:href="#p" fill="#000000" />
<use x="312" y="408" xlink:href="#p" fill="#000000" />
<use x="336" y="408" xlink:href="#p" fill="#000000" />
<use x="348" y="408" xlink:href="#p" fill="#000000" />
<use x="372" y="408" xlink:href="#p" fill="#000000" />
<use x="384" y="408" xlink:href="#p" fill="#000000" />
<use x="396" y="408" xlink:href="#p" fill="#000000" />
<use x="408" y="408" xlink:href="#p" fill="#000000" />
<use x="432" y="408" xlink:href="#p" fill="#000000" />
<use x="444" y="408" xlink:href="#p" fill="#000000" />
<use x="468" y="408" xlink:href="#p" fill="#000000" />
<use x="480" y="408" xlink:href="#p" fill="#000000" />
<use x="36" y="420" xlink:href="#p" fill="#000000" />
<use x="72" y="420" xlink:href="#p" fill="#000000" />
<use x="96" y="420" xlink:href="#p" fill="#000000" />
<use x="108" y="420" xlink:href="#p" fill="#000000" />
<use x="120" y="420" xlink:href="#p" fill="#000000" />
<use x="132" y="420" xlink:href="#p" fill="#000000" />
<use x="180" y="420" xlink:href="#p" fill="#000000" />
<use x="204" y="420" xlink:href="#p" fill="#000000" />
<use x="252" y="420" xlink:href="#p" fill="#000000" />
<use x="264" y="420" xlink:href="#p" fill="#000000" />
<use x="324" y="420" xlink:href="#p" fill="#000000" />
<use x="348" y="420" xlink:href="#p" fill="#000000" />
<use x="360" y="420" xlink:href="#p" fill="#000000" />
<use x="372" y="420" xlink:href="#p" fill="#000000" />
<use x="420" y="420" xlink:href="#p" fill="#000000" />
<use x="432" y="420" xlink:href="#p" fill="#000000" />
<use x="444" y="420" xlink:href="#p" fill="#000000" />
<use x="456" y="420" xlink:href="#p" fill="#000000" />
<use x="468" y="420" xlink:href="#p" fill="#000000" />
<use x="516" y="420" xlink:href="#p" fill="#000000" />
<use x="132" y="432" xlink:href="#p" fill="#000000" />
<use x="156" y="432" xlink:href="#p" fill="#000000" />
<use x="168" y="432" xlink:href="#p" fill="#000000" />
<use x="192" y="432" xlink:href="#p" fill="#000000" />
<use x="204" y="432" xlink:href="#p" fill="#000000" />
<use x="216" y="432" xlink:href="#p" fill="#000000" />
<use x="228" y="432" xlink:href="#p" fill="#000000" />
<use x="252" y="432" xlink:href="#p" fill="#000000" />
<use x="264" y="432" xlink:href="#p" fill="#000000" />
<use x="288" y="432" xlink:href="#p" fill="#000000" />
<use x="312" y="432" xlink:href="#p" fill="#000000" />
<use x="324" y="432" xlink:href="#p" fill="#000000" />
<use x="348" y="432" xlink:href="#p" fill="#000000" />
<use x="360" y="432" xlink:href="#p" fill="#000000" />
<use x="384" y="432" xlink:href="#p" fill="#000000" />
<use x="420" y="432" xlink:href="#p" fill="#000000" />
<use x="468" y="432" xlink:href="#p" fill="#000000" />
<use x="492" y="432" xlink:href="#p" fill="#000000" />
<use x="504" y="432" xlink:href="#p" fill="#000000" />
<use x="516" y="432" xlink:href="#p" fill="#000000" />
<use x="36" y="444" xlink:href="#p" fill="#000000" />
<use x="48" y="444" xlink:href="#p" fill="#000000" />
<use x="60" y="444" xlink:href="#p" fill="#000000" />
<use x="72" y="444" xlink:href="#p" fill="#000000" />
<use x="84" y="444" xlink:href="#p" fill="#000000" />
<use x="96" y="444" xlink:href="#p" fill="#000000" />
<use x="108" y="444" xlink:href="#p" fill="#000000" />
<use x="168" y="444" xlink:href="#p" fill="#000000" />
<use x="192" y="444" xlink:href="#p" fill="#000000" />
<use x="228" y="444" xlink:href="#p" fill="#000000" />
<use x="240" y="444" xlink:href="#p" fill="#000000" />
<use x="300" y="444" xlink:href="#p" fill="#000000" />
<use x="312" y="444" xlink:href="#p" fill="#000000" />
<use x="324" y="444" xlink:href="#p" fill="#000000" />
<use x="336" y="444" xlink:href="#p" fill="#000000" />
<use x="372" y="444" xlink:href="#p" fill="#000000" />
<use x="396" y="444" xlink:href="#p" fill="#000000" />
<use x="408" y="444" xlink:href="#p" fill="#000000" />
<use x="420" y="444" xlink:href="#p" fill="#000000" />
<use x="444" y="444" xlink:href="#p" fill="#000000" />
<use x="468" y="444" xlink:href="#p" fill="#000000" />
<use x="480" y="444" xlink:href="#p" fill="#000000" />
<use x="516" y="444" xlink:href="#p" fill="#000000" />
<use x="36" y="456" xlink:href="#p" fill="#000000" />
<use x="108" y="456" xlink:href="#p" fill="#000000" />
<use x="144" y="456" xlink:href="#p" fill="#000000" />
<use x="168" y="456" xlink:href="#p" fill="#000000" />
<use x="180" y="456" xlink:href="#p" fill="#000000" />
<use x="192" y="456" xlink:href="#p" fill="#000000" />
<use x="204" y="456" xlink:href="#p" fill="#000000" />
<use x="216" y="456" xlink:href="#p" fill="#000000" />
<use x="264" y="456" xlink:href="#p" fill="#000000" />
<use x="288" y="456" xlink:href="#p" fill="#000000" />
<use x="300" y="456" xlink:href="#p" fill="#000000" />
<use x="324" y="456" xlink:href="#p" fill="#000000" />
<use x="372" y="456" xlink:href="#p" fill="#000000" />
<use x="384" y="456" xlink:href="#p" fill="#000000" />
<use x="396" y="456" xlink:href="#p" fill="#000000" />
<use x="408" y="456" xlink:href="#p" fill="#000000" />
<use x="420" y="456" xlink:href="#p" fill="#000000" />
<use x="468" y="456" xlink:href="#p" fill="#000000" />
<use x="516" y="456" xlink:href="#p" fill="#000000" />
<use x="36" y="468" xlink:href="#p" fill="#000000" />
<use x="60" y="468" xlink:href="#p" fill="#000000" />
<use x="72" y="468" xlink:href="#p" fill="#000000" />
<use x="84" y="468" xlink:href="#p" fill="#000000" />
<use x="108" y="468" xlink:href="#p" fill="#000000" />
<use x="132" y="468" xlink:href="#p" fill="#000000" />
<use x="144" y="468" xlink:href="#p" fill="#000000" />
<use x="156" y="468" xlink:href="#p" fill="#000000" />
<use x="192" y="468" xlink:href="#p" fill="#000000" />
<use x="204" y="468" xlink:href="#p" fill="#000000" />
<use x="216" y="468" xlink:href="#p" fill="#000000" />
<use x="276" y="468" xlink:href="#p" fill="#000000" />
<use x="300" y="468" xlink:href="#p" fill="#000000" />
<use x="312" y="468" xlink:href="#p" fill="#000000" />
<use x="324" y="468" xlink:href="#p" fill="#000000" />
<use x="372" y="468" xlink:href="#p" fill="#000000" />
<use x="396" y="468" xlink:href="#p" fill="#000000" />
<use x="420" y="468" xlink:href="#p" fill="#000000" />
<use x="432" y="468" xlink:href="#p" fill="#000000" />
<use x="444" y="468" xlink:href="#p" fill="#000000" />
<use x="456" y="468" xlink:href="#p" fill="#000000" />
<use x="468" y="468" xlink:href="#p" fill="#000000" />
<use x="504" y="468" xlink:href="#p" fill="#000000" />
<use x="516" y="468" xlink:href="#p" fill="#000000" />
<use x="36" y="480" xlink:href="#p" fill="#000000" />
<use x="60" y="480" xlink:href="#p" fill="#000000" />
<use x="72" y="480" xlink:href="#p" fill="#000000" />
<use x="84" y="480" xlink:href="#p" fill="#000000" />
<use x="108" y="480" xlink:href="#p" fill="#000000" />
<use x="144" y="480" xlink:href="#p" fill="#000000" />
<use x="180" y="480" xlink:href="#p" fill="#000000" />
<use x="192" y="480" xlink:href="#p" fill="#000000" />
<use x="204" y="480" xlink:href="#p" fill="#000000" />
<use x="216" y="480" xlink:href="#p" fill="#000000" />
<use x="228" y="480" xlink:href="#p" fill="#000000" />
<use x="240" y="480" xlink:href="#p" fill="#000000" />
<use x="276" y="480" xlink:href="#p" fill="#000000" />
<use x="288" y="480" xlink:href="#p" fill="#000000" />
<use x="300" y="480" xlink:href="#p" fill="#000000" />
<use x="324" y="480" xlink:href="#p" fill="#000000" />
<use x="372" y="480" xlink:href="#p" fill="#000000" />
<use x="396" y="480" xlink:href="#p" fill="#000000" />
<use x="432" y="480" xlink:href="#p" fill="#000000" />
<use x="468" y="480" xlink:href="#p" fill="#000000" />
<use x="480" y="480" xlink:href="#p" fill="#000000" />
<use x="504" y="480" xlink:href="#p" fill="#000000" />
<use x="36" y="492" xlink:href="#p" fill="#000000" />
<use x="60" y="492" xlink:href="#p" fill="#000000" />
<use x="72" y="492" xlink:href="#p" fill="#000000" />
<use x="84" y="492" xlink:href="#p" fill="#000000" />
<use x="108" y="492" xlink:href="#p" fill="#000000" />
<use x="132" y="492" xlink:href="#p" fill="#000000" />
<use x="156" y="492" xlink:href="#p" fill="#000000" />
<use x="168" y="492" xlink:href="#p" fill="#000000" />
<use x="180" y="492" xlink:href="#p" fill="#000000" />
<use x="216" y="492" xlink:href="#p" fill="#000000" />
<use x="252" y="492" xlink:href="#p" fill="#000000" />
<use x="276" y="492" xlink:href="#p" fill="#000000" />
<use x="288" y="492" xlink:href="#p" fill="#000000" />
<use x="324" y="492" xlink:href="#p" fill="#000000" />
<use x="336" y="492" xlink:href="#p" fill="#000000" />
<use x="372" y="492" xlink:href="#p" fill="#000000" />
<use x="384" y="492" xlink:href="#p" fill="#000000" />
<use x="396" y="492" xlink:href="#p" fill="#000000" />
<use x="408" y="492" xlink:href="#p" fill="#000000" />
<use x="420" y="492" xlink:href="#p" fill="#000000" />
<use x="456" y="492" xlink:href="#p" fill="#000000" />
<use x="468" y="492" xlink:href="#p" fill="#000000" />
<use x="480" y="492" xlink:href="#p" fill="#000000" />
<use x="492" y="492" xlink:href="#p" fill="#000000" />
<use x="504" y="492" xlink:href="#p" fill="#000000" />
<use x="516" y="492" xlink:href="#p" fill="#000000" />
<use x="36" y="504" xlink:href="#p" fill="#000000" />
<use x="108" y="504" xlink:href="#p" fill="#000000" />
<use x="156" y="504" xlink:href="#p" fill="#000000" />
<use x="192" y="504" xlink:href="#p" fill="#000000" />
<use x="216" y="504" xlink:href="#p" fill="#000000" />
<use x="240" y="504" xlink:href="#p" fill="#000000" />
<use x="252" y="504" xlink:href="#p" fill="#000000" />
<use x="264" y="504" xlink:href="#p" fill="#000000" />
<use x="276" y="504" xlink:href="#p" fill="#000000" />
<use x="288" y="504" xlink:href="#p" fill="#000000" />
<use x="312" y="504" xlink:href="#p" fill="#000000" />
<use x="324" y="504" xlink:href="#p" fill="#000000" />
<use x="336" y="504" xlink:href="#p" fill="#000000" />
<use x="348" y="504" xlink:href="#p" fill="#000000" />
<use x="360" y="504" xlink:href="#p" fill="#000000" />
<use x="372" y="504" xlink:href="#p" fill="#000000" />
<use x="384" y="504" xlink:href="#p" fill="#000000" />
<use x="408" y="504" xlink:href="#p" fill="#000000" />
<use x="420" y="504" xlink:href="#p" fill="#000000" />
<use x="444" y="504" xlink:href="#p" fill="#000000" />
<use x="456" y="504" xlink:href="#p" fill="#000000" />
<use x="480" y="504" xlink:href="#p" fill="#000000" />
<use x="504" y="504" xlink:href="#p" fill="#000000" />
<use x="36" y="516" xlink:href="#p" fill="#000000" />
<use x="48" y="516" xlink:href="#p" fill="#000000" />
<use x="60" y="516" xlink:href="#p" fill="#000000" />
<use x="72" y="516" xlink:href="#p" fill="#000000" />
<use x="84" y="516" xlink:href="#p" fill="#000000" />
<use x="96" y="516" xlink:href="#p" fill="#000000" />
<use x="108" y="516" xlink:href="#p" fill="#000000" />
<use x="132" y="516" xlink:href="#p" fill="#000000" />
<use x="144" y="516" xlink:href="#p" fill="#000000" />
<use x="180" y="516" xlink:href="#p" fill="#000000" />
<use x="204" y="516" xlink:href="#p" fill="#000000" />
<use x="216" y="516" xlink:href="#p" fill="#000000" />
<use x="228" y="516" xlink:href="#p" fill="#000000" />
<use x="240" y="516" xlink:href="#p" fill="#000000" />
<use x="252" y="516" xlink:href="#p" fill="#000000" />
<use x="288" y="516" xlink:href="#p" fill="#000000" />
<use x="300" y="516" xlink:href="#p" fill="#000000" />
<use x="324" y="516" xlink:href="#p" fill="#000000" />
<use x="336" y="516" xlink:href="#p" fill="#000000" />
<use x="384" y="516" xlink:href="#p" fill="#000000" />
<use x="408" y="516" xlink:href="#p" fill="#000000" />
<use x="420" y="516" xlink:href="#p" fill="#000000" />
<use x="432" y="516" xlink:href="#p" fill="#000000" />
<use x="444" y="516" xlink:href="#p" fill="#000000" />
<use x="456" y="516" xlink:href="#p" fill="#000000" />
<use x="468" y="516" xlink:href="#p" fill="#000000" />
<use x="480" y="516" xlink:href="#p" fill="#000000" />
<use x="492" y="516" xlink:href="#p" fill="#000000" />
<use x="504" y="516" xlink:href="#p" fill="#000000" />
<use x="516" y="516" xlink:href="#p" fill="#000000" />
</g>
</svg>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<svg width="722" height="70" viewBox="0 0 722 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="722" height="70" fill="url(#paint0_linear_94_288)"/>
<path d="M275.11 23.63H289.63V27.05H275.11V23.63ZM274.09 31.61H290.56V35.06H274.09V31.61ZM283.84 32.81C284.22 34.37 284.74 35.84 285.4 37.22C286.08 38.6 286.9 39.83 287.86 40.91C288.84 41.97 289.98 42.82 291.28 43.46C291.02 43.7 290.73 43.99 290.41 44.33C290.09 44.69 289.79 45.06 289.51 45.44C289.23 45.84 289 46.2 288.82 46.52C287.4 45.7 286.17 44.64 285.13 43.34C284.11 42.04 283.24 40.56 282.52 38.9C281.82 37.22 281.24 35.4 280.78 33.44L283.84 32.81ZM280.27 18.53H283.9V26.96C283.9 28.28 283.84 29.65 283.72 31.07C283.6 32.49 283.37 33.91 283.03 35.33C282.69 36.75 282.18 38.15 281.5 39.53C280.82 40.91 279.93 42.21 278.83 43.43C277.73 44.65 276.35 45.77 274.69 46.79C274.53 46.49 274.3 46.15 274 45.77C273.7 45.41 273.38 45.05 273.04 44.69C272.72 44.35 272.42 44.08 272.14 43.88C273.98 42.78 275.44 41.55 276.52 40.19C277.6 38.83 278.41 37.39 278.95 35.87C279.49 34.35 279.84 32.83 280 31.31C280.18 29.79 280.27 28.34 280.27 26.96V18.53ZM262.93 33.74C263.81 33.58 264.81 33.37 265.93 33.11C267.05 32.83 268.22 32.54 269.44 32.24C270.68 31.94 271.91 31.64 273.13 31.34L273.55 34.61C271.83 35.09 270.09 35.56 268.33 36.02C266.57 36.48 264.96 36.9 263.5 37.28L262.93 33.74ZM263.26 24.23H273.61V27.56H263.26V24.23ZM266.83 18.5H270.34V42.68C270.34 43.52 270.25 44.18 270.07 44.66C269.89 45.16 269.54 45.54 269.02 45.8C268.52 46.06 267.9 46.23 267.16 46.31C266.42 46.41 265.53 46.46 264.49 46.46C264.45 46 264.33 45.45 264.13 44.81C263.93 44.19 263.72 43.65 263.5 43.19C264.08 43.21 264.63 43.22 265.15 43.22C265.69 43.22 266.06 43.22 266.26 43.22C266.64 43.22 266.83 43.03 266.83 42.65V18.5ZM293.35 28.4H320.68V31.73H293.35V28.4ZM296.08 22.13H313.06V25.43H296.08V22.13ZM302.89 18.5H306.64V30.23H302.89V18.5ZM314.44 33.71L317.41 36.32C316.05 36.86 314.57 37.38 312.97 37.88C311.37 38.36 309.74 38.81 308.08 39.23C306.44 39.63 304.84 39.99 303.28 40.31C303.2 39.93 303.04 39.47 302.8 38.93C302.58 38.39 302.37 37.94 302.17 37.58C303.65 37.26 305.14 36.89 306.64 36.47C308.16 36.05 309.59 35.6 310.93 35.12C312.29 34.64 313.46 34.17 314.44 33.71ZM316.27 19.67L319.63 21.32C317.67 24.2 315.39 26.85 312.79 29.27C310.21 31.67 307.41 33.81 304.39 35.69C301.39 37.55 298.27 39.15 295.03 40.49C294.87 40.21 294.63 39.88 294.31 39.5C294.01 39.12 293.7 38.74 293.38 38.36C293.08 37.98 292.8 37.66 292.54 37.4C295.8 36.24 298.9 34.79 301.84 33.05C304.8 31.31 307.51 29.32 309.97 27.08C312.43 24.82 314.53 22.35 316.27 19.67ZM301 33.74H304.75V41.66C304.75 42.06 304.81 42.36 304.93 42.56C305.05 42.74 305.29 42.86 305.65 42.92C306.03 42.98 306.58 43.01 307.3 43.01C307.52 43.01 307.83 43.01 308.23 43.01C308.65 43.01 309.13 43.01 309.67 43.01C310.21 43.01 310.75 43.01 311.29 43.01C311.83 43.01 312.32 43.01 312.76 43.01C313.22 43.01 313.58 43.01 313.84 43.01C314.46 43.01 314.93 42.92 315.25 42.74C315.57 42.56 315.8 42.21 315.94 41.69C316.08 41.15 316.18 40.35 316.24 39.29C316.54 39.49 316.89 39.68 317.29 39.86C317.69 40.02 318.1 40.17 318.52 40.31C318.94 40.45 319.31 40.55 319.63 40.61C319.47 42.09 319.2 43.24 318.82 44.06C318.46 44.88 317.91 45.45 317.17 45.77C316.43 46.09 315.4 46.25 314.08 46.25C313.88 46.25 313.54 46.25 313.06 46.25C312.6 46.25 312.06 46.25 311.44 46.25C310.84 46.25 310.24 46.25 309.64 46.25C309.06 46.25 308.53 46.25 308.05 46.25C307.57 46.25 307.23 46.25 307.03 46.25C305.47 46.25 304.25 46.11 303.37 45.83C302.49 45.57 301.87 45.11 301.51 44.45C301.17 43.79 301 42.87 301 41.69V33.74Z" fill="white"/>
<path d="M177.13 26.98H189.13V30.4H177.13V26.98ZM187.69 26.98H191.11C191.11 26.98 191.11 27.09 191.11 27.31C191.11 27.51 191.11 27.74 191.11 28C191.11 28.24 191.11 28.44 191.11 28.6C191.03 31.7 190.95 34.33 190.87 36.49C190.81 38.63 190.73 40.41 190.63 41.83C190.53 43.23 190.39 44.32 190.21 45.1C190.03 45.88 189.82 46.45 189.58 46.81C189.24 47.31 188.87 47.67 188.47 47.89C188.09 48.11 187.63 48.26 187.09 48.34C186.59 48.42 185.97 48.46 185.23 48.46C184.51 48.48 183.77 48.47 183.01 48.43C182.99 47.95 182.88 47.37 182.68 46.69C182.48 46.03 182.23 45.47 181.93 45.01C182.67 45.05 183.35 45.08 183.97 45.1C184.59 45.12 185.06 45.13 185.38 45.13C185.64 45.13 185.85 45.1 186.01 45.04C186.19 44.96 186.35 44.82 186.49 44.62C186.67 44.4 186.82 43.94 186.94 43.24C187.06 42.52 187.16 41.51 187.24 40.21C187.34 38.89 187.42 37.21 187.48 35.17C187.56 33.11 187.63 30.63 187.69 27.73V26.98ZM181.09 20.53H184.63C184.63 23.03 184.6 25.43 184.54 27.73C184.48 30.03 184.32 32.21 184.06 34.27C183.82 36.31 183.41 38.22 182.83 40C182.27 41.78 181.48 43.4 180.46 44.86C179.44 46.32 178.12 47.6 176.5 48.7C176.24 48.26 175.86 47.77 175.36 47.23C174.88 46.71 174.42 46.29 173.98 45.97C175.48 44.99 176.68 43.86 177.58 42.58C178.5 41.3 179.21 39.87 179.71 38.29C180.21 36.71 180.55 35 180.73 33.16C180.93 31.3 181.04 29.32 181.06 27.22C181.08 25.1 181.09 22.87 181.09 20.53ZM165.85 21.76H176.32V41.35H172.99V25H169.03V43.24H165.85V21.76ZM163.72 42.07C164.88 41.85 166.21 41.6 167.71 41.32C169.23 41.02 170.84 40.69 172.54 40.33C174.26 39.97 175.95 39.61 177.61 39.25L177.97 42.46C176.39 42.86 174.79 43.26 173.17 43.66C171.55 44.04 169.99 44.41 168.49 44.77C166.99 45.11 165.61 45.44 164.35 45.76L163.72 42.07ZM167.5 28.03H174.67V31.18H167.5V28.03ZM167.5 34.24H174.67V37.39H167.5V34.24ZM206.17 27.43L220.39 25.24L220.96 28.42L206.77 30.67L206.17 27.43ZM205.54 33.91L221.2 31.06L221.77 34.18L206.11 37.12L205.54 33.91ZM210.13 20.41H213.73C213.69 22.39 213.72 24.38 213.82 26.38C213.92 28.38 214.07 30.3 214.27 32.14C214.49 33.96 214.75 35.65 215.05 37.21C215.37 38.77 215.72 40.14 216.1 41.32C216.5 42.48 216.92 43.39 217.36 44.05C217.8 44.71 218.25 45.04 218.71 45.04C218.91 45.04 219.07 44.94 219.19 44.74C219.33 44.54 219.44 44.21 219.52 43.75C219.6 43.29 219.66 42.66 219.7 41.86C220.02 42.26 220.42 42.64 220.9 43C221.4 43.36 221.84 43.64 222.22 43.84C222.04 45.08 221.79 46.03 221.47 46.69C221.17 47.37 220.76 47.84 220.24 48.1C219.74 48.38 219.09 48.52 218.29 48.52C217.29 48.52 216.39 48.14 215.59 47.38C214.79 46.62 214.09 45.57 213.49 44.23C212.89 42.87 212.38 41.3 211.96 39.52C211.54 37.72 211.2 35.77 210.94 33.67C210.68 31.57 210.48 29.4 210.34 27.16C210.22 24.9 210.15 22.65 210.13 20.41ZM214.21 22.66L216.31 20.8C216.71 21.02 217.15 21.29 217.63 21.61C218.11 21.91 218.57 22.22 219.01 22.54C219.45 22.86 219.81 23.15 220.09 23.41L217.93 25.51C217.51 25.11 216.93 24.64 216.19 24.1C215.47 23.56 214.81 23.08 214.21 22.66ZM194.17 22H206.32V25.24H194.17V22ZM198.34 27.97H203.41V31.18H198.34V27.97ZM197.32 37.24L199.18 34.87C199.58 35.13 200.01 35.42 200.47 35.74C200.95 36.06 201.41 36.38 201.85 36.7C202.29 37.02 202.65 37.31 202.93 37.57L200.98 40.24C200.72 39.98 200.38 39.67 199.96 39.31C199.54 38.95 199.1 38.59 198.64 38.23C198.18 37.87 197.74 37.54 197.32 37.24ZM197.89 22.96L201.22 23.56C200.9 25.52 200.48 27.45 199.96 29.35C199.46 31.23 198.86 32.99 198.16 34.63C197.46 36.25 196.65 37.68 195.73 38.92C195.59 38.68 195.38 38.38 195.1 38.02C194.84 37.66 194.56 37.3 194.26 36.94C193.96 36.56 193.69 36.27 193.45 36.07C194.25 35.05 194.93 33.85 195.49 32.47C196.07 31.07 196.56 29.57 196.96 27.97C197.36 26.35 197.67 24.68 197.89 22.96ZM202.54 27.97H203.17L203.77 27.88L205.81 28.45C205.25 33.53 204.15 37.71 202.51 40.99C200.87 44.25 198.78 46.68 196.24 48.28C196.1 48.04 195.88 47.75 195.58 47.41C195.3 47.09 195 46.77 194.68 46.45C194.38 46.13 194.11 45.89 193.87 45.73C196.31 44.31 198.26 42.2 199.72 39.4C201.18 36.58 202.12 32.99 202.54 28.63V27.97ZM218.86 35.47L221.89 36.82C220.73 38.6 219.34 40.2 217.72 41.62C216.1 43.04 214.32 44.29 212.38 45.37C210.44 46.43 208.4 47.33 206.26 48.07C206.02 47.61 205.7 47.1 205.3 46.54C204.9 46 204.49 45.52 204.07 45.1C206.11 44.52 208.07 43.78 209.95 42.88C211.83 41.96 213.53 40.88 215.05 39.64C216.59 38.38 217.86 36.99 218.86 35.47Z" fill="white"/>
<path d="M363.2 23.51H378.17V26.81H363.2V23.51ZM369.11 18.47H372.65V42.83C372.65 43.69 372.54 44.35 372.32 44.81C372.12 45.29 371.76 45.66 371.24 45.92C370.72 46.18 370.08 46.34 369.32 46.4C368.56 46.48 367.62 46.52 366.5 46.52C366.44 46.08 366.31 45.55 366.11 44.93C365.91 44.33 365.7 43.81 365.48 43.37C366.1 43.39 366.71 43.41 367.31 43.43C367.91 43.43 368.31 43.43 368.51 43.43C368.73 43.43 368.88 43.38 368.96 43.28C369.06 43.18 369.11 43.03 369.11 42.83V18.47ZM362.69 38.96C363.59 38.4 364.67 37.69 365.93 36.83C367.19 35.97 368.47 35.08 369.77 34.16L370.97 37.07C369.89 37.89 368.76 38.72 367.58 39.56C366.4 40.4 365.31 41.17 364.31 41.87L362.69 38.96ZM363.65 29.42L366.32 28.19C366.68 28.71 367.03 29.27 367.37 29.87C367.73 30.47 368.05 31.06 368.33 31.64C368.63 32.2 368.85 32.71 368.99 33.17L366.14 34.55C366.02 34.09 365.82 33.57 365.54 32.99C365.28 32.39 364.98 31.78 364.64 31.16C364.32 30.52 363.99 29.94 363.65 29.42ZM374.66 27.83L377.75 29.06C377.29 29.74 376.8 30.43 376.28 31.13C375.78 31.81 375.27 32.46 374.75 33.08C374.23 33.68 373.74 34.22 373.28 34.7L370.52 33.5C371 33.02 371.49 32.46 371.99 31.82C372.49 31.16 372.98 30.48 373.46 29.78C373.94 29.08 374.34 28.43 374.66 27.83ZM372.95 20.06L375.44 18.59C375.98 19.09 376.52 19.66 377.06 20.3C377.6 20.94 378.01 21.51 378.29 22.01L375.65 23.66C375.43 23.14 375.06 22.55 374.54 21.89C374.02 21.21 373.49 20.6 372.95 20.06ZM370.28 35.6L372.65 33.53C373.31 33.99 374 34.5 374.72 35.06C375.46 35.62 376.16 36.18 376.82 36.74C377.48 37.3 378.02 37.82 378.44 38.3L375.89 40.61C375.51 40.13 375.01 39.6 374.39 39.02C373.77 38.42 373.09 37.82 372.35 37.22C371.63 36.62 370.94 36.08 370.28 35.6ZM380.09 24.05H391.04V27.38H380.09V24.05ZM380.93 18.53L384.5 19.01C384.22 21.09 383.84 23.12 383.36 25.1C382.9 27.06 382.32 28.88 381.62 30.56C380.94 32.22 380.13 33.68 379.19 34.94C379.03 34.7 378.78 34.41 378.44 34.07C378.12 33.73 377.78 33.4 377.42 33.08C377.08 32.74 376.77 32.47 376.49 32.27C377.33 31.21 378.03 29.96 378.59 28.52C379.17 27.06 379.65 25.48 380.03 23.78C380.41 22.08 380.71 20.33 380.93 18.53ZM382.13 27.26C382.59 29.58 383.22 31.79 384.02 33.89C384.84 35.97 385.85 37.84 387.05 39.5C388.27 41.16 389.72 42.48 391.4 43.46C391.12 43.7 390.81 44 390.47 44.36C390.13 44.74 389.81 45.13 389.51 45.53C389.21 45.93 388.96 46.31 388.76 46.67C387 45.43 385.5 43.86 384.26 41.96C383.04 40.06 382.02 37.91 381.2 35.51C380.4 33.11 379.74 30.55 379.22 27.83L382.13 27.26ZM386.51 24.2L389.6 25.82C389.28 29.1 388.69 32.11 387.83 34.85C386.99 37.59 385.79 39.97 384.23 41.99C382.67 44.01 380.66 45.59 378.2 46.73C378.02 46.41 377.78 46.06 377.48 45.68C377.18 45.32 376.86 44.96 376.52 44.6C376.18 44.24 375.85 43.94 375.53 43.7C378.01 42.76 380 41.38 381.5 39.56C383 37.72 384.13 35.51 384.89 32.93C385.67 30.35 386.21 27.44 386.51 24.2ZM418.13 18.29L420.62 21.14C419.2 21.56 417.64 21.94 415.94 22.28C414.24 22.6 412.51 22.88 410.75 23.12C408.99 23.34 407.27 23.54 405.59 23.72C405.53 23.3 405.4 22.81 405.2 22.25C405 21.67 404.8 21.2 404.6 20.84C406.22 20.66 407.85 20.44 409.49 20.18C411.15 19.92 412.72 19.63 414.2 19.31C415.7 18.99 417.01 18.65 418.13 18.29ZM418.16 20.9C418.24 23.08 418.35 25.26 418.49 27.44C418.63 29.62 418.82 31.71 419.06 33.71C419.3 35.71 419.61 37.55 419.99 39.23C420.37 40.91 420.85 42.34 421.43 43.52C421.01 43.82 420.54 44.23 420.02 44.75C419.52 45.27 419.12 45.77 418.82 46.25C418.16 44.81 417.62 43.17 417.2 41.33C416.78 39.47 416.44 37.45 416.18 35.27C415.92 33.09 415.72 30.81 415.58 28.43C415.44 26.03 415.32 23.59 415.22 21.11L418.16 20.9ZM412.46 37.58L414.83 36.89C415.13 37.77 415.42 38.72 415.7 39.74C416 40.74 416.26 41.72 416.48 42.68C416.7 43.62 416.87 44.48 416.99 45.26L414.47 46.01C414.37 45.25 414.21 44.39 413.99 43.43C413.79 42.45 413.55 41.45 413.27 40.43C413.01 39.41 412.74 38.46 412.46 37.58ZM404.6 20.84H407.78V26.33C407.78 27.69 407.72 29.23 407.6 30.95C407.5 32.67 407.31 34.45 407.03 36.29C406.77 38.11 406.38 39.9 405.86 41.66C405.34 43.42 404.65 45.01 403.79 46.43C403.61 46.23 403.35 46 403.01 45.74C402.69 45.48 402.36 45.22 402.02 44.96C401.68 44.72 401.39 44.56 401.15 44.48C401.95 43.12 402.58 41.66 403.04 40.1C403.5 38.52 403.84 36.92 404.06 35.3C404.28 33.66 404.42 32.07 404.48 30.53C404.56 28.99 404.6 27.59 404.6 26.33V20.84ZM408.95 45.8L408.65 43.07L409.82 42.08L415.34 40.67C415.4 41.09 415.49 41.57 415.61 42.11C415.73 42.63 415.84 43.06 415.94 43.4C414.58 43.78 413.48 44.1 412.64 44.36C411.8 44.64 411.13 44.86 410.63 45.02C410.15 45.2 409.78 45.35 409.52 45.47C409.28 45.59 409.09 45.7 408.95 45.8ZM408.95 45.8C408.81 45.58 408.6 45.31 408.32 44.99C408.04 44.67 407.75 44.35 407.45 44.03C407.15 43.73 406.89 43.5 406.67 43.34C407.53 42.12 408.19 40.79 408.65 39.35C409.13 37.89 409.48 36.4 409.7 34.88C409.92 33.34 410.05 31.84 410.09 30.38C410.13 28.92 410.15 27.57 410.15 26.33V21.92H413.18V26.39C413.18 27.57 413.15 28.9 413.09 30.38C413.05 31.84 412.92 33.36 412.7 34.94C412.5 36.52 412.18 38.1 411.74 39.68C411.32 41.26 410.71 42.76 409.91 44.18C409.63 44.32 409.4 44.55 409.22 44.87C409.04 45.21 408.95 45.52 408.95 45.8ZM392.81 33.89C393.69 33.71 394.7 33.48 395.84 33.2C396.98 32.9 398.18 32.58 399.44 32.24C400.72 31.88 401.99 31.53 403.25 31.19L403.64 34.34C401.92 34.88 400.18 35.42 398.42 35.96C396.66 36.48 395.05 36.95 393.59 37.37L392.81 33.89ZM393.68 20.18H401.3V23.51H393.68V20.18ZM396.59 27.08H400.01V42.5C400.01 43.3 399.92 43.95 399.74 44.45C399.58 44.97 399.25 45.38 398.75 45.68C398.27 45.96 397.69 46.14 397.01 46.22C396.33 46.3 395.53 46.34 394.61 46.34C394.55 45.84 394.42 45.26 394.22 44.6C394.04 43.94 393.83 43.36 393.59 42.86C394.13 42.88 394.64 42.89 395.12 42.89C395.62 42.89 395.96 42.89 396.14 42.89C396.44 42.89 396.59 42.75 396.59 42.47V27.08ZM400.61 20.18H401.45L402.11 20L404.45 21.59C403.97 22.49 403.41 23.42 402.77 24.38C402.15 25.32 401.5 26.22 400.82 27.08C400.14 27.94 399.47 28.69 398.81 29.33C398.55 28.99 398.19 28.6 397.73 28.16C397.29 27.72 396.91 27.36 396.59 27.08C397.11 26.54 397.63 25.91 398.15 25.19C398.67 24.45 399.15 23.7 399.59 22.94C400.03 22.18 400.37 21.5 400.61 20.9V20.18Z" fill="white"/>
<path d="M482.27 21.71H501.71V24.83H482.27V21.71ZM488.81 19.28L492.08 18.38C492.44 19 492.78 19.69 493.1 20.45C493.44 21.21 493.68 21.86 493.82 22.4L490.37 23.45C490.27 22.91 490.06 22.25 489.74 21.47C489.44 20.67 489.13 19.94 488.81 19.28ZM495.5 23.15L499.1 23.72C498.26 26.02 497.09 27.91 495.59 29.39C494.11 30.87 492.3 32.05 490.16 32.93C488.04 33.81 485.62 34.5 482.9 35C482.82 34.72 482.69 34.39 482.51 34.01C482.35 33.61 482.17 33.21 481.97 32.81C481.77 32.41 481.58 32.09 481.4 31.85C483.84 31.53 486.01 31.04 487.91 30.38C489.83 29.72 491.43 28.81 492.71 27.65C494.01 26.47 494.94 24.97 495.5 23.15ZM494.45 34.25H497.96V46.25H494.45V34.25ZM485.81 34.25H489.32V38C489.32 38.72 489.24 39.47 489.08 40.25C488.92 41.03 488.62 41.8 488.18 42.56C487.74 43.32 487.1 44.03 486.26 44.69C485.42 45.35 484.32 45.92 482.96 46.4C482.78 46.18 482.53 45.93 482.21 45.65C481.91 45.37 481.59 45.09 481.25 44.81C480.93 44.55 480.64 44.34 480.38 44.18C481.58 43.78 482.53 43.33 483.23 42.83C483.95 42.31 484.5 41.77 484.88 41.21C485.26 40.65 485.51 40.09 485.63 39.53C485.75 38.95 485.81 38.41 485.81 37.91V34.25ZM487.76 23.54C488.9 25.84 490.69 27.62 493.13 28.88C495.59 30.14 498.73 30.93 502.55 31.25C502.29 31.51 502.02 31.83 501.74 32.21C501.48 32.59 501.23 32.98 500.99 33.38C500.75 33.78 500.56 34.14 500.42 34.46C497.74 34.1 495.4 33.51 493.4 32.69C491.4 31.85 489.69 30.74 488.27 29.36C486.87 27.98 485.7 26.29 484.76 24.29L487.76 23.54ZM475.31 21.56L477.56 19.19C478.06 19.49 478.6 19.83 479.18 20.21C479.78 20.59 480.35 20.97 480.89 21.35C481.43 21.73 481.88 22.08 482.24 22.4L479.87 25.07C479.55 24.73 479.13 24.35 478.61 23.93C478.09 23.51 477.53 23.09 476.93 22.67C476.35 22.25 475.81 21.88 475.31 21.56ZM473.96 29.06L476.21 26.72C476.73 27.04 477.28 27.41 477.86 27.83C478.46 28.23 479.03 28.64 479.57 29.06C480.11 29.46 480.55 29.83 480.89 30.17L478.49 32.78C478.19 32.42 477.78 32.03 477.26 31.61C476.74 31.17 476.18 30.73 475.58 30.29C475 29.83 474.46 29.42 473.96 29.06ZM474.41 43.85C474.87 43.09 475.37 42.2 475.91 41.18C476.45 40.16 476.99 39.07 477.53 37.91C478.09 36.75 478.61 35.61 479.09 34.49L481.91 36.68C481.49 37.72 481.04 38.78 480.56 39.86C480.1 40.94 479.62 42.01 479.12 43.07C478.62 44.11 478.12 45.11 477.62 46.07L474.41 43.85ZM510.08 27.53H526.01V30.68H510.08V27.53ZM516.32 23.96H519.65V41.21H516.32V23.96ZM515.72 28.91L518.33 29.75C517.81 31.03 517.17 32.28 516.41 33.5C515.67 34.72 514.85 35.84 513.95 36.86C513.07 37.88 512.13 38.73 511.13 39.41C510.89 39.03 510.55 38.59 510.11 38.09C509.67 37.57 509.27 37.15 508.91 36.83C509.83 36.29 510.72 35.6 511.58 34.76C512.44 33.92 513.23 33 513.95 32C514.67 30.98 515.26 29.95 515.72 28.91ZM505.19 19.82H530.9V46.76H527.12V23.15H508.79V46.76H505.19V19.82ZM507.29 42.11H528.56V45.44H507.29V42.11ZM517.52 32.3L519.59 30.32C520.23 30.82 520.88 31.36 521.54 31.94C522.22 32.52 522.88 33.11 523.52 33.71C524.18 34.29 524.78 34.85 525.32 35.39C525.88 35.91 526.36 36.38 526.76 36.8L524.66 39.2C524.28 38.76 523.81 38.26 523.25 37.7C522.69 37.12 522.09 36.52 521.45 35.9C520.81 35.26 520.15 34.64 519.47 34.04C518.79 33.42 518.14 32.84 517.52 32.3Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_94_288" x1="0" y1="35" x2="722" y2="35" gradientUnits="userSpaceOnUse">
<stop stop-color="#BF0000" stop-opacity="0"/>
<stop offset="0.355769" stop-color="#BE3900"/>
<stop offset="0.658654" stop-color="#A00000"/>
<stop offset="0.961538" stop-color="#BE3900" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>
<svg width="117" height="50" viewBox="0 0 117 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M109 0C113.418 0 117 3.58172 117 8V22C117 26.4183 113.418 30 109 30H103.547L92 50L80.4531 30H8C3.58172 30 2.25497e-07 26.4183 0 22V8C0 3.58172 3.58172 2.1341e-07 8 0H109Z" fill="white" fill-opacity="0.7"/>
</svg>
<script setup lang="ts">
import { nextTick, onMounted, onUnmounted, ref } from "vue";
import Loading from "./views/LoadingView.vue";
import Rank1 from "./views/Rank1View.vue";
import Rank2 from "./views/Rank2View.vue";
import { useAdminGameSocket } from "@/composables/useAdminGameSocket";
import { onSocketMessage } from "@/commons/ws";
import type Player from "@/commons/player.ts";
type GameScreen = "loading" | "rank1" | "rank2";
const PLAYER_LIMIT = 20;
const RANK_LIMIT = 10;
const emptyLoadingPlayer = () => ({
score: 0,
telephone: "",
userid: "",
wechat_id: "",
nickname: "虚位以待",
avatar: "",
});
const emptyRankPlayer = (index: number): Player => ({
active: false,
wechat_id: `empty-${index}`,
nickname: "虚位以待",
avatar: "",
score: 0,
});
const screen = ref<GameScreen>("loading");
const loadingPlayers = ref<any[]>(
Array.from({ length: PLAYER_LIMIT }, emptyLoadingPlayer),
);
const playerCount = ref(0);
const rankPlayers = ref<Player[]>(
Array.from({ length: RANK_LIMIT }, (_, index) => emptyRankPlayer(index)),
);
const rank1Ref = ref<InstanceType<typeof Rank1> | null>(null);
let isPlayingStartAnimation = false;
// H5 操控传来的加速度: { [userid]: boost(叠加系数, 0~N) }
const horseBoosts = ref<Record<string, number>>({});
let offHorseBoost: (() => void) | undefined;
// 监听 WebSocket 获取 H5 玩家操控的马匹加速度
offHorseBoost = onSocketMessage((evt, payload) => {
const data = payload?.data ?? payload;
if (!Array.isArray(data)) return;
const boosts: Record<string, number> = {};
let hasBoost = false;
data.forEach((item: any) => {
const id = item.userid || item.wechat_id || "";
if (!id) return;
// 尝试多种字段名: boost / acceleration / speed / progress
const raw = item.boost ?? item.acceleration ?? item.speed ?? item.progress;
if (raw === undefined || raw === null) return;
const val = Number(raw);
if (isNaN(val)) return;
// boost 范围 0~N,0 表示无加速(基准60秒跑完),>0 越快
boosts[id] = Math.max(0, val);
hasBoost = true;
});
if (hasBoost) {
horseBoosts.value = { ...boosts };
}
});
const confirmRefresh = (event: BeforeUnloadEvent) => {
event.preventDefault();
event.returnValue = "";
};
const renderPlayers = (data: any) => {
const players = Array.isArray(data?.list) ? data.list : [];
playerCount.value = Number(data?.count ?? players.length);
loadingPlayers.value = Array.from(
{ length: PLAYER_LIMIT },
(_, index) => players[index] ?? emptyLoadingPlayer(),
);
};
const updateRankPlayers = (data: any) => {
if (!Array.isArray(data)) return;
rankPlayers.value = Array.from(
{ length: RANK_LIMIT },
(_, index) => data[index] ?? emptyRankPlayer(index),
);
};
const gotoLoading = () => {
screen.value = "loading";
};
const gotoRank1WithIntro = async () => {
if (isPlayingStartAnimation) return;
isPlayingStartAnimation = true;
screen.value = "rank1";
await nextTick();
await rank1Ref.value?.startIntro();
screen.value = "rank2";
isPlayingStartAnimation = false;
};
function handleRoomState(data: any) {
if (Array.isArray(data?.list)) {
renderPlayers(data);
}
switch (data?.status) {
case 0:
gotoLoading();
createRoom(1);
break;
case 1:
gotoLoading();
break;
case 2:
screen.value = "rank1";
break;
case 3:
screen.value = "rank2";
break;
}
}
const { startGame, createRoom, requestRoomState } = useAdminGameSocket({
gameId: "game4",
// loginRedirectPath: '/game4',
onGameStartRejected: gotoLoading,
onRoomState: handleRoomState,
onRoomJoin: (data) => {
renderPlayers(data);
gotoLoading();
},
onGameStart: gotoRank1WithIntro,
onRoomRank: updateRankPlayers,
});
const nextRound = () => {
gotoLoading();
createRoom(1);
setTimeout(() => {
requestRoomState();
}, 200);
};
onMounted(() => {
window.addEventListener("beforeunload", confirmRefresh);
});
onUnmounted(() => {
window.removeEventListener("beforeunload", confirmRefresh);
offHorseBoost?.();
});
</script>
<template>
<Loading
v-if="screen === 'loading'"
:players="loadingPlayers"
:player-count="playerCount"
@start="startGame"
/>
<!-- v-else-if="screen === 'rank1'" -->
<Rank1 ref="rank1Ref" :rank-list="rankPlayers" :horse-boosts="horseBoosts" @start="startGame" />
<!-- <Rank2 v-else :rank-list="rankPlayers" @next="nextRound" /> -->
</template>
<script setup lang="ts">
import { ref } from "vue";
import { $format_str } from "@/commons/utils.ts";
import DesignStage from "@/components/DesignStage.vue";
import { assetUrl, cssAssetUrl } from "@/commons/assets.ts";
defineProps<{
players: any[];
playerCount: number;
}>();
const emit = defineEmits<{
start: [];
}>();
const imageUrls = {
bg: cssAssetUrl("game4/bg.svg"),
logo: cssAssetUrl("game1/logo.png"),
title1: cssAssetUrl("game4/title1.svg"),
title2: cssAssetUrl("game4/title2.svg"),
qrcode: assetUrl("game4/qrcode.svg"),
gift: cssAssetUrl("game4/gift.svg"),
gu: cssAssetUrl("game4/big-brum.svg"),
smallGu: cssAssetUrl("game4/small-brum.svg"),
bottomLayers: cssAssetUrl("game1/bottom-layers.png"),
avatarAnimation: cssAssetUrl("avatar_animation.png"),
avatar: cssAssetUrl("avatar.png"),
line: cssAssetUrl("game1/line.png"),
start1: cssAssetUrl("game1/start-1.png"),
start2: cssAssetUrl("game1/start-2.png"),
};
const isStartPressed = ref(false);
const pressStartButton = () => {
isStartPressed.value = true;
emit("start");
};
const releaseStartButton = () => {
isStartPressed.value = false;
};
</script>
<template>
<DesignStage>
<div class="bg">
<div class="img-logo"></div>
<div class="img-title1"></div>
<div class="img-title2"></div>
<div class="img-qrcode-container">
<div class="img-qrcode"><img :src="imageUrls.qrcode" /></div>
<div class="txt-qrcode">微信扫码参与</div>
</div>
<div class="img-gift"></div>
<div class="img-small-gu"></div>
<div class="img-gu"></div>
<div class="list-container">
<div class="txt-count">
当前在线人数 <span>{{ playerCount }}</span>
</div>
<div class="list-container-left">
<div
v-for="(item, index) in players"
:key="item.userid || item.wechat_id || `empty-${index}`"
>
<div>
<div class="img-avatar-container">
<div class="img-avatar"></div>
</div>
<div class="txt-nickname">
{{ $format_str(item.nickname, 12) }}
</div>
</div>
</div>
</div>
<div class="list-container-line"></div>
<div class="list-container-right">
<div
class="btn-start"
:class="{ pressed: isStartPressed }"
@pointerdown="pressStartButton"
@pointerup="releaseStartButton"
@pointerleave="releaseStartButton"
@pointercancel="releaseStartButton"
></div>
</div>
</div>
</div>
</DesignStage>
</template>
<style scoped>
.bg {
width: 1920px;
height: 1080px;
background: v-bind("imageUrls.bg") center / cover no-repeat;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
.img-logo {
background: v-bind("imageUrls.logo");
background-size: cover;
width: 428px;
height: 77px;
position: absolute;
left: 37px;
top: 82px;
}
.img-title1 {
background: v-bind("imageUrls.title1") no-repeat;
width: 831px;
height: 314px;
margin: 0 auto;
position: relative;
top: 60px;
}
.img-title2 {
background: v-bind("imageUrls.title2") no-repeat;
width: 643px;
height: 140px;
margin: 0 auto;
position: relative;
top: 80px;
}
.img-qrcode-container {
width: 144px;
height: 177px;
position: absolute;
z-index: 1;
top: 40px;
right: 40px;
.img-qrcode {
width: 100%;
height: 144px;
border-radius: 10px;
img {
width: 140px;
height: 140px;
}
}
.txt-qrcode {
font-size: 24px;
color: white;
}
}
.img-gift {
background: v-bind("imageUrls.gift") no-repeat;
width: 315px;
height: 202px;
position: absolute;
top: 124px;
right: 320px;
}
.img-small-gu {
background: v-bind("imageUrls.smallGu") no-repeat;
width: 161px;
height: 150px;
position: absolute;
top: 500px;
right: 340px;
}
.img-gu {
background: v-bind("imageUrls.gu") no-repeat;
width: 320px;
height: 297px;
position: absolute;
top: 387px;
right: 20px;
}
.list-container {
background: v-bind("imageUrls.bottomLayers");
width: 1800px;
height: 397px;
position: absolute;
left: 60px;
bottom: 60px;
.txt-count {
font-size: 36px;
margin-left: 30px;
margin-top: 20px;
color: #aa0000;
font-weight: bold;
> span {
margin-left: 20px;
font-size: 48px;
position: relative;
top: 5px;
}
}
.list-container-left {
float: left;
display: grid;
grid-template-columns: repeat(10, 1fr);
row-gap: 20px;
width: 73%;
margin-top: 30px;
height: 250px;
align-content: center;
.img-avatar-container {
position: relative;
margin: 0 auto;
width: 72px;
height: 72px;
border-radius: 36px;
}
.img-avatar-container::before {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: v-bind("imageUrls.avatarAnimation");
animation: avatar-rotate 10s linear infinite;
}
.img-avatar {
position: relative;
top: 6px;
z-index: 1;
margin: 0 auto;
width: 60px;
height: 60px;
border-radius: 30px;
background: v-bind("imageUrls.avatar");
}
.txt-nickname {
color: #666;
font-size: 20px;
text-align: center;
}
}
.list-container-line {
float: left;
width: 1px;
height: 281px;
margin-left: 50px;
background: v-bind("imageUrls.line") center no-repeat;
}
.list-container-right {
float: left;
.btn-start {
width: 316px;
height: 105px;
margin-left: 60px;
margin-top: 80px;
background: v-bind("imageUrls.start1");
cursor: pointer;
}
.btn-start.pressed {
background: v-bind("imageUrls.start2");
}
}
}
</style>
<script setup lang="ts">
import { ref, watch, onMounted, onUnmounted } from "vue";
import DesignStage from "../../../components/DesignStage.vue";
import type Player from "@/commons/player.ts";
import { $is_run_local } from "@/commons/utils.ts";
import { cssAssetUrl } from "@/commons/assets.ts";
const props = defineProps<{
rankList: Player[];
/** H5 玩家操控产生的加速度: { [userid]: boost(叠加系数, 0~N) } */
horseBoosts: Record<string, number>;
}>();
const emit = defineEmits<{
start: [];
}>();
const designStage = ref<InstanceType<typeof DesignStage> | null>(null);
const imageUrls = {
logo: cssAssetUrl("game1/logo.png"),
titleBg: cssAssetUrl("game4/horse-title-bg.svg"),
bigBrum: cssAssetUrl("game4/big-brum.svg"),
username: cssAssetUrl("game4/username.svg"),
avatar: cssAssetUrl("game4/avator.svg"),
resultBg: cssAssetUrl("game4/resultBg.svg"),
next: cssAssetUrl("game1/next-1.png"),
};
// ========== 速度基准: 60秒从屏幕左侧跑到右侧 ==========
const TOTAL_DISTANCE_PX = 2160; // -120px ~ 2040px
const BASE_DURATION_SEC = 60;
const BASE_SPEED_PERCENT_PER_SEC = 100 / BASE_DURATION_SEC; // ≈ 1.667%/s 基准速度
interface Horse {
id: string;
lane: number;
startY: number;
xPercent: number;
boost: number; // boost=0 按基准60秒跑完,boost越大越快
nickname: string;
avatar: string;
}
interface RankItem {
rank: number;
userid: string;
nickname: string;
avatar: string;
score: number;
}
const horses = ref<Horse[]>([]);
const isGameRunning = ref(false);
const showResult = ref(false);
const finalRankList = ref<RankItem[]>([]);
const LANE_POSITIONS = [42, 160, 270, 380, 490];
const updateHorses = (players: Player[]) => {
const validPlayers = players.filter(
(p) => p.nickname !== "虚位以待" && !p.wechat_id?.startsWith("empty-"),
);
if (validPlayers.length === 0) return;
// 保留已存在的 xPercent 和 boost,避免新玩家列表覆盖进度
const existingMap = new Map(horses.value.map((h) => [h.id, h]));
horses.value = validPlayers.map((player, index) => {
const id = player.userid || player.wechat_id || `horse-${index}`;
const existing = existingMap.get(id);
return {
id,
lane: index % LANE_POSITIONS.length,
startY: LANE_POSITIONS[index % LANE_POSITIONS.length]!,
xPercent: existing?.xPercent ?? 0,
boost: existing?.boost ?? 0,
nickname: player.nickname,
avatar: player.avatar || "",
};
});
};
const mockHorses = () => {
const mockPlayers: Player[] = Array.from({ length: 10 }, (_, i) => ({
userid: `mock-${i}`,
nickname: `玩家${i + 1}`,
avatar: "",
score: Math.floor(Math.random() * 1000),
}));
updateHorses(mockPlayers);
};
watch(
() => props.rankList,
(players) => {
if (players && players.length > 0) {
updateHorses(players);
}
},
{ immediate: true, deep: true },
);
// 进度百分比 → 屏幕像素位置
const horseTranslateX = (xPercent: number) => {
return -120 + (xPercent / 100) * TOTAL_DISTANCE_PX;
};
// ========== 接收 H5 传来的加速度 ==========
watch(
() => props.horseBoosts,
(boosts) => {
if (!boosts) return;
horses.value.forEach((horse) => {
const boost = boosts[horse.id];
if (boost !== undefined) {
horse.boost = boost;
}
});
},
{ deep: true },
);
// ========== 游戏主循环 (~60fps) ==========
let gameLoopTimer: ReturnType<typeof setInterval> | undefined;
const TICK_MS = 16;
const TICK_SEC = TICK_MS / 1000;
const startGameLoop = () => {
stopGameLoop();
gameLoopTimer = setInterval(() => {
if (!isGameRunning.value) return;
let allFinished = true;
horses.value.forEach((horse) => {
if (horse.xPercent >= 100) return;
// 实际速度 = 基准速度 × (1 + boost)
horse.xPercent = Math.min(
100,
horse.xPercent + BASE_SPEED_PERCENT_PER_SEC * (1 + horse.boost) * TICK_SEC,
);
if (horse.xPercent < 100) allFinished = false;
});
if (allFinished && horses.value.length > 0) {
stopGame();
}
}, TICK_MS);
};
const stopGameLoop = () => {
if (gameLoopTimer) {
clearInterval(gameLoopTimer);
gameLoopTimer = undefined;
}
};
// ========== 本地 mock 加速 ==========
let mockBoostTimer: ReturnType<typeof setInterval> | undefined;
const startMockBoost = () => {
stopMockBoost();
mockBoostTimer = setInterval(() => {
if (!isGameRunning.value) return;
// 随机选 1~3 匹马触发加速
const count = 1 + Math.floor(Math.random() * 3);
const shuffled = [...horses.value].sort(() => Math.random() - 0.5);
shuffled.slice(0, count).forEach((horse) => {
horse.boost = Math.min(3, horse.boost + 0.3 + Math.random() * 0.7);
});
}, 2000);
};
const stopMockBoost = () => {
if (mockBoostTimer) {
clearInterval(mockBoostTimer);
mockBoostTimer = undefined;
}
};
const computeFinalRank = (): RankItem[] => {
// 从 WebSocket rankList 中取有效玩家
const valid = (props.rankList || []).filter(
(p) => p.nickname !== "虚位以待" && !(p.wechat_id || "").startsWith("empty-"),
);
if (valid.length > 0) {
// 优先用 WebSocket 的 score 排序
const sorted = [...valid].sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
return sorted.map((p, i) => ({
rank: i + 1,
userid: p.userid || p.wechat_id || `unknown-${i}`,
nickname: p.nickname,
avatar: p.avatar || "",
score: p.score ?? 0,
}));
}
// 无 WebSocket 数据时降级:按 xPercent 降序
return horses.value
.slice()
.sort((a, b) => b.xPercent - a.xPercent)
.map((h, i) => ({
rank: i + 1,
userid: h.id,
nickname: h.nickname,
avatar: h.avatar,
score: Math.round(h.xPercent * 10),
}));
};
const stopGame = () => {
isGameRunning.value = false;
showResult.value = true;
stopGameLoop();
stopMockBoost();
// 计算最终排名
finalRankList.value = computeFinalRank();
// 打印排名数据到控制台
console.log("========== 游戏结束 - 最终排名 ==========");
console.table(
finalRankList.value.map((item) => ({
名次: item.rank,
用户ID: item.userid,
昵称: item.nickname,
分数: item.score,
})),
);
console.log("原始排名数据:", JSON.parse(JSON.stringify(finalRankList.value)));
};
const startIntro = async () => {
if ($is_run_local()) {
mockHorses();
}
isGameRunning.value = true;
showResult.value = false;
finalRankList.value = [];
startGameLoop();
if ($is_run_local()) {
startMockBoost();
}
// DesignStage 倒计时: 开场3秒 + 游戏60秒
await designStage.value?.startCountdown(3, 60);
stopGame();
};
const horseAvatarStyle = (horse: Horse) => {
if (!horse.avatar) return {};
return { backgroundImage: `url(${horse.avatar})`, backgroundSize: "cover" };
};
onMounted(() => {
if ($is_run_local()) {
mockHorses();
isGameRunning.value = true;
startGameLoop();
startMockBoost();
}
});
onUnmounted(() => {
stopGame();
});
defineExpose({
startIntro,
});
</script>
<template>
<DesignStage ref="designStage">
<div class="screen-container" :class="{ paused: !isGameRunning }">
<div class="img-logo"></div>
<div class="img-title-bg"></div>
<div class="img-big-brum"></div>
<div class="bg-top">
<div class="bg-top-inner"></div>
<div class="bg-top-inner"></div>
</div>
<div class="bg-bottom">
<div class="bg-bottom-inner"></div>
<div class="bg-bottom-inner"></div>
</div>
<div
v-for="horse in horses"
:key="horse.id"
class="horse-wrapper"
:style="{
bottom: `${horse.startY}px`,
transform: `translateX(${horseTranslateX(horse.xPercent)}px)`,
}"
>
<div class="horse"></div>
<div class="horse-username">
<span class="username-text">{{ horse.nickname }}</span>
</div>
<div class="horse-avatar" :style="horseAvatarStyle(horse)"></div>
</div>
<div v-if="showResult" class="result-overlay">
<div class="result-mask"></div>
<div class="result-bg">
<!-- 排名列表 -->
<div class="rank-list">
<div
v-for="item in finalRankList"
:key="item.userid"
class="rank-row"
:class="{ 'rank-top-3': item.rank <= 3 }"
>
<span class="rank-num">{{ item.rank }}</span>
<div class="rank-avatar-wrap">
<div
class="rank-avatar"
:style="item.avatar ? { backgroundImage: `url(${item.avatar})`, backgroundSize: 'cover' } : {}"
></div>
</div>
<span class="rank-nickname">{{ item.nickname }}</span>
<span class="rank-score">{{ item.score }}</span>
</div>
<div v-if="finalRankList.length === 0" class="rank-empty">暂无排名数据</div>
</div>
</div>
<div class="btn-next"></div>
</div>
</div>
</DesignStage>
</template>
<style scoped>
.screen-container {
width: 1920px;
height: 1080px;
position: relative;
overflow: hidden;
}
.img-logo {
background: v-bind("imageUrls.logo");
background-size: cover;
width: 428px;
height: 77px;
position: absolute;
left: 37px;
top: 82px;
z-index: 20;
}
.img-title-bg {
background: v-bind("imageUrls.titleBg");
background-size: cover;
width: 743px;
height: 164.2px;
position: absolute;
left: 50%;
top: 16px;
transform: translateX(-50%);
z-index: 20;
}
.img-big-brum {
background: v-bind("imageUrls.bigBrum");
background-size: cover;
width: 161px;
height: 150px;
position: absolute;
right: 59px;
top: 392px;
z-index: 2;
}
.screen-container.paused .bg-top,
.screen-container.paused .bg-bottom,
.screen-container.paused .horse {
animation-play-state: paused;
}
.bg-top {
width: 7680px;
height: 1080px;
position: absolute;
top: 0;
left: 0;
display: flex;
animation: bg-scroll-left 20s linear infinite;
z-index: 1;
}
.bg-top-inner {
width: 3840px;
height: 1080px;
background: url("@/assets/images/game4/bg-top.svg") 0 0 / 3840px 1080px
no-repeat;
flex-shrink: 0;
}
.bg-bottom {
width: 7680px;
height: 577px;
position: absolute;
bottom: 0;
left: 0;
display: flex;
animation: bg-scroll-left 20s linear infinite;
z-index: 2;
}
.bg-bottom-inner {
width: 3840px;
height: 577px;
background: url("@/assets/images/game4/bg-bottom.svg") 0 0 / 3840px 577px
no-repeat;
flex-shrink: 0;
}
.horse-wrapper {
position: absolute;
left: 0;
transition: transform 0.2s linear;
will-change: transform;
z-index: 10;
}
.horse {
width: 120px;
height: 109px;
background: url("@/assets/images/game4/horse.png") -17px 0 / 1472px 109px
no-repeat;
animation: horse-run 0.6s steps(12) infinite;
}
.horse-username {
background: v-bind("imageUrls.username");
background-size: contain;
background-repeat: no-repeat;
width: 100px;
height: 40px;
position: absolute;
top: 10px;
left: -24px;
display: flex;
align-items: center;
justify-content: center;
}
.username-text {
position: absolute;
top: 1px;
color: #000;
font-size: 14px;
font-weight: bold;
}
.horse-avatar {
background: v-bind("imageUrls.avatar");
background-size: cover;
width: 30px;
height: 30px;
position: absolute;
top: -4px;
left: -22px;
border-radius: 50%;
}
@keyframes bg-scroll-left {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-3840px);
}
}
@keyframes horse-run {
0% {
background-position: -17px 0;
}
100% {
background-position: -1457px 0;
}
}
.result-overlay {
width: 1920px;
height: 1080px;
position: absolute;
top: 0;
left: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: center;
}
.result-mask {
width: 1920px;
height: 1080px;
position: absolute;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.5);
z-index: -1;
}
.result-bg {
position: absolute;
top: 96px;
width: 1270px;
height: 717px;
background: v-bind("imageUrls.resultBg") center / cover no-repeat;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
.rank-list {
width: 90%;
max-height: 500px;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 8px;
padding: 20px 40px;
}
.rank-row {
display: flex;
align-items: center;
height: 52px;
background: rgba(255, 255, 255, 0.08);
border-radius: 8px;
padding: 0 16px;
gap: 12px;
}
.rank-row.rank-top-3 {
background: rgba(255, 215, 0, 0.15);
border: 1px solid rgba(255, 215, 0, 0.3);
}
.rank-num {
width: 36px;
height: 36px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.2);
color: #fff;
font-size: 18px;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.rank-avatar-wrap {
width: 40px;
height: 40px;
border-radius: 50%;
overflow: hidden;
flex-shrink: 0;
background: v-bind("imageUrls.avatar") center / cover no-repeat;
}
.rank-avatar {
width: 100%;
height: 100%;
border-radius: 50%;
}
.rank-nickname {
flex: 1;
color: #fff;
font-size: 22px;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.rank-score {
color: #ffcf44;
font-size: 20px;
font-weight: bold;
flex-shrink: 0;
}
.rank-empty {
color: rgba(255, 255, 255, 0.5);
font-size: 24px;
text-align: center;
padding: 40px;
}
.btn-next {
position: absolute;
bottom: 100px;
left: 820px;
width: 316px;
height: 105px;
cursor: pointer;
background: v-bind("imageUrls.next") center / cover no-repeat;
z-index: 2;
}
</style>
<script setup lang="ts">
import { ref, watch } from "vue";
import DesignStage from "../../../components/DesignStage.vue";
import type Player from "../../../commons/player.ts";
import { cssAssetUrl } from "@/commons/assets.ts";
const props = defineProps<{
rankList: Player[];
}>();
const emit = defineEmits<{
next: [];
}>();
const FINAL_RANK_LIMIT = 10;
const imageUrls = {
bg: cssAssetUrl("game4/bg.png"),
logo: cssAssetUrl("game1/logo.png"),
title: cssAssetUrl("game1/title3.png"),
title2: cssAssetUrl("game1/title4.png"),
podium: cssAssetUrl("game1/podium.png"),
fireworks: cssAssetUrl("game1/fireworks.png"),
avatar: cssAssetUrl("avatar.png"),
guan1: cssAssetUrl("game1/guan1.png"),
pai1: cssAssetUrl("game1/pai1.png"),
guan2: cssAssetUrl("game1/guan2.png"),
pai2: cssAssetUrl("game1/pai2.png"),
guan3: cssAssetUrl("game1/guan3.png"),
pai3: cssAssetUrl("game1/pai3.png"),
rankIcon: cssAssetUrl("game1/no-icon.png"),
avatarAnimation: cssAssetUrl("avatar_animation.png"),
next: cssAssetUrl("game1/next-1.png"),
};
const emptyPlayer = (index: number): Player => ({
active: false,
wechat_id: `empty-${index}`,
nickname: "虚位以待",
avatar: "",
score: 0,
});
const list = ref<Player[]>(
Array.from({ length: FINAL_RANK_LIMIT }, (_, index) => emptyPlayer(index)),
);
const updateFinalRank = (rankList: Player[]) => {
list.value = Array.from(
{ length: FINAL_RANK_LIMIT },
(_, index) => rankList[index] ?? emptyPlayer(index),
);
};
watch(
() => props.rankList,
(rankList) => updateFinalRank(rankList),
{ immediate: true, deep: true },
);
</script>
<template>
<DesignStage>
<div class="bg">
<div class="img-logo"></div>
<div class="img-title"></div>
<div class="img-title2"></div>
<div class="podium">
<div class="rank-no1">
<div class="gu-burst"></div>
<div class="avatar"></div>
<div class="nickname">{{ list[0]?.nickname }}</div>
<div class="guan"></div>
<div class="pai"></div>
</div>
<div class="rank-no2">
<div class="gu-burst"></div>
<div class="avatar"></div>
<div class="nickname">{{ list[1]?.nickname }}</div>
<div class="guan"></div>
<div class="pai"></div>
</div>
<div class="rank-no3">
<div class="gu-burst"></div>
<div class="avatar"></div>
<div class="nickname">{{ list[2]?.nickname }}</div>
<div class="guan"></div>
<div class="pai"></div>
</div>
</div>
<div class="rank-container">
<div
v-for="(item, index) in list.slice(3)"
:key="item.userid || item.wechat_id || `rank-${index}`"
>
<div class="no-icon">{{ index + 4 }}</div>
<div>
<div class="img-avatar-container">
<div class="img-avatar"></div>
</div>
<div class="txt-nickname">{{ item.nickname }}</div>
</div>
</div>
</div>
<div class="btn-next" @click="emit('next')"></div>
</div>
</DesignStage>
</template>
<style scoped>
.bg {
width: 1920px;
height: 1080px;
background: v-bind("imageUrls.bg") center / cover no-repeat;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
.img-logo {
background: v-bind("imageUrls.logo");
background-size: cover;
width: 428px;
height: 77px;
position: absolute;
left: 37px;
top: 82px;
}
.img-title {
background: v-bind("imageUrls.title");
width: 967px;
height: 122px;
margin: 0 auto;
margin-top: 37px;
}
.img-title2 {
background: v-bind("imageUrls.title2") no-repeat center;
width: 457px;
height: 57px;
margin: 0 auto;
margin-top: 37px;
}
.podium {
background: v-bind("imageUrls.podium") no-repeat center;
width: 1347px;
height: 269px;
position: absolute;
top: 427px;
left: 287px;
.gu-burst {
width: 200px;
height: 200px;
position: absolute;
z-index: 1;
border-radius: 50%;
opacity: 1;
transform: scale(0.6);
transform-origin: center center;
background: v-bind("imageUrls.fireworks") center / cover no-repeat;
pointer-events: none;
animation: gu-burst-expand 1.2s ease-out infinite;
}
.rank-no1 {
position: relative;
.gu-burst {
left: 580px;
top: -200px;
}
.avatar {
background: v-bind("imageUrls.avatar") center / cover no-repeat;
width: 120px;
height: 120px;
border-radius: 60px;
position: absolute;
left: 610px;
top: -136px;
}
.nickname {
width: 167px;
height: 46px;
background: #ffcf44;
color: white;
text-align: center;
line-height: 46px;
position: absolute;
left: 590px;
top: -25px;
z-index: 1;
border-radius: 23px;
}
.guan {
background: v-bind("imageUrls.guan1");
width: 64px;
height: 64px;
position: absolute;
left: 580px;
top: -153px;
}
.pai {
background: v-bind("imageUrls.pai1");
width: 212px;
height: 200px;
position: absolute;
left: 570px;
top: 40px;
}
}
.rank-no2 {
position: relative;
.gu-burst {
left: 140px;
top: -170px;
}
.avatar {
background: v-bind("imageUrls.avatar") center / cover no-repeat;
width: 120px;
height: 120px;
border-radius: 60px;
position: absolute;
left: 180px;
top: -110px;
}
.nickname {
width: 167px;
height: 46px;
background: #ca9600;
color: white;
text-align: center;
line-height: 46px;
position: absolute;
left: 157px;
top: 2px;
z-index: 1;
border-radius: 23px;
}
.guan {
background: v-bind("imageUrls.guan2") no-repeat center;
width: 96px;
height: 96px;
position: absolute;
left: 134px;
top: -144px;
}
.pai {
background: v-bind("imageUrls.pai2") no-repeat center;
width: 212px;
height: 200px;
position: absolute;
left: 140px;
top: 50px;
}
}
.rank-no3 {
position: relative;
.gu-burst {
left: 1020px;
top: -170px;
}
.avatar {
background: v-bind("imageUrls.avatar") center / cover no-repeat;
width: 120px;
height: 120px;
border-radius: 60px;
position: absolute;
left: 1046px;
top: -110px;
}
.nickname {
width: 167px;
height: 46px;
background: #e2e2e2;
color: #afafaf;
text-align: center;
line-height: 46px;
position: absolute;
left: 1028px;
top: 2px;
z-index: 1;
border-radius: 23px;
}
.guan {
background: v-bind("imageUrls.guan3") no-repeat center;
width: 96px;
height: 96px;
position: absolute;
left: 1003px;
top: -146px;
}
.pai {
background: v-bind("imageUrls.pai3") no-repeat center;
width: 212px;
height: 200px;
position: absolute;
right: 130px;
top: 50px;
}
}
}
.rank-container {
display: flex;
align-items: center;
width: 1270px;
height: 115px;
position: absolute;
bottom: 243px;
left: 325px;
> div {
flex: 1;
display: grid;
width: 100px;
height: 100%;
.no-icon {
background: v-bind("imageUrls.rankIcon") no-repeat center;
width: 40px;
height: 40px;
position: absolute;
text-align: center;
line-height: 40px;
color: white;
font-weight: bold;
}
.img-avatar-container {
position: relative;
margin: 0 auto;
margin-top: 10px;
width: 72px;
height: 72px;
border-radius: 36px;
}
.img-avatar-container::before {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: v-bind("imageUrls.avatarAnimation");
animation: avatar-rotate 10s linear infinite;
}
.img-avatar {
position: relative;
top: 6px;
z-index: 1;
margin: 0 auto;
width: 60px;
height: 60px;
border-radius: 30px;
background: v-bind("imageUrls.avatar");
}
.txt-nickname {
color: white;
font-size: 20px;
text-align: center;
}
}
}
.btn-next {
position: absolute;
bottom: 100px;
left: 820px;
width: 316px;
height: 105px;
cursor: pointer;
background: v-bind("imageUrls.next") center / cover no-repeat;
}
</style>
......@@ -2,6 +2,7 @@ import { createRouter, createWebHashHistory } from 'vue-router'
import { $read } from '@/commons/utils'
import Login from '@/pages/Login.vue'
import Game1 from '@/pages/game1/Game1.vue'
import Game4 from '@/pages/game4/Game4.vue'
const router = createRouter({
history: createWebHashHistory(),
......@@ -23,6 +24,14 @@ const router = createRouter({
requiresAuth: true,
},
},
{
path: '/game4',
name: 'Game4',
component: Game4,
meta: {
requiresAuth: true,
},
},
// {
// path: '/:pathMatch(.*)*',
// redirect: '/',
......
......@@ -37,6 +37,7 @@ export default defineConfig(({ command }) => ({
copyImageAssets(),
],
server: {
host: true,
proxy: {
'/socket.io': {
target: 'http://localhost:8082',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment