From f308503816ba74ce183783d1858b426f4858a1a9 Mon Sep 17 00:00:00 2001 From: Stanislaw <62724833+BoberITman@users.noreply.github.com> Date: Wed, 20 Apr 2022 15:20:22 +0200 Subject: [PATCH] orm and profile first implementation --- .gitignore | 3 +- index.js | 25 +- package-lock.json | 598 ++++++++++++++++++++++++++------------ package.json | 7 +- prisma/schema.prisma | 37 +++ queries/badge_id.sql | 4 - queries/user_badges.sql | 5 - src/cmds/dodajodznake.js | 8 +- src/cmds/profil.js | 22 -- src/cmds/profile.js | 56 ++++ src/fonts/Lexend-Bold.ttf | Bin 0 -> 78060 bytes src/fonts/Lexend-Thin.ttf | Bin 0 -> 77784 bytes src/functions/postgres.js | 79 +++-- src/functions/tools.js | 18 ++ 14 files changed, 597 insertions(+), 265 deletions(-) create mode 100644 prisma/schema.prisma delete mode 100644 queries/badge_id.sql delete mode 100644 queries/user_badges.sql delete mode 100644 src/cmds/profil.js create mode 100644 src/cmds/profile.js create mode 100644 src/fonts/Lexend-Bold.ttf create mode 100644 src/fonts/Lexend-Thin.ttf diff --git a/.gitignore b/.gitignore index fdda6d8..8db8d77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /node_modules .env package-lock.json -/src/badges \ No newline at end of file +/src/badges +/prisma \ No newline at end of file diff --git a/index.js b/index.js index 1b5c02c..59ad512 100644 --- a/index.js +++ b/index.js @@ -3,9 +3,9 @@ const fs = require("fs"); const redis = require("./src/functions/redis"); const sql = require("./src/functions/postgres"); const { createClient } = require("redis"); -const { Client } = require("pg"); const colors = require("colors"); -const { connect } = require("http2"); +const { PrismaClient } = require("@prisma/client"); +const { messageCount } = require("./src/functions/postgres"); colors.setTheme({ prompt: "grey", @@ -34,16 +34,13 @@ redisConnection .then(() => console.log("✔️ redis connected".info)) .catch((err) => console.error(err.stack.red)); -//postgresql connect -const client = new Client(); -client - .connect() - .then(() => console.log("✔️ postgres connected".info)) - .catch((err) => console.error(err.stack.red)); +//postgres connection +const client = new PrismaClient(); cl.cfg = require("./cfg.json"); cl.cmds = new discordjs.Collection(); +//cmds handler const cmdsFls = fs .readdirSync(`./src/cmds`) .filter((file) => file.endsWith(`.js`)); @@ -53,15 +50,20 @@ for (const Fl of cmdsFls) { cl.cmds.set(cmd.name, cmd); } +//command execution cl.on("messageCreate", async (msg) => { if (msg.author.bot) return; + + //exp if (!msg.content.startsWith(cl.cfg.prefix)) { + messageCount(client, msg.author.id); if (await redis.expCheck(msg.author.id, redisConnection)) { - sql.addExp(client, msg.author.id); - } else { - sql.messageCount(client, msg.author.id); + sql.addExp(client, msg.author.id, 10, 25); } + } else { + sql.messageCount(client, msg.author.id); } + const args = msg.content.slice(cl.cfg.prefix.length).trim().split(/ +/); const cmdName = args.shift().toLowerCase(); @@ -83,6 +85,7 @@ cl.on("messageCreate", async (msg) => { console.log(`msgCommand: ${cmdName + args} by ${msg.author.tag}`); }); +//client cl.once("ready", () => { console.log(`bot ready; logged in as ${cl.user.tag}\n--`.info); cl.user.setActivity(".pomoc", { type: "LISTENING" }); diff --git a/package-lock.json b/package-lock.json index 52a95db..f258e91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,15 +11,18 @@ "dependencies": { "@discordjs/opus": "^0.5.3", "@discordjs/voice": "^0.7.5", + "@prisma/client": "^3.12.0", + "canvas": "^2.9.1", "colors": "^1.4.0", "daemon": "^1.1.0", - "discord.js": "^13.1.0", + "discord.js": "^13.6.0", "dotenv": "^10.0.0", "ffmpeg": "^0.0.4", "ffmpeg-static": "^4.4.0", "libsodium-wrappers": "^0.7.9", - "nodemon": "^2.0.13", + "nodemon": "^2.0.15", "pg": "^8.7.3", + "prisma": "^3.12.0", "redis": "^4.0.4", "ytdl-core": "^4.9.2", "ytsr": "^3.5.3" @@ -44,43 +47,38 @@ } }, "node_modules/@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", "dependencies": { "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", + "discord-api-types": "^0.26.0", "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" + "tslib": "^2.3.1", + "zod": "^3.11.6" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" + } + }, "node_modules/@discordjs/collection": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", - "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@discordjs/node-pre-gyp": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", @@ -158,6 +156,61 @@ "npm": ">=7.0.0" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@node-redis/bloom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", @@ -212,6 +265,37 @@ "@node-redis/client": "^1.0.0" } }, + "node_modules/@prisma/client": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.12.0.tgz", + "integrity": "sha512-4NEQjUcWja/NVBvfuDFscWSk1/rXg3+wj+TSkqXCb1tKlx/bsUE00rxsvOvGg7VZ6lw1JFpGkwjwmsOIc4zvQw==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + }, + "engines": { + "node": ">=12.6" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", + "integrity": "sha512-zULjkN8yhzS7B3yeEz4aIym4E2w1ChrV12i14pht3ePFufvsAvBSoZ+tuXMvfSoNTgBS5E4bolRzLbMmbwkkMQ==", + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", + "integrity": "sha512-o+jo8d7ZEiVpcpNWUDh3fj2uPQpBxl79XE9ih9nkogJbhw6P33274SHnqheedZ7PyvPIK/mvU8MLNYgetgXPYw==" + }, "node_modules/@sapphire/async-queue": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", @@ -222,9 +306,9 @@ } }, "node_modules/@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "engines": { "node": ">=10" }, @@ -496,14 +580,6 @@ "node": ">=8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", @@ -515,6 +591,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/canvas": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.1.tgz", + "integrity": "sha512-vSQti1uG/2gjv3x6QLOZw7TctfufaerTWbVe+NSduHxxLGB+qf3kFgQ6n66DSnuoINtVUjrLLIK2R+lxrBG07A==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -794,37 +884,44 @@ } }, "node_modules/discord.js": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", - "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", "dependencies": { - "@discordjs/builders": "^0.8.1", - "@discordjs/collection": "^0.3.2", - "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.8", + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", "@types/node-fetch": "^2.5.12", - "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", "node-fetch": "^2.6.1", - "ws": "^8.2.3" + "ws": "^8.4.0" }, "engines": { "node": ">=16.6.0", "npm": ">=7.0.0" } }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/discord.js/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "is-obj": "^2.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, "node_modules/dotenv": { @@ -1327,11 +1424,6 @@ "libsodium": "^0.7.0" } }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -1432,9 +1524,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { "version": "3.1.6", @@ -1475,6 +1567,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -1584,25 +1681,6 @@ "wrappy": "1" } }, - "node_modules/ow": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", - "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", - "dependencies": { - "@sindresorhus/is": "^4.0.1", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^1.2.1", - "vali-date": "^1.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -1804,6 +1882,22 @@ } } }, + "node_modules/prisma": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.12.0.tgz", + "integrity": "sha512-ltCMZAx1i0i9xuPM692Srj8McC665h6E5RqJom999sjtVSccHSD8Z+HSdBN2183h9PJKvC5dapkn78dd0NWMBg==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + }, + "bin": { + "prisma": "build/index.js", + "prisma2": "build/index.js" + }, + "engines": { + "node": ">=12.6" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -2009,6 +2103,57 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -2125,26 +2270,15 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "node_modules/ts-mixer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", - "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" }, "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -2231,14 +2365,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -2310,9 +2436,9 @@ } }, "node_modules/ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "engines": { "node": ">=10.0.0" }, @@ -2373,6 +2499,14 @@ "engines": { "node": ">=8" } + }, + "node_modules/zod": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.14.3.tgz", + "integrity": "sha512-OzwRCSXB1+/8F6w6HkYHdbuWysYWnAF4fkRgKDcSFc54CE+Sv0rHXKfeNUReGCrHukm1LNpi6AYeXotznhYJbQ==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -2388,31 +2522,28 @@ } }, "@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", "requires": { "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", + "discord-api-types": "^0.26.0", "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" + "tslib": "^2.3.1", + "zod": "^3.11.6" + }, + "dependencies": { + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" + } } }, "@discordjs/collection": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.3.2.tgz", - "integrity": "sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==" - }, - "@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" }, "@discordjs/node-pre-gyp": { "version": "0.4.2", @@ -2470,6 +2601,45 @@ "ws": "^8.2.3" } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@node-redis/bloom": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@node-redis/bloom/-/bloom-1.0.1.tgz", @@ -2511,15 +2681,33 @@ "integrity": "sha512-HGQ8YooJ8Mx7l28tD7XjtB3ImLEjlUxG1wC1PAjxu6hPJqjPshUZxAICzDqDjtIbhDTf48WXXUcx8TQJB1XTKA==", "requires": {} }, + "@prisma/client": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.12.0.tgz", + "integrity": "sha512-4NEQjUcWja/NVBvfuDFscWSk1/rXg3+wj+TSkqXCb1tKlx/bsUE00rxsvOvGg7VZ6lw1JFpGkwjwmsOIc4zvQw==", + "requires": { + "@prisma/engines-version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + } + }, + "@prisma/engines": { + "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", + "integrity": "sha512-zULjkN8yhzS7B3yeEz4aIym4E2w1ChrV12i14pht3ePFufvsAvBSoZ+tuXMvfSoNTgBS5E4bolRzLbMmbwkkMQ==" + }, + "@prisma/engines-version": { + "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", + "integrity": "sha512-o+jo8d7ZEiVpcpNWUDh3fj2uPQpBxl79XE9ih9nkogJbhw6P33274SHnqheedZ7PyvPIK/mvU8MLNYgetgXPYw==" + }, "@sapphire/async-queue": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.9.tgz", "integrity": "sha512-CbXaGwwlEMq+l1TRu01FJCvySJ1CEFKFclHT48nIfNeZXaAAmmwwy7scUKmYHPUa3GhoMp6Qr1B3eAJux6XgOQ==" }, "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@szmarczak/http-timer": { "version": "1.1.2", @@ -2728,16 +2916,21 @@ } } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" }, + "canvas": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.1.tgz", + "integrity": "sha512-vSQti1uG/2gjv3x6QLOZw7TctfufaerTWbVe+NSduHxxLGB+qf3kFgQ6n66DSnuoINtVUjrLLIK2R+lxrBG07A==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2947,27 +3140,36 @@ "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==" }, "discord.js": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.3.1.tgz", - "integrity": "sha512-zn4G8tL5+tMV00+0aSsVYNYcIfMSdT2g0nudKny+Ikd+XKv7m6bqI7n3Vji0GIRqXDr5ArPaw+iYFM2I1Iw3vg==", + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", "requires": { - "@discordjs/builders": "^0.8.1", - "@discordjs/collection": "^0.3.2", - "@discordjs/form-data": "^3.0.1", - "@sapphire/async-queue": "^1.1.8", + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", "@types/node-fetch": "^2.5.12", - "@types/ws": "^8.2.0", - "discord-api-types": "^0.24.0", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", "node-fetch": "^2.6.1", - "ws": "^8.2.3" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" + "ws": "^8.4.0" + }, + "dependencies": { + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "dotenv": { @@ -3352,11 +3554,6 @@ "libsodium": "^0.7.0" } }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -3426,9 +3623,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.6", @@ -3457,6 +3654,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + }, "node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -3529,19 +3731,6 @@ "wrappy": "1" } }, - "ow": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", - "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", - "requires": { - "@sindresorhus/is": "^4.0.1", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^1.2.1", - "vali-date": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -3674,6 +3863,14 @@ "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", "requires": {} }, + "prisma": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.12.0.tgz", + "integrity": "sha512-ltCMZAx1i0i9xuPM692Srj8McC665h6E5RqJom999sjtVSccHSD8Z+HSdBN2183h9PJKvC5dapkn78dd0NWMBg==", + "requires": { + "@prisma/engines": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -3844,6 +4041,36 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + } + } + }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -3933,20 +4160,15 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "ts-mixer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", - "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -4017,11 +4239,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -4084,9 +4301,9 @@ } }, "ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, "xdg-basedir": { @@ -4121,6 +4338,11 @@ "requires": { "miniget": "^4.2.1" } + }, + "zod": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.14.3.tgz", + "integrity": "sha512-OzwRCSXB1+/8F6w6HkYHdbuWysYWnAF4fkRgKDcSFc54CE+Sv0rHXKfeNUReGCrHukm1LNpi6AYeXotznhYJbQ==" } } } diff --git a/package.json b/package.json index 604f655..292b519 100644 --- a/package.json +++ b/package.json @@ -23,15 +23,18 @@ "dependencies": { "@discordjs/opus": "^0.5.3", "@discordjs/voice": "^0.7.5", + "@prisma/client": "^3.12.0", + "canvas": "^2.9.1", "colors": "^1.4.0", "daemon": "^1.1.0", - "discord.js": "^13.1.0", + "discord.js": "^13.6.0", "dotenv": "^10.0.0", "ffmpeg": "^0.0.4", "ffmpeg-static": "^4.4.0", "libsodium-wrappers": "^0.7.9", - "nodemon": "^2.0.13", + "nodemon": "^2.0.15", "pg": "^8.7.3", + "prisma": "^3.12.0", "redis": "^4.0.4", "ytdl-core": "^4.9.2", "ytsr": "^3.5.3" diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..ffc7765 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,37 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model badges { + badge_id Int @id + badge_name String + badge_description String + badge_type Int @default(0) + given_badges given_badges[] @ignore +} + +/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by the Prisma Client. +model given_badges { + user_id String + badge_id Int + badges badges @relation(fields: [badge_id], references: [badge_id], onDelete: NoAction, onUpdate: NoAction, map: "badge_id") + users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction, map: "user_id") + + @@index([badge_id], map: "fki_badge_id") + @@index([user_id], map: "fki_user_id") + @@ignore +} + +model users { + user_id String @id(map: "user_pkey") + exp Int @default(0) + msg_count Int @default(0) + voice_time Int @default(0) + lvl Int @default(0) + given_badges given_badges[] @ignore +} diff --git a/queries/badge_id.sql b/queries/badge_id.sql deleted file mode 100644 index 09935bb..0000000 --- a/queries/badge_id.sql +++ /dev/null @@ -1,4 +0,0 @@ -SELECT badges.badge_id + 1 AS new_id -FROM badges -ORDER BY badge_id -DESC LIMIT 1 \ No newline at end of file diff --git a/queries/user_badges.sql b/queries/user_badges.sql deleted file mode 100644 index ab2abbe..0000000 --- a/queries/user_badges.sql +++ /dev/null @@ -1,5 +0,0 @@ -SELECT badges.badge_id -FROM users -JOIN given_badges ON given_badges.user_id = users.user_id -JOIN badges ON given_badges.badge_id = badges.badge_id -WHERE users.user_id = 'JEBAĆ' \ No newline at end of file diff --git a/src/cmds/dodajodznake.js b/src/cmds/dodajodznake.js index 2dd161b..5757f00 100644 --- a/src/cmds/dodajodznake.js +++ b/src/cmds/dodajodznake.js @@ -2,20 +2,20 @@ module.exports = { name: "dodajodznake", async execute(cl, msg, args) { const { get } = require("https"); - const { createWriteStream, exists } = require("fs"); + const { createWriteStream, access } = require("fs"); if (msg.member.permissions.has(0x20)) { if (msg.attachments.at(0) != null) { console.log("attachmentadded"); msg.attachments.each((x) => { if (x.contentType.startsWith("application/json")) { - exists(`src/badges/json/${x.name}`, (e) => { + access(`src/badges/json/${x.name}`, (e) => { if (!e) { const file = createWriteStream(`src/badges/json/${x.name}`); get(x.url, (res) => { res.pipe(file); }); } else { - msg.channel.send("nuda"); + msg.channel.send("Taka odznaka już istnieje"); } }); } else if (x.contentType.startsWith("image/")) { @@ -26,7 +26,7 @@ module.exports = { res.pipe(file); }); } else { - msg.channel.send("nuda"); + msg.channel.send("Taka odznaka już istnieje"); } }); } diff --git a/src/cmds/profil.js b/src/cmds/profil.js deleted file mode 100644 index 665757d..0000000 --- a/src/cmds/profil.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - name: "profil", - execute(cl, msg, args, connect) { - const { profil } = require("../functions/postgres"); - const { MessageEmbed } = require("discord.js"); - async () => { - const user = profil(connect, msg.author.id); - }; - console.debug(user); - /*if (user) { - const embed = new MessageEmbed() - .setColor("#F5F5F5") - .setTitle(msg.author.name) - .addFields( - { name: "Regular field title", value: "Some value here" }, - { name: "Regular field title", value: "Some value here" }, - { name: "Regular field title", value: "Some value here" }, - { name: "Regular field title", value: "Some value here" } - ); - }*/ - }, -}; diff --git a/src/cmds/profile.js b/src/cmds/profile.js new file mode 100644 index 0000000..cc97446 --- /dev/null +++ b/src/cmds/profile.js @@ -0,0 +1,56 @@ +const { ReactionUserManager } = require("discord.js"); + +module.exports = { + name: "profile", + async execute(cl, msg, args, connect) { + const { profile } = require("../functions/postgres"); + const { roundRect, expThreshold } = require("../functions/tools"); + const canvas = require("canvas"); + await profile(connect, msg.author.id).then((user) => { + canvas.registerFont("./src/fonts/Lexend-Bold.ttf", { + family: "LexendBold", + }); + canvas.registerFont("./src/fonts/Lexend-Thin.ttf", { + family: "LexendThin", + }); + const canva = canvas.createCanvas(1024, 256); + let context = canva.getContext("2d"); + context.fillStyle = "#484848"; + roundRect(context, 0, 0, 1024, 256, 25); + context.fill(); + context.font = '48px "LexendBold"'; + context.fillStyle = "#FFFFFF"; + context.fillText(msg.author.tag, 244, 24 + 48); + context.fillText("Lvl " + user.lvl, 850, 24 + 48); + context.font = '25px "LexendThin"'; + context.fillText(user.msg_count + " messages sent", 244, 72 + 25); + context.font = '24px "LexendThin"'; + context.fillText(expThreshold(user.lvl + 1) + " exp", 810, 164 + 24); + context.fillText(user.exp + " exp", 250, 164 + 24); + context.fillStyle = "#242424"; + roundRect(context, 244, 200, 700, 30, 50); + context.fill(); + context.fillStyle = "#61F2EA"; + roundRect( + context, + 244, + 200, + 700 * + ((user.exp - expThreshold(user.lvl)) / expThreshold(user.lvl + 1)), + 30, + 50 + ); + context.fill(); + roundRect(context, 34, 34, 188, 188, 100); + canvas + .loadImage(msg.author.avatarURL({ format: "png" })) + .then((image) => { + context.clip(); + context.drawImage(image, 34, 34, 188, 188); + msg.reply({ + files: [canva.toBuffer()], + }); + }); + }); + }, +}; diff --git a/src/fonts/Lexend-Bold.ttf b/src/fonts/Lexend-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c3728e95d219b740449143c7afcd7324edd82743 GIT binary patch literal 78060 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 literal 0 HcmV?d00001 diff --git a/src/fonts/Lexend-Thin.ttf b/src/fonts/Lexend-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cc0449780e36b56f8e083880d64ca48f702d3a3a GIT binary patch literal 77784 zcmce<37lg^wLgCA-t2oi$xZLw>2xRQCA}n_PI}+B>6xCTXWw^bVHRc>m>CdcQ9uxP{P9o}RB%NReW>sGP!U9wRrcxR|2Us< zojP@@uEZosa^aUwlEz0y#}+?7J}F7R+$>2fGQMQ-%&n1QgOc>bm6EiiVSHxA&`SsJ z+b*%1uS=5ct;I7fu}dmf?U$rGkz3k4vwU#*u@CQhMPe=Y;CsWieOnHmUwr*6o^O{V zlX}*c!w0D}&|i&D(^+R9+xe@b*PV~DY?5@t-Me;d*Cn2Yq|{*$1|5`Q-E88Iz=sJS9nnPwm@s^q{gudII0Sh4j_? zx9r=o*-En_&ZK{^iX4y2b9qup3_$c3N!ftj=#ivzSil!>Yd?uVGT`7T3VZ>dkI><7BprJ&B~@IF|EKT#_CC_xgmguH^& zucT3S*d2(es?TdMhAU;C*C7YP@mNPkqCFG}1{2z!!Qg&oOD>D9nlKEnjg}-=_PqSc zi#!giB3gVP5o1Tuz6w2z$U9*7hBvG8B0{CO;asx3met?vBusNRIg;_4f#6x zhf-qDftJ7jj<)I}R&u?-hZB{nRsDymqpvTgLd zm94ES&l`;{8!LBKPOY-EZ@P4P$p^M{RI~?Ofmm65{reV79$(w$3zrpDL{!wDm&fa0 zDe5oX$y-X`)N=*iCVfo9D~P`wJ}O<3$8&VT3deaX&QGr?M-TN?7U$@N2#2;I`QHus z+a$EhVRt;16+7hK2eCjL!Q}oo2ac>uB-R}n_@m|7o&zgmv6TmUp0mmiwr@PKaO%XS zcDp&Y=IH3y(KT&W)D<*!ugVYVLL^=2&%euG=e%=V*`ncLfrIxp`AyyziZxyo%mr1F zG?NJUlrwNt%xvGBpD8xu^QG^dmo*w0yuJ#_n|L!QZRZoJm25CjAEZJ=zzyC+{;_Nx4JuC{yR-(+hmaLFjo%HKxGT=ML7NZyE9h59`oTMTvH&#p*c z$M&YLW&;>Vvj_d4&aAmDX&t~OtrG-Nse5W%Setot{)yo9;@WUOz0=w6pshuabGYP z2(khS#T!lRPlomD_2~)=`*W6Bh0izp=Q%XFj+v6d2l$%?Uk1fi>1F1w6XUUr!(U$2t(AgZy<8_N5+j+&u1khU{1 zn{WzzL=cWX`#YYR=<*g5XzbBEO6?`kwt3MeLNm{vLSgVko&t?vK_OT`fkucxYYR|n zRe^>CigAq^=TJvMS{m0PZRD%@(r8=@bf6$Djcb7p6`<5t1lpsORywD&vB&asX>^LT zsUK2Xcr$OXS+oTd>MGb1;bf)4tre|RV9ETlrn|M)=5o|FwpYd$HD1ivo{IKyOHoa0 zrL(G~(%GPoLC-uGwPW#k3#J9&GLj1cdb6B)Xvq~{g@W}^L=a?oAZ zidiS~hOUVBon6F-v|Yx!1hl#-7w-?}JP%~y? zX4BoM9!vR-`O>h|sg^58Uy1@!!L5A_*pxcu=3NV^7)wqjj_YBkDl(P-Cns(RvQ)ZhUfC%V(n;=n!5`DAXQm zPk=X+=v7s(7bU6ew>rj{>P?q9848)*X7*Mz^+(xHP}G+!wJoqz(_-#I+n^N41PXz- z&F^{Jkd<>bZyS!o#z)^Ft~gF(m~dD>ns#X?o^t3&P7|HYXI7Cml+#3oX}KoKq|r81 zs|xh~a15(pND!u@Rxj1d>*X~V45q%=+}c&99`+5k%m19+W-V))NQo*Mn>sriO|vgH z_Ed4MGkwY!Z+TuDw7gbJ*kgsfcnkQZ@hSLD9p-Y^IE0}x8Yas&;b(D;F(}O(yI_*N zXsT)~wVBgiNFQ^lXbfW14ScFX{+6+^tEgvTY(}Wj@je2<VS|F`#TN;%{ z3DajTJ`Y021-L#r>*s4*`b{MJf*Gv-W{!O zZwk4K+;!oml2A*D*Ir!tr}rM`;JG97qWrA5dE`Z&^y67xvY)5$ zROFDKaLjhRClhEV&I8vqw?OWN{f2Z0wYO-ex$T{A2aap`^6m74Tsvl;)2Piq&yUvZ zb3U4Bl))sr3p0HAf-arEe#n0$TPnxkU1E(cJKO`Exem&yHlV(ZL2$Di<(F?kiC@wEr(RXtpFc+ zp5XHWHDA`p1$Wne^#_S%EiE&N?>`cs4Ao5}9+4lsrFkaRz9RO;@3l-dwl1hAdoY># zD(}f!uNYO5p1Q0YG;hwS>P5afT{N41HQO7qpQrSSX|~LkzAyQny#hRtUD3&<8Q`fIbIHbAU8}KxwuTXj_z{uyDai z4joAnx{&zeD;kk@@L7@e$egqeo>tH$O(fC|X>_lclh%ul$D~HgyiRD54z58$VOWZy zrtsJ|D|4NS1_L=2{gqHKurXS?w=OIz3LRgTTG!!k=w8s!vLId-?44=tSk~irtEs8B z&J7)`?6Nlne)b_cAtu8K`g(v%b?%IuQ8}^6#Y7^bX zRb5Nk0z1csH}{tNlgGAC?hVPko0D*L)DAYJc3RYMnX^8!Zb_`W-dEiiE-tALl$iCU z4b|i4EKMI{H=Omsk;XuYr8-(!Qd?J|Hufh5S4WB04)FR6cx@0CK@uzW0QWR&uGSg@ z9N*-L784G;YU-kOZA`vx_DFR3c@v}Ou5NALbkTywnTZN##getr=_|IS+Bd$>lH7LL zBAYsTKKwRoFPNOXaDBX_vCLJ`T$3h+TNi);DwJ7<)B>!I{KPG z+vlJoTG}IXP=|(IF$eWxQ-j+19T^TTTA@)p)7k<}$cG#KiDo=Fb!15G*)uk=zfT=K zY8bz83A-=7cF}pm!{;qxpHDAca^X1m<8=7Acm!P240a8-Ca}!M7&Se{f4dps8b7^f=ehR7bK4zgW;Jq>V-0hjKKIbKjmodkRppB?yHd7IHEu z!Q*`XhP_9<$1g>>yymm^=IvBJna9REHm9S_YtcRXFMA*D%n8nu1)P)hB+x>cknJSu z161p;N5y!SCr~5on{Q!pPo?4y!hrR}8LLkJv-Ix>kv<7}3ijqDIfnY^C9`CQR1{Q-1(;v) zggtTDcQRe^60^=e!xYz>Z@XVDXB*h2^jFh2u)X&5XW3>uTdYa72Q;7ow_tx0jsZwC z>1F{_`h`-aSWlLwUp2FtFuOi|6+4nX7*5|SIF);N&He;VV4)0Z`~#(W3ACv>k5a7! z8Z1C*HWX+`pqTf-O%8Pwq^0_cw2_iLT^ely9Vkdk>nDNs6rj}K1e(I2U{Vj{*C*EnUz4J6)!**NWv&IaL4b4jcCk@*KS0e;4&$Nt_6j>MhW=;XFz; z6lh4Gs3FSCp$?96f3>m;el7B`hR81se+u_n(+H5ufimej{JsPH8n_i5i^bj7S+U84 zzCHpjuESjWDEE!MigZS%uy)?7*5g}-^GrC}>TARuIRPuV{t;;GRzk6+U>@Fr0&U}H zHPE60wCOWQn}H8QdM-!7s0?P-@bXY9lN4%iK_kd%2$aUQKx;XA5ommq+c^Ra2{dy= z`X-l=Kpj~M(tj4zBXSjSJOK)S<2qNQ9U$Jc+L0C&=n$t+1kS3t78Pg@Ppi+AN?2)V zX|XGn*&`7R%)5{f^%;>m^%<%dd8t2wHo#NO@6Gqk`RttYd3)l65xBh7oWHxFqm10$ z&!tPq*-g|zM`k2brl1DoL%Noi3hPd}Gw*$7O3v&1hHih}^9dY2LD(=6(DBMe*s+Od z^J04kOg?C|a1zVFMAD(aK`88chepmBZCKb-Z#2kW)oiZsnQZ9Y*4eqO ze|T3{*DlNGvFXJZjFq+yMU;DHU%N+%jKs>+{)3Yf2L}eunH)bbfEtLB(V`3%mSm9M z>ZN)K^nY?_rap%%n{w#iH1r5~&!&Zy8z(x2IX32Uyih>rP!9e3yy!pjs0?qM#^3C` z=*c`v{ZLE$;!?pi@t38L<*zUYdbyV4C2srh+ADefUS6KBJ@l8B_LY2@a!!7Vh1-on ze!tA6eN{_KoD^kIl2lICISTTdzC8L?F0HwsG{h$f9u#WHVj9L8^;^l*H8NG#S6FI>2DmU@7z}FDjS??h>pif zEs^ooK)kld>F?j1=-)p+d1xRMDDnq9V;3$?ZeCE|wRf`AS=m@#-x~~#HhWse!mM&# zb$gvR*6a#2`_;z2@M<9e)RkHZ+LcS@pM2zwVdTc-XR;#~duV#6&nj!9qc~m49H@kGUd>$PM3ynr|vHWMOS(>vx zlbn+z+zzKnvQkGY@>3gH3HQr>qmfll9_+6hS)WX9>C;=PQwvwOT6%UYNmdLToIoG$ z+&MI~qpNF2m+nXQa|~M@meC8A_G}pqwN2K_ts7@XnoT}?$ISi@En9SaOdU8hIliy2 zZy$AIIi_|fRlZVPR$p8qKcfq=M&3W)WxJ#yjrR-CKNYE5g5zP3tRp@c-&1x6m@WN9 zF~^)ye)0jt2wWk$=f4yp?@6Tnov%ZOzdBi} zx=RM2Fb?DuhNcH4J{n?F2l*}Td!zm#@flE{86GDoP#Plwoz>8ag0vV7nD8-M&YR<8 z9_6!|pz|V+gN?ufmG}rG6tfy1RfRcdRueg1;=Vx651-Wp`to$P-$-PSX=z`{mzl4p zV);idEgzSH!m9;oX|xLTbqyu{NEdLF_?t(5Z#wfR&2=KJxqvRsbpo{(pfuMBRG&wc z$sB5$7c~Zj9w{cyVEgrIYw8ZJB(pmx*x$;{R+X~xOkL{6P-keULEk&lP*ohXI!&e3 zC;qKY_Sde)$VgAAt6@!3Z8Nq}T*Zz*{G0ub=3h~3hMF)bn0XhGSbiy_je;cna!F&> zy(C6~aLmy}gslV}6b)lPN)Kthzq9w$Nmbu<_9S)v{>>fe`U}p<&XpG|p@D%pAATFQ zTz(O&VniPvMyvt%Od7?AgRiothC-6AE^V!(sL+GsP-j1dU0}SK3p_Q?mRouPnpLyr|~V&*?G~E1?bE1*C*lCFgL?Ph3+orkbt2D_XmkHL2mrM8kM{g;mzWjQFw~>a1Pw>=CTF1SLh$Om5*GTzb4sG&9c-kX#(mJq2ld1O7Me;8(i#bL8725fvu7`Pdm1=e1KfBW* z+h<>sZ*tjfZkOHe5>k`a%XZ}BQX5k#1xi8RmA=aL+iLs;J2$hJ)@>Q`?fsg!w7@f& zRUCf`_>Z}^75MBK@RJ&T1JZvkPhYWQU^RmN-++IMYfwSwRV_WoxsDh3YXX-NNWZTj z{p%V&hP5^10oj2+tUDc9aCvSWaItYvqdil8zO)HAlaX zwNUJepwD(o-{B-wJ-Tb=%x%2v<1 zne}VctP9=knb~p{bftgB`))g;x2T_=4N3;Z^;(`D^}&CO9y%zehu%vz&mqnU@4f3) zDh%ad@g@C~yd~@aFQ@(ljT}n-cWyIrRDSn~A)phPcIgVv6QM@MmD$I81f~9UE;XXq zq){HlHie#bX+e5NHhrd#HRjW!M|_v}h^I4GNG}zn_fmR{SPL{usU}5fMvG)CGBK0s z{VFS?D7LeyHmKzwgw%`~ppB1Fe^@M>{KllVf|{e^^4f0Dt2m3I?VVMPqpen(!CoKl zuIgOepw^AW!$YlQ^jSX=FO%(;DYfxxXK8oL;I3?`!n~W+f~Ae|;`B!g6(Zy{m^nh+ zK(8{O}Ec7o*6Iz|tMsWI*JxPAf z%o`A(p1efzt=|F4j`KZ6k(TBgk#?4QpvDlR_*>2|M-^9IxAO5Q(!Q>xCEZGO6KP4e zG8%(~l0O|I5LZf6#{NvOCtJ~h#bTmah;d4FMJ(Hu zT&Ga!M#RHa@SZq^NXSC2yahENi%0OvN_i`2ywZvn+5+d+a+4pp&d!P8l&wR|o;C%l zUb&=qJd8FGVSDUEZVHs`yTh%1YM2Wt5RTg;Z^-?ShVztFHIH;S&Gu+td~9Uo*y6>< zhKG+W9^XGOuzwtGwSfcLih2YNxC_OijX%SpjkGaY;{9ApUoKibXNmXoxksRxu6$Z* zb%D;#i=ND*d=?RDU*xC5Xr<84^&FvCDRfa!E6hPF1(D;WkzAR4r6ACk`Fq2^T~3i|ko}) zwz*CxE1j`OZ>7One(CB{n|}_^H_d5%s^3BI%+b^8C(@o;Kam#o%h9C~BT!a=l7TdiA=QG`QWoY=CEr@gbPk0R zB-`Hk@uGl2b~Fh+rekP{PHA#ZZ-;v@=POBOU9}>v1k0|huQnW?XQ8DHg0cM*R)=M1 z$AIQc>0#_adun~6ZCP(k*Pd~5(iV3Ohlcl#SRK~!17oMF#g0t_^5EtU;bt*c^sQ|R z4z2ANJv0KxtXktqZW|ojmgKIkoYq8*#xkYwv=(7kD1??Pn53ZY$-f--yOXD^4QV>g zuLu)chRufG7r0rUm0$ac(y_cntN~k=#g+8oSLZlcMX5coWBlZ6LaFYs5Fe=tUTXaG zQdN^{WK&ms-B@_&&_vhfVW;Wo(cL}0dxi(k>h9V3tn%aZg{*x^G%~rZd-~W|({y|K zyjKSfj!&F30FNMig<>8m5X`0`}^fU zZ$zi_>vh%b-DT-7Q4bx%l-bq)-8oWJ`=qQd1ltc$3!J#g{OKtBC)OJR^ z4wrYZF*=O+t%fC*SiQ5Z#aq)@+*a|B|u?W|W956!Gqn^$xv zrz0(kT1Gc^7Drd7FW72ft!=hgXz`ZNNN0=7FRP)pijJw>XQw^v#pzw`^&<_<;}M&h z92l(~T-n6#qO)`&%51Ux5zHLeCnXOIxw&pv?_k~XM`rhNXBM7$(XFznunIjNX^dLh zdS<(UlArYXPG+;94Mh%GGk%Y^?7I=t-)oX%4oBT9i4scm|WXahtdT_>aRZ%{WVOS3Y7e40?l~xDD^gh z&d!UTEI@N~70Z9;DNw%>6kgTR9-&%gQN=MI1$apE6v$%a6cn>ZlZ)I6ixHN>oLDuI z3kgSyRXbfkWwokVRa+x2uWYfT7M~_4TXCo)oG7!+zI&lk+s|!Q$OdIm&B#}Rm7pfE zBg8=#&DUX0+FTugQXM!2s)LX@P_i=w%CabAlar(TP60~VQ%J#DfRa@xP<{} z00q~tdJgk4i`fe~$B>w?E%`7L;Iw<$48iD9{29xg{h}1@swt|Je7@Q)vt$ zObSs>%AbB!@|gXxl3&U8w3WR+`hD;Z~B`ZcrC(w$ zXF9|5UTir-1~`BHEU36(k0kx5AKm`|BO9_X-m*#mYRQu(y=>N*bq|#McGa^l!F8Q( za#{6ytIxt7pMCbXoNG>l`1`BqZG6owC{qmudXnYSQVj+A>b&Ud1t^Up-j%Tvgg z_9ov=5~Wdp6=}@{6sWfeR9}En9}y^HBnga5_8~|Dnii2?v{Az&zk+N`PCv+&rN5(N z>q^;6MQVAvL_~gx9K^}1qTa6%e*&d?3v`xi6@gN{1^T)`VR@j;EUGv-S`5F$diiPi zOUb_(7XD-@%=XaPF&fQ2Vbi_AegS*Kg?(hi>G3Je7}i!oZew=W3Fos<36Nk9tXY=Y z7IZ~+_w}r7enSh6_~{c`>_gk?QPo~Nxt<*uSkxAEwZ+2=66ud-10Pf^x}kQc(b_yl zodp|2g>9= z1%dv3Ui2S%lv{`*t(Xx6f7D6>6*B^%|H*wG0)4TYT2%0tO`GK}pW_!4*{0EXsY2v< zgZ-g^znA;6=r6d>Lr{OEfWMslv{^{-NBu>l6|<1wge)wMY8qUm%~8;1A%W6}5NU-5 z7bt0EfeNiGP#Px!6 zf6Jy-Yy~L#ibmn}0u*g3P({yC?6}Hz$}d8OH zKmO0to`=PA^1mwBr9d5tPU&gsjO;+3j(lms^Ho$n_um$0^TU?N^T(eHy6lGq_yL{| zmOi_IbzslOCn36LCby_nbD@seEnajF9_jey`k`=msJ?N;W@a9**;E^=tVvXkwAH2p zffT!;VImrxY-p@gCen{i8A|HB-m>2KbYES6B-~#I%RR!b#G3H;m~r9YEhukZ=hN52 z19f!+;Yfd7U4MPBqq;g-Q`1pZ)xoZeE^KXG6pb!wZCx1kMur<2N5bKe#)e_uMkch; zf5=Z54DuhjOkhdNSK*wIL4KNlpUiAyzs9U#kpBYNA#w}P`(!;?0f*gweq1GqeGY#h z={{thk=3O})sVi~%-%4nsxfWBCw`+Y?XVJ4IEmw=^J?5C)drj9wbYhLUX^t$Kiu7Y zc)9p}=-9DC=Nvz7S$5lzBeyLRzt#J0zx_V?0W0L&VEv#gcBtHOBZZwBF`s@-f0g0m zma7;u$)Dcf-90;G!g7f5b@n?*UjzQbj4#hb$PM?7@Mr_Y$dG^9z-pYK8ntajM`X#c z$LASY+upq~W%rd=xp2JjQ+C$jj;4A8jboAOg+rFXW#Q;_yfog7qo(N}7g2aKkJbGL zVs#-i)HoL(kPY$)Gan{?KjZVLb~4Je;CQPyFfrZOy*?3NneathOB}2>eGA3R|G`ok z549}ns_NNg8D45j_V_zDcXqBz7)vWu)@oLZ(|PR0`WZUfDt?a{I`L1*jqG5j(XB5Jil};iLJXM@$zLw2}?;67%iqueY z!oq$98$A&61ox!|&gx05@2*`iQetmrN7L6hn=BQB6XAiKJwt~qgFQt(y}f7kCpRR0 zb$%BcR&D7YnfyUd*UsUwgV;!urD60CTycfI-a=(V9fxqfA_*@JTsPX@+Pp6AaLcm( zATz5q#khmz;<9?xP!vt{R1chm0((>IJ37{>(-atLd=%n+Ou;&!F z9R=YSahK33k=!`PtazgBT|(FcEi-*VS9z`HfR_uriwj@RE>LPag6_WEBOnCh-yfxOz|rUk z&T2M=x~fOJyT>OituqPuN?Vq9BxYLaqoSs=#_kJve4!F=U8MLrGuIPCs9!zX$o=}LT{!DNBEe4Gt@DzO*CPGn4+Tw_9w>7}1=kPI7Sf=Q#dyReM!UP^qjbYpp78DR-3@=__li z;+4Tv8UKMQ0Cx$3c| z5^@NOcHf)S{wfyaZ{$6_C z$;1subSmolx%u7V`9Yo^){*?5h;IqY9hqm@7NU=>BFcY1f4&jV|IDAKq-tncJYOxI zKSBnDv^?{!bUk)9;r9_5O)M)9Ib1FWe)KM0U5(aHUSxN>9JV6#F)DWn%B>dV&iEZTSiy~FiXjj?pncdk_tM{@6`y?1 za@l3?RWP+9Q>5$JAjTZEtO-45Co7U(XP==p+NrC?dy1;Po@%TTyxssS!e8*=(!XjC z@+EMg-8!@^+I1%BC(8r>jIa*qBf)|H&{?jqU(2quf6%5Y);X@RUv-uJ3X_fq`fG1^HKF^`ly^r z2l2<0oFrxNl&a#QH5_IBJ?&yKX)1FYqqP*Y#wwf=o?;&=PM^0)DLaW}DU<5(^he_9 zD4yaPg7Zq*hxlVIp*Be9fF_|1Ap4n5nq{BW8RWwz1>ZI5_pqD z+OjDV?BlFV)H1=!l@`oz8jXbf4lB>nC}U5uHqba>6g10~4i>}ri?#2(^jsOK%uVu% z%$K;lz)eb?*zNaoUSi;Kf~RZb-^W0AJ*O+aF96-moNhDKDl^7L?oqCOw2&A- z>o|Vm;^U5E$IiXzfrZapebrwUx)(on*(JZ3q4uyKmq+Bv>Mmgg74r;EWPLzO?&g`1 zryqGX$X}v+f=97TNOyudgZ<@ueZBbUN~fE zPL{~gXmgWXl5Bp!RNmAR-ZVDNO4*|EO^a4JJ+_9C_Dx-j9Ey8k=ce|N1{+FDpu`zb z;wr3Yc|qh3q+>W(tt(WL9|kR)IVih(P7#JV#XoR5eUGtXE)Sv?53wrrQ!{!oZVnA5 z-EcKdJ^84``q+1r?pnHjnC32D(<>!EYLV6eIC-%O}QN-8Ce+T+W zp7xVFsAfy#9_dr^-)UA8x{21x+*{`7X7WW2pH=55@nt7Bxd&63qqMBDsBn5amC}6k zj2*MM1Uwr1XqjiWa>^qI=?_(ubwzWjDTmT3QOObeTWNI{6!z z#j3fD5*CZmj--drp4ruxVla^E-dx(^v6R*pSB1R#X-9uoRieaN5-V>^*eC2gBkY{Y zB8RugRvjy4_b*yhJ4qYeb=6QFBpz*c>h#z{i-rsaOFC0YIV1j z$+Z)S_6^<3KAYNk?aD3pT{+#l`uy?fV=J4ms`s|kSYwlsrp1ZWj_Ib--h}C@^n*1~ zUufasg_}OOVEVG#moNX|)^<;oyU15v^ipEyq~2qw8E+jtcWPu6q=8!)Npe^&Y=p?6{%2!p}?r56QSgCzrR`{}^s9x3sP9ijK$Kp0eql#G(eX zT3`K|aUi|;{NdptTWYBPz(ntkh42^}gUP843HxgeUD2j;IEN~d_12z_$SCf~3%3T- zZ<@v|sk0{f_Er~_Z13vblxSLhWTI#HOgFj)ZuG~mpP*NIz$+9~)-8hrt@wr;JnF53 z9V^;WJ4U{yTCcXUpsiy=53W*o|nNBK^ho3|MYvj$d2+0 z?O>paYh9Aey09>bdAlQ-KYPK{R#C0CVNgtdBH4OQC+3$)`}LSrSe*4vY|KuaLpS%q0Rn0ZTnQGNu{ zicxe~{&sND*TY%y;j%0qvXyOE-o{3X*(kin^vbDAw%}0iB~w$EY)vM&UNVZy%Q`l6 z)(lnHEj7`y*i2j7vUn&}W~&^Dj2&AakFP&AHg=pokDCgzA^Vo(jU5|%Iya{LYLUs~ zXkXqIUlH>ZxqRx0_H`E^)4KNdb;rlXE?C!&dtSl5_u5^igD=$wDnt662Mp!D zl5)6j5Z8;f_#LoBw0pz{u~>ngr9Nsz^b0<+pIEdN$tJI9{*T_0-n(;$K~DPc1aFHa|c!e}>OH+cW)=I1f#>gL}LG zd&(Ur*O3<8k?GK$U?!nwbQW%hs;WQ6tvLtfDt28O%VQb$#5{#7>**{S&0Si}f1%#Z z`krEMr;Thm>c*sIXdxqJXsnpC`!w)(iUu^m7f<{CIN?G~h|PYZgD&udG6o23#5xj7 zqE@v??OW8;I~H2pTe0fw9_#9xx++r*CCQHJ&bEl%=CtVQMw&~aVVAXX+%k0TRNKD2 z&D|@Srv_UO9`CCf8!7kJ@9V9eTDH8tX{;)>prLNz)NpC{?jf7s<*6tE|2@(V*tzmA zculaDrn-bN9nq@dXX+PND*YHs{Xn+PzK(h3GrYwbGq20b)Y{afpd78BHN^Pcpt zE$ruxK+ocq-tAr1C6_OoxqR{H1xw6M6~QdSC9uTA;LI| zVnoutvG`HmLmGeevTN1Z=jr#>_moQ1qSTsC{+F44r{6;;2H02o*&o=;nidR0GT84a zkPUZG^94V&^{IPOw$i{ZD;J>-00$UTyNrXJhf6ZPVE&4_b|RXRuDT_btjAv+WYMrH@?PhfOr ztxgO;T}kL;b`h5qtfSiPXlFr!GDi8eJc)PA!T~@2GZG zY#&OlX!EyBwYM+rtmxY{0nKRXXf0}uHBLq=alL1Wqa=zmSA)@#o{+PqGd$K@*%S;E z71h*tH=zbg*~9wuFnd@>#~^gDpd~~NJcwxiQdlmChdMvs#}EntRfL@sVr`y*>jCy; z^K@(Lk~U~S1N;N}rpYJR+22L%2KM9;z8e{>X2u(urV|*HmF-nfsIyO>C@M>aZcx=b z8^-Dz#u_4{QEWQ1JE7Nbsus@?Cb zUJ%K?VyP_F;&b}jQ|WH@{d5oee(uF1<|2EM+mn6oh|yswvbs#nuBz975y%Bju!8rc zz|T_{Lrmr381|R4FHX75=ev!&cd{=}AuVzgyNMO(nebE3tw*8efF)G$_7sXy{x{#C zvRchmS?Bs3q4n`bhBq_6$;$O8z87&H;T7F9Nf-+#oq&w{vop#ybA(v z1xX)d^hOAVKS@&EnRjs>Zk1F0H{6nA!1 zq{@rqrH-=B^agf3eK|Yc;EZsGA^0C6t~jieI=(|wJrEK7kt=xAE-eeD5xQvUA(8p zeaV8C%q73474e$mIMbz1ZdaY}h}*p1vS-UMr=Pq@Rj*c6he_P(ZG#k-K;MWrz*N#+ z^bCv+zOcZ`0>uQwG(kAzAnw9uiO)J4(xr*)aB?uzth70$-8+t0C*p4%yR2ENP89 zy{4+P9u5}8>hj?nipgBA7`58|>bvv-?%=H5)|y~r$&+b_DrHv4_+>i52- zlr2F=`SQPUS1II6J9pw9P_l&Q+y$Do?D?IbWlXldTZTJ9zm72JFR^88&efnFQ`H-( zeoWfL5JAc&VDX%`2XcYQX2L(C&1kf-BBR}y`-gm8nU5j<>7U?;?=y6|}$6*a`R(L#R9Dk4R^; zkFuYN{5vpz=*c#`H2ozvYI6sExzA=xo$33WPJAF$N;+RI!rr8I>XVmPU~Q1*P)_-t zV!!)`nW|2*96t-dhAvTbxNlS|X-vqX+&_M3FWhgJ2{s655m)UrF-Z-h^@&R3Vz z`$lZErna%|wcf`Jk9mJuO44gZx?4rM9d!xJ83{f6X!=uZyA8|lwY5Jj{V63TX+i^F zoAFPeNL+*kO&VLPjO?EDN4D4`L3x!Hp{gSAREvRZC@Cox7&o zQ07&g6<$+CTm2cHu^Gi;)){owez`c{)|*X=k^c7AxF672O!GcK3oMl0WnX496m?2# z1dZz;ZJ9zJ2&U--5j)El4cTnf0hg~zZK`lqS64aAwr_)VXmkOH5u&= zgU)6t3zXJjXd{9MH?C}8AE0|=cOY^!5pc`n*4dZj@*~V(Q`0X~nixAMtMY$RZ-LL- zLnmNj&#BLq{oeF@c95Nw{sdc|z6UZ6N-fF&PUTffh#dg8>v zh5U(-Jy~6p+z7vh{BfL4xV#oC;Gsxl2j=MoZi$uj z%voFEMjm;uyRO#lsEm|UG*wwvnyb6pYGNL{Ct3z?re&qAHu-+5&w;zC>lY>2pW4=T zmmng_7haS~R}ZajLP@awD25oTIeJf?F}r>fA+Fd@_5~9#3B?4OJurgzH28htCmC+c zY*}$=c=*tY7PyYtlYjO1^p?0v?DY%x4h`*HSZ^{96Fz|V+ zC3C&}ag>UXj8&M4gN$|w*;99w-sEJ?Z+*+3e&!&%BYmZuQSB%H8?x5ov$0>pJ%7B{ zL$Y8LZ}NrtL*v))o>XfWbcKiM0Hnd|?OWK;vN&#X-y+|gzAZKxu8a)^*`nFku1*bB zl#li`r%#f0#Tg6S9r-8pm)29(V|djV`~lEkuw7x-=Z6swdS}(ibwjmuYh>4^9=#DK zRM)keyUvcsJ6YZE8oK*5dvByAGO?qFE{trM3@5hC3^kcN=0r#0o{M_UTG%k>!bl0e z=Sb#F#SfpW7&CD?jZJUsK6U;(jh%u~PxIxe&+lQsEK9c-w7}6(8rQhPp{6?=>aMBj zW`8=v1HO2jY+I2`u4-#rl}xOR`5G3+;tLxa7sX-=8`7UR<0HfaQC)P$=hS6J+V=mZ zK3FJbLnXP^`+rnlcJ(QtwN+i=aCdc}YhFRbV`mgZ{*mw0xZJkM`pAN|w#f*3Uv1|1 zIQ{t*KKi6lv*J+{)|h@9F&6styU#uMd>z}zcBgN`X}J+Ln0^R3&Xaerig7+k4D{U|Kd3` zcDWDaXdD6!`2J4eLqt&UX@_PVEc;3xL5^sgm5%4%mj2@k*Oy1F5F9%v%19E-$_uX&{6!~0-gpnxLU6WU?hTfWzJu5&N7#6J7__4f5PY6RptA9>!VEIK{U zrCOfzN%A6(m4uEwE0E__)YM2PLUQH2hrG9F^bVd$(xMFKzY=ne-(4u1)}h%to>9IZ z(n{_97m^hPubfY)vh)%8Cbk9pI6MLmcBKd>gK~qm&;89twM*wdr+wzH7tCEehtc&B z`2%bV+J|VB@jjBH5HFxcBj`Sj(3RTfT57ouWQk=zm!J``M{pQCUQBnq$gg7eitb9n zy8|#^{Q-sarTBMmhbd$sHfk`7O{(pVbbsAQrsW+Ssvk{?P>FF$Va+Ee!*^Z+6>qZa@gG-oy8-U+6_*( z*<{h{9T-9-KD*xsZkcp3dh}tLua~lY>Kd)*Xnp_mRM>d;8~?u7cEowEZLho!V+#Mk zJ*TBqqKCo&C+;a7_MCII&*q`}^ZO{Zyyxd-z=VdC{|DOS6kRe`Z^=6bQgUk|(JH3~ zQ1++gWo)IQgUm($qC)xdN1KiLMj}}b?-VzbmNb-<*3-YrdW5n^8sufgk>Zj_3I6%( zi@o(_)uC`z8A1w~bfJ8V9hHAfZve&^5W0+(R*-X6m(d!f*B^2h`%KOZQ8Dl%3( zoW;!RE|ZTH+uWv#Ql+xNZ`XTEDiz$VN`5*{SDEG`0v_NqjW6=m^tK|VD9EdDDG0=;~TdqNQcqlhvjQPXAPf79aLXhVy~ zG-mz#8J8Ejz+pGKtVWB~Y?rqRMPP$+a9Og-0d&60-ew8h?19zH3`{$IlgFdRWCWLX zu(!Rfaa_)URDZxJcQtb#`9)S0jPk6Oy(-(?NV9zeX}9pSi2EHaNc}HolN^a0Dbx|S zyp(3dyGiENd?u&0K=b|7Zgk}9rYSxq-G>`wMxpQF5#&*sv_i+6ioG)O=YCCB*%PU5 zR_z^Xyt}QeG5%+_-d0|Qs8GxFxLjLVR^>);C6jK&JrT z&2RYr<|*Ib;@`D?jOXw0@7gSa?^x6!fByR{|IV#u`G4>{!@q0Vn#@Q3UDLAoP96kp zUYGC1cg*PcuC*4v!*s)UP44&(Ws2VQQN_X<5?+ZUDBLBVWDAvD)XLmW8UCdGM)~AQbv>vT zJfr#etKe5Y3I0fCpFr66dgWYR&-buX-Z|Ay*(txxu2uFRuV$whLH&UFV>UN_t~nYC>}^Mq!LTm)NOOK;X} z@ioZvsrm9`ZT>xu#r|v_i?I3Mhdf7>-=ds<%ZAQ!+T{usxvCv@4^}4u)m`IqRk<8K zqem$!(F#~#H5#lgkFL1FW-wTts;;Qmj(V*^dABHkL3#g+^};r-&inW*g@S2$Jjb8I$6hTKW?WNp2J_3R$9 zRbeUTRgOb`r>3LUlwHdj>pJ9j%45}XBp#2*)iF4NXe~^6pN6)=s6_4peMNKZJMm$M z-_{ukcU%4T(OOzfy_0B>!wn5#xh1hLyN>-|&`6<0<#$p|a&0tPD>tR~QL|?G_%rzU zU#vgpa_2g83l|pnrTLmU#{tdO{}-$ALMbIgn+NViwKgwgVt+xy^VN7^!;>Za z6yx(XkfF-y@T)AsAlj#*C=sLME_s$sDcAqoHlfp3 z;76%&azDzfW)nJb0Y7i9a=%A48|~bAg1$3Hm*#B34}9GAvFq_8zr9Y~;=&Ifs~O1Z z03WNceE8;$k*^M}R!z0ZKz_i=85!ZlYKFdYN{%0kMR)a{EC$AA;|nz+B9vVYy1W8@HHhT9B_Ded0=bTsLdENUDfcO=xis?UbJ9l&jQeRj|>Ae5Fycnz!Qy_~R0Jm_>xG z`VqD|eJ63Tiyf3s$dB=!4A=UuV(dZjM|g&J4PvLyD4h+P9N!B5)A8>e(k5w-bVNFV z+t@xKeGc!`d;n$qLi&UBy!1~g!z|bzsAi3CSx@Yy0z5&~-1NtfbX8qav^YxeL zuhD;8f4lxm`v0T?K8H!ZQrnc*YC6gjrQB@_t@{ZKWu;2{;GY}VRCpJm5zExyQAN+z;Vp+0mt=@n;oBbe8ur? z$77CPIsWLZbGACWoeSWWyxn=9^FN%AI)CMS-Q_~8M#$CX>T!*`mbo^#cDW9_u6Etz z`mF0-*SB0hasAHqtm_rmNw?8m7?O~Qa5FGSAY>w86fzPJK@lgkXn+7gNH7F&sv;_)qPAA8BDIK! z6Arb;I-nw@)>@nTvktco2oX7m6Iw@5?*FsbId@2i)b`(B-}iamd!O$)>#V)@yw_g) zoU_l~f9m~Oe0+Sr_`&f-@n!K-;!lmA9ltpKy!gxFe;&U+{_glk;-8LxA^vaiJL5ly z{~|unC$3LYp8NS^}$R?+4m29U+()>-@VDblPi;_CC^N*OTIMu+T>f4?@Inn^3%zGN`5VQck;){-=;*T z^iJuQa!ksIl&X{yQ_f4dKIOKQ$5VcvvMc4Il&@2*)E=p+sRL6BQ;$tODRo`y=G6a5 zeLK}o{XF&iv@U6V(k7;zlr}4^K5bpvOKESUwWWQW_D#Acy?1(g`k?f}^l|Am>8Ga8 zOFuXLqVy}%|D67M`tJ0P(!cI!_3Pd*xnFj_yndtlUDfaR{aX9|z2BaGpY}VPF+XEt z#?Jof{U`K4uKy|hXZK&+|NQ=!_y1Y{_xm5{f5_+c_4cLv2Kfqo<9s!~Q+%6!PxxN( zz2n>G`-ksvW^86c=D5t7%#$)_W!7glXI_$db>>Z(8!}(d+@1MR=GR$PR`;yrtn943 ztg%@&Stn)9%Bs)0DC@SYyR#n2dOGWctPiuhXD4T8XXj;)%C5|wmOV4OE_+G#RoORY z|2q4=?3U~oa=PX8&B@9cmNO=&I_JckGjrzWH0As>=bD_GbMDC5lJmQq?KywR@#nmk z^GVLP1EL4?8qj~hkO6lL*fQXE1GW$N%K-m?_Xd1AATY4c!0drV1IG_MZs27DTLwNo z@DBt3GVp^ziGzj>nltFmK~E1lIJj)^$%CI5eCU{%V~UTNbj*rl9yq3Th&5#VkduaN z9I|W32SYv|aws<{w|j06D|deGlHBuiSLI%ldt>geayREb zl>2z@bGa|({w??I-1l=o$^C9p;}VZR>s)UdsIv3bdPgYxq8M&?b(tI0btZ)V>7yvDqX@~+DJdETvgcjP^g*OK>i z-XHRIJdO;U6A0K5 zZ9lf_u}jA5@u}m-j-NGt)A;wt2PULUICaAH6Iv$hp73#*r>tjLzp~u2NoBLjR+ZgU zc2C)#%l4MXmmgccru?b$KbF5*{%-j{Dq<=|RZOj@uei2iL&akiZ&e(w%&eSLIk$32 zf7pq>c;9-)f=j}SMQlPVB$Fwe>rjc#J^1RPke9Ufr*D|yfwXRDr!!vSyr>A z=Kh-2nlEd%b<+CJ69#mdaaPZ`b5=WK$;q&yEw@2Wx=iK%@-XoO$A3zCl8nlml zKV^Ly>7!nan^g{?a_#s&Pi0^+BXQ~9xiAMq*OtMa( z&VLLpP-CqQkTzGWuJ@Fv>vgd@6C{C5;M2u{XE_(UxR|qnxvl|5E*?aKM2nfE22p)! zbMH_VGwB=t3-J6_4K^UIYO4q5AHtcqO#owopCe z2SGB(qU;xg1*Gx!s*81}O0fn|*7LYtL?3k_D;DLbkydZ|r9~>6m8k|6~+*i z*ayCj5IMqT4VaPWO$}|ooV{#D>p5nnF2bm0Wvg0nJgZk3xs(oa^ZxhcXk*2^u{qZI zRFzwg(f=2yMa-y7@N`#$JSl1xX;-pJ;yfNtL;>D&8K}Pi^V_3luxiC*Ik%}9))uZ0 zv&sU{k0A?;n?8fpf^JYFtcTPw*wEvwSk_-L{B!8beO&vv&JUP(O{eIqnb{8L??-s% z;-{Ay%ZwX`_c&!_+=9Gm@TbuhZ&2e+_(0eK^;^e~P#|@U0jX<$06({h2DXMsrS6Q+NZF&5Z4I-kc4#68Hkr_+D`5%i+9;>B|wU(*esGG6%#=jY3#;c)nE@HKk68ee{@xK~fo2h!q_--9>%%<(u zs;RsOZtx^wi~6dcczUXzSoec5_`}_Esbimc%5#=ANR76p64y-fzm@Q&&_+w>V*zvB zM{2*yhj#)vj=C?ivejIDSWRJ7jxub0p=SLdYRo1%ONqe)^0(nljFW_Y&>urJIhmVP_@9?b9JVlJ6_75`CRasXvrd6~A zIb&xE^%$;0zYVD41m!y;$e229Y8B<%{gCC6IHDfbt9?qFl2#U9QE~E_XP0sZXU+*+ znP-&=DyoaQt9zNJljbYo?tD8oiqYQ1tZ#4wD*)cXcL1+yTYtzt=4m{OEMjr4)2$|J ztM#n)g7uR1jwi~~&C}Bp?@9CIcm{j&JO!Q+o*O;)dbWDDWyEIm%;=lZFC#N!Kt^uH z@Ql)oF&UFGPRckVqducCRKW=D^In%vn6K@n-eRiqA^SN@aD` zT%OvTomDsB#X}ZPmlZiO^Or}f4Q`G$=!f(Uy;twopXr0v5ayUVIeN-^#(JI{`8~?x zB}cu6>V@k%%j9D3rGS16bnQ>jl4U(e` zz8G>8?@Q)cl+Vr4D9KT?ZzVapljl*B+&I{S7=0p5686uAlEhr{3uw(@)x9E1vdiqgniDLqj}6JyUq9eS&8?Eoq(0 zU*}mb&jL1h?(;n2@QyrsHhb>zJm`7U^O)yx&y%#lXFS_@7XGqlr)QVvE6;aPR#dmB z9>yQ%XE^SNdXXpLuN)at)DDr_9`!s@&quw`ULp#O3c_)TddxXnbykD*Yik)_8ras| z)&}b;bhz1SwH8_zTlLm*>l|y5^_umH^{Tam)e|(Uvu0pnhchytsHUou=q={aTQsR= zG;$N8^t%tdaSqHIErek6VATp0xgKJ#5|UNwV&< ze5}6tmUW4BzsF}iz}KoLTGKr#ym7e4YVu@SC-6REy>*5)(>l{SmzjiSuiRALFej@t zmC5%v`Sf>V)GVyaX^MM5b+Njhp7(O~Yjq84b^J>GnY)cYsz0gs)LnX;PSIU-FYV(i zi40cT9mLy@B0h*aR?pU_v&!l$Jyc(=Z_-!ltMy&_=hpw|JN5tQ7g;y&ulfUhKQ=i@ zrz?++Ref1=ufHC^IQAI692>$IW1u=l4^u;Q9=5eo73gAY?s!$HC(@6OV2m-9G2aw5 zMW4W!WSTlrpRA^7=HD}>tkv_>DU1ncv)c5T`ZUHtb&M6xQS+H?-k=uhC49fvq|RZr zQRZfJDZEtC4AL%D_?xA(reT&^{>>O`d)R9eo)=VIOAUZkb0PL zM~i++J<5t+kLbtMvw8<#-2GlXt+%VcbN}%g&^_Mc$+e$HN*f8j1*5M!7ERj(TLGOX1_dX6y2XSe6p~kn^Z5Iq!M)+UHjdcj>+A9X`{1SHG|J>W|a`deeAD&Iy_o zNOf=3ol#~FoxmMbBI}{Xt0>)-eT=)Q7~NfU(LH$T5vRuK35;sX*>}2zk?lxEh@%<7 zjZvfYSe_P*;@i_X>L=VmT&Hhj-N~EP75W-=rM_0J(buV~^!0odxK`buZ&5eub$p|G zo4Q%AXXJCMdQrcuUgA!rRlllUW>ok;`VI98Bg4Py*VI1!iL&*_tSa}Z`cQvn&9>%R z^Q}470&A7E(z=v=E^f8fSvT>H@D}T4>o>e7T#7||4om&CwGGQ=?Dcl*_tqb+oz`yF zsQoLpZVzkOzRtGpI&j6qQP-LdES~WSBLkj}@Kgafv}Ub~jV^7e9_n$I_Nbxid6$lg zkcp;O_}t}t(Npuawh6NfC7R{ZvFKx-OUKa?nq0bD1l?U{(GDHIJyeOc&82%qgwvaG z@K-KBCCq1V(~ak_;#c$S7cv#9Q7uvD)3?^E`Sh{Pj0_6tvkDmT__#Y-pz1hJ;dmZs zpeOb*B5K0dLayhCJYOzyUI4F&aiNbs&V)lNhvH_^X>wUBB{CU$jygwD z-mz>}aPP5#^qW!$<~mqLPHs(^R!hvLc20ttM@g-aoSSsiOB{N?qwS;HtXSU?cM~a<=_}ZZPNfWj?OsM`j3C$3 z{yX_`C!)A}{1a;~dvuhJ)?UULUDO|SEOQm&n5x=c_rOB-#5(lSy>&c2<{Wy=2kGm~ z?#Tny_bR~MYZ8_{Sq;L@r_yVs>2y}3&(Qs~(V99eewNP0w&dsmdLY(+FxLA;Jw)fK zKkK1-n9kF~b-pgpg*>YqqP}5lP^?Gj5}w!P>XCYs9!-Bcl>YW5Jx(8sB^*z$IYAxN zW%QQix`MC5s<14>^hE4qjT){e$p~qRK3-4N)AR|9r1G&g1!e&OR(d;GpTgMbG)5jX zc^+~G4&(deH#y#AwpfpO%E`p=9h&S4zZ%1G>G z#$>NBCi)v=qgVB7`gJT;0~TvBHu~@MOx5bJR*X&F)Nf&XCo*1mhZO{O>UXimHQ07D zDt%8i={@>=?#ayf^aHH@enxla>W}ot`V;-BKER#Y=Zt(N@igmOW=nmkztUf`v)6IV zgg>Yc>F>~uH+XvRy*|unEWp=e%F;ZeT4s5yC@b3XvYK5Nbv%22b>(?YoYhTD}M{C8!gvM7}uZLwPI3O66`ho#)!;SsC=d=Ue?PA1mx-T3M`IpJNTM z2J%J5Aa;E{MqR)?WUe)od*eK7ICql;tn5={6x?m!mG9mry%H}TQT<+(Wa*wi%yOR~xdDi*X1=fYuMb=NbW4T1e z7ONOtTy9;#T1Zz~YvhjR8tx#jqf>NH=EH1&mo>;tbe#xuWHSMqeg%a~`p^|JLp+>`x{yRz4K#>blz z^;^b9e(Uc%eSMQVqPLm-+>JY%v$@NeV7RoFWoemSw^jGDiaQS`U!3hSV{nY|0XWBm20I=~pr$K6$?>aT9%3D_^V zPpsvBu}s~-_pX^Ctewi85_hUTY-{bRSGOEw!DbE0&iVWgD{TS}lb3H?u z)%G@Ht800(>gNviE%lE2yLyvxjPi{3jPZ>1 zjPo4p8Sk0kDf5&wkFC;E<*DXgqK12k$)4l5mpGoM0MmF5a3W6vPV&s~oa{NpTQ<9? zZh2kIvWEJCsny+BwUb>tf2PoUUEAb%Ei8+xY44|?s<7CaG}${T zRKwIo0agE_NDlVPS=Lx>HcoBMNGSn~MTB)g#)E~p~x+=>XF`= z5`5R09rSlpVXsNza@OR$MU8V7O`THdos_q9X?{V>q{(uQbKG583Qy>6PB&aF7riEh zQxEMJYk<&vsE^asBUO0v9`j;{m z+UsPeS48LGcyRJj8hPP_>#Yqn6*NM6ExOfGr-;j4wJw(?1YddxdIGmb%G@5KENG`( ze`TW_|7Fr+po(rdWx=!CB=d`6YTf2j>*T0wZP+f=)w#iV|;~q7ClCFAC>Jeb4M zn7T+sC~$);7!gzFtd6ahmOo?qaZWmdeR+jQAX#qJFN~>ovrz9O*;^md-u%L% z(zu1~qs8cyb~|T&Q(axdqS}VJ^>e(7q{6(5LS>CeMbsj4Vb_1=d?!N5EvNfs~S+=G4a@uqBGOs&tfh zh12p@gtH&JBG{FCS2#B5{IH`_Q6t^ztsdb$Khh?-rC;P0RrM(E1rmJM3p%LusG?r= z;&Rr)kWH#}`tw@hyR;NqsM|JObi_q@xI?GO6hyidMP7^uU6{UGE_&65vlMbA_^>D! zm60xyag~jVbSV#An66$fdejDsFyuyfj$2%9M}t=uPAwt07p`S+{JZ8sE*u*nWY4g< zkn6bG2wOPcVa*R0A)T$cXAyp{h>lknj;$|rV(%I5f;-jAjd|waP;(m^7kA-KEKi8$6^%l4ZC*fkDrD@u z#$`<|RlnSoTUvjfBe#@$$p(k4tDnE1*%550cLOx3U|=F+InJWMoTVq^EUlBXq>{5} zA7>d+ah6uhS;mB%M>%P3Shl!H(kz5Yvmx9x8`4R$Lzy&-oJq6DIcXNsNwWw_nhoWo zxm41epIe_1^xu(&ZS)F;I1Ahwiy1Z3T`h?ua#V&0{7a~d1wN=^$3iel@QHZw|T zt_yNXVrrd?IAu{jqWhf2MU4%Msr=^Jrt_obHa5(Us#@06=(@WqP*xeWsJ^MzWx5qz zE`tb0+$G*6bxZN@I=kvqE@p?Jl3V|dau>RGlJkfzb&HoYpN~)RSWxJ+&BA==P9?v5 zM4a>vd?i$rUl2j(N6@1p=pvVt2AnW6_H8%UxbYUhN{uA8w9r7Ufq2-6G_jJQwAc#Y&eP5i04- zAK53wJ*#7^#yyzQVmIVs<0pa+mVn_GbYIZecuwu?#^p4X#j{P>!*xbUMb0=VzsR{a z=UmI$`r8D8$xeG6HhJyJ;MI*#mkR(yBUQUcs+8r6i z!f?e)BVDENh0!Ba1I}frKqAGZE`;F*Rvvj#7%3`Eq$8uCBcrGzW0Wx5&?_P@N+Lx~ zeraA`au z5#O!_3Ck^q>WGU1Czp;(L1g(CIwj<|6gt)HUN}ue8fBr=!Q>YP?;4#OP_CW!Rp{Ks z-Y;Lj9G+dx#e3-?4jx=3T@S9G|hC;kbj@*_w9_FLK;z?c}(hC-xrZza;Wq zUACv1xd`zpMwxx}@_08lnfFRFNrw}zNoO)wUS?Ej=9_D)AaupvqSig3t5mLvk&Z%c zihG7O*SvQ%d(J4;3*>;&Tz3gQ-8awndB#pi9!Z-bZQWFF(pJv<5Xy%)0TrATX&B6# zDyy=3$_&+GQEhVrB^L$Xe6Mf9H)ZKLr>?0%B`mIOI!C20K4ff`&(;B@z{P*th?(w|c?!Q0! zbMued%Kt^qFGl`xiSYgJ(@`Hq9gZFuJw1AEyZ`d&we9{JqhAjFcSi5&A`G?c`@08a8 zTAVLtNKAgr=$Oiw=`m-<%#K+bb3@GfE>@QXT^hO^=yEu=TWoynn(oK;TGMM?pDjrb zCcWCXYs!X{4XGKagHv1i#(jV4fz+>3zoR`LLz`zMLV3rS$}EThX!>9@y&rGAk4GC% zLZfn-qtd|qnI-C6-tC+DdZX1!-b9Y!&E12%U3^MyXO6~OinrhDGybd8Kloq9EDWEz zoSB~4%)1+^hcc_MfLU^zn0wH`oQd<8NAMSB5j@Il!EO9wd8_^vGc~@kdTSrORtoEj zFr`?Ju?AYh^;q)`SXVRmvsu@eH@eG0W z`X@cpycyMJ@aFR!_LF_rdRNcl?dNXh=vmhCfZw`0@DaVr)qL-83*R2BBj+A<5?_rO zw-td_=0IcwK2!aH4`hNYkPULcL{I}Jfyv-FFa;bBR)R~xDsUON99#ibgDb%ra22>3 zTm#mEYr%Ekdhj#wb8rLr1-KF11a1bu1h;@&!8&joSPy;$ZU?^x8^9f4Be)Z622TNx zb#Y)bJ1lRuE)8s^M;lJvSA(f^f6ajwa=jjj9Z2jzVh3~k>)|W}%L5Nfne@=RnZIfW zz7M%H@ZPwQGCVi%k=4X^O-u3B%w9oGDSl*K5qQzs!Z&|j%J#Eh*~0yb@^7=&25jV4 zP~z?54RJ`BNlA1&-$9?zgtr5q>q+r?wpB zt_ZwmZN~lXKr7#%cqtRdyPDKUDLA?A zN{&t5-ZNz+IS!`KqV&Fp+vbL1+^-JUPQF=t@GIO7T2~P7)r4zV&6MPF+9mqHw|=Ia zn<(FA%62*VSV6g75!e|DAyy9!d`Ap^avMc%zra7cfg`-3 zR;#s}a?{ppgko7k@Vk~WGcGnRZNxSh-Z1d4>%$NKBYc=+S8EWZX(WaqKa_JGsHgs% zmbiv+O$?hwzAY4^pP3q4nIHBvcm_NRwt?rscJLN>o7#N`>;&(EU7#(nM!g62fcL>( zV1s?&1F#=_7+6D%_)UubX)J60Be9tElMXWO(xwc72SkBr-~}K^*7?x`Q5| zC+G!wgLu#fB!EPa1p0zxkOES{+&~L^a<*s>hyp{YgDm(S((x%*ZRG!Jx%z_Myen<< zAlBopz&BV6jb97kmo&DJ#un1pLK<60V+(0)A&o7hv4u3Ykj56$*g_gxNMj3WY$1&; zq_KrGwvfga(%3>8TS#LIX>1{lCQUZ|kC$|{Fh@;OpBC_dC=d<2AO>^+v7jr61KmJ( z&;#@Yy+Cge5Bh)vkO-1MUyuw^Kq|0bn2)1O|g+zz~oNhVmu%FwS{kILHSDpb!*+VlV=f zfKo6Li~^&<7%&!$1IL2#U;-!u<)8vof+|oACW0C;2^hE+z4(0H-le-TfnVg9k>mw2fqThgI|LU;0~}6+zB>; zyTE2}H@FAf3$}n3bn!9pJMcJo0z3(x0$ah;;2H2N*cSK#y$u*`)!*RvTW}B@0^fn} z!C?@fM^!)r3(z(!+J+SkydVa20kMEKV$nt{+K5FPv1lU}ZN#FDShNwebGVxooA|;XOaaskTGWab zwW39>Xi+O#)QT3hqD8G}Q7c;1iWaq^MXhL2D_Ycw7PX>9t!PmzTGWabwW39>Xi+O# z)QT3hqD8G}Q7c;1iWaq^MXhL2D_Ycw7PX>9t!PmzTGWabwW39>Xi+O#)QT3hVsUn0 zarhzzJPWpg=fHOG7Mk`pcn9nR?}A;R4Xg7W*aO}Ndw~u1fe*lb@L}L#9m9QQ7r>Vd ze9@u!ibL^Tg5s+V#cXE9Y-XjoZ{`aSrQ<;#kN^@v5@5AEW-}}9%@y;Rl}-bE700(n zN@sxnzz4YR=36AC2ZBLhFgOMb0l8pkU_aj`DZYJBd;z2Q0!H!uj$)p((nX*ci~uE| z6qrXCqrhmuH=xXTR(c#b7K{fIKp7|p6`&GS0mh=teO5ftP7HQbjTQSTXxpG5c7)C*_M4rEdZ^gI|JM0AJbiC5z%q7R8q= zitnBj-)$(qgHn0}xC3kicY;meF0dKg4ekN=f-PVhnzcLdEgBYJey`Hsf`i}?_zrvz z4ub&WD+PGkz&u|bT!1JL4ZI)*bOEt|y5<{c#jIbxgay>KMO|CeHERSY#$}s$2Ju$l zJ!)pBzMpS=b_YIWR%ZrdtNy?TGC>x|2036Nr~#9}WN;jq0*(iBX_IweCG@3W6}Svs z4z2*J!IfYQxC$`3MaSCEu{Lz94IOJk$J)@bHgv2F9cx3!+R(8!bgT^>YeUD{(6Kgj ztPLG&L&w_Cu{Lz94IOJk$J)@bHgv2F9cx3!+R(8!bgT_a<;PO_u~ase%EnUJSSlM! zWn-yqER~I=vawV)mdeIb*;pzYOJ!rJY%GDjQ2>W2tN`m5rscu~ase%BIw9ER~I=vawV)mdeIb*;pzYOJ!rJY%GDjQ2>W2tN`m5rscu~ase%EnUJ zSgL(ks(o0heORh}SgL(ks(o0hedtOCx{`seWS}b3LCAk(Fz-_u+a(|t+3Gw8?CU>3LCAk z(Fz-_u+a(|t+3Gw8?CU>3LCAk(Fz-_u+a(|t+3Gw8?CU>3LCAk(Fz-_u+a(|t+3Gw z8?CU>3LCAk(F$Acb)0*eC)I8&2KO;&N^nf~|F))3H~&|){{LdDXWZpy+{Ilv<|bA& zz}yvgXesTax{K6YMl5xp6KUGj4tn4n?R?#Zum8$@ADXzHl&vQf>q*6W?0_FT;KvU5 zu>*eWfFC>H#}4?h1Agp)A3Na34*0PHe(ZoBJK)C-_^|_i?0_FT;KvU5u>*eWfFC>H z#}4?h1Agp)A3Na34*0PHe(ZoBJK)C-_^|_i?0_FT;KvU5u>*eWfFC>H#}4?h1Agp) zA3Na34*0PHe(ZoBJK)C-_^|_i?0_FT;KvU5u>*eWfFC>H#}4?h1Agp)A3Na34*0PH ze(ZoBJK)C-_^|{2e{#p-r{(+U_x<$ye)@es{l1@m-%r2qr{DL}@B8WZ{q*~O`h7qB zzMp>IPrvV{-}lq+`|0=n^!tALeLwxapMKv@zwf8t_tWqD>G%Eg`+oX;KmER+e&0{O z@2B7Q)9?G~_x<$ye)@Yq{k@<5-cNt;r@!~p-}~wB{q*;K`g=e9y`TQxPk-;HzxUJM z`|0of^!I-Hdq4fXpZ?xYfA6Qi_tW3|>F@pY_kQ|&KmEO*{@%}>M+@JUXxgv^XtO*Q z;MpPYf*8;R#DcCM4s-+EK@ZRq^a8y>Jm>=wKq5#2eL*rv0jXdv&xPuw&s{^STtn={ zi=G`c&+T}&zLjT@PlIQ`vtS!|4r~W+A^SEXu6Mvr@GjT|+OSvefj!`Tuou{1ANT<5 z2OrYM4-I_9n6FK@f%m{3@IKfJ_JI$;e()jq2z(4a0iS{c;4|*a%+qHNcWQpL+T5j? z=W>J4adXc$jCeFx=9%0e(xq`X&qd9BT^{bVc7~@l=1o|)Ej^y(ok1484L^J&1ilJ< z+7XYd7h76_N;MiIZjp5TR%3jPQs;umdb!VAj<9wrQ%6tv>oZ-iO1&iw_R47AYtf>*7E z2yhP|=TK=xUWZc}rW|)yDl&(m@-VWU$+zc)uYzfa4B618#3Zc0ksqgC+NF}5y4U2D zdzj9C!8)M)BWgS>84MxJ`C-b`?Z5kDEF@+9Lt*?7KQg{xULtwz>Gl%nha%rCa(3DR zM_PtMJM~YCGw$*m%Xj(wXea)ll;a@Wc4aS|_T|A{;t&5i)^V`KhFfQQztp(fGTm}} zm@`ksO`QimfVKl~8y`}CUD11?apS%lOC0(I*04Iy8u+f>$vG4GWXu)# zJQzT@UQ7+*;Le8y6$s_%b$VJpqI4`c-{*Dq3pQGs?gSyQV6t0|b4E|wuf-SX+g)fEeu4bq_!3xyHlb>PWSh4oFEkscG-x_zUIG4aT$^^rcnKI}8(w z=NzIR8MIVGKgr)|ZE_UedRparr^HN-gK&fW7fwehFVh#A)@9o3k>$l(VDZ~d2Th82 z_aQ&igLcfXn=o<}{snjr6#O}T7Oj%_O#j+0-mc*qH05F1MDT}}e(#hKd}&3I`3m;s zsxVw)j?ah?KQ$cmWpFS|IrnOJ^&hzi$7zC#=nLD04&U^g=!=wv^dC+why8~sq#}Bl zb^(bsHho^;3#V=l6HG_=S}5rcI`IDKrIUsZDRDybFq=z}@LRqmD=~N6=23L3?7HL#1l^57RS+QWHT*9*EzuQEs1!PggIYTwlRF1tX43 zbCAc`V(y<=Q%*7e=y=XE_*XOQ=v-zYnfXR1GvDzd*1B2A?4na;cF~_?cF~JEo2TLX z%p6DkhRhb)Df5KhmH9xsS=Zs0dXHJrfmO5EJ5A;~dCW=>7zeX1 zkY=7!9_u~~XBChr(ol_ynF*C7X^NB8dg55!XTCD);VfW%hI;;SthLktZB|R_CiA3v zOSv;ig)urhSgs_WKJWif00@<(<)BNB95}~vI>})X=Sl8%@Ed0%jK<2Kbdu9=7$bb z*{n>H52t{)Hi@jeSEIbFEi(!E$$B#D&mE^vRH>{ga|-iLPGvQAy2hI=k+$z`*0%nE2TlPi`vr>l^;jFseKSrvwvpRC?;FR`$K3-lJ= zlnh~2zeiOcR&IHg^~#v@1^+qLI7?uCmR+n=wwpKmLs?m6FKfNo+GZ7;efl%jd;6TV z&Jy+4`fJw4VqTcaG3%T_r(5Z)Zp(%%&>5_F(uMU-`om$?8272n7gJfL9WZBwcAy5( z4sPYRj(J|Ww1x?kb}IE@T0^q52G(q5#+!#WQH{H)br18Rrb3^5;m$q%J*Dmlk#T1W(+aaf=+)GO zrY7VGyu2+k^`WIcVx&I0N_}*b`sg9`5iRxMlln-I`pA^}=q~lqM>9{4X98w+aW^UP zC{~!sQPGrpz3R_;EelmYDgC}u`YF~e%&|+AI!KW^FlEn6G3KCY$|{TYev4)%4>f0I zAe&jfi89N#T58M8dmezi(NVMRWV0H=`c)U8Yi1@iyHx3D)-#Nu)gLzVp(!)wL+kNo zJ~V3~F&~<>jhGLu&oeWjSxtwT&{j7y6Ph)3mmrqwhKEl3`36$x$Er5mE~iuO9(eB5ARZg*HOAs zsqFG2kp(|%GB^R8;<#s>2|e4T7aZv)GMuc2qq`f~EG#W&o&AiPo{h?rww~5ChT7Du zZIx>!B)qLu>e~rlaO?A8i29^+s&Agi{eY_*%0G4eQK7utNeW1*>-Y6eTsw<5oVT`+ zk9{F3?1NUF=%o!~UP4qisCdImrzX-H43$KAy42brWn2@JgRU+Wa!m?RiTTLofUyx& zMkhQYHzXuiBGe+{-kNwGG_~qdO`TJTH6r&zt}~A2>V`bE^N?Lv(vs+eGV`c%;S`)5 zlA9Nz!Z`}brJK^dz?5X-#o%W`U42x_$X)(Ja_MMOI@*-DzCD$Av*9J35b2tPHYTo5 ze3Iky$<%=JGgRU|L0;mvqf#3?aqY~niQ_>D`O!{%bQVV_RS_w83BP`m%EVVf)J|IV z4&gy1?lDx7mE4s0ol?oPon%VdP>K74ys)cK2aIb6-d9KRlDY`5M^ZvkDlzzyhH|7= zyb`5L%AjHxF#JdKHBrBg-E|9lqCAdc77KmZBKe3sWs`)KAJa4tjPC55RQ zLa{XjDM^cz3)BUa(8{FMlu(fB%x@?kNnz@C(y~d?cOTTlLOlkx)llI$k`BZBMqJ+v zQJ;q>+_qOAGB)oQVeWMJoZd1W zeOH-K`mX8BRjIU%Ce6uhsi$gYxntO@ZpcS2p)NqFJ(-57EW<)iP05HBpZCB%D% zR2-0acaQ?7244(OFLy${9^|FWhH4YPpAd>ysC_{ynM;S)8PyjbeZLSN2ahHf;Wq<0 zE|Z5OcMDPRolr(D$H3^U}o~!!Z19jg?UG(!g;$V6yAd&D(rU~A-^Q$@qCDS#mEWI4<)TQd1r{) zAEIzg-Xn6jx>VRTOnsNq!)QfHm*gL!z6!dgScU>UOt_p2!6|9yaZCtNC;R}FDso|0 zUpu*x;yN_M8yKQOytHj0UO1F6Wzyn=a_mv%!agcPa$#z6h!>K}K+iKik^G*CYlBb= zj!Mlws_RPXXgLzAQ`%7}&BD8&o$D;&J%=u2M>s8EUT0J*p}Z+&^=gRP3$;slhWf}*z89fBH&kk`)TGp|oU>BC2~uI6 zp;8VT*Y>>Bs7`q4hL`bh>fnsWpz=~jb1arP3^hThxlq&s$LbI@1!}tRmV|gl?zB#L z)C?}+Pz<%OyOJG73N(R;)O$gJj4r8 zCM|Aw>q4#}AL*MIF;TPRVRMi&ywn?ow=T#_-O?F#WO%8ekW)8=Ttig2T*A~pDWOL~ zp@edj`V8sYA?c$HIelX4>rm1shN(0!V+$juQrkk*!60Q^Q_*ma=(r;%yf1{;PA;vR z;h7fOUs_38e27X8Q8_^>6Mc2$jE}So<2NnjDxs|Egh$JBQ_EnHdFFY#MqZ3yXN`mRV(^EThg+EeK|5cDm z_dz8XUV3VXSJ)ZVNqC|3r7a4%hVqd#g4F}c26(sDJ_MxlNdqHgYlS|8%w z1NETs;iIjjy(E4g4N=b@jS?SEijQqalS>PSvJ*K!*q`=FkV@}yB$a05_82)6I_CqF zqR*6M`mtO|i5n_iN>`{ZL091=bl`Wt#3t0o6YF2y9Iu`rQQD?}pke$l3E;Or9;L2MZXk4uk_|>dQj;nRONdDDu z_=?@gR||bnfNv-Dx#D`RaLx@ZGaQj=3S3ECx9eGOju)8(Bd z$5G;Ul)1LmR*9IfoWsmpY*t zj`_BTV-}m`qyB(zQ9x=H-5l2{rg zvm(MZF76bW>*e^R$b2a>LxrYo z5=)xU#7D~!T3xA-*n=7?nB)J5 zp*K4mNkg-Q+$^oPS@>%VpOq5`hq<djwd>jLZ2=noGzTxO-US44il#B0VHS~m-Sjl|U~$Fm(;BtH?! zPeih(@Rv$lwxQJ_ha-|73g-=>-wr~H9#Zo8a_lbU|Az3pi~P3^ zEvf1*+LtNX*WKYuI4{dFOJuU7oo9(_mbCK*;TS8g_4PtuCbUmzpU`WC#>yjeiO`n_ z%}!%*o)fy*gm0ZBu@npEMTbw0q7CJ~t1jlf=CRC+VBM?GyK1u{RS!>Zm1Xv#Py=Ok zs==~uRgHNID(}e^t7j?CM;)-0>+Rr$4*W>DR@`0%^gKuSkCfZ>Pu#Ivu77P!CRIUH zhG-Rq-gboNbNqb+4&xT(x_9N=%cYatb0>Z!tn`24Zv175jFYAlR17nMQdKdtFPhcO zY71q!nd21ZVR+PfX490b8fL;Ih+U>-dPof}tJtx`tX|}}OgEb0nJz91n4e>~sm$Ba z`mk{^-{j&hJ)_6;6lPz@Ud;4Kr=~YM{g9Dh?@1#~86e?fu8@(^`Y~yNk9F{OpZL2^ z{5>W9o`UuoANVtEs2hJxI5RjNxyl*iZgLO?rPA&?kC-h9=b$-i&9Mt}h~k;KGK6_7 zW(La;LOv+EbJq(=#+hBfBg)MW8JbmYv7@cL@yL^8Sq$cKD$POTr| z7L=vNHEEac$b-Dj&e+Kx48zEyhe3CX{bwG}Pm0qHU(0k>$M~;VtpD*-5p?jJhh8>H{agQATB*%~C z_=+4~mg6CF)MXsY*{Rz3uU7222)!LV%+X*wd*hg+;cZu&zu{MC`#0&W56JOzIqngA zbx`PorngoHjh*CZX4f4wmPZ{lwv?l>7zZU!J!GV|M~)xM@fA6~EXRYge%~RNX6&i< z%E+{bIjV16esQSXnpq`|79~hqcUAy2T46NIqNwE3k*iSX`Sm0ArZf7ay@3)Myo3HnYm7&Sb$}pITWlo#UqC%4Yi1 z3&&5J;!_{7zl2Zsnm+A#pDvz(j6RKZ_kHZL8V)jek)~wd?jZJeK zbTW$;&(l7$qlg~3blL2sdg#(+OP1yZ<;xu=GaG$-Q?I^j=kj=FUMYTblS1go>Jf#>qVc8@4j*zBu9F2 zIC3A4Z5zx^wuh~)o>~0&MrH87IXWl$L2tLv-{EU*P|GjF+_=KacUo zB(NIc^q7S)kHowh^HrA}UG~Kejh#T)CVaDY=3#c9^U>G*!`bspeNE5wEjz~_Qs1!# z=wTJWAYt9i3`jHo(aNMh+ZNm{&+L<@17?DxWkv3gXZFW4yW_Rr8_!Az?uw_+wldir z@DGtY+_87M>~6=NaTl^*oU=b%#dU=+AGCNHBn8R!4pzJ?0t8Un#AsR7puwEO1}L*jv8Lfdu#TXGh>}Xz7nWr z{_9L;zc#S@=_>5eja0%n)MT{m8#soPOk?f2LiPu&woZU5VxPc?)`?KX>=#&LO@|u6 zzJZghlb}kh3D#t522`n4#$JIZLyfe`ttr+iP@}90_6|H1YP40!9)hPaAM`x4s~=0I zoX)*7{UWnGV`$8*3dyLo$!cP?zvb3)dU-FYkD~YXkbZ~9bE4F9meg~$ zl$06mvJ<(a=yFn(BdKFGM9$=bJzSk!nEpxA?ipo?gp>ZMD(63#_UPb!6z#INq_>Zx z*C*-Cq$Hhk;|T_7H)GvARw6CuE>rBg^$%LdH`W)_VKixsvc3vY-{SJ6@D2;*p(o-# zz{8f_);AvNhyA^&C;SCn=&5jF_BAf#-TE5eUTF*8Sl^o#K%BwUWYFqHs|jd`xidM9 zwNU4(h0IA_&a7lJMq!t8^n5X21(-d~3z&nvif2Ep$IKk&Pt1`W(Jj6rm}`!vjk8~> zX^YLmX*M)7`H^APy`e9V<79dSGjG2!qFl@@^{%w)D2{RuV-Y@O@~O#zb$}ekTAy(= zD=r5m_KU=aBJq((d@K^^1T7~(4ubjgnpGrd$!3h_@XV^zQPMxtx5AC0_j;E8iSO-0 zzF5tYxVT4yN8IEIidp;?xiBj&pR7-pmS|d(=HA$8S?s(`OpRPQN2UxzFEH0~WYQs2 zFl7nE5WeCo2qQBT0H$9)Z<|_oOLNI)(5zEJJuK;coSV>>GI-*8QNt&{bVl{9N^WjZBXj)r1jAm6z zf9vd}`ropQ-OWy}6b7sM((;TIixMjqEmq7cR;-Iyu^wW@;-$CfBfVRW^cDl9wh{cyJVVM$Vs7EF;F|F(%2TU6~Wl7Ur7s{|9_bzqbGY literal 0 HcmV?d00001 diff --git a/src/functions/postgres.js b/src/functions/postgres.js index a6431b7..de137ea 100644 --- a/src/functions/postgres.js +++ b/src/functions/postgres.js @@ -1,36 +1,59 @@ -const { lvl } = require("./tools"); +const { lvl, randomExp } = require("./tools"); module.exports = { messageCount: async function (connect, userID) { - query = `UPDATE users SET msg_count = msg_count + 1 WHERE users.user_id = '${userID}'`; - await connect.query(query); + const update = await connect.users.update({ + where: { + user_id: userID, + }, + data: { + msg_count: { + increment: 1, + }, + }, + }); + return update; }, - addExp: async function (connect, userID) { - let query = `SELECT users.user_id, users.exp FROM users WHERE users.user_id = '${userID}'`; - const check = await connect.query(query); - if (check.rowCount == 0) { - query = `INSERT INTO users(user_id,msg_count,exp) VALUES ('${userID}',1,${Math.floor( - Math.random() * 25 - )})`; - await connect.query(query); - } else { - let exp = check.rows[0].exp + Math.floor(Math.random() * 25); - console.debug(lvl(exp)); - query = - query = `UPDATE users SET exp = ${exp},msg_count = msg_count + 1,lvl = ${lvl( - exp - )} WHERE users.user_id = '${userID}'`; - await connect.query(query); - } + profile: async function (connect, userID) { + return await connect.users.findUnique({ + where: { + user_id: userID, + }, + }); }, - profil: async function (connect, userID) { - let query = `SELECT * FROM users WHERE users.user_id = '${userID}'`; - const check = await connect.query(query); - if (check.rowCount == 0) { - query = `INSERT INTO users(user_id) VALUES ('${userID}')`; - await connect.query(query); - } - return check.rows; + addExp: async function (connect, userID, min, max) { + const rExp = randomExp(min, max); + return await connect.users.upsert({ + where: { + user_id: userID, + }, + create: { + user_id: userID, + msg_count: 1, + exp: randomExp(min, max), + lvl: 0, + }, + update: { + msg_count: { + increment: 1, + }, + exp: { + increment: rExp, + }, + lvl: lvl( + ( + await connect.users.findUnique({ + where: { + user_id: userID, + }, + select: { + exp: true, + }, + }) + ).exp + rExp + ), + }, + }); }, addBadge: async function (args) {}, giveBadge: async function (args) {}, diff --git a/src/functions/tools.js b/src/functions/tools.js index 0250c27..f72eca6 100644 --- a/src/functions/tools.js +++ b/src/functions/tools.js @@ -2,4 +2,22 @@ module.exports = { lvl: function (exp) { return Math.floor(Math.sqrt(exp) / 5); }, + expThreshold: function (lvl) { + return Math.floor(lvl * lvl * 25); + }, + randomExp: function (min, max) { + return Math.floor(Math.random() * (max - min)) + min; + }, + roundRect: function (ctx, x, y, width, height, radius) { + if (width < 2 * radius) radius = width / 2; + if (height < 2 * radius) radius = height / 2; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.arcTo(x + width, y, x + width, y + height, radius); + ctx.arcTo(x + width, y + height, x, y + height, radius); + ctx.arcTo(x, y + height, x, y, radius); + ctx.arcTo(x, y, x + width, y, radius); + ctx.closePath(); + return ctx; + }, };