's from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true,
+ /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true,
+ /* Ensure that casing is correct in imports. */
+
+ /* Type Checking */
+ "strict": true,
+ /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true
+ /* Skip type checking all .d.ts files. */
+ }
+}
diff --git a/db/Dockerfile b/db/Dockerfile
new file mode 100644
index 0000000..ef013a4
--- /dev/null
+++ b/db/Dockerfile
@@ -0,0 +1,3 @@
+FROM mysql:8.0
+
+ADD setup.sql /docker-entrypoint-initdb.d
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..27976d4
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,58 @@
+version: '3.9'
+
+services:
+ frontend:
+ container_name: frontend
+ build:
+ context: ./next
+ dockerfile: Dockerfile
+ ports:
+ - "3000:3000"
+ volumes:
+ - ./next/.env:/next/.env
+ - ./next/:/next/
+ - /next/node_modules
+ - /next/.next
+
+ platform:
+ container_name: platform
+ build:
+ context: ./platform
+ target: prod
+ ports:
+ - "8000:8000"
+ restart: always
+ volumes:
+ - ./platform:/app/src/
+ env_file:
+ - next/.env
+ environment:
+ REWORKD_PLATFORM_HOST: 0.0.0.0
+ REWORKD_PLATFORM_DB_HOST: agentgpt_db
+ REWORKD_PLATFORM_DB_PORT: "3307"
+ REWORKD_PLATFORM_DB_USER: "reworkd_platform"
+ REWORKD_PLATFORM_DB_PASS: "reworkd_platform"
+ REWORKD_PLATFORM_DB_BASE: "reworkd_platform"
+ depends_on:
+ - agentgpt_db
+
+ agentgpt_db:
+ image: mysql:8.0
+ container_name: agentgpt_db
+ restart: always
+ build:
+ context: ./db
+ ports:
+ - "3308:3307"
+ environment:
+ MYSQL_DATABASE: "reworkd_platform"
+ MYSQL_USER: "reworkd_platform"
+ MYSQL_PASSWORD: "reworkd_platform"
+ MYSQL_ROOT_PASSWORD: "reworkd_platform"
+ MYSQL_TCP_PORT: 3307
+ volumes:
+ - agentgpt_db:/var/lib/mysql
+ command: [ 'mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ]
+
+volumes:
+ agentgpt_db:
diff --git a/docs/README.hu-Cs4K1Sr4C.md b/docs/README.hu-Cs4K1Sr4C.md
new file mode 100644
index 0000000..2537988
--- /dev/null
+++ b/docs/README.hu-Cs4K1Sr4C.md
@@ -0,0 +1,235 @@
+
+
+
+
+ đ¤ Szerelje Ãļssze, konfigurÃĄlja Ês telepÃtse az autonÃŗm AI-ÃŧgynÃļkÃļket a bÃļngÊszÅjÊben. đ¤
+
+
+
+
+
+
+
+
+
+đ Weboldal
+ âĸ
+đ¤ HozzÃĄjÃĄrulÃĄs
+ âĸ
+đĻ Twitter
+ âĸ
+đĸ Discord
+
+
+---
+
+
+đ TÃĄmogassa az AgentGPT fejlesztÊsÊt!! đ
+
+
+
+Csatlakozzon hozzÃĄnk, az AgentGPT fejlesztÊsÊhez, egy nyÃlt forrÃĄskÃŗdÃē projekthez, amely az AI automatizÃĄlÃĄs hatÃĄrait feszegeti! KihÃvÃĄsokkal nÊzÃŧnk szembe a mÅąkÃļdÊsi kÃļltsÊgek fedezÊse đ¸, beleÊrtve a hÃĄzon belÃŧli API-t Ês egyÊb infrastrukturÃĄlis kÃļltsÊgeket, amelyek az elÅrejelzÊsek szerint kÃļrÃŧlbelÃŧl napi 150 USD-ra nÅnek. đŗđ¤ Az Ãn szponzorÃĄlÃĄsa elÅsegÃtenÊ a fejlÅdÊst azÃĄltal, hogy segÃt nekÃŧnk az erÅforrÃĄsok bÅvÃtÊsÊben, a funkciÃŗk Ês a funkcionalitÃĄs bÅvÃtÊsÊben, valamint az izgalmas projekt folytatÃĄsÃĄban! đ
+
+
+
+Ennek az ingyenes, nyÃlt forrÃĄskÃŗdÃē projektnek a szponzorÃĄlÃĄsÃĄval nem csak az avatarod/logÃŗdat lÃĄthatod alÃĄbb, hanem exkluzÃv lehetÅsÊget kapsz az alapÃtÃŗkkal valÃŗ beszÊlgetÊsre is!đŖī¸
+
+
+
+đ Kattint ide ha szeretnÊd tÃĄmogatni a projektet
+
+
+
+đđģ Szponzoraink đđģ
+
+
+
+
+---
+
+Az AgentGPT lehetÅvÊ teszi az automatizÃĄlt AI-ÃŧgynÃļkÃļk konfigurÃĄlÃĄsÃĄt Ês Ãŧzembe helyezÊsÊt.
+Nevezze el sajÃĄt egyÊni mestersÊges intelligenciÃĄjÃĄt, Ês tegye lehetÅvÊ, hogy bÃĄrmilyen cÊlt elÊrjen.
+MegkÃsÊrli elÊrni a cÊlt az elvÊgzendÅ feladatok ÃĄtgondolÃĄsÃĄval, vÊgrehajtÃĄsÃĄval Ês az eredmÊnyekbÅl valÃŗ tanulÃĄssal đ.
+
+## đ Ãtiterv
+
+Ez a platform jelenleg bÊta ÃĄllapotban van Ês a kÃļvetkezÅkÃļn dolgozunk:
+
+- HosszÃē tÃĄvÃē memÃŗria vektoros DB-n keresztÃŧl đ§
+- WebbÃļngÊszÊsi lehetÅsÊgek a LangChain-en keresztÃŧl đ
+- InterakciÃŗ webhelyekkel Ês emberekkel đ¨âđŠâđĻ
+- ÃrÃĄsi lehetÅsÊgek egy dokumentum API-n keresztÃŧl đ
+- Az AI-ÃŧgynÃļkÃļk mentÊse đž
+- FelhasznÃĄlÃŗk Ês hitelesÃtÊs đ
+- Stripe integrÃĄciÃŗ egy alsÃŗ limites fizetÅs verziÃŗhoz (hogy ne aggÃŗdjunk az infra kÃļltsÊgek miatt) đĩ
+
+Hamarosan mÊg tÃļbb jÃļn...
+
+## đ Tech Stack
+
+- â
**Bootstrapping**: [create-t3-app](https://create.t3.gg).
+- â
**Framework**: [Nextjs 13 + Typescript](https://nextjs.org/).
+- â
**Auth**: [Next-Auth.js](https://next-auth.js.org)
+- â
**ORM**: [Prisma](https://prisma.io).
+- â
**Database**: [Supabase](https://supabase.com/).
+- â
**Styling**: [TailwindCSS + HeadlessUI](https://tailwindcss.com).
+- â
**Typescript Schema Validation**: [Zod](https://github.com/colinhacks/zod).
+- â
**End-to-end typesafe API**: [tRPC](https://trpc.io/).
+
+## đ¨âđ ElsÅ lÊpÊsek
+
+### đŗ Docker beÃĄllÃtÃĄsa
+
+Az AgentGPT helyi futtatÃĄsÃĄnak legegyszerÅąbb mÃŗdja a Docker hasznÃĄlata.
+Egy kÊnyelmes beÃĄllÃtÃĄsi szkriptet biztosÃtunk az indulÃĄshoz.
+
+```bash
+./setup.sh --docker
+```
+
+### đˇ Helyi fejlesztÊsi beÃĄllÃtÃĄsok
+
+Ha helyben szeretnÊ fejleszteni az Agent GPT-t, a legegyszerÅąbb mÃŗdja a mellÊkelt telepÃtÅszkript hasznÃĄlata.
+
+```bash
+./setup.sh --local
+```
+
+### đ ī¸ ManuÃĄlis beÃĄllÃtÃĄs
+
+> đ§ SzÃŧksÊge lesz a [Nodejs +18 (LTS recommended)](https://nodejs.org/en/) telepÃtÊsre.
+
+1. ElÃĄgaztatni a tÃĄrat
+
+- [ElÃĄgaztatÃĄs](https://github.com/reworkd/AgentGPT/fork).
+
+2. KlÃŗnozni a tÃĄrolÃŗt:
+
+```bash
+git clone git@github.com:YOU_USER/AgentGPT.git
+```
+
+3. FÃŧggÅsÊgek telepÃtÊse:
+
+```bash
+cd AgentGPT
+npm install
+```
+
+4. Hozzon lÊtre egy **.env** fÃĄjlt a kÃļvetkezÅ tartalommal:
+
+> đ§ A kÃļrnyezeti vÃĄltozÃŗknak meg kell egyeznie a kÃļvetkezÅ [sÊmÃĄval](https://github.com/reworkd/AgentGPT/blob/main/src/env/schema.mjs).
+
+```bash
+# TelepÃtÊsi kÃļrnyezet:
+NODE_ENV=development
+
+# KÃļvetkezÅ hitelesÃtÊsi konfigurÃĄciÃŗ:
+# Hozzon lÊtre egy titkos kulcsot az `openssl rand -base64 32` paranccsal
+NEXTAUTH_SECRET=VÃLTOZTASS_MEG
+NEXTAUTH_URL=http://localhost:3000
+DATABASE_URL=file:./db.sqlite
+
+# OpenAI API kulcs
+OPENAI_API_KEY=VÃLTOZTASS_MEG
+```
+
+5. MÃŗdosÃtsa a prisma sÊmÃĄt az sqlite hasznÃĄlatÃĄhoz:
+
+```bash
+./prisma/useSqlite.sh
+```
+
+**MegjegyzÊs:** Ezt csak akkor kell megtenni, ha sqlite-ot szeretne hasznÃĄlni.
+
+6. KÊsz đĨŗ, kÃļvetkezÅ a futtatÃĄs:
+
+```bash
+# AdatbÃĄzis-migrÃĄlÃĄsok lÊtrehozÃĄsa
+npx prisma db push
+npm run dev
+```
+
+### đ GitHub Codespaces
+
+ÃllÃtsa be azonnal az AgentGPT-t a felhÅben a [GitHub Codespaces](https://github.com/features/codespaces) hasznÃĄlatÃĄval.
+
+1. A GitHub-tÃĄrhelyen kattintson a zÃļld "KÃŗd" gombra, Ês vÃĄlassza a "KÃŗdterek" lehetÅsÊget.
+2. Hozzon lÊtre egy Ãēj kÃŗdteret, vagy vÃĄlasszon egy elÅzÅt, amelyet mÃĄr lÊtrehozott.
+3. A kÃŗdtÊr kÃŧlÃļn lapon nyÃlik meg a bÃļngÊszÅben.
+4. A terminÃĄlban futtassa a `bash ./setup.sh --local` parancsot
+5. Amikor a terminÃĄl kÊri, adja hozzÃĄ OpenAI API-kulcsÃĄt.
+6. Kattintson a "MegnyitÃĄs bÃļngÊszÅben" gombra, amikor az ÃļsszeÃĄllÃtÃĄsi folyamat befejezÅdÃļtt.
+
+- Az AgentGPT leÃĄllÃtÃĄsÃĄhoz Ãrja be a Ctrl+C billentyÅąkombinÃĄciÃŗt a terminÃĄlba.
+- Az AgentGPT ÃējraindÃtÃĄsÃĄhoz futtassa az "npm run dev" parancsot a terminÃĄlban.
+
+Futtassa a projektet đĨŗ
+
+```
+npm run dev
+```
+
+---
+
+
+đđģ TovÃĄbbi szponzoraink đđģ
+
+
+
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/docs/README.zh-HANS.md b/docs/README.zh-HANS.md
new file mode 100644
index 0000000..6193cfb
--- /dev/null
+++ b/docs/README.zh-HANS.md
@@ -0,0 +1,127 @@
+
+
+
+
+ đ¤ įģčŖ
īŧé
įŊŽåé¨įŊ˛čĒä¸ģį AI äģŖįīŧåĒéæĩč§å¨īŧ đ¤
+
+
+
+
+
+
+
+
+
+đ įéžæĨ
+ âĸ
+đ ææĄŖ
+ âĸ
+đ¤ åä¸č´ĄįŽ
+ âĸ
+đĻ æ¨įš
+ âĸ
+đĸ Discord
+
+
+AgentGPTå
莸æ¨é
įŊŽåé¨įŊ˛čĒä¸ģAIäģŖįã
+ä¸ēæ¨čĒåˇąįåŽåļAIåŊåīŧåšļäŊŋå
ļčŋŊæąäģģäŊå¯äģĨæŗ蹥å°įįŽæ ã
+åŽå°éčŋæččĻæ§čĄįäģģåĄãæ§čĄčŋäēäģģåĄåšļäģįģæä¸åĻäš æĨå°č¯åŽį°įŽæ đã
+
+---
+
+## ⨠æŧį¤ē
+ä¸ēäēčˇåžæäŊŗįæŧį¤ēäŊéĒīŧč¯ˇį´æĨčŽŋéŽ [our site](https://agentgpt.reworkd.ai) :)
+
+[Demo Video](https://github.com/reworkd/AgentGPT/assets/50181239/5348e44a-29a5-4280-a06b-fe1429a8d99e)
+
+
+## đ¨âđ åŧå§äŊŋį¨
+
+äŊŋį¨AgentGPTįæįŽåæšæŗæ¯čĒå¨čŽžįŊŽCLIīŧč¯ĨCLIä¸éĄšįŽæįģå¨ä¸čĩˇã
+cliä¸ēAgentGPT莞įŊŽäēäģĨä¸å
厚īŧ
+- đ [Environment variables](https://github.com/reworkd/AgentGPT/blob/main/.env.example) (å API å¯éĨ)
+- đī¸ [Database](https://github.com/reworkd/AgentGPT/tree/main/db) (Mysql)
+- đ¤ [Backend](https://github.com/reworkd/AgentGPT/tree/main/platform) (FastAPI)
+- đ¨ [Frontend](https://github.com/reworkd/AgentGPT/tree/main/next) (Nextjs)
+
+## å
åŗæĄäģļđ
+
+åŧå§äšåīŧč¯ˇįĄŽäŋæ¨åˇ˛åŽčŖ
äēäģĨä¸å
厚īŧ
+
+- éæŠäŊ įįŧčžå¨īŧäžåĻ[Visual Studio Code (VS Code)](https://code.visualstudio.com/download)
+- [Node.js](https://nodejs.org/en/download)
+- [Git](https://git-scm.com/downloads)
+- [Docker](https://www.docker.com/products/docker-desktop). åŽčŖ
åŽæåīŧč¯ˇååģēä¸ä¸Ēč´Ļåˇīŧæåŧ Docker åēį¨į¨åēīŧåšļįģåŊã
+- ä¸ä¸Ē [OpenAI API key](https://platform.openai.com/signup)
+- ä¸ä¸Ē [Serper API Key](https://serper.dev/signup) (å¯é)
+- ä¸ä¸Ē [Replicate API Token](https://replicate.com/signin) (å¯é)
+
+## å
Ĩé¨æåđ
+1. **æåŧäŊ įįŧčžå¨**
+
+2. **æåŧįģįĢ¯** - é常īŧäŊ å¯äģĨå¨'Terminal'æ įžéĄĩä¸æ§čĄæ¤æäŊīŧæč
äŊŋį¨åŋĢæˇéŽ
+īŧäžåĻīŧå¨ VS Code ä¸īŧ寚äē Windows å¯äģĨäŊŋį¨ `Ctrl + ~`īŧ寚äē Mac å¯äģĨäŊŋį¨ `Control + ~`īŧã
+
+3. **å
éåå¨åēåšļčŋå
ĨįŽåŊ** - ä¸æĻæ¨įįģįĢ¯æåŧīŧæ¨å¯äģĨéčŋčŋčĄä¸éĸįåŊäģ¤å
éåå¨åēåšļčŋå
ĨįŽåŊã
+
+ **For Mac/Linux users** đ đ§
+ ```bash
+ git clone https://github.com/reworkd/AgentGPT.git
+ cd AgentGPT
+ ./setup.sh
+ ```
+ **For Windows users** :windows:
+ ```bash
+ git clone https://github.com/reworkd/AgentGPT.git
+ cd AgentGPT
+ ./setup.bat
+ ```
+4. **æį
§čæŦä¸į莞įŊŽč¯´æčŋčĄæäŊã** - å¨æˇģå éåŊį API å¯éĨäšåīŧįĄŽäŋæææåĄéŊåˇ˛įģčŋčĄčĩˇæĨīŧįļåå¨æ¨įįŊéĄĩæĩč§å¨ä¸čŽŋéŽ [http://localhost:3000](http://localhost:3000)ã
+
+éģåŽĸåŋĢäš! đ
+
+## đ čˇ¯įēŋåž
+
+č¯Ĩåšŗå°įŽåå¤äēæĩč¯éļæŽĩīŧbetaīŧīŧåˇ˛åŽæå莥åä¸įåčŊįåŽæ´å襨å¯å¨æäģŦį
+[public roadmap](https://docs.reworkd.ai/essentials/roadmap)ä¸æžå°ã
+
+
+## đ ææ¯æ
+
+- â
**Bootstrapping**: [create-t3-app](https://create.t3.gg) + [FastAPI-template](https://github.com/s3rius/FastAPI-template).
+- â
**Framework**: [Nextjs 13 + Typescript](https://nextjs.org/) + [FastAPI](https://fastapi.tiangolo.com/)
+- â
**Auth**: [Next-Auth.js](https://next-auth.js.org)
+- â
**ORM**: [Prisma](https://prisma.io) & [SQLModel](https://sqlmodel.tiangolo.com/).
+- â
**Database**: [Planetscale](https://planetscale.com/).
+- â
**Styling**: [TailwindCSS + HeadlessUI](https://tailwindcss.com).
+- â
**Schema Validation**: [Zod](https://github.com/colinhacks/zod) + [Pydantic](https://docs.pydantic.dev/).
+- â
**LLM Tooling**: [Langchain](https://github.com/hwchase17/langchain).
+
+
+
+đ æ¯æ AgentGPT įååą!! đ
+
+
+
+å å
ĨæäģŦīŧå
ąåæ¨å¨AgentGPTįååąīŧčŋæ¯ä¸ä¸ĒįĒį ´äēēåˇĨæēčŊäģŖįčžšįįåŧæē饚įŽīŧæ¨įčĩåŠå°éčŋ帎åŠæäģŦæŠå¤§čĩæēãåĸåŧēåčŊåįģ§įģčŋäģŖčŋä¸Ēäģ¤äēēå
´åĨį饚įŽæĨæ¨å¨čŋæĨīŧđ
+
+
+
+
+
+
+
+đĒ č´ĄįŽč
đĒ
+
+
+
+æäģŦįč´ĄįŽč
äŊŋčŋä¸Ē饚įŽæä¸ēå¯čŊãč°ĸč°ĸīŧđ
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/development/auth.mdx b/docs/development/auth.mdx
new file mode 100644
index 0000000..dcbb1de
--- /dev/null
+++ b/docs/development/auth.mdx
@@ -0,0 +1,63 @@
+---
+title: Authentication
+description: Learn how AgentGPT handles authentication in different development modes and with various providers.
+icon: "lock"
+---
+
+# Authentication in Development Mode
+
+In development mode, your application uses a simplified version of authentication for ease of testing and debugging. This is usually not secure and should not be used in a production environment.
+
+In your `.env` file, you can switch between development and production environments using the `NODE_ENV` variable. When it's set to "development", the application runs in development mode.
+
+To make the application use the insecure, simple version of authentication, set the `NEXTAUTH_SECRET` variable in your `.env` file to a simple, insecure value (e.g., "changeme").
+
+## Accessing Provider Secret Keys
+
+To enable different types of OAuth authentication, you will need to acquire secret keys from the respective providers. Below are the general instructions for getting these secret keys:
+
+
+
+
+Create a project in the Google Cloud Console.
+Go to "Credentials", click on "Create Credentials" and choose "OAuth client ID".
+Configure your OAuth consent screen and application type, then click "Create".
+Your client ID and secret will be displayed.
+For more detailed instructions, visit Google's official [OAuth 2.0 setup guide](https://developers.google.com/identity/protocols/oauth2).
+
+
+
+
+
+Go to your GitHub settings.
+Click on "Developer settings".
+Click on "OAuth Apps" and then "New OAuth App".
+Fill in the required information and click "Register Application".
+The client ID and secret will be displayed on the next page.
+You can find more detailed instructions in the [GitHub OAuth documentation](https://docs.github.com/en/developers/apps/building-oauth-apps).
+
+
+
+
+
+Go to the Discord Developer Portal.
+Click on "New Application".
+Give your application a name and click "Create".
+Go to the "OAuth2" page in your application settings.
+Under "Redirects", add your redirect URIs.
+Click on "Save Changes".
+The client ID can be found on the "General Information" page, and the secret can be found on the "OAuth2" page.
+For more detailed instructions, visit the [Discord OAuth2 documentation](https://discord.com/developers/docs/topics/oauth2).
+
+
+
+
+## Enabling Non-Local Authentication
+
+The `.env` file includes several placeholders for provider client IDs and secrets. Replace these placeholders with the keys obtained from the respective providers:
+
+- For Google, replace the "\*\*\*" placeholders for `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` with the client ID and secret obtained from Google.
+- For GitHub, replace the "\*\*\*" placeholders for `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET` with the client ID and secret obtained from GitHub.
+- For Discord, replace the "\*\*\*" placeholders for `DISCORD_CLIENT_ID` and `DISCORD_CLIENT_SECRET` with the client ID and secret obtained from Discord.
+
+Once these changes are made, your application will be set up to use OAuth authentication with these providers. To switch from local authentication to OAuth authentication, change the `NEXTAUTH_URL` variable in your `.env` file to the URL where your application is hosted. This cannot be localhost.
diff --git a/docs/development/memory.mdx b/docs/development/memory.mdx
new file mode 100644
index 0000000..e81d923
--- /dev/null
+++ b/docs/development/memory.mdx
@@ -0,0 +1,35 @@
+---
+title: Memory
+description: Understanding how AgentGPT manages memory with the help of vector databases.
+icon: "brain"
+---
+
+# Memory Management in AgentGPT
+
+In the quest to accomplish set goals, AI agents perform a plethora of tasks, considering their execution history. When agents operate for extended periods, memory management becomes challenging since their memory is typically as large as their context length. This stands at approximately 8k tokens for GPT-3.5 and GPT-4.
+
+## AgentGPT's Memory Dilemma
+
+Once your agents have run a few loops, they tend to forget their prior actions. Our solution? Vector Databases. Here, we save the agent memory externally, making it accessible when needed.
+
+## What is a Vector Database?
+
+This external documentation - [Weaviate docs](https://weaviate.io/developers/weaviate), provides a detailed explanation. In a nutshell, vector databases enable us to store task execution history externally. This way, agents can access memory from many loops before via a text similarity search. Essentially, the way humans retrieve memory is comparable to the Vector DB's operation.
+
+## Why Weaviate?
+
+Weaviate is our go-to Vector Database for the following reasons:
+
+1. Weaviate is open-source and conveniently accessible via docker-compose, eliminating the need for an API key for local AgentGPT runs.
+2. Its cloud offering can scale according to our workload, saving us from managing additional infrastructure.
+3. Weaviate integrates seamlessly with tools like LangChain.
+
+However, if you have suggestions for other databases, we encourage you to create a ticket or a pull request.
+
+## Memory in AgentGPT
+
+Using long-term memory is still a work in progress. Here are some of its applications so far:
+
+- Filtering similar tasks utilized in a given run.
+
+We are actively developing more applications. If you have interesting ideas for memory management or wish to contribute to its development, please feel free to reach out.
diff --git a/docs/development/prompts.mdx b/docs/development/prompts.mdx
new file mode 100644
index 0000000..8897db7
--- /dev/null
+++ b/docs/development/prompts.mdx
@@ -0,0 +1,34 @@
+---
+title: Prompts
+description: Learn how we use prompts to guide the behavior of our AI agents.
+icon: "page"
+---
+
+Prompts play a pivotal role in shaping the behavior of our AI agents as they guide the language models towards accomplishing specific tasks or goals. We predominantly utilize two models `gpt-3.5-turbo` and `gpt-4`. All these models are highly sensitive to the minutest details in their prompts, making the prompt design an essential aspect of our system.
+
+## Prompt Templates
+
+Along with these powerful models, we also provide an assortment of pre-made prompt templates. These templates can serve as a valuable resource when getting started, providing excellent examples of well-structured prompts. However, these templates aren't always perfect and should be fine-tuned to best suit your specific use case. Each situation is unique, and the best results often come from iterative testing and refinement of prompts based on your unique requirements and objectives.
+
+## Getting Started with Prompting
+
+If you are interested in learning more about the art of prompting, we recommend the following resources:
+
+1. [Learn prompting docs](https://learnprompting.org/)
+2. [Prompt engineering guide](https://www.promptingguide.ai/techniques/consistency)
+3. [Prompt engineering for developers](https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/)
+
+## Key Terms
+
+1. **One shot / Two shot / N shot**: You provide 1, 2, or N examples along with your prompt to improve model accuracy.
+2. **Zero shot**: You provide a prompt to a model directly, without any examples.
+
+## Prompting Techniques in AgentGPT
+
+### Plan and Solve
+
+Plan and Solve (PS) is a technique that enhances the chain of thought prompting approach. In PS, the model is asked to understand the problem, extract relevant variables and values, and devise a step-by-step plan. We primarily use this zero-shot approach to increase reasoning accuracy about abstract goals. Find out more about Plan and Solve through its [GitHub repo](https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting).
+
+### ReAct
+
+Reasoning + Action, abbreviated as ReAct, is a prompting technique that combines both reasoning and action generation into one output. This allows the model to better synchronize thoughts with actions.
diff --git a/docs/development/setup.mdx b/docs/development/setup.mdx
new file mode 100644
index 0000000..c08b13b
--- /dev/null
+++ b/docs/development/setup.mdx
@@ -0,0 +1,87 @@
+---
+title: Setup
+description: Guidelines for setting up a local installation of AgentGPT.
+icon: "gear"
+---
+
+This document aims to guide you through the process of setting up a local installation of AgentGPT. It's important to note that we recommend using Docker for this installation. Docker simplifies the process and ensures that all dependencies are correctly handled, making the installation process more straightforward and less error-prone.
+
+## Prerequisites
+
+Before you get started, please make sure you have the following installed:
+
+1. [Git](https://git-scm.com/downloads)
+2. [Node.js](https://nodejs.org/en/download)
+3. An [OpenAI API key](https://beta.openai.com/signup/)
+4. A code editor of your choice, such as [Visual Studio Code (VS Code)](https://code.visualstudio.com/download)
+
+### Docker Installation (Recommended)
+
+In addition to the prerequisites listed above, Docker is also necessary for this setup. Follow the steps below for Docker installation:
+
+1. Download and install [Docker](https://www.docker.com/products/docker-desktop)
+2. After installation, create a Docker account if you don't have one
+3. Open the Docker Desktop application and sign in
+
+## Installation with Docker
+
+1. **Open your editor**
+
+2. **Open the Terminal** - Typically, you can do this from a 'Terminal' tab or by using a shortcut
+ (e.g., `Ctrl + ~` for Windows or `Control + ~` for Mac in VS Code).
+
+3. **Clone the Repository and Navigate into the Directory** - Once your terminal is open, you can clone the repository and move into the directory by running the commands below.
+
+ **For Mac/Linux users**
+
+ ```bash
+ git clone https://github.com/reworkd/AgentGPT.git
+ cd AgentGPT
+ ./setup.sh
+ ```
+
+ **For Windows users**
+
+ ```bash
+ git clone https://github.com/reworkd/AgentGPT.git
+ cd AgentGPT
+ ./setup.bat
+ ```
+
+4. **Follow the setup instructions from the script** - add the appropriate API keys, and once all of the services are running, travel to [http://localhost:3000](http://localhost:3000) on your web-browser.
+
+## Installation without Docker
+
+Outside of docker, you'll need to just configure your ENV. Additionally, you can use `setup.sh` to walkthrough ENV
+configuration and also update your Prisma configuration to point to a local SQLite
+instance.
+
+After this, you can run the following to set up your Next.js project.
+
+```bash
+// Frontend
+cd ./next
+npm install
+npm run dev
+```
+
+In a different window, you can run the following to start the backend:
+
+```bash
+// Backend. Make sure you are at the root of the project
+cd ./platform
+poetry install
+poetry run python -m reworkd_platform
+```
+
+## Running the site
+
+Congratulations on successfully setting up AgentGPT on your local machine! To see the fruit of your work, open your preferred web browser and visit [http://localhost:3000/](http://localhost:3000/). There, you'll find the AgentGPT user interface ready for you to explore and interact with.
+
+## Issues / Additional help
+
+Despite the detailed instructions, you might still encounter some hiccups along the way. If that happens, don't worry! We've got your back. Consider following this comprehensive legacy guide that walks you through the process: [How to install AgentGPT locally](https://snapdragon-writer-867.notion.site/How-to-Install-AgentGPT-Locally-9b96b2314c9b491397976249fd121023).
+
+If the issues persist, we invite you to submit an [issue on GitHub](https://github.com/reworkd/AgentGPT/issues). By doing so, you'll not only get help, but also assist us in identifying any problematic areas to improve on. Alternatively, you can reach out to our dedicated team on [Discord](https://discord.gg/jdSBAnmdnY). We're a community of learners and enthusiasts, and we're always ready to lend a hand.
+
+Happy hacking and enjoy your journey with AgentGPT!
diff --git a/docs/development/translations.mdx b/docs/development/translations.mdx
new file mode 100644
index 0000000..49ccacc
--- /dev/null
+++ b/docs/development/translations.mdx
@@ -0,0 +1,90 @@
+---
+title: "Translations"
+description: Guide to translaitng the language.
+icon: "globe"
+---
+
+AgentGPT has translations across a variety of languages thanks to the help of many contributors such as @Cs4K1Sr4C.
+languages. We're always looking to improve our translations however, if you notice something is off or missing, please
+feel free to make the necessary updates or submit a ticket on GitHub!
+
+## Translating the Frontend
+
+We use i18next to handle our frontend translations. How it works is we have a folder for each language
+in [next/public/locales](https://github.com/reworkd/AgentGPT/tree/main/next/public/locales).
+
+```bash title="next/public/locales"
+> en
+> fr
+> hu
+...
+> zh
+```
+
+For each component within the app, we namespace their translations. For example, our ChatWindow uses the `chat` name
+space and its translations will be found in the `chat.json` under each folder. Translations are key value pairs where
+the key represents the
+desired text and the value represents the translation for a given langauge.
+
+An example from the `chat` namespace:
+
+- English: `"EMBARKING_ON_NEW_GOAL": "Embarking on a new goal:"`
+- Spanish:`"EMBARKING_ON_NEW_GOAL": "EmbarcÃĄndose en un nuevo objetivo:"`
+
+#### Adding a new langauge
+
+To add a new language, go into our i18 config and add a new locale
+
+```bash title="next/next-i18next.config.js"
+i18n: {
+ defaultLocale: "en",
+ locales:
+ [
+ "en",
+ "hu",
+ ...,
+ "sk",
+ "hr",
+ "tr",
+ // Insert new language code here
+ ],
+ ...
+```
+
+Then head over to our languages definition and add a section to the available languages list
+
+```tsx title="next/src/utils/languages.ts"
+export const availableLanguages: Language[] = [
+ ENGLISH,
+ { code: "fr", name: "Français", flag: "đĢđˇ" },
+ // ...
+ { code: "tr", name: "TÃŧrkçe", flag: "đšđˇ" },
+ // Insert new language here
+];
+```
+
+After this, you must create a new folder with your langauge code
+in [next/public/locales](https://github.com/reworkd/AgentGPT/tree/main/next/public/locales) and add translations for all
+namespaces of our app. Note these values may not hot reload, so you must manually restart your next server.
+
+## Translating the Backend
+
+The backend translations are handled via the model itself.
+We simply prompt it to provide the answer in the user selected langauge.
+This means that whenever a new frontend language is added, the language is immediately supported on the backend!
+This does however mean that we don't currently have much room to actually edit the translations provided by the model.
+
+## Translating the Readme
+
+We have a few README translations that live in [main/docs](https://github.com/reworkd/AgentGPT/tree/main/docs) such
+as `README.zh-HANS.md`. If you'd like to translate the README to your language, make a similar file.
+
+After doing this, add a link badge to our main english README alongside the other badges. Example:
+
+
+
+
+
+## Translating our Documentation
+
+This documentation is very experimental. Because of this, we have no plans to support translation just yet.
diff --git a/docs/development/workflow-input.mdx b/docs/development/workflow-input.mdx
new file mode 100644
index 0000000..741bea8
--- /dev/null
+++ b/docs/development/workflow-input.mdx
@@ -0,0 +1,28 @@
+---
+title: "Input Templating"
+description: The workflow automation system within AgentGPT.
+icon: "wave-sine"
+---
+
+Any given workflow node will outfield a set of fields that can be used in the input of descendent nodes.
+Because these outputs are only generated at runtime, we use a templating system to keep track of what values a node
+will receive once these values are actually calculated.
+This document goes over how this process works in both the frontend and backend.
+
+## Model
+All `block` definitions will specify both the inputs it takes in and the output values it provides
+
+
+## Frontend
+The workflow hierarchy follows a graph-like structure.
+For a given node, we calculate what output fields are available to it by doing a BFS on its ascendant nodes.
+Once we have a list of all ascendant nodes, we can generate the available output field values along with its underlying key.
+When placed inside the input of another node, it will take its template form which has the following shape:
+
+```
+{{node_id-value}}
+```
+
+## Backend
+A workflow task in kafka will keep track of the mapping of template key to value pairs as they are generated.
+When a new node is being executed, its input fields will first have actual values replace the string templates before type validation is run.
\ No newline at end of file
diff --git a/docs/development/workflows.mdx b/docs/development/workflows.mdx
new file mode 100644
index 0000000..b30e0f7
--- /dev/null
+++ b/docs/development/workflows.mdx
@@ -0,0 +1,43 @@
+---
+title: "Workflows"
+description: The workflow automation system within AgentGPT.
+icon: "wave-sine"
+---
+
+A core function of Reworkd is AI powered workflow automation. This documentation covers key concepts within our workflow platform.
+
+## Frontend models
+The workflow hierarchy follows a graph-like structure. The frontend models only prescribe the front-end view of the workflow.
+
+- A workflow is the graph itself. It represents the workflow in its entirety
+- A node is a single element within a workflow. It has a position
+- An edge represents a connection between two nodes of a workflow
+
+## Backend models
+The backend models represent the mechanisms to actually perform work for a given node.
+Each frontend `Node` will have an associated `Block`.
+`Node` represents the frontend view / position while the `Block` represents what will actually happen when that `Node` is run.
+For example, a "SlackMessageBlock" is a `Block` that, when executed, would send a user a message on "Slack".
+
+## Adding a new block
+To add a new block, start by updating the frontend:
+- open next/src/services/workflow/node-block-definitions.ts
+- figure it out
+- (soon block definitions on frontend will be set from backend and edits won't be needed here)
+
+Then update the backend:
+- open platform/reworkd_platform/schemas/workflow/blocks
+ - add a new file for your block
+ - define the block's input and output types as classes
+ - add a class for the block with
+ - attributes: type, description, image_url, and input
+ - async method: `run`
+- install dependencies for your block with `poetry add`
+- open platform/reworkd_platform/web/api/workflow/blocks/web/__init__.py
+ - import your block
+ - add an if branch to get_block_runner
+- `docker compose down; docker compose up --build`
+
+## Node types
+- Triggers: Designate how workflows are run
+- Actions: Performs a concrete piece of "work"
\ No newline at end of file
diff --git a/docs/essentials/FAQ.mdx b/docs/essentials/FAQ.mdx
new file mode 100644
index 0000000..993b24a
--- /dev/null
+++ b/docs/essentials/FAQ.mdx
@@ -0,0 +1,94 @@
+---
+title: FAQ
+description: Get answers to the most frequently asked questions about AgentGPT
+icon: "question"
+---
+
+Discover answers to the most frequently asked questions about AgentGPT. If your question isn't covered here, feel free to connect with our team on [Discord](https://discord.gg/jdSBAnmdnY) or [GitHub](https://github.com/reworkd/AgentGPT).
+
+## Agent issues
+
+
+
+
+ At present, AgentGPT does not have the capability to generate outputs in this
+ way. However, this is a feature we're actively developing. To keep updated on
+ this, check out our [roadmap](/essentials/roadmap).
+
+
+
+ Not yet! We're looking into implementing this functionality. To see when this
+ might be available, take a look at our [roadmap](/essentials/roadmap). We guarantee that
+ actions such as "sending an email" will only occur with your explicit
+ permission.
+
+
+
+ Due to limitations on API usage and infrastructure costs, there's a cap on how
+ much the Agent can run. To circumvent this, consider hosting AgentGPT locally
+ using your own API key. Alternatively, subscribing to our pro plan will allow
+ for increased limits. More details can be found in our [setup
+ documentation](/essentials/roadmap).
+
+
+
+ Currently, each Agent run is independent, so resuming isn't possible. However,
+ you can initiate another AgentGPT run using information from the previous run.
+ We plan on adding this feature in the future. Stay updated via our
+ [roadmap](/essentials/roadmap).
+
+
+
+ Currently, free-tier users of AgentGPT utilize GPT-3.5, while PRO users have
+ access to GPT-4. If you have API access to GPT-4, you can run AgentGPT locally
+ using your API key.
+
+
+
+ The output length is limited to manage generation costs on our end. If you're
+ using your own API key, you can adjust the output length within the advanced
+ settings by increasing the token count. If you're a Pro user or are a running
+ AgentGPT locally, you can adjust the output length winthin the advanced
+ settings
+
+
+
+
+## Misc
+
+
+
+
+ While ChatGPT is designed to answer specific questions and maintain a
+ conversation, AgentGPT is a platform where you can configure an AI agent to
+ achieve a broad goal.
+
+
+
+ Both AgentGPT and AutoGPT are autonomous AI agent projects. However, while
+ AutoGPT runs locally, AgentGPT is a web-based platform.
+
+
+
+ AgentGPT boasts a wide array of capabilities and we're always working to
+ expand them. To see some of its applications, visit our [usecases](/essentials/usecases)
+ page.
+
+
+
+ Yes, AgentGPT does have internet access.
+
+
+
+
+## Local contribution issues
+
+
+
+
+ For troubleshooting, refer to our [setup guide](/development/setup). If your
+ issue persists, you're welcome to submit an [issue on
+ GitHub](https://github.com/reworkd/AgentGPT/issues).
+
+
+
diff --git a/docs/essentials/contributing.mdx b/docs/essentials/contributing.mdx
new file mode 100644
index 0000000..18424ca
--- /dev/null
+++ b/docs/essentials/contributing.mdx
@@ -0,0 +1,47 @@
+---
+title: Contributing
+description: Learn how to contribute to AgentGPT and join our thriving open-source community.
+icon: "hands"
+---
+
+# Contributing to AgentGPT
+
+AgentGPT is an open-source project that has grown and thrived thanks to the collective efforts of our vibrant community of contributors. We are thrilled to have you here and appreciate your interest in contributing to this exciting project!
+
+## Ways to Contribute
+
+There are numerous ways you can contribute to AgentGPT:
+
+### Development
+
+If you're a developer, your skills can be put to great use in improving AgentGPT's codebase. You can contribute by addressing open issues listed on our [GitHub](https://github.com/reworkd/AgentGPT), or even by suggesting new features.
+
+### Design
+
+Are you gifted with design skills? AgentGPT could use your expertise to make it even more user-friendly and visually appealing.
+
+### Documentation
+
+If you're adept at explaining things clearly, you can help us maintain and enhance the documentation. Clear and comprehensive documentation is invaluable, as it makes it easier for people to get started with AgentGPT and contribute to its development.
+
+### Testing
+
+If you've found a bug or issue, report it! Or better yet, help us fix it. Testing is a vital part of software development and helps ensure the quality and reliability of AgentGPT.
+
+### Share Your Ideas
+
+Do you have an innovative idea for improving AgentGPT? We're all ears! Our community is a hub for creativity and innovation, and we welcome fresh thoughts and perspectives.
+
+### Spread the Word
+
+If you're passionate about AgentGPT, consider sharing that passion with others. Write about us, speak about us, and help more people discover and contribute to AgentGPT.
+
+## How to Start Contributing
+
+This section will soon be updated with detailed instructions on how to contribute to AgentGPT.
+
+In the meantime, know that we welcome all individuals, regardless of expertise or background. Feel free to reach out to us on [GitHub](https://github.com/reworkd/AgentGPT) or [Discord](https://discord.gg/jdSBAnmdnY).
+
+## A Big Thank You!
+
+We sincerely appreciate your interest and contribution to AgentGPT. Together, we can take this project to new heights. Welcome to our community!
diff --git a/docs/essentials/roadmap.mdx b/docs/essentials/roadmap.mdx
new file mode 100644
index 0000000..46cfdf5
--- /dev/null
+++ b/docs/essentials/roadmap.mdx
@@ -0,0 +1,65 @@
+---
+title: "Roadmap"
+description: "See whats coming to AgentGPT in the future"
+icon: "road"
+---
+
+AgentGPT is currently in beta, and we're excited to share what we have in store! This roadmap provides an overview of the features we're currently working on, as well as the ones we've already completed.
+
+
+ Our developers are working tirelessly on these features. Typically, it might
+ take a few days to 2 weeks to roll out these updates. To stay updated with our
+ progress, check out our [roadmap board on
+ GitHub](https://github.com/orgs/reworkd/projects/3).
+
+
+## Completed Features
+
+
+
+
+ Sign in to save your agent runs in our database.
+
+
+ We strive to make AgentGPT accessible to everyone. We're always looking to
+ expand our language offerings, so your contributions are welcome!
+
+
+ Use your own OpenAI API key to customize everything from the model to the
+ temperature, loops, and more. All of this happens within your browser!
+
+
+ We're always updating our documentation to help new users and contributors
+ familiarize themselves with AgentGPT.
+
+
+ Our basic version performs and summarizes Google searches via
+ [Serper.dev](https://serper.dev). We're planning to support other SERP APIs
+ and visit and parse websites in the future.
+
+
+ We believe this migration will help us leverage the Python ecosystem's
+ language model tools.
+
+
+ This will help us cover infrastructure costs.
+
+
+
+## Planned Features
+
+
+
+
+
+
+
+## Notes
+
+
+ We continually update our roadmap and add new features, so stay tuned for
+ updates! Feel free to check out our GitHub for the latest. As a small team, we
+ greatly appreciate the community's support in developing AgentGPT. If you're
+ interested in contributing, please visit our [contributing
+ page](/contributing).
+
diff --git a/docs/essentials/usecases.mdx b/docs/essentials/usecases.mdx
new file mode 100644
index 0000000..a41bd11
--- /dev/null
+++ b/docs/essentials/usecases.mdx
@@ -0,0 +1,58 @@
+---
+title: Use Cases
+description: Discover a variety of exciting use cases for AgentGPT.
+icon: "lightbulb"
+---
+
+The versatile and dynamic nature of AgentGPT allows it to be applied in a plethora of scenarios. This page will introduce you to the different use cases of AgentGPT and illustrate how it can be a game-changing tool in various fields.
+
+
+ The potential use cases for AgentGPT are almost limitless. From education to
+ healthcare, business to entertainment, AgentGPT can bring a new level of
+ efficiency and automation.
+
+
+## Code Assistance
+
+AgentGPT can serve as a programming assistant, helping to debug code, generate code snippets, or even provide coding tutorials.
+
+## Research and Content Generation
+
+From crafting blog posts and writing articles, to compiling study guides and summaries, AgentGPT can streamline content creation across numerous domains.
+
+## Email and Communication
+
+Writing an email or crafting a perfect message can be time-consuming. With AgentGPT, you can automate this process. It can help generate emails, draft messages, and assist with other forms of communication.
+
+## Marketing and Advertising
+
+AgentGPT can be used to generate innovative marketing ideas, create compelling ad copy, and help with SEO strategies.
+
+## Budgeting and Financial Planning
+
+AgentGPT can provide budgeting advice, financial management tips, and even create personal financial plans based on user-defined criteria.
+
+
+
+ If you have an interesting use case in mind, or if you'd like to contribute
+ to the development of these features, we'd love to hear from you! Reach out
+ to us on Discord.
+
+
+ We welcome contributions on GitHub. Your innovative ideas and contributions
+ can help shape the future of AgentGPT.
+
+
+
+
+ For detailed guidelines on how to contribute to these usecases, check out our
+ [Contributing](./contributing) page.
+
diff --git a/docs/favicon.png b/docs/favicon.png
new file mode 100644
index 0000000..4027afe
Binary files /dev/null and b/docs/favicon.png differ
diff --git a/docs/images/background.png b/docs/images/background.png
new file mode 100644
index 0000000..3292ab2
Binary files /dev/null and b/docs/images/background.png differ
diff --git a/docs/images/background1.png b/docs/images/background1.png
new file mode 100644
index 0000000..3292ab2
Binary files /dev/null and b/docs/images/background1.png differ
diff --git a/docs/introduction.mdx b/docs/introduction.mdx
new file mode 100644
index 0000000..af3e1c3
--- /dev/null
+++ b/docs/introduction.mdx
@@ -0,0 +1,54 @@
+---
+title: Introduction
+description: "Welcome to AgentGPT"
+---
+
+AgentGPT is an autonomous AI Agent platform that empowers users to create
+and deploy customizable autonomous AI agents directly in the browser. Simply assign
+a name and goal to your AI agent, and watch as it embarks on an exciting journey to accomplish the assigned objective.
+AgentGPT achieves goals by chaining calls to large language models such as GPT-4 and is designed to understand
+objectives, implement strategies, and deliver results without human intervention.
+
+
+
+ Understand how AgentGPT achieves goals by chaining language models.
+
+
+ Learn about our mission to make AI accessible and community-driven.
+
+
+
+## Join the community
+
+We'd love to hear your feedback and engage with you on various platforms.
+
+
+
+ Explore our official website.
+
+
+ Contribute and stay updated on our Github repository.
+
+
+ Join our vibrant community on Discord.
+
+
+ Help us improve with your valuable feedback.
+
+
+
+## What's next?
+
+The entire AgentGPT team is incredibly excited for the road to follow. We have a ton of exciting features planned for the future, and we hope you'll join us on this journey.
+
+
+ Have a glimpse of what's to come in our roadmap.
+
diff --git a/docs/logo/logodark.png b/docs/logo/logodark.png
new file mode 100644
index 0000000..8696dfb
Binary files /dev/null and b/docs/logo/logodark.png differ
diff --git a/docs/logo/logolight.png b/docs/logo/logolight.png
new file mode 100644
index 0000000..209ab6e
Binary files /dev/null and b/docs/logo/logolight.png differ
diff --git a/docs/mint.json b/docs/mint.json
new file mode 100644
index 0000000..f768d64
--- /dev/null
+++ b/docs/mint.json
@@ -0,0 +1,70 @@
+{
+ "$schema": "https://mintlify.com/schema.json",
+ "name": "Reworkd",
+ "logo": {
+ "dark": "/logo/logolight.png",
+ "light": "/logo/logodark.png"
+ },
+ "favicon": "/favicon.png",
+ "colors": {
+ "primary": "#808080",
+ "light": "#FFFFFF",
+ "dark": "#000000",
+ "background": {
+ "dark": "#000000",
+ "light": "#FFFFFF"
+ }
+ },
+
+
+ "topbarCtaButton": {
+ "type": "github",
+ "url": "https://github.com/reworkd/AgentGPT"
+ },
+
+ "anchors": [
+ {
+ "name":"AgentGPT",
+ "icon":"user-ninja",
+ "url":"https://reworkd.ai/"
+ },
+ {
+ "name": "GitHub",
+ "icon": "github",
+ "url": "https://github.com/reworkd/AgentGPT"
+ },
+ {
+ "name": "Discord",
+ "icon": "discord",
+ "url": "https://discord.gg/qNWFxxRJNh"
+ }
+ ],
+
+ "navigation": [
+ {
+ "group": "Get Started",
+ "pages": ["introduction"]
+ },
+ {
+ "group": "Development",
+ "pages": ["development/setup", "development/prompts", "development/memory", "development/translations", "development/auth"]
+ },
+ {
+ "group": "Essentials",
+ "pages": ["essentials/roadmap", "essentials/FAQ", "essentials/usecases", "essentials/contributing"]
+ },
+ {
+ "group": "Other",
+ "pages": ["other/philosophy"]
+ }
+ ],
+
+ "footerSocials": {
+ "github": "https://github.com/reworkd/AgentGPT",
+ "discord": "https://discord.gg/qNWFxxRJNh",
+ "twitter": "https://twitter.com/ReworkdAI",
+ "linkedin": "https://www.linkedin.com/company/reworkd/"
+ },
+
+ "backgroundImage": "/background.png"
+}
diff --git a/docs/other/philosophy.mdx b/docs/other/philosophy.mdx
new file mode 100644
index 0000000..c17e702
--- /dev/null
+++ b/docs/other/philosophy.mdx
@@ -0,0 +1,47 @@
+---
+title: "Our Philosophy"
+description: "Understand the philosophy and mission behind AgentGPT"
+icon: "scale-balanced"
+---
+
+
+ Our ultimate goal is to empower people and businesses. We strive to provide
+ tools that streamline operations, boost efficiency, and enable informed
+ decision-making. AgentGPT, our flagship product, automates routine tasks and
+ eliminates redundancy, leading to increased productivity.
+
+
+
+
+
+Accessibility is at the heart of our philosophy. We are committed to making complex, high-tech solutions like AgentGPT accessible and easy to use for everyone, regardless of their technical expertise.
+
+
+
+
+
+By breaking down barriers to advanced technologies, we aim to cultivate an environment conducive to innovation. We envision a future where businesses can allocate more resources to creative problem-solving and strategic planning, rather than routine tasks.
+
+
+
+
+
+We believe in the power of collaboration and collective intelligence. AgentGPT is designed to facilitate seamless teamwork and knowledge sharing, helping teams realize their full potential.
+
+
+
+
+
+As we develop advanced AI like AgentGPT, we uphold ethical principles in AI development and deployment. This includes ensuring transparency, privacy, and security, while actively working to avoid harmful biases in our AI models.
+
+
+
+
+## Notes
+
+Our philosophy is the compass that guides our decisions, from product
+development to community building. Join us in our journey to revolutionize the
+way businesses interact with technology.
+
+Please bear with us as we continue to grow and evolve. We value your patience,
+support, and feedback in helping us improve.
diff --git a/next/.dockerignore b/next/.dockerignore
new file mode 100644
index 0000000..b3cd962
--- /dev/null
+++ b/next/.dockerignore
@@ -0,0 +1,7 @@
+**/.git
+**/node_modules
+**/idea
+**/.next
+**/aws
+**/.husky
+**/venv
\ No newline at end of file
diff --git a/next/.eslintrc.json b/next/.eslintrc.json
new file mode 100644
index 0000000..f64aab8
--- /dev/null
+++ b/next/.eslintrc.json
@@ -0,0 +1,73 @@
+{
+ "overrides": [
+ {
+ "extends": [
+ "plugin:@typescript-eslint/recommended-requiring-type-checking"
+ ],
+ "files": [
+ "*.ts",
+ "*.tsx"
+ ],
+ "parserOptions": {
+ "project": "tsconfig.json"
+ }
+ }
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "project": "./tsconfig.json"
+ },
+ "plugins": [
+ "@typescript-eslint", "import"
+ ],
+ "extends": [
+ "next/core-web-vitals",
+ "plugin:@typescript-eslint/recommended"
+ ],
+ "rules": {
+ "@typescript-eslint/consistent-type-imports": "warn",
+ "@typescript-eslint/no-unused-vars": "off",
+ "@typescript-eslint/no-unsafe-return": "off",
+ "@typescript-eslint/no-unsafe-member-access": "off",
+ "@typescript-eslint/no-unsafe-call": "off",
+ "@typescript-eslint/no-unsafe-assignment": "off",
+ "@typescript-eslint/no-unsafe-argument": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-restricted-imports": [
+ "error",
+ {
+ "paths": [
+ {
+ "name": "react-i18next",
+ "importNames": [
+ "useTranslation"
+ ],
+ "message": "Import useTranslation from next-i18next instead."
+ }
+ ]
+ }
+ ],
+ "import/no-unresolved": "error",
+ // "import/no-named-as-default-member": "off",
+ "import/order": [
+ "error",
+ {
+ "groups": [
+ "builtin", // Built-in imports (come from NodeJS native) go first
+ "external", // <- External imports
+ "internal", // <- Absolute imports
+ ["sibling", "parent"], // <- Relative imports, the sibling and parent types they can be mingled together
+ "index", // <- index imports
+ "unknown" // <- unknown
+ ],
+ "newlines-between": "always",
+ "alphabetize": {
+ /* sort in ascending order. Options: ["ignore", "asc", "desc"] */
+ "order": "asc",
+ /* ignore case. Options: [true, false] */
+ "caseInsensitive": true
+ }
+ }
+ ]
+ }
+}
diff --git a/next/.gitignore b/next/.gitignore
new file mode 100644
index 0000000..6a82ea5
--- /dev/null
+++ b/next/.gitignore
@@ -0,0 +1,53 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# database
+/prisma/db.sqlite
+/prisma/db.sqlite-journal
+/db/db.sqlite
+
+# next.js
+/.next/
+/out/
+next-env.d.ts
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+.idea
+.swc
+
+# extracted language files
+/public/locales/$LOCALES
+
+.eslintcache
+
+# Sentry Auth Token
+.sentryclirc
+/volumes/
diff --git a/next/.husky/.gitignore b/next/.husky/.gitignore
new file mode 100644
index 0000000..31354ec
--- /dev/null
+++ b/next/.husky/.gitignore
@@ -0,0 +1 @@
+_
diff --git a/next/.husky/pre-commit b/next/.husky/pre-commit
new file mode 100755
index 0000000..15253f8
--- /dev/null
+++ b/next/.husky/pre-commit
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+#npx lint-staged --allow-empty
diff --git a/next/Dockerfile b/next/Dockerfile
new file mode 100644
index 0000000..d5a6458
--- /dev/null
+++ b/next/Dockerfile
@@ -0,0 +1,39 @@
+# Use the official Node.js image as the base image
+FROM node:19-alpine
+
+ARG NODE_ENV
+
+ENV NODE_ENV=$NODE_ENV
+
+# Needed for the wait-for-db script
+RUN apk add --no-cache netcat-openbsd
+
+# Set the working directory
+WORKDIR /next
+
+# Copy package.json and package-lock.json to the working directory
+COPY package*.json ./
+
+# Install dependencies
+RUN npm ci
+
+# Copy the wait-for-db.sh script
+COPY wait-for-db.sh /usr/local/bin/wait-for-db.sh
+RUN chmod +x /usr/local/bin/wait-for-db.sh
+
+# Copy the rest of the application code
+COPY . .
+COPY entrypoint.sh /
+
+# Ensure correct line endings after these files are edited by windows
+RUN apk add --no-cache dos2unix netcat-openbsd \
+ && dos2unix /entrypoint.sh
+
+
+# Expose the port the app will run on
+EXPOSE 3000
+
+ENTRYPOINT ["sh", "/entrypoint.sh"]
+
+# Start the application
+CMD ["npm", "run", "dev"]
diff --git a/next/__mocks__/matchMedia.mock.ts b/next/__mocks__/matchMedia.mock.ts
new file mode 100644
index 0000000..fafcf7b
--- /dev/null
+++ b/next/__mocks__/matchMedia.mock.ts
@@ -0,0 +1,14 @@
+// When using the matchMedia API in your tests, you will need to mock it.
+Object.defineProperty(window, "matchMedia", {
+ writable: true,
+ value: jest.fn().mockImplementation((query: string) => ({
+ matches: false,
+ media: query,
+ onchange: null,
+ addListener: jest.fn(), // Deprecated
+ removeListener: jest.fn(), // Deprecated
+ addEventListener: jest.fn(),
+ removeEventListener: jest.fn(),
+ dispatchEvent: jest.fn(),
+ })),
+});
diff --git a/next/__tests__/message-service.test.ts b/next/__tests__/message-service.test.ts
new file mode 100644
index 0000000..b7d3e15
--- /dev/null
+++ b/next/__tests__/message-service.test.ts
@@ -0,0 +1,77 @@
+import "../__mocks__/matchMedia.mock"
+import type { Message } from "../src/types/message";
+import { MessageService } from "../src/services/agent/message-service";
+
+describe("sendErrorMessage", () => {
+ let instance: MessageService;
+ let renderMessage: jest.Mock;
+
+ beforeEach(() => {
+ renderMessage = jest.fn((message: Message) => ({}));
+ instance = new MessageService(renderMessage);
+ });
+
+ it("should handle Axios errors", () => {
+ const axiosError = {
+ isAxiosError: true,
+ response: { status: 429, data: { detail: "ERROR_API_KEY_QUOTA" } },
+ };
+
+ instance.sendErrorMessage(axiosError);
+ expect(renderMessage).toHaveBeenCalledWith({
+ type: "error",
+ value: "ERROR_API_KEY_QUOTA",
+ });
+ });
+
+ it("should handle platform errors", () => {
+ const axiosError = {
+ isAxiosError: true,
+ response: {
+ status: 409,
+ data: {
+ error: "OpenAIError",
+ detail: "You have exceeded the maximum number of requests allowed for your API key.",
+ code: 429,
+ },
+ },
+ };
+
+ instance.sendErrorMessage(axiosError);
+ expect(renderMessage).toHaveBeenCalledWith({
+ type: "error",
+ value: axiosError.response.data.detail,
+ });
+ });
+
+ it("should handle unknown platform errors", () => {
+ const axiosError = {
+ isAxiosError: true,
+ response: { status: 409 },
+ };
+
+ instance.sendErrorMessage(axiosError);
+ expect(renderMessage).toHaveBeenCalledWith({
+ type: "error",
+ value: "An Unknown Error Occurred, Please Try Again!",
+ });
+ });
+
+ it("should handle non-Axios string errors", () => {
+ const error = "An error occurred";
+
+ instance.sendErrorMessage(error);
+ expect(renderMessage).toHaveBeenCalledWith({
+ type: "error",
+ value: error,
+ });
+ });
+
+ it("should handle unknown errors", () => {
+ instance.sendErrorMessage({});
+ expect(renderMessage).toHaveBeenCalledWith({
+ type: "error",
+ value: "An unknown error occurred. Please try again later.",
+ });
+ });
+});
diff --git a/next/__tests__/stripe.sh b/next/__tests__/stripe.sh
new file mode 100644
index 0000000..a0be95f
--- /dev/null
+++ b/next/__tests__/stripe.sh
@@ -0,0 +1 @@
+stripe listen --forward-to localhost:3000/api/webhooks/stripe
\ No newline at end of file
diff --git a/next/__tests__/whitespace.test.ts b/next/__tests__/whitespace.test.ts
new file mode 100644
index 0000000..72ed807
--- /dev/null
+++ b/next/__tests__/whitespace.test.ts
@@ -0,0 +1,16 @@
+import { isEmptyOrBlank } from "../src/utils/whitespace";
+
+describe("WhiteSpace and empty string should return true", () => {
+ test("Empty string should return true", () => {
+ const emptyString = "";
+ expect(isEmptyOrBlank(emptyString)).toEqual(true);
+ })
+ test("WhiteSpace string should return true", () => {
+ const whiteSpaceString = " ";
+ expect(isEmptyOrBlank(whiteSpaceString)).toEqual(true);
+ })
+ test("NewLine should return true", () => {
+ const newLineString = "\n\n";
+ expect(isEmptyOrBlank(newLineString)).toEqual(true);
+ })
+})
diff --git a/next/__tests__/with-retries.test.ts b/next/__tests__/with-retries.test.ts
new file mode 100644
index 0000000..069e6a5
--- /dev/null
+++ b/next/__tests__/with-retries.test.ts
@@ -0,0 +1,69 @@
+import { withRetries } from "../src/services/api-utils";
+
+describe("withRetries", () => {
+ it("should retry 3 times by default", async () => {
+ let numTries = 0;
+
+ await withRetries(
+ (): Promise => {
+ ++numTries;
+ throw new Error();
+ },
+ (): Promise => {
+ return Promise.resolve(true);
+ }
+ );
+
+ expect(numTries).toEqual(4);
+ });
+
+ it("should retry numRetries times on error", async () => {
+ const numRetries = 5;
+ let numTries = 0;
+
+ await withRetries(
+ (): Promise => {
+ ++numTries;
+ throw new Error();
+ },
+ (): Promise => {
+ return Promise.resolve(true);
+ },
+ numRetries
+ );
+
+ expect(numTries).toEqual(numRetries + 1);
+ });
+
+ it("should retry if onError returns true", async () => {
+ let numTries = 0;
+
+ await withRetries(
+ (): Promise => {
+ ++numTries;
+ throw new Error();
+ },
+ (): Promise => {
+ return Promise.resolve(true);
+ }
+ );
+
+ expect(numTries).toBeGreaterThan(1);
+ });
+
+ it("should stop if onError returns false", async () => {
+ let numTries = 0;
+
+ await withRetries(
+ (): Promise => {
+ ++numTries;
+ throw new Error();
+ },
+ (): Promise => {
+ return Promise.resolve(false);
+ }
+ );
+
+ expect(numTries).toEqual(1);
+ });
+});
diff --git a/next/entrypoint.sh b/next/entrypoint.sh
new file mode 100755
index 0000000..71010de
--- /dev/null
+++ b/next/entrypoint.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env sh
+
+cd /next
+dos2unix wait-for-db.sh
+
+# copy .env file if not exists
+[ ! -f .env ] && [ -f .env.example ] && cp .env.example .env
+cp .env .env.temp
+dos2unix .env.temp
+cat .env.temp > .env
+rm .env.temp
+
+source .env
+
+# Ensure DB is available before running Prisma commands
+./wait-for-db.sh agentgpt_db 3307
+
+# Run Prisma commands
+if [[ ! -f "/app/prisma/${DATABASE_URL:5}" ]]; then
+ npx prisma migrate deploy --name init
+ npx prisma db push
+fi
+
+# Generate Prisma client
+npx prisma generate
+
+# run cmd
+exec "$@"
diff --git a/next/jest.config.cjs b/next/jest.config.cjs
new file mode 100644
index 0000000..0015920
--- /dev/null
+++ b/next/jest.config.cjs
@@ -0,0 +1,19 @@
+const nextJest = require("next/jest");
+
+const createJestConfig = nextJest({
+ // Provide the path to your Next.js app to load next.config.js and .env files in your test environment
+ dir: "./",
+});
+
+// Add any custom config to be passed to Jest
+/** @type {import('jest').Config} */
+const customJestConfig = {
+ // Add more setup options before each test is run
+ // setupFilesAfterEnv: ['/jest.setup.js'],
+ // if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work
+ moduleDirectories: ["node_modules", "/"],
+ testEnvironment: "jest-environment-jsdom",
+};
+
+// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
+module.exports = createJestConfig(customJestConfig);
diff --git a/next/next-i18next.config.js b/next/next-i18next.config.js
new file mode 100644
index 0000000..871ae9e
--- /dev/null
+++ b/next/next-i18next.config.js
@@ -0,0 +1,36 @@
+module.exports = {
+ i18n: {
+ defaultLocale: "en",
+ locales: [
+ "en",
+ "hu",
+ "fr",
+ "de",
+ "it",
+ "ja",
+ "lt",
+ "zh",
+ "zhtw",
+ "ko",
+ "pl",
+ "pt",
+ "ro",
+ "ru",
+ "uk",
+ "es",
+ "nl",
+ "sk",
+ "hr",
+ "tr",
+ ],
+ },
+ localePath: typeof window === "undefined" ? "./public/locales" : "/locales",
+ debug: false,
+ reloadOnPrerender: process.env.NODE_ENV === "development",
+ defaultNS: "common",
+ ns: ["common", "help", "settings", "chat", "agent", "errors", "languages", "drawer", "indexPage"],
+ react: {
+ useSuspense: false,
+ },
+ saveMissing: true,
+};
diff --git a/next/next.config.mjs b/next/next.config.mjs
new file mode 100644
index 0000000..a13159b
--- /dev/null
+++ b/next/next.config.mjs
@@ -0,0 +1,47 @@
+import nextI18NextConfig from "./next-i18next.config.js";
+
+// @ts-check
+/**
+ * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation.
+ * This is especially useful for Docker builds.
+ */
+!process.env.SKIP_ENV_VALIDATION && (await import("./src/env/server.mjs"));
+
+/** @type {import("next").NextConfig} */
+const config = {
+ reactStrictMode: true,
+ /* If trying out the experimental appDir, comment the i18n config out
+ * @see https://github.com/vercel/next.js/issues/41980 */
+ i18n: nextI18NextConfig.i18n,
+ webpack: function(config, options) {
+ config.experiments = { asyncWebAssembly: true, layers: true };
+ config.watchOptions = {
+ poll: 1000,
+ aggregateTimeout: 300
+ };
+ config.module.rules.push({
+ test: /\.svg$/i,
+ issuer: /\.[jt]sx?$/,
+ use: ['@svgr/webpack'],
+ })
+ return config;
+ },
+ rewrites() {
+ return {
+ beforeFiles: [
+ {
+ source: '/:path*',
+ has: [
+ {
+ type: 'host',
+ value: 'reworkd.ai',
+ },
+ ],
+ destination: '/landing-page',
+ },
+ ]
+ }
+ }
+};
+
+export default config;
diff --git a/next/package-lock.json b/next/package-lock.json
new file mode 100644
index 0000000..0dbee71
--- /dev/null
+++ b/next/package-lock.json
@@ -0,0 +1,25705 @@
+{
+ "name": "agent-gpt",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "agent-gpt",
+ "version": "1.0.0",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@headlessui/react": "^1.7.14",
+ "@next-auth/prisma-adapter": "^1.0.5",
+ "@prisma/client": "^4.9.0",
+ "@radix-ui/react-switch": "^1.0.2",
+ "@radix-ui/react-toast": "^1.1.4",
+ "@radix-ui/react-tooltip": "^1.0.5",
+ "@react-pdf/renderer": "^3.1.9",
+ "@sid-hq/sid": "^3.1.0",
+ "@splinetool/react-spline": "^2.2.6",
+ "@tailwindcss/forms": "^0.5.3",
+ "@tanstack/react-query": "^4.29.14",
+ "@trpc/client": "^10.21.1",
+ "@trpc/next": "^10.21.1",
+ "@trpc/react-query": "^10.21.1",
+ "@trpc/server": "^10.9.0",
+ "@types/lodash": "^4.14.194",
+ "@uiball/loaders": "^1.3.0",
+ "@vercel/analytics": "^1.0.1",
+ "@vercel/edge": "^0.3.4",
+ "axios": "^0.26.0",
+ "cheerio": "^1.0.0-rc.12",
+ "clsx": "^1.2.1",
+ "cobe": "^0.6.3",
+ "cookies-next": "^2.1.2",
+ "framer-motion": "^10.12.8",
+ "gray-matter": "^4.0.3",
+ "html-to-image": "^1.11.11",
+ "i18next": "^22.4.15",
+ "lodash": "^4.17.21",
+ "next": "^13.5.6",
+ "next-auth": "4.20.1",
+ "next-i18next": "^13.2.2",
+ "nextjs-google-analytics": "^2.3.3",
+ "openai": "^4.14.2",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "react-i18next": "^12.3.1",
+ "react-icons": "^4.11.0",
+ "react-markdown": "^8.0.7",
+ "react-type-animation": "^3.1.0",
+ "rehype-highlight": "^6.0.0",
+ "remark-gfm": "^3.0.1",
+ "superjson": "1.9.1",
+ "tailwindcss-radix": "^2.8.0",
+ "uuid": "^9.0.1",
+ "zod": "^3.22.2",
+ "zustand": "^4.3.7"
+ },
+ "devDependencies": {
+ "@svgr/webpack": "^8.0.1",
+ "@tailwindcss/typography": "^0.5.9",
+ "@testing-library/jest-dom": "^5.16.5",
+ "@testing-library/react": "^14.0.0",
+ "@types/node": "^18.11.18",
+ "@types/prettier": "^2.7.3",
+ "@types/react": "^18.0.26",
+ "@types/react-dom": "^18.2.7",
+ "@types/uuid": "^9.0.5",
+ "@typescript-eslint/eslint-plugin": "^5.59.8",
+ "@typescript-eslint/parser": "^5.59.1",
+ "autoprefixer": "^10.4.7",
+ "cross-env": "^7.0.3",
+ "eslint": "^8.43.0",
+ "eslint-config-next": "13.4.1",
+ "eslint-plugin-import": "^2.27.5",
+ "husky": "^8.0.3",
+ "jest": "^29.3.1",
+ "jest-environment-jsdom": "^29.7.0",
+ "lint-staged": "^13.2.1",
+ "postcss": "^8.4.24",
+ "prettier": "^2.8.8",
+ "prettier-plugin-tailwindcss": "^0.2.8",
+ "prisma": "^4.9.0",
+ "tailwindcss": "^3.3.2",
+ "typescript": "^5.1.3"
+ },
+ "engines": {
+ "node": ">=18.0.0 <19.0.0"
+ }
+ },
+ "node_modules/@adobe/css-tools": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
+ "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==",
+ "dev": true
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
+ "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
+ "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.21.4",
+ "@babel/helper-compilation-targets": "^7.21.4",
+ "@babel/helper-module-transforms": "^7.21.2",
+ "@babel/helpers": "^7.21.0",
+ "@babel/parser": "^7.21.4",
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.21.4",
+ "@babel/types": "^7.21.4",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.23.0",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+ "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
+ "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "regexpu-core": "^5.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz",
+ "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
+ "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
+ "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-wrap-function": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
+ "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+ "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
+ "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
+ "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.21.0",
+ "@babel/types": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
+ "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
+ "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz",
+ "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
+ "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
+ "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
+ "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
+ "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
+ "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
+ "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
+ "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
+ "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
+ "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
+ "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
+ "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
+ "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
+ "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
+ "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
+ "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
+ "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz",
+ "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
+ "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
+ "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-constant-elements": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz",
+ "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-display-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz",
+ "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz",
+ "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz",
+ "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
+ "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz",
+ "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-typescript": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
+ "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz",
+ "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.22.5",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.7",
+ "@babel/plugin-transform-async-to-generator": "^7.22.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+ "@babel/plugin-transform-block-scoping": "^7.22.5",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-class-static-block": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.6",
+ "@babel/plugin-transform-computed-properties": "^7.22.5",
+ "@babel/plugin-transform-destructuring": "^7.22.5",
+ "@babel/plugin-transform-dotall-regex": "^7.22.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+ "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-function-name": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-literals": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+ "@babel/plugin-transform-modules-amd": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+ "@babel/plugin-transform-numeric-separator": "^7.22.5",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-object-super": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.6",
+ "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-property-literals": "^7.22.5",
+ "@babel/plugin-transform-regenerator": "^7.22.5",
+ "@babel/plugin-transform-reserved-words": "^7.22.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+ "@babel/plugin-transform-spread": "^7.22.5",
+ "@babel/plugin-transform-sticky-regex": "^7.22.5",
+ "@babel/plugin-transform-template-literals": "^7.22.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.4",
+ "babel-plugin-polyfill-corejs3": "^0.8.2",
+ "babel-plugin-polyfill-regenerator": "^0.5.1",
+ "core-js-compat": "^3.31.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-react": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz",
+ "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-transform-react-display-name": "^7.22.5",
+ "@babel/plugin-transform-react-jsx": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz",
+ "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-typescript": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+ "dev": true
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz",
+ "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "optional": true,
+ "dependencies": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
+ "optional": true
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
+ "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz",
+ "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz",
+ "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz",
+ "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==",
+ "dependencies": {
+ "@floating-ui/core": "^0.7.3"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz",
+ "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==",
+ "dependencies": {
+ "@floating-ui/dom": "^0.5.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@headlessui/react": {
+ "version": "1.7.14",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.14.tgz",
+ "integrity": "sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==",
+ "dependencies": {
+ "client-only": "^0.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16 || ^17 || ^18",
+ "react-dom": "^16 || ^17 || ^18"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/console/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
+ "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/reporters": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.5.0",
+ "jest-config": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-resolve-dependencies": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/core/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/core/node_modules/jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/core/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/core/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.4.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
+ "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "jest-mock": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
+ "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
+ "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
+ "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
+ "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "node_modules/@next-auth/prisma-adapter": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@next-auth/prisma-adapter/-/prisma-adapter-1.0.6.tgz",
+ "integrity": "sha512-Z7agwfSZEeEcqKqrnisBun7VndRPshd6vyDsoRU68MXbkui8storkHgvN2hnNDrqr/hSCF9aRn56a1qpihaB4A==",
+ "peerDependencies": {
+ "@prisma/client": ">=2.26.0 || >=3",
+ "next-auth": "^4"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz",
+ "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw=="
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "13.4.1",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.1.tgz",
+ "integrity": "sha512-tVPS/2FKlA3ANCRCYZVT5jdbUKasBU8LG6bYqcNhyORDFTlDYa4cAWQJjZ7msIgLwMQIbL8CAsxrOL8maa/4Lg==",
+ "dev": true,
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz",
+ "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz",
+ "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz",
+ "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz",
+ "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz",
+ "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz",
+ "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz",
+ "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz",
+ "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz",
+ "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@panva/hkdf": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.4.tgz",
+ "integrity": "sha512-003xWiCuvePbLaPHT+CRuaV4GlyCAVm6XYSbBZDHoWZGn1mNkVKFaDbGJjjxmEFvizUwlCoM6O18FCBMMky2zQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/@pkgr/utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "is-glob": "^4.0.3",
+ "open": "^8.4.0",
+ "picocolors": "^1.0.0",
+ "tiny-glob": "^0.2.9",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@prisma/client": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.13.0.tgz",
+ "integrity": "sha512-YaiiICcRB2hatxsbnfB66uWXjcRw3jsZdlAVxmx0cFcTc/Ad/sKdHCcWSnqyDX47vAewkjRFwiLwrOUjswVvmA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@prisma/engines-version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a"
+ },
+ "engines": {
+ "node": ">=14.17"
+ },
+ "peerDependencies": {
+ "prisma": "*"
+ },
+ "peerDependenciesMeta": {
+ "prisma": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@prisma/engines": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.13.0.tgz",
+ "integrity": "sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw==",
+ "devOptional": true,
+ "hasInstallScript": true
+ },
+ "node_modules/@prisma/engines-version": {
+ "version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a.tgz",
+ "integrity": "sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ=="
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz",
+ "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz",
+ "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz",
+ "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
+ "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz",
+ "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz",
+ "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-escape-keydown": "1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz",
+ "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz",
+ "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@floating-ui/react-dom": "0.7.2",
+ "@radix-ui/react-arrow": "1.0.2",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0",
+ "@radix-ui/react-use-rect": "1.0.0",
+ "@radix-ui/react-use-size": "1.0.0",
+ "@radix-ui/rect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz",
+ "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz",
+ "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz",
+ "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz",
+ "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.2.tgz",
+ "integrity": "sha512-BcG/LKehxt36NXG0wPnoCitIfSMtU9Xo7BmythYA1PAMLtsMvW7kALfBzmduQoHTWcKr0AVcFyh0gChBUp9TiQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.0",
+ "@radix-ui/react-use-previous": "1.0.0",
+ "@radix-ui/react-use-size": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-toast": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.4.tgz",
+ "integrity": "sha512-wf+fc8DOywrpRK3jlPlWVe+ELYGHdKDaaARJZNuUTWyWYq7+ANCFLp4rTjZ/mcGkJJQ/vZ949Zis9xxEpfq9OA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.4",
+ "@radix-ui/react-portal": "1.0.3",
+ "@radix-ui/react-presence": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-visually-hidden": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz",
+ "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz",
+ "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-presence": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz",
+ "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
+ "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tooltip": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.5.tgz",
+ "integrity": "sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-dismissable-layer": "1.0.3",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-popper": "1.1.1",
+ "@radix-ui/react-portal": "1.0.2",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-slot": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.0",
+ "@radix-ui/react-visually-hidden": "1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz",
+ "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz",
+ "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz",
+ "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz",
+ "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz",
+ "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz",
+ "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/rect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz",
+ "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.2.tgz",
+ "integrity": "sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/rect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz",
+ "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/@react-pdf/fns": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-2.0.1.tgz",
+ "integrity": "sha512-/vgecczzFYBQFkgUupH+sxXhLWQtBwdwCgweyh25XOlR4NZuaMD/UVUDl4loFHhRQqDMQq37lkTcchh7zzW6ug==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13"
+ }
+ },
+ "node_modules/@react-pdf/font": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.3.4.tgz",
+ "integrity": "sha512-ICvVH0GW3kgocxVfE0mFY3EcnAoxRolkOfhPCfLu8mRbwJaHRiKX5+8SRKbPADZNdHrF9ngt4LpUxThy+bdZXg==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/types": "^2.3.1",
+ "cross-fetch": "^3.1.5",
+ "fontkit": "^2.0.2",
+ "is-url": "^1.2.4"
+ }
+ },
+ "node_modules/@react-pdf/image": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-2.2.1.tgz",
+ "integrity": "sha512-f0+cEP6pSBmk8eS/wP2tMsJcv2c7xjzca6cr1kwcapr1nzkPrh6fMdEeFl6kR2/HlJK/JoHo+xxlzRiQ8V2lrw==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/png-js": "^2.2.0",
+ "cross-fetch": "^3.1.5"
+ }
+ },
+ "node_modules/@react-pdf/layout": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.6.0.tgz",
+ "integrity": "sha512-xrcVWxtXpobW0iqTd8OmMCVMmeGUM46PYq7B1MGR1fI1QG/EKe4HzFdhSdd0werZYj+t1TRC8+tVSX5POs5SYA==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/image": "^2.2.1",
+ "@react-pdf/pdfkit": "^3.0.2",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/stylesheet": "^4.1.5",
+ "@react-pdf/textkit": "^4.2.0",
+ "@react-pdf/types": "^2.3.1",
+ "@react-pdf/yoga": "^4.1.2",
+ "cross-fetch": "^3.1.5",
+ "emoji-regex": "^10.2.1",
+ "queue": "^6.0.1"
+ }
+ },
+ "node_modules/@react-pdf/pdfkit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.0.2.tgz",
+ "integrity": "sha512-+m5rwNCwyEH6lmnZWpsQJvdqb6YaCCR0nMWrc/KKDwznuPMrGmGWyNxqCja+bQPORcHZyl6Cd/iFL0glyB3QGw==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/png-js": "^2.2.0",
+ "browserify-zlib": "^0.2.0",
+ "crypto-js": "^4.0.0",
+ "fontkit": "^2.0.2",
+ "vite-compatible-readable-stream": "^3.6.1"
+ }
+ },
+ "node_modules/@react-pdf/png-js": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.2.0.tgz",
+ "integrity": "sha512-csZU5lfNW73tq7s7zB/1rWXGro+Z9cQhxtsXwxS418TSszHUiM6PwddouiKJxdGhbVLjRIcuuFVa0aR5cDOC6w==",
+ "dependencies": {
+ "browserify-zlib": "^0.2.0"
+ }
+ },
+ "node_modules/@react-pdf/primitives": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-3.0.1.tgz",
+ "integrity": "sha512-0HGcknrLNwyhxe+SZCBL29JY4M85mXKdvTZE9uhjNbADGgTc8wVnkc5+e4S/lDvugbVISXyuIhZnYwtK9eDnyQ=="
+ },
+ "node_modules/@react-pdf/render": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-3.2.4.tgz",
+ "integrity": "sha512-lnef097Dx2vHKpY9OHHNmV+nsG5vpd33h76tCzdlbijj+TyVm1j7ZQ5qadGq1uMOFAU6lp0hEo7VoDk7XnjmFw==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/textkit": "^4.2.0",
+ "@react-pdf/types": "^2.3.1",
+ "abs-svg-path": "^0.1.1",
+ "color-string": "^1.5.3",
+ "normalize-svg-path": "^1.1.0",
+ "parse-svg-path": "^0.1.2",
+ "svg-arc-to-cubic-bezier": "^3.2.0"
+ }
+ },
+ "node_modules/@react-pdf/renderer": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-3.1.9.tgz",
+ "integrity": "sha512-kfEH7O+Jy7aihbUqrT9Ej1gx8/twRWvFMfHlACr29QsN+s+w0XzWpHCvbjkinVFABYcvsenluiirik6mf4qwRQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/font": "^2.3.4",
+ "@react-pdf/layout": "^3.6.0",
+ "@react-pdf/pdfkit": "^3.0.2",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/render": "^3.2.4",
+ "@react-pdf/types": "^2.3.1",
+ "events": "^3.3.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "queue": "^6.0.1",
+ "scheduler": "^0.17.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.6 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-pdf/stylesheet": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.1.5.tgz",
+ "integrity": "sha512-8sP+4KD3cAfBEsZBQeJC7GUC0vkCLiAc6kZaGX0dXaBR3nZO2TaCD8+ZuezokZi+ARp/yvWJqR2vIX8ra7X1xA==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/types": "^2.3.1",
+ "color-string": "^1.5.3",
+ "hsl-to-hex": "^1.0.0",
+ "media-engine": "^1.0.3",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "node_modules/@react-pdf/textkit": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.2.0.tgz",
+ "integrity": "sha512-R90pEOW6NdhUx4p99iROvKmwB06IRYdXMhh0QcmUeoPOLe64ZdMfs3LZliNUWgI5fCmq71J+nv868i/EakFPDg==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "hyphen": "^1.6.4",
+ "unicode-properties": "^1.4.1"
+ }
+ },
+ "node_modules/@react-pdf/types": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.3.1.tgz",
+ "integrity": "sha512-FiwAsNp2oQ2W39xAU1PCjY6YNjEuypQykEA6VMz4WZ4ERvyOBB4M5B8063lA8YYBcjYB8xQOa9og4UH1eqMbgg=="
+ },
+ "node_modules/@react-pdf/yoga": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@react-pdf/yoga/-/yoga-4.1.2.tgz",
+ "integrity": "sha512-OlMZkFrJDj4GyKZ70thiObwwPVZ52B7mlPyfzwa+sgwsioqHXg9nMWOO+7SQFNUbbOGagMUu0bCuTv+iXYZuaQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13"
+ }
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==",
+ "dev": true
+ },
+ "node_modules/@sid-hq/sid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@sid-hq/sid/-/sid-3.1.0.tgz",
+ "integrity": "sha512-ABWtpUAyR8NF/1xbWmKBlgJl6TT8Me92yo9jVK+t7Jx8VjJRuc71QnC+mSMfk4MoX9CMUsM0efWYOITzekU7qA==",
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
+ "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0"
+ }
+ },
+ "node_modules/@splinetool/react-spline": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@splinetool/react-spline/-/react-spline-2.2.6.tgz",
+ "integrity": "sha512-y9L2VEbnC6FNZZu8XMmWM9YTTTWal6kJVfP05Amf0QqDNzCSumKsJxZyGUODvuCmiAvy0PfIfEsiVKnSxvhsDw==",
+ "dependencies": {
+ "lodash.debounce": "^4.0.8",
+ "react-merge-refs": "^2.0.1"
+ },
+ "peerDependencies": {
+ "@splinetool/runtime": "*",
+ "react": ">=17.0.0",
+ "react-dom": ">=17.0.0"
+ }
+ },
+ "node_modules/@splinetool/runtime": {
+ "version": "0.9.383",
+ "resolved": "https://registry.npmjs.org/@splinetool/runtime/-/runtime-0.9.383.tgz",
+ "integrity": "sha512-2NqNxxQPvWMTn9+uOXLAAFB0mIuzE0NBMaixQ16yAKxL+8YySUwOYLyM4iX0D3afUYfZovQSZiY2lSiQzL82SQ==",
+ "peer": true,
+ "dependencies": {
+ "on-change": "^4.0.0",
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.0.0.tgz",
+ "integrity": "sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/babel-preset": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.0.0.tgz",
+ "integrity": "sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==",
+ "dev": true,
+ "dependencies": {
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.0.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@svgr/core": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.0.0.tgz",
+ "integrity": "sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/core/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@svgr/plugin-jsx": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.0.1.tgz",
+ "integrity": "sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/plugin-svgo": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.0.1.tgz",
+ "integrity": "sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ },
+ "peerDependencies": {
+ "@svgr/core": "*"
+ }
+ },
+ "node_modules/@svgr/webpack": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.0.1.tgz",
+ "integrity": "sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.21.3",
+ "@babel/plugin-transform-react-constant-elements": "^7.21.3",
+ "@babel/preset-env": "^7.20.2",
+ "@babel/preset-react": "^7.18.6",
+ "@babel/preset-typescript": "^7.21.0",
+ "@svgr/core": "8.0.0",
+ "@svgr/plugin-jsx": "8.0.1",
+ "@svgr/plugin-svgo": "8.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+ "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
+ "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
+ "dev": true,
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@tanstack/query-core": {
+ "version": "4.29.14",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.14.tgz",
+ "integrity": "sha512-ElEAahtLWA7Y7c2Haw10KdEf2tx+XZl/Z8dmyWxZehxWK3TPL5qtXtb7kUEhvt/8u2cSP62fLxgh2qqzMMGnDQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "4.29.14",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.14.tgz",
+ "integrity": "sha512-wh4bd/QIy85YgTDBtj/7/9ZkpRX41QdZuUL8xKoSzuMCukXvAE1/oJ4p0F15lqQq9W3g2pgcbr2Aa+CNvqABhg==",
+ "dependencies": {
+ "@tanstack/query-core": "4.29.14",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-native": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.2.0.tgz",
+ "integrity": "sha512-xTEnpUKiV/bMyEsE5bT4oYA0x0Z/colMtxzUY8bKyPXBNLn/e0V4ZjBZkEhms0xE4pv9QsPfSRu9AWS4y5wGvA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "^5.0.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@testing-library/dom/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@testing-library/jest-dom": {
+ "version": "5.16.5",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
+ "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
+ "dev": true,
+ "dependencies": {
+ "@adobe/css-tools": "^4.0.1",
+ "@babel/runtime": "^7.9.2",
+ "@types/testing-library__jest-dom": "^5.9.1",
+ "aria-query": "^5.0.0",
+ "chalk": "^3.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.5.6",
+ "lodash": "^4.17.15",
+ "redent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/@testing-library/react": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz",
+ "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "@testing-library/dom": "^9.0.0",
+ "@types/react-dom": "^18.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ }
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@trpc/client": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.21.1.tgz",
+ "integrity": "sha512-oZgPbghs9y2frTCA9mZPSAlVknV9stCTKYO5nsvRr0aX+oaA0URoXJTKZTSpLZxLfuwWgxBj4iTiCWWWmaVelw==",
+ "peerDependencies": {
+ "@trpc/server": "10.21.1"
+ }
+ },
+ "node_modules/@trpc/next": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.21.1.tgz",
+ "integrity": "sha512-xj5hpodCSOj5ROqpZ95ehHFzJLbRhfQ7rCYWRzrQvuk8phJV/O6xsMSVT51ogL4tFDmVPSGCP5x5Z25NzULpzQ==",
+ "dependencies": {
+ "react-ssr-prepass": "^1.5.0"
+ },
+ "peerDependencies": {
+ "@tanstack/react-query": "^4.18.0",
+ "@trpc/client": "10.21.1",
+ "@trpc/react-query": "10.21.1",
+ "@trpc/server": "10.21.1",
+ "next": "*",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@trpc/react-query": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.21.1.tgz",
+ "integrity": "sha512-sCLJW9v79sJhVj3L6Ck74mImvKBXrq2KOKtdguxaZZ5rgeqMyQuc8bGHRpf9yfeV08uMNl4Svz1QTee9PjdSqg==",
+ "peerDependencies": {
+ "@tanstack/react-query": "^4.18.0",
+ "@trpc/client": "10.21.1",
+ "@trpc/server": "10.21.1",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@trpc/server": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.21.1.tgz",
+ "integrity": "sha512-4E4upTD2/Aq0Dm9HW4nbKSoIlqbV/ajRqNl1MCFBd9FjTv47qq2ncmAWMbb0AIVh2UV87PJlTjpPNNecRm6g9Q=="
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz",
+ "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==",
+ "dev": true
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
+ "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+ "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
+ "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
+ "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
+ "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/jest": {
+ "version": "29.5.1",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz",
+ "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
+ "node_modules/@types/jest/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@types/jest/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@types/jest/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/@types/jsdom": {
+ "version": "20.0.1",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.14.194",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz",
+ "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g=="
+ },
+ "node_modules/@types/mdast": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
+ "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
+ },
+ "node_modules/@types/node": {
+ "version": "18.15.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
+ "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
+ },
+ "node_modules/@types/node-fetch": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.8.tgz",
+ "integrity": "sha512-nnH5lV9QCMPsbEVdTb5Y+F3GQxLSw1xQgIydrb2gSfEavRPs50FnMr+KUaa+LoPSqibm2N+ZZxH7lavZlAT4GA==",
+ "dependencies": {
+ "@types/node": "*",
+ "form-data": "^4.0.0"
+ }
+ },
+ "node_modules/@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+ "dev": true
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ },
+ "node_modules/@types/react": {
+ "version": "18.0.37",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
+ "integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz",
+ "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "dev": true
+ },
+ "node_modules/@types/testing-library__jest-dom": {
+ "version": "5.14.5",
+ "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
+ "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/jest": "*"
+ }
+ },
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
+ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
+ "dev": true
+ },
+ "node_modules/@types/unist": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
+ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
+ },
+ "node_modules/@types/uuid": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.5.tgz",
+ "integrity": "sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==",
+ "dev": true
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz",
+ "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/type-utils": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.1.tgz",
+ "integrity": "sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.59.1",
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/typescript-estree": "5.59.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz",
+ "integrity": "sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/visitor-keys": "5.59.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz",
+ "integrity": "sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz",
+ "integrity": "sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/visitor-keys": "5.59.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz",
+ "integrity": "sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz",
+ "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz",
+ "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz",
+ "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz",
+ "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz",
+ "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz",
+ "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.59.8",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@uiball/loaders": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@uiball/loaders/-/loaders-1.3.0.tgz",
+ "integrity": "sha512-w372e7PMt/s6LZ321HoghgDDU8fomamAzJfrVAdBUhsWERJEpxJMqG37NFztUq/T4J7nzzjkvZI4UX7Z2F/O6A==",
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@vercel/analytics": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.0.1.tgz",
+ "integrity": "sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow=="
+ },
+ "node_modules/@vercel/edge": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@vercel/edge/-/edge-0.3.4.tgz",
+ "integrity": "sha512-dFU+yAUDQRwpuRGxRDlEO1LMq0y1LGsBgkyryQWe4w15/Fy2/lCnpvdIoAhHl3QvIGAxCLHzwRHsqfLRdpxgJQ=="
+ },
+ "node_modules/abab": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+ "dev": true
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/abs-svg-path": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz",
+ "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA=="
+ },
+ "node_modules/acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-globals": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.1.0",
+ "acorn-walk": "^8.0.2"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
+ "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+ "dependencies": {
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "dev": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
+ "dev": true
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.14",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
+ "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.5",
+ "caniuse-lite": "^1.0.30001464",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
+ "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axios": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+ "dependencies": {
+ "follow-redirects": "^1.14.8"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "dev": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
+ "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "^29.5.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
+ "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz",
+ "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.4.1",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz",
+ "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.1",
+ "core-js-compat": "^3.31.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz",
+ "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
+ "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "dev": true,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "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/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brotli": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+ "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+ "dependencies": {
+ "base64-js": "^1.1.2"
+ }
+ },
+ "node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001514",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz",
+ "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/cheerio": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
+ "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/cobe": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cobe/-/cobe-0.6.3.tgz",
+ "integrity": "sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg==",
+ "dependencies": {
+ "phenomenon": "^1.6.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookies-next": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookies-next/-/cookies-next-2.1.2.tgz",
+ "integrity": "sha512-czxcfqVaQlo0Q/3xMgp/2jpspsuLJrIm6D37wlmibP3DAcYT315c8UxQmDMohhAT/GRWpaHzpDEFANBjzTFQGg==",
+ "dependencies": {
+ "@types/cookie": "^0.4.1",
+ "@types/node": "^16.10.2",
+ "cookie": "^0.4.0"
+ }
+ },
+ "node_modules/cookies-next/node_modules/@types/node": {
+ "version": "16.18.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.25.tgz",
+ "integrity": "sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA=="
+ },
+ "node_modules/cookies-next/node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/copy-anything": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.3.tgz",
+ "integrity": "sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==",
+ "dependencies": {
+ "is-what": "^4.1.8"
+ },
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "3.30.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
+ "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==",
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.31.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz",
+ "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.9"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "dependencies": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ }
+ },
+ "node_modules/cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+ "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+ "dependencies": {
+ "node-fetch": "2.6.7"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "dev": true
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ },
+ "node_modules/cssom": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
+ "dev": true
+ },
+ "node_modules/cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "dev": true,
+ "dependencies": {
+ "cssom": "~0.3.6"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cssstyle/node_modules/cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "node_modules/data-urls": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "dev": true,
+ "dependencies": {
+ "abab": "^2.0.6",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^11.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "dev": true
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+ "dev": true
+ },
+ "node_modules/deep-equal": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz",
+ "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "es-get-iterator": "^1.1.2",
+ "get-intrinsic": "^1.1.3",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.1",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dfa": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
+ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/diff": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
+ "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+ "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/digest-fetch": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz",
+ "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==",
+ "dependencies": {
+ "base-64": "^0.1.0",
+ "md5": "^2.3.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domexception": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "dev": true,
+ "dependencies": {
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.454",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz",
+ "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==",
+ "dev": true
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
+ "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz",
+ "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/error-ex/node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz",
+ "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.43.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "13.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.1.tgz",
+ "integrity": "sha512-ajuxjCkW1hvirr0EQZb3/B/bFH52Z7CT89uCtTcICFL9l30i5c8hN4p0LXvTjdOXNPV5fEDcxBgGHgXdzTj1/A==",
+ "dev": true,
+ "dependencies": {
+ "@next/eslint-plugin-next": "13.4.1",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.42.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz",
+ "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "get-tsconfig": "^4.5.0",
+ "globby": "^13.1.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.5"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
+ "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
+ "dev": true,
+ "dependencies": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.32.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
+ "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-scope/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/expect-utils": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
+ "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fontkit": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz",
+ "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.2",
+ "brotli": "^1.3.2",
+ "clone": "^2.1.2",
+ "dfa": "^1.2.0",
+ "fast-deep-equal": "^3.1.3",
+ "restructure": "^3.0.0",
+ "tiny-inflate": "^1.0.3",
+ "unicode-properties": "^1.4.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "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": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/form-data-encoder": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/formdata-node": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+ "dependencies": {
+ "node-domexception": "1.0.0",
+ "web-streams-polyfill": "4.0.0-beta.3"
+ },
+ "engines": {
+ "node": ">= 12.20"
+ }
+ },
+ "node_modules/formdata-node/node_modules/web-streams-polyfill": {
+ "version": "4.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "10.12.8",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.12.8.tgz",
+ "integrity": "sha512-ylobYq3tGFjjAmRdBs5pL/R1+4AmOm69g/JbF5DcNETfRe8L9CjaX4acG83MjYdIsbsTGJmtR5qKx4glNmXO4A==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "optionalDependencies": {
+ "@emotion/is-prop-valid": "^0.8.2"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz",
+ "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ },
+ "node_modules/globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/gray-matter": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+ "dependencies": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/gray-matter/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/gray-matter/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz",
+ "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz",
+ "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "unist-util-find-after": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
+ "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.7.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz",
+ "integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/hsl-to-hex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz",
+ "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==",
+ "dependencies": {
+ "hsl-to-rgb-for-reals": "^1.1.0"
+ }
+ },
+ "node_modules/hsl-to-rgb-for-reals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz",
+ "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg=="
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "dependencies": {
+ "void-elements": "3.1.0"
+ }
+ },
+ "node_modules/html-to-image": {
+ "version": "1.11.11",
+ "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz",
+ "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA=="
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dev": true,
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/husky": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
+ "dev": true,
+ "bin": {
+ "husky": "lib/bin.js"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
+ "node_modules/hyphen": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.6.5.tgz",
+ "integrity": "sha512-MZbhHutRaHCUxjvJBYqL51Ntjbq16LemuJr2u+LpKd3UwyNHZsZAKh5uD+KmdAHtWpteupOqQTTezVGR/al43w=="
+ },
+ "node_modules/i18next": {
+ "version": "22.4.15",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz",
+ "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "dependencies": {
+ "@babel/runtime": "^7.20.6"
+ }
+ },
+ "node_modules/i18next-fs-backend": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.1.tgz",
+ "integrity": "sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA=="
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+ "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-what": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.8.tgz",
+ "integrity": "sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==",
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
+ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.5.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
+ "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
+ "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^0.7.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.5.0",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.5.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-cli": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
+ "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "prompts": "^2.0.1",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/node_modules/jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-cli/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-diff": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.4.3",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
+ "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "dev": true,
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
+ "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-environment-jsdom": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
+ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/jsdom": "^20.0.0",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jsdom": "^20.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "canvas": "^2.5.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
+ "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+ "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
+ "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
+ "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "dev": true,
+ "dependencies": {
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
+ "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
+ "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "dev": true,
+ "dependencies": {
+ "jest-regex-util": "^29.4.3",
+ "jest-snapshot": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
+ "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "^29.5.0",
+ "@jest/environment": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.4.3",
+ "jest-environment-node": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-leak-detector": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-resolve": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
+ "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/globals": "^29.5.0",
+ "@jest/source-map": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/babel__traverse": "^7.0.6",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.5.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.5.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.5.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-validate/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
+ "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.5.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.5.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
+ "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/jose": {
+ "version": "4.14.1",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.1.tgz",
+ "integrity": "sha512-SgjXLpP7jhQkUNKL6RpowoR/IF4QKE+WjLDMpNnh2vmhiFs67NftrNpvFtgbwpvRdtueFliahYYWz9E+XZZQlg==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdom": {
+ "version": "20.0.3",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
+ "dev": true,
+ "dependencies": {
+ "abab": "^2.0.6",
+ "acorn": "^8.8.1",
+ "acorn-globals": "^7.0.0",
+ "cssom": "^0.5.0",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^3.0.2",
+ "decimal.js": "^10.4.2",
+ "domexception": "^4.0.0",
+ "escodegen": "^2.0.0",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.1",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.2",
+ "parse5": "^7.1.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.1.2",
+ "w3c-xmlserializer": "^4.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^2.0.0",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^11.0.0",
+ "ws": "^8.11.0",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "canvas": "^2.5.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "dev": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dev": true,
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/lint-staged": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.1.tgz",
+ "integrity": "sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "5.2.0",
+ "cli-truncate": "^3.1.0",
+ "commander": "^10.0.0",
+ "debug": "^4.3.4",
+ "execa": "^7.0.0",
+ "lilconfig": "2.1.0",
+ "listr2": "^5.0.7",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-inspect": "^1.12.3",
+ "pidtree": "^0.6.0",
+ "string-argv": "^0.3.1",
+ "yaml": "^2.2.1"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ },
+ "engines": {
+ "node": "^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/lint-staged"
+ }
+ },
+ "node_modules/lint-staged/node_modules/chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/lint-staged/node_modules/execa": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
+ "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/lint-staged/node_modules/human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.18.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lint-staged/node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz",
+ "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.19",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.8.0",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": "^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/listr2/node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/listr2/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/listr2/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lowlight": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-2.8.1.tgz",
+ "integrity": "sha512-HCaGL61RKc1MYzEYn3rFoGkK0yslzCVDFJEanR19rc2L0mb8i58XM55jSRbzp9jcQrFzschPlwooC0vuNitk8Q==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "fault": "^2.0.0",
+ "highlight.js": "~11.7.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true,
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
+ "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/md5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+ "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+ "dependencies": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "~1.1.6"
+ }
+ },
+ "node_modules/md5/node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
+ "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz",
+ "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
+ "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "mdast-util-to-string": "^3.1.0",
+ "micromark": "^3.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz",
+ "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-gfm-autolink-literal": "^1.0.0",
+ "mdast-util-gfm-footnote": "^1.0.0",
+ "mdast-util-gfm-strikethrough": "^1.0.0",
+ "mdast-util-gfm-table": "^1.0.0",
+ "mdast-util-gfm-task-list-item": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz",
+ "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "ccount": "^2.0.0",
+ "mdast-util-find-and-replace": "^2.0.0",
+ "micromark-util-character": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz",
+ "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0",
+ "micromark-util-normalize-identifier": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz",
+ "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz",
+ "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz",
+ "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
+ "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-definitions": "^5.0.0",
+ "micromark-util-sanitize-uri": "^1.1.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-generated": "^2.0.0",
+ "unist-util-position": "^4.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "node_modules/media-engine": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz",
+ "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg=="
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
+ "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-core-commonmark": "^1.0.1",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
+ "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-factory-destination": "^1.0.0",
+ "micromark-factory-label": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-factory-title": "^1.0.0",
+ "micromark-factory-whitespace": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-html-tag-name": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz",
+ "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^1.0.0",
+ "micromark-extension-gfm-footnote": "^1.0.0",
+ "micromark-extension-gfm-strikethrough": "^1.0.0",
+ "micromark-extension-gfm-table": "^1.0.0",
+ "micromark-extension-gfm-tagfilter": "^1.0.0",
+ "micromark-extension-gfm-task-list-item": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz",
+ "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.0.tgz",
+ "integrity": "sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==",
+ "dependencies": {
+ "micromark-core-commonmark": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.5.tgz",
+ "integrity": "sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==",
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz",
+ "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz",
+ "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==",
+ "dependencies": {
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.4.tgz",
+ "integrity": "sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
+ "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
+ "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
+ "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
+ "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
+ "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
+ "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
+ "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
+ "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
+ "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
+ "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
+ "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
+ "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
+ "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
+ "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
+ "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
+ "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
+ "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
+ "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
+ "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "node_modules/next": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz",
+ "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==",
+ "dependencies": {
+ "@next/env": "13.5.6",
+ "@swc/helpers": "0.5.2",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.1",
+ "watchpack": "2.4.0"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=16.14.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "13.5.6",
+ "@next/swc-darwin-x64": "13.5.6",
+ "@next/swc-linux-arm64-gnu": "13.5.6",
+ "@next/swc-linux-arm64-musl": "13.5.6",
+ "@next/swc-linux-x64-gnu": "13.5.6",
+ "@next/swc-linux-x64-musl": "13.5.6",
+ "@next/swc-win32-arm64-msvc": "13.5.6",
+ "@next/swc-win32-ia32-msvc": "13.5.6",
+ "@next/swc-win32-x64-msvc": "13.5.6"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-auth": {
+ "version": "4.20.1",
+ "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.20.1.tgz",
+ "integrity": "sha512-ZcTUN4qzzZ/zJYgOW0hMXccpheWtAol8QOMdMts+LYRcsPGsqf2hEityyaKyECQVw1cWInb9dF3wYwI5GZdEmQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@panva/hkdf": "^1.0.2",
+ "cookie": "^0.5.0",
+ "jose": "^4.11.4",
+ "oauth": "^0.9.15",
+ "openid-client": "^5.4.0",
+ "preact": "^10.6.3",
+ "preact-render-to-string": "^5.1.19",
+ "uuid": "^8.3.2"
+ },
+ "peerDependencies": {
+ "next": "^12.2.5 || ^13",
+ "nodemailer": "^6.6.5",
+ "react": "^17.0.2 || ^18",
+ "react-dom": "^17.0.2 || ^18"
+ },
+ "peerDependenciesMeta": {
+ "nodemailer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-auth/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/next-i18next": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-13.2.2.tgz",
+ "integrity": "sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ }
+ ],
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "core-js": "^3",
+ "hoist-non-react-statics": "^3.3.2",
+ "i18next-fs-backend": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "i18next": "^22.0.6",
+ "next": ">= 12.0.0",
+ "react": ">= 17.0.2",
+ "react-i18next": "^12.2.0"
+ }
+ },
+ "node_modules/next/node_modules/@swc/helpers": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
+ "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/nextjs-google-analytics": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/nextjs-google-analytics/-/nextjs-google-analytics-2.3.3.tgz",
+ "integrity": "sha512-Y6sI6A7wt5dji8hYBnVkOh9LTyImSLFZXx3FpyQgVW7W4b4qEFHjH2u3fhDJsrRZeLlUGM8/RuHD/mhHc2Axfg==",
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ },
+ "peerDependencies": {
+ "next": ">=11.0.0",
+ "react": ">=17.0.0"
+ }
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-fetch/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/node-fetch/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-svg-path": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz",
+ "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==",
+ "dependencies": {
+ "svg-arc-to-cubic-bezier": "^3.0.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz",
+ "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==",
+ "dev": true
+ },
+ "node_modules/oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/oidc-token-hash": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.2.tgz",
+ "integrity": "sha512-U91Ba78GtVBxcExLI7U+hC2AwJQqXQEW/D3fjmJC4hhSVIgdl954KO4Gu95WqAlgDKJdLATxkmuxraWLT0fVRQ==",
+ "engines": {
+ "node": "^10.13.0 || >=12.0.0"
+ }
+ },
+ "node_modules/on-change": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
+ "integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
+ "peer": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/on-change?sponsor=1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dev": true,
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/openai": {
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.14.2.tgz",
+ "integrity": "sha512-JGlm7mMC7J+cyQZnQMOH7daD9cBqqWqLtlBsejElEkgoehPrYfdyxSxIGICz5xk4YimbwI5FlLATSVojLtCKXQ==",
+ "dependencies": {
+ "@types/node": "^18.11.18",
+ "@types/node-fetch": "^2.6.4",
+ "abort-controller": "^3.0.0",
+ "agentkeepalive": "^4.2.1",
+ "digest-fetch": "^1.3.0",
+ "form-data-encoder": "1.7.2",
+ "formdata-node": "^4.3.2",
+ "node-fetch": "^2.6.7",
+ "web-streams-polyfill": "^3.2.1"
+ },
+ "bin": {
+ "openai": "bin/cli"
+ }
+ },
+ "node_modules/openid-client": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.0.tgz",
+ "integrity": "sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==",
+ "dependencies": {
+ "jose": "^4.10.0",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/openid-client/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/openid-client/node_modules/object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/openid-client/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-svg-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
+ "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ=="
+ },
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
+ "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
+ "dependencies": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/phenomenon": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/phenomenon/-/phenomenon-1.6.0.tgz",
+ "integrity": "sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A=="
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
+ "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/preact": {
+ "version": "10.13.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz",
+ "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/preact-render-to-string": {
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz",
+ "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==",
+ "dependencies": {
+ "pretty-format": "^3.8.0"
+ },
+ "peerDependencies": {
+ "preact": ">=10"
+ }
+ },
+ "node_modules/preact-render-to-string/node_modules/pretty-format": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-tailwindcss": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.8.tgz",
+ "integrity": "sha512-KgPcEnJeIijlMjsA6WwYgRs5rh3/q76oInqtMXBA/EMcamrcYJpyhtRhyX1ayT9hnHlHTuO8sIifHF10WuSDKg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.17.0"
+ },
+ "peerDependencies": {
+ "@ianvs/prettier-plugin-sort-imports": "*",
+ "@prettier/plugin-pug": "*",
+ "@shopify/prettier-plugin-liquid": "*",
+ "@shufo/prettier-plugin-blade": "*",
+ "@trivago/prettier-plugin-sort-imports": "*",
+ "prettier": ">=2.2.0",
+ "prettier-plugin-astro": "*",
+ "prettier-plugin-css-order": "*",
+ "prettier-plugin-import-sort": "*",
+ "prettier-plugin-jsdoc": "*",
+ "prettier-plugin-organize-attributes": "*",
+ "prettier-plugin-organize-imports": "*",
+ "prettier-plugin-style-order": "*",
+ "prettier-plugin-svelte": "*",
+ "prettier-plugin-twig-melody": "*"
+ },
+ "peerDependenciesMeta": {
+ "@ianvs/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "@prettier/plugin-pug": {
+ "optional": true
+ },
+ "@shopify/prettier-plugin-liquid": {
+ "optional": true
+ },
+ "@shufo/prettier-plugin-blade": {
+ "optional": true
+ },
+ "@trivago/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "prettier-plugin-astro": {
+ "optional": true
+ },
+ "prettier-plugin-css-order": {
+ "optional": true
+ },
+ "prettier-plugin-import-sort": {
+ "optional": true
+ },
+ "prettier-plugin-jsdoc": {
+ "optional": true
+ },
+ "prettier-plugin-organize-attributes": {
+ "optional": true
+ },
+ "prettier-plugin-organize-imports": {
+ "optional": true
+ },
+ "prettier-plugin-style-order": {
+ "optional": true
+ },
+ "prettier-plugin-svelte": {
+ "optional": true
+ },
+ "prettier-plugin-twig-melody": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prisma": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.13.0.tgz",
+ "integrity": "sha512-L9mqjnSmvWIRCYJ9mQkwCtj4+JDYYTdhoyo8hlsHNDXaZLh/b4hR0IoKIBbTKxZuyHQzLopb/+0Rvb69uGV7uA==",
+ "devOptional": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@prisma/engines": "4.13.0"
+ },
+ "bin": {
+ "prisma": "build/index.js",
+ "prisma2": "build/index.js"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/property-information": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz",
+ "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz",
+ "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
+ "node_modules/queue": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
+ "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
+ "dependencies": {
+ "inherits": "~2.0.3"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-dom/node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/react-i18next": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.3.1.tgz",
+ "integrity": "sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.6",
+ "html-parse-stringify": "^3.0.1"
+ },
+ "peerDependencies": {
+ "i18next": ">= 19.0.0",
+ "react": ">= 16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz",
+ "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true
+ },
+ "node_modules/react-markdown": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz",
+ "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/prop-types": "^15.0.0",
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "prop-types": "^15.0.0",
+ "property-information": "^6.0.0",
+ "react-is": "^18.0.0",
+ "remark-parse": "^10.0.0",
+ "remark-rehype": "^10.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16",
+ "react": ">=16"
+ }
+ },
+ "node_modules/react-markdown/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ },
+ "node_modules/react-merge-refs": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-2.0.2.tgz",
+ "integrity": "sha512-V5BGTwGa2r+/t0A/BZMS6L7VPXY0CU8xtAhkT3XUoI1WJJhhtvulvoiZkJ5Jt9YAW23m4xFWmhQ+C5HwjtTFhQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
+ "node_modules/react-ssr-prepass": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz",
+ "integrity": "sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-type-animation": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/react-type-animation/-/react-type-animation-3.1.0.tgz",
+ "integrity": "sha512-Ju74SpUFpSINqlGU8UeFAF+AnAn0nZcc8MB0Ho6QvRkh8uDKkOzAiMD3l9xEmkbKXnSYsljfVgIDM/zwqEImpQ==",
+ "peerDependencies": {
+ "prop-types": "^15.5.4",
+ "react": ">= 15.0.0",
+ "react-dom": ">= 15.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "dev": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/rehype-highlight": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-6.0.0.tgz",
+ "integrity": "sha512-q7UtlFicLhetp7K48ZgZiJgchYscMma7XjzX7t23bqEJF8m6/s+viXQEe4oHjrATTIZpX7RG8CKD7BlNZoh9gw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-text": "^3.0.0",
+ "lowlight": "^2.0.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
+ "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-gfm": "^2.0.0",
+ "micromark-extension-gfm": "^2.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
+ "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-hast": "^12.1.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/restructure": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.0.tgz",
+ "integrity": "sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw=="
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
+ "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
+ "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "node_modules/section-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
+ "peer": true
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dev": true,
+ "dependencies": {
+ "internal-slot": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz",
+ "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==",
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
+ "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "7.1.6",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sucrase/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/superjson": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.9.1.tgz",
+ "integrity": "sha512-oT3HA2nPKlU1+5taFgz/HDy+GEaY+CWEbLzaRJVD4gZ7zMVVC4GDNFdgvAZt6/VuIk6D2R7RtPAiCHwmdzlMmg==",
+ "dependencies": {
+ "copy-anything": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svg-arc-to-cubic-bezier": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz",
+ "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g=="
+ },
+ "node_modules/svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true
+ },
+ "node_modules/svgo": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+ "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.2.1",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/svgo/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "node_modules/synckit": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
+ "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.18.2",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-radix": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz",
+ "integrity": "sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A=="
+ },
+ "node_modules/tailwindcss/node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/tailwindcss/node_modules/postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dev": true,
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz",
+ "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-properties": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
+ "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-trie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
+ "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+ "dependencies": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "node_modules/unicode-trie/node_modules/pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
+ },
+ "node_modules/unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz",
+ "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-generated": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
+ "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
+ "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
+ "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/uvu": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
+ "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
+ "dependencies": {
+ "dequal": "^2.0.0",
+ "diff": "^5.0.0",
+ "kleur": "^4.0.3",
+ "sade": "^1.7.3"
+ },
+ "bin": {
+ "uvu": "bin.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uvu/node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
+ "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/vfile": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+ "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite-compatible-readable-stream": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz",
+ "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
+ "dev": true,
+ "dependencies": {
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
+ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dev": true,
+ "dependencies": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+ "dev": true,
+ "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
+ }
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+ "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
+ "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+ "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zustand": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.7.tgz",
+ "integrity": "sha512-dY8ERwB9Nd21ellgkBZFhudER8KVlelZm8388B5nDAXhO/+FZDhYMuRnqDgu5SYyRgz/iaf8RKnbUs/cHfOGlQ==",
+ "dependencies": {
+ "use-sync-external-store": "1.2.0"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "immer": ">=9.0",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ },
+ "dependencies": {
+ "@adobe/css-tools": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz",
+ "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==",
+ "dev": true
+ },
+ "@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
+ },
+ "@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
+ "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.21.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
+ "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.21.4",
+ "@babel/generator": "^7.21.4",
+ "@babel/helper-compilation-targets": "^7.21.4",
+ "@babel/helper-module-transforms": "^7.21.2",
+ "@babel/helpers": "^7.21.0",
+ "@babel/parser": "^7.21.4",
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.21.4",
+ "@babel/types": "^7.21.4",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.23.0",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+ "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz",
+ "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
+ "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz",
+ "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "regexpu-core": "^5.3.1"
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz",
+ "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "dev": true
+ },
+ "@babel/helper-function-name": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz",
+ "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
+ "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+ "dev": true
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-wrap-function": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz",
+ "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-member-expression-to-functions": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
+ "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
+ "dev": true
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz",
+ "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.5",
+ "@babel/traverse": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
+ "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.21.0",
+ "@babel/types": "^7.21.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "dev": true
+ },
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz",
+ "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz",
+ "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.5"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "requires": {}
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-async-generator-functions": {
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz",
+ "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz",
+ "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-class-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-class-static-block": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz",
+ "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz",
+ "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-environment-visitor": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz",
+ "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-dynamic-import": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz",
+ "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-export-namespace-from": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz",
+ "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz",
+ "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-json-strings": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz",
+ "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz",
+ "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz",
+ "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz",
+ "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz",
+ "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz",
+ "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-numeric-separator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz",
+ "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-object-rest-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz",
+ "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz",
+ "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-optional-chaining": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz",
+ "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz",
+ "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-private-methods": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-private-property-in-object": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz",
+ "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-constant-elements": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz",
+ "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-display-name": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz",
+ "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz",
+ "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/types": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-development": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz",
+ "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz",
+ "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.1"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz",
+ "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-typescript": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz",
+ "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz",
+ "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.22.5",
+ "@babel/plugin-syntax-import-attributes": "^7.22.5",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
+ "@babel/plugin-transform-async-generator-functions": "^7.22.7",
+ "@babel/plugin-transform-async-to-generator": "^7.22.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
+ "@babel/plugin-transform-block-scoping": "^7.22.5",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-class-static-block": "^7.22.5",
+ "@babel/plugin-transform-classes": "^7.22.6",
+ "@babel/plugin-transform-computed-properties": "^7.22.5",
+ "@babel/plugin-transform-destructuring": "^7.22.5",
+ "@babel/plugin-transform-dotall-regex": "^7.22.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.22.5",
+ "@babel/plugin-transform-dynamic-import": "^7.22.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
+ "@babel/plugin-transform-export-namespace-from": "^7.22.5",
+ "@babel/plugin-transform-for-of": "^7.22.5",
+ "@babel/plugin-transform-function-name": "^7.22.5",
+ "@babel/plugin-transform-json-strings": "^7.22.5",
+ "@babel/plugin-transform-literals": "^7.22.5",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.22.5",
+ "@babel/plugin-transform-modules-amd": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.22.5",
+ "@babel/plugin-transform-modules-umd": "^7.22.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.22.5",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5",
+ "@babel/plugin-transform-numeric-separator": "^7.22.5",
+ "@babel/plugin-transform-object-rest-spread": "^7.22.5",
+ "@babel/plugin-transform-object-super": "^7.22.5",
+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.22.6",
+ "@babel/plugin-transform-parameters": "^7.22.5",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/plugin-transform-private-property-in-object": "^7.22.5",
+ "@babel/plugin-transform-property-literals": "^7.22.5",
+ "@babel/plugin-transform-regenerator": "^7.22.5",
+ "@babel/plugin-transform-reserved-words": "^7.22.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.22.5",
+ "@babel/plugin-transform-spread": "^7.22.5",
+ "@babel/plugin-transform-sticky-regex": "^7.22.5",
+ "@babel/plugin-transform-template-literals": "^7.22.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.22.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.22.5",
+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-regex": "^7.22.5",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.22.5",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3",
+ "babel-plugin-polyfill-corejs2": "^0.4.4",
+ "babel-plugin-polyfill-corejs3": "^0.8.2",
+ "babel-plugin-polyfill-regenerator": "^0.5.1",
+ "core-js-compat": "^3.31.0"
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/preset-react": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz",
+ "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-transform-react-display-name": "^7.22.5",
+ "@babel/plugin-transform-react-jsx": "^7.22.5",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.22.5"
+ }
+ },
+ "@babel/preset-typescript": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz",
+ "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.22.5",
+ "@babel/plugin-transform-typescript": "^7.22.5"
+ }
+ },
+ "@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+ "dev": true
+ },
+ "@babel/runtime": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz",
+ "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==",
+ "requires": {
+ "regenerator-runtime": "^0.13.11"
+ }
+ },
+ "@babel/template": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "optional": true,
+ "requires": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
+ "optional": true
+ },
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
+ "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
+ "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.5.2",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@eslint/js": {
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz",
+ "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==",
+ "dev": true
+ },
+ "@floating-ui/core": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz",
+ "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+ },
+ "@floating-ui/dom": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz",
+ "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==",
+ "requires": {
+ "@floating-ui/core": "^0.7.3"
+ }
+ },
+ "@floating-ui/react-dom": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz",
+ "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==",
+ "requires": {
+ "@floating-ui/dom": "^0.5.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ }
+ },
+ "@headlessui/react": {
+ "version": "1.7.14",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.14.tgz",
+ "integrity": "sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==",
+ "requires": {
+ "client-only": "^0.0.1"
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "@jest/console": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@jest/core": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
+ "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/reporters": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.5.0",
+ "jest-config": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-resolve-dependencies": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "requires": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ }
+ },
+ "@jest/expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "dev": true,
+ "requires": {
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
+ }
+ },
+ "@jest/expect-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "dev": true,
+ "requires": {
+ "jest-get-type": "^29.4.3"
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ }
+ },
+ "@jest/globals": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
+ "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "jest-mock": "^29.5.0"
+ }
+ },
+ "@jest/reporters": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
+ "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.27.8"
+ }
+ },
+ "@jest/source-map": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
+ "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ }
+ },
+ "@jest/test-result": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ }
+ },
+ "@jest/test-sequencer": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
+ "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "@jest/transform": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
+ "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.5.0",
+ "@jridgewell/trace-mapping": "^0.3.15",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "requires": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ },
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ }
+ }
+ },
+ "@next-auth/prisma-adapter": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@next-auth/prisma-adapter/-/prisma-adapter-1.0.6.tgz",
+ "integrity": "sha512-Z7agwfSZEeEcqKqrnisBun7VndRPshd6vyDsoRU68MXbkui8storkHgvN2hnNDrqr/hSCF9aRn56a1qpihaB4A==",
+ "requires": {}
+ },
+ "@next/env": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz",
+ "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw=="
+ },
+ "@next/eslint-plugin-next": {
+ "version": "13.4.1",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.1.tgz",
+ "integrity": "sha512-tVPS/2FKlA3ANCRCYZVT5jdbUKasBU8LG6bYqcNhyORDFTlDYa4cAWQJjZ7msIgLwMQIbL8CAsxrOL8maa/4Lg==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.7"
+ }
+ },
+ "@next/swc-darwin-arm64": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz",
+ "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==",
+ "optional": true
+ },
+ "@next/swc-darwin-x64": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz",
+ "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==",
+ "optional": true
+ },
+ "@next/swc-linux-arm64-gnu": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz",
+ "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==",
+ "optional": true
+ },
+ "@next/swc-linux-arm64-musl": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz",
+ "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==",
+ "optional": true
+ },
+ "@next/swc-linux-x64-gnu": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz",
+ "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==",
+ "optional": true
+ },
+ "@next/swc-linux-x64-musl": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz",
+ "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==",
+ "optional": true
+ },
+ "@next/swc-win32-arm64-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz",
+ "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==",
+ "optional": true
+ },
+ "@next/swc-win32-ia32-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz",
+ "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==",
+ "optional": true
+ },
+ "@next/swc-win32-x64-msvc": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz",
+ "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==",
+ "optional": true
+ },
+ "@nicolo-ribaudo/semver-v6": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
+ "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
+ "dev": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@panva/hkdf": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.4.tgz",
+ "integrity": "sha512-003xWiCuvePbLaPHT+CRuaV4GlyCAVm6XYSbBZDHoWZGn1mNkVKFaDbGJjjxmEFvizUwlCoM6O18FCBMMky2zQ=="
+ },
+ "@pkgr/utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "is-glob": "^4.0.3",
+ "open": "^8.4.0",
+ "picocolors": "^1.0.0",
+ "tiny-glob": "^0.2.9",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@prisma/client": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.13.0.tgz",
+ "integrity": "sha512-YaiiICcRB2hatxsbnfB66uWXjcRw3jsZdlAVxmx0cFcTc/Ad/sKdHCcWSnqyDX47vAewkjRFwiLwrOUjswVvmA==",
+ "requires": {
+ "@prisma/engines-version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a"
+ }
+ },
+ "@prisma/engines": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.13.0.tgz",
+ "integrity": "sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw==",
+ "devOptional": true
+ },
+ "@prisma/engines-version": {
+ "version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a.tgz",
+ "integrity": "sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ=="
+ },
+ "@radix-ui/primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz",
+ "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-arrow": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz",
+ "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ }
+ },
+ "@radix-ui/react-collection": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz",
+ "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2"
+ },
+ "dependencies": {
+ "@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
+ }
+ },
+ "@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
+ }
+ }
+ }
+ },
+ "@radix-ui/react-compose-refs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
+ "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz",
+ "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-dismissable-layer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz",
+ "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-escape-keydown": "1.0.2"
+ }
+ },
+ "@radix-ui/react-id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz",
+ "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-popper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz",
+ "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@floating-ui/react-dom": "0.7.2",
+ "@radix-ui/react-arrow": "1.0.2",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0",
+ "@radix-ui/react-use-rect": "1.0.0",
+ "@radix-ui/react-use-size": "1.0.0",
+ "@radix-ui/rect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-portal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz",
+ "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ }
+ },
+ "@radix-ui/react-presence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz",
+ "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz",
+ "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.1"
+ }
+ },
+ "@radix-ui/react-slot": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz",
+ "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0"
+ }
+ },
+ "@radix-ui/react-switch": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.2.tgz",
+ "integrity": "sha512-BcG/LKehxt36NXG0wPnoCitIfSMtU9Xo7BmythYA1PAMLtsMvW7kALfBzmduQoHTWcKr0AVcFyh0gChBUp9TiQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.0",
+ "@radix-ui/react-use-previous": "1.0.0",
+ "@radix-ui/react-use-size": "1.0.0"
+ }
+ },
+ "@radix-ui/react-toast": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.4.tgz",
+ "integrity": "sha512-wf+fc8DOywrpRK3jlPlWVe+ELYGHdKDaaARJZNuUTWyWYq7+ANCFLp4rTjZ/mcGkJJQ/vZ949Zis9xxEpfq9OA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.4",
+ "@radix-ui/react-portal": "1.0.3",
+ "@radix-ui/react-presence": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-visually-hidden": "1.0.3"
+ },
+ "dependencies": {
+ "@radix-ui/primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-dismissable-layer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz",
+ "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
+ }
+ },
+ "@radix-ui/react-portal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz",
+ "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ }
+ },
+ "@radix-ui/react-presence": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz",
+ "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
+ }
+ },
+ "@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
+ }
+ },
+ "@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
+ }
+ },
+ "@radix-ui/react-use-callback-ref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-use-controllable-state": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ }
+ },
+ "@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ }
+ },
+ "@radix-ui/react-use-layout-effect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-visually-hidden": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
+ "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ }
+ }
+ }
+ },
+ "@radix-ui/react-tooltip": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.5.tgz",
+ "integrity": "sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-dismissable-layer": "1.0.3",
+ "@radix-ui/react-id": "1.0.0",
+ "@radix-ui/react-popper": "1.1.1",
+ "@radix-ui/react-portal": "1.0.2",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.2",
+ "@radix-ui/react-slot": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.0",
+ "@radix-ui/react-visually-hidden": "1.0.2"
+ }
+ },
+ "@radix-ui/react-use-callback-ref": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz",
+ "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-use-controllable-state": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz",
+ "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.0"
+ }
+ },
+ "@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz",
+ "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.0"
+ }
+ },
+ "@radix-ui/react-use-layout-effect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz",
+ "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-use-previous": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz",
+ "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-use-rect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz",
+ "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/rect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-use-size": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz",
+ "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-visually-hidden": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.2.tgz",
+ "integrity": "sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.2"
+ }
+ },
+ "@radix-ui/rect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz",
+ "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@react-pdf/fns": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-2.0.1.tgz",
+ "integrity": "sha512-/vgecczzFYBQFkgUupH+sxXhLWQtBwdwCgweyh25XOlR4NZuaMD/UVUDl4loFHhRQqDMQq37lkTcchh7zzW6ug==",
+ "requires": {
+ "@babel/runtime": "^7.20.13"
+ }
+ },
+ "@react-pdf/font": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.3.4.tgz",
+ "integrity": "sha512-ICvVH0GW3kgocxVfE0mFY3EcnAoxRolkOfhPCfLu8mRbwJaHRiKX5+8SRKbPADZNdHrF9ngt4LpUxThy+bdZXg==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/types": "^2.3.1",
+ "cross-fetch": "^3.1.5",
+ "fontkit": "^2.0.2",
+ "is-url": "^1.2.4"
+ }
+ },
+ "@react-pdf/image": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-2.2.1.tgz",
+ "integrity": "sha512-f0+cEP6pSBmk8eS/wP2tMsJcv2c7xjzca6cr1kwcapr1nzkPrh6fMdEeFl6kR2/HlJK/JoHo+xxlzRiQ8V2lrw==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/png-js": "^2.2.0",
+ "cross-fetch": "^3.1.5"
+ }
+ },
+ "@react-pdf/layout": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.6.0.tgz",
+ "integrity": "sha512-xrcVWxtXpobW0iqTd8OmMCVMmeGUM46PYq7B1MGR1fI1QG/EKe4HzFdhSdd0werZYj+t1TRC8+tVSX5POs5SYA==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/image": "^2.2.1",
+ "@react-pdf/pdfkit": "^3.0.2",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/stylesheet": "^4.1.5",
+ "@react-pdf/textkit": "^4.2.0",
+ "@react-pdf/types": "^2.3.1",
+ "@react-pdf/yoga": "^4.1.2",
+ "cross-fetch": "^3.1.5",
+ "emoji-regex": "^10.2.1",
+ "queue": "^6.0.1"
+ }
+ },
+ "@react-pdf/pdfkit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.0.2.tgz",
+ "integrity": "sha512-+m5rwNCwyEH6lmnZWpsQJvdqb6YaCCR0nMWrc/KKDwznuPMrGmGWyNxqCja+bQPORcHZyl6Cd/iFL0glyB3QGw==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/png-js": "^2.2.0",
+ "browserify-zlib": "^0.2.0",
+ "crypto-js": "^4.0.0",
+ "fontkit": "^2.0.2",
+ "vite-compatible-readable-stream": "^3.6.1"
+ }
+ },
+ "@react-pdf/png-js": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.2.0.tgz",
+ "integrity": "sha512-csZU5lfNW73tq7s7zB/1rWXGro+Z9cQhxtsXwxS418TSszHUiM6PwddouiKJxdGhbVLjRIcuuFVa0aR5cDOC6w==",
+ "requires": {
+ "browserify-zlib": "^0.2.0"
+ }
+ },
+ "@react-pdf/primitives": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-3.0.1.tgz",
+ "integrity": "sha512-0HGcknrLNwyhxe+SZCBL29JY4M85mXKdvTZE9uhjNbADGgTc8wVnkc5+e4S/lDvugbVISXyuIhZnYwtK9eDnyQ=="
+ },
+ "@react-pdf/render": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-3.2.4.tgz",
+ "integrity": "sha512-lnef097Dx2vHKpY9OHHNmV+nsG5vpd33h76tCzdlbijj+TyVm1j7ZQ5qadGq1uMOFAU6lp0hEo7VoDk7XnjmFw==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/textkit": "^4.2.0",
+ "@react-pdf/types": "^2.3.1",
+ "abs-svg-path": "^0.1.1",
+ "color-string": "^1.5.3",
+ "normalize-svg-path": "^1.1.0",
+ "parse-svg-path": "^0.1.2",
+ "svg-arc-to-cubic-bezier": "^3.2.0"
+ }
+ },
+ "@react-pdf/renderer": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-3.1.9.tgz",
+ "integrity": "sha512-kfEH7O+Jy7aihbUqrT9Ej1gx8/twRWvFMfHlACr29QsN+s+w0XzWpHCvbjkinVFABYcvsenluiirik6mf4qwRQ==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/font": "^2.3.4",
+ "@react-pdf/layout": "^3.6.0",
+ "@react-pdf/pdfkit": "^3.0.2",
+ "@react-pdf/primitives": "^3.0.0",
+ "@react-pdf/render": "^3.2.4",
+ "@react-pdf/types": "^2.3.1",
+ "events": "^3.3.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "queue": "^6.0.1",
+ "scheduler": "^0.17.0"
+ }
+ },
+ "@react-pdf/stylesheet": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.1.5.tgz",
+ "integrity": "sha512-8sP+4KD3cAfBEsZBQeJC7GUC0vkCLiAc6kZaGX0dXaBR3nZO2TaCD8+ZuezokZi+ARp/yvWJqR2vIX8ra7X1xA==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "@react-pdf/types": "^2.3.1",
+ "color-string": "^1.5.3",
+ "hsl-to-hex": "^1.0.0",
+ "media-engine": "^1.0.3",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "@react-pdf/textkit": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.2.0.tgz",
+ "integrity": "sha512-R90pEOW6NdhUx4p99iROvKmwB06IRYdXMhh0QcmUeoPOLe64ZdMfs3LZliNUWgI5fCmq71J+nv868i/EakFPDg==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@react-pdf/fns": "2.0.1",
+ "hyphen": "^1.6.4",
+ "unicode-properties": "^1.4.1"
+ }
+ },
+ "@react-pdf/types": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.3.1.tgz",
+ "integrity": "sha512-FiwAsNp2oQ2W39xAU1PCjY6YNjEuypQykEA6VMz4WZ4ERvyOBB4M5B8063lA8YYBcjYB8xQOa9og4UH1eqMbgg=="
+ },
+ "@react-pdf/yoga": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@react-pdf/yoga/-/yoga-4.1.2.tgz",
+ "integrity": "sha512-OlMZkFrJDj4GyKZ70thiObwwPVZ52B7mlPyfzwa+sgwsioqHXg9nMWOO+7SQFNUbbOGagMUu0bCuTv+iXYZuaQ==",
+ "requires": {
+ "@babel/runtime": "^7.20.13"
+ }
+ },
+ "@rushstack/eslint-patch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==",
+ "dev": true
+ },
+ "@sid-hq/sid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@sid-hq/sid/-/sid-3.1.0.tgz",
+ "integrity": "sha512-ABWtpUAyR8NF/1xbWmKBlgJl6TT8Me92yo9jVK+t7Jx8VjJRuc71QnC+mSMfk4MoX9CMUsM0efWYOITzekU7qA==",
+ "requires": {}
+ },
+ "@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
+ "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^2.0.0"
+ }
+ },
+ "@splinetool/react-spline": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@splinetool/react-spline/-/react-spline-2.2.6.tgz",
+ "integrity": "sha512-y9L2VEbnC6FNZZu8XMmWM9YTTTWal6kJVfP05Amf0QqDNzCSumKsJxZyGUODvuCmiAvy0PfIfEsiVKnSxvhsDw==",
+ "requires": {
+ "lodash.debounce": "^4.0.8",
+ "react-merge-refs": "^2.0.1"
+ }
+ },
+ "@splinetool/runtime": {
+ "version": "0.9.383",
+ "resolved": "https://registry.npmjs.org/@splinetool/runtime/-/runtime-0.9.383.tgz",
+ "integrity": "sha512-2NqNxxQPvWMTn9+uOXLAAFB0mIuzE0NBMaixQ16yAKxL+8YySUwOYLyM4iX0D3afUYfZovQSZiY2lSiQzL82SQ==",
+ "peer": true,
+ "requires": {
+ "on-change": "^4.0.0",
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "@svgr/babel-plugin-add-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-remove-jsx-attribute": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
+ "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-remove-jsx-empty-expression": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
+ "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-replace-jsx-attribute-value": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
+ "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-svg-dynamic-title": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
+ "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-svg-em-dimensions": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
+ "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-transform-react-native-svg": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.0.0.tgz",
+ "integrity": "sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-plugin-transform-svg-component": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
+ "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@svgr/babel-preset": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.0.0.tgz",
+ "integrity": "sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==",
+ "dev": true,
+ "requires": {
+ "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
+ "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "8.0.0",
+ "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ }
+ },
+ "@svgr/core": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.0.0.tgz",
+ "integrity": "sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "camelcase": "^6.2.0",
+ "cosmiconfig": "^8.1.3",
+ "snake-case": "^3.0.4"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ }
+ }
+ },
+ "@svgr/hast-util-to-babel-ast": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
+ "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.21.3",
+ "entities": "^4.4.0"
+ }
+ },
+ "@svgr/plugin-jsx": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.0.1.tgz",
+ "integrity": "sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.21.3",
+ "@svgr/babel-preset": "8.0.0",
+ "@svgr/hast-util-to-babel-ast": "8.0.0",
+ "svg-parser": "^2.0.4"
+ }
+ },
+ "@svgr/plugin-svgo": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.0.1.tgz",
+ "integrity": "sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^8.1.3",
+ "deepmerge": "^4.3.1",
+ "svgo": "^3.0.2"
+ }
+ },
+ "@svgr/webpack": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.0.1.tgz",
+ "integrity": "sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.21.3",
+ "@babel/plugin-transform-react-constant-elements": "^7.21.3",
+ "@babel/preset-env": "^7.20.2",
+ "@babel/preset-react": "^7.18.6",
+ "@babel/preset-typescript": "^7.21.0",
+ "@svgr/core": "8.0.0",
+ "@svgr/plugin-jsx": "8.0.1",
+ "@svgr/plugin-svgo": "8.0.1"
+ }
+ },
+ "@swc/helpers": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@tailwindcss/forms": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+ "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+ "requires": {
+ "mini-svg-data-uri": "^1.2.3"
+ }
+ },
+ "@tailwindcss/typography": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
+ "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
+ "dev": true,
+ "requires": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "@tanstack/query-core": {
+ "version": "4.29.14",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.14.tgz",
+ "integrity": "sha512-ElEAahtLWA7Y7c2Haw10KdEf2tx+XZl/Z8dmyWxZehxWK3TPL5qtXtb7kUEhvt/8u2cSP62fLxgh2qqzMMGnDQ=="
+ },
+ "@tanstack/react-query": {
+ "version": "4.29.14",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.14.tgz",
+ "integrity": "sha512-wh4bd/QIy85YgTDBtj/7/9ZkpRX41QdZuUL8xKoSzuMCukXvAE1/oJ4p0F15lqQq9W3g2pgcbr2Aa+CNvqABhg==",
+ "requires": {
+ "@tanstack/query-core": "4.29.14",
+ "use-sync-external-store": "^1.2.0"
+ }
+ },
+ "@testing-library/dom": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.2.0.tgz",
+ "integrity": "sha512-xTEnpUKiV/bMyEsE5bT4oYA0x0Z/colMtxzUY8bKyPXBNLn/e0V4ZjBZkEhms0xE4pv9QsPfSRu9AWS4y5wGvA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "^5.0.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "@testing-library/jest-dom": {
+ "version": "5.16.5",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
+ "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
+ "dev": true,
+ "requires": {
+ "@adobe/css-tools": "^4.0.1",
+ "@babel/runtime": "^7.9.2",
+ "@types/testing-library__jest-dom": "^5.9.1",
+ "aria-query": "^5.0.0",
+ "chalk": "^3.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.5.6",
+ "lodash": "^4.17.15",
+ "redent": "^3.0.0"
+ }
+ },
+ "@testing-library/react": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz",
+ "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.12.5",
+ "@testing-library/dom": "^9.0.0",
+ "@types/react-dom": "^18.0.0"
+ }
+ },
+ "@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "dev": true
+ },
+ "@trpc/client": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.21.1.tgz",
+ "integrity": "sha512-oZgPbghs9y2frTCA9mZPSAlVknV9stCTKYO5nsvRr0aX+oaA0URoXJTKZTSpLZxLfuwWgxBj4iTiCWWWmaVelw==",
+ "requires": {}
+ },
+ "@trpc/next": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.21.1.tgz",
+ "integrity": "sha512-xj5hpodCSOj5ROqpZ95ehHFzJLbRhfQ7rCYWRzrQvuk8phJV/O6xsMSVT51ogL4tFDmVPSGCP5x5Z25NzULpzQ==",
+ "requires": {
+ "react-ssr-prepass": "^1.5.0"
+ }
+ },
+ "@trpc/react-query": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.21.1.tgz",
+ "integrity": "sha512-sCLJW9v79sJhVj3L6Ck74mImvKBXrq2KOKtdguxaZZ5rgeqMyQuc8bGHRpf9yfeV08uMNl4Svz1QTee9PjdSqg==",
+ "requires": {}
+ },
+ "@trpc/server": {
+ "version": "10.21.1",
+ "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.21.1.tgz",
+ "integrity": "sha512-4E4upTD2/Aq0Dm9HW4nbKSoIlqbV/ajRqNl1MCFBd9FjTv47qq2ncmAWMbb0AIVh2UV87PJlTjpPNNecRm6g9Q=="
+ },
+ "@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true
+ },
+ "@types/aria-query": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz",
+ "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==",
+ "dev": true
+ },
+ "@types/babel__core": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
+ "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
+ "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
+ "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
+ "@types/debug": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
+ "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
+ "requires": {
+ "@types/ms": "*"
+ }
+ },
+ "@types/graceful-fs": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
+ "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/hast": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
+ "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "requires": {
+ "@types/unist": "*"
+ }
+ },
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "requires": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/jest": {
+ "version": "29.5.1",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz",
+ "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==",
+ "dev": true,
+ "requires": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "@types/jsdom": {
+ "version": "20.0.1",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz",
+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.14.194",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz",
+ "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g=="
+ },
+ "@types/mdast": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
+ "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
+ "requires": {
+ "@types/unist": "*"
+ }
+ },
+ "@types/ms": {
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
+ },
+ "@types/node": {
+ "version": "18.15.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
+ "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
+ },
+ "@types/node-fetch": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.8.tgz",
+ "integrity": "sha512-nnH5lV9QCMPsbEVdTb5Y+F3GQxLSw1xQgIydrb2gSfEavRPs50FnMr+KUaa+LoPSqibm2N+ZZxH7lavZlAT4GA==",
+ "requires": {
+ "@types/node": "*",
+ "form-data": "^4.0.0"
+ }
+ },
+ "@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+ "dev": true
+ },
+ "@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ },
+ "@types/react": {
+ "version": "18.0.37",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.37.tgz",
+ "integrity": "sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==",
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "18.2.7",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz",
+ "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==",
+ "devOptional": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.3",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ },
+ "@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "dev": true
+ },
+ "@types/testing-library__jest-dom": {
+ "version": "5.14.5",
+ "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz",
+ "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==",
+ "dev": true,
+ "requires": {
+ "@types/jest": "*"
+ }
+ },
+ "@types/tough-cookie": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
+ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
+ "dev": true
+ },
+ "@types/unist": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
+ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
+ },
+ "@types/uuid": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.5.tgz",
+ "integrity": "sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==",
+ "dev": true
+ },
+ "@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz",
+ "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.4.0",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/type-utils": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "natural-compare-lite": "^1.4.0",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.1.tgz",
+ "integrity": "sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.59.1",
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/typescript-estree": "5.59.1",
+ "debug": "^4.3.4"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz",
+ "integrity": "sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/visitor-keys": "5.59.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz",
+ "integrity": "sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz",
+ "integrity": "sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.1",
+ "@typescript-eslint/visitor-keys": "5.59.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.59.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz",
+ "integrity": "sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.1",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz",
+ "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz",
+ "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "@typescript-eslint/utils": "5.59.8",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz",
+ "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz",
+ "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/visitor-keys": "5.59.8",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz",
+ "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.59.8",
+ "@typescript-eslint/types": "5.59.8",
+ "@typescript-eslint/typescript-estree": "5.59.8",
+ "eslint-scope": "^5.1.1",
+ "semver": "^7.3.7"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.59.8",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz",
+ "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.59.8",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@uiball/loaders": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@uiball/loaders/-/loaders-1.3.0.tgz",
+ "integrity": "sha512-w372e7PMt/s6LZ321HoghgDDU8fomamAzJfrVAdBUhsWERJEpxJMqG37NFztUq/T4J7nzzjkvZI4UX7Z2F/O6A==",
+ "requires": {}
+ },
+ "@vercel/analytics": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.0.1.tgz",
+ "integrity": "sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow=="
+ },
+ "@vercel/edge": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@vercel/edge/-/edge-0.3.4.tgz",
+ "integrity": "sha512-dFU+yAUDQRwpuRGxRDlEO1LMq0y1LGsBgkyryQWe4w15/Fy2/lCnpvdIoAhHl3QvIGAxCLHzwRHsqfLRdpxgJQ=="
+ },
+ "abab": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+ "dev": true
+ },
+ "abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "requires": {
+ "event-target-shim": "^5.0.0"
+ }
+ },
+ "abs-svg-path": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz",
+ "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA=="
+ },
+ "acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz",
+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.1.0",
+ "acorn-walk": "^8.0.2"
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
+ "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+ "requires": {
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "dev": true,
+ "requires": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "array-buffer-byte-length": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+ "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "is-array-buffer": "^3.0.1"
+ }
+ },
+ "array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "autoprefixer": {
+ "version": "10.4.14",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
+ "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.5",
+ "caniuse-lite": "^1.0.30001464",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "dev": true
+ },
+ "axe-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
+ "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+ "requires": {
+ "follow-redirects": "^1.14.8"
+ }
+ },
+ "axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "dev": true,
+ "requires": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "babel-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
+ "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "dev": true,
+ "requires": {
+ "@jest/transform": "^29.5.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
+ "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz",
+ "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.4.1",
+ "@nicolo-ribaudo/semver-v6": "^6.3.3"
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz",
+ "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.4.1",
+ "core-js-compat": "^3.31.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz",
+ "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.4.1"
+ }
+ },
+ "babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+ "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ }
+ },
+ "babel-preset-jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
+ "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ }
+ },
+ "bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "brotli": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+ "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+ "requires": {
+ "base64-js": "^1.1.2"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
+ "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001503",
+ "electron-to-chromium": "^1.4.431",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ }
+ },
+ "bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "requires": {
+ "streamsearch": "^1.1.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001514",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz",
+ "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ=="
+ },
+ "ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true
+ },
+ "character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
+ },
+ "cheerio": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
+ "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+ "requires": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ }
+ },
+ "cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "ci-info": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+ "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+ "dev": true
+ },
+ "cjs-module-lexer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
+ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "dev": true
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^5.0.0",
+ "string-width": "^5.0.0"
+ }
+ },
+ "client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
+ "clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true
+ },
+ "cobe": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cobe/-/cobe-0.6.3.tgz",
+ "integrity": "sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg==",
+ "requires": {
+ "phenomenon": "^1.6.0"
+ }
+ },
+ "collect-v8-coverage": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
+ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="
+ },
+ "commander": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ },
+ "cookies-next": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookies-next/-/cookies-next-2.1.2.tgz",
+ "integrity": "sha512-czxcfqVaQlo0Q/3xMgp/2jpspsuLJrIm6D37wlmibP3DAcYT315c8UxQmDMohhAT/GRWpaHzpDEFANBjzTFQGg==",
+ "requires": {
+ "@types/cookie": "^0.4.1",
+ "@types/node": "^16.10.2",
+ "cookie": "^0.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.25.tgz",
+ "integrity": "sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA=="
+ },
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
+ }
+ }
+ },
+ "copy-anything": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.3.tgz",
+ "integrity": "sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==",
+ "requires": {
+ "is-what": "^4.1.8"
+ }
+ },
+ "core-js": {
+ "version": "3.30.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz",
+ "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ=="
+ },
+ "core-js-compat": {
+ "version": "3.31.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz",
+ "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.9"
+ }
+ },
+ "cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ }
+ },
+ "cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.1"
+ }
+ },
+ "cross-fetch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+ "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+ "requires": {
+ "node-fetch": "2.6.7"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
+ },
+ "crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
+ },
+ "css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ }
+ },
+ "css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
+ },
+ "css.escape": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
+ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "requires": {
+ "css-tree": "~2.2.0"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ }
+ }
+ },
+ "cssom": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "dev": true,
+ "requires": {
+ "cssom": "~0.3.6"
+ },
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ }
+ }
+ },
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "data-urls": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.6",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^11.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "dev": true
+ },
+ "decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "requires": {
+ "character-entities": "^2.0.0"
+ }
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz",
+ "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-get-iterator": "^1.1.2",
+ "get-intrinsic": "^1.1.3",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.1",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true
+ },
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+ "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="
+ },
+ "detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true
+ },
+ "dfa": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
+ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="
+ },
+ "didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "diff": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
+ "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw=="
+ },
+ "diff-sequences": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+ "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "dev": true
+ },
+ "digest-fetch": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz",
+ "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==",
+ "requires": {
+ "base-64": "^0.1.0",
+ "md5": "^2.3.0"
+ }
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+ },
+ "domexception": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^7.0.0"
+ }
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.4.454",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz",
+ "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==",
+ "dev": true
+ },
+ "emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
+ "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA=="
+ },
+ "enhanced-resolve": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz",
+ "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ }
+ }
+ },
+ "es-abstract": {
+ "version": "1.21.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+ "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+ "dev": true,
+ "requires": {
+ "array-buffer-byte-length": "^1.0.0",
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.2.0",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.5",
+ "is-array-buffer": "^3.0.2",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trim": "^1.2.7",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "8.43.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz",
+ "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.4.0",
+ "@eslint/eslintrc": "^2.0.3",
+ "@eslint/js": "8.43.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.0",
+ "eslint-visitor-keys": "^3.4.1",
+ "espree": "^9.5.2",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+ "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ }
+ }
+ },
+ "eslint-config-next": {
+ "version": "13.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.1.tgz",
+ "integrity": "sha512-ajuxjCkW1hvirr0EQZb3/B/bFH52Z7CT89uCtTcICFL9l30i5c8hN4p0LXvTjdOXNPV5fEDcxBgGHgXdzTj1/A==",
+ "dev": true,
+ "requires": {
+ "@next/eslint-plugin-next": "13.4.1",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.42.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-import-resolver-typescript": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz",
+ "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "get-tsconfig": "^4.5.0",
+ "globby": "^13.1.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.5"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
+ "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
+ "dev": true,
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+ "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.32.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
+ "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.8"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
+ "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
+ "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
+ },
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true
+ },
+ "expect": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "dev": true,
+ "requires": {
+ "@jest/expect-utils": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fault": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
+ "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
+ "requires": {
+ "format": "^0.2.0"
+ }
+ },
+ "fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "requires": {
+ "bser": "2.1.1"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+ },
+ "fontkit": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz",
+ "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==",
+ "requires": {
+ "@swc/helpers": "^0.4.2",
+ "brotli": "^1.3.2",
+ "clone": "^2.1.2",
+ "dfa": "^1.2.0",
+ "fast-deep-equal": "^3.1.3",
+ "restructure": "^3.0.0",
+ "tiny-inflate": "^1.0.3",
+ "unicode-properties": "^1.4.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "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"
+ }
+ },
+ "form-data-encoder": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
+ },
+ "format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="
+ },
+ "formdata-node": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+ "requires": {
+ "node-domexception": "1.0.0",
+ "web-streams-polyfill": "4.0.0-beta.3"
+ },
+ "dependencies": {
+ "web-streams-polyfill": {
+ "version": "4.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="
+ }
+ }
+ },
+ "fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true
+ },
+ "framer-motion": {
+ "version": "10.12.8",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.12.8.tgz",
+ "integrity": "sha512-ylobYq3tGFjjAmRdBs5pL/R1+4AmOm69g/JbF5DcNETfRe8L9CjaX4acG83MjYdIsbsTGJmtR5qKx4glNmXO4A==",
+ "requires": {
+ "@emotion/is-prop-valid": "^0.8.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-tsconfig": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz",
+ "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ },
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "gray-matter": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+ "requires": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "hast-util-is-element": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz",
+ "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "hast-util-to-text": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz",
+ "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/unist": "^2.0.0",
+ "hast-util-is-element": "^2.0.0",
+ "unist-util-find-after": "^4.0.0"
+ }
+ },
+ "hast-util-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
+ "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng=="
+ },
+ "highlight.js": {
+ "version": "11.7.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz",
+ "integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ=="
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ }
+ }
+ },
+ "hsl-to-hex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz",
+ "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==",
+ "requires": {
+ "hsl-to-rgb-for-reals": "^1.1.0"
+ }
+ },
+ "hsl-to-rgb-for-reals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz",
+ "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg=="
+ },
+ "html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^2.0.0"
+ }
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "requires": {
+ "void-elements": "3.1.0"
+ }
+ },
+ "html-to-image": {
+ "version": "1.11.11",
+ "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz",
+ "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA=="
+ },
+ "htmlparser2": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
+ "husky": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
+ "dev": true
+ },
+ "hyphen": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.6.5.tgz",
+ "integrity": "sha512-MZbhHutRaHCUxjvJBYqL51Ntjbq16LemuJr2u+LpKd3UwyNHZsZAKh5uD+KmdAHtWpteupOqQTTezVGR/al43w=="
+ },
+ "i18next": {
+ "version": "22.4.15",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.4.15.tgz",
+ "integrity": "sha512-yYudtbFrrmWKLEhl6jvKUYyYunj4bTBCe2qIUYAxbXoPusY7YmdwPvOE6fx6UIfWvmlbCWDItr7wIs8KEBZ5Zg==",
+ "requires": {
+ "@babel/runtime": "^7.20.6"
+ }
+ },
+ "i18next-fs-backend": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.1.tgz",
+ "integrity": "sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA=="
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-local": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
+ },
+ "internal-slot": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+ "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-array-buffer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+ "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+ "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+ "dev": true
+ },
+ "is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
+ },
+ "is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-set": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-weakset": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "is-what": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.8.tgz",
+ "integrity": "sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA=="
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "jest": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
+ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.5.0"
+ }
+ },
+ "jest-changed-files": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
+ "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "dev": true,
+ "requires": {
+ "execa": "^5.0.0",
+ "p-limit": "^3.1.0"
+ }
+ },
+ "jest-circus": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
+ "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^0.7.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.5.0",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.5.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-cli": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
+ "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "prompts": "^2.0.1",
+ "yargs": "^17.3.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "jest-config": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-diff": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.4.3",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-docblock": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
+ "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^3.0.0"
+ }
+ },
+ "jest-each": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
+ "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
+ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/jsdom": "^20.0.0",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jsdom": "^20.0.0"
+ }
+ },
+ "jest-environment-node": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
+ "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
+ }
+ },
+ "jest-get-type": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+ "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
+ "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^2.3.2",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ }
+ },
+ "jest-leak-detector": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
+ "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "dev": true,
+ "requires": {
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ }
+ },
+ "jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "requires": {}
+ },
+ "jest-regex-util": {
+ "version": "29.4.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
+ "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
+ "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^29.4.3",
+ "jest-snapshot": "^29.5.0"
+ }
+ },
+ "jest-runner": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
+ "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^29.5.0",
+ "@jest/environment": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.4.3",
+ "jest-environment-node": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-leak-detector": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-resolve": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "jest-worker": "^29.5.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "jest-runtime": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
+ "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/globals": "^29.5.0",
+ "@jest/source-map": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-regex-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "jest-snapshot": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/traverse": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/babel__traverse": "^7.0.6",
+ "@types/prettier": "^2.1.5",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.5.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.5.0",
+ "jest-get-type": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.5.0",
+ "semver": "^7.3.5"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.5.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.4.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.5.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.4.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ }
+ }
+ },
+ "jest-watcher": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
+ "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.5.0",
+ "string-length": "^4.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ }
+ }
+ },
+ "jest-worker": {
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "jest-util": "^29.5.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "jiti": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
+ "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
+ },
+ "jose": {
+ "version": "4.14.1",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.1.tgz",
+ "integrity": "sha512-SgjXLpP7jhQkUNKL6RpowoR/IF4QKE+WjLDMpNnh2vmhiFs67NftrNpvFtgbwpvRdtueFliahYYWz9E+XZZQlg=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsdom": {
+ "version": "20.0.3",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz",
+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.6",
+ "acorn": "^8.8.1",
+ "acorn-globals": "^7.0.0",
+ "cssom": "^0.5.0",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^3.0.2",
+ "decimal.js": "^10.4.2",
+ "domexception": "^4.0.0",
+ "escodegen": "^2.0.0",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.1",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.2",
+ "parse5": "^7.1.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.1.2",
+ "w3c-xmlserializer": "^4.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^2.0.0",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^11.0.0",
+ "ws": "^8.11.0",
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true
+ },
+ "jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true
+ },
+ "language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "dev": true
+ },
+ "language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dev": true,
+ "requires": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "lint-staged": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.1.tgz",
+ "integrity": "sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==",
+ "dev": true,
+ "requires": {
+ "chalk": "5.2.0",
+ "cli-truncate": "^3.1.0",
+ "commander": "^10.0.0",
+ "debug": "^4.3.4",
+ "execa": "^7.0.0",
+ "lilconfig": "2.1.0",
+ "listr2": "^5.0.7",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-inspect": "^1.12.3",
+ "pidtree": "^0.6.0",
+ "string-argv": "^0.3.1",
+ "yaml": "^2.2.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "dev": true
+ },
+ "execa": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
+ "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^4.3.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "human-signals": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+ "dev": true,
+ "requires": {
+ "path-key": "^4.0.0"
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true
+ }
+ }
+ },
+ "listr2": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz",
+ "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.19",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.8.0",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "lowlight": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-2.8.1.tgz",
+ "integrity": "sha512-HCaGL61RKc1MYzEYn3rFoGkK0yslzCVDFJEanR19rc2L0mb8i58XM55jSRbzp9jcQrFzschPlwooC0vuNitk8Q==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "fault": "^2.0.0",
+ "highlight.js": "~11.7.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "markdown-table": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
+ "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw=="
+ },
+ "md5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+ "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "~1.1.6"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ }
+ }
+ },
+ "mdast-util-definitions": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
+ "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "unist-util-visit": "^4.0.0"
+ }
+ },
+ "mdast-util-find-and-replace": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz",
+ "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
+ }
+ }
+ },
+ "mdast-util-from-markdown": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
+ "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "mdast-util-to-string": "^3.1.0",
+ "micromark": "^3.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "mdast-util-gfm": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz",
+ "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==",
+ "requires": {
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-gfm-autolink-literal": "^1.0.0",
+ "mdast-util-gfm-footnote": "^1.0.0",
+ "mdast-util-gfm-strikethrough": "^1.0.0",
+ "mdast-util-gfm-table": "^1.0.0",
+ "mdast-util-gfm-task-list-item": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ }
+ },
+ "mdast-util-gfm-autolink-literal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz",
+ "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "ccount": "^2.0.0",
+ "mdast-util-find-and-replace": "^2.0.0",
+ "micromark-util-character": "^1.0.0"
+ }
+ },
+ "mdast-util-gfm-footnote": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz",
+ "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0",
+ "micromark-util-normalize-identifier": "^1.0.0"
+ }
+ },
+ "mdast-util-gfm-strikethrough": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz",
+ "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ }
+ },
+ "mdast-util-gfm-table": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz",
+ "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ }
+ },
+ "mdast-util-gfm-task-list-item": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz",
+ "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ }
+ },
+ "mdast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "mdast-util-to-hast": {
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
+ "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-definitions": "^5.0.0",
+ "micromark-util-sanitize-uri": "^1.1.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-generated": "^2.0.0",
+ "unist-util-position": "^4.0.0",
+ "unist-util-visit": "^4.0.0"
+ }
+ },
+ "mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ }
+ },
+ "mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "requires": {
+ "@types/mdast": "^3.0.0"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "media-engine": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz",
+ "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg=="
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromark": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
+ "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
+ "requires": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-core-commonmark": "^1.0.1",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-core-commonmark": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
+ "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
+ "requires": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-factory-destination": "^1.0.0",
+ "micromark-factory-label": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-factory-title": "^1.0.0",
+ "micromark-factory-whitespace": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-html-tag-name": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-extension-gfm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz",
+ "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==",
+ "requires": {
+ "micromark-extension-gfm-autolink-literal": "^1.0.0",
+ "micromark-extension-gfm-footnote": "^1.0.0",
+ "micromark-extension-gfm-strikethrough": "^1.0.0",
+ "micromark-extension-gfm-table": "^1.0.0",
+ "micromark-extension-gfm-tagfilter": "^1.0.0",
+ "micromark-extension-gfm-task-list-item": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-extension-gfm-autolink-literal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz",
+ "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-extension-gfm-footnote": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.0.tgz",
+ "integrity": "sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==",
+ "requires": {
+ "micromark-core-commonmark": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-extension-gfm-strikethrough": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.5.tgz",
+ "integrity": "sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==",
+ "requires": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-extension-gfm-table": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz",
+ "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==",
+ "requires": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-extension-gfm-tagfilter": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz",
+ "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==",
+ "requires": {
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-extension-gfm-task-list-item": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.4.tgz",
+ "integrity": "sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==",
+ "requires": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-factory-destination": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
+ "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-factory-label": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
+ "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-factory-space": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
+ "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-factory-title": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
+ "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
+ "requires": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-factory-whitespace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
+ "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
+ "requires": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-util-character": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
+ "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
+ "requires": {
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-util-chunked": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
+ "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
+ "requires": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "micromark-util-classify-character": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
+ "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-util-combine-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
+ "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
+ "requires": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-util-decode-numeric-character-reference": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
+ "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
+ "requires": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "micromark-util-decode-string": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
+ "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
+ "requires": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "micromark-util-encode": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
+ "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA=="
+ },
+ "micromark-util-html-tag-name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
+ "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA=="
+ },
+ "micromark-util-normalize-identifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
+ "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
+ "requires": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "micromark-util-resolve-all": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
+ "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
+ "requires": {
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "micromark-util-sanitize-uri": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
+ "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
+ "requires": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "micromark-util-subtokenize": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
+ "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
+ "requires": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "micromark-util-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
+ "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ=="
+ },
+ "micromark-util-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
+ "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w=="
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true
+ },
+ "mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ },
+ "mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "natural-compare-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+ "dev": true
+ },
+ "next": {
+ "version": "13.5.6",
+ "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz",
+ "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==",
+ "requires": {
+ "@next/env": "13.5.6",
+ "@next/swc-darwin-arm64": "13.5.6",
+ "@next/swc-darwin-x64": "13.5.6",
+ "@next/swc-linux-arm64-gnu": "13.5.6",
+ "@next/swc-linux-arm64-musl": "13.5.6",
+ "@next/swc-linux-x64-gnu": "13.5.6",
+ "@next/swc-linux-x64-musl": "13.5.6",
+ "@next/swc-win32-arm64-msvc": "13.5.6",
+ "@next/swc-win32-ia32-msvc": "13.5.6",
+ "@next/swc-win32-x64-msvc": "13.5.6",
+ "@swc/helpers": "0.5.2",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.1",
+ "watchpack": "2.4.0"
+ },
+ "dependencies": {
+ "@swc/helpers": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
+ "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ }
+ }
+ },
+ "next-auth": {
+ "version": "4.20.1",
+ "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.20.1.tgz",
+ "integrity": "sha512-ZcTUN4qzzZ/zJYgOW0hMXccpheWtAol8QOMdMts+LYRcsPGsqf2hEityyaKyECQVw1cWInb9dF3wYwI5GZdEmQ==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@panva/hkdf": "^1.0.2",
+ "cookie": "^0.5.0",
+ "jose": "^4.11.4",
+ "oauth": "^0.9.15",
+ "openid-client": "^5.4.0",
+ "preact": "^10.6.3",
+ "preact-render-to-string": "^5.1.19",
+ "uuid": "^8.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "next-i18next": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-13.2.2.tgz",
+ "integrity": "sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "core-js": "^3",
+ "hoist-non-react-statics": "^3.3.2",
+ "i18next-fs-backend": "^2.1.1"
+ }
+ },
+ "nextjs-google-analytics": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/nextjs-google-analytics/-/nextjs-google-analytics-2.3.3.tgz",
+ "integrity": "sha512-Y6sI6A7wt5dji8hYBnVkOh9LTyImSLFZXx3FpyQgVW7W4b4qEFHjH2u3fhDJsrRZeLlUGM8/RuHD/mhHc2Axfg==",
+ "requires": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ },
+ "dependencies": {
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ }
+ }
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true
+ },
+ "normalize-svg-path": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz",
+ "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==",
+ "requires": {
+ "svg-arc-to-cubic-bezier": "^3.0.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "nwsapi": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz",
+ "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==",
+ "dev": true
+ },
+ "oauth": {
+ "version": "0.9.15",
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
+ "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ },
+ "object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.hasown": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "oidc-token-hash": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.2.tgz",
+ "integrity": "sha512-U91Ba78GtVBxcExLI7U+hC2AwJQqXQEW/D3fjmJC4hhSVIgdl954KO4Gu95WqAlgDKJdLATxkmuxraWLT0fVRQ=="
+ },
+ "on-change": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
+ "integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
+ "peer": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dev": true,
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "openai": {
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.14.2.tgz",
+ "integrity": "sha512-JGlm7mMC7J+cyQZnQMOH7daD9cBqqWqLtlBsejElEkgoehPrYfdyxSxIGICz5xk4YimbwI5FlLATSVojLtCKXQ==",
+ "requires": {
+ "@types/node": "^18.11.18",
+ "@types/node-fetch": "^2.6.4",
+ "abort-controller": "^3.0.0",
+ "agentkeepalive": "^4.2.1",
+ "digest-fetch": "^1.3.0",
+ "form-data-encoder": "1.7.2",
+ "formdata-node": "^4.3.2",
+ "node-fetch": "^2.6.7",
+ "web-streams-polyfill": "^3.2.1"
+ }
+ },
+ "openid-client": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.0.tgz",
+ "integrity": "sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==",
+ "requires": {
+ "jose": "^4.10.0",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parse-svg-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
+ "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ=="
+ },
+ "parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "requires": {
+ "entities": "^4.4.0"
+ }
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
+ "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
+ "requires": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "phenomenon": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/phenomenon/-/phenomenon-1.6.0.tgz",
+ "integrity": "sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+ },
+ "pirates": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ=="
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ }
+ }
+ },
+ "postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "requires": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "requires": {
+ "camelcase-css": "^2.0.1"
+ }
+ },
+ "postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "requires": {
+ "postcss-selector-parser": "^6.0.11"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
+ "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "preact": {
+ "version": "10.13.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.13.2.tgz",
+ "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw=="
+ },
+ "preact-render-to-string": {
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz",
+ "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==",
+ "requires": {
+ "pretty-format": "^3.8.0"
+ },
+ "dependencies": {
+ "pretty-format": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true
+ },
+ "prettier-plugin-tailwindcss": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.8.tgz",
+ "integrity": "sha512-KgPcEnJeIijlMjsA6WwYgRs5rh3/q76oInqtMXBA/EMcamrcYJpyhtRhyX1ayT9hnHlHTuO8sIifHF10WuSDKg==",
+ "dev": true,
+ "requires": {}
+ },
+ "pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ }
+ }
+ },
+ "prisma": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.13.0.tgz",
+ "integrity": "sha512-L9mqjnSmvWIRCYJ9mQkwCtj4+JDYYTdhoyo8hlsHNDXaZLh/b4hR0IoKIBbTKxZuyHQzLopb/+0Rvb69uGV7uA==",
+ "devOptional": true,
+ "requires": {
+ "@prisma/engines": "4.13.0"
+ }
+ },
+ "prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "requires": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ }
+ },
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ }
+ }
+ },
+ "property-information": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz",
+ "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg=="
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true
+ },
+ "pure-rand": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz",
+ "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
+ "queue": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
+ "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
+ "requires": {
+ "inherits": "~2.0.3"
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "dependencies": {
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ }
+ }
+ },
+ "react-i18next": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-12.3.1.tgz",
+ "integrity": "sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA==",
+ "requires": {
+ "@babel/runtime": "^7.20.6",
+ "html-parse-stringify": "^3.0.1"
+ }
+ },
+ "react-icons": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz",
+ "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==",
+ "requires": {}
+ },
+ "react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true
+ },
+ "react-markdown": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz",
+ "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/prop-types": "^15.0.0",
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "prop-types": "^15.0.0",
+ "property-information": "^6.0.0",
+ "react-is": "^18.0.0",
+ "remark-parse": "^10.0.0",
+ "remark-rehype": "^10.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0",
+ "vfile": "^5.0.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ }
+ }
+ },
+ "react-merge-refs": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-2.0.2.tgz",
+ "integrity": "sha512-V5BGTwGa2r+/t0A/BZMS6L7VPXY0CU8xtAhkT3XUoI1WJJhhtvulvoiZkJ5Jt9YAW23m4xFWmhQ+C5HwjtTFhQ=="
+ },
+ "react-ssr-prepass": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/react-ssr-prepass/-/react-ssr-prepass-1.5.0.tgz",
+ "integrity": "sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==",
+ "requires": {}
+ },
+ "react-type-animation": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/react-type-animation/-/react-type-animation-3.1.0.tgz",
+ "integrity": "sha512-Ju74SpUFpSINqlGU8UeFAF+AnAn0nZcc8MB0Ho6QvRkh8uDKkOzAiMD3l9xEmkbKXnSYsljfVgIDM/zwqEImpQ==",
+ "requires": {}
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "requires": {
+ "pify": "^2.3.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "regenerator-transform": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
+ "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "functions-have-names": "^1.2.3"
+ }
+ },
+ "regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "dev": true,
+ "requires": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ }
+ },
+ "regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true
+ }
+ }
+ },
+ "rehype-highlight": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-6.0.0.tgz",
+ "integrity": "sha512-q7UtlFicLhetp7K48ZgZiJgchYscMma7XjzX7t23bqEJF8m6/s+viXQEe4oHjrATTIZpX7RG8CKD7BlNZoh9gw==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "hast-util-to-text": "^3.0.0",
+ "lowlight": "^2.0.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0"
+ }
+ },
+ "remark-gfm": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
+ "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-gfm": "^2.0.0",
+ "micromark-extension-gfm": "^2.0.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "remark-parse": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
+ "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "remark-rehype": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
+ "requires": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-hast": "^12.1.0",
+ "unified": "^10.0.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "requires": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "restructure": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.0.tgz",
+ "integrity": "sha512-Xj8/MEIhhfj9X2rmD9iJ4Gga9EFqVlpMj3vfLnV2r/Mh5jRMryNV+6lWh9GdJtDBcBSPIqzRdfBQ3wDtNFv/uw=="
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ },
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rxjs": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
+ "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "requires": {
+ "mri": "^1.1.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "requires": {
+ "xmlchars": "^2.2.0"
+ }
+ },
+ "scheduler": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
+ "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "section-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
+ "peer": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.0.0",
+ "is-fullwidth-code-point": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true
+ }
+ }
+ },
+ "snake-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
+ "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true
+ }
+ }
+ },
+ "stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dev": true,
+ "requires": {
+ "internal-slot": "^1.0.4"
+ }
+ },
+ "streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "dev": true
+ },
+ "string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "requires": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ }
+ }
+ },
+ "string.prototype.matchall": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+ "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
+ "strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "style-to-object": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz",
+ "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==",
+ "requires": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
+ "styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "requires": {
+ "client-only": "0.0.1"
+ }
+ },
+ "sucrase": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
+ "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "7.1.6",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "superjson": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.9.1.tgz",
+ "integrity": "sha512-oT3HA2nPKlU1+5taFgz/HDy+GEaY+CWEbLzaRJVD4gZ7zMVVC4GDNFdgvAZt6/VuIk6D2R7RtPAiCHwmdzlMmg==",
+ "requires": {
+ "copy-anything": "^3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "svg-arc-to-cubic-bezier": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz",
+ "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g=="
+ },
+ "svg-parser": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
+ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
+ "dev": true
+ },
+ "svgo": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+ "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.2.1",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ }
+ }
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "synckit": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz",
+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==",
+ "dev": true,
+ "requires": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.5.0"
+ }
+ },
+ "tailwindcss": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
+ "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
+ "requires": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.18.2",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "dependencies": {
+ "arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ }
+ }
+ }
+ },
+ "tailwindcss-radix": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-radix/-/tailwindcss-radix-2.8.0.tgz",
+ "integrity": "sha512-1k1UfoIYgVyBl13FKwwoKavjnJ5VEaUClCTAsgz3VLquN4ay/lyaMPzkbqD71sACDs2fRGImytAUlMb4TzOt1A=="
+ },
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dev": true,
+ "requires": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
+ },
+ "tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ }
+ },
+ "tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="
+ },
+ "trough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
+ },
+ "ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "tsconfig-paths": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+ "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ }
+ }
+ },
+ "tslib": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
+ "typescript": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz",
+ "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
+ "dev": true
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "dev": true
+ },
+ "unicode-properties": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
+ "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+ "requires": {
+ "base64-js": "^1.3.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true
+ },
+ "unicode-trie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
+ "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+ "requires": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="
+ }
+ }
+ },
+ "unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ }
+ },
+ "unist-util-find-after": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz",
+ "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "unist-util-generated": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
+ "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A=="
+ },
+ "unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "requires": {
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "unist-util-position": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
+ "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "requires": {
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
+ "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "requires": {
+ "@types/unist": "^2.0.0"
+ }
+ },
+ "unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "dev": true
+ },
+ "update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "requires": {}
+ },
+ "use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "requires": {}
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+ },
+ "uvu": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
+ "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
+ "requires": {
+ "dequal": "^2.0.0",
+ "diff": "^5.0.0",
+ "kleur": "^4.0.3",
+ "sade": "^1.7.3"
+ },
+ "dependencies": {
+ "kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="
+ }
+ }
+ },
+ "v8-to-istanbul": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
+ "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ }
+ }
+ },
+ "vfile": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+ "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ }
+ },
+ "vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ }
+ },
+ "vite-compatible-readable-stream": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz",
+ "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="
+ },
+ "w3c-xmlserializer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==",
+ "dev": true,
+ "requires": {
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "requires": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "web-streams-polyfill": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
+ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q=="
+ },
+ "webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true
+ },
+ "whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.6.3"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "requires": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dev": true,
+ "requires": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ }
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dev": true,
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ }
+ },
+ "ws": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+ "dev": true,
+ "requires": {}
+ },
+ "xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
+ "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="
+ },
+ "yargs": {
+ "version": "17.7.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
+ "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ },
+ "zod": {
+ "version": "3.22.4",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+ "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="
+ },
+ "zustand": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.3.7.tgz",
+ "integrity": "sha512-dY8ERwB9Nd21ellgkBZFhudER8KVlelZm8388B5nDAXhO/+FZDhYMuRnqDgu5SYyRgz/iaf8RKnbUs/cHfOGlQ==",
+ "requires": {
+ "use-sync-external-store": "1.2.0"
+ }
+ },
+ "zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="
+ }
+ }
+}
diff --git a/next/package.json b/next/package.json
new file mode 100644
index 0000000..09e38d5
--- /dev/null
+++ b/next/package.json
@@ -0,0 +1,101 @@
+{
+ "name": "agent-gpt",
+ "version": "1.0.0",
+ "private": true,
+ "engines": {
+ "node": ">=18.0.0 <19.0.0"
+ },
+ "scripts": {
+ "build": "next build --no-lint",
+ "dev": "next dev",
+ "postinstall": "prisma generate",
+ "lint": "cross-env SKIP_ENV_VALIDATION=1 next lint --fix",
+ "start": "next start",
+ "prepare": "cd .. && husky install next/.husky",
+ "test": "cross-env SKIP_ENV_VALIDATION=1 jest"
+ },
+ "dependencies": {
+ "@headlessui/react": "^1.7.14",
+ "@next-auth/prisma-adapter": "^1.0.5",
+ "@prisma/client": "^4.9.0",
+ "@radix-ui/react-switch": "^1.0.2",
+ "@radix-ui/react-toast": "^1.1.4",
+ "@radix-ui/react-tooltip": "^1.0.5",
+ "@react-pdf/renderer": "^3.1.9",
+ "@sid-hq/sid": "^3.1.0",
+ "@splinetool/react-spline": "^2.2.6",
+ "@tailwindcss/forms": "^0.5.3",
+ "@tanstack/react-query": "^4.29.14",
+ "@trpc/client": "^10.21.1",
+ "@trpc/next": "^10.21.1",
+ "@trpc/react-query": "^10.21.1",
+ "@trpc/server": "^10.9.0",
+ "@types/lodash": "^4.14.194",
+ "@uiball/loaders": "^1.3.0",
+ "@vercel/analytics": "^1.0.1",
+ "@vercel/edge": "^0.3.4",
+ "axios": "^0.26.0",
+ "cheerio": "^1.0.0-rc.12",
+ "clsx": "^1.2.1",
+ "cobe": "^0.6.3",
+ "cookies-next": "^2.1.2",
+ "framer-motion": "^10.12.8",
+ "gray-matter": "^4.0.3",
+ "html-to-image": "^1.11.11",
+ "i18next": "^22.4.15",
+ "lodash": "^4.17.21",
+ "next": "^13.5.6",
+ "next-auth": "4.20.1",
+ "next-i18next": "^13.2.2",
+ "nextjs-google-analytics": "^2.3.3",
+ "openai": "^4.14.2",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "react-i18next": "^12.3.1",
+ "react-icons": "^4.11.0",
+ "react-markdown": "^8.0.7",
+ "react-type-animation": "^3.1.0",
+ "rehype-highlight": "^6.0.0",
+ "remark-gfm": "^3.0.1",
+ "superjson": "1.9.1",
+ "tailwindcss-radix": "^2.8.0",
+ "uuid": "^9.0.1",
+ "zod": "^3.22.2",
+ "zustand": "^4.3.7"
+ },
+ "devDependencies": {
+ "@svgr/webpack": "^8.0.1",
+ "@tailwindcss/typography": "^0.5.9",
+ "@testing-library/jest-dom": "^5.16.5",
+ "@testing-library/react": "^14.0.0",
+ "@types/node": "^18.11.18",
+ "@types/prettier": "^2.7.3",
+ "@types/react": "^18.0.26",
+ "@types/react-dom": "^18.2.7",
+ "@types/uuid": "^9.0.5",
+ "@typescript-eslint/eslint-plugin": "^5.59.8",
+ "@typescript-eslint/parser": "^5.59.1",
+ "autoprefixer": "^10.4.7",
+ "cross-env": "^7.0.3",
+ "eslint": "^8.43.0",
+ "eslint-config-next": "13.4.1",
+ "eslint-plugin-import": "^2.27.5",
+ "husky": "^8.0.3",
+ "jest": "^29.3.1",
+ "jest-environment-jsdom": "^29.7.0",
+ "lint-staged": "^13.2.1",
+ "postcss": "^8.4.24",
+ "prettier": "^2.8.8",
+ "prettier-plugin-tailwindcss": "^0.2.8",
+ "prisma": "^4.9.0",
+ "tailwindcss": "^3.3.2",
+ "typescript": "^5.1.3"
+ },
+ "ct3aMetadata": {
+ "initVersion": "7.4.0"
+ },
+ "lint-staged": {
+ "*.js": "eslint --cache --fix",
+ "*.{js,css,md}": "prettier --write"
+ }
+}
diff --git a/next/postcss.config.cjs b/next/postcss.config.cjs
new file mode 100644
index 0000000..12a703d
--- /dev/null
+++ b/next/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/next/posts/Understanding-AgentGPT.mdx b/next/posts/Understanding-AgentGPT.mdx
new file mode 100644
index 0000000..a17173e
--- /dev/null
+++ b/next/posts/Understanding-AgentGPT.mdx
@@ -0,0 +1,294 @@
+---
+title: "Understanding AgentGPT: How we build AI agents that reason, remember, and perform."
+description: "How we build AI agents that reason, remember, and perform."
+imageUrl: "https://petal-diplodocus-04a.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fef520689-ca1b-4489-98aa-41136f565840%2FCybrCo_Art_human-like_robot_typing_on_a_computer_in_a_dark_room_a0174b88-a5b9-4b82-98c6-734dbbde8d09.webp?id=f768fec9-bd6a-43ae-811d-1adb065c6c8e&table=block&spaceId=46c3481b-d8de-4c34-8647-2292d63a5f29&width=2000&userId=&cache=v2"
+date: "July 17th, 2023"
+datetime: "2023-07-17"
+category:
+ title: "Tech"
+ href: "#"
+author:
+ name: "Arthur Riechert"
+ role: "Writer"
+ href: "#"
+ imageUrl: "https://pbs.twimg.com/profile_images/1676828916546248704/5YMDlr1U_400x400.jpg"
+---
+
+
+
+> Alt: A robotic agent types at a laptop in a dark room.
+
+---
+
+The invention of the **Generative Pre-trained Transformer (GPT)** is one of the recent decade's most important
+advancements in AI technology. The GPTs powering today's **Large Language Models (LLMs)** demonstrate a _remarkable
+ability for reasoning, understanding, and planning_. However, their true potential has yet to be fully realized.
+
+At **Reworkd**, we believe that the _true power of LLMs lies in agentic behavior_. By engineering a system that draws on
+LLMs' emergent abilities and providing an ecosystem that supports environmental interactions, we can draw out the full
+potential of models like GPT-4. Here's how AgentGPT works.
+
+## LLMs have a lot of limitations.
+
+The main products shipping LLMs are chatbots powered by
+
+[Foundation Model - Techopedia](https://www.techopedia.com/definition/34826/foundation-model).
+
+If you have any familiarity working with OpenAI's API, a common formula you might use for chatting with the model may
+include:
+
+- Taking the user's message.
+- Adding a list of chat histories.
+- Sending the chat history across the API to retrieve a completion.
+
+This method works fine when the scope of conversations is small; however, _as you continue adding new messages to the
+chat history, the size and complexity of completions balloons_, and you will quickly run into a wall: the dreaded
+context limit.
+
+A **context limit** is the maximum number of **tokens** (a token usually represents a single word) that can be input
+into
+the model for a single response. They are necessary because the _computational cost as we add additional tokens tends to
+increase quadratically_. However, they are often the bane of prompt engineers.
+
+One solution is to measure the number of tokens in the chat history before sending it to the model and removing old
+messages to ensure it fits the token limit. While this approach works, it ultimately reduces the amount of knowledge
+available to the assistant.
+
+Another issue that standalone LLMs face is the need for human guidance. Fundamentally, LLMs are next-word predictors,
+and often, their internal structure is not inherently suited to higher-order thought processes, such as **reasoning**
+through complex tasks. This weakness doesn't mean they can't or don't reason. In fact, there are several [studies](https://arxiv.org/abs/2205.11916#:~:text=While%20these%20successes%20are%20often%20attributed%20to%20LLMs%27,%22Let%27s%20think%20step%20by%20step%22%20before%20each%20answer.) that shows they can. However, it does mean they face certain impediments. For example, the LLM itself can create a logical list of steps; however, it has _no built-in mechanisms for observation and reflection on that list._
+
+A pre-trained model is essentially a "black box" for the end user in which the final product that is shipped has
+_limited to no capability of actively updating its knowledge base and tends to act in unpredictable ways_. As a result,
+it's [hallucination](https://arxiv.org/abs/2202.03629)-prone.
+
+Thus, it requires a lot of effort on the user's part to guide the model's output, and prompting the LLM itself becomes a
+job on its own. This extra work is a far cry from our vision of an AI-powered future.
+
+By providing a platform to give LLMs agentic abilities, _AgentGPT aims to overcome the limitations of standalone LLMs by
+leveraging prompt engineering techniques, vector databases, and API tooling._ Hereâs some interesting work that is being
+done with the agent concept:
+
+[](https://twitter.com/DrJimFan/status/1673006745067847683)
+
+> Alt: A Twitter post by Dr. Jim Fan
+
+## What are agents?
+
+In a general sense, [agents](https://zapier.com/blog/ai-agent/) are rational actors. They use thinking and reasoning to
+influence their environment. _This could be in the form of solving problems or pursuing specific goals. They might
+interact with humans or utilize tools._ Ultimately, we can apply this concept to LLMs to instill more intelligent and
+logical behavior.
+
+In AgentGPT, large language models essentially function as the **brain** of each agent. As a result, we can produce
+powerful agents by cleverly _manipulating the English language_ and engineering a _framework that supports
+interoperability between LLM completions and a diverse set of APIs_.
+
+### Engineering this system consists of 3 parts.
+
+**Reasoning and Planning.** If you were to simply take a general goal, such as "build a scaling e-commerce platform,"
+and
+give it to ChatGPT, you would likely get a response along the lines of "As an AI language modelâĻ." However, through
+**prompt engineering**, we can get a model to _break down goals into digestible steps and reflect on them_ with a method
+called chain of thought prompting.
+
+**Memory.** When dealing with memory, we divide the problem into **short-term** and **long-term**. In managing
+short-term
+memory, we can use prompting techniques such as _few-shot prompting to steer LLM responses_. However, _cost and context
+limits make it tricky to generate completions without limiting the breadth of information_ a model can use to make
+decisions.
+
+Similarly, this issue also arises in **long-term memory** because it would be impossible to provide an appropriate
+corpus
+of writing to bridge the gap between GPT -4's cutoff date, 2021, till today. By using vector databases, we attempt to
+overcome this using specialized models for _information retrieval in high-dimensional vector spaces_.
+
+**Tools**. Another challenge in using LLMs as general actors is their confinement to text outputs. Again, we can use
+prompt engineering techniques to solve this issue. We can generate predictable function calls from the LLM through
+few-shot and chain-of-thought methods, utilizing API tools like **Google Search**, **Hugging Face**, **Dall-E**, etc. In
+addition, we can use fine-tuned LLMs that only return responses in specialized formatting, like JSON. This is the
+approach OpenAI took when they recently released the function calling feature for their API.
+
+These three concepts have formed the backbone of multiple successful agent-based LLM platforms such
+as [Microsoft Jarvis](https://github.com/microsoft/JARVIS), [AutoGPT](https://github.com/Significant-Gravitas/Auto-GPT), [BabyAGI](https://github.com/yoheinakajima/babyagi),
+and of course, AgentGPT. With this brief overview in mind, let's dive deeper into each component.
+
+## How do we get agents to act intelligently?
+
+**Prompt engineering** has become highly popularized, and it's only natural given its ability to _increase the
+reliability of LLM responses_, opening a wide avenue of potential applications for generative AI. AgentGPT's ability to
+think and reason is a result of novel prompting methods.
+
+### A Brief Intro to Prompt Engineering
+
+Prompt engineering is a largely empirical field that aims to find methods to steer LLM responses by finding clever ways
+to use the English language. _You can think of it like lawyering, where every nuance in the wording of a prompt counts._
+
+These are the main concepts and building blocks for more advanced prompting techniques:
+
+1. **Zero-Shot** involves sending the raw command directly to the LLM with little to no formatting.
+2. **Few-Shot** gives context for completions in the form of example responses.
+3. **Chain-of-Thought** guides the model in reasoning through generating and reasoning over a complex task.
+
+### How AgentGPT Uses Prompt Engineering
+
+AgentGPT uses an advanced form of chain-of-thought prompting called **Plan-and-Solve** to generate the steps you see
+when
+operating the agents.
+
+Traditionally, chain-of-thought prompting utilized few-shot techniques to provide examples of a thinking and reasoning
+process. However, as is becomes a theme, it becomes more costly as the complexity of a task increases because we will
+need to provide more context.
+
+**Plan-and-solve (PS):** By virtue of being a zero-shot method, it provides a _prompting framework for LLM-guided
+reasoning using "trigger" words_. These keywords trigger a reasoning response from the model.
+
+We can expand on this concept by _modifying the prompt to extract important variables and steps to generate a final
+response with a cohesive format_. This method allows us to parse the final response and display it for the end user as
+well as feed sub-steps into future plan-and-solve prompts.
+
+
+
+> Alt: Picture of Plan & Solve
+
+While PS prompting helps evoke a reasoning response, it still misses a fundamental concept in reasoning, and that is
+proper handling for reflection and action. **Reflection**is _fundamental for any agent because it must rationalize an
+action, perform that action, and use feedback to adjust future actions._ Without it, the agent would be stateless and
+unchanging.
+
+AgentGPT uses a prompting framework called Reasoning and Acting ([ReAct](https://arxiv.org/pdf/2210.03629.pdf)) to
+expand on the capabilities of the Plan-and-Solve concept. **ReAct** aims to _enable a framework for the model to access
+fresh knowledge through external knowledge bases and make observations of actions it has taken_. Using those
+observations, the LLM can make educated decisions on the next set of steps to complete while performing actions to query
+knowledge bases such as **Google Search** or **Wikipedia API**.
+
+Prompt engineering is largely effective in resolving challenges in short-term memory as well as instilling the reasoning
+behavior that you can see when AgentGPT is at work. However, prompt engineering does not resolve the issue of long-term
+memory. This issue is where vector databases come in, and we will look at those next.
+
+
+
+> Alt : ReAct (Reason + Act) Logic Picture
+
+> The ReAct framework allows us to generate a reasoning response, an action, and a reflection to
+> steer the modelâs response. This example is courtesy of the following
+> paper: [ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/abs/2210.03629)\*
+
+## How do we give agents a working memory?
+
+While we have seen that _prompt engineering is largely effective in resolving issues with short-term memory and
+reasoning_, we cannot solve long-term memory solely through clever English. Since we are not allowed to update the model
+to learn our data, we must build an external system for storing and retrieving knowledge.
+
+A clever solution might use an LLM to _generate summaries of previous conversations as context for the prompt_. However,
+there are three significant issues with this. First, we are diluting the relevant information for the conversation;
+second, it introduces another cost area by paying for API usage for those summaries; and third, it's unscalable.
+
+Thus, prompts appear to be ineffective for long-term memory. Seeing as _long-term memory is a problem of storage and
+efficient retrieval of information_, there is no absence of research in the study of search, so we must look towards
+vector databases.
+
+### Vector Databases Demystified
+
+**[Vector databases](https://aws.amazon.com/what-is/vector-databases/)** have been hyped up for a while now, and the
+hype
+is very deserved. They are an efficient way of storing and retrieving vectors by allowing us to use some fun new
+_algorithms to query billions - even trillions - of data records in milliseconds._
+
+Let's start with a little bit of vocabulary:
+
+- A **vector** in the context of an LLM is a representation of a piece of text that a model like GPT-4 encodes.
+- A **vector space** contains many of these vectors.
+- An **embedding** is the vectorized version of a text.
+
+### Vector libraries like
+
+[Facebook AI Similarity Search](https://www.bing.com/ck/a?!&&p=a0f4167bc6cd7db9JmltdHM9MTY4ODM0MjQwMCZpZ3VpZD0zOTYwYjczZS1hNzg2LTY5Y2MtMjM2YS1hNDdmYTYwMjY4MjImaW5zaWQ9NTIwMQ&ptn=3&hsh=3&fclid=3960b73e-a786-69cc-236a-a47fa6026822&psq=faiss+github&u=a1aHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rcmVzZWFyY2gvZmFpc3M&ntb=1) (
+FAISS) give us access to valuable _tools to control these vectors and locate them efficiently in the vector space._
+
+Since the text is in a numerical embedding dictated by the model type (i.e., text-embedding-ada-002), there is some
+location in space that the text exists in, and it's based on the numbers that compose its vector. That means _similar
+texts will be represented as vectors with similar numbers, and thus, they will likely be grouped closely. On the other
+hand, less similar texts will be further away_. For example, texts about cooking will be closer to food than texts about
+physics.
+
+There are several different algorithms for querying the vector space, but the most relevant to this discussion is the
+cosine similarity search. **[Cosine similarity](https://www.geeksforgeeks.org/cosine-similarity/)** measures the cosine
+of the angle between two non-zero vectors. _It is a measure of orientation, meaning that it's used to determine how
+similar two documents (or whatever the vectors represent) are_. Cosine similarity can range from -1 to 1, with -1
+meaning the vectors are diametrically opposed (completely opposite), 0 meaning the vectors are orthogonal (or
+unrelated), and 1 meaning the vectors are identical.
+
+FAISS is helpful in managing these vector spaces, but it is not a database. _Vector libraries
+lack [CRUD](https://www.freecodecamp.org/news/crud-operations-explained/) operations, which makes them alone unviable
+for long-term memory_, and that's where cloud services such as Pinecone and Weaviate step in.
+
+**Pinecone** and **Weaviate** essentially do all the hard work of managing our vectors. They provide an API that allows
+you
+to upload embeddings, perform various types of searches, and store those vectors for later. _They provide the typical
+CRUD functions we need to instill memory into LLMs in easily-accessible Python modules._
+
+By using them, we can encode large amounts of information for future storage and retrieval. For instance, when the LLM
+needs extra knowledge to complete a task, we can prompt it to query the vector space to find relevant information. Thus,
+we can create long-term memory.
+
+
+
+> Alt : Robot With A Rose In Hand
+
+## Tools to interact with the environment
+
+While **prompt engineering** and **vector databases** resolve many of the limitations and challenges of LLMs, there is
+still the problem of agent interaction. _How can we extend the capabilities of an LLM to interact with the environment
+outside of text?_
+
+APIs are the answer. By utilizing APIs, we can give our agents the ability to perform a wide range of actions and
+access external resources.
+
+Here are a few examples:
+
+- **Google Search API**: Allows agents to search the web and retrieve relevant information.
+- **Hugging Face**: Provides access to various NLP models and transformers for tasks such as summarization, translation,
+ sentiment analysis, and more.
+- **Dall-E**: Enables agents to generate images from textual descriptions.
+- **OpenAI's GPT API**: Allows agents to utilize the GPT-4 model for text completion and generation.
+
+Using API tools in combination with prompt engineering techniques, we can create prompts that generate predictable
+function calls and utilize the output of API requests to enhance the agent's capabilities. This enables agents to
+interact with the environment in a meaningful way beyond text-based interactions.
+
+### Engineering Robust Function Calls
+
+Again, we can achieve tooling through prompt engineering by _representing the tool we want to provide for the model_ as a **function**. _We can then tell the model that this function exists in a prompt, so our program can call it programmatically based on the model's response_. First, however, we should examine the main challenges in implementing tool interactions: consistency, context, and format.
+
+For example, responses tend to vary among chat completions that use the same prompt. Thus, getting the LLM to issue a function call consistently is challenging. A minor solution may include adjusting the **temperature** of the model (a parameter to control the randomness), but the best solution should leverage an LLM's reasoning abilities. Thus, _we can use the ReAct framework to help the llm understand when to issue function calls._
+
+In doing this, we will still run into another major issue. How will the LLMs understand what tools are at their disposal? We could include the available tools in a prompt, but this could significantly increase the number of tokens we would need to send to the model. While this may be fine for an application that runs on a couple of tools, it will increase costs as we add more tools to the system. Thus, _we would use vector databases to help the LLM look up relevant tools it needs._
+
+Finally, we need to generate function calls in a predictable format. This format should include provisions for the name of the function and the parameters it takes, and it must include delimiters that allow us to parse and execute the response for those parameters programmatically. _For instance, you can prompt the model to only return responses in JSON and then use built-in Python libraries to parse the stringified JSON._
+
+Recently, it became even easier to use this type of method as well. In late June, OpenAI released **gpt-4-0613** and **gpt-3.5-turbo-16k-0613** (whew, these names are getting long). They natively support function calls by using a model fine-tuned for JSON to return easy-to-use function calls. You can read more about it [here](https://platform.openai.com/docs/guides/gpt/function-calling).
+
+## The future of LLM-powered agents is bright!
+
+Large language models have been one of the most significant advances of the past decade. Capable of reasoning and talking like a human, they appear to be able to do anything. Despite this, several engineering challenges arise in building around an LLM, such as context limits, reasoning, and long-term retention.
+
+Using the methods described above, **AgentGPT** unlocks the full potential of powerful models such as GPT-4. _We can give any model superpowers using novel prompting methods, efficient vector databases, and abundant API tools_. It's only the start, and we hope you'll join us on this journey.
+
+## Conclusion
+
+AgentGPT represents a powerful approach to building AI agents that reason, remember, and perform. By leveraging prompt
+engineering, vector databases, and API tools, we can overcome the limitations of standalone LLMs and create agents that
+demonstrate agentic behavior.
+
+With the ability to reason, plan, and reflect, AgentGPT agents can tackle complex tasks and interact with the
+environment in a meaningful way. By incorporating long-term memory through vector databases and utilizing APIs, we
+provide agents with access to a vast pool of knowledge and resources.
+
+AgentGPT is a step towards unlocking the full potential of LLMs and creating intelligent agents that can assist and
+collaborate with humans in various domains. The combination of language models, prompt engineering, external memory,
+and API interactions opens up exciting possibilities for AI agents in the future.
+
+## Extra Resources
+
+Are you interested in learning more about prompt engineering? We encourage you to check out other informational posts on our site, or you can check out the fantastic places below, or if you are interested in contributing, check out our [GitHub repo](https://github.com/reworkd/AgentGPT).
diff --git a/next/prettier.config.cjs b/next/prettier.config.cjs
new file mode 100644
index 0000000..5180571
--- /dev/null
+++ b/next/prettier.config.cjs
@@ -0,0 +1,5 @@
+/** @type {import("prettier").Config} */
+module.exports = {
+ plugins: [require.resolve("prettier-plugin-tailwindcss")],
+ printWidth: 100
+};
diff --git a/next/prisma/.gitignore b/next/prisma/.gitignore
new file mode 100644
index 0000000..6526a8f
--- /dev/null
+++ b/next/prisma/.gitignore
@@ -0,0 +1 @@
+schema.prisma*
diff --git a/next/prisma/useMysql.sh b/next/prisma/useMysql.sh
new file mode 100755
index 0000000..c6b0067
--- /dev/null
+++ b/next/prisma/useMysql.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+cd "$(dirname "$0")" || exit 1
+
+rm schema.prisma
+mv schema.prisma.mysql schema.prisma
+
diff --git a/next/prisma/useSqlite.sh b/next/prisma/useSqlite.sh
new file mode 100755
index 0000000..a6c8fec
--- /dev/null
+++ b/next/prisma/useSqlite.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+cd "$(dirname "$0")" || exit 1
+
+cp schema.prisma schema.prisma.mysql
+sed -ie 's/mysql/sqlite/g' schema.prisma
+sed -ie 's/@db.Text//' schema.prisma
+sed -ie 's/@db.VarChar([0-9]\{1,\})//' schema.prisma
+sed -ie 's/Json/String/g' schema.prisma
diff --git a/next/public/android-chrome-192x192.png b/next/public/android-chrome-192x192.png
new file mode 100644
index 0000000..0fe1c2d
Binary files /dev/null and b/next/public/android-chrome-192x192.png differ
diff --git a/next/public/android-chrome-512x512.png b/next/public/android-chrome-512x512.png
new file mode 100644
index 0000000..c3db602
Binary files /dev/null and b/next/public/android-chrome-512x512.png differ
diff --git a/next/public/apple-touch-icon.png b/next/public/apple-touch-icon.png
new file mode 100644
index 0000000..999c3ec
Binary files /dev/null and b/next/public/apple-touch-icon.png differ
diff --git a/next/public/banner.png b/next/public/banner.png
new file mode 100644
index 0000000..1ebb14b
Binary files /dev/null and b/next/public/banner.png differ
diff --git a/next/public/email-24x24.svg b/next/public/email-24x24.svg
new file mode 100644
index 0000000..aa26e74
--- /dev/null
+++ b/next/public/email-24x24.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/errorFavicon.ico b/next/public/errorFavicon.ico
new file mode 100644
index 0000000..854f1f6
Binary files /dev/null and b/next/public/errorFavicon.ico differ
diff --git a/next/public/favicon-16x16.png b/next/public/favicon-16x16.png
new file mode 100644
index 0000000..501e9a1
Binary files /dev/null and b/next/public/favicon-16x16.png differ
diff --git a/next/public/favicon-32x32.png b/next/public/favicon-32x32.png
new file mode 100644
index 0000000..4027afe
Binary files /dev/null and b/next/public/favicon-32x32.png differ
diff --git a/next/public/favicon.ico b/next/public/favicon.ico
new file mode 100644
index 0000000..5c9c2a0
Binary files /dev/null and b/next/public/favicon.ico differ
diff --git a/next/public/favicon.svg b/next/public/favicon.svg
new file mode 100644
index 0000000..ce4aa0e
--- /dev/null
+++ b/next/public/favicon.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/next/public/fonts/NanumMyeongjo-Regular.ttf b/next/public/fonts/NanumMyeongjo-Regular.ttf
new file mode 100644
index 0000000..9a4bb84
Binary files /dev/null and b/next/public/fonts/NanumMyeongjo-Regular.ttf differ
diff --git a/next/public/fonts/Nasu-Regular.ttf b/next/public/fonts/Nasu-Regular.ttf
new file mode 100644
index 0000000..b6446af
Binary files /dev/null and b/next/public/fonts/Nasu-Regular.ttf differ
diff --git a/next/public/fonts/Roboto-Regular.ttf b/next/public/fonts/Roboto-Regular.ttf
new file mode 100644
index 0000000..3033308
Binary files /dev/null and b/next/public/fonts/Roboto-Regular.ttf differ
diff --git a/next/public/fonts/SimSun.ttf b/next/public/fonts/SimSun.ttf
new file mode 100644
index 0000000..463b3a9
Binary files /dev/null and b/next/public/fonts/SimSun.ttf differ
diff --git a/next/public/hero-background.png b/next/public/hero-background.png
new file mode 100644
index 0000000..ee05417
Binary files /dev/null and b/next/public/hero-background.png differ
diff --git a/next/public/icons/icon-blogs.svg b/next/public/icons/icon-blogs.svg
new file mode 100644
index 0000000..8a2d122
--- /dev/null
+++ b/next/public/icons/icon-blogs.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-docs.svg b/next/public/icons/icon-docs.svg
new file mode 100644
index 0000000..c698606
--- /dev/null
+++ b/next/public/icons/icon-docs.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-github.svg b/next/public/icons/icon-github.svg
new file mode 100644
index 0000000..9d83efa
--- /dev/null
+++ b/next/public/icons/icon-github.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-hero-blue.svg b/next/public/icons/icon-hero-blue.svg
new file mode 100644
index 0000000..feb4fa9
--- /dev/null
+++ b/next/public/icons/icon-hero-blue.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-hero-green.svg b/next/public/icons/icon-hero-green.svg
new file mode 100644
index 0000000..643aef6
--- /dev/null
+++ b/next/public/icons/icon-hero-green.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-hero-orange.svg b/next/public/icons/icon-hero-orange.svg
new file mode 100644
index 0000000..a57002c
--- /dev/null
+++ b/next/public/icons/icon-hero-orange.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-hero-purple.svg b/next/public/icons/icon-hero-purple.svg
new file mode 100644
index 0000000..2341db1
--- /dev/null
+++ b/next/public/icons/icon-hero-purple.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-home.svg b/next/public/icons/icon-home.svg
new file mode 100644
index 0000000..b27cb88
--- /dev/null
+++ b/next/public/icons/icon-home.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-pricing.svg b/next/public/icons/icon-pricing.svg
new file mode 100644
index 0000000..7d233a6
--- /dev/null
+++ b/next/public/icons/icon-pricing.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/icon-roadmap.svg b/next/public/icons/icon-roadmap.svg
new file mode 100644
index 0000000..fc6cb98
--- /dev/null
+++ b/next/public/icons/icon-roadmap.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/icons/sparkle-default-regular.svg b/next/public/icons/sparkle-default-regular.svg
new file mode 100644
index 0000000..bda0e13
--- /dev/null
+++ b/next/public/icons/sparkle-default-regular.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/next/public/locales/de/chat.json b/next/public/locales/de/chat.json
new file mode 100644
index 0000000..36fa81b
--- /dev/null
+++ b/next/public/locales/de/chat.json
@@ -0,0 +1,17 @@
+{
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Wir haben auÃergewÃļhnlichen Verkehr, erwarten Sie VerzÃļgerungen und Ausfälle, wenn Sie keinen eigenen API-SchlÃŧssel verwenden đ¨",
+ "CREATE_AN_AGENT_DESCRIPTION": "Erstellen Sie einen Agenten, indem Sie einen Namen/Ziel hinzufÃŧgen und auf Bereitstellen klicken!",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ Sie kÃļnnen Ihren eigenen OpenAI API-SchlÃŧssel im Einstellungen-Tab fÃŧr hÃļhere Limits bereitstellen!",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ UnterstÃŧtzen Sie die Weiterentwicklung von AgentGPT. đī¸",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Bitte erwägen Sie, das Projekt auf GitHub zu unterstÃŧtzen.",
+ "SUPPORT_NOW": "Jetzt unterstÃŧtzen đ",
+ "EMBARKING_ON_NEW_GOAL": "Beginne ein neues Ziel:",
+ "THINKING": "Denke nach...",
+ "TASK_ADDED": "Aufgabe hinzugefÃŧgt:",
+ "COMPLETING": "Fertigstellen:",
+ "NO_MORE_TASKS": "Keine weiteren Unteraufgaben fÃŧr:",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Text wurde in die Zwischenablage kopiert",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Text konnte nicht in die Zwischenablage kopiert werden",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Starten Sie neu, wenn dies länger als 30 Sekunden dauert)",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Erstelle einen Agenten, indem du einen Namen/ein Ziel hinzufÃŧgst und auf Deploy drÃŧckst!"
+}
diff --git a/next/public/locales/de/chat.missing.json b/next/public/locales/de/chat.missing.json
new file mode 100644
index 0000000..d915d0e
--- /dev/null
+++ b/next/public/locales/de/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Erstelle einen Agenten, indem du einen Namen/ein Ziel hinzufÃŧgst und auf Deploy drÃŧckst! \nProbieren Sie unsere Beispiele unten aus!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/de/common.json b/next/public/locales/de/common.json
new file mode 100644
index 0000000..75ef410
--- /dev/null
+++ b/next/public/locales/de/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Aufgabe HinzufÃŧgen",
+ "AGENTGPT_DOCUMENTATION": "Dokumentation von AgentGPT",
+ "CLOSE": "SchlieÃen",
+ "CONTINUE": "Weitermachen",
+ "COPIED_TO_CLIPBOARD": "In die Zwischenablage kopiert! đ",
+ "COPY": "Kopieren",
+ "CREATE_AN_AGENT_DESCRIPTION": "Erstellen Sie einen Agenten, indem Sie einen Namen / ein Ziel hinzufÃŧgen und auf âBereitstellenâ klicken!",
+ "CURRENT_TASKS": "Aktuelle Aufgaben",
+ "EXECUTING": "AusfÃŧhren",
+ "EXPORT": "Exportieren",
+ "IMAGE": "Bild",
+ "LOOP": "Schleife",
+ "PAUSED": "Angehalten",
+ "RESET": "ZurÃŧcksetzen",
+ "RUNNING": "Im Gange",
+ "SAVE": "Speichern",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Um weitere Informationen Ãŧber AgentGPT, seine Roadmap usw. zu erhalten, besuchen Sie den folgenden Link",
+ "create-a-comprehensive-report-of-the-nike-company": "Erstellen Sie einen umfassenden Bericht Ãŧber das Unternehmen Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Wenn Sie auf Probleme stoÃen, wenden Sie sich bitte an unsere",
+ "plan-a-detailed-trip-to-hawaii": "Planen Sie eine detaillierte Reise nach Hawaii.",
+ "platformergpt": "PlattformerGPT đŽ",
+ "researchgpt": "ForschungGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "Web-Suche"
+}
diff --git a/next/public/locales/de/drawer.json b/next/public/locales/de/drawer.json
new file mode 100644
index 0000000..b89c5d3
--- /dev/null
+++ b/next/public/locales/de/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Konto",
+ "HELP_BUTTON": "Hilfe",
+ "MY_AGENTS": "Meine Agenten",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Sie mÃŧssen zuerst Ihren ersten Agenten erstellen und speichern, bevor hier etwas angezeigt wird!",
+ "SETTINGS_BUTTON": "Einstellungen",
+ "SIGN_IN": "Anmelden",
+ "SIGN_IN_NOTICE": "Melden Sie sich an, um Ihre Agenten zu speichern und Ihr Konto zu verwalten!",
+ "SIGN_OUT": "Abmelden",
+ "SUPPORT_BUTTON": "UnterstÃŧtzung",
+ "USER_IMAGE": "Benutzerbild"
+}
diff --git a/next/public/locales/de/errors.json b/next/public/locales/de/errors.json
new file mode 100644
index 0000000..0c03b3c
--- /dev/null
+++ b/next/public/locales/de/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "Fehler beim Zugriff auf den OpenAI API-SchlÃŧssel. Bitte ÃŧberprÃŧfen Sie den API-SchlÃŧssel oder versuchen Sie es später erneut.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "Fehler beim HinzufÃŧgen zusätzlicher Aufgaben. MÃļglicherweise kann unser Modell die Antwort nicht handhaben und hat dies verursacht. Fortfahren...",
+ "RATE_LIMIT_EXCEEDED": "Maximale Anzahl an Anfragen erreicht! Bitte langsamer machen...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Dieser Agent hat die maximale Anzahl ausfÃŧhrbarer Durchläufe erreicht. Um Geld zu sparen, wird dieser Agent jetzt gestoppt... Die maximale Anzahl von Agentenläufen kann in den Einstellungen konfiguriert werden.",
+ "DEMO_LOOPS_REACHED": "Entschuldigung, da dies eine Demoversion ist, kÃļnnen wir unsere Agenten nicht zu lange laufen lassen. Hinweis: Wenn Sie längere Laufzeiten wÃŧnschen, geben Sie bitte einen eigenen API-SchlÃŧssel in den Einstellungen an. Stoppen...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agent manuell gestoppt.",
+ "ALL_TASKS_COMPLETETD": "Alle Aufgaben wurden abgeschlossen. Stoppen...",
+ "ERROR_API_KEY_QUOTA": "Fehler bei der Verwendung des OpenAI API-SchlÃŧssels. Sie haben Ihre derzeitige Quote Ãŧberschritten. Bitte ÃŧberprÃŧfen Sie Ihre Abrechnungsinformationen.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "FEHLER: Ihr OpenAI API-SchlÃŧssel hat keinen Zugriff auf GPT-4. Sie mÃŧssen sich zuerst auf der OpenAI-Warteliste anmelden. (Dies unterscheidet sich vom ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "Fehler beim Abrufen der Ausgangsaufgaben. Versuchen Sie es erneut, formulieren Sie das Ziel des Agenten klarer oder passen Sie es so an, dass es unserem Modell entspricht. Stoppen...",
+ "INVALID_OPENAI_API_KEY": "FEHLER ungÃŧltiger OpenAI-API-SchlÃŧssel"
+}
diff --git a/next/public/locales/de/help.json b/next/public/locales/de/help.json
new file mode 100644
index 0000000..1c38877
--- /dev/null
+++ b/next/public/locales/de/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Dokumentation von AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Folgen Sie uns auf folgenden Wegen:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interaktion mit Websites und Menschen đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "ermÃļglicht es Ihnen, eigenständige KI-Agenten Ãŧber Ihren Browser zu konfigurieren und auszufÃŧhren. Benennen Sie Ihren individuellen KI-Agenten und definieren Sie sein Ziel. Der KI-Agent versucht, das definierte Ziel zu erreichen, indem er Aufgaben erstellt, sie ausfÃŧhrt und ihre Ergebnisse auswertet đ",
+ "LONG_TERM_MEMORY": "Langzeitgedächtnis đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Diese Plattform ist derzeit in der Beta-Version und wir arbeiten derzeit an folgenden Funktionen:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Um mehr Ãŧber AgentGPT, seine Roadmap, FAQ usw. zu erfahren, besuchen Sie die",
+ "WEB_BROWSING": "Web-Browsing đ",
+ "WELCOME_TO_AGENT_GPT": "Willkommen bei AgentGPT"
+}
diff --git a/next/public/locales/de/indexPage.json b/next/public/locales/de/indexPage.json
new file mode 100644
index 0000000..1fb61e8
--- /dev/null
+++ b/next/public/locales/de/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Stellen Sie autonome KI-Agenten in Ihrem Browser zusammen, konfigurieren Sie sie und installieren Sie sie.",
+ "AGENT_NAME": "Name",
+ "LABEL_AGENT_GOAL": "Ziel",
+ "PLACEHOLDER_AGENT_GOAL": "Machen Sie die Welt zu einem besseren Ort",
+ "BUTTON_DEPLOY_AGENT": "Agent ausfÃŧhren",
+ "BUTTON_STOP_AGENT": "Agent stoppen"
+}
diff --git a/next/public/locales/de/languages.json b/next/public/locales/de/languages.json
new file mode 100644
index 0000000..dcddbdd
--- /dev/null
+++ b/next/public/locales/de/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Englisch",
+ "FRENCH": "FranzÃļsisch",
+ "SPANISH": "Spanisch",
+ "GERMAN": "Deutsch",
+ "JAPANESE": "Japanisch",
+ "KOREAN": "Koreanisch",
+ "CHINESE": "Chinesisch",
+ "PORTUGEES": "Portugiesisch",
+ "ITALIAN": "Italienisch",
+ "DUTCH": "Niederländisch",
+ "POLSKI": "Polnisch",
+ "HUNGARIAN": "Ungarisch",
+ "ROMANIAN": "Rumänisch",
+ "SLOVAK": "Slowakisch"
+}
diff --git a/next/public/locales/de/settings.json b/next/public/locales/de/settings.json
new file mode 100644
index 0000000..54b196b
--- /dev/null
+++ b/next/public/locales/de/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Erweiterte Einstellungen",
+ "API_KEY": "API-SchlÃŧssel",
+ "AUTOMATIC_MODE": "Automatikmodus",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Standard): Der Agent fÃŧhrt alle Aufgaben automatisch aus.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Steuerung der maximalen Anzahl von Tokens, die bei jedem API-Aufruf verwendet werden (hÃļhere Werte fÃŧhren zu detaillierteren Antworten, sind aber teurer).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Steuerung der maximalen Anzahl von Schleifen, die vom Agenten ausgefÃŧhrt werden (hÃļhere Werte fÃŧhren zu mehr API-Aufrufen).",
+ "GET_YOUR_OWN_APIKEY": "Holen Sie sich Ihren eigenen OpenAI-API-SchlÃŧssel",
+ "HERE": "hier",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Hier kÃļnnen Sie Ihren OpenAI API-SchlÃŧssel hinzufÃŧgen. Dies bedeutet, dass Sie fÃŧr die Verwendung Ihres eigenen OpenAI-Tokens bezahlen mÃŧssen, aber einen grÃļÃeren Zugang zu ChatGPT erhalten! AuÃerdem kÃļnnen Sie jedes von OpenAI angebotene Modell auswählen.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "HÃļhere Werte machen die Ausgabe zufälliger, während niedrigere Werte sie fokussierter und bestimmter machen.",
+ "INFO_TO_USE_GPT4": "Um das GPT-4-Modell zu verwenden, muss auch der API-SchlÃŧssel angegeben werden. Sie kÃļnnen es",
+ "INVALID_OPENAI_API_KEY": "UngÃŧltiger API-SchlÃŧssel!",
+ "LABEL_MODE": "Modus",
+ "LABEL_MODEL": "Modell",
+ "LANG": "Sprache",
+ "LINK": "API-SchlÃŧssel beantragen",
+ "LOOP": "Schleife",
+ "MUST_CONNECT_CREDIT_CARD": "Hinweis: Sie mÃŧssen eine Kreditkarte mit Ihrem Konto verbinden",
+ "NOTE_API_KEY_USAGE": "Dieser SchlÃŧssel wird nur in der aktuellen Browsersitzung verwendet.",
+ "NOTE_TO_GET_OPENAI_KEY": "HINWEIS: Um den API-SchlÃŧssel zu erhalten, mÃŧssen Sie ein OpenAI-Konto registrieren, das Sie unter dem folgenden Link tun kÃļnnen:",
+ "PAUSE": "Pause",
+ "PAUSE_MODE": "Pause-Modus",
+ "PAUSE_MODE_DESCRIPTION": "Der Agent pausiert nach jeder Gruppe von Aufgaben.",
+ "PENAI_API_KEY": "UngÃŧltiger OpenAI-API-SchlÃŧssel",
+ "PLAY": "Abspielen",
+ "SETTINGS_DIALOG_HEADER": "Einstellungen â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(Das ChatGPT Plus-Abonnement funktioniert nicht)",
+ "TEMPERATURE": "Temperatur",
+ "TOKENS": "Token"
+}
diff --git a/next/public/locales/en/chat.json b/next/public/locales/en/chat.json
new file mode 100644
index 0000000..68974fb
--- /dev/null
+++ b/next/public/locales/en/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Completing:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Please consider sponsoring the project on GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Text copied to clipboard",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Unable to copy text to clipboard",
+ "CREATE_AN_AGENT_DESCRIPTION": "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!",
+ "EMBARKING_ON_NEW_GOAL": "Embarking on a new goal:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ We are experiencing exceptional traffic, expect delays and failures if you do not use your own API keyđ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Help support the advancement of AgentGPT. đī¸",
+ "NO_MORE_TASKS": "No more subtasks for:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Restart if this takes more than 30 seconds)",
+ "SUPPORT_NOW": "Support now đ",
+ "TASK_ADDED": "Added task:",
+ "THINKING": "Thinking...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ You can provide your own OpenAI API key in the settings tab for increased limits!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Create an agent by adding a name/target and pressing deploy!"
+}
diff --git a/next/public/locales/en/chat.missing.json b/next/public/locales/en/chat.missing.json
new file mode 100644
index 0000000..b0f7e39
--- /dev/null
+++ b/next/public/locales/en/chat.missing.json
@@ -0,0 +1,23 @@
+{
+ "đ åĩåģēä¸åAIæŠå¨äēēīŧčŧ¸å
Ĩåį¨ąåįŽæ¨īŧįļåžéģæ\"ååAIīŧ\"æé": "đ åĩåģēä¸åAIæŠå¨äēēīŧčŧ¸å
Ĩåį¨ąåįŽæ¨īŧįļåžéģæ\"ååAIīŧ\"æé",
+ "đ UtwÃŗrz agenta, dodajÄ
c nazwÄ i cel, a nastÄpnie kliknij przycisk \"Uruchom agenta!\"": "đ UtwÃŗrz agenta, dodajÄ
c nazwÄ i cel, a nastÄpnie kliknij przycisk \"Uruchom agenta!\"",
+ "đ CreaČi un agent prin adÄugarea numelui Či obiectivului, apoi faceČi clic pe butonul \"Pornire agent!\"": "đ CreaČi un agent prin adÄugarea numelui Či obiectivului, apoi faceČi clic pe butonul \"Pornire agent!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ Maak een agent aan door de naam en het doel toe te voegen en klik op de knop \"Agent starten!\"": "đ Maak een agent aan door de naam en het doel toe te voegen en klik op de knop \"Agent starten!\"",
+ "đ Kreirajte agenta dodavanjem imena/cilja i klikom na deploy!": "đ Kreirajte agenta dodavanjem imena/cilja i klikom na deploy!",
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!",
+ "đ CrÊez un agent en ajoutant un nom / objectif et en appuyant sur le dÊploiement !": "đ CrÊez un agent en ajoutant un nom / objectif et en appuyant sur le dÊploiement !",
+ "đ Erstellen Sie einen Agenten, indem Sie einen Namen/Ziel hinzufÃŧgen und auf Bereitstellen klicken!": "đ Erstellen Sie einen Agenten, indem Sie einen Namen/Ziel hinzufÃŧgen und auf Bereitstellen klicken!",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ",
+ "đ ė´ëĻęŗŧ ëĒŠíëĨŧ ėļę°íėŦ ėė´ė í¸ëĨŧ ėėąí ë¤ė, \"ėė´ė í¸ ėė!\" ë˛íŧė í´ëĻíė¸ė": {
+ "": "đ ė´ëĻęŗŧ ëĒŠíëĨŧ ėļę°íėŦ ėė´ė í¸ëĨŧ ėėąí ë¤ė, \"ėė´ė í¸ ėė!\" ë˛íŧė í´ëĻíė¸ė."
+ },
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ Bir ad / hedef ekleyerek ve konuÅlandÄąr'a basarak bir aracÄą oluÅturun! AÅaÄÄądaki Ãļrneklerimizi deneyin!": "đ Bir ad / hedef ekleyerek ve konuÅlandÄąr'a basarak bir aracÄą oluÅturun! AÅaÄÄądaki Ãļrneklerimizi deneyin!",
+ "đ Sukurkite agentÄ
pridÄdami pavadinimÄ
ir tikslÄ
, tada paspauskite mygtukÄ
\"Paleisti agentÄ
!\"": "đ Sukurkite agentÄ
pridÄdami pavadinimÄ
ir tikslÄ
, tada paspauskite mygtukÄ
\"Paleisti agentÄ
!\"",
+ "đ Hozzon lÊtre egy ÃŧgynÃļkÃļt a nÊv Ês a cÊl hozzÃĄadÃĄsÃĄval, majd kattintson az \"ÃgynÃļk indÃtÃĄsa!\" gombra": "đ Hozzon lÊtre egy ÃŧgynÃļkÃļt a nÊv Ês a cÊl hozzÃĄadÃĄsÃĄval, majd kattintson az \"ÃgynÃļk indÃtÃĄsa!\" gombra",
+ "đ Crea un agente aggiungendo nome e obiettivo, quindi premi il pulsante \"Avvia agente!\"": "đ Crea un agente aggiungendo nome e obiettivo, quindi premi il pulsante \"Avvia agente!\"",
+ "đ Crie um agente adicionando nome e objetivo, e clique no botÃŖo \"Iniciar agente!\"": "đ Crie um agente adicionando nome e objetivo, e clique no botÃŖo \"Iniciar agente!\"",
+ "đ ÂĄCree un agente agregando un nombre/objetivo y presionando desplegar!": "đ ÂĄCree un agente agregando un nombre/objetivo y presionando desplegar!"
+}
\ No newline at end of file
diff --git a/next/public/locales/en/common.json b/next/public/locales/en/common.json
new file mode 100644
index 0000000..46905d1
--- /dev/null
+++ b/next/public/locales/en/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Adding Task",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT's Documentation",
+ "CLOSE": "Close",
+ "CONTINUE": "Continue",
+ "COPIED_TO_CLIPBOARD": "Copied to clipboard! đ",
+ "COPY": "Copy",
+ "CREATE_AN_AGENT_DESCRIPTION": "Create an agent by adding a name / goal, and hitting deploy!",
+ "CURRENT_TASKS": "Current Tasks",
+ "EXECUTING": "Executing",
+ "EXPORT": "Export",
+ "IMAGE": "Image",
+ "LOOP": "Loop",
+ "PAUSED": "Paused",
+ "RESET": "Reset",
+ "RUNNING": "Running",
+ "SAVE": "Save",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "To get more information about AgentGPT, its Roadmap, etc, visit the following link",
+ "create-a-comprehensive-report-of-the-nike-company": "Create a comprehensive report of the Nike company",
+ "if-you-are-facing-issues-please-head-over-to-our": "If you are facing issues, please head over to our",
+ "plan-a-detailed-trip-to-hawaii": "Plan a detailed trip to Hawaii.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "ResearchGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "Web search"
+}
diff --git a/next/public/locales/en/common.missing.json b/next/public/locales/en/common.missing.json
new file mode 100644
index 0000000..924aa03
--- /dev/null
+++ b/next/public/locales/en/common.missing.json
@@ -0,0 +1,3 @@
+{
+ "Current tasks": "Current tasks"
+}
\ No newline at end of file
diff --git a/next/public/locales/en/drawer.json b/next/public/locales/en/drawer.json
new file mode 100644
index 0000000..f4a2e82
--- /dev/null
+++ b/next/public/locales/en/drawer.json
@@ -0,0 +1,12 @@
+{
+ "HELP_BUTTON": "Help",
+ "SETTINGS_BUTTON": "Settings",
+ "SUPPORT_BUTTON": "Support",
+ "MY_AGENTS": "My Agents",
+ "SIGN_IN_NOTICE": " to be able to save agents and manage your account!",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Create and save your first agent to get started!",
+ "SIGN_IN": "Sign In",
+ "SIGN_OUT": "Sign Out",
+ "ACCOUNT": "Account",
+ "USER_IMAGE": "User Image"
+}
diff --git a/next/public/locales/en/errors.json b/next/public/locales/en/errors.json
new file mode 100644
index 0000000..40973af
--- /dev/null
+++ b/next/public/locales/en/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ERROR accessing the backend. Please email support@reworkd.ai or try again later",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ERROR adding additional task(s). It might have been against our model's policies to run them. Continuing.",
+ "RATE_LIMIT_EXCEEDED": "Rate limit exceeded! Please slow down...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "This agent has maxed out on loops. To save your wallet, this agent is shutting down. You can configure the number of loops in the advanced settings.",
+ "DEMO_LOOPS_REACHED": "The agent has run out of loops. Update the number of loops in the settings menu if more loops are required. Shutting down.",
+ "AGENT_MANUALLY_SHUT_DOWN": "The agent has been manually shutdown.",
+ "ALL_TASKS_COMPLETETD": "All tasks completed. Shutting down.",
+ "ERROR_API_KEY_QUOTA": "ERROR using your OpenAI API key. You've exceeded your current quota, please check your plan and billing details.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ERROR your API key does not have GPT-4 access. You must first join OpenAI's wait-list. (This is different from ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ERROR retrieving initial tasks array. Retry, make your goal more clear, or revise your goal such that it is within our model's policies to run. Shutting Down.",
+ "INVALID_OPENAI_API_KEY": "ERROR invalid OpenAI API-key"
+}
diff --git a/next/public/locales/en/help.json b/next/public/locales/en/help.json
new file mode 100644
index 0000000..4b2d123
--- /dev/null
+++ b/next/public/locales/en/help.json
@@ -0,0 +1,11 @@
+{
+ "WELCOME_TO_AGENT_GPT": "Welcome to AgentGPT",
+ "INTRODUCING_AGENTGPT": "allows you to configure and deploy Autonomous AI agents. Name your custom AI and have it embark on any goal imaginable. It will attempt to reach the goal by thinking of tasks to do, executing them, and learning from the results đ",
+ "PLATFORM_BETA_DESCRIPTION": "This platform is currently in beta, we are currently working on:",
+ "LONG_TERM_MEMORY": "Long term memory đ§ ",
+ "WEB_BROWSING": "Web browsing đ",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interaction with websites and people đ¨âđŠâđĻ",
+ "FOLLOW_THE_JOURNEY": "Follow the journey below:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "To learn more about AgentGPT, its roadmap, FAQ, etc, visit the ",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT's Documentation"
+}
\ No newline at end of file
diff --git a/next/public/locales/en/indexPage.json b/next/public/locales/en/indexPage.json
new file mode 100644
index 0000000..cf431b0
--- /dev/null
+++ b/next/public/locales/en/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Assemble, configure, and deploy autonomous AI Agents in your browser.",
+ "AGENT_NAME": "Name",
+ "LABEL_AGENT_GOAL": "Goal",
+ "PLACEHOLDER_AGENT_GOAL": "What is the latest AI news?",
+ "BUTTON_DEPLOY_AGENT": "Deploy Agent",
+ "BUTTON_STOP_AGENT": "Stop Agent"
+}
diff --git a/next/public/locales/en/languages.json b/next/public/locales/en/languages.json
new file mode 100644
index 0000000..fc61469
--- /dev/null
+++ b/next/public/locales/en/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "English",
+ "FRENCH": "French",
+ "SPANISH": "Spanish",
+ "GERMAN": "Deutsch",
+ "JAPANESE": "Japanese",
+ "KOREAN": "Korean",
+ "CHINESE": "Chinese",
+ "PORTUGEES": "Portugees",
+ "ITALIAN": "Italian",
+ "DUTCH": "Dutch",
+ "POLSKI": "Polski",
+ "HUNGARIAN": "Hungarian",
+ "ROMANIAN": "Romanian",
+ "SLOVAK": "Slovak"
+}
\ No newline at end of file
diff --git a/next/public/locales/en/settings.json b/next/public/locales/en/settings.json
new file mode 100644
index 0000000..afd6ddc
--- /dev/null
+++ b/next/public/locales/en/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Advanced settings",
+ "API_KEY": "Key",
+ "AUTOMATIC_MODE": "Automatic mode",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Default): Agent automatically executes every task.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Controls the maximum number of tokens used in each API call (higher value will make responses more detailed but cost more).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Controls the maximum number of loops that the agent will run (higher value will make more API calls).",
+ "GET_YOUR_OWN_APIKEY": "Get your own OpenAI API key",
+ "HERE": "here",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Here you can add your OpenAI API key. This will require you to pay for your own OpenAI usage but give you greater access to AgentGPT! You can additionally select any model OpenAI offers.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Higher values will make the output more random, while lower values make the output more focused and deterministic.",
+ "INFO_TO_USE_GPT4": "To use the GPT-4 model, you need to also provide the API key for GPT-4. You can request for it",
+ "INVALID_OPENAI_API_KEY": "Invalid API key!",
+ "LABEL_MODE": "Mode",
+ "LABEL_MODEL": "Model",
+ "LANG": "Language",
+ "LINK": "link",
+ "LOOP": "Loop",
+ "MUST_CONNECT_CREDIT_CARD": "Note: You must connect a credit card to your account",
+ "NOTE_API_KEY_USAGE": "This key is only used in the current browser session",
+ "NOTE_TO_GET_OPENAI_KEY": "NOTE: To get a key, sign up for an OpenAI account and visit the following",
+ "PAUSE": "Pause",
+ "PAUSE_MODE": "Pause mode",
+ "PAUSE_MODE_DESCRIPTION": "Agent pauses after every set of task(s)",
+ "PENAI_API_KEY": "Invalid OpenAI API-key",
+ "PLAY": "Play",
+ "SETTINGS_DIALOG_HEADER": "Settings â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ChatGPT Plus subscription will not work)",
+ "TEMPERATURE": "Temp.",
+ "TOKENS": "Tokens"
+}
diff --git a/next/public/locales/es/chat.json b/next/public/locales/es/chat.json
new file mode 100644
index 0000000..513db6e
--- /dev/null
+++ b/next/public/locales/es/chat.json
@@ -0,0 +1,17 @@
+{
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ AgentGPT experimenta un trÃĄfico excepcional. Si no estas usando tu propia clave del API, podrias notar retrasos y errores đ¨",
+ "CREATE_AN_AGENT_DESCRIPTION": "ÂĄCrea un Agente agregando un nombre, objetivo y presionando 'Ejecutar Agente'! Puedes experimentar con estos ejemplos:",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ ÂĄPuedes proporcionar tu propia clave de API de OpenAI en la pestaÃąa de configuraciÃŗn para evitar limitaciones!",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Apoya el progreso de AgentGPT. đī¸",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Considera patrocinar el proyecto en GitHub.",
+ "SUPPORT_NOW": "Apoyar ahora đ",
+ "EMBARKING_ON_NEW_GOAL": "EmbarcÃĄndose en un nuevo objetivo:",
+ "THINKING": "Pensando...",
+ "TASK_ADDED": "Tarea agregada:",
+ "COMPLETING": "Completando:",
+ "NO_MORE_TASKS": "No hay mÃĄs sub-tareas para:",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Texto copiado al portapapeles",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "No se pudo copiar el texto al portapapeles",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Reiniciar si esto tarda mÃĄs de 30 segundos)",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ ÂĄCrea un agente agregando un nombre, objetivo y presionando 'Ejecutar Agente'!"
+}
diff --git a/next/public/locales/es/chat.missing.json b/next/public/locales/es/chat.missing.json
new file mode 100644
index 0000000..dc75614
--- /dev/null
+++ b/next/public/locales/es/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ ÂĄCrea un Agente agregando un nombre, objetivo y presionando 'Ejecutar Agente'! Puedes experimentar con estos ejemplos:",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/es/common.json b/next/public/locales/es/common.json
new file mode 100644
index 0000000..91a119b
--- /dev/null
+++ b/next/public/locales/es/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "AÃąadiendo tarea",
+ "AGENTGPT_DOCUMENTATION": "DocumentaciÃŗn de AgentGPT",
+ "CLOSE": "Cerrar",
+ "CONTINUE": "Continuar",
+ "COPIED_TO_CLIPBOARD": "ÂĄCopiado al portapapeles! đ",
+ "COPY": "Copiar",
+ "CREATE_AN_AGENT_DESCRIPTION": "ÂĄCrea un agente agregando un nombre, objetivo y presionando 'Ejecutar Agente'!",
+ "CURRENT_TASKS": "Tareas Actuales",
+ "EXECUTING": "Ejecutando",
+ "EXPORT": "Exportar",
+ "IMAGE": "Imagen",
+ "LOOP": "Bucle",
+ "PAUSED": "En pausa",
+ "RESET": "Reiniciar",
+ "RUNNING": "En curso",
+ "SAVE": "Guardar",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Para conocer mÃĄs sobre AgentGPT visita el siguiente enlace",
+ "create-a-comprehensive-report-of-the-nike-company": "Crear un informe completo de la empresa Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Si tienes inconvenientes, dirÃgete a nuestro",
+ "plan-a-detailed-trip-to-hawaii": "Planifica un viaje detallado a HawÃĄi.",
+ "platformergpt": "VideojuegoGPT đŽ",
+ "researchgpt": "InvestigaGPT đ",
+ "travelgpt": "ViajaGPT đ´",
+ "web-search": "bÃēsqueda Web"
+}
diff --git a/next/public/locales/es/drawer.json b/next/public/locales/es/drawer.json
new file mode 100644
index 0000000..62ee899
--- /dev/null
+++ b/next/public/locales/es/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Cuenta",
+ "HELP_BUTTON": "Ayuda",
+ "MY_AGENTS": "Mis agentes",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ÂĄDebes crear y guardar tu primer agente para comenzar!",
+ "SETTINGS_BUTTON": "Configuraciones",
+ "SIGN_IN": "Iniciar sesiÃŗn",
+ "SIGN_IN_NOTICE": "ÂĄInicia sesiÃŗn para guardar sus agentes y administrar tu cuenta!",
+ "SIGN_OUT": "Cerrar sesiÃŗn",
+ "SUPPORT_BUTTON": "Apoyar",
+ "USER_IMAGE": "Imagen de usuario"
+}
diff --git a/next/public/locales/es/errors.json b/next/public/locales/es/errors.json
new file mode 100644
index 0000000..70f9dc5
--- /dev/null
+++ b/next/public/locales/es/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "Error al acceder al API de OpenAI. Por favor, verifica tu clave de API o intenta mÃĄs tarde.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "Error al agregar tarea(s) adicional(es). Es posible que las politicas de AgentGPT hayan evitar que se ejecuten. Continuando...",
+ "RATE_LIMIT_EXCEEDED": "ÂĄHas alcanzado el nÃēmero mÃĄximo de consultas! Por favor, disminuye la velocidad...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Este agente ha alcanzado el nÃēmero mÃĄximo de rondas ejecutables. Para cuidar tu billetera, este agente se detendrÃĄ ahora... El nÃēmero mÃĄximo de rondas de ejecuciÃŗn del agente se puede configurar en la configuraciÃŗn.",
+ "DEMO_LOOPS_REACHED": "Esta es una aplicaciÃŗn de demostraciÃŗn y no podemos ejecutar nuestros agentes durante mucho tiempo. Si desea ejecuciones mÃĄs extendidas, proporciona tu clave de API de OpenAI en ConfiguraciÃŗn. Deteniendo...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agente apagado manualmente.",
+ "ALL_TASKS_COMPLETETD": "Todas las tareas han sido completadas. Deteniendo...",
+ "ERROR_API_KEY_QUOTA": "Error al usar la clave de API de OpenAI. Has superado su cuota actual, por favor, revisa tu informaciÃŗn de facturaciÃŗn.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ERROR: Tu clave de API de OpenAI no tiene acceso a GPT-4. Debes registrarse en la lista de espera de OpenAI para tener acceso. (AgentGPT utiliza el API de OpenAI, que no es lo mismo que ChatGPT ni ChatGPT Plus de chat.openai.com)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "Error al recuperar las tareas iniciales. IntÊntalo de nuevo formulando el objetivo del agente de manera mÃĄs clara o modificandolo de manera que se adapte a las polÃticas de nuestro modelo. Deteniendo...",
+ "INVALID_OPENAI_API_KEY": "ERROR Clave de API de OpenAI invÃĄlida"
+}
diff --git a/next/public/locales/es/help.json b/next/public/locales/es/help.json
new file mode 100644
index 0000000..0a29589
--- /dev/null
+++ b/next/public/locales/es/help.json
@@ -0,0 +1,11 @@
+{
+ "WELCOME_TO_AGENT_GPT": "Bienvenido a AgentGPT",
+ "INTRODUCING_AGENTGPT": "te permite configurar y ejecutar agentes de inteligencia artificial autÃŗnomos a travÊs de tu navegador. Nombra tu agente de IA personalizado y define su objetivo. El agente de IA intentarÃĄ alcanzar el objetivo definido mediante la creaciÃŗn de tareas, su ejecuciÃŗn y la evaluaciÃŗn de sus resultados đ",
+ "PLATFORM_BETA_DESCRIPTION": "Esta plataforma estÃĄ actualmente en versiÃŗn beta y estamos trabajando en las siguientes caracterÃsticas:",
+ "LONG_TERM_MEMORY": "Memoria a largo plazo đ§ ",
+ "WEB_BROWSING": "NavegaciÃŗn web đ",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "InteracciÃŗn con sitios web y personas đ¨âđŠâđĻ",
+ "FOLLOW_THE_JOURNEY": "SÃgue nuestra aventura en nuestras redes:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Para obtener mÃĄs informaciÃŗn sobre AgentGPT, su hoja de ruta, preguntas frecuentes, etc., visite la",
+ "AGENTGPT_DOCUMENTATION": "DocumentaciÃŗn de AgentGPT"
+}
\ No newline at end of file
diff --git a/next/public/locales/es/indexPage.json b/next/public/locales/es/indexPage.json
new file mode 100644
index 0000000..1622000
--- /dev/null
+++ b/next/public/locales/es/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Ensambla, configura y ejecuta agentes de IA autÃŗnomos en tu navegador.",
+ "AGENT_NAME": "Nombre",
+ "LABEL_AGENT_GOAL": "Objetivo",
+ "PLACEHOLDER_AGENT_GOAL": "Hacer del mundo un lugar mejor",
+ "BUTTON_DEPLOY_AGENT": "Ejecutar Agente",
+ "BUTTON_STOP_AGENT": "Detener Agente"
+}
diff --git a/next/public/locales/es/languages.json b/next/public/locales/es/languages.json
new file mode 100644
index 0000000..cf971fd
--- /dev/null
+++ b/next/public/locales/es/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "InglÊs",
+ "FRENCH": "FrancÊs",
+ "SPANISH": "EspaÃąol",
+ "GERMAN": "AlemÃĄn",
+ "JAPANESE": "JaponÊs",
+ "KOREAN": "Coreano",
+ "CHINESE": "Chino",
+ "PORTUGEES": "PortuguÊs",
+ "ITALIAN": "Italiano",
+ "DUTCH": "HolandÊs",
+ "POLSKI": "Polaco",
+ "HUNGARIAN": "HÃēngaro",
+ "ROMANIAN": "Rumano",
+ "SLOVAK": "Eslovaco"
+}
diff --git a/next/public/locales/es/settings.json b/next/public/locales/es/settings.json
new file mode 100644
index 0000000..f76cf49
--- /dev/null
+++ b/next/public/locales/es/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "ConfiguraciÃŗn avanzada",
+ "API_KEY": "Clave del API de OpenAI",
+ "AUTOMATIC_MODE": "Modo automÃĄtico",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Por defecto): El agente ejecuta automÃĄticamente cada tarea.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Controla el nÃēmero mÃĄximo de tokens utilizados en cada llamada a la API (un valor mÃĄs alto resultarÃĄ en respuestas mÃĄs detalladas, pero tambiÊn serÃĄ mÃĄs costoso).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Controla el nÃēmero mÃĄximo de bucles que el agente puede ejecutar (un valor mÃĄs alto resultarÃĄ en mÃĄs llamadas a la API).",
+ "GET_YOUR_OWN_APIKEY": "Obtenga su propia clave de API de OpenAI",
+ "HERE": "aquÃ",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Aquà puedes agregar tu clave de API de OpenAI. Esto significa que tendrÃĄs que pagar por tu uso del API, ÂĄpero obtendrÃĄs un mayor acceso a AgentGPT! TambiÊn podras elegir cualquier modelo de lenguaje ofrecido por OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Valores mÃĄs altos hacen que la salida sea mÃĄs creativa y aleatoria, mientras que valores mÃĄs bajos la hacen mÃĄs enfocada y determinista.",
+ "INFO_TO_USE_GPT4": "Para utilizar el modelo GPT-4, tambiÊn es necesario proporcionar la clave de API de OpenAI. Puedes obtenerla",
+ "INVALID_OPENAI_API_KEY": "ÂĄClave de API invÃĄlida!",
+ "LABEL_MODE": "Modo",
+ "LABEL_MODEL": "Modelo",
+ "LANG": "Idioma",
+ "LINK": "Solicita una clave de API",
+ "LOOP": "Bucle",
+ "MUST_CONNECT_CREDIT_CARD": "Nota: Debes agregar una tarjeta de crÊdito en tu cuenta",
+ "NOTE_API_KEY_USAGE": "Esta clave solo se utiliza en la sesiÃŗn actual del navegador.",
+ "NOTE_TO_GET_OPENAI_KEY": "NOTA: Para obtener una clave de API, necesitas registrarte en una cuenta de OpenAI, lo cual puedes hacer en el siguiente enlace:",
+ "PAUSE": "Pausa",
+ "PAUSE_MODE": "Modo pausa",
+ "PAUSE_MODE_DESCRIPTION": "El agente se pausa despuÊs de cada conjunto de tareas.",
+ "PENAI_API_KEY": "Clave API de OpenAI no vÃĄlida",
+ "PLAY": "Reproducir",
+ "SETTINGS_DIALOG_HEADER": "ConfiguraciÃŗn â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(La suscripciÃŗn a ChatGPT Plus no funcionarÃĄ)",
+ "TEMPERATURE": "Temperatura",
+ "TOKENS": "Tokens"
+}
diff --git a/next/public/locales/fr/chat.json b/next/public/locales/fr/chat.json
new file mode 100644
index 0000000..0e4542d
--- /dev/null
+++ b/next/public/locales/fr/chat.json
@@ -0,0 +1,17 @@
+{
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Nous rencontrons un trafic exceptionnel, prÊvoyez des retards et des Êchecs si vous n'utilisez pas votre propre clÊ API đ¨",
+ "CREATE_AN_AGENT_DESCRIPTION": "CrÊez un agent en ajoutant un nom / objectif et en appuyant sur le dÊploiement !",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ Vous pouvez fournir votre propre clÊ OpenAI API dans l'onglet des paramètres pour des limites accrues !",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Aidez à soutenir l'avancement d'AgentGPT. đī¸",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Veuillez envisager de parrainer le projet sur GitHub.",
+ "SUPPORT_NOW": "Soutenir maintenant đ",
+ "EMBARKING_ON_NEW_GOAL": "Se lancer dans un nouvel objectif :",
+ "THINKING": "RÊflÊchir...",
+ "TASK_ADDED": "TÃĸche ajoutÊe :",
+ "COMPLETING": "En cours d'achèvement :",
+ "NO_MORE_TASKS": "Plus de sous-tÃĸches pour :",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Texte copiÊ dans le presse-papiers",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Impossible de copier le texte dans le presse-papiers",
+ "RESTART_IF_IT_TAKES_X_SEC": "(RedÊmarrez si cela prend plus de 30 secondes)",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ CrÊez un agent en ajoutant un nom/objectif et en appuyant sur dÊployer !"
+}
diff --git a/next/public/locales/fr/chat.missing.json b/next/public/locales/fr/chat.missing.json
new file mode 100644
index 0000000..7f1a6a2
--- /dev/null
+++ b/next/public/locales/fr/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ CrÊez un agent en ajoutant un nom/objectif et en appuyant sur dÊployer ! \nEssayez nos exemples ci-dessous !",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "\" non !\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/fr/common.json b/next/public/locales/fr/common.json
new file mode 100644
index 0000000..5d19717
--- /dev/null
+++ b/next/public/locales/fr/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Ajout de tÃĸche",
+ "AGENTGPT_DOCUMENTATION": "Documentation d'AgentGPT",
+ "CLOSE": "Fermer",
+ "CONTINUE": "Continuer",
+ "COPIED_TO_CLIPBOARD": "CopiÊ dans le presse-papier! đ",
+ "COPY": "Copier",
+ "CREATE_AN_AGENT_DESCRIPTION": "CrÊez un agent en ajoutant un nom/objectif et en appuyant sur dÊployer !",
+ "CURRENT_TASKS": "TÃĸches actuelles",
+ "EXECUTING": "ExÊcution",
+ "EXPORT": "Exporter",
+ "IMAGE": "Image",
+ "LOOP": "Boucle",
+ "PAUSED": "En pause",
+ "RESET": "RÊinitialiser",
+ "RUNNING": "En cours",
+ "SAVE": "Enregistrer",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Pour obtenir plus d'informations sur AgentGPT, sa feuille de route, etc., visitez le lien suivant",
+ "create-a-comprehensive-report-of-the-nike-company": "CrÊer un rapport complet sur la sociÊtÊ Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Si vous rencontrez des problèmes, rendez-vous sur notre",
+ "plan-a-detailed-trip-to-hawaii": "Planifiez un voyage dÊtaillÊ à Hawaï.",
+ "platformergpt": "PlateformeGPT đŽ",
+ "researchgpt": "RechercheGPT đ",
+ "travelgpt": "VoyageGPT đ´",
+ "web-search": "recherche Internet"
+}
diff --git a/next/public/locales/fr/drawer.json b/next/public/locales/fr/drawer.json
new file mode 100644
index 0000000..469329e
--- /dev/null
+++ b/next/public/locales/fr/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Compte",
+ "HELP_BUTTON": "Aide",
+ "MY_AGENTS": "Mes agents",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Vous devez d'abord crÊer et enregistrer votre premier agent avant que quelque chose ne s'affiche ici!",
+ "SETTINGS_BUTTON": "Paramètres",
+ "SIGN_IN": "Se connecter",
+ "SIGN_IN_NOTICE": "Connectez-vous pour enregistrer vos agents et gÊrer votre compte!",
+ "SIGN_OUT": "Se dÊconnecter",
+ "SUPPORT_BUTTON": "Soutien",
+ "USER_IMAGE": "Image d'utilisateur"
+}
diff --git a/next/public/locales/fr/errors.json b/next/public/locales/fr/errors.json
new file mode 100644
index 0000000..e1ef763
--- /dev/null
+++ b/next/public/locales/fr/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ERREUR lors de l'accès à la clÊ d'API OpenAI. Veuillez vÊrifier la clÊ d'API ou rÊessayer ultÊrieurement.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ERREUR lors de l'ajout de tÃĸches supplÊmentaires. Il est possible que notre modèle ne puisse pas gÊrer la rÊponse et ait gÊnÊrÊ cette erreur. Continuer...",
+ "RATE_LIMIT_EXCEEDED": "Vous avez atteint le nombre maximal de requÃĒtes ! Veuillez ralentir...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Cet agent a atteint le nombre maximal de boucles exÊcutables. Pour sauver votre porte-monnaie, cet agent s'arrÃĒte maintenant... Le nombre maximal de boucles d'exÊcution de l'agent peut ÃĒtre configurÊ dans les paramètres.",
+ "DEMO_LOOPS_REACHED": "DÊsolÊ, puisqu'il s'agit d'une application de dÊmonstration, nous ne pouvons pas faire fonctionner les agents pendant une pÊriode prolongÊe. Note : si vous souhaitez des exÊcutions plus longues, veuillez fournir une clÊ API personnalisÊe dans les Paramètres. ArrÃĒt...",
+ "AGENT_MANUALLY_SHUT_DOWN": "L'agent a ÊtÊ arrÃĒtÊ manuellement.",
+ "ALL_TASKS_COMPLETETD": "Toutes les tÃĸches ont ÊtÊ terminÊes. ArrÃĒt...",
+ "ERROR_API_KEY_QUOTA": "ERREUR lors de l'utilisation de la clÊ API OpenAI. Vous avez dÊpassÊ votre quota actuel, veuillez vÊrifier vos informations de facturation.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ERREUR : Votre clÊ API OpenAI ne dispose pas d'un accès à GPT-4. Vous devez d'abord vous inscrire sur la liste d'attente OpenAI. (Ceci est diffÊrent de ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ERREUR lors de la rÊcupÊration des tÃĸches initiales. RÊessayez, reformulez l'objectif de l'agent de manière plus claire ou modifiez-le de manière à ce qu'il convienne à notre modèle. ArrÃĒt...",
+ "INVALID_OPENAI_API_KEY": "ERREUR clÊ API OpenAI invalide"
+}
diff --git a/next/public/locales/fr/help.json b/next/public/locales/fr/help.json
new file mode 100644
index 0000000..d26ca47
--- /dev/null
+++ b/next/public/locales/fr/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Documentation d'AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Suivez notre parcours ci-dessous :",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interaction avec les sites Web et les personnes đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "permet de configurer et d'exÊcuter des agents d'IA autonomes dans votre navigateur. Nommez votre agent d'IA personnalisÊ et dÊfinissez son objectif. L'agent d'IA tentera d'atteindre l'objectif dÊfini en crÊant des tÃĸches, en les exÊcutant, puis en Êvaluant les rÊsultats đ",
+ "LONG_TERM_MEMORY": "MÊmoire à long terme đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Cette plateforme est actuellement en version bÃĒta, nous travaillons actuellement sur les fonctionnalitÊs suivantes:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Pour en savoir plus sur AgentGPT, sa feuille de route, sa FAQ, etc., visitez le",
+ "WEB_BROWSING": "Navigation Web đ",
+ "WELCOME_TO_AGENT_GPT": "Bienvenue sur AgentGPT"
+}
diff --git a/next/public/locales/fr/indexPage.json b/next/public/locales/fr/indexPage.json
new file mode 100644
index 0000000..c273d6d
--- /dev/null
+++ b/next/public/locales/fr/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "BÊta",
+ "HEADING_DESCRIPTION": "Assembler, configurer et dÊployer des agents d'IA autonomes dans votre navigateur.",
+ "AGENT_NAME": "Nom",
+ "LABEL_AGENT_GOAL": "Objectif",
+ "PLACEHOLDER_AGENT_GOAL": "Rendre le monde meilleur",
+ "BUTTON_DEPLOY_AGENT": "ExÊcuter l'agent",
+ "BUTTON_STOP_AGENT": "ArrÃĒter l'agent"
+}
diff --git a/next/public/locales/fr/languages.json b/next/public/locales/fr/languages.json
new file mode 100644
index 0000000..f34c924
--- /dev/null
+++ b/next/public/locales/fr/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Anglais",
+ "FRENCH": "Français",
+ "SPANISH": "Espagnol",
+ "GERMAN": "Allemand",
+ "JAPANESE": "Japonais",
+ "KOREAN": "CorÊen",
+ "CHINESE": "Chinois",
+ "PORTUGEES": "Portugais",
+ "ITALIAN": "Italien",
+ "DUTCH": "NÊerlandais",
+ "POLSKI": "Polonais",
+ "HUNGARIAN": "Hongrois",
+ "ROMANIAN": "Roumain",
+ "SLOVAK": "Slovaque"
+}
diff --git a/next/public/locales/fr/settings.json b/next/public/locales/fr/settings.json
new file mode 100644
index 0000000..a1bd027
--- /dev/null
+++ b/next/public/locales/fr/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Paramètres avancÊs",
+ "API_KEY": "ClÊ API",
+ "AUTOMATIC_MODE": "Mode automatique",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Par dÊfaut) : L'agent exÊcute automatiquement chaque tÃĸche.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Contrôle le nombre maximal de jetons utilisÊs dans chaque appel API (une valeur plus ÊlevÊe produit des rÊponses plus dÊtaillÊes mais plus coÃģteuses).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Contrôle le nombre maximal de boucles exÊcutÊes par l'agent (une valeur plus ÊlevÊe entraÎne plus d'appels API).",
+ "GET_YOUR_OWN_APIKEY": "Obtenez votre propre clÊ API OpenAI",
+ "HERE": "ici",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Ici, vous pouvez ajouter votre clÊ API OpenAI. Cela signifie que vous devrez payer pour utiliser votre propre jeton OpenAI, mais vous aurez un accès accru à ChatGPT ! Vous pouvez Êgalement sÊlectionner n'importe quel modèle proposÊ par OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Des valeurs plus ÊlevÊes rendent la sortie plus alÊatoire, tandis que des valeurs plus basses la rendent plus ciblÊe et prÊcise.",
+ "INFO_TO_USE_GPT4": "Pour utiliser le modèle GPT-4, vous devez Êgalement fournir une clÊ API. Vous pouvez l'obtenir",
+ "INVALID_OPENAI_API_KEY": "ClÊ API invalide !",
+ "LABEL_MODE": "Mode",
+ "LABEL_MODEL": "Modèle",
+ "LANG": "Langue",
+ "LINK": "Demande de clÊ API",
+ "LOOP": "Boucle",
+ "MUST_CONNECT_CREDIT_CARD": "Remarque : Vous devez connecter une carte de crÊdit à votre compte",
+ "NOTE_API_KEY_USAGE": "Cette clÊ est utilisÊe uniquement dans la session de travail actuelle du navigateur.",
+ "NOTE_TO_GET_OPENAI_KEY": "REMARQUE : Pour obtenir une clÊ API, vous devez vous inscrire à un compte OpenAI en suivant le lien ci-dessous :",
+ "PAUSE": "Pause",
+ "PAUSE_MODE": "Mode pause",
+ "PAUSE_MODE_DESCRIPTION": "L'agent fait une pause après chaque groupe de tÃĸches.",
+ "PENAI_API_KEY": "ClÊ API OpenAI invalide",
+ "PLAY": "Lire",
+ "SETTINGS_DIALOG_HEADER": "Paramètres â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(L'abonnement ChatGPT Plus ne fonctionnera pas)",
+ "TEMPERATURE": "TempÊrature",
+ "TOKENS": "Jetons"
+}
diff --git a/next/public/locales/hr/chat.json b/next/public/locales/hr/chat.json
new file mode 100644
index 0000000..07dd6bc
--- /dev/null
+++ b/next/public/locales/hr/chat.json
@@ -0,0 +1,17 @@
+{
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ DoÅživljavamo iznimno velik promet, oÄekujte kaÅĄnjenja i probleme ako ne koristite svoj vlastiti API kljuÄ đ¨",
+ "CREATE_AN_AGENT_DESCRIPTION": "Kreirajte agenta dodavanjem imena/cilja i klikom na deploy!",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ MoÅžete koristiti svoj vlastiti OpenAI API kljuÄ u kartici postavki za poveÄanje limita!",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Pomozite u napretku AgentGPT-a. đī¸",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Molimo razmotrite sponzoriranje projekta na GitHubu.",
+ "SUPPORT_NOW": "PodrÅžite odmah đ",
+ "EMBARKING_ON_NEW_GOAL": "KreÄe se u ostvarivanje novog cilja:",
+ "THINKING": "RazmiÅĄljam...",
+ "TASK_ADDED": "Dodana zadaÄa:",
+ "COMPLETING": "DovrÅĄavanje:",
+ "NO_MORE_TASKS": "Nema viÅĄe pod-zadataka za:",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Tekst kopiran u meÄuspremnik",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nije moguÄe kopirati tekst u meÄuspremnik",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Ponovo pokrenite ako ovo traje viÅĄe od 30 sekundi)",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Izradite agenta dodavanjem imena/cilja i pritiskom na Deploy!"
+}
diff --git a/next/public/locales/hr/chat.missing.json b/next/public/locales/hr/chat.missing.json
new file mode 100644
index 0000000..f9157a7
--- /dev/null
+++ b/next/public/locales/hr/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Izradite agenta dodavanjem imena/cilja i pritiskom na Deploy! \nIsprobajte naÅĄe primjere u nastavku!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Kreirajte agenta pridanÃm mena a cieÄža i kliknite na tipku \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ Izradite agenta, dodajte ime i Äeliju, a zatim pritisnite gumb \"Zapusti agenta!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ Stvorite agenta, dodajte ime i poruku, a zatim kliknite gumb \"ZakaÅži agenta!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/hr/common.json b/next/public/locales/hr/common.json
new file mode 100644
index 0000000..410a11c
--- /dev/null
+++ b/next/public/locales/hr/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Dodavanje zadatka",
+ "AGENTGPT_DOCUMENTATION": "Dokumentacija AgentGPT-a",
+ "CLOSE": "Zatvoriti",
+ "CONTINUE": "Nastaviti",
+ "COPIED_TO_CLIPBOARD": "Kopirano u meÄuspremnik! đ",
+ "COPY": "Kopirati",
+ "CREATE_AN_AGENT_DESCRIPTION": "Napravite agenta tako da dodate ime/cilj i pritisnete Deploy!",
+ "CURRENT_TASKS": "Trenutni zadaci",
+ "EXECUTING": "IzvrÅĄavanje",
+ "EXPORT": "Izvoz",
+ "IMAGE": "Slika",
+ "LOOP": "Petlja",
+ "PAUSED": "Pauzirano",
+ "RESET": "Resetiraj",
+ "RUNNING": "TrÄanje",
+ "SAVE": "UÅĄtedjeti",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Da biste dobili viÅĄe informacija o AgentGPT-u, njegovom Planu, itd., posjetite sljedeÄu poveznicu",
+ "create-a-comprehensive-report-of-the-nike-company": "Napravite iscrpno izvjeÅĄÄe tvrtke Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Ako imate problema, obratite se naÅĄem",
+ "plan-a-detailed-trip-to-hawaii": "Isplanirajte detaljno putovanje na Havaje.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "ResearchGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "Internet pretraga"
+}
diff --git a/next/public/locales/hr/drawer.json b/next/public/locales/hr/drawer.json
new file mode 100644
index 0000000..9c5ecc9
--- /dev/null
+++ b/next/public/locales/hr/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "RaÄun",
+ "HELP_BUTTON": "PomoÄ",
+ "MY_AGENTS": "Moji agenti",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Prvo morate stvoriti i spremiti svoj prvi agent prije nego ÅĄto se ovdje pojavi iÅĄta!",
+ "SETTINGS_BUTTON": "Postavke",
+ "SIGN_IN": "Prijava",
+ "SIGN_IN_NOTICE": "Prijavite se da biste mogli spremiti svoje agente i upravljati svojim raÄunom!",
+ "SIGN_OUT": "Odjava",
+ "SUPPORT_BUTTON": "podrÅĄka",
+ "USER_IMAGE": "Slika korisnika"
+}
diff --git a/next/public/locales/hr/errors.json b/next/public/locales/hr/errors.json
new file mode 100644
index 0000000..0861509
--- /dev/null
+++ b/next/public/locales/hr/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "PogreÅĄka prilikom pristupa OpenAI API kljuÄu. Provjerite kljuÄ ili pokuÅĄajte kasnije.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "PogreÅĄka prilikom dodavanja dodatnih zadataka. MoguÄe je da naÅĄ model ne moÅže obraditi odgovor i to je uzrokovalo ovu pogreÅĄku. Nastavljam...",
+ "RATE_LIMIT_EXCEEDED": "Dosegli ste maksimalni broj upita! Molimo usporite...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Ovaj agent je dosegnuo maksimalni broj moguÄih izvrÅĄavanja. Kako biste saÄuvali novac, ovaj Äe agent sada prestati raditi... Maksimalni broj izvrÅĄavanja agenta moguÄe je konfigurirati u postavkama.",
+ "DEMO_LOOPS_REACHED": "ÅŊao nam je, ali buduÄi da je ovo demo aplikacija, ne moÅžemo izvoditi rad agenata predugo. Napomena: Ako Åželite dulje izvrÅĄavanje, molimo unesite vlastiti API kljuÄ u Postavkama. Prestajem raditi...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agent je ruÄno zaustavljen.",
+ "ALL_TASKS_COMPLETETD": "Svi zadaci su zavrÅĄeni. Zaustavljam...",
+ "ERROR_API_KEY_QUOTA": "PogreÅĄka pri koriÅĄtenju OpenAI API kljuÄa. PremaÅĄili ste trenutnu kvotu, molimo provjerite svoje fakturiranje.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "POGREÅ KA: VaÅĄ OpenAI API kljuÄ nema pristup GPT-4. Prvo se morate prijaviti na OpenAI Äekalici. (Ovo se razlikuje od ChatGPT Plus-a)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "PogreÅĄka prilikom preuzimanja poÄetnih zadataka. PokuÅĄajte ponovno, jasnije definirajte cilj agenta ili ga prilagodite kako bi odgovarao naÅĄem modelu. Zaustavljam...",
+ "INVALID_OPENAI_API_KEY": "POGREÅ KA nevaÅžeÄi OpenAI API kljuÄ"
+}
diff --git a/next/public/locales/hr/help.json b/next/public/locales/hr/help.json
new file mode 100644
index 0000000..0f81168
--- /dev/null
+++ b/next/public/locales/hr/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Dokumentacija AgentGPT-a",
+ "FOLLOW_THE_JOURNEY": "Pratite naÅĄe putovanje u nastavku:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interakcija s web stranicama i ljudima đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "omoguÄuje vam konfiguriranje i pokretanje samostalnih AI agenata u vaÅĄem pregledniku. Nazovite svoj prilagoÄeni AI agent i odredite njegov cilj. AI agent Äe pokuÅĄati postiÄi odreÄeni cilj stvaranjem zadataka, izvrÅĄavanjem zadataka, a zatim procjenom rezultata đ",
+ "LONG_TERM_MEMORY": "DugoroÄna memorija đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Ova platforma trenutno je u beta verziji, trenutno radimo na sljedeÄem:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Da biste saznali viÅĄe o AgentGPT-u, njegovom planu, Äesto postavljanim pitanjima itd., posjetite",
+ "WEB_BROWSING": "Web pregledavanje đ",
+ "WELCOME_TO_AGENT_GPT": "DobrodoÅĄli u AgentGPT"
+}
diff --git a/next/public/locales/hr/indexPage.json b/next/public/locales/hr/indexPage.json
new file mode 100644
index 0000000..38d1a2d
--- /dev/null
+++ b/next/public/locales/hr/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Sastavite, konfigurirajte i instalirajte autonomne AI agente u svom pregledniku.",
+ "AGENT_NAME": "Ime",
+ "LABEL_AGENT_GOAL": "Cilj",
+ "PLACEHOLDER_AGENT_GOAL": "UÄinite svijet boljim mjestom",
+ "BUTTON_DEPLOY_AGENT": "Pokreni agenta",
+ "BUTTON_STOP_AGENT": "Zaustavi agenta"
+}
diff --git a/next/public/locales/hr/languages.json b/next/public/locales/hr/languages.json
new file mode 100644
index 0000000..4ed92e1
--- /dev/null
+++ b/next/public/locales/hr/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Engleski",
+ "FRENCH": "Francuski",
+ "SPANISH": "Å panjolski",
+ "GERMAN": "NjemaÄki",
+ "JAPANESE": "Japanski",
+ "KOREAN": "Korejski",
+ "CHINESE": "Kineski",
+ "PORTUGEES": "Portugalski",
+ "ITALIAN": "Talijanski",
+ "DUTCH": "Nizozemski",
+ "POLSKI": "Poljski",
+ "HUNGARIAN": "MaÄarski",
+ "ROMANIAN": "Rumunjski",
+ "SLOVAK": "SlovaÄki"
+}
diff --git a/next/public/locales/hr/settings.json b/next/public/locales/hr/settings.json
new file mode 100644
index 0000000..6b9e8f0
--- /dev/null
+++ b/next/public/locales/hr/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Napredne postavke",
+ "API_KEY": "API kljuÄ",
+ "AUTOMATIC_MODE": "Automatski naÄin rada",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Zadano): Agent automatski izvrÅĄava svaki zadatak.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Kontrolira maksimalni broj tokena koriÅĄtenih u svakom pojedinom API pozivu (viÅĄa vrijednost rezultira detaljnijim odgovorima, ali je skuplje).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Kontrolira maksimalni broj petlji koje Äe agent pokrenuti (viÅĄa vrijednost rezultira viÅĄe API poziva).",
+ "GET_YOUR_OWN_APIKEY": "Obtenez votre propre clÊ API OpenAI",
+ "HERE": "ovdje",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Ovdje moÅžete dodati svoj OpenAI API kljuÄ. To znaÄi da Äete morati platiti za koriÅĄtenje vlastitog OpenAI tokena, ali Äete dobiti veÄi pristup ChatGPT-u! TakoÄer moÅžete odabrati bilo koji model koji nudi OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "ViÅĄe vrijednosti Äine izlaz viÅĄe sluÄajnim, dok niÅže vrijednosti Äine izlaz usredotoÄenijim i preciznijim.",
+ "INFO_TO_USE_GPT4": "Za koriÅĄtenje GPT-4 modela potreban je i API kljuÄ. MoÅžete ga nabaviti",
+ "INVALID_OPENAI_API_KEY": "ClÊ API invalide !",
+ "LABEL_MODE": "Mode",
+ "LABEL_MODEL": "Model",
+ "LANG": "Jezik",
+ "LINK": "Zahtjev za API kljuÄ",
+ "LOOP": "Petlja",
+ "MUST_CONNECT_CREDIT_CARD": "Napomena: Morate povezati kreditnu karticu s vaÅĄim raÄunom",
+ "NOTE_API_KEY_USAGE": "Ovaj kljuÄ se koristi samo u trenutnoj sesiji preglednika.",
+ "NOTE_TO_GET_OPENAI_KEY": "NAPOMENA: Da biste dobili API kljuÄ, morate se registrirati za OpenAI raÄun na sljedeÄoj poveznici:",
+ "PAUSE": "Pauza",
+ "PAUSE_MODE": "NaÄin pauziranja",
+ "PAUSE_MODE_DESCRIPTION": "Agent se pauzira nakon svakog seta zadataka.",
+ "PENAI_API_KEY": "NevaÅžeÄi OpenAI API kljuÄ",
+ "PLAY": "Reproduciraj",
+ "SETTINGS_DIALOG_HEADER": "Postavke â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ChatGPT Plus pretplata neÄe raditi)",
+ "TEMPERATURE": "Temperatura",
+ "TOKENS": "Tokeni"
+}
diff --git a/next/public/locales/hu/chat.json b/next/public/locales/hu/chat.json
new file mode 100644
index 0000000..00851db
--- /dev/null
+++ b/next/public/locales/hu/chat.json
@@ -0,0 +1,17 @@
+{
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ KivÊtelesen nagy forgalmat tapasztalunk, vÃĄrhatÃŗ kÊsÊsek Ês hibÃĄk, ha nem a sajÃĄt API-kulcsÃĄt hasznÃĄlja đ¨",
+ "CREATE_AN_AGENT_DESCRIPTION": "Hozzon lÊtre egy ÃŧgynÃļkÃļt a nÊv Ês a cÊl hozzÃĄadÃĄsÃĄval, majd kattintson az \"ÃgynÃļk indÃtÃĄsa!\" gombra",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ SajÃĄt OpenAI API-kulcsot adhat meg a beÃĄllÃtÃĄsok fÃŧlÃļn az emelt korlÃĄtok ÊrdekÊben!",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ SegÃtse az AgentGPT fejlesztÊsÊt. đī¸",
+ "CONSIDER_SPONSORING_ON_GITHUB": "TÃĄmogasson a projektet a GitHub-on keresztÃŧl.",
+ "SUPPORT_NOW": "TÃĄmogatÃĄs most đ",
+ "EMBARKING_ON_NEW_GOAL": "Ãj cÊl elÊrÊse:",
+ "THINKING": "GondolkodÃĄs...",
+ "TASK_ADDED": "Feladat hozzÃĄadva:",
+ "COMPLETING": "BefejezÊs:",
+ "NO_MORE_TASKS": "Nincsenek tovÃĄbbi alfeladatok ehhez:",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "SzÃļveg mÃĄsolva a vÃĄgÃŗlapra",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nem sikerÃŧlt a szÃļveg vÃĄgÃŗlapra mÃĄsolÃĄsa",
+ "RESTART_IF_IT_TAKES_X_SEC": "(FrissÃtse az oldalt vagy indÃtsa Ãējra az ÃŧgynÃļkÃļt manuÃĄlisan, ha ez tÃļbb mint 30 mÃĄsodpercig tart)",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Hozzon lÊtre egy ÃŧgynÃļkÃļt nÊv/cÊl hozzÃĄadÃĄsÃĄval, Ês a telepÃtÊs gombra kattintva!"
+}
diff --git a/next/public/locales/hu/chat.missing.json b/next/public/locales/hu/chat.missing.json
new file mode 100644
index 0000000..a2ec9da
--- /dev/null
+++ b/next/public/locales/hu/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Hozzon lÊtre egy ÃŧgynÃļkÃļt nÊv/cÊl hozzÃĄadÃĄsÃĄval, Ês a telepÃtÊs gombra kattintva! \nPrÃŗbÃĄld ki az alÃĄbbi pÊldÃĄinkat!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/hu/common.json b/next/public/locales/hu/common.json
new file mode 100644
index 0000000..f195209
--- /dev/null
+++ b/next/public/locales/hu/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Feladat hozzÃĄadÃĄsa",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT DokumentÃĄciÃŗ",
+ "CLOSE": "BezÃĄrÃĄs",
+ "CONTINUE": "FolytatÃĄs",
+ "COPIED_TO_CLIPBOARD": "VÃĄgÃŗlapra mÃĄsolva đ",
+ "COPY": "MÃĄsolÃĄs",
+ "CREATE_AN_AGENT_DESCRIPTION": "Hozzon lÊtre egy ÃŧgynÃļkÃļt egy nÊv / cÊl hozzÃĄadÃĄsÃĄval, Ês nyomja meg a telepÃtÊst!",
+ "CURRENT_TASKS": "Jelenlegi feladatok",
+ "EXECUTING": "Feladat vÊgrehajtÃĄsa",
+ "EXPORT": "ExportÃĄlÃĄs",
+ "IMAGE": "KÊp",
+ "LOOP": "KÃļr",
+ "PAUSED": "SzÃŧneteltetve",
+ "RESET": "VisszaÃĄllÃtÃĄs",
+ "RUNNING": "Folyamatban",
+ "SAVE": "MentÊs",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Hogy tÃļbbet megtudjon az AgentGPT-rÅl lÃĄtogasson el a",
+ "create-a-comprehensive-report-of-the-nike-company": "KÊszÃtsen ÃĄtfogÃŗ jelentÊst a Nike cÊgrÅl",
+ "if-you-are-facing-issues-please-head-over-to-our": "Ha problÊmÃĄi vannak, kÊrjÃŧk, lÃĄtogasson el hozzÃĄnk",
+ "plan-a-detailed-trip-to-hawaii": "Tervezz meg egy rÊszletes utazÃĄst Hawaiira.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "ResearchGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "Webes keresÊs"
+}
diff --git a/next/public/locales/hu/drawer.json b/next/public/locales/hu/drawer.json
new file mode 100644
index 0000000..4a55613
--- /dev/null
+++ b/next/public/locales/hu/drawer.json
@@ -0,0 +1,12 @@
+{
+ "HELP_BUTTON": "SegÃtsÊg",
+ "SETTINGS_BUTTON": "BeÃĄllÃtÃĄsok",
+ "SUPPORT_BUTTON": "TÃĄmogatÃĄs",
+ "MY_AGENTS": "Az Ên ÃŧgynÃļkeim",
+ "SIGN_IN_NOTICE": "Jelentkezzen be, hogy menthesse az ÃŧgynÃļkeit, Ês kezelhesse a fiÃŗkjÃĄt!",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ElÅszÃļr lÊtre kell hoznia Ês mentenie az elsÅ ÃŧgynÃļkÊt, mielÅtt itt valami megjelenne!",
+ "SIGN_IN": "BejelentkezÊs",
+ "SIGN_OUT": "KijelentkezÊs",
+ "ACCOUNT" : "FiÃŗk",
+ "USER_IMAGE": "FelhasznÃĄlÃŗi kÊp"
+}
diff --git a/next/public/locales/hu/errors.json b/next/public/locales/hu/errors.json
new file mode 100644
index 0000000..29a21eb
--- /dev/null
+++ b/next/public/locales/hu/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "HIBA a OpenAI API-hoz valÃŗ csatlakozÃĄs kÃļzben. KÊrjÃŧk, ellenÅrizze az API-kulcsot, vagy prÃŗbÃĄlja meg kÊsÅbb.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "HIBA a tovÃĄbbi feladat(ok) hozzÃĄadÃĄsa kÃļzben. Lehet, hogy a modellÃŧnk nem tudja kezelni a vÃĄlaszt Ês az eredmÊnyezte ezt. FolytatÃĄs...",
+ "RATE_LIMIT_EXCEEDED": "ElÊrte a maximÃĄlis lekÊrdezÊsek szÃĄmÃĄt! KÊrjÃŧk, lassÃtson le...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Ez az ÃŧgynÃļk elÊrte a maximÃĄlis futtathatÃŗ kÃļreinek a szÃĄmÃĄt. Hogy megmentse a pÊnztÃĄrcÃĄjÃĄt, ez az ÃŧgynÃļk most leÃĄll... Az ÃŧgynÃļk futÃĄsi kÃļreinek a maximÃĄlis szÃĄmÃĄt az beÃĄllÃtÃĄsokban lehet konfigurÃĄlni.",
+ "DEMO_LOOPS_REACHED": "SajnÃĄljuk, de mivel ez egy bemutatÃŗ alkalmazÃĄs Ãgy nem tudjuk tÃēl hosszÃē ideig futtatni az ÃŧgynÃļkeit. MegjegyzÊs: ha hosszabb futtatÃĄsokat szeretne, kÊrjÃŧk, adjon meg egy sajÃĄt API-kulcsot a BeÃĄllÃtÃĄsokban. LeÃĄllÃtÃĄs...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Az ÃŧgynÃļk manuÃĄlisan leÃĄllÃtva.",
+ "ALL_TASKS_COMPLETETD": "Minden feladat befejezÅdÃļtt. LeÃĄllÃtÃĄs...",
+ "ERROR_API_KEY_QUOTA": "HIBA az OpenAI API-kulcs hasznÃĄlatakor. TÃēllÊpte jelenlegi kvÃŗtÃĄjÃĄt, kÊrjÃŧk, ellenÅrizze szÃĄmlÃĄzÃĄsi adatait.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "HIBA: Az Ãn OpenAI API kulcsa nem rendelkezik GPT-4 hozzÃĄfÊrÊssel. ElÅszÃļr jelentkeznie kell az OpenAI vÃĄrÃŗlistÃĄjÃĄn. (Ez eltÊr a ChatGPT Plus-tÃŗl)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "HIBA az alapfeladatok lekÊrdezÊse kÃļzben. PrÃŗbÃĄlja Ãējra, fogalmazza meg az ÃŧgynÃļk cÊljÃĄt vilÃĄgosabban, vagy mÃŗdosÃtsa a oly mÃŗdon, hogy az megfeleljen a modellÃŧnk szÃĄmÃĄra. LeÃĄllÃtÃĄs...",
+ "INVALID_OPENAI_API_KEY": "HIBA ÊrvÊnytelen OpenAI API-kulcs"
+}
diff --git a/next/public/locales/hu/help.json b/next/public/locales/hu/help.json
new file mode 100644
index 0000000..a6f02a7
--- /dev/null
+++ b/next/public/locales/hu/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT dokumentÃĄciÃŗja",
+ "FOLLOW_THE_JOURNEY": "KÃļvessen minket az alÃĄbbi utakon:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "InterakciÃŗ a weboldalakkal Ês az emberekkel đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "lehetÅvÊ teszi az Ãn szÃĄmÃĄra, hogy konfigurÃĄlja Ês futtassa az ÃļnÃĄllÃŗ MI ÃŧgynÃļkÃļket a bÃļngÊszÅjÊn keresztÃŧl. Nevezze el az egyÊni MI ÃŧgynÃļkÊt, Ês hatÃĄrozza meg a cÊljÃĄt. Az MI ÃŧgynÃļk MegkÃsÊrli elÊrni a meghatÃĄrozott cÊlt azzal, hogy feladatokra hoz lÊtre, vÊgrehajtja Åket, majd kiÊrtÊkeli azok eredmÊnyeit đ",
+ "LONG_TERM_MEMORY": "HosszÃē tÃĄvÃē memÃŗria đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Ez a platform jelenleg bÊta verziÃŗban van, jelenleg a kÃļvetkezÅkÃļn dolgozunk:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Ha tÃļbbet szeretne megtudni az AgentGPT-rÅl, annak ÃŧtemtervÊrÅl, GYIK-rÃŗl stb., lÃĄtogasson el a kÃļvetkezÅ oldalra",
+ "WEB_BROWSING": "Webes bÃļngÊszÊs đ",
+ "WELCOME_TO_AGENT_GPT": "ÃdvÃļzÃļljÃŧk az AgentGPT-nÊl"
+}
diff --git a/next/public/locales/hu/indexPage.json b/next/public/locales/hu/indexPage.json
new file mode 100644
index 0000000..bbd6c14
--- /dev/null
+++ b/next/public/locales/hu/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "BÊta",
+ "HEADING_DESCRIPTION": "ÃsszeÃĄllÃt, konfigurÃĄl Ês telepÃt autonÃŗm MI ÃŧgynÃļkÃļket a bÃļngÊszÅjÊben.",
+ "AGENT_NAME": "NÊv",
+ "LABEL_AGENT_GOAL": "CÊl",
+ "PLACEHOLDER_AGENT_GOAL": "Tedd egy jobb hellyÊ a vilÃĄgot",
+ "BUTTON_DEPLOY_AGENT": "ÃgynÃļk futtatÃĄsa",
+ "BUTTON_STOP_AGENT": "ÃgynÃļk leÃĄllÃtÃĄsa"
+}
diff --git a/next/public/locales/hu/languages.json b/next/public/locales/hu/languages.json
new file mode 100644
index 0000000..97edf3d
--- /dev/null
+++ b/next/public/locales/hu/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Angol",
+ "FRENCH": "Francia",
+ "SPANISH": "Spanyol",
+ "GERMAN": "NÊmet",
+ "JAPANESE": "JapÃĄn",
+ "KOREAN": "Koreai",
+ "CHINESE": "KÃnai",
+ "PORTUGEES": "PortugÃĄl",
+ "ITALIAN": "Olasz",
+ "DUTCH": "Holland",
+ "POLSKI": "Lengyel",
+ "HUNGARIAN": "Magyar",
+ "ROMANIAN": "RomÃĄn",
+ "SLOVAK": "SzlovÃĄk"
+}
diff --git a/next/public/locales/hu/settings.json b/next/public/locales/hu/settings.json
new file mode 100644
index 0000000..f78ef2a
--- /dev/null
+++ b/next/public/locales/hu/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "HaladÃŗ beÃĄllÃtÃĄsok",
+ "API_KEY": "Kulcs",
+ "AUTOMATIC_MODE": "Automatikus mÃŗd",
+ "AUTOMATIC_MODE_DESCRIPTION": "(AlapÊrtelmezett): Az ÃŧgynÃļk automatikusan vÊgrehajt minden feladatot.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "SzabÃĄlyozza a minden egyes API-hÃvÃĄsban hasznÃĄlt tokenek maximÃĄlis szÃĄmÃĄt (magasabb ÊrtÊk rÊszletesebb vÃĄlaszokat eredmÊnyez, de tÃļbbe kerÃŧl).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "SzabÃĄlyozza az ÃŧgynÃļk ÃĄltal futtatott ciklusok maximÃĄlis szÃĄmÃĄt (magasabb ÊrtÊk tÃļbb API-hÃvÃĄst eredmÊnyez).",
+ "GET_YOUR_OWN_APIKEY": "Szerezze be sajÃĄt OpenAI API kulcsÃĄt",
+ "HERE": "itt",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Itt adhatja hozzÃĄ az OpenAI API-kulcsÃĄt. Ez azt jelenti, hogy sajÃĄt OpenAI token felhasznÃĄlÃĄsÃĄÃŠrt fizetnie kell, de nagyobb hozzÃĄfÊrÊst kap a ChatGPT-hez! TovÃĄbbÃĄ bÃĄrmely OpenAI ÃĄltal kÃnÃĄlt modellt is kivÃĄlaszthat.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Magasabb ÊrtÊkek tÃļbb vÊletlenszerÅąsÊget adnak a kimenetnek, mÃg alacsonyabb ÊrtÊkek fÃŗkuszÃĄltabbÃĄ Ês meghatÃĄrozottabbÃĄ teszik azt.",
+ "INFO_TO_USE_GPT4": "A GPT-4 modell hasznÃĄlatÃĄhoz szÃŧksÊges az API-kulcs megadÃĄsa is. Beszerezheti",
+ "INVALID_OPENAI_API_KEY": "ÃrvÊnytelen API kulcs!",
+ "LABEL_MODE": "MÃŗd",
+ "LABEL_MODEL": "Modell",
+ "LANG": "Nyelv",
+ "LINK": "API kulcs igÊnylÊse",
+ "LOOP": "Ciklus",
+ "MUST_CONNECT_CREDIT_CARD": "MegjegyzÊs: KreditkÃĄrtyÃĄt kell csatlakoztatnia a fiÃŗkjÃĄhoz",
+ "NOTE_API_KEY_USAGE": "Ez a kulcs csak az aktuÃĄlis bÃļngÊszÅi munkamenetben hasznÃĄlatos.",
+ "NOTE_TO_GET_OPENAI_KEY": "MEGJEGYZÃS: Az API-kulcs megszerzÊsÊhez regisztrÃĄlnia kell egy OpenAI-fiÃŗkot, amit a kÃļvetkezÅ hivatkozÃĄson tehet meg:",
+ "PAUSE": "SzÃŧnet",
+ "PAUSE_MODE": "SzÃŧnet mÃŗd",
+ "PAUSE_MODE_DESCRIPTION": "Az ÃŧgynÃļk szÃŧnetel minden feladatkÊszlet utÃĄn.",
+ "PENAI_API_KEY": "ÃrvÊnytelen OpenAI API-kulcs",
+ "PLAY": "LejÃĄtszÃĄs",
+ "SETTINGS_DIALOG_HEADER": "BeÃĄllÃtÃĄsok â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(A ChatGPT Plus elÅfizetÊs nem mÅąkÃļdik)",
+ "TEMPERATURE": "Temperametum",
+ "TOKENS": "Tokenek"
+}
diff --git a/next/public/locales/it/chat.json b/next/public/locales/it/chat.json
new file mode 100644
index 0000000..b32c070
--- /dev/null
+++ b/next/public/locales/it/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Completando:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Considera di sponsorizzare il progetto su GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Testo copiato negli appunti",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Impossibile copiare il testo negli appunti",
+ "CREATE_AN_AGENT_DESCRIPTION": "Crea un agente aggiungendo nome e obiettivo, quindi premi il pulsante \"Avvia agente!\"",
+ "EMBARKING_ON_NEW_GOAL": "Affrontando un nuovo obiettivo:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Stiamo riscontrando un traffico eccezionalmente elevato, si prevedono ritardi e errori se non si utilizza la propria chiave API đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Aiuta a sostenere lo sviluppo di AgentGPT. đī¸",
+ "NO_MORE_TASKS": "Non ci sono piÚ sottocompiti per questo:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Ricaricare la pagina o avviare manualmente l'agente se ciÃ˛ richiede piÚ di 30 secondi)",
+ "SUPPORT_NOW": "Supporto ora đ",
+ "TASK_ADDED": "Compito aggiunto:",
+ "THINKING": "Pensando...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ Ã possibile fornire la propria chiave API OpenAI nella scheda Impostazioni per ottenere limiti superiori!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Crea un agente aggiungendo un nome/target e premendo deploy!"
+}
diff --git a/next/public/locales/it/chat.missing.json b/next/public/locales/it/chat.missing.json
new file mode 100644
index 0000000..6130878
--- /dev/null
+++ b/next/public/locales/it/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Crea un agente aggiungendo un nome/obiettivo e premendo Distribuisci! \nProva i nostri esempi qui sotto!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° METŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ KNOPĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/it/common.json b/next/public/locales/it/common.json
new file mode 100644
index 0000000..7cf1ab0
--- /dev/null
+++ b/next/public/locales/it/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Aggiunta attività ",
+ "AGENTGPT_DOCUMENTATION": "Documentazione di AgentGPT",
+ "CLOSE": "Chiudi",
+ "CONTINUE": "Continua",
+ "COPIED_TO_CLIPBOARD": "Copiato negli appunti! đ",
+ "COPY": "Copia",
+ "CREATE_AN_AGENT_DESCRIPTION": "Crea un agente aggiungendo un nome/obiettivo e premendo Distribuisci!",
+ "CURRENT_TASKS": "Compiti attuali",
+ "EXECUTING": "Esecuzione",
+ "EXPORT": "Esporta",
+ "IMAGE": "Immagine",
+ "LOOP": "Ciclo continuo",
+ "PAUSED": "In pausa",
+ "RESET": "Ripristina",
+ "RUNNING": "In esecuzione",
+ "SAVE": "Salva",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Per ottenere maggiori informazioni su AgentGPT, la sua Roadmap, ecc., visita il seguente link",
+ "create-a-comprehensive-report-of-the-nike-company": "Creare un rapporto completo della società Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "In caso di problemi, vai al nostro",
+ "plan-a-detailed-trip-to-hawaii": "Pianifica un viaggio dettagliato alle Hawaii.",
+ "platformergpt": "Piattaforma GPT đŽ",
+ "researchgpt": "RicercaGPT đ",
+ "travelgpt": "ViaggiGPT đ´",
+ "web-search": "Ricerca sul web"
+}
diff --git a/next/public/locales/it/drawer.json b/next/public/locales/it/drawer.json
new file mode 100644
index 0000000..34ec208
--- /dev/null
+++ b/next/public/locales/it/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Account",
+ "HELP_BUTTON": "Aiuto",
+ "MY_AGENTS": "I miei agenti",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Prima di visualizzare qualcosa qui, devi creare e salvare il tuo primo agente!",
+ "SETTINGS_BUTTON": "Impostazioni",
+ "SIGN_IN": "Accedi",
+ "SIGN_IN_NOTICE": "Effettua l'accesso per salvare i tuoi agenti e gestire il tuo account!",
+ "SIGN_OUT": "Esci",
+ "SUPPORT_BUTTON": "Supporto",
+ "USER_IMAGE": "Immagine utente"
+}
diff --git a/next/public/locales/it/errors.json b/next/public/locales/it/errors.json
new file mode 100644
index 0000000..88ed50c
--- /dev/null
+++ b/next/public/locales/it/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ERRORE durante l'accesso alla chiave API di OpenAI. Controllare la chiave API o riprovare piÚ tardi.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ERRORE durante l'aggiunta di ulteriori compiti. Potrebbe essere che il nostro modello non riesca a gestire la risposta e ciÃ˛ abbia generato l'errore. Continua...",
+ "RATE_LIMIT_EXCEEDED": "Limite massimo di query raggiunto! Si prega di rallentare...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Questo agente ha raggiunto il numero massimo di cicli eseguibili. Per salvare il portafoglio, questo agente si fermerà ora... Il numero massimo di cicli di esecuzione dell'agente puÃ˛ essere configurato nelle impostazioni.",
+ "DEMO_LOOPS_REACHED": "Spiacente, poichÊ questa è un'applicazione demo, non possiamo far funzionare gli agenti per troppo tempo. Nota: se desideri eseguire cicli piÚ lunghi, fornisci una chiave API personalizzata nelle Impostazioni. Si ferma...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agente arrestato manualmente.",
+ "ALL_TASKS_COMPLETETD": "Tutti i compiti sono stati completati. Arresto...",
+ "ERROR_API_KEY_QUOTA": "ERRORE nell'uso della chiave API di OpenAI. Hai superato la tua quota corrente, controlla le tue informazioni di fatturazione.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ERRORE: la tua chiave API di OpenAI non ha accesso a GPT-4. Prima devi registrarti nella lista d'attesa di OpenAI. (CiÃ˛ differisce da ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ERRORE durante il recupero dei compiti iniziali. Riprova, formulando piÚ chiaramente l'obiettivo dell'agente o modificandolo in modo che sia conforme al nostro modello. Arresto...",
+ "INVALID_OPENAI_API_KEY": "ERRORE chiave API OpenAI non valida"
+}
\ No newline at end of file
diff --git a/next/public/locales/it/help.json b/next/public/locales/it/help.json
new file mode 100644
index 0000000..78171b4
--- /dev/null
+++ b/next/public/locales/it/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Documentazione di AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Seguici sui seguenti canali:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interazione con siti web e persone đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "consente di configurare e eseguire agenti di intelligenza artificiale autonomi nel proprio browser. Assegna un nome al tuo agente di intelligenza artificiale personalizzato e definisci il suo obiettivo. L'agente di intelligenza artificiale cercherà di raggiungere l'obiettivo specificato creando compiti, eseguendoli e valutando i risultati đ",
+ "LONG_TERM_MEMORY": "Memoria a lungo termine đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Questa piattaforma è attualmente in versione beta, al momento stiamo lavorando su:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Per saperne di piÚ su AgentGPT, la sua tabella di marcia, le domande frequenti, ecc., visita il",
+ "WEB_BROWSING": "Navigazione Web đ",
+ "WELCOME_TO_AGENT_GPT": "Benvenuti in AgentGPT"
+}
diff --git a/next/public/locales/it/indexPage.json b/next/public/locales/it/indexPage.json
new file mode 100644
index 0000000..e01f011
--- /dev/null
+++ b/next/public/locales/it/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Compila, configura e installa agenti AI autonomi nel tuo browser.",
+ "AGENT_NAME": "Nome",
+ "LABEL_AGENT_GOAL": "Obiettivo",
+ "PLACEHOLDER_AGENT_GOAL": "Rendi il mondo un posto migliore",
+ "BUTTON_DEPLOY_AGENT": "Esegui agente",
+ "BUTTON_STOP_AGENT": "Arresta agente"
+}
diff --git a/next/public/locales/it/languages.json b/next/public/locales/it/languages.json
new file mode 100644
index 0000000..cec8b40
--- /dev/null
+++ b/next/public/locales/it/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Inglese",
+ "FRENCH": "Francese",
+ "SPANISH": "Spagnolo",
+ "GERMAN": "Tedesco",
+ "JAPANESE": "Giapponese",
+ "KOREAN": "Coreano",
+ "CHINESE": "Cinese",
+ "PORTUGEES": "Portoghese",
+ "ITALIAN": "Italiano",
+ "DUTCH": "Olandese",
+ "POLSKI": "Polacco",
+ "HUNGARIAN": "Ungherese",
+ "ROMANIAN": "Rumeno",
+ "SLOVAK": "Slovacco"
+}
diff --git a/next/public/locales/it/settings.json b/next/public/locales/it/settings.json
new file mode 100644
index 0000000..e58a97d
--- /dev/null
+++ b/next/public/locales/it/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Impostazioni avanzate",
+ "API_KEY": "Chiave API",
+ "AUTOMATIC_MODE": "Modalità automatica",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Predefinito): L'agente esegue automaticamente ogni compito.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Controlla il numero massimo di token utilizzati in ogni chiamata API (un valore piÚ alto fornisce risposte piÚ dettagliate ma ha un costo maggiore).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Controlla il numero massimo di loop eseguiti dall'agente (un valore piÚ alto comporta piÚ chiamate API).",
+ "GET_YOUR_OWN_APIKEY": "Ottieni la tua chiave API OpenAI",
+ "HERE": "qui",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Qui puoi aggiungere la tua chiave API OpenAI. CiÃ˛ significa che dovrai pagare l'utilizzo dei tuoi token OpenAI, ma avrai un maggiore accesso a ChatGPT! Inoltre, puoi selezionare qualsiasi modello offerto da OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Valori piÚ alti rendono l'output piÚ casuale, mentre valori piÚ bassi lo rendono piÚ focalizzato e determinato.",
+ "INFO_TO_USE_GPT4": "Per utilizzare il modello GPT-4 è necessario fornire la chiave API. Puoi ottenerla",
+ "INVALID_OPENAI_API_KEY": "Chiave API non valida!",
+ "LABEL_MODE": "Modalità ",
+ "LABEL_MODEL": "Modello",
+ "LANG": "Lingua",
+ "LINK": "Richiesta chiave API",
+ "LOOP": "Loop",
+ "MUST_CONNECT_CREDIT_CARD": "Nota: Devi collegare una carta di credito al tuo account",
+ "NOTE_API_KEY_USAGE": "Questa chiave verrà utilizzata solo durante la sessione del browser corrente.",
+ "NOTE_TO_GET_OPENAI_KEY": "NOTA: Per ottenere la chiave API è necessario registrarsi per un account OpenAI, che puÃ˛ essere fatto al seguente link:",
+ "PAUSE": "Metti in pausa",
+ "PAUSE_MODE": "Modalità pausa",
+ "PAUSE_MODE_DESCRIPTION": "L'agente si mette in pausa dopo ogni insieme di compiti.",
+ "PENAI_API_KEY": "Chiave API OpenAI non valida",
+ "PLAY": "Riproduci",
+ "SETTINGS_DIALOG_HEADER": "Impostazioni â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(La sottoscrizione ChatGPT Plus non funzionerà )",
+ "TEMPERATURE": "Temperatura",
+ "TOKENS": "Token"
+}
diff --git a/next/public/locales/ja/chat.json b/next/public/locales/ja/chat.json
new file mode 100644
index 0000000..5a6f203
--- /dev/null
+++ b/next/public/locales/ja/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Completing:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Please consider sponsoring the project on GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Text copied to clipboard",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Unable to copy text to clipboard",
+ "CREATE_AN_AGENT_DESCRIPTION": "Create an agent by adding a name / goal, and hitting deploy!",
+ "EMBARKING_ON_NEW_GOAL": "æ°ããĒįŽæ¨ã¸ãŽįæīŧ",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ We are experiencing exceptional traffic, expect delays and failures if you do not use your own API keyđ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Help support the advancement of AgentGPT. đī¸",
+ "NO_MORE_TASKS": "No more subtasks for:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Restart if this takes more than 30 seconds)",
+ "SUPPORT_NOW": "Support now đ",
+ "TASK_ADDED": "čŋŊå ããããŋãšã¯:",
+ "THINKING": "čã...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ You can provide your own OpenAI API key in the settings tab for increased limits!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ åå/ãŋãŧã˛ãããčŋŊå ãããããã¤ãæŧããĻã¨ãŧã¸ã§ãŗããäŊæããĻãã ãã!"
+}
diff --git a/next/public/locales/ja/chat.missing.json b/next/public/locales/ja/chat.missing.json
new file mode 100644
index 0000000..d846bf1
--- /dev/null
+++ b/next/public/locales/ja/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ åå/įŽæ¨ãčŋŊå ããĻã¨ãŧã¸ã§ãŗããäŊæãããããã¤ãæŧããĻãã ãã!\näģĨä¸ãŽäžãčŠĻããĻãŋãĻãã ããã",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ°ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ 1 ã¤ãŽäģŖįãäŊæããååã¨įŽå°ãčŋŊå ããããŽåžããå¯å¨äģŖį!ã"
+}
diff --git a/next/public/locales/ja/common.json b/next/public/locales/ja/common.json
new file mode 100644
index 0000000..62a196c
--- /dev/null
+++ b/next/public/locales/ja/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "ãŋãšã¯ãŽčŋŊå ",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT ãŽãããĨãĄãŗã",
+ "CLOSE": "éãã",
+ "CONTINUE": "įļã",
+ "COPIED_TO_CLIPBOARD": "ã¯ãĒããããŧããĢãŗããŧããžããīŧ đ",
+ "COPY": "ãŗããŧ",
+ "CREATE_AN_AGENT_DESCRIPTION": "åå/įŽæ¨ãčŋŊå ããĻã¨ãŧã¸ã§ãŗããäŊæãããããã¤ãæŧããĻãã ãã!",
+ "CURRENT_TASKS": "įžå¨ãŽãŋãšã¯",
+ "EXECUTING": "åŽčĄä¸",
+ "EXPORT": "ã¨ã¯ãšããŧã",
+ "IMAGE": "įģå",
+ "LOOP": "ãĢãŧã",
+ "PAUSED": "ä¸æåæĸ",
+ "RESET": "ãĒãģãã",
+ "RUNNING": "é˛čĄä¸",
+ "SAVE": "äŋå",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPT ãããŽããŧãããããĒãŠãŽčŠŗį´°ãĢã¤ããĻã¯ãæŦĄãŽãĒãŗã¯ãĢãĸã¯ãģãšããĻãã ããã",
+ "create-a-comprehensive-report-of-the-nike-company": "ãã¤ãį¤žãŽå
æŦįãĒãŦããŧããäŊæãã",
+ "if-you-are-facing-issues-please-head-over-to-our": "åéĄãĢį´éĸããĻããå ´åã¯ã",
+ "plan-a-detailed-trip-to-hawaii": "ãã¯ã¤ã¸ãŽčŠŗį´°ãĒæ
čĄãč¨įģããžãã",
+ "platformergpt": "ããŠããããŠãŧããŧGPT đŽ",
+ "researchgpt": "ãĒãĩãŧãGPTđ",
+ "travelgpt": "ããŠããĢGPTđ´",
+ "web-search": "ãĻã§ãæ¤į´ĸ"
+}
diff --git a/next/public/locales/ja/drawer.json b/next/public/locales/ja/drawer.json
new file mode 100644
index 0000000..ee14e2e
--- /dev/null
+++ b/next/public/locales/ja/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "ãĸãĢãĻãŗã",
+ "HELP_BUTTON": "ããĢã",
+ "MY_AGENTS": "į§ãŽã¨ãŧã¸ã§ãŗã",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ãããĢäŊã襨į¤ēãããåãĢãæåãĢã¨ãŧã¸ã§ãŗããäŊæããĻäŋåããåŋ
čĻããããžãīŧ",
+ "SETTINGS_BUTTON": "č¨åŽ",
+ "SIGN_IN": "ãã°ã¤ãŗ",
+ "SIGN_IN_NOTICE": "ãĸãĢãĻãŗããäŋåããã¨ãŧã¸ã§ãŗããįŽĄįãããĢã¯ãã°ã¤ãŗããĻãã ããīŧ",
+ "SIGN_OUT": "ãã°ãĸãĻã",
+ "SUPPORT_BUTTON": "ãĩããŧã",
+ "USER_IMAGE": "ãĻãŧãļãŧįģå"
+}
diff --git a/next/public/locales/ja/errors.json b/next/public/locales/ja/errors.json
new file mode 100644
index 0000000..cd4ba02
--- /dev/null
+++ b/next/public/locales/ja/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "OpenAI APIããŧãĢãĸã¯ãģãšã§ããžããã§ãããAPIããŧãįĸēčĒããããåžã§ããä¸åēĻãčŠĻããã ããã",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "čŋŊå ãŋãšã¯ãŽčŋŊå ä¸ãĢã¨ãŠãŧãįēįããžããããĸããĢãåįãæąããĒãå¯čŊæ§ããããããåĻįãįļčĄããžã...",
+ "RATE_LIMIT_EXCEEDED": "æ大ã¯ã¨ãĒæ°ãĢéããžããīŧ ä¸æįãĢãåž
ãĄãã ãã...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "ããŽã¨ãŧã¸ã§ãŗãã¯ãæ大åŽčĄå¯čŊãĒãĢãŧãæ°ãĢéããžããã貥å¸ãæããããĢãããŽã¨ãŧã¸ã§ãŗãã¯äģåæĸããžã... ã¨ãŧã¸ã§ãŗããŽæ大åŽčĄå¯čŊãĒãĢãŧãæ°ã¯č¨åŽã§æ§æã§ããžãã",
+ "DEMO_LOOPS_REACHED": "įŗãč¨ŗãããžããããããã¯ããĸãĸããĒãąãŧãˇã§ãŗãĒãŽã§ãã¨ãŧã¸ã§ãŗããéˇæéåŽčĄãããã¨ã¯ã§ããžãããæŗ¨īŧããéˇãåŽčĄãå¸æããå ´åã¯ãč¨åŽã§APIããŧãå
ĨåããĻãã ãããåæĸ...",
+ "AGENT_MANUALLY_SHUT_DOWN": "ã¨ãŧã¸ã§ãŗããæåã§ãˇãŖããããĻãŗãããžããã",
+ "ALL_TASKS_COMPLETETD": "ããšãĻãŽãŋãšã¯ãåŽäēããžãããåæĸ...",
+ "ERROR_API_KEY_QUOTA": "OpenAI APIããŧãäŊŋį¨ããéãŽã¨ãŠãŧãįžå¨ãŽã¯ãŠãŧãŋãčļ
ããĻããžããčĢæąæ
å ąãįĸēčĒããĻãã ããã",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ã¨ãŠãŧīŧãæãĄãŽOpenAI APIããŧãĢã¯GPT-4ãĸã¯ãģãšæ¨ŠããããžããããžãOpenAIãŽåž
ãĄčĄåãĢįģé˛ããåŋ
čĻããããžããīŧChatGPT Plusã¨ã¯į°ãĒããžãīŧ",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "åæãŋãšã¯ãŽååžä¸ãĢã¨ãŠãŧãįēįããžãããåčŠĻčĄããããã¨ãŧã¸ã§ãŗããŽįŽįãæįĸēãĢãããããĸããĢãĢéŠåãããããĢå¤æ´ããĻãã ãããåæĸ...",
+ "INVALID_OPENAI_API_KEY": "ã¨ãŠãŧ įĄåšãĒOpenAI APIããŧ"
+}
diff --git a/next/public/locales/ja/help.json b/next/public/locales/ja/help.json
new file mode 100644
index 0000000..cc5c1d6
--- /dev/null
+++ b/next/public/locales/ja/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT ãŽãããĨãĄãŗã",
+ "FOLLOW_THE_JOURNEY": "äģĨä¸ãŽããŖãŗããĢã§į§ããĄãĢåå ããĻãã ãã:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "ãĻã§ããĩã¤ããäēēã
ã¨ãŽį¸äēäŊį¨ đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "ã¯ãããŠãĻãļãŧã§įŦčĒãŽAIã¨ãŧã¸ã§ãŗããæ§æããĻåŽčĄãããã¨ãã§ããžããįŦčĒãŽAIã¨ãŧã¸ã§ãŗããĢååãäģããįŽæ¨ãåŽįžŠããžããAIã¨ãŧã¸ã§ãŗãã¯ããŋãšã¯ãäŊæããåŽčĄããįĩæãčŠäžĄãããã¨ã§ãæåŽãããįŽæ¨ãéæãããã¨ããžã đ",
+ "LONG_TERM_MEMORY": "éˇæįãĒč¨æļ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "ããŽããŠããããŠãŧã ã¯įžå¨ããŧãŋįã§ããįžå¨ãäģĨä¸ãĢåãįĩãã§ããžãīŧ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPTãããŽããŧãããããFAQ ãĒãŠãŽčŠŗį´°ãĢã¤ããĻã¯ã",
+ "WEB_BROWSING": "WebããŠãĻã¸ãŗã° đ",
+ "WELCOME_TO_AGENT_GPT": "AgentGPTã¸ãããã"
+}
diff --git a/next/public/locales/ja/indexPage.json b/next/public/locales/ja/indexPage.json
new file mode 100644
index 0000000..0daca73
--- /dev/null
+++ b/next/public/locales/ja/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "ããŧãŋį",
+ "HEADING_DESCRIPTION": "ããŠãĻãļãŧã§čĒåžåAIã¨ãŧã¸ã§ãŗããæ§æãč¨åŽããããŗã¤ãŗãšããŧãĢããžãã",
+ "AGENT_NAME": "åå",
+ "LABEL_AGENT_GOAL": "įŽæ¨",
+ "PLACEHOLDER_AGENT_GOAL": "ä¸įãããč¯ãå ´æãĢãã",
+ "BUTTON_DEPLOY_AGENT": "ã¨ãŧã¸ã§ãŗããåŽčĄ",
+ "BUTTON_STOP_AGENT": "ã¨ãŧã¸ã§ãŗããåæĸ"
+}
diff --git a/next/public/locales/ja/languages.json b/next/public/locales/ja/languages.json
new file mode 100644
index 0000000..c1e445e
--- /dev/null
+++ b/next/public/locales/ja/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "čąčĒ",
+ "FRENCH": "ããŠãŗãščĒ",
+ "SPANISH": "ãšãã¤ãŗčĒ",
+ "GERMAN": "ãã¤ãčĒ",
+ "JAPANESE": "æĨæŦčĒ",
+ "KOREAN": "éåŊčĒ",
+ "CHINESE": "ä¸åŊčĒ",
+ "PORTUGEES": "ããĢããŦãĢčĒ",
+ "ITALIAN": "ã¤ãŋãĒãĸčĒ",
+ "DUTCH": "ãĒãŠãŗãčĒ",
+ "POLSKI": "ããŧãŠãŗãčĒ",
+ "HUNGARIAN": "ããŗãŦãĒãŧčĒ",
+ "ROMANIAN": "ãĢãŧãããĸčĒ",
+ "SLOVAK": "ãšããããĸčĒ"
+}
diff --git a/next/public/locales/ja/settings.json b/next/public/locales/ja/settings.json
new file mode 100644
index 0000000..0e64dd9
--- /dev/null
+++ b/next/public/locales/ja/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "éĢåēĻãĒč¨åŽ",
+ "API_KEY": "APIããŧ",
+ "AUTOMATIC_MODE": "čĒåãĸãŧã",
+ "AUTOMATIC_MODE_DESCRIPTION": "īŧãããŠãĢãīŧīŧã¨ãŧã¸ã§ãŗãã¯ããšãĻãŽãŋãšã¯ãčĒåįãĢåŽčĄããžãã",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "åAPIåŧãŗåēãã§äŊŋį¨ãããããŧã¯ãŗãŽæ大æ°ãåļåžĄããžãīŧããéĢãå¤ã¯čŠŗį´°ãĒåŋįãįæããžããããŗãšããããããžãīŧã",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "ã¨ãŧã¸ã§ãŗããåŽčĄãããĢãŧããŽæ大æ°ãåļåžĄããžãīŧéĢãå¤ã¯ããå¤ããŽAPIåŧãŗåēããįæããžãīŧã",
+ "GET_YOUR_OWN_APIKEY": "čĒåčĒčēĢãŽOpenAI APIããŧãååžããĻãã ãã",
+ "HERE": "ããĄã",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "ããã§OpenAI APIããŧãčŋŊå ã§ããžãããããĢãããįŦčĒãŽOpenAIããŧã¯ãŗãäŊŋį¨ãããããĢæ¯æããããåŋ
čĻããããžãããChatGPTãĢãã大ããĒãĸã¯ãģãšæ¨Šãä¸ããããžãīŧãžããOpenAIãæäžããäģģæãŽãĸããĢãé¸æã§ããžãã",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "ããéĢãå¤ã¯åēåããããŠãŗãã ãĢããžãããããäŊãå¤ã¯ããįĻįšãįĩããåŽįžŠãããããŽãĢããžãã",
+ "INFO_TO_USE_GPT4": "GPT-4ãĸããĢãäŊŋį¨ãããĢã¯ãAPIããŧãŽæåŽãåŋ
čĻã§ããååžã§ããžã",
+ "INVALID_OPENAI_API_KEY": "APIããŧãįĄåšã§ãīŧ",
+ "LABEL_MODE": "ãĸãŧã",
+ "LABEL_MODEL": "ãĸããĢ",
+ "LANG": "č¨čĒ",
+ "LINK": "APIããŧãŽįŗčĢ",
+ "LOOP": "ãĢãŧã",
+ "MUST_CONNECT_CREDIT_CARD": "æŗ¨æ: ã¯ãŦã¸ãããĢãŧãããĸãĢãĻãŗããĢæĨįļããåŋ
čĻããããžã",
+ "NOTE_API_KEY_USAGE": "ããŽããŧã¯įžå¨ãŽããŠãĻãļãģããˇã§ãŗã§ãŽãŋäŊŋį¨ãããžãã",
+ "NOTE_TO_GET_OPENAI_KEY": "æŗ¨æīŧAPIããŧãååžãããĢã¯ãæŦĄãŽãĒãŗã¯ã§OpenAIãĸãĢãĻãŗããĢįģé˛ããåŋ
čĻããããžãã",
+ "PAUSE": "ä¸æåæĸ",
+ "PAUSE_MODE": "ä¸æåæĸãĸãŧã",
+ "PAUSE_MODE_DESCRIPTION": "ã¨ãŧã¸ã§ãŗãã¯ãåãŋãšã¯ãģãããŽåžãĢä¸æåæĸããžãã",
+ "PENAI_API_KEY": "OpenAI API ããŧãįĄåšã§ã",
+ "PLAY": "åį",
+ "SETTINGS_DIALOG_HEADER": "č¨åŽ â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "īŧChatGPT PlusãŽãĩããšã¯ãĒããˇã§ãŗã¯æŠčŊããžããīŧ",
+ "TEMPERATURE": "渊åēĻ",
+ "TOKENS": "ããŧã¯ãŗ"
+}
diff --git a/next/public/locales/ko/chat.json b/next/public/locales/ko/chat.json
new file mode 100644
index 0000000..af5710c
--- /dev/null
+++ b/next/public/locales/ko/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "ėëŖė¤:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "GitHubėė ė´ íëĄė í¸ëĨŧ íėí´ėŖŧė¸ė.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "í
ė¤í¸ę° í´ëĻŊëŗ´ëė ëŗĩėŦë¨",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "í
ė¤í¸ëĨŧ í´ëĻŊëŗ´ëė ëŗĩėŦí ė ėėĩëë¤",
+ "CREATE_AN_AGENT_DESCRIPTION": "ė´ëĻęŗŧ ëĒŠíëĨŧ ėļę°íėŦ ėė´ė í¸ëĨŧ ėėąí ë¤ė, \"ėė´ė í¸ ėė!\" ë˛íŧė í´ëĻíė¸ė.",
+ "EMBARKING_ON_NEW_GOAL": "ėëĄė´ ëĒŠí ėė:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ ė°ëĻŦë ėė¸ė ė¸ ęĩíĩëė ę˛Ŋííęŗ ėėĩëë¤. API í¤ëĨŧ ėŦėŠíė§ ėėŧ늴 ė§ė°ęŗŧ ė¤ëĨę° ėėëŠëë¤ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ AgentGPTė ë°ė ė ė§ėíė¸ė. đī¸",
+ "NO_MORE_TASKS": "ë ė´ė ė´ ėė
ė ëí íė ėė
ė´ ėėĩëë¤:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(30ė´ ė´ė 깸ëĻŦ늴 íė´ė§ëĨŧ ėëĄ ęŗ ėšęą°ë ėė´ė í¸ëĨŧ ėëėŧëĄ ėŦėėíė¸ė)",
+ "SUPPORT_NOW": "ė§ę¸ ė§ėí기 đ",
+ "TASK_ADDED": "ėė
ėļę°ë¨:",
+ "THINKING": "ėę°ė¤...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ ęŗ ę°ëë§ė OpenAI API í¤ëĨŧ ė¤ė íėė ė ęŗĩí늴 ė íė ëëĻ´ ė ėėĩëë¤!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ ė´ëĻ/ëėė ėļę°íęŗ ë°°íŦëĨŧ ëëŦ ėė´ė í¸ëĨŧ ėėąíė¸ė!"
+}
diff --git a/next/public/locales/ko/chat.missing.json b/next/public/locales/ko/chat.missing.json
new file mode 100644
index 0000000..f966665
--- /dev/null
+++ b/next/public/locales/ko/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ ė´ëĻ/ëĒŠíëĨŧ ėļę°íęŗ ë°°íŦëĨŧ ëëŦ ėė´ė í¸ëĨŧ ėėąíė¸ė! \nėë ėėëĨŧ ėëí´ ëŗ´ė¸ė!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/ko/common.json b/next/public/locales/ko/common.json
new file mode 100644
index 0000000..f9f03fb
--- /dev/null
+++ b/next/public/locales/ko/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "ėė
ėļę°",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT ëŦ¸ė",
+ "CLOSE": "ëĢ기",
+ "CONTINUE": "ęŗėíë¤",
+ "COPIED_TO_CLIPBOARD": "í´ëĻŊëŗ´ëė ëŗĩėŦëėėĩëë¤! đ",
+ "COPY": "ëŗĩėŦ",
+ "CREATE_AN_AGENT_DESCRIPTION": "ė´ëĻ/ëĒŠíëĨŧ ėļę°íęŗ ë°°ėšëĨŧ ëëŦ ėė´ė í¸ëĨŧ ėėąíėėė¤!",
+ "CURRENT_TASKS": "íėŦ ėė
",
+ "EXECUTING": "ė¤í ė¤",
+ "EXPORT": "ë´ëŗ´ë´ę¸°",
+ "IMAGE": "ė´ë¯¸ė§",
+ "LOOP": "ë°ëŗĩ",
+ "PAUSED": "ėŧėė¤ė§ë¨",
+ "RESET": "ėŦė¤ė ",
+ "RUNNING": "ė§í ė¤",
+ "SAVE": "ė ėĨ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPT, ëĄëë§ĩ ëąė ëí ėė¸í ė ëŗ´ëĨŧ ėģėŧë ¤ëŠ´ ë¤ė ë§íŦëĨŧ ë°ŠëŦ¸íėėė¤.",
+ "create-a-comprehensive-report-of-the-nike-company": "Nike íėŦė ëí íŦę´ė ė¸ ëŗ´ęŗ ė ėėą",
+ "if-you-are-facing-issues-please-head-over-to-our": "ëŦ¸ė ę° ėë ę˛Ŋė° ëšėŦëĄ ė´ëíėėė¤.",
+ "plan-a-detailed-trip-to-hawaii": "íėė´ëĄė ėė¸í ėŦíė ęŗííėėė¤.",
+ "platformergpt": "íëĢíŦ머GPT đŽ",
+ "researchgpt": "ResearchGPT đ",
+ "travelgpt": "ėŦíGPT đ´",
+ "web-search": "ėš ėí"
+}
diff --git a/next/public/locales/ko/drawer.json b/next/public/locales/ko/drawer.json
new file mode 100644
index 0000000..29f1fba
--- /dev/null
+++ b/next/public/locales/ko/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "ęŗė ",
+ "HELP_BUTTON": "ëėë§",
+ "MY_AGENTS": "ëė ëëĻŦė¸",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ėŦ기ė ëŦ´ė¸ę° íėë기 ė ė ë¨ŧė ëëĻŦė¸ė ėėąíęŗ ė ėĨí´ėŧíŠëë¤!",
+ "SETTINGS_BUTTON": "ė¤ė ",
+ "SIGN_IN": "ëĄęˇ¸ė¸",
+ "SIGN_IN_NOTICE": "ęŗė ė ę´ëĻŦíęŗ ëëĻŦė¸ė ė ėĨíë ¤ëŠ´ ëĄęˇ¸ė¸íė¸ė!",
+ "SIGN_OUT": "ëĄęˇ¸ėė",
+ "SUPPORT_BUTTON": "ė§ėíë¤",
+ "USER_IMAGE": "ėŦėŠė ė´ë¯¸ė§"
+}
diff --git a/next/public/locales/ko/errors.json b/next/public/locales/ko/errors.json
new file mode 100644
index 0000000..09d5908
--- /dev/null
+++ b/next/public/locales/ko/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ė¤ëĨ: OpenAI APIė ė ėíë ė¤ė ëŦ¸ė ę° ë°ėíėĩëë¤. API í¤ëĨŧ íė¸íęą°ë ëė¤ė ë¤ė ėëí´ėŖŧė¸ė.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ė¤ëĨ: ėļę° ėė
ė ėļę°íë ė¤ė ëŦ¸ė ę° ë°ėíėĩëë¤. ëĒ¨ë¸ė´ ëĩëŗė ė˛ëĻŦí ė ėė´ė ë°ėí ę˛ėŧ ė ėėĩëë¤. ęŗė ė§ííŠëë¤...",
+ "RATE_LIMIT_EXCEEDED": "ėĩë ėŋŧëĻŦ ėëĨŧ ė´ęŗŧíėĩëë¤! ėëëĨŧ ëĻėļ°ėŖŧė¸ė...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "ė´ ėė´ė í¸ë ėĩë ė¤í ę°ëĨí ëŖ¨í ėė ëëŦíėĩëë¤. ė§ę°ė ëŗ´í¸í기 ėí´ ė´ė ė´ ėė´ė í¸ëĨŧ ė¤ë¨íŠëë¤... ėė´ė í¸ ė¤í íėė ėĩëę°ė ė¤ė ėė ęĩŦėąí ė ėėĩëë¤.",
+ "DEMO_LOOPS_REACHED": "ėŖėĄíŠëë¤. ė´ę˛ė ë°ëĒ¨ ė íëĻŦėŧė´ė
ė´ę¸° ëëŦ¸ė ėė´ė í¸ëĨŧ ëëŦ´ ė¤ë ė¤íí ė ėėĩëë¤. ė°¸ęŗ : ë ė¤ë ė¤ííë ¤ëŠ´ ė¤ė ėė ėė˛´ API í¤ëĨŧ ė ęŗĩí´ėŖŧė¸ė. ė¤ë¨íŠëë¤...",
+ "AGENT_MANUALLY_SHUT_DOWN": "ėė´ė í¸ę° ėëėŧëĄ ė¤ë¨ëėėĩëë¤.",
+ "ALL_TASKS_COMPLETETD": "ëĒ¨ë ėė
ė´ ėëŖëėėĩëë¤. ė¤ë¨íŠëë¤...",
+ "ERROR_API_KEY_QUOTA": "OpenAI API í¤ëĨŧ ėŦėŠíë ė¤ė ė¤ëĨę° ë°ėíėĩëë¤. íėŦ í ëšëė ė´ęŗŧíėėĩëë¤. 결ė ė ëŗ´ëĨŧ íė¸í´ėŖŧė¸ė.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ė¤ëĨ: OpenAI API í¤ė GPT-4 ėĄė¸ė¤ ęļíė´ ėėĩëë¤. ë¨ŧė OpenAI ë기ė´ė ëąëĄí´ėŧíŠëë¤. (ė´ë ChatGPT Plusė ë¤ëĻ
ëë¤)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ė¤ëĨ: ė´ę¸° ėė
ė ę˛ėíë ė¤ė ëŦ¸ė ę° ë°ėíėĩëë¤. ėė´ė í¸ ëĒŠė ė ëĒ
ííę˛ ė ėíęą°ë ëĒ¨ë¸ė ë§ëëĄ ėė íėėė¤. ė¤ë¨íŠëë¤...",
+ "INVALID_OPENAI_API_KEY": "ėëŦ ė í¨íė§ ėė OpenAI API í¤"
+}
diff --git a/next/public/locales/ko/help.json b/next/public/locales/ko/help.json
new file mode 100644
index 0000000..017cc02
--- /dev/null
+++ b/next/public/locales/ko/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT ëŦ¸ė",
+ "FOLLOW_THE_JOURNEY": "ėëė ë°Šë˛ėŧëĄ ė°ëĻŦëĨŧ ë°ëŧę°ėėė¤:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "ėš ėŦė´í¸ ë° ėŦëë¤ęŗŧė ėí¸ ėėŠ đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "AgentGPTë ë¸ëŧė°ė ëĨŧ íĩí´ ë
ëĻŊė ė¸ AI ėė´ė í¸ëĨŧ ęĩŦėąíęŗ ė¤íí ė ėëëĄíŠëë¤. ėŦėŠė ė ė AI ėė´ė í¸ė ė´ëĻė ė§ė íęŗ ëĒŠíëĨŧ ė ėíėėė¤. AI ėė´ė í¸ë ėė
ė ėėąíęŗ ė¤ííėŦ ė§ė ë ëĒŠíëĨŧ ëŦėąíë ¤ęŗ íŠëë¤. ęˇ¸ë° ë¤ė 결ęŗŧëĨŧ íę°íŠëë¤ đ",
+ "LONG_TERM_MEMORY": "ėĨ기 기ėĩ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "ė´ íëĢíŧė íėŦ ë˛ í ë˛ė ė
ëë¤. íėŦ ë¤ėė ė§ė¤íęŗ ėėĩëë¤:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPT, ëĄëë§ĩ, FAQ ëąė ëí´ ėė¸í ėėëŗ´ë ¤ëŠ´",
+ "WEB_BROWSING": "ėš íė đ",
+ "WELCOME_TO_AGENT_GPT": "AgentGPTė ė¤ė ę˛ė íėíŠëë¤"
+}
diff --git a/next/public/locales/ko/indexPage.json b/next/public/locales/ko/indexPage.json
new file mode 100644
index 0000000..30e1084
--- /dev/null
+++ b/next/public/locales/ko/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "ë˛ í",
+ "HEADING_DESCRIPTION": "ë¸ëŧė°ė ėė ėė¨ė ė¸ AI ėė´ė í¸ëĨŧ ęĩŦėą, ęĩŦėą ë° ė¤ėšíŠëë¤.",
+ "AGENT_NAME": "ė´ëĻ",
+ "LABEL_AGENT_GOAL": "ëĒŠí",
+ "PLACEHOLDER_AGENT_GOAL": "ė¸ėė ë ëė ęŗŗėŧëĄ ë§ë¤ę¸°",
+ "BUTTON_DEPLOY_AGENT": "ėė´ė í¸ ė¤í",
+ "BUTTON_STOP_AGENT": "ėė´ė í¸ ė¤ė§"
+}
diff --git a/next/public/locales/ko/languages.json b/next/public/locales/ko/languages.json
new file mode 100644
index 0000000..a2885b7
--- /dev/null
+++ b/next/public/locales/ko/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "ėė´",
+ "FRENCH": "íëė¤ė´",
+ "SPANISH": "ė¤íė¸ė´",
+ "GERMAN": "ë
ėŧė´",
+ "JAPANESE": "ėŧëŗ¸ė´",
+ "KOREAN": "íęĩė´",
+ "CHINESE": "ė¤ęĩė´",
+ "PORTUGEES": "íŦëĨ´íŦę°ė´",
+ "ITALIAN": "ė´íëĻŦėė´",
+ "DUTCH": "ë¤ëëëė´",
+ "POLSKI": "í´ëëė´",
+ "HUNGARIAN": "íę°ëĻŦė´",
+ "ROMANIAN": "ëŖ¨ë§ëėė´",
+ "SLOVAK": "ėŦëĄë°í¤ėė´"
+}
diff --git a/next/public/locales/ko/settings.json b/next/public/locales/ko/settings.json
new file mode 100644
index 0000000..eddfd4e
--- /dev/null
+++ b/next/public/locales/ko/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "ęŗ ę¸ ė¤ė ",
+ "API_KEY": "API í¤",
+ "AUTOMATIC_MODE": "ėë ëĒ¨ë",
+ "AUTOMATIC_MODE_DESCRIPTION": "(기ëŗ¸ę°) ėė´ė í¸ë ëĒ¨ë ėė
ė ėëėŧëĄ ė¤ííŠëë¤.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "ę° API í¸ėļėė ėŦėŠëë í í°ė ėĩë ėëĨŧ ė ė´íŠëë¤ (ëė ę°ė ėė¸í ėëĩė ė ęŗĩíė§ë§ ë ëšėŠė´ ëëë¤).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "ėė´ė í¸ę° ė¤ííë ëŖ¨íė ėĩë ėëĨŧ ė ė´íŠëë¤ (ëė ę°ė ë ë§ė API í¸ėļė ė미íŠëë¤).",
+ "GET_YOUR_OWN_APIKEY": "ëšė ë§ė OpenAI API í¤ëĨŧ ę°ė ¸ė¤ė¸ė",
+ "HERE": "ėŦ기",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "ėŦ기ėė OpenAI API í¤ëĨŧ ėļę°í ė ėėĩëë¤. ė´ę˛ė ėŦėŠėė OpenAI í í°ė ėŦėŠíęŗ ė´ëĨŧ ėí´ ëšėŠė ė§ëļí´ėŧ íė§ë§ ChatGPTė ëí ë í° ėĄė¸ė¤ ęļíė ėģė ė ėėĩëë¤. ëí OpenAIėė ė ęŗĩíë ė´ë¤ ëĒ¨ë¸ë ė íí ė ėėĩëë¤.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "ëė ę°ė ėļë Ĩė ë ëŦ´ėėíę˛ ë§ëëë¤. ë°ëŠ´, ëŽė ę°ė ėļë Ĩė ė§ė¤íęŗ ëĒ
ííę˛ ë§ëëë¤.",
+ "INFO_TO_USE_GPT4": "GPT-4 ëĒ¨ë¸ė ėŦėŠíë ¤ëŠ´ API í¤ëĨŧ ė
ë Ĩí´ėŧ íŠëë¤. ėŦ기ė",
+ "INVALID_OPENAI_API_KEY": "ėëĒģë API í¤ė
ëë¤!",
+ "LABEL_MODE": "ëĒ¨ë",
+ "LABEL_MODEL": "ëĒ¨ë¸",
+ "LANG": "ė¸ė´",
+ "LINK": "API í¤ ėė˛",
+ "LOOP": "ëŖ¨í",
+ "MUST_CONNECT_CREDIT_CARD": "ė°¸ęŗ : ęŗė ė ė ėŠėš´ëëĨŧ ė°ę˛°í´ėŧ íŠëë¤",
+ "NOTE_API_KEY_USAGE": "ė´ í¤ë íėŦ ë¸ëŧė°ė ė¸ė
ėėë§ ėŦėŠëŠëë¤.",
+ "NOTE_TO_GET_OPENAI_KEY": "ė°¸ęŗ : API í¤ëĨŧ ėģėŧë ¤ëŠ´ OpenAI ęŗė ė ëąëĄí´ėŧ íŠëë¤. ë¤ė ë§íŦėė ëąëĄí ė ėėĩëë¤:",
+ "PAUSE": "ėŧė ė ė§",
+ "PAUSE_MODE": "ėŧė ė ė§ ëĒ¨ë",
+ "PAUSE_MODE_DESCRIPTION": "ėė´ė í¸ë ę° ėė
ė§íŠ íė ėŧė ė ė§ëŠëë¤.",
+ "PENAI_API_KEY": "ėëĒģë OpenAI API í¤",
+ "PLAY": "ėŦė",
+ "SETTINGS_DIALOG_HEADER": "ė¤ė â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ChatGPT Plus ęĩŦë
ė ėëíė§ ėėĩëë¤)",
+ "TEMPERATURE": "ė¨ë",
+ "TOKENS": "í í°"
+}
diff --git a/next/public/locales/lt/chat.json b/next/public/locales/lt/chat.json
new file mode 100644
index 0000000..d1a9bc7
--- /dev/null
+++ b/next/public/locales/lt/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Baigiama:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Remkite projektÄ
per GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Tekstas nukopijuotas į iÅĄkarpinÄ",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nepavyko nukopijuoti teksto į iÅĄkarpinÄ",
+ "CREATE_AN_AGENT_DESCRIPTION": "Sukurkite agentÄ
pridÄdami pavadinimÄ
ir tikslÄ
, tada paspauskite mygtukÄ
\"Paleisti agentÄ
!\"",
+ "EMBARKING_ON_NEW_GOAL": "ÄŽgyvendinama nauja tikslas:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Mesame neįprastai didelį eismÄ
, tikimasi delsÅŗ ir klaidÅŗ, jei nenaudojate savo API rakto đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ PadÄkite plÄtoti AgentGPT. đī¸",
+ "NO_MORE_TASKS": "NÄra daugiau sub-ÅĢduoÄiÅŗ:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Atnaujinkite puslapį arba paleiskite agentÄ
iÅĄ naujo rankiniu bÅĢdu, jei tai uÅžtrunka daugiau nei 30 sekundÅžiÅŗ)",
+ "SUPPORT_NOW": "Palaikyti dabar đ",
+ "TASK_ADDED": "UÅžduotis pridÄta:",
+ "THINKING": "MÄ
stymas...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ Galite pateikti savo OpenAI API raktÄ
skirtai padidinti limitus nustatymuose!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Sukurkite agentÄ
pridÄdami pavadinimÄ
/ tikslÄ
ir paspausdami dislokuoti!"
+}
diff --git a/next/public/locales/lt/chat.missing.json b/next/public/locales/lt/chat.missing.json
new file mode 100644
index 0000000..c483a0f
--- /dev/null
+++ b/next/public/locales/lt/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Sukurkite agentÄ
pridÄdami vardÄ
/ tikslÄ
ir paspausdami dislokuoti! \nIÅĄbandykite Åžemiau pateiktus pavyzdÅžius!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/lt/common.json b/next/public/locales/lt/common.json
new file mode 100644
index 0000000..6d8809e
--- /dev/null
+++ b/next/public/locales/lt/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Pridedama uÅžduotis",
+ "AGENTGPT_DOCUMENTATION": "Agento GPT dokumentacija",
+ "CLOSE": "UÅždaryti",
+ "CONTINUE": "TÄsti",
+ "COPIED_TO_CLIPBOARD": "Nukopijuota į mainÅŗ sritį! đ",
+ "COPY": "Kopijuoti",
+ "CREATE_AN_AGENT_DESCRIPTION": "Sukurkite agentÄ
pridÄdami pavadinimÄ
/ tikslÄ
ir paspausdami dislokuoti!",
+ "CURRENT_TASKS": "DabartinÄs uÅžduotys",
+ "EXECUTING": "Vykdymas",
+ "EXPORT": "Eksportuoti",
+ "IMAGE": "Vaizdas",
+ "LOOP": "Kilpa",
+ "PAUSED": "Pristabdyta",
+ "RESET": "Nustatyti iÅĄ naujo",
+ "RUNNING": "BÄgimas",
+ "SAVE": "Sutaupyti",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "NorÄdami gauti daugiau informacijos apie AgentGPT, jos planÄ
ir kt., apsilankykite ÅĄioje nuorodoje",
+ "create-a-comprehensive-report-of-the-nike-company": "Sukurkite iÅĄsamiÄ
Nike įmonÄs ataskaitÄ
",
+ "if-you-are-facing-issues-please-head-over-to-our": "Jei susiduriate su problemomis, apsilankykite mÅĢsÅŗ svetainÄje",
+ "plan-a-detailed-trip-to-hawaii": "Suplanuokite iÅĄsamiÄ
kelionÄ Ä¯ Havajus.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "TyrimasGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "Interneto paieÅĄka"
+}
diff --git a/next/public/locales/lt/drawer.json b/next/public/locales/lt/drawer.json
new file mode 100644
index 0000000..a1371fd
--- /dev/null
+++ b/next/public/locales/lt/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Paskyra",
+ "HELP_BUTTON": "Pagalba",
+ "MY_AGENTS": "Mano agentai",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Pirma turite sukurti ir įraÅĄyti savo pirmÄ
jį agentÄ
, prieÅĄ atsiras kÄ
nors Äia!",
+ "SETTINGS_BUTTON": "Nustatymai",
+ "SIGN_IN": "Prisijungti",
+ "SIGN_IN_NOTICE": "Prisijunkite, kad galÄtumÄte įraÅĄyti savo agentus ir tvarkyti savo paskyrÄ
!",
+ "SIGN_OUT": "Atsijungti",
+ "SUPPORT_BUTTON": "Palaikymas",
+ "USER_IMAGE": "Naudotojo paveikslÄlis"
+}
diff --git a/next/public/locales/lt/errors.json b/next/public/locales/lt/errors.json
new file mode 100644
index 0000000..9880472
--- /dev/null
+++ b/next/public/locales/lt/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "KLAIDA jungiantis prie OpenAI API. Patikrinkite API raktÄ
arba bandykite vÄliau.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "KLAIDA pridedant papildomus uÅždavinius. MÅĢsÅŗ modelis galbÅĢt negali apdoroti atsakymo ir dÄl to kilo problema. TÄsiame...",
+ "RATE_LIMIT_EXCEEDED": "Pasiektas maksimalus uÅžklausÅŗ skaiÄius! PraÅĄome sulÄtinti...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Å is agentas pasiekÄ maksimalÅŗ leistinÅŗ ciklÅŗ skaiÄiÅŗ. Kad iÅĄvengtumÄte pinigÅŗ iÅĄlaidÅŗ, ÅĄis agentas dabar bus sustabdytas... MaksimalÅŗ leistinÅŗ agento ciklÅŗ skaiÄiÅŗ galima konfigÅĢruoti nustatymuose.",
+ "DEMO_LOOPS_REACHED": "AtsipraÅĄome, taÄiau, kadangi tai demonstracinÄ programa, negalime leisti agentams bÅĢti vykdomi ilgiau nei tam tikrÄ
laikÄ
. Pastaba: jei norite vykdyti ilgesnes programas, įveskite savo API raktÄ
Nustatymuose. Sustabdymas...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agentas sustabdytas rankiniu bÅĢdu.",
+ "ALL_TASKS_COMPLETETD": "Visi uÅždaviniai baigti. Sustabdymas...",
+ "ERROR_API_KEY_QUOTA": "KLAIDA naudojant OpenAI API raktÄ
. VirÅĄijote savo dabartinÄ kvotÄ
. Patikrinkite savo sÄ
skaitos informacijÄ
.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "KLAIDA: JÅĢsÅŗ OpenAI API raktas neturi prieigos prie GPT-4. Pirmiausia turite uÅžsiregistruoti OpenAI eilÄje. (Tai skiriasi nuo ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "KLAIDA gaunant pradinius uÅždavinius. Bandykite dar kartÄ
, aiÅĄkiau suformuluokite agento tikslÄ
arba pakeiskite jį taip, kad jis atitiktÅŗ mÅĢsÅŗ modelio reikalavimus. Sustabdymas...",
+ "INVALID_OPENAI_API_KEY": "KLAIDA neteisingas OpenAI API raktas"
+}
diff --git a/next/public/locales/lt/help.json b/next/public/locales/lt/help.json
new file mode 100644
index 0000000..3ddbc4b
--- /dev/null
+++ b/next/public/locales/lt/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Agento GPT dokumentacija",
+ "FOLLOW_THE_JOURNEY": "Sekite mus ÅĄiais keliais:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "SÄ
veika su svetainÄmis ir ÅžmonÄmis đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "AgentGPT leidÅžia jums konfigÅĢruoti ir paleisti savarankiÅĄkus MI agentus per narÅĄyklÄ. Pavadinkite savo asmeninį MI agentÄ
ir nustatykite tikslÄ
. MI agentas stengsis pasiekti nustatytÄ
tikslÄ
, kurdamas ir vykdamas uÅžduotis, o tada vertindamas jÅŗ rezultatus đ",
+ "LONG_TERM_MEMORY": "Ilguoju laikotarpiu atmintis đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Å i platforma dabar yra beta versijoje, mes dabar dirbame su:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "NorÄdami suÅžinoti daugiau apie AgentGPT, jo planÄ
, DUK ir kt., apsilankykite",
+ "WEB_BROWSING": "Interneto narÅĄymas đ",
+ "WELCOME_TO_AGENT_GPT": "Sveiki atvykÄ Ä¯ AgentGPT"
+}
diff --git a/next/public/locales/lt/indexPage.json b/next/public/locales/lt/indexPage.json
new file mode 100644
index 0000000..5aa86fe
--- /dev/null
+++ b/next/public/locales/lt/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Compila, configura e installa agenti AI autonomi nel tuo browser.",
+ "AGENT_NAME": "Nome",
+ "LABEL_AGENT_GOAL": "Obiettivo",
+ "PLACEHOLDER_AGENT_GOAL": "Rendere il mondo un posto migliore",
+ "BUTTON_DEPLOY_AGENT": "Esegui agente",
+ "BUTTON_STOP_AGENT": "Ferma agente"
+}
diff --git a/next/public/locales/lt/languages.json b/next/public/locales/lt/languages.json
new file mode 100644
index 0000000..a431719
--- /dev/null
+++ b/next/public/locales/lt/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "AnglÅŗ",
+ "FRENCH": "PrancÅĢzÅŗ",
+ "SPANISH": "IspanÅŗ",
+ "GERMAN": "VokieÄiÅŗ",
+ "JAPANESE": "JaponÅŗ",
+ "KOREAN": "KorÄjieÄiÅŗ",
+ "CHINESE": "KinÅŗ",
+ "PORTUGEES": "PortugalÅŗ",
+ "ITALIAN": "ItalÅŗ",
+ "DUTCH": "OlandÅŗ",
+ "POLSKI": "LenkÅŗ",
+ "HUNGARIAN": "VengrÅŗ",
+ "ROMANIAN": "RumunÅŗ",
+ "SLOVAK": "SlovakÅŗ"
+}
diff --git a/next/public/locales/lt/settings.json b/next/public/locales/lt/settings.json
new file mode 100644
index 0000000..dfd5c83
--- /dev/null
+++ b/next/public/locales/lt/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "IÅĄplÄstiniai nustatymai",
+ "API_KEY": "API raktas",
+ "AUTOMATIC_MODE": "Automatinis reÅžimas",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Numatytasis): Agentas automatiÅĄkai vykdo kiekvienÄ
uŞduotį.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Valdo maksimalÅŗ ÅžetonÅŗ skaiÄiÅŗ, naudojamÅŗ kiekviename API uÅžklausime (didelis skaiÄius reiÅĄkia iÅĄsamesnius atsakymus, bet didesnes iÅĄlaidas).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Valdo maksimalÅŗ leidÅžiamÅŗ ciklÅŗ skaiÄiÅŗ (didelis skaiÄius reiÅĄkia daugiau API uÅžklausÅŗ).",
+ "GET_YOUR_OWN_APIKEY": "Gaukite savo OpenAI API raktÄ
",
+ "HERE": "Äia",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Äia galite pridÄti savo OpenAI API raktÄ
. Tai reiÅĄkia, kad turÄsite sumokÄti uÅž savo OpenAI Åžetonus, taÄiau gausite didesnÄ prieigÄ
prie ChatGPT! Be to, galite pasirinkti bet kuriÄ
OpenAI modelį.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "DidesnÄs reikÅĄmÄs padidina atsakymÅŗ atsitiktinumÄ
, o maÅžesnÄs reikÅĄmÄs padeda sukoncentruoti atsakymÄ
ir jį nukreipti.",
+ "INFO_TO_USE_GPT4": "Norint naudoti GPT-4 modelį, taip pat reikalingas API raktas. Jį galite gauti",
+ "INVALID_OPENAI_API_KEY": "Nevalidi API raktas!",
+ "LABEL_MODE": "ReÅžimas",
+ "LABEL_MODEL": "Modelis",
+ "LANG": "Kalba",
+ "LINK": "API rakto uÅžsakymas",
+ "LOOP": "Ciklas",
+ "MUST_CONNECT_CREDIT_CARD": "Pastaba: privalote prijungti kreditinÄ kortelÄ prie savo paskyros",
+ "NOTE_API_KEY_USAGE": "Å is raktas naudojamas tik dabartinÄje narÅĄymo sesijoje.",
+ "NOTE_TO_GET_OPENAI_KEY": "PRIMINIMAS: Norint gauti API raktÄ
, turite uÅžsiregistruoti OpenAI paskyroje, kuriÄ
galite sukurti ÅĄiuo nuorodos adresu:",
+ "PAUSE": "PauzÄ",
+ "PAUSE_MODE": "PauzÄs reÅžimas",
+ "PAUSE_MODE_DESCRIPTION": "Agentas sustabdo veiksmus po kiekvienos uÅžduoÄiÅŗ grupÄs.",
+ "PENAI_API_KEY": "Neteisingas OpenAI API raktas",
+ "PLAY": "Groti",
+ "SETTINGS_DIALOG_HEADER": "Nustatymai â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ChatGPT Plus prenumerata neveiks)",
+ "TEMPERATURE": "TemperatÅĢra",
+ "TOKENS": "ÅŊetoniai"
+}
diff --git a/next/public/locales/nl/chat.json b/next/public/locales/nl/chat.json
new file mode 100644
index 0000000..5284119
--- /dev/null
+++ b/next/public/locales/nl/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Voltooien:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Overweeg om het project te sponsoren via GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Tekst gekopieerd naar klembord",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Tekst kon niet worden gekopieerd naar het klembord",
+ "CREATE_AN_AGENT_DESCRIPTION": "Maak een agent aan door de naam en het doel toe te voegen en klik op de knop \"Agent starten!\"",
+ "EMBARKING_ON_NEW_GOAL": "Starten van een nieuw doel:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ We ervaren uitzonderlijk verkeer, verwachte vertragingen en fouten als u niet uw eigen API-sleutel gebruikt đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Ondersteun de ontwikkeling van AgentGPT. đī¸",
+ "NO_MORE_TASKS": "Er zijn geen verdere subtaken voor dit item:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Vernieuw de pagina of start de agent handmatig opnieuw op als dit langer dan 30 seconden duurt)",
+ "SUPPORT_NOW": "Ondersteun nu đ",
+ "TASK_ADDED": "Taak toegevoegd:",
+ "THINKING": "Denken...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ U kunt uw eigen OpenAI API-sleutel opgeven op het tabblad Instellingen voor verhoogde limieten!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Maak een agent aan door een naam/doel toe te voegen en op Implementeren te drukken!"
+}
diff --git a/next/public/locales/nl/chat.missing.json b/next/public/locales/nl/chat.missing.json
new file mode 100644
index 0000000..7b1e935
--- /dev/null
+++ b/next/public/locales/nl/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Maak een agent aan door een naam/doel toe te voegen en op Implementeren te drukken! \nProbeer onze voorbeelden hieronder!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ U kunt uw agent een keer klikken en klikken op \"SpustiÅĨ agent!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ Schakel het apparaat uit en klik op \"Verwijder het!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ Als u een bericht plaatst, drukt u op de knop \"Verzenden!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/nl/common.json b/next/public/locales/nl/common.json
new file mode 100644
index 0000000..deeef45
--- /dev/null
+++ b/next/public/locales/nl/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Taak toevoegen",
+ "AGENTGPT_DOCUMENTATION": "Documentatie van AgentGPT",
+ "CLOSE": "Sluiten",
+ "CONTINUE": "Doorgaan",
+ "COPIED_TO_CLIPBOARD": "Gekopieerd naar het klembord! đ",
+ "COPY": "KopiÃĢren",
+ "CREATE_AN_AGENT_DESCRIPTION": "Maak een agent aan door een naam/doel toe te voegen en op Implementeren te drukken!",
+ "CURRENT_TASKS": "Huidige taken",
+ "EXECUTING": "Uitvoeren",
+ "EXPORT": "Exporteren",
+ "IMAGE": "Afbeelding",
+ "LOOP": "Lus",
+ "PAUSED": "Gepauzeerd",
+ "RESET": "Resetten",
+ "RUNNING": "Bezig",
+ "SAVE": "Opslaan",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Bezoek de volgende link voor meer informatie over AgentGPT, de Roadmap, enz",
+ "create-a-comprehensive-report-of-the-nike-company": "Maak een uitgebreid rapport van het bedrijf Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Als u problemen ondervindt, ga dan naar onze",
+ "plan-a-detailed-trip-to-hawaii": "Plan een gedetailleerde reis naar Hawaï.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "OnderzoekGPT đ",
+ "travelgpt": "ReisGPT đ´",
+ "web-search": "Zoeken op internet"
+}
diff --git a/next/public/locales/nl/drawer.json b/next/public/locales/nl/drawer.json
new file mode 100644
index 0000000..6573065
--- /dev/null
+++ b/next/public/locales/nl/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Account",
+ "HELP_BUTTON": "Help",
+ "MY_AGENTS": "Mijn agenten",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "U moet eerst uw eerste agent maken en opslaan voordat er hier iets verschijnt!",
+ "SETTINGS_BUTTON": "Instellingen",
+ "SIGN_IN": "Inloggen",
+ "SIGN_IN_NOTICE": "Meld u aan om uw agenten op te slaan en uw account te beheren!",
+ "SIGN_OUT": "Uitloggen",
+ "SUPPORT_BUTTON": "Steun",
+ "USER_IMAGE": "Gebruikersafbeelding"
+}
diff --git a/next/public/locales/nl/errors.json b/next/public/locales/nl/errors.json
new file mode 100644
index 0000000..9c62d1d
--- /dev/null
+++ b/next/public/locales/nl/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "FOUT bij het openen van de OpenAI API-sleutel. Controleer de API-sleutel of probeer het later opnieuw.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "FOUT bij het toevoegen van extra taken. Het kan zijn dat ons model het antwoord niet aankan en dit heeft veroorzaakt. Ga verder...",
+ "RATE_LIMIT_EXCEEDED": "U heeft het maximale aantal verzoeken bereikt! Vertraag alsjeblieft...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Deze agent heeft het maximum aantal uitvoerbare rondes bereikt. Om uw portemonnee te sparen, stopt deze agent nu... Het maximum aantal uitvoerbare rondes van de agent kan worden geconfigureerd in de instellingen.",
+ "DEMO_LOOPS_REACHED": "Sorry, maar omdat dit een demo-applicatie is, kunnen we onze agenten niet te lang laten draaien. Opmerking: als u langere runs wilt, geef dan uw eigen API-sleutel op in de instellingen. Stoppen...",
+ "AGENT_MANUALLY_SHUT_DOWN": "De agent is handmatig gestopt.",
+ "ALL_TASKS_COMPLETETD": "Alle taken zijn voltooid. Stoppen...",
+ "ERROR_API_KEY_QUOTA": "FOUT bij het gebruik van de OpenAI API-sleutel. U heeft uw huidige quota overschreden, controleer uw factureringsgegevens.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "FOUT: uw OpenAI API-sleutel heeft geen toegang tot GPT-4. U moet zich eerst aanmelden voor de OpenAI-wachtlijst. (Dit is anders dan ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "FOUT bij het ophalen van de initiÃĢle taken. Probeer het opnieuw, formuleer de doelstellingen van de agent duidelijker of pas deze aan zodat deze geschikt is voor ons model. Stoppen...",
+ "INVALID_OPENAI_API_KEY": "FOUT ongeldige OpenAI API-sleutel"
+}
diff --git a/next/public/locales/nl/help.json b/next/public/locales/nl/help.json
new file mode 100644
index 0000000..c52c27e
--- /dev/null
+++ b/next/public/locales/nl/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Documentatie van AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Volg ons op onze reis:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interactie met websites en mensen đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "Stelt u in staat om uw eigen zelfstandige AI-agenten te configureren en uit te voeren via uw browser. Noem uw aangepaste AI-agent en bepaal het doel. De AI-agent probeert het gespecificeerde doel te bereiken door taken te creÃĢren, uit te voeren en de resultaten ervan te evalueren đ",
+ "LONG_TERM_MEMORY": "Lange termijngeheugen đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Dit platform is momenteel in bètafase, we werken momenteel aan de volgende functies:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Ga voor meer informatie over AgentGPT, de roadmap, veelgestelde vragen, enz",
+ "WEB_BROWSING": "Webbrowsen đ",
+ "WELCOME_TO_AGENT_GPT": "Welkom bij AgentGPT"
+}
diff --git a/next/public/locales/nl/indexPage.json b/next/public/locales/nl/indexPage.json
new file mode 100644
index 0000000..4c3b868
--- /dev/null
+++ b/next/public/locales/nl/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Bèta",
+ "HEADING_DESCRIPTION": "Compileer, configureer en installeer autonome AI-agenten in uw browser.",
+ "AGENT_NAME": "Naam",
+ "LABEL_AGENT_GOAL": "Doel",
+ "PLACEHOLDER_AGENT_GOAL": "Maak de wereld een betere plek",
+ "BUTTON_DEPLOY_AGENT": "Agent implementeren",
+ "BUTTON_STOP_AGENT": "Agent stoppen"
+}
diff --git a/next/public/locales/nl/languages.json b/next/public/locales/nl/languages.json
new file mode 100644
index 0000000..227fafb
--- /dev/null
+++ b/next/public/locales/nl/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Engels",
+ "FRENCH": "Frans",
+ "SPANISH": "Spaans",
+ "GERMAN": "Duits",
+ "JAPANESE": "Japans",
+ "KOREAN": "Koreaans",
+ "CHINESE": "Chinees",
+ "PORTUGEES": "Portugees",
+ "ITALIAN": "Italiaans",
+ "DUTCH": "Nederlands",
+ "POLSKI": "Pools",
+ "HUNGARIAN": "Hongaars",
+ "ROMANIAN": "Roemeens",
+ "SLOVAK": "Slowaaks"
+}
diff --git a/next/public/locales/nl/settings.json b/next/public/locales/nl/settings.json
new file mode 100644
index 0000000..b1ce8c7
--- /dev/null
+++ b/next/public/locales/nl/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Geavanceerde instellingen",
+ "API_KEY": "API-sleutel",
+ "AUTOMATIC_MODE": "Automatische modus",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Standaard): Agent voert automatisch elke taak uit.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Regelt het maximale aantal tokens dat in elke API-oproep wordt gebruikt (een hogere waarde resulteert in gedetailleerdere antwoorden, maar is duurder).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Regelt het maximale aantal lussen dat de agent kan uitvoeren (een hogere waarde resulteert in meer API-oproepen).",
+ "GET_YOUR_OWN_APIKEY": "Vraag je eigen OpenAI API-sleutel aan",
+ "HERE": "hier",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Hier kunt u uw OpenAI API-sleutel toevoegen. Dit betekent dat u moet betalen voor uw eigen OpenAI-tokengebruik, maar u krijgt meer toegang tot ChatGPT! Bovendien kunt u elk model kiezen dat door OpenAI wordt aangeboden.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Hogere waarden maken de output meer willekeurig, terwijl lagere waarden het gerichter en bepaalder maken.",
+ "INFO_TO_USE_GPT4": "Om het GPT-4-model te gebruiken, moet u ook de API-sleutel opgeven. Je kunt het",
+ "INVALID_OPENAI_API_KEY": "Ongeldige API-sleutel!",
+ "LABEL_MODE": "Modus",
+ "LABEL_MODEL": "Model",
+ "LANG": "Taal",
+ "LINK": "API-sleutel aanvragen",
+ "LOOP": "Lus",
+ "MUST_CONNECT_CREDIT_CARD": "Opmerking: U moet een creditcard koppelen aan uw account",
+ "NOTE_API_KEY_USAGE": "Deze sleutel wordt alleen gebruikt tijdens de huidige browsersessie.",
+ "NOTE_TO_GET_OPENAI_KEY": "OPMERKING: Om een ââAPI-sleutel te krijgen, moet u een OpenAI-account registreren op de volgende link:",
+ "PAUSE": "Pauzeren",
+ "PAUSE_MODE": "Pauze modus",
+ "PAUSE_MODE_DESCRIPTION": "Agent pauzeert na elke set van taak(taken)",
+ "PENAI_API_KEY": "Ongeldige OpenAI API-sleutel",
+ "PLAY": "Afspelen",
+ "SETTINGS_DIALOG_HEADER": "Instellingen â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(Het ChatGPT Plus-abonnement werkt niet)",
+ "TEMPERATURE": "Temperatuur",
+ "TOKENS": "Tokens"
+}
diff --git a/next/public/locales/pl/chat.json b/next/public/locales/pl/chat.json
new file mode 100644
index 0000000..56bfcbf
--- /dev/null
+++ b/next/public/locales/pl/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Wykonywanie:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "RozwaÅŧ wsparcie projektu na GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Tekst skopiowany do schowka",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nie moÅŧna skopiowaÄ tekstu do schowka",
+ "CREATE_AN_AGENT_DESCRIPTION": "UtwÃŗrz agenta, dodajÄ
c nazwÄ i cel, a nastÄpnie kliknij przycisk \"Uruchom agenta!\"",
+ "EMBARKING_ON_NEW_GOAL": "Nowe cel:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ DoÅwiadczamy wyjÄ
tkowo duÅŧego ruchu, oczekiwane sÄ
opÃŗÅēnienia i bÅÄdy, jeÅli nie uÅŧywasz wÅasnego klucza API đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Wsparcie dla rozwoju AgentGPT. đī¸",
+ "NO_MORE_TASKS": "Brak kolejnych zadaÅ dla tego:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(OdÅwieÅŧ stronÄ lub uruchom agenta ponownie rÄcznie, jeÅli zajmie to ponad 30 sekund)",
+ "SUPPORT_NOW": "Wsparcie teraz đ",
+ "TASK_ADDED": "Zadanie dodane:",
+ "THINKING": "MyÅlenie...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ MoÅŧesz podaÄ swÃŗj wÅasny klucz API OpenAI w zakÅadce Ustawienia, aby uzyskaÄ podwyÅŧszone limity!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ UtwÃŗrz agenta, dodajÄ
c nazwÄ/cel i naciskajÄ
c przycisk wdraÅŧania!"
+}
diff --git a/next/public/locales/pl/chat.missing.json b/next/public/locales/pl/chat.missing.json
new file mode 100644
index 0000000..4751858
--- /dev/null
+++ b/next/public/locales/pl/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ UtwÃŗrz agenta, dodajÄ
c nazwÄ / cel i naciskajÄ
c przycisk wdraÅŧania! \nWyprÃŗbuj nasze przykÅady poniÅŧej!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖį, æˇģå åį§°åįŽæ , įļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/pl/common.json b/next/public/locales/pl/common.json
new file mode 100644
index 0000000..0cc09a6
--- /dev/null
+++ b/next/public/locales/pl/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Dodawanie zadania",
+ "AGENTGPT_DOCUMENTATION": "Dokumentacja AgentGPT",
+ "CLOSE": "ZamknÄ
Ä",
+ "CONTINUE": "KontynuowaÄ",
+ "COPIED_TO_CLIPBOARD": "Skopiowane do schowka! đ",
+ "COPY": "Kopiuj",
+ "CREATE_AN_AGENT_DESCRIPTION": "UtwÃŗrz agenta, dodajÄ
c nazwÄ/cel i naciskajÄ
c przycisk wdraÅŧania!",
+ "CURRENT_TASKS": "BieÅŧÄ
ce zadania",
+ "EXECUTING": "Wykonanie",
+ "EXPORT": "Eksport",
+ "IMAGE": "Obraz",
+ "LOOP": "PÄtla",
+ "PAUSED": "Wstrzymane",
+ "RESET": "Resetowanie",
+ "RUNNING": "DziaÅanie",
+ "SAVE": "RatowaÄ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Aby uzyskaÄ wiÄcej informacji na temat AgentGPT, jego harmonogramu itp., odwiedÅē poniÅŧsze ÅÄ
cze",
+ "create-a-comprehensive-report-of-the-nike-company": "StwÃŗrz kompleksowy raport firmy Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "JeÅli napotkasz problemy, przejdÅē do naszego",
+ "plan-a-detailed-trip-to-hawaii": "Zaplanuj szczegÃŗÅowÄ
wycieczkÄ na Hawaje.",
+ "platformergpt": "PlatformÃŗwkaGPT đŽ",
+ "researchgpt": "BadaniaGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "wyszukiwarka internetowa"
+}
diff --git a/next/public/locales/pl/drawer.json b/next/public/locales/pl/drawer.json
new file mode 100644
index 0000000..8a8e525
--- /dev/null
+++ b/next/public/locales/pl/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Konto",
+ "HELP_BUTTON": "Pomoc",
+ "MY_AGENTS": "Moje agenci",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Musisz najpierw stworzyÄ i zapisaÄ swojego pierwszego agenta, zanim pojawi siÄ tutaj coÅ!",
+ "SETTINGS_BUTTON": "Ustawienia",
+ "SIGN_IN": "Zaloguj siÄ",
+ "SIGN_IN_NOTICE": "Zaloguj siÄ, aby zapisaÄ swoich agentÃŗw i zarzÄ
dzaÄ swoim kontem!",
+ "SIGN_OUT": "Wyloguj siÄ",
+ "SUPPORT_BUTTON": "Wsparcie",
+ "USER_IMAGE": "ZdjÄcie uÅŧytkownika"
+}
diff --git a/next/public/locales/pl/errors.json b/next/public/locales/pl/errors.json
new file mode 100644
index 0000000..91a7b29
--- /dev/null
+++ b/next/public/locales/pl/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "BÅÄD podczas ÅÄ
czenia siÄ z kluczem API OpenAI. ProszÄ sprawdziÄ klucz API lub sprÃŗbowaÄ pÃŗÅēniej.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "BÅÄD podczas dodawania dodatkowych zadaÅ. Nasz model moÅŧe nie obsÅugiwaÄ odpowiedzi i spowodowaÄ to bÅÄ
d. Kontynuacja...",
+ "RATE_LIMIT_EXCEEDED": "PrzekroczyÅeÅ maksymalnÄ
liczbÄ zapytaÅ! ProszÄ zwolniÄ... đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Ten agent osiÄ
gnÄ
Å maksymalnÄ
liczbÄ moÅŧliwych iteracji. Aby zachowaÄ swojÄ
kieszeÅ, ten agent jest teraz wyÅÄ
czony... MaksymalnÄ
liczbÄ iteracji agenta moÅŧna skonfigurowaÄ w ustawieniach.",
+ "DEMO_LOOPS_REACHED": "Przepraszamy, ale poniewaÅŧ jest to aplikacja demonstracyjna, nie moÅŧemy uruchamiaÄ agentÃŗw przez zbyt dÅugi czas. Uwaga: jeÅli chcesz uruchamiaÄ dÅuÅŧsze sesje, proszÄ podaÄ wÅasny klucz API w ustawieniach. WyÅÄ
czenie...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agent zostaÅ rÄcznie wyÅÄ
czony.",
+ "ALL_TASKS_COMPLETETD": "Wszystkie zadania zostaÅy zakoÅczone. WyÅÄ
czanie...",
+ "ERROR_API_KEY_QUOTA": "BÅÄD podczas korzystania z klucza OpenAI API. Przekroczono bieÅŧÄ
cy limit, proszÄ sprawdziÄ informacje o rozliczeniach.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "BÅÄD: TwÃŗj klucz OpenAI API nie ma dostÄpu do GPT-4. Musisz najpierw zapisaÄ siÄ na listÄ oczekujÄ
cych OpenAI. (To rÃŗÅŧni siÄ od ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "BÅÄD podczas pobierania podstawowych zadaÅ. SprÃŗbuj ponownie, sformuÅuj cel agenta bardziej jasno lub zmodyfikuj go w taki sposÃŗb, aby pasowaÅ do naszego modelu. WyÅÄ
czanie...",
+ "INVALID_OPENAI_API_KEY": "BÅÄD nieprawidÅowy klucz API OpenAI"
+}
diff --git a/next/public/locales/pl/help.json b/next/public/locales/pl/help.json
new file mode 100644
index 0000000..6651218
--- /dev/null
+++ b/next/public/locales/pl/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "Dokumentacja AgentGPT",
+ "FOLLOW_THE_JOURNEY": "PodÄ
Åŧaj za nami na naszej drodze:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interakcja z witrynami i ludÅēmi đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "UmoÅŧliwia konfiguracjÄ i uruchamianie samodzielnych agentÃŗw AI za pomocÄ
przeglÄ
darki. Nazwij swojego spersonalizowanego agenta AI i okreÅl jego cel. Agent AI bÄdzie prÃŗbowaÅ osiÄ
gnÄ
Ä okreÅlony cel, tworzÄ
c zadania, wykonujÄ
c je, a nastÄpnie oceniajÄ
c ich wyniki đ",
+ "LONG_TERM_MEMORY": "DÅugotrwaÅa pamiÄÄ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Ta platforma jest obecnie w wersji beta, obecnie pracujemy nad nastÄpujÄ
cymi funkcjami:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Aby dowiedzieÄ siÄ wiÄcej o programie AgentGPT, jego harmonogramie, czÄsto zadawanych pytaniach itp., odwiedÅē stronÄ",
+ "WEB_BROWSING": "PrzeglÄ
danie internetu đ",
+ "WELCOME_TO_AGENT_GPT": "Witaj w AgentGPT"
+}
diff --git a/next/public/locales/pl/indexPage.json b/next/public/locales/pl/indexPage.json
new file mode 100644
index 0000000..4e6fd0e
--- /dev/null
+++ b/next/public/locales/pl/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "TwÃŗrz, konfiguruj i instaluj autonomiczne agenty AI w Twojej przeglÄ
darce.",
+ "AGENT_NAME": "Nazwa",
+ "LABEL_AGENT_GOAL": "Cel",
+ "PLACEHOLDER_AGENT_GOAL": "UczyniÄ Åwiat lepszym miejscem",
+ "BUTTON_DEPLOY_AGENT": "Uruchom agenta",
+ "BUTTON_STOP_AGENT": "Zatrzymaj agenta"
+}
diff --git a/next/public/locales/pl/languages.json b/next/public/locales/pl/languages.json
new file mode 100644
index 0000000..c4ea99b
--- /dev/null
+++ b/next/public/locales/pl/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "Angielski",
+ "FRENCH": "Francuski",
+ "SPANISH": "HiszpaÅski",
+ "GERMAN": "Niemiecki",
+ "JAPANESE": "JapoÅski",
+ "KOREAN": "KoreaÅski",
+ "CHINESE": "ChiÅski",
+ "PORTUGEES": "Portugalski",
+ "ITALIAN": "WÅoski",
+ "DUTCH": "Holenderski",
+ "POLSKI": "Polski",
+ "HUNGARIAN": "WÄgierski",
+ "ROMANIAN": "RumuÅski",
+ "SLOVAK": "SÅowacki"
+}
diff --git a/next/public/locales/pl/settings.json b/next/public/locales/pl/settings.json
new file mode 100644
index 0000000..2005fe3
--- /dev/null
+++ b/next/public/locales/pl/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Zaawansowane ustawienia",
+ "API_KEY": "Klucz API",
+ "AUTOMATIC_MODE": "Tryb automatyczny",
+ "AUTOMATIC_MODE_DESCRIPTION": "(DomyÅlnie): Agenty wykonujÄ
zadania automatycznie.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Kontroluje maksymalnÄ
liczbÄ tokenÃŗw uÅŧywanych w kaÅŧdym wywoÅaniu API (wyÅŧsza wartoÅÄ daje bardziej szczegÃŗÅowe odpowiedzi, ale jest droÅŧsza).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Kontroluje maksymalnÄ
liczbÄ pÄtli uruchamianych przez agenta (wyÅŧsza wartoÅÄ oznacza wiÄcej wywoÅaÅ API).",
+ "GET_YOUR_OWN_APIKEY": "Otrzymaj swÃŗj wÅasny klucz API OpenAI",
+ "HERE": "tutaj",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Tutaj moÅŧesz dodaÄ swÃŗj klucz OpenAI API. Oznacza to, Åŧe musisz pÅaciÄ za uÅŧywanie wÅasnego tokenu OpenAI, ale otrzymujesz wiÄkszy dostÄp do ChatGPT! Ponadto moÅŧesz wybraÄ dowolny model oferowany przez OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "WyÅŧsze wartoÅci powodujÄ
, Åŧe wynik jest bardziej losowy, podczas gdy niÅŧsze wartoÅci skupiajÄ
go i definiujÄ
bardziej.",
+ "INFO_TO_USE_GPT4": "Aby uÅŧyÄ modelu GPT-4, musisz podaÄ klucz API. MoÅŧesz go uzyskaÄ",
+ "INVALID_OPENAI_API_KEY": "NieprawidÅowy klucz API!",
+ "LABEL_MODE": "Tryb",
+ "LABEL_MODEL": "Model",
+ "LANG": "JÄzyk",
+ "LINK": "ZaÅŧÄ
daj klucza API",
+ "LOOP": "PÄtla",
+ "MUST_CONNECT_CREDIT_CARD": "Uwaga: Musisz podÅÄ
czyÄ kartÄ kredytowÄ
do swojego konta",
+ "NOTE_API_KEY_USAGE": "Ten klucz jest uÅŧywany tylko w bieÅŧÄ
cej sesji przeglÄ
darki.",
+ "NOTE_TO_GET_OPENAI_KEY": "UWAGA: Aby uzyskaÄ klucz API, musisz zarejestrowaÄ konto OpenAI, co moÅŧesz zrobiÄ pod tym linkiem:",
+ "PAUSE": "Pauza",
+ "PAUSE_MODE": "Tryb pauzy",
+ "PAUSE_MODE_DESCRIPTION": "Agent przerywa po kaÅŧdym zbiorze zadania",
+ "PENAI_API_KEY": "NieprawidÅowy klucz API OpenAI",
+ "PLAY": "OdtwÃŗrz",
+ "SETTINGS_DIALOG_HEADER": "Ustawienia â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(Subskrypcja ChatGPT Plus nie bÄdzie dziaÅaÄ)",
+ "TEMPERATURE": "Temperatura",
+ "TOKENS": "Tokeny"
+}
diff --git a/next/public/locales/pt/chat.json b/next/public/locales/pt/chat.json
new file mode 100644
index 0000000..c55cc87
--- /dev/null
+++ b/next/public/locales/pt/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Completando:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "Considere apoiar o projeto no GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Texto copiado para a ÃĄrea de transferÃĒncia",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "NÃŖo foi possÃvel copiar o texto para a ÃĄrea de transferÃĒncia",
+ "CREATE_AN_AGENT_DESCRIPTION": "Crie um agente adicionando nome e objetivo, e clique no botÃŖo \"Iniciar agente!\"",
+ "EMBARKING_ON_NEW_GOAL": "Embarcando em um novo objetivo:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Estamos experimentando trÃĄfego excepcionalmente alto, podem ocorrer atrasos e erros se vocÃĒ nÃŖo estiver usando sua prÃŗpria chave de API đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Ajude no avanço do AgentGPT. đī¸",
+ "NO_MORE_TASKS": "NÃŖo hÃĄ mais tarefas secundÃĄrias para isso:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Atualize a pÃĄgina ou reinicie o agente manualmente se isso levar mais de 30 segundos)",
+ "SUPPORT_NOW": "Apoiar agora đ",
+ "TASK_ADDED": "Tarefa adicionada:",
+ "THINKING": "Pensando...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ VocÃĒ pode fornecer sua prÃŗpria chave de API OpenAI nas configuraçÃĩes para limites mais altos!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Crie um agente adicionando um nome/alvo e pressionando implantar!"
+}
diff --git a/next/public/locales/pt/chat.missing.json b/next/public/locales/pt/chat.missing.json
new file mode 100644
index 0000000..7ec68fa
--- /dev/null
+++ b/next/public/locales/pt/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Crie um agente adicionando um nome/objetivo e clique em implantar! \nExperimente nossos exemplos abaixo!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/pt/common.json b/next/public/locales/pt/common.json
new file mode 100644
index 0000000..e9ccef6
--- /dev/null
+++ b/next/public/locales/pt/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Adding Task",
+ "AGENTGPT_DOCUMENTATION": "DocumentaçÃŖo do AgentGPT",
+ "CLOSE": "Fechar",
+ "CONTINUE": "Continuar",
+ "COPIED_TO_CLIPBOARD": "Copiado para a ÃĄrea de transferÃĒncia! đ",
+ "COPY": "CÃŗpia de",
+ "CREATE_AN_AGENT_DESCRIPTION": "Crie um agente adicionando um nome/objetivo e clique em implantar!",
+ "CURRENT_TASKS": "Tarefas Atuais",
+ "EXECUTING": "Executando",
+ "EXPORT": "Export",
+ "IMAGE": "Imagem",
+ "LOOP": "Laço",
+ "PAUSED": "Pausado",
+ "RESET": "Reiniciar",
+ "RUNNING": "Em andamento",
+ "SAVE": "Salvar",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Para obter mais informaçÃĩes sobre o AgentGPT, seu Roadmap, etc, visite o seguinte link",
+ "create-a-comprehensive-report-of-the-nike-company": "Crie um relatÃŗrio abrangente da empresa Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Se vocÃĒ estÃĄ enfrentando problemas, por favor, dirija-se ao nosso",
+ "plan-a-detailed-trip-to-hawaii": "Planeje uma viagem detalhada para o HavaÃ.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "PesquisaGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "pesquisa na internet"
+}
diff --git a/next/public/locales/pt/drawer.json b/next/public/locales/pt/drawer.json
new file mode 100644
index 0000000..bb8c898
--- /dev/null
+++ b/next/public/locales/pt/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Conta",
+ "HELP_BUTTON": "Ajuda",
+ "MY_AGENTS": "Meus agentes",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "VocÃĒ precisa criar e salvar seu primeiro agente antes de qualquer coisa aparecer aqui!",
+ "SETTINGS_BUTTON": "ConfiguraçÃĩes",
+ "SIGN_IN": "Entrar",
+ "SIGN_IN_NOTICE": "Faça login para salvar seus agentes e gerenciar sua conta!",
+ "SIGN_OUT": "Sair",
+ "SUPPORT_BUTTON": "Apoiar",
+ "USER_IMAGE": "Imagem do usuÃĄrio"
+}
diff --git a/next/public/locales/pt/errors.json b/next/public/locales/pt/errors.json
new file mode 100644
index 0000000..4e5603c
--- /dev/null
+++ b/next/public/locales/pt/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "Erro ao acessar a chave da API OpenAI durante a conexÃŖo. Por favor, verifique a chave da API ou tente novamente mais tarde.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "Erro ao adicionar tarefa(s) adicional(is). Talvez nosso modelo nÃŖo seja capaz de lidar com a resposta e isso resultou nisso. Continuando...",
+ "RATE_LIMIT_EXCEEDED": "VocÃĒ atingiu o limite mÃĄximo de consultas! Por favor, diminua a velocidade...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Este agente atingiu o nÃēmero mÃĄximo de ciclos executÃĄveis. Para salvar sua carteira, este agente agora estÃĄ sendo desligado... O nÃēmero mÃĄximo de ciclos de execuçÃŖo do agente pode ser configurado nas configuraçÃĩes.",
+ "DEMO_LOOPS_REACHED": "Desculpe, mas como esta Ê uma aplicaçÃŖo de demonstraçÃŖo, nÃŖo podemos executar os agentes por muito tempo. ObservaçÃŖo: se vocÃĒ quiser execuçÃĩes mais longas, forneça sua prÃŗpria chave API nas ConfiguraçÃĩes. Parando...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agente desligado manualmente.",
+ "ALL_TASKS_COMPLETETD": "Todas as tarefas foram concluÃdas. Desligando...",
+ "ERROR_API_KEY_QUOTA": "Erro ao usar a chave da API OpenAI. VocÃĒ excedeu sua cota atual, por favor verifique suas informaçÃĩes de faturamento.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ERRO: Sua chave OpenAI API nÃŖo tem acesso ao GPT-4. VocÃĒ precisa se inscrever na lista de espera da OpenAI primeiro. (Isso Ê diferente do ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "Erro ao recuperar tarefas iniciais. Tente novamente, formule o objetivo do agente de forma mais clara ou modifique-o para que atenda ao nosso modelo. Desligando...",
+ "INVALID_OPENAI_API_KEY": "ERRO chave de API OpenAI invÃĄlida"
+}
diff --git a/next/public/locales/pt/help.json b/next/public/locales/pt/help.json
new file mode 100644
index 0000000..5eb44c3
--- /dev/null
+++ b/next/public/locales/pt/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "DocumentaçÃŖo do AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Siga-nos nas seguintes jornadas:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interagir com sites e pessoas đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "permite que configure e execute agentes de IA autônomos em seu navegador. DÃĒ um nome ao seu agente de IA personalizado e defina seu objetivo. O agente de IA tentarÃĄ atingir o objetivo especificado, criando tarefas, executando-as e avaliando seus resultados đ",
+ "LONG_TERM_MEMORY": "MemÃŗria de longo prazo đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Esta plataforma estÃĄ atualmente em versÃŖo beta e estamos trabalhando em:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Para saber mais sobre AgentGPT, seu roteiro, FAQ, etc, visite o",
+ "WEB_BROWSING": "NavegaçÃŖo na web đ",
+ "WELCOME_TO_AGENT_GPT": "Bem-vindo à AgentGPT"
+}
diff --git a/next/public/locales/pt/indexPage.json b/next/public/locales/pt/indexPage.json
new file mode 100644
index 0000000..61913bc
--- /dev/null
+++ b/next/public/locales/pt/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "Crie, configure e instale agentes autônomos de IA em seu navegador.",
+ "AGENT_NAME": "Nome",
+ "LABEL_AGENT_GOAL": "Objetivo",
+ "PLACEHOLDER_AGENT_GOAL": "Tornar o mundo um lugar melhor",
+ "BUTTON_DEPLOY_AGENT": "Executar agente",
+ "BUTTON_STOP_AGENT": "Parar agente"
+}
diff --git a/next/public/locales/pt/languages.json b/next/public/locales/pt/languages.json
new file mode 100644
index 0000000..b7001fb
--- /dev/null
+++ b/next/public/locales/pt/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "InglÃĒs",
+ "FRENCH": "FrancÃĒs",
+ "SPANISH": "Espanhol",
+ "GERMAN": "AlemÃŖo",
+ "JAPANESE": "JaponÃĒs",
+ "KOREAN": "Coreano",
+ "CHINESE": "ChinÃĒs",
+ "PORTUGEES": "PortuguÃĒs",
+ "ITALIAN": "Italiano",
+ "DUTCH": "HolandÃĒs",
+ "POLSKI": "PolonÃĒs",
+ "HUNGARIAN": "HÃēngaro",
+ "ROMANIAN": "Romeno",
+ "SLOVAK": "Eslovaco"
+}
diff --git a/next/public/locales/pt/settings.json b/next/public/locales/pt/settings.json
new file mode 100644
index 0000000..ccb5664
--- /dev/null
+++ b/next/public/locales/pt/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "ConfiguraçÃĩes avançadas",
+ "API_KEY": "Chave de API",
+ "AUTOMATIC_MODE": "Modo automÃĄtico",
+ "AUTOMATIC_MODE_DESCRIPTION": "(PadrÃŖo): O agente executa automaticamente todas as tarefas.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Controla o nÃēmero mÃĄximo de tokens usados em cada chamada de API (valores mais altos resultam em respostas mais detalhadas, mas tambÊm mais caras).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "Controla o nÃēmero mÃĄximo de loops executados pelo agente (valores mais altos resultam em mais chamadas de API).",
+ "GET_YOUR_OWN_APIKEY": "Obtenha sua prÃŗpria chave de API da OpenAI",
+ "HERE": "aqui",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Aqui vocÃĒ pode adicionar sua chave de API da OpenAI. Isso significa que vocÃĒ terÃĄ que pagar pelo uso de seu prÃŗprio token da OpenAI, mas terÃĄ acesso mais amplo ao ChatGPT! AlÊm disso, vocÃĒ pode escolher qualquer modelo oferecido pela OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Valores mais altos tornam a saÃda mais aleatÃŗria, enquanto valores mais baixos a tornam mais focada e definida.",
+ "INFO_TO_USE_GPT4": "Para usar o modelo GPT-4, Ê necessÃĄrio fornecer a chave de API. VocÃĒ pode obtÃĒ-la",
+ "INVALID_OPENAI_API_KEY": "Chave de API invÃĄlida!",
+ "LABEL_MODE": "Modo",
+ "LABEL_MODEL": "Modelo",
+ "LANG": "Idioma",
+ "LINK": "Solicitar chave de API",
+ "LOOP": "Laço",
+ "MUST_CONNECT_CREDIT_CARD": "Nota: VocÃĒ deve conectar um cartÃŖo de crÊdito à sua conta",
+ "NOTE_API_KEY_USAGE": "Esta chave sÃŗ serÃĄ usada nesta sessÃŖo do navegador.",
+ "NOTE_TO_GET_OPENAI_KEY": "OBSERVAÃÃO: Para obter uma chave de API, vocÃĒ precisa se registrar em uma conta da OpenAI, o que pode ser feito no seguinte link:",
+ "PAUSE": "Pausar",
+ "PAUSE_MODE": "Modo de pausa",
+ "PAUSE_MODE_DESCRIPTION": "O agente pausa apÃŗs cada conjunto de tarefa(s)",
+ "PENAI_API_KEY": "Chave de API OpenAI invÃĄlida",
+ "PLAY": "Reproduzir",
+ "SETTINGS_DIALOG_HEADER": "ConfiguraçÃĩes â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(A assinatura do ChatGPT Plus nÃŖo funcionarÃĄ)",
+ "TEMPERATURE": "Temperatura",
+ "TOKENS": "Tokens"
+}
diff --git a/next/public/locales/ro/chat.json b/next/public/locales/ro/chat.json
new file mode 100644
index 0000000..2097107
--- /dev/null
+++ b/next/public/locales/ro/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "Finalizare:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "LuaČi ÃŽn considerare sponsorizarea proiectului pe GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Text copiat ÃŽn clipboard",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nu se poate copia textul ÃŽn clipboard",
+ "CREATE_AN_AGENT_DESCRIPTION": "CreaČi un agent prin adÄugarea numelui Či obiectivului, apoi faceČi clic pe butonul \"Pornire agent!\"",
+ "EMBARKING_ON_NEW_GOAL": "Ãnceperea unui nou obiectiv:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ ExperimentÄm un trafic excepČional de mare, se aČteaptÄ ÃŽntÃĸrzieri Či erori dacÄ nu utilizaČi propriul cheie API đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ AjutaČi la dezvoltarea AgentGPT. đī¸",
+ "NO_MORE_TASKS": "Nu mai sunt alte sub-sarcini pentru aceasta:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(ReÃŽncÄrcaČi pagina sau porniČi manual agentul dacÄ dureazÄ mai mult de 30 de secunde)",
+ "SUPPORT_NOW": "SusČinere acum đ",
+ "TASK_ADDED": "SarcinÄ adÄugatÄ:",
+ "THINKING": "GÃĸndire...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ PuteČi furniza propriul cheie API OpenAI ÃŽn fila SetÄri pentru limite mai mari!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ CreaČi un agent adÄugÃĸnd un nume/ČintÄ Či apÄsÃĸnd deploy!"
+}
diff --git a/next/public/locales/ro/chat.missing.json b/next/public/locales/ro/chat.missing.json
new file mode 100644
index 0000000..bd85b81
--- /dev/null
+++ b/next/public/locales/ro/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ CreaČi un agent adÄugÃĸnd un nume/obiectiv Či apÄsÃĸnd deploy! \nÃncercaČi exemplele noastre de mai jos!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža a clicknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/ro/common.json b/next/public/locales/ro/common.json
new file mode 100644
index 0000000..52de451
--- /dev/null
+++ b/next/public/locales/ro/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "AdÄugarea sarcinii",
+ "AGENTGPT_DOCUMENTATION": "DocumentaČia AgentGPT",
+ "CLOSE": "Ãnchidere",
+ "CONTINUE": "Continua",
+ "COPIED_TO_CLIPBOARD": "Copiat ÃŽn clipboard! đ",
+ "COPY": "Copiere",
+ "CREATE_AN_AGENT_DESCRIPTION": "CreaČi un agent adÄugÃĸnd un nume/obiectiv Či apÄsÃĸnd deploy!",
+ "CURRENT_TASKS": "Sarcinile curente",
+ "EXECUTING": "Executarea",
+ "EXPORT": "Export",
+ "IMAGE": "Imagine",
+ "LOOP": "Bucle",
+ "PAUSED": "Ãntrerupt",
+ "RESET": "Resetare",
+ "RUNNING": "Ãn curs",
+ "SAVE": "Salvare",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Pentru a obČine mai multe informaČii despre AgentGPT, foaia sa de parcurs etc., accesaČi urmÄtorul link",
+ "create-a-comprehensive-report-of-the-nike-company": "CreaČi un raport cuprinzÄtor al companiei Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "DacÄ vÄ confruntaČi cu probleme, vÄ rugÄm sÄ mergeČi la nostru",
+ "plan-a-detailed-trip-to-hawaii": "PlanificaČi o cÄlÄtorie detaliatÄ ÃŽn Hawaii.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "ResearchGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "cautare pe internet"
+}
diff --git a/next/public/locales/ro/drawer.json b/next/public/locales/ro/drawer.json
new file mode 100644
index 0000000..f7437db
--- /dev/null
+++ b/next/public/locales/ro/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Cont",
+ "HELP_BUTTON": "Ajutor",
+ "MY_AGENTS": "Agenta mea",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Trebuie sÄ creaČi Či sÄ salvaČi primul agent ÃŽnainte ca ceva sÄ aparÄ aici!",
+ "SETTINGS_BUTTON": "SetÄri",
+ "SIGN_IN": "Conectare",
+ "SIGN_IN_NOTICE": "ConectaČi-vÄ pentru a salva agenČii dvs. Či a gestiona contul!",
+ "SIGN_OUT": "Deconectare",
+ "SUPPORT_BUTTON": "A sustine",
+ "USER_IMAGE": "Imagine utilizator"
+}
diff --git a/next/public/locales/ro/errors.json b/next/public/locales/ro/errors.json
new file mode 100644
index 0000000..2b115aa
--- /dev/null
+++ b/next/public/locales/ro/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "EROARE la conectarea cu cheia API OpenAI. VÄ rugÄm sÄ verificaČi cheia API sau ÃŽncercaČi mai tÃĸrziu.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "EROARE la adÄugarea task-urilor suplimentare. Este posibil ca modelul nostru sÄ nu poatÄ gestiona rÄspunsul Či sÄ genereze aceastÄ eroare. Continuare...",
+ "RATE_LIMIT_EXCEEDED": "AČi atins limita maximÄ de interogÄri! VÄ rugÄm sÄ ÃŽncetiniČi... đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Acest agent a atins numÄrul maxim de iteraČii posibile. Pentru a vÄ economisi banii, acest agent va fi oprit acum... NumÄrul maxim de iteraČii ale agentului poate fi configurat ÃŽn setÄri.",
+ "DEMO_LOOPS_REACHED": "Ne pare rÄu, dar deoarece aceasta este o aplicaČie demonstrativÄ, nu putem rula agenČii prea mult timp. NotÄ: dacÄ doriČi sÄ rulaČi mai mult timp, vÄ rugÄm sÄ furnizaČi o cheie API proprie ÃŽn SetÄri. Oprim...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agentul a fost oprit manual.",
+ "ALL_TASKS_COMPLETETD": "Toate task-urile au fost finalizate. Oprim...",
+ "ERROR_API_KEY_QUOTA": "EROARE la utilizarea cheii API OpenAI. AČi depÄČit cota curentÄ, vÄ rugÄm sÄ verificaČi informaČiile de facturare.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "EROARE: Cheia API OpenAI nu are acces la GPT-4. Trebuie sÄ vÄ ÃŽnscrieČi mai ÃŽntÃĸi ÃŽn lista de aČteptare OpenAI. (Acest lucru diferÄ de ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "EROARE la recuperarea task-urilor iniČiale. ÃncercaČi din nou, formulaČi obiectivul agentului mai clar sau modificaČi-l astfel ÃŽncÃĸt sÄ se potriveascÄ modelului nostru. Oprim...",
+ "INVALID_OPENAI_API_KEY": "EROARE cheie API OpenAI nevalidÄ"
+}
diff --git a/next/public/locales/ro/help.json b/next/public/locales/ro/help.json
new file mode 100644
index 0000000..954c2dd
--- /dev/null
+++ b/next/public/locales/ro/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "DocumentaČia AgentGPT",
+ "FOLLOW_THE_JOURNEY": "UrmÄriČi cÄlÄtoria noastrÄ:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "InteracČiune cu site-uri Či persoane đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "vÄ permite sÄ configuraČi Či sÄ rulaČi agenČi de IA autonomi ÃŽn browser-ul dvs. DaČi un nume agenČilor de IA personalizaČi Či definiČi obiectivul lor. AgenČii de IA vor ÃŽncerca sÄ atingÄ obiectivul specificat, creÃĸnd sarcini, executÃĸndu-le Či evaluÃĸnd rezultatele lor đ",
+ "LONG_TERM_MEMORY": "Memorie pe termen lung đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "AceastÄ platformÄ este ÃŽn prezent ÃŽn versiune beta Či lucrÄm la:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Pentru a afla mai multe despre AgentGPT, foaia de parcurs, ÃntrebÄri frecvente etc., vizitaČi",
+ "WEB_BROWSING": "Navigare web đ",
+ "WELCOME_TO_AGENT_GPT": "Bine aČi venit la AgentGPT"
+}
diff --git a/next/public/locales/ro/indexPage.json b/next/public/locales/ro/indexPage.json
new file mode 100644
index 0000000..c3117e9
--- /dev/null
+++ b/next/public/locales/ro/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "Beta",
+ "HEADING_DESCRIPTION": "CompileazÄ, configureazÄ Či instaleazÄ agenČi autonomi de IA ÃŽn browser-ul tÄu.",
+ "AGENT_NAME": "Nume",
+ "LABEL_AGENT_GOAL": "Scop",
+ "PLACEHOLDER_AGENT_GOAL": "SÄ facÄ lumea un loc mai bun",
+ "BUTTON_DEPLOY_AGENT": "ExecutÄ agentul",
+ "BUTTON_STOP_AGENT": "OpreČte agentul"
+}
diff --git a/next/public/locales/ro/languages.json b/next/public/locales/ro/languages.json
new file mode 100644
index 0000000..b2a6ad4
--- /dev/null
+++ b/next/public/locales/ro/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "EnglezÄ",
+ "FRENCH": "FrancezÄ",
+ "SPANISH": "SpaniolÄ",
+ "GERMAN": "GermanÄ",
+ "JAPANESE": "JaponezÄ",
+ "KOREAN": "CoreeanÄ",
+ "CHINESE": "ChinezÄ",
+ "PORTUGEES": "PortughezÄ",
+ "ITALIAN": "ItalianÄ",
+ "DUTCH": "OlandezÄ",
+ "POLSKI": "PolonezÄ",
+ "HUNGARIAN": "MaghiarÄ",
+ "ROMANIAN": "RomÃĸnÄ",
+ "SLOVAK": "SlovacÄ"
+}
diff --git a/next/public/locales/ro/settings.json b/next/public/locales/ro/settings.json
new file mode 100644
index 0000000..bb66f90
--- /dev/null
+++ b/next/public/locales/ro/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "SetÄri avansate",
+ "API_KEY": "Cheie API",
+ "AUTOMATIC_MODE": "Mod automat",
+ "AUTOMATIC_MODE_DESCRIPTION": "(Implicit): Agentul executÄ automat fiecare sarcinÄ.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "ControleazÄ numÄrul maxim de token-uri folosite ÃŽn fiecare apel API (o valoare mai mare va duce la rÄspunsuri mai detaliate, dar mai costisitoare).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "ControleazÄ numÄrul maxim de bucle executate de agent (o valoare mai mare va duce la mai multe apeluri API).",
+ "GET_YOUR_OWN_APIKEY": "ObČineČi propria cheie API OpenAI",
+ "HERE": "aici",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Aici puteČi adÄuga cheia dvs. API OpenAI. Aceasta ÃŽnseamnÄ cÄ va trebui sÄ plÄtiČi pentru utilizarea propriului dvs. token OpenAI, dar veČi avea un acces mai mare la ChatGPT! De asemenea, puteČi selecta orice model oferit de OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Valori mai mari fac ieČirea mai aleatorie, ÃŽn timp ce valori mai mici o fac mai focalizatÄ Či mai precisÄ.",
+ "INFO_TO_USE_GPT4": "Pentru a utiliza modelul GPT-4, trebuie sÄ furnizaČi cheia API. O puteČi obČine",
+ "INVALID_OPENAI_API_KEY": "Cheie API nevalidÄ!",
+ "LABEL_MODE": "Mod",
+ "LABEL_MODEL": "Model",
+ "LANG": "LimbÄ",
+ "LINK": "Solicitare cheie API",
+ "LOOP": "Bucle",
+ "MUST_CONNECT_CREDIT_CARD": "NotÄ: Trebuie sÄ conectaČi un card de credit la contul dvs",
+ "NOTE_API_KEY_USAGE": "AceastÄ cheie este valabilÄ doar pentru sesiunea curentÄ a browser-ului.",
+ "NOTE_TO_GET_OPENAI_KEY": "NOTÄ: Pentru a obČine o cheie API, trebuie sÄ vÄ ÃŽnregistraČi pentru un cont OpenAI la urmÄtorul link:",
+ "PAUSE": "PauzÄ",
+ "PAUSE_MODE": "Mod pauzÄ",
+ "PAUSE_MODE_DESCRIPTION": "Agentul se opreČte dupÄ fiecare set de sarcinÄ(i)",
+ "PENAI_API_KEY": "Cheie API OpenAI nevalidÄ",
+ "PLAY": "Redare",
+ "SETTINGS_DIALOG_HEADER": "SetÄri â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(Abonamentul ChatGPT Plus nu va funcČiona)",
+ "TEMPERATURE": "TemperaturÄ",
+ "TOKENS": "Token-uri"
+}
diff --git a/next/public/locales/ru/chat.json b/next/public/locales/ru/chat.json
new file mode 100644
index 0000000..a0d7860
--- /dev/null
+++ b/next/public/locales/ru/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "ĐавĐĩŅŅĐĩĐŊиĐĩ:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "ĐОддĐĩŅĐļиŅĐĩ ĐŋŅĐžĐĩĐēŅ ĐŊĐ° GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "ĐĸĐĩĐēŅŅ ŅĐēĐžĐŋиŅОваĐŊ в ĐąŅŅĐĩŅ ОйĐŧĐĩĐŊĐ°",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "ĐĐĩ ŅĐ´Đ°ĐģĐžŅŅ ŅĐēĐžĐŋиŅОваŅŅ ŅĐĩĐēŅŅ в ĐąŅŅĐĩŅ ОйĐŧĐĩĐŊĐ°",
+ "CREATE_AN_AGENT_DESCRIPTION": "ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "EMBARKING_ON_NEW_GOAL": "ĐОваŅ ŅĐĩĐģŅ:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ ĐŅ ĐŊĐ°ĐąĐģŅĐ´Đ°ĐĩĐŧ иŅĐēĐģŅŅиŅĐĩĐģŅĐŊĐž вŅŅĐžĐēиК ŅŅĐ°ŅиĐē, ĐžĐļидаКŅĐĩ СадĐĩŅĐļĐĩĐē и ĐžŅийОĐē, ĐĩŅĐģи ĐŊĐĩ иŅĐŋĐžĐģŅСŅĐĩŅĐĩ ŅвОК ŅОйŅŅвĐĩĐŊĐŊŅĐš API-ĐēĐģŅŅ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ ĐОддĐĩŅĐļиŅĐĩ ŅаСвиŅиĐĩ AgentGPT. đī¸",
+ "NO_MORE_TASKS": "ĐĐĩŅ йОĐģŅŅĐĩ ĐŋОдСадаŅ Đ´ĐģŅ ŅŅĐžĐŗĐž:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(ĐĐąĐŊОвиŅĐĩ ŅŅŅĐ°ĐŊиŅŅ иĐģи СаĐŋŅŅŅиŅĐĩ Đ°ĐŗĐĩĐŊŅĐ° СаĐŊОвО вŅŅŅĐŊŅŅ, ĐĩŅĐģи ŅŅĐž СаКĐŧĐĩŅ йОĐģĐĩĐĩ 30 ŅĐĩĐēŅĐŊĐ´)",
+ "SUPPORT_NOW": "ĐОддĐĩŅĐļĐ°ŅŅ ŅĐĩĐšŅĐ°Ņ đ",
+ "TASK_ADDED": "ĐĐ°Đ´Đ°ŅĐ° дОйавĐģĐĩĐŊĐ°:",
+ "THINKING": "ĐŅĐŧĐ°Ņ...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋŅĐĩĐ´ĐžŅŅавиŅŅ ŅвОК ĐēĐģŅŅ OpenAI API в ŅаСдĐĩĐģĐĩ ĐŊĐ°ŅŅŅĐžĐĩĐē Đ´ĐģŅ ĐŋОвŅŅĐĩĐŊиŅ ĐģиĐŧиŅОв!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ/ŅĐĩĐģŅ и ĐŊĐ°Đļав ÂĢРаСвĐĩŅĐŊŅŅŅÂģ!"
+}
diff --git a/next/public/locales/ru/chat.missing.json b/next/public/locales/ru/chat.missing.json
new file mode 100644
index 0000000..278dc03
--- /dev/null
+++ b/next/public/locales/ru/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ/ŅĐĩĐģŅ и ĐŊĐ°Đļав ÂĢРаСвĐĩŅĐŊŅŅŅÂģ! \nĐĐžĐŋŅОйŅĐšŅĐĩ ĐŊĐ°Ņи ĐŋŅиĐŧĐĩŅŅ ĐŊиĐļĐĩ!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ ĐŅŅвОŅиŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, ĐŋŅидав ĐĩĐŧŅ иĐŧŅ и ĐēĐģиĐēĐŊиŅĐĩ ĐŊĐ° ŅĐģĐ°ŅидĐģĐž \"ĐĄĐŋŅŅŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐŊĐ°ŅŅŅОиŅŅ Đ°ĐŗĐĩĐŊŅĐ°, вŅĐąŅĐ°ŅŅ иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐ°ŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, ĐžŅĐŋŅавив ĐĩĐŗĐž ŅŅĐ´Đ°, Đ° СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/ru/common.json b/next/public/locales/ru/common.json
new file mode 100644
index 0000000..cda49b3
--- /dev/null
+++ b/next/public/locales/ru/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "ĐОйавĐģĐĩĐŊиĐĩ СадаŅи",
+ "AGENTGPT_DOCUMENTATION": "ĐĐžĐēŅĐŧĐĩĐŊŅĐ°ŅиŅ AgentGPT",
+ "CLOSE": "ĐĐ°ĐēŅŅŅŅ",
+ "CONTINUE": "ĐŅОдОĐģĐļĐ°ŅŅ",
+ "COPIED_TO_CLIPBOARD": "ĐĄĐēĐžĐŋиŅОваĐŊĐž в ĐąŅŅĐĩŅ ОйĐŧĐĩĐŊĐ°! đ",
+ "COPY": "ĐĐžĐŋиŅОваŅŅ",
+ "CREATE_AN_AGENT_DESCRIPTION": "ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ/ŅĐĩĐģŅ и ĐŊĐ°Đļав ÂĢРаСвĐĩŅĐŊŅŅŅÂģ!",
+ "CURRENT_TASKS": "ĐĸĐĩĐēŅŅиĐĩ СадаŅи",
+ "EXECUTING": "вŅĐŋĐžĐģĐŊĐĩĐŊиĐĩ",
+ "EXPORT": "ĐĐēŅĐŋĐžŅŅиŅОваŅŅ",
+ "IMAGE": "ĐСОйŅĐ°ĐļĐĩĐŊиĐĩ",
+ "LOOP": "ĐĐĩŅĐģŅ",
+ "PAUSED": "ĐŅиОŅŅĐ°ĐŊОвĐģĐĩĐŊĐž",
+ "RESET": "ĐĄĐąŅĐžŅиŅŅ",
+ "RUNNING": "Đ Ņ
ОдĐĩ вŅĐŋĐžĐģĐŊĐĩĐŊиŅ",
+ "SAVE": "ĐĄĐžŅ
ŅĐ°ĐŊиŅŅ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "ЧŅОйŅ ĐŋĐžĐģŅŅиŅŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅŅ иĐŊŅĐžŅĐŧĐ°ŅиŅ Ой AgentGPT, ĐĩĐŗĐž Đ´ĐžŅĐžĐļĐŊОК ĐēĐ°ŅŅĐĩ и Ņ. Đ´., ĐŋĐĩŅĐĩКдиŅĐĩ ĐŋĐž ŅĐģĐĩĐ´ŅŅŅĐĩĐš ŅŅŅĐģĐēĐĩ.",
+ "create-a-comprehensive-report-of-the-nike-company": "ХОСдаŅŅ ĐēĐžĐŧĐŋĐģĐĩĐēŅĐŊŅĐš ĐžŅŅĐĩŅ Đž ĐēĐžĐŧĐŋĐ°ĐŊии Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "ĐŅĐģи вŅ ŅŅĐžĐģĐēĐŊŅĐģиŅŅ Ņ ĐŋŅОйĐģĐĩĐŧĐ°Đŧи, ОйŅĐ°ŅиŅĐĩŅŅ Đē ĐŊĐ°Đŧ",
+ "plan-a-detailed-trip-to-hawaii": "ĐĄĐŋĐģĐ°ĐŊиŅŅĐšŅĐĩ Đ´ĐĩŅĐ°ĐģŅĐŊĐžĐĩ ĐŋŅŅĐĩŅĐĩŅŅвиĐĩ ĐŊĐ° ĐаваКи.",
+ "platformergpt": "ĐĐģĐ°ŅŅĐžŅĐŧĐĩŅGPT đŽ",
+ "researchgpt": "ĐŅŅĐģĐĩдОваĐŊиŅGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "вĐĩĐą-ĐŋОиŅĐē"
+}
diff --git a/next/public/locales/ru/drawer.json b/next/public/locales/ru/drawer.json
new file mode 100644
index 0000000..a14a499
--- /dev/null
+++ b/next/public/locales/ru/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "ĐŖŅĐĩŅĐŊĐ°Ņ СаĐŋиŅŅ",
+ "HELP_BUTTON": "ĐĐžĐŧĐžŅŅ",
+ "MY_AGENTS": "ĐОи Đ°ĐŗĐĩĐŊŅŅ",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ĐĄĐŊĐ°ŅĐ°ĐģĐ° ваĐŧ ĐŊŅĐļĐŊĐž ŅОСдаŅŅ и ŅĐžŅ
ŅĐ°ĐŊиŅŅ ŅвОĐĩĐŗĐž ĐŋĐĩŅвОĐŗĐž Đ°ĐŗĐĩĐŊŅĐ°, ĐŋŅĐĩĐļĐ´Đĩ ŅĐĩĐŧ ŅŅĐž-ĐģийО ĐŋĐžŅвиŅŅŅ СдĐĩŅŅ!",
+ "SETTINGS_BUTTON": "ĐĐ°ŅŅŅОКĐēи",
+ "SIGN_IN": "ĐОКŅи",
+ "SIGN_IN_NOTICE": "ĐОКдиŅĐĩ, ŅŅОйŅ ŅĐžŅ
ŅĐ°ĐŊиŅŅ ŅвОиŅ
Đ°ĐŗĐĩĐŊŅОв и ŅĐŋŅавĐģŅŅŅ ŅвОĐĩĐš ŅŅĐĩŅĐŊОК СаĐŋиŅŅŅ!",
+ "SIGN_OUT": "ĐŅĐšŅи",
+ "SUPPORT_BUTTON": "ĐОддĐĩŅĐļиваŅŅ",
+ "USER_IMAGE": "ĐСОйŅĐ°ĐļĐĩĐŊиĐĩ ĐŋĐžĐģŅСОваŅĐĩĐģŅ"
+}
diff --git a/next/public/locales/ru/errors.json b/next/public/locales/ru/errors.json
new file mode 100644
index 0000000..5bae96d
--- /dev/null
+++ b/next/public/locales/ru/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ĐŅийĐēĐ° ĐŋŅи Đ´ĐžŅŅŅĐŋĐĩ Đē ĐēĐģŅŅŅ OpenAI API. ĐŅОвĐĩŅŅŅĐĩ ĐēĐģŅŅ API иĐģи ĐŋĐžĐŋŅОйŅĐšŅĐĩ ĐŋОСĐļĐĩ.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ĐŅийĐēĐ° ĐŋŅи дОйавĐģĐĩĐŊии Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅŅ
СадаŅ. ĐОСĐŧĐžĐļĐŊĐž, ĐŊĐ°ŅĐ° ĐŧОдĐĩĐģŅ ĐŊĐĩ ĐŧĐžĐļĐĩŅ ОйŅайОŅĐ°ŅŅ ĐžŅвĐĩŅ, ŅŅĐž ĐŋŅивĐĩĐģĐž Đē ŅŅĐžĐŧŅ. ĐŅОдОĐģĐļĐ°ĐĩĐŧ...",
+ "RATE_LIMIT_EXCEEDED": "ĐŅĐĩвŅŅĐĩĐŊ ĐģиĐŧиŅ СаĐŋŅĐžŅОв! ĐĐžĐļĐ°ĐģŅĐšŅŅĐ°, СаĐŧĐĩĐ´ĐģиŅĐĩ...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "ĐŅĐžŅ Đ°ĐŗĐĩĐŊŅ Đ´ĐžŅŅиĐŗ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžĐŗĐž ĐēĐžĐģиŅĐĩŅŅва СаĐŋŅŅĐēĐ°ĐĩĐŧŅŅ
ŅиĐēĐģОв. ЧŅОйŅ ŅĐžŅ
ŅĐ°ĐŊиŅŅ ваŅ ĐēĐžŅĐĩĐģĐĩĐē, ŅŅĐžŅ Đ°ĐŗĐĩĐŊŅ ŅĐĩĐšŅĐ°Ņ ĐžŅŅĐ°ĐŊОвиŅŅŅ... ĐĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžĐĩ ĐēĐžĐģиŅĐĩŅŅвО СаĐŋŅŅĐēĐ°ĐĩĐŧŅŅ
ŅиĐēĐģОв Đ°ĐŗĐĩĐŊŅĐ° ĐŧĐžĐļĐŊĐž ĐŊĐ°ŅŅŅОиŅŅ в ĐŊĐ°ŅŅŅОКĐēĐ°Ņ
.",
+ "DEMO_LOOPS_REACHED": "Đ ŅĐžĐļĐ°ĐģĐĩĐŊиŅ, ĐŋĐžŅĐēĐžĐģŅĐēŅ ŅŅĐž Đ´ĐĩĐŧĐžĐŊŅŅŅĐ°ŅиОĐŊĐŊĐžĐĩ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ, ĐŧŅ ĐŊĐĩ ĐŧĐžĐļĐĩĐŧ СаĐŋŅŅĐēĐ°ŅŅ ĐŊĐ°ŅиŅ
Đ°ĐŗĐĩĐŊŅОв ŅĐģиŅĐēĐžĐŧ Đ´ĐžĐģĐŗĐž. ĐŅиĐŧĐĩŅĐ°ĐŊиĐĩ: ĐĩŅĐģи ваĐŧ ĐŊŅĐļĐŊĐž Đ´ĐģиŅĐĩĐģŅĐŊĐžĐĩ вŅĐŋĐžĐģĐŊĐĩĐŊиĐĩ, ĐŋĐžĐļĐ°ĐģŅĐšŅŅĐ°, ŅĐēĐ°ĐļиŅĐĩ ŅвОК ŅОйŅŅвĐĩĐŊĐŊŅĐš ĐēĐģŅŅ API в ĐŊĐ°ŅŅŅОКĐēĐ°Ņ
. ĐŅŅĐ°ĐŊОвĐēĐ°...",
+ "AGENT_MANUALLY_SHUT_DOWN": "ĐĐŗĐĩĐŊŅ ĐąŅĐģ ĐžŅŅĐ°ĐŊОвĐģĐĩĐŊ вŅŅŅĐŊŅŅ.",
+ "ALL_TASKS_COMPLETETD": "ĐŅĐĩ СадаŅи вŅĐŋĐžĐģĐŊĐĩĐŊŅ. ĐŅŅĐ°ĐŊОвĐēĐ°...",
+ "ERROR_API_KEY_QUOTA": "ĐŅийĐēĐ° ĐŋŅи иŅĐŋĐžĐģŅСОваĐŊии ĐēĐģŅŅĐ° OpenAI API. ĐŅ ĐŋŅĐĩвŅŅиĐģи ŅвОŅ ŅĐĩĐēŅŅŅŅ ĐēвОŅŅ, ĐŋĐžĐļĐ°ĐģŅĐšŅŅĐ°, ĐŋŅОвĐĩŅŅŅĐĩ ŅвОи ĐŋĐģĐ°ŅĐĩĐļĐŊŅĐĩ Đ´Đ°ĐŊĐŊŅĐĩ.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ĐŅийĐēĐ°: ваŅ ĐēĐģŅŅ OpenAI API ĐŊĐĩ иĐŧĐĩĐĩŅ Đ´ĐžŅŅŅĐŋĐ° Đē GPT-4. ĐĄĐŊĐ°ŅĐ°ĐģĐ° ваĐŧ ĐŊŅĐļĐŊĐž СаŅĐĩĐŗиŅŅŅиŅОваŅŅŅŅ в ŅĐŋиŅĐēĐĩ ĐžĐļидаĐŊиŅ OpenAI. (ĐŅĐž ĐžŅĐģиŅĐ°ĐĩŅŅŅ ĐžŅ ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ĐŅийĐēĐ° ĐŋŅи СаĐŋŅĐžŅĐĩ иŅŅ
ОдĐŊŅŅ
СадаŅ. ĐĐžĐŋŅОйŅĐšŅĐĩ ĐĩŅĐĩ ŅаС, ŅŅĐŊĐĩĐĩ ŅŅĐžŅĐŧŅĐģиŅŅĐšŅĐĩ ŅĐĩĐģŅ Đ°ĐŗĐĩĐŊŅĐ° иĐģи иСĐŧĐĩĐŊиŅĐĩ ĐĩĐĩ ŅĐ°ĐēиĐŧ ОйŅаСОĐŧ, ŅŅОйŅ ĐžĐŊĐ° ŅООŅвĐĩŅŅŅвОваĐģĐ° ĐŊĐ°ŅĐĩĐš ĐŧОдĐĩĐģи. ĐŅŅĐ°ĐŊОвĐēĐ°...",
+ "INVALID_OPENAI_API_KEY": "ĐШĐĐĐĐ ĐŊĐĩвĐĩŅĐŊŅĐš ĐēĐģŅŅ API OpenAI"
+}
diff --git a/next/public/locales/ru/help.json b/next/public/locales/ru/help.json
new file mode 100644
index 0000000..8bf4473
--- /dev/null
+++ b/next/public/locales/ru/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "ĐĐžĐēŅĐŧĐĩĐŊŅĐ°ŅиŅ AgentGPT",
+ "FOLLOW_THE_JOURNEY": "ĐĄĐģĐĩдиŅĐĩ Са ĐŊĐ°ŅиĐŧи Đ´ĐžŅŅиĐļĐĩĐŊиŅĐŧи:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "ĐСаиĐŧОдĐĩĐšŅŅвиĐĩ Ņ вĐĩĐą-ŅĐ°ĐšŅĐ°Đŧи и ĐģŅĐ´ŅĐŧи đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "ĐŋОСвОĐģŅĐĩŅ ваĐŧ ĐŊĐ°ŅŅŅОиŅŅ и СаĐŋŅŅŅиŅŅ ĐŊĐĩСавиŅиĐŧŅŅ
Đ°ĐŗĐĩĐŊŅОв ĐРв ваŅĐĩĐŧ ĐąŅĐ°ŅСĐĩŅĐĩ. ĐаСОвиŅĐĩ ваŅĐĩĐŗĐž ŅОйŅŅвĐĩĐŊĐŊĐžĐŗĐž Đ°ĐŗĐĩĐŊŅĐ° ĐРи ĐžĐŋŅĐĩĐ´ĐĩĐģиŅĐĩ ĐĩĐŗĐž ŅĐĩĐģŅ. ĐĐŗĐĩĐŊŅ ĐĐ ĐŋĐžĐŋŅŅĐ°ĐĩŅŅŅ Đ´ĐžŅŅиŅŅ СадаĐŊĐŊОК ŅĐĩĐģи, ŅОСдаваŅ СадаŅи, вŅĐŋĐžĐģĐŊŅŅ иŅ
, Đ° СаŅĐĩĐŧ ĐžŅĐĩĐŊиваŅ ŅĐĩСŅĐģŅŅĐ°ŅŅ đ",
+ "LONG_TERM_MEMORY": "ĐĐžĐģĐŗĐžŅŅĐžŅĐŊĐ°Ņ ĐŋĐ°ĐŧŅŅŅ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "ĐŅĐ° ĐŋĐģĐ°ŅŅĐžŅĐŧĐ° ĐŊĐ°Ņ
ОдиŅŅŅ в ĐąĐĩŅĐ°-вĐĩŅŅии, ĐŧŅ в ĐŊĐ°ŅŅĐžŅŅĐĩĐĩ вŅĐĩĐŧŅ ŅайОŅĐ°ĐĩĐŧ ĐŊĐ°Đ´ ŅĐģĐĩĐ´ŅŅŅиĐŧ:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "ЧŅОйŅ ŅСĐŊĐ°ŅŅ йОĐģŅŅĐĩ Ой AgentGPT, ĐĩĐŗĐž Đ´ĐžŅĐžĐļĐŊОК ĐēĐ°ŅŅĐĩ, ŅĐ°ŅŅĐž СадаваĐĩĐŧŅŅ
вОĐŋŅĐžŅĐ°Ņ
и Ņ. Đ´., ĐŋĐžŅĐĩŅиŅĐĩ",
+ "WEB_BROWSING": "ĐĐĩĐą-ĐąŅĐ°ŅСиĐŊĐŗ đ",
+ "WELCOME_TO_AGENT_GPT": "ĐОйŅĐž ĐŋĐžĐļĐ°ĐģОваŅŅ в AgentGPT"
+}
diff --git a/next/public/locales/ru/indexPage.json b/next/public/locales/ru/indexPage.json
new file mode 100644
index 0000000..37a0671
--- /dev/null
+++ b/next/public/locales/ru/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "ĐĐĩŅĐ°",
+ "HEADING_DESCRIPTION": "ХОйĐĩŅиŅĐĩ, ĐŊĐ°ŅŅŅОКŅĐĩ и ŅŅŅĐ°ĐŊОвиŅĐĩ авŅĐžĐŊĐžĐŧĐŊŅŅ
Đ°ĐŗĐĩĐŊŅОв иŅĐēŅŅŅŅвĐĩĐŊĐŊĐžĐŗĐž иĐŊŅĐĩĐģĐģĐĩĐēŅĐ° в ŅвОĐĩĐŧ ĐąŅĐ°ŅСĐĩŅĐĩ.",
+ "AGENT_NAME": "ĐĐŧŅ",
+ "LABEL_AGENT_GOAL": "ĐĻĐĩĐģŅ",
+ "PLACEHOLDER_AGENT_GOAL": "ĐĄĐ´ĐĩĐģĐ°ŅŅ ĐŧиŅ ĐģŅŅŅĐĩ",
+ "BUTTON_DEPLOY_AGENT": "ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°",
+ "BUTTON_STOP_AGENT": "ĐŅŅĐ°ĐŊОвиŅŅ Đ°ĐŗĐĩĐŊŅĐ°"
+}
diff --git a/next/public/locales/ru/languages.json b/next/public/locales/ru/languages.json
new file mode 100644
index 0000000..070b368
--- /dev/null
+++ b/next/public/locales/ru/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "ĐĐŊĐŗĐģиКŅĐēиК",
+ "FRENCH": "ФŅĐ°ĐŊŅŅСŅĐēиК",
+ "SPANISH": "ĐŅĐŋĐ°ĐŊŅĐēиК",
+ "GERMAN": "ĐĐĩĐŧĐĩŅĐēиК",
+ "JAPANESE": "Đ¯ĐŋĐžĐŊŅĐēиК",
+ "KOREAN": "ĐĐžŅĐĩĐšŅĐēиК",
+ "CHINESE": "ĐиŅĐ°ĐšŅĐēиК",
+ "PORTUGEES": "ĐĐžŅŅŅĐŗĐ°ĐģŅŅĐēиК",
+ "ITALIAN": "ĐŅĐ°ĐģŅŅĐŊŅĐēиК",
+ "DUTCH": "ĐĐžĐģĐģĐ°ĐŊĐ´ŅĐēиК",
+ "POLSKI": "ĐĐžĐģŅŅĐēиК",
+ "HUNGARIAN": "ĐĐĩĐŊĐŗĐĩŅŅĐēиК",
+ "ROMANIAN": "Đ ŅĐŧŅĐŊŅĐēиК",
+ "SLOVAK": "ĐĄĐģОваŅĐēиК"
+}
diff --git a/next/public/locales/ru/settings.json b/next/public/locales/ru/settings.json
new file mode 100644
index 0000000..b94d30b
--- /dev/null
+++ b/next/public/locales/ru/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "Đ Đ°ŅŅиŅĐĩĐŊĐŊŅĐĩ ĐŊĐ°ŅŅŅОКĐēи",
+ "API_KEY": "API-ĐēĐģŅŅ",
+ "AUTOMATIC_MODE": "ĐвŅĐžĐŧĐ°ŅиŅĐĩŅĐēиК ŅĐĩĐļиĐŧ",
+ "AUTOMATIC_MODE_DESCRIPTION": "(ĐĐž ŅĐŧĐžĐģŅĐ°ĐŊиŅ): ĐĐŗĐĩĐŊŅ авŅĐžĐŧĐ°ŅиŅĐĩŅĐēи вŅĐŋĐžĐģĐŊŅĐĩŅ ĐēĐ°ĐļĐ´ŅŅ СадаŅŅ.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "ĐĐŗŅĐ°ĐŊиŅиваĐĩŅ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžĐĩ ĐēĐžĐģиŅĐĩŅŅвО ŅĐžĐēĐĩĐŊОв, иŅĐŋĐžĐģŅСŅĐĩĐŧŅŅ
в ĐēĐ°ĐļĐ´ĐžĐŧ вŅСОвĐĩ API (йОĐģĐĩĐĩ вŅŅĐžĐēĐžĐĩ СĐŊĐ°ŅĐĩĐŊиĐĩ Đ´Đ°ĐĩŅ йОĐģĐĩĐĩ ĐŋОдŅОйĐŊŅĐĩ ĐžŅвĐĩŅŅ, ĐŊĐž ŅŅОиŅ Đ´ĐžŅĐžĐļĐĩ).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "ĐŖĐŋŅавĐģŅĐĩŅ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊŅĐŧ ŅиŅĐģĐžĐŧ ŅиĐēĐģОв, СаĐŋŅŅĐĩĐŊĐŊŅŅ
Đ°ĐŗĐĩĐŊŅĐžĐŧ (йОĐģŅŅĐĩĐĩ СĐŊĐ°ŅĐĩĐŊиĐĩ ĐŋŅивОдиŅ Đē йОĐģŅŅĐĩĐŧŅ ŅиŅĐģŅ вŅСОвОв API).",
+ "GET_YOUR_OWN_APIKEY": "ĐĐžĐģŅŅиŅĐĩ ŅвОК ŅОйŅŅвĐĩĐŊĐŊŅĐš ĐēĐģŅŅ API OpenAI",
+ "HERE": "СдĐĩŅŅ",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "ĐĐ´ĐĩŅŅ вŅ ĐŧĐžĐļĐĩŅĐĩ дОйавиŅŅ ŅвОК ĐēĐģŅŅ OpenAI API. ĐŅĐž ОСĐŊĐ°ŅĐ°ĐĩŅ, ŅŅĐž ваĐŧ ĐŊŅĐļĐŊĐž СаĐŋĐģĐ°ŅиŅŅ Са иŅĐŋĐžĐģŅСОваĐŊиĐĩ ŅвОĐĩĐŗĐž ŅĐžĐēĐĩĐŊĐ° OpenAI, ĐŊĐž вŅ ĐŋĐžĐģŅŅиŅĐĩ йОĐģŅŅиК Đ´ĐžŅŅŅĐŋ Đē ChatGPT! ĐŅĐžĐŧĐĩ ŅĐžĐŗĐž, вŅ ĐŧĐžĐļĐĩŅĐĩ вŅĐąŅĐ°ŅŅ ĐģŅĐąŅŅ ĐŧОдĐĩĐģŅ, ĐŋŅĐĩĐ´ĐģĐ°ĐŗĐ°ĐĩĐŧŅŅ OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "ĐĐžĐģŅŅиĐĩ СĐŊĐ°ŅĐĩĐŊиŅ Đ´ĐĩĐģĐ°ŅŅ вŅвОд йОĐģĐĩĐĩ ŅĐģŅŅĐ°ĐšĐŊŅĐŧ, в ŅĐž вŅĐĩĐŧŅ ĐēĐ°Đē йОĐģĐĩĐĩ ĐŊиСĐēиĐĩ СĐŊĐ°ŅĐĩĐŊиŅ Đ´ĐĩĐģĐ°ŅŅ ĐĩĐŗĐž йОĐģĐĩĐĩ ŅĐžĐēŅŅиŅОваĐŊĐŊŅĐŧ и ĐžĐŋŅĐĩĐ´ĐĩĐģĐĩĐŊĐŊŅĐŧ.",
+ "INFO_TO_USE_GPT4": "ĐĐģŅ иŅĐŋĐžĐģŅСОваĐŊиŅ ĐŧОдĐĩĐģи GPT-4 ĐŊĐĩОйŅ
ОдиĐŧĐž ŅĐ°ĐēĐļĐĩ ŅĐēаСаŅŅ API-ĐēĐģŅŅ. ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžĐģŅŅиŅŅ ĐĩĐŗĐž",
+ "INVALID_OPENAI_API_KEY": "ĐĐĩвĐĩŅĐŊŅĐš API-ĐēĐģŅŅ!",
+ "LABEL_MODE": "Đ ĐĩĐļиĐŧ",
+ "LABEL_MODEL": "ĐОдĐĩĐģŅ",
+ "LANG": "Đ¯ĐˇŅĐē",
+ "LINK": "СаĐŋŅĐžŅиŅŅ API-ĐēĐģŅŅ",
+ "LOOP": "ĐĻиĐēĐģ",
+ "MUST_CONNECT_CREDIT_CARD": "ĐŅиĐŧĐĩŅĐ°ĐŊиĐĩ: ĐŅ Đ´ĐžĐģĐļĐŊŅ ĐŋОдĐēĐģŅŅиŅŅ ĐēŅĐĩдиŅĐŊŅŅ ĐēĐ°ŅŅŅ Đē ваŅĐĩĐŧŅ Đ°ĐēĐēĐ°ŅĐŊŅŅ",
+ "NOTE_API_KEY_USAGE": "ĐŅĐžŅ ĐēĐģŅŅ иŅĐŋĐžĐģŅСŅĐĩŅŅŅ ŅĐžĐģŅĐēĐž в ŅĐĩĐēŅŅĐĩĐš ŅĐĩŅŅии ĐąŅĐ°ŅСĐĩŅĐ°.",
+ "NOTE_TO_GET_OPENAI_KEY": "ĐĐ ĐĐĐЧĐĐĐĐ: ĐĐģŅ ĐŋĐžĐģŅŅĐĩĐŊиŅ API-ĐēĐģŅŅĐ° ваĐŧ ĐŊĐĩОйŅ
ОдиĐŧĐž СаŅĐĩĐŗиŅŅŅиŅОваŅŅŅŅ в ŅŅĐĩŅĐŊОК СаĐŋиŅи OpenAI ĐŋĐž ŅĐģĐĩĐ´ŅŅŅĐĩĐš ŅŅŅĐģĐēĐĩ:",
+ "PAUSE": "ĐĐ°ŅСа",
+ "PAUSE_MODE": "Đ ĐĩĐļиĐŧ ĐŋĐ°ŅСŅ",
+ "PAUSE_MODE_DESCRIPTION": "ĐĐŗĐĩĐŊŅ ĐŋŅиОŅŅĐ°ĐŊавĐģиваĐĩŅ вŅĐŋĐžĐģĐŊĐĩĐŊиĐĩ ĐŋĐžŅĐģĐĩ ĐēĐ°ĐļĐ´ĐžĐŗĐž ĐŊайОŅĐ° СадаŅ(и)",
+ "PENAI_API_KEY": "ĐĐĩĐ´ĐĩĐšŅŅвиŅĐĩĐģŅĐŊŅĐš API-ĐēĐģŅŅ OpenAI",
+ "PLAY": "ĐĐžŅĐŋŅОиСвĐĩŅŅи",
+ "SETTINGS_DIALOG_HEADER": "ĐĐ°ŅŅŅОКĐēи â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ĐОдĐŋиŅĐēĐ° ChatGPT Plus ĐŊĐĩ ĐąŅĐ´ĐĩŅ ŅайОŅĐ°ŅŅ)",
+ "TEMPERATURE": "ĐĸĐĩĐŧĐŋĐĩŅĐ°ŅŅŅĐ°",
+ "TOKENS": "ĐĸĐžĐēĐĩĐŊŅ"
+}
diff --git a/next/public/locales/sk/chat.json b/next/public/locales/sk/chat.json
new file mode 100644
index 0000000..89fb88f
--- /dev/null
+++ b/next/public/locales/sk/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "DokonÄovanie:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "ZvÃĄÅžte podporu projektu na Github-e.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Text skopÃrovanÃŊ do schrÃĄnky",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Nepodarilo sa skopÃrovaÅĨ text do schrÃĄnky",
+ "CREATE_AN_AGENT_DESCRIPTION": "Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "EMBARKING_ON_NEW_GOAL": "ZaÄÃname novÃŊ cieÄž:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ MomentÃĄlne sa stretÃĄvame s mimoriadne vysokou premÃĄvkou. OÄakÃĄvajte meÅĄkania a chyby, ak akÃŊ nepouÅžÃvate svoj API kÄžÃēÄ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ Podporte rozvoj AgentGPT. đī¸",
+ "NO_MORE_TASKS": "ÅŊiadne ÄalÅĄie Ãēlohy nie sÃē k dispozÃcii pre:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(Ak to trvÃĄ viac ako 30 sekÃēnd, obnovte strÃĄnku alebo spustite agenta znova manuÃĄlne)",
+ "SUPPORT_NOW": "PodporiÅĨ teraz đ",
+ "TASK_ADDED": "Ãloha pridanÃĄ:",
+ "THINKING": "PremÃŊÅĄÄžanie...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ MôŞete uviesÅĨ svoj OpenAI API kÄžÃēÄ v sekcii Nastavenia, aby ste zvÃŊÅĄili obmedzenia!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Vytvorte agenta pridanÃm mena/cieÄža a stlaÄenÃm nasadiÅĨ!"
+}
diff --git a/next/public/locales/sk/chat.missing.json b/next/public/locales/sk/chat.missing.json
new file mode 100644
index 0000000..4eec2c5
--- /dev/null
+++ b/next/public/locales/sk/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Vytvorte agenta pridanÃm mena / cieÄža a stlaÄenÃm nasadiÅĨ! \nVyskÃēÅĄajte naÅĄe prÃklady niÅžÅĄie!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta smerom mena a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅŅĐ° \"ĐŅиĐŋŅŅŅиŅи!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/sk/common.json b/next/public/locales/sk/common.json
new file mode 100644
index 0000000..45d433d
--- /dev/null
+++ b/next/public/locales/sk/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "Pridanie Ãēlohy",
+ "AGENTGPT_DOCUMENTATION": "DokumentÃĄcia AgentGPT",
+ "CLOSE": "ZavrieÅĨ",
+ "CONTINUE": "Dalej",
+ "COPIED_TO_CLIPBOARD": "SkopÃrovanÊ do schrÃĄnky! đ",
+ "COPY": "KopÃrovaÅĨ",
+ "CREATE_AN_AGENT_DESCRIPTION": "Vytvorte agenta pridanÃm mena / cieÄža a stlaÄenÃm nasadiÅĨ!",
+ "CURRENT_TASKS": "AktuÃĄlne Ãēlohy",
+ "EXECUTING": "VykonÃĄvanie",
+ "EXPORT": "ExportovaÅĨ",
+ "IMAGE": "ObrÃĄzok",
+ "LOOP": "SmyÄka",
+ "PAUSED": "PozastavenÊ",
+ "RESET": "ObnoviÅĨ",
+ "RUNNING": "Prebieha",
+ "SAVE": "UloÅžiÅĨ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Ak chcete zÃskaÅĨ viac informÃĄcià o AgentGPT, jeho plÃĄne atÄ., navÅĄtÃvte nasledujÃēci odkaz",
+ "create-a-comprehensive-report-of-the-nike-company": "Vytvorte komplexnÃē sprÃĄvu spoloÄnosti Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Ak mÃĄte problÊmy, obrÃĄÅĨte sa na nÃĄs",
+ "plan-a-detailed-trip-to-hawaii": "NaplÃĄnujte si podrobnÃŊ vÃŊlet na Havaj.",
+ "platformergpt": "PlatformaGPT đŽ",
+ "researchgpt": "PreskÃēmajte GPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "vyhÄžadÃĄvanie na webe"
+}
diff --git a/next/public/locales/sk/drawer.json b/next/public/locales/sk/drawer.json
new file mode 100644
index 0000000..81b8dfb
--- /dev/null
+++ b/next/public/locales/sk/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "ÃÄet",
+ "HELP_BUTTON": "Pomoc",
+ "MY_AGENTS": "Moji agenti",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Najprv musÃte vytvoriÅĨ a uloÅžiÅĨ svojho prvÊho agenta, neÅž sa tu nieÄo zobrazÃ!",
+ "SETTINGS_BUTTON": "Nastavenia",
+ "SIGN_IN": "PrihlÃĄsiÅĨ sa",
+ "SIGN_IN_NOTICE": "PrihlÃĄste sa, aby ste mohli uloÅžiÅĨ svojich agentov a spravovaÅĨ svoj ÃēÄet!",
+ "SIGN_OUT": "OdhlÃĄsiÅĨ sa",
+ "SUPPORT_BUTTON": "podpora",
+ "USER_IMAGE": "ObrÃĄzok pouÅžÃvateÄža"
+}
diff --git a/next/public/locales/sk/errors.json b/next/public/locales/sk/errors.json
new file mode 100644
index 0000000..6c7d070
--- /dev/null
+++ b/next/public/locales/sk/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "Chyba pri prÃstupe k OpenAI API kÄžÃēÄu. Skontrolujte prosÃm svoj API kÄžÃēÄ alebo to skÃēste neskôr.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "Chyba pri pridÃĄvanà ÄalÅĄÃch Ãēloh. MoÅžno naÅĄa model nevie spracovaÅĨ vÃĄÅĄ vÃŊber a toto je vÃŊsledkom. PokraÄovanie...",
+ "RATE_LIMIT_EXCEEDED": "Dosiahli ste maximÃĄlny poÄet dotazov! ProsÃm, spomaÄžte...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "Tento agent dosiahol maximÃĄlny poÄet opakovanÃ. PretoÅže chceme uÅĄetriÅĨ vaÅĄu peÅaÅženku, tento agent sa teraz zastavÃ... MaximÃĄlny poÄet behov agenta je moÅžnÊ konfigurovaÅĨ v nastaveniach.",
+ "DEMO_LOOPS_REACHED": "PrepÃĄÄte, ale tÃĄto je ukÃĄÅžkovÃĄ aplikÃĄcia, takÅže nemôŞeme nechaÅĨ naÅĄich agentov behaÅĨ prÃliÅĄ dlho. PoznÃĄmka: Ak chcete behy predÄēÅžiÅĨ, zadajte vlastnÃŊ API kÄžÃēÄ v nastaveniach. Zastavenie...",
+ "AGENT_MANUALLY_SHUT_DOWN": "Agent bol ruÄne vypnutÃŊ.",
+ "ALL_TASKS_COMPLETETD": "VÅĄetky Ãēlohy sÃē dokonÄenÊ. Zastavenie...",
+ "ERROR_API_KEY_QUOTA": "Chyba pri pouÅžÃvanà OpenAI API kÄžÃēÄa. PrekroÄili ste svoju sÃēÄasnÃē kvÃŗtu, skontrolujte svoje fakturaÄnÊ Ãēdaje.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "Chyba: VÃĄÅĄ OpenAI API kÄžÃēÄ nemÃĄ prÃstup k GPT-4. Najskôr sa musÃte zaregistrovaÅĨ v OpenAI Äakacej zoznamu. (To sa lÃÅĄi od ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "Chyba pri zÃskavanà zÃĄkladnÃŊch Ãēloh. SkÃēste to znova, zmeÅte cieÄž agenta tak, aby bol jasnÃŊ alebo ho upravte tak, aby zodpovedal nÃĄÅĄmu modelu. Zastavenie...",
+ "INVALID_OPENAI_API_KEY": "Chyba neplatnÃŊ OpenAI API-kÄžÃēÄ"
+}
diff --git a/next/public/locales/sk/help.json b/next/public/locales/sk/help.json
new file mode 100644
index 0000000..5b95df1
--- /dev/null
+++ b/next/public/locales/sk/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "DokumentÃĄcia AgentGPT",
+ "FOLLOW_THE_JOURNEY": "Sledujte nÃĄs na naÅĄej ceste:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Interakcia s webovÃŊmi strÃĄnkami a ÄžuÄmi đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "vÃĄm umoÅžÅuje konfigurovaÅĨ a spÃēÅĄÅĨaÅĨ nezÃĄvislÃŊch agentov umelej inteligencie vo vaÅĄom prehliadaÄi. Nazvite svojho vlastnÊho agenta AI a stanovte jeho cieÄž. Agent AI sa bude snaÅžiÅĨ dosiahnuÅĨ stanovenÃŊ cieÄž tÃŊm, Åže vytvÃĄra Ãēlohy, vykonÃĄva ich a potom hodnotà ich vÃŊsledky đ",
+ "LONG_TERM_MEMORY": "DlhodobÃĄ pamäÅĨ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "TÃĄto platforma je momentÃĄlne v beta verzii, momentÃĄlne pracujeme na tÃŊchto veciach:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "Ak sa chcete dozvedieÅĨ viac o AgentGPT, jeho plÃĄne, Äasto kladenÃŊch otÃĄzkach atÄ., navÅĄtÃvte strÃĄnku",
+ "WEB_BROWSING": "Prehliadanie webovÃŊch strÃĄnok đ",
+ "WELCOME_TO_AGENT_GPT": "Vitajte v AgentGPT"
+}
diff --git a/next/public/locales/sk/indexPage.json b/next/public/locales/sk/indexPage.json
new file mode 100644
index 0000000..4058bf6
--- /dev/null
+++ b/next/public/locales/sk/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "BÊta",
+ "HEADING_DESCRIPTION": "Skladajte, konfigurujte a inÅĄtalujte autonÃŗmne agentov AI vo svojom prehliadaÄi.",
+ "AGENT_NAME": "Meno",
+ "LABEL_AGENT_GOAL": "CieÄž",
+ "PLACEHOLDER_AGENT_GOAL": "UrobiÅĨ svet lepÅĄÃm miestom",
+ "BUTTON_DEPLOY_AGENT": "SpustiÅĨ agenta",
+ "BUTTON_STOP_AGENT": "ZastaviÅĨ agenta"
+}
diff --git a/next/public/locales/sk/languages.json b/next/public/locales/sk/languages.json
new file mode 100644
index 0000000..5f88868
--- /dev/null
+++ b/next/public/locales/sk/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "AngliÄtina",
+ "FRENCH": "FrancÃēzÅĄtina",
+ "SPANISH": "Å panielÄina",
+ "GERMAN": "NemÄina",
+ "JAPANESE": "JaponÄina",
+ "KOREAN": "KÃŗrejÄina",
+ "CHINESE": "ÄÃnÅĄtina",
+ "PORTUGEES": "PortugalÄina",
+ "ITALIAN": "TalianÄina",
+ "DUTCH": "HolandÄina",
+ "POLSKI": "PoÄžÅĄtina",
+ "HUNGARIAN": "MaÄarÄina",
+ "ROMANIAN": "RumunÄina",
+ "SLOVAK": "SlovenÄina"
+}
diff --git a/next/public/locales/sk/settings.json b/next/public/locales/sk/settings.json
new file mode 100644
index 0000000..f8d3846
--- /dev/null
+++ b/next/public/locales/sk/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "PokroÄilÊ nastavenia",
+ "API_KEY": "API kÄžÃēÄ",
+ "AUTOMATIC_MODE": "AutomatickÃŊ reÅžim",
+ "AUTOMATIC_MODE_DESCRIPTION": "(PredvolenÊ): Agent automaticky vykonÃĄva kaÅždÃē Ãēlohu.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "OvlÃĄdajte maximÃĄlny poÄet tokenov pouÅžitÃŊch v kaÅždom volanà API (vyÅĄÅĄia hodnota poskytuje podrobnejÅĄie odpovede, ale je drahÅĄia).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "OvlÃĄdajte maximÃĄlny poÄet sluÄiek, ktorÊ spustà agent (vyÅĄÅĄia hodnota znamenÃĄ viac volanà API).",
+ "GET_YOUR_OWN_APIKEY": "ZÃskajte svoj vlastnÃŊ OpenAI API kÄžÃēÄ",
+ "HERE": "tu",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Tu môŞete pridaÅĨ svoj OpenAI API kÄžÃēÄ. To znamenÃĄ, Åže musÃte platiÅĨ za pouÅžitie vlastnÊho OpenAI tokenu, ale zÃskate väÄÅĄÃ prÃstup k ChatGPT! Okrem toho môŞete vybraÅĨ akÃŊkoÄžvek model ponÃēkanÃŊ OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "VyÅĄÅĄie hodnoty robia vÃŊstup viac nÃĄhodnÃŊm, zatiaÄž Äo niÅžÅĄie hodnoty ho zameriavajÃē a urÄujÃē.",
+ "INFO_TO_USE_GPT4": "Na pouÅžitie modelu GPT-4 je potrebnÊ zadaÅĨ aj API kÄžÃēÄ. MôŞete ho zÃskaÅĨ",
+ "INVALID_OPENAI_API_KEY": "NeplatnÃŊ API kÄžÃēÄ!",
+ "LABEL_MODE": "ReÅžim",
+ "LABEL_MODEL": "Model",
+ "LANG": "Jazyk",
+ "LINK": "ZÃskanie API kÄžÃēÄa",
+ "LOOP": "SmyÄka",
+ "MUST_CONNECT_CREDIT_CARD": "PoznÃĄmka: MusÃte pripojiÅĨ kreditnÃē kartu k vÃĄÅĄmu ÃēÄtu",
+ "NOTE_API_KEY_USAGE": "Tento kÄžÃēÄ sa pouÅžije iba poÄas aktuÃĄlnej relÃĄcie prehliadaÄa.",
+ "NOTE_TO_GET_OPENAI_KEY": "POZNÃMKA: Na zÃskanie API kÄžÃēÄa musÃte zaregistrovaÅĨ OpenAI ÃēÄet, ktorÃŊ môŞete urobiÅĨ na nasledujÃēcej adrese:",
+ "PAUSE": "PozastaviÅĨ",
+ "PAUSE_MODE": "ReÅžim pozastavenia",
+ "PAUSE_MODE_DESCRIPTION": "Agent sa pozastavà po kaÅždej sade Ãēloh(y)",
+ "PENAI_API_KEY": "NeplatnÃŊ kÄžÃēÄ API OpenAI",
+ "PLAY": "PrehraÅĨ",
+ "SETTINGS_DIALOG_HEADER": "Nastavenia â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(PredplatnÊ ChatGPT Plus nebude fungovaÅĨ)",
+ "TEMPERATURE": "Teplota",
+ "TOKENS": "Tokeny"
+}
diff --git a/next/public/locales/tr/chat.json b/next/public/locales/tr/chat.json
new file mode 100644
index 0000000..22f9bd9
--- /dev/null
+++ b/next/public/locales/tr/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "TamamlanÄąyor:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "LÃŧtfen GitHub'da projeye sponsor olmayÄą dÃŧÅÃŧnÃŧn.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "Metin panoya kopyalandÄą",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "Metin panoya kopyalanamÄąyor",
+ "CREATE_AN_AGENT_DESCRIPTION": "Bir ad / hedef ekleyerek ve konuÅlandÄąr'a basarak bir aracÄą oluÅturun! AÅaÄÄądaki Ãļrneklerimizi deneyin!",
+ "EMBARKING_ON_NEW_GOAL": "Yeni bir hedefe baÅlamak:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ OlaÄanÃŧstÃŧ trafik yaÅÄąyoruz, kendi API anahtarÄąnÄązÄą kullanmazsanÄąz gecikmeler ve baÅarÄąsÄązlÄąklar bekliyoruzđ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ AgentGPT'nin ilerlemesini desteklemeye yardÄąmcÄą olun. \nđī¸",
+ "NO_MORE_TASKS": "Åunun için baÅka alt gÃļrev yok:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(30 saniyeden fazla sÃŧrerse yeniden baÅlatÄąn)",
+ "SUPPORT_NOW": "Åimdi destek đ",
+ "TASK_ADDED": "GÃļrev eklendi:",
+ "THINKING": "DÃŧÅÃŧnÃŧyorum...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ ArttÄąrÄąlmÄąÅ limitler için ayarlar sekmesinden kendi OpenAI API anahtarÄąnÄązÄą saÄlayabilirsiniz!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ Bir ad/hedef ekleyip konuÅlandÄąr'a basarak bir aracÄą oluÅturun!"
+}
diff --git a/next/public/locales/tr/chat.missing.json b/next/public/locales/tr/chat.missing.json
new file mode 100644
index 0000000..8a8509f
--- /dev/null
+++ b/next/public/locales/tr/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ Bir isim / hedef ekleyerek ve konuÅlandÄąr'a basarak bir temsilci oluÅturun! \nAÅaÄÄądaki Ãļrneklerimizi deneyin!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ \"Temsilci!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/tr/common.json b/next/public/locales/tr/common.json
new file mode 100644
index 0000000..c13cd68
--- /dev/null
+++ b/next/public/locales/tr/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "GÃļrev Ekleme",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT Belgeleri",
+ "CLOSE": "KapalÄą",
+ "CONTINUE": "Devam etmek",
+ "COPIED_TO_CLIPBOARD": "Panoya kopyalandÄą! đ",
+ "COPY": "kopyala",
+ "CREATE_AN_AGENT_DESCRIPTION": "Bir ad / hedef ekleyerek ve konuÅlandÄąr'a basarak bir aracÄą oluÅturun!",
+ "CURRENT_TASKS": "Mevcut GÃļrevler",
+ "EXECUTING": "YÃŧrÃŧtme",
+ "EXPORT": "Ä°hracat",
+ "IMAGE": "resim",
+ "LOOP": "DÃļngÃŧ",
+ "PAUSED": "DuraklatÄąldÄą",
+ "RESET": "SÄąfÄąrla",
+ "RUNNING": "KoÅma",
+ "SAVE": "Kaydetmek",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPT, Yol HaritasÄą vb. hakkÄąnda daha fazla bilgi almak için aÅaÄÄądaki baÄlantÄąyÄą ziyaret edin",
+ "create-a-comprehensive-report-of-the-nike-company": "Nike Åirketi hakkÄąnda kapsamlÄą bir rapor oluÅturun",
+ "if-you-are-facing-issues-please-head-over-to-our": "Sorunlarla karÅÄąlaÅÄąyorsanÄąz, lÃŧtfen Åuraya gidin:",
+ "plan-a-detailed-trip-to-hawaii": "Hawaii'ye ayrÄąntÄąlÄą bir gezi planlayÄąn.",
+ "platformergpt": "PlatformerGPT đŽ",
+ "researchgpt": "AraÅtÄąrmaGPT đ",
+ "travelgpt": "đ´",
+ "web-search": "internette arama"
+}
diff --git a/next/public/locales/tr/drawer.json b/next/public/locales/tr/drawer.json
new file mode 100644
index 0000000..4004fd4
--- /dev/null
+++ b/next/public/locales/tr/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "Hesap",
+ "HELP_BUTTON": "YardÄąm",
+ "MY_AGENTS": "ajanlarÄąm",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "Burada herhangi bir Åey ortaya Ã§Äąkmadan Ãļnce ilk temsilcinizi oluÅturmanÄąz ve kaydetmeniz gerekir!",
+ "SETTINGS_BUTTON": "Ayarlar",
+ "SIGN_IN": "KayÄąt olmak",
+ "SIGN_IN_NOTICE": "ajanlarÄą kaydedebilmek ve hesabÄąnÄązÄą yÃļnetebilmek için!",
+ "SIGN_OUT": "Oturumu Kapat",
+ "SUPPORT_BUTTON": "Destek",
+ "USER_IMAGE": "KullanÄącÄą Resmi"
+}
diff --git a/next/public/locales/tr/errors.json b/next/public/locales/tr/errors.json
new file mode 100644
index 0000000..166c524
--- /dev/null
+++ b/next/public/locales/tr/errors.json
@@ -0,0 +1,13 @@
+{
+ "AGENT_MANUALLY_SHUT_DOWN": "Temsilci manuel olarak kapatÄąldÄą.",
+ "AGENT_MAXED_OUT_LOOPS": "Bu ajan dÃļngÃŧlerde maksimuma ulaÅtÄą. \nCÃŧzdanÄąnÄązÄą kurtarmak için bu aracÄą kapatÄąlÄąyor. \nGeliÅmiÅ ayarlarda dÃļngÃŧ sayÄąsÄąnÄą yapÄąlandÄąrabilirsiniz.",
+ "ALL_TASKS_COMPLETETD": "TÃŧm gÃļrevler tamamlandÄą. \nKapatmak.",
+ "DEMO_LOOPS_REACHED": "ÃzgÃŧnÃŧz, çÃŧnkÃŧ bu bir demo, ajanlarÄąmÄązÄą çok uzun sÃŧre çalÄąÅtÄąramayÄąz. \nDaha uzun çalÄąÅtÄąrmalar istiyorsanÄąz, lÃŧtfen Ayarlar'da kendi API anahtarÄąnÄązÄą saÄlayÄąn. \nKapatmak.",
+ "ERROR_ACCESSING_OPENAI_API_KEY": "OpenAI'nin API'sine eriÅirken HATA. \nLÃŧtfen API anahtarÄąnÄązÄą kontrol edin veya daha sonra tekrar deneyin",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "Ek gÃļrev(ler) eklenirken HATA. \nBunlarÄą çalÄąÅtÄąrmak modelimizin ilkelerine aykÄąrÄą olabilir. \nDevam ediyor.",
+ "ERROR_API_KEY_QUOTA": "OpenAI API anahtarÄąnÄązÄą kullanÄąrken HATA. \nMevcut kotanÄązÄą aÅtÄąnÄąz, lÃŧtfen planÄąnÄązÄą ve fatura ayrÄąntÄąlarÄąnÄązÄą kontrol edin.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "HATA, API anahtarÄąnÄązÄąn GPT-4 eriÅimi yok. \nÃnce OpenAI'nin bekleme listesine katÄąlmalÄąsÄąnÄąz. \n(Bu, ChatGPT Plus'tan farklÄądÄąr)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "Ä°lk gÃļrevler dizisi alÄąnÄąrken HATA. \nYeniden deneyin, hedefinizi daha net hale getirin veya hedefinizi, çalÄąÅtÄąrÄąlacak modelimizin politikalarÄą dahilinde olacak Åekilde revize edin. \nKapatmak.",
+ "INVALID_OPENAI_API_KEY": "HATA geçersiz OpenAI API anahtarÄą",
+ "RATE_LIMIT_EXCEEDED": "HÄąz limiti aÅÄąldÄą! \nLÃŧtfen yavaÅlayÄąn...đ
"
+}
diff --git a/next/public/locales/tr/help.json b/next/public/locales/tr/help.json
new file mode 100644
index 0000000..e6ad034
--- /dev/null
+++ b/next/public/locales/tr/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT Belgeleri",
+ "FOLLOW_THE_JOURNEY": "AÅaÄÄądaki yolculuÄu takip edin:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "Web siteleri ve insanlarla etkileÅim đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "Autonomous AI aracÄąlarÄąnÄą yapÄąlandÄąrmanÄąza ve daÄÄątmanÄąza olanak tanÄąr. \nÃzel yapay zekanÄąza bir ad verin ve hayal edebileceÄiniz herhangi bir hedefe ulaÅmasÄąnÄą saÄlayÄąn. \nYapÄąlacak iÅleri dÃŧÅÃŧnerek, yÃŧrÃŧterek ve sonuçlardan ders Ã§Äąkararak hedefe ulaÅmaya çalÄąÅacaktÄąr đ",
+ "LONG_TERM_MEMORY": "Uzun sÃŧreli hafÄąza đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "Bu platform Åu anda beta aÅamasÄąndadÄąr ve Åu anda Ãŧzerinde çalÄąÅÄąyoruz:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "AgentGPT, yol haritasÄą, SSS vb. hakkÄąnda daha fazla bilgi edinmek için Åu adresi ziyaret edin:",
+ "WEB_BROWSING": "Web'de gezinme đ",
+ "WELCOME_TO_AGENT_GPT": "AgentGPT'ye hoÅ geldiniz"
+}
diff --git a/next/public/locales/tr/indexPage.json b/next/public/locales/tr/indexPage.json
new file mode 100644
index 0000000..3065faf
--- /dev/null
+++ b/next/public/locales/tr/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "AGENT_NAME": "Ä°sim",
+ "BETA": "Beta",
+ "BUTTON_DEPLOY_AGENT": "AracÄąyÄą DaÄÄąt",
+ "BUTTON_STOP_AGENT": "AjanÄą Durdur",
+ "HEADING_DESCRIPTION": "TarayÄącÄąnÄązda otonom AI AracÄąlarÄąnÄą birleÅtirin, yapÄąlandÄąrÄąn ve daÄÄątÄąn.",
+ "LABEL_AGENT_GOAL": "Amaç",
+ "PLACEHOLDER_AGENT_GOAL": "DÃŧnyayÄą daha gÃŧzel bir yer yap"
+}
diff --git a/next/public/locales/tr/languages.json b/next/public/locales/tr/languages.json
new file mode 100644
index 0000000..357c283
--- /dev/null
+++ b/next/public/locales/tr/languages.json
@@ -0,0 +1,16 @@
+{
+ "CHINESE": "Ãince",
+ "DUTCH": "Flemenkçe",
+ "ENGLISH": "Ä°ngilizce",
+ "FRENCH": "FransÄązca",
+ "GERMAN": "Almanca",
+ "HUNGARIAN": "Macarca",
+ "ITALIAN": "Ä°talyan",
+ "JAPANESE": "Japonca",
+ "KOREAN": "Koreli",
+ "POLSKI": "Polski",
+ "PORTUGEES": "Portekizce",
+ "ROMANIAN": "Romence",
+ "SLOVAK": "Slovak",
+ "SPANISH": "Ä°spanyol"
+}
diff --git a/next/public/locales/tr/settings.json b/next/public/locales/tr/settings.json
new file mode 100644
index 0000000..dec0b18
--- /dev/null
+++ b/next/public/locales/tr/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "GeliÅmiÅ Ayarlar",
+ "API_KEY": "Anahtar",
+ "AUTOMATIC_MODE": "Otomatik mod",
+ "AUTOMATIC_MODE_DESCRIPTION": "(VarsayÄąlan): AracÄą, her gÃļrevi otomatik olarak yÃŧrÃŧtÃŧr.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "Her bir API çaÄrÄąsÄąnda kullanÄąlan maksimum belirteç sayÄąsÄąnÄą kontrol eder (daha yÃŧksek deÄer, yanÄątlarÄą daha ayrÄąntÄąlÄą hale getirir ancak daha pahalÄąya mal olur).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "AracÄąnÄąn çalÄąÅtÄąracaÄÄą maksimum dÃļngÃŧ sayÄąsÄąnÄą kontrol eder (daha yÃŧksek deÄer, daha fazla API çaÄrÄąsÄą yapar).",
+ "GET_YOUR_OWN_APIKEY": "Kendi OpenAI API anahtarÄąnÄązÄą alÄąn",
+ "HERE": "Burada",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "Burada OpenAI API anahtarÄąnÄązÄą ekleyebilirsiniz. \nBu, kendi OpenAI kullanÄąmÄąnÄąz için Ãļdeme yapmanÄązÄą gerektirir, ancak size AgentGPT'ye daha fazla eriÅim saÄlar! \nEk olarak OpenAI'nin sunduÄu herhangi bir modeli de seçebilirsiniz.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "Daha yÃŧksek deÄerler Ã§ÄąktÄąyÄą daha rasgele hale getirirken, daha dÃŧÅÃŧk deÄerler Ã§ÄąktÄąyÄą daha odaklÄą ve deterministik yapar.",
+ "INFO_TO_USE_GPT4": "GPT-4 modelini kullanmak için GPT-4 için API anahtarÄąnÄą da saÄlamanÄąz gerekir. \nbunun için istekte bulunabilirsiniz",
+ "INVALID_OPENAI_API_KEY": "Geçersiz API anahtarÄą!",
+ "LABEL_MODE": "mod",
+ "LABEL_MODEL": "modeli",
+ "LANG": "Dil",
+ "LINK": "baÄlantÄą",
+ "LOOP": "DÃļngÃŧ",
+ "MUST_CONNECT_CREDIT_CARD": "Not: HesabÄąnÄąza bir kredi kartÄą baÄlamanÄąz gerekmektedir",
+ "NOTE_API_KEY_USAGE": "Bu anahtar yalnÄązca geçerli tarayÄącÄą oturumunda kullanÄąlÄąr",
+ "NOTE_TO_GET_OPENAI_KEY": "NOT: Bir anahtar almak için bir OpenAI hesabÄąna kaydolun ve aÅaÄÄądakileri ziyaret edin.",
+ "PAUSE": "Duraklat",
+ "PAUSE_MODE": "Duraklatma modu",
+ "PAUSE_MODE_DESCRIPTION": "AracÄą, her gÃļrev grubundan sonra duraklar",
+ "PENAI_API_KEY": "Geçersiz OpenAI API anahtarÄą",
+ "PLAY": "Oynamak",
+ "SETTINGS_DIALOG_HEADER": "Ayarlar â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ChatGPT Plus aboneliÄi çalÄąÅmaz)",
+ "TEMPERATURE": "SÄącaklÄąk",
+ "TOKENS": "Jetonlar"
+}
diff --git a/next/public/locales/uk/chat.json b/next/public/locales/uk/chat.json
new file mode 100644
index 0000000..632bfc5
--- /dev/null
+++ b/next/public/locales/uk/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "ĐиĐēĐžĐŊĐ°ĐŊĐŊŅ:",
+ "CONSIDER_SPONSORING_ON_GITHUB": "РОСĐŗĐģŅĐŊŅŅĐĩ ĐŧĐžĐļĐģивŅŅŅŅ ĐŋŅĐ´ŅŅиĐŧĐēи ĐŋŅĐžĐĩĐēŅŅ ĐŊĐ° GitHub.",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "ĐĸĐĩĐēŅŅ ŅĐēĐžĐŋŅКОваĐŊĐž в ĐąŅŅĐĩŅ ОйĐŧŅĐŊŅ",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "ĐĐĩ вдаĐģĐžŅŅ ŅĐēĐžĐŋŅŅваŅи ŅĐĩĐēŅŅ в ĐąŅŅĐĩŅ ОйĐŧŅĐŊŅ",
+ "CREATE_AN_AGENT_DESCRIPTION": "ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "EMBARKING_ON_NEW_GOAL": "РОСĐŋĐžŅĐ°ŅĐž ĐŊОвŅ ĐŧĐĩŅŅ:",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ Đи ŅĐŋĐžŅŅĐĩŅŅĐŗĐ°ŅĐŧĐž ĐŊадСвиŅĐ°ĐšĐŊиК ŅŅĐ°ŅŅĐē, ĐžŅŅĐēŅŅŅŅŅŅ СаŅŅиĐŧĐēи ŅĐ° ĐŋĐžĐŧиĐģĐēи, ŅĐēŅĐž ви ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ ŅвŅĐš вĐģĐ°ŅĐŊиК API-ĐēĐģŅŅ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ ĐŅĐ´ŅŅиĐŧĐ°ĐšŅĐĩ ŅОСвиŅĐžĐē AgentGPT. đī¸",
+ "NO_MORE_TASKS": "ĐŅĐģŅŅĐĩ ĐŊĐĩĐŧĐ°Ņ ĐŋŅдСадаŅ Đ´ĐģŅ ŅŅĐžĐŗĐž:",
+ "RESTART_IF_IT_TAKES_X_SEC": "(ĐĐŊОвŅŅŅ ŅŅĐžŅŅĐŊĐēŅ айО СаĐŋŅŅŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ° вŅŅŅĐŊŅ, ŅĐēŅĐž ŅĐĩ СаКĐŧĐ°Ņ ĐąŅĐģŅŅĐĩ 30 ŅĐĩĐēŅĐŊĐ´)",
+ "SUPPORT_NOW": "ĐŅĐ´ŅŅиĐŧĐ°Ņи СаŅаС đ",
+ "TASK_ADDED": "ĐавдаĐŊĐŊŅ дОдаĐŊĐž:",
+ "THINKING": "ĐŅĐŧĐ°ŅĐŧĐž...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ Đи ĐŧĐžĐļĐĩŅĐĩ вĐēаСаŅи ŅвŅĐš вĐģĐ°ŅĐŊиК ĐēĐģŅŅ OpenAI API ĐŊĐ° вĐēĐģĐ°Đ´ŅŅ ĐĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅ, ŅОй ĐŋŅдвиŅиŅи ĐģŅĐŧŅŅи!",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧâŅ/ŅŅĐģŅ Ņ ĐŊĐ°ŅиŅĐŊŅвŅи ŅОСĐŗĐžŅĐŊŅŅи!"
+}
diff --git a/next/public/locales/uk/chat.missing.json b/next/public/locales/uk/chat.missing.json
new file mode 100644
index 0000000..59c7c51
--- /dev/null
+++ b/next/public/locales/uk/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧâŅ/ŅŅĐģŅ Ņ ĐŊĐ°ŅиŅĐŊŅвŅи ŅОСĐŗĐžŅĐŊŅŅи! \nĐĄĐŋŅОйŅĐšŅĐĩ ĐŊĐ°ŅŅ ĐŋŅиĐēĐģади ĐŊиĐļŅĐĩ!",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, ĐŊадавŅи КОĐŗĐž ĐŊĐ° ŅŅĐģŅ, Ņ ĐŊĐ°ŅиŅĐŊŅŅŅ ĐŊĐ° ĐēĐŊĐžĐŋĐēŅ \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧâŅ ŅĐ° ŅŅĐģŅ, ĐŋĐžŅŅĐŧ ĐŊĐ°ŅиŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ ÂĢĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!Âģ",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐŊĐ°ŅиŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ"
+}
diff --git a/next/public/locales/uk/common.json b/next/public/locales/uk/common.json
new file mode 100644
index 0000000..a9d0354
--- /dev/null
+++ b/next/public/locales/uk/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "ĐОдаваĐŊĐŊŅ СавдаĐŊĐŊŅ",
+ "AGENTGPT_DOCUMENTATION": "ĐĐžĐēŅĐŧĐĩĐŊŅĐ°ŅŅŅ AgentGPT",
+ "CLOSE": "ĐĐ°ĐēŅиŅи",
+ "CONTINUE": "ĐŅОдОвĐļиŅи",
+ "COPIED_TO_CLIPBOARD": "ĐĄĐēĐžĐŋŅКОваĐŊĐž в ĐąŅŅĐĩŅ ОйĐŧŅĐŊŅ! đ",
+ "COPY": "ĐĐžĐŋŅŅ",
+ "CREATE_AN_AGENT_DESCRIPTION": "ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧâŅ/ŅŅĐģŅ Ņ ĐŊĐ°ŅиŅĐŊŅвŅи ŅОСĐŗĐžŅĐŊŅŅи!",
+ "CURRENT_TASKS": "ĐĐžŅĐžŅĐŊŅ СавдаĐŊĐŊŅ",
+ "EXECUTING": "ĐиĐēĐžĐŊŅŅŅŅŅŅ",
+ "EXPORT": "ĐĐēŅĐŋĐžŅŅ",
+ "IMAGE": "ĐОйŅĐ°ĐļĐĩĐŊĐŊŅ",
+ "LOOP": "ĐĐĩŅĐģŅ",
+ "PAUSED": "ĐŅиСŅĐŋиĐŊĐĩĐŊĐž",
+ "RESET": "ĐĄĐēиĐŊŅŅи",
+ "RUNNING": "Đ ĐŋŅĐžŅĐĩŅŅ",
+ "SAVE": "СйĐĩŅĐĩĐŗŅи",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "ЊОй ĐžŅŅиĐŧĐ°Ņи ĐąŅĐģŅŅĐĩ ŅĐŊŅĐžŅĐŧĐ°ŅŅŅ ĐŋŅĐž AgentGPT, КОĐŗĐž Đ´ĐžŅĐžĐļĐŊŅ ĐēĐ°ŅŅŅ ŅĐžŅĐž, ĐŋĐĩŅĐĩКдŅŅŅ Са ŅиĐŧ ĐŋĐžŅиĐģĐ°ĐŊĐŊŅĐŧ",
+ "create-a-comprehensive-report-of-the-nike-company": "ĐĄŅвОŅиŅи ĐēĐžĐŧĐŋĐģĐĩĐēŅĐŊиК СвŅŅ ĐēĐžĐŧĐŋĐ°ĐŊŅŅ Nike",
+ "if-you-are-facing-issues-please-head-over-to-our": "Đ¯ĐēŅĐž Ņ ваŅ виĐŊиĐēĐģи ĐŋŅОйĐģĐĩĐŧи, СвĐĩŅĐŊŅŅŅŅŅ Đ´Đž ĐŊĐ°Ņ",
+ "plan-a-detailed-trip-to-hawaii": "ĐĐĩŅĐ°ĐģŅĐŊиК ĐŋĐģĐ°ĐŊ ĐŋОдОŅĐžĐļŅ ĐŊĐ° ĐаваŅ.",
+ "platformergpt": "ĐĐģĐ°ŅŅĐžŅĐŧĐĩŅGPT đŽ",
+ "researchgpt": "ĐĐžŅĐģŅĐ´ĐļĐĩĐŊĐŊŅGPT đ",
+ "travelgpt": "TravelGPT đ´",
+ "web-search": "ĐĐžŅŅĐē в ĐĐŊŅĐĩŅĐŊĐĩŅŅ"
+}
diff --git a/next/public/locales/uk/drawer.json b/next/public/locales/uk/drawer.json
new file mode 100644
index 0000000..72e80fe
--- /dev/null
+++ b/next/public/locales/uk/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "ĐĐąĐģŅĐēОвиК СаĐŋиŅ",
+ "HELP_BUTTON": "ĐĐžĐŋĐžĐŧĐžĐŗĐ°",
+ "MY_AGENTS": "ĐĐžŅ Đ°ĐŗĐĩĐŊŅи",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "ĐĄĐŋĐžŅĐ°ŅĐēŅ ваĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ŅŅвОŅиŅи ŅĐ° СйĐĩŅĐĩĐŗŅи ŅвОĐŗĐž ĐŋĐĩŅŅĐžĐŗĐž Đ°ĐŗĐĩĐŊŅĐ°, ĐŋĐĩŅŅ ĐŊŅĐļ ŅŅŅ ŅĐž-ĐŊĐĩĐąŅĐ´Ņ С'ŅвиŅŅŅŅ!",
+ "SETTINGS_BUTTON": "ĐĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅ",
+ "SIGN_IN": "ĐŖвŅĐšŅи",
+ "SIGN_IN_NOTICE": "ĐŖвŅКдŅŅŅ, ŅОй СйĐĩŅĐĩĐŗŅи ŅвОŅŅ
Đ°ĐŗĐĩĐŊŅŅв ŅĐ° ĐēĐĩŅŅваŅи ŅвОŅĐŧ ОйĐģŅĐēОвиĐŧ СаĐŋиŅĐžĐŧ!",
+ "SIGN_OUT": "ĐиКŅи",
+ "SUPPORT_BUTTON": "ĐŅĐ´ŅŅиĐŧĐēĐ°",
+ "USER_IMAGE": "ĐОйŅĐ°ĐļĐĩĐŊĐŊŅ ĐēĐžŅиŅŅŅваŅĐ°"
+}
diff --git a/next/public/locales/uk/errors.json b/next/public/locales/uk/errors.json
new file mode 100644
index 0000000..7943af9
--- /dev/null
+++ b/next/public/locales/uk/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "ĐĐĐĐĐĐĐ ĐŋŅи Đ´ĐžŅŅŅĐŋŅ Đ´Đž ĐēĐģŅŅĐ° OpenAI API. ĐŅĐ´Ņ ĐģĐ°ŅĐēĐ°, ĐŋĐĩŅĐĩвŅŅŅĐĩ ĐēĐģŅŅ API айО ŅĐŋŅОйŅĐšŅĐĩ ĐŋŅСĐŊŅŅĐĩ.",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "ĐĐĐĐĐĐĐ ĐŋŅи дОдаваĐŊĐŊŅ дОдаŅĐēОвиŅ
СавдаĐŊŅ. ĐĐžĐļĐģивО, ĐŊĐ°ŅĐ° ĐŧОдĐĩĐģŅ ĐŊĐĩ ĐŧĐžĐļĐĩ ОйŅОйиŅи вŅĐ´ĐŋОвŅĐ´Ņ, ŅĐžĐŧŅ ŅĐ°Đē ŅŅĐ°ĐģĐžŅŅ. ĐŅОдОвĐļĐĩĐŊĐŊŅ...",
+ "RATE_LIMIT_EXCEEDED": "ĐĐžŅŅĐŗĐŊŅŅĐž ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊŅ ĐēŅĐģŅĐēŅŅŅŅ СаĐŋиŅŅв! ĐŅĐ´Ņ ĐģĐ°ŅĐēĐ°, ŅĐŋОвŅĐģŅĐŊŅŅŅ...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "ĐĻĐĩĐš Đ°ĐŗĐĩĐŊŅ Đ´ĐžŅŅĐŗ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžŅ ĐēŅĐģŅĐēĐžŅŅŅ СаĐŋŅŅĐēŅв. ЊОй СйĐĩŅĐĩĐŗŅи ĐēĐžŅŅи, ŅĐĩĐš Đ°ĐŗĐĩĐŊŅ ŅĐĩĐŋĐĩŅ ĐŋŅиĐŋиĐŊŅŅ ŅвОŅ ŅОйОŅŅ... ĐĐ°ĐēŅиĐŧĐ°ĐģŅĐŊŅ ĐēŅĐģŅĐēŅŅŅŅ СаĐŋŅŅĐēŅв Đ°ĐŗĐĩĐŊŅĐ° ĐŧĐžĐļĐŊĐ° ĐŊĐ°ĐģĐ°ŅŅŅваŅи в ĐŊĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅŅ
.",
+ "DEMO_LOOPS_REACHED": "ĐийаŅŅĐĩ, Đ°ĐģĐĩ ŅĐĩ Đ´ĐĩĐŧĐžĐŊŅŅŅĐ°ŅŅĐšĐŊиК дОдаŅĐžĐē, ŅĐžĐŧŅ Đŧи ĐŊĐĩ ĐŧĐžĐļĐĩĐŧĐž СаĐŋŅŅĐēĐ°Ņи Đ°ĐŗĐĩĐŊŅŅв СаĐŊĐ°Đ´ŅĐž дОвĐŗĐž. ĐŅиĐŧŅŅĐēĐ°: ŅĐēŅĐž ви Ņ
ĐžŅĐĩŅĐĩ СаĐŋŅŅĐēĐ°Ņи дОвŅŅ ŅОйОŅи, ĐąŅĐ´Ņ ĐģĐ°ŅĐēĐ°, вĐēĐ°ĐļŅŅŅ вĐģĐ°ŅĐŊиК ĐēĐģŅŅ API в ĐŊĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅŅ
. ĐŅиĐŋиĐŊĐĩĐŊĐŊŅ...",
+ "AGENT_MANUALLY_SHUT_DOWN": "ĐĐŗĐĩĐŊŅ ĐąŅв вŅŅŅĐŊŅ виĐŧĐēĐŊŅŅиК.",
+ "ALL_TASKS_COMPLETETD": "ĐŅŅ СавдаĐŊĐŊŅ виĐēĐžĐŊĐ°ĐŊĐž. ĐŅиĐŋиĐŊĐĩĐŊĐŊŅ...",
+ "ERROR_API_KEY_QUOTA": "ĐĐĐĐĐĐĐ ĐŋŅи виĐēĐžŅиŅŅĐ°ĐŊĐŊŅ ĐēĐģŅŅĐ° OpenAI API. Đи ĐŋĐĩŅĐĩвиŅиĐģи ŅвОŅ ĐŋĐžŅĐžŅĐŊŅ ĐēвОŅŅ, ĐąŅĐ´Ņ ĐģĐ°ŅĐēĐ°, ĐŋĐĩŅĐĩвŅŅŅĐĩ ŅвОŅ ŅĐ°Ņ
ŅĐŊĐēОвŅ Đ´Đ°ĐŊŅ.",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "ĐĐĐĐĐĐĐ: ĐĐ°Ņ ĐēĐģŅŅ OpenAI API ĐŊĐĩ ĐŧĐ°Ņ Đ´ĐžŅŅŅĐŋŅ Đ´Đž GPT-4. ĐĄĐŋĐžŅĐ°ŅĐēŅ ваĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СаŅĐĩŅŅŅŅŅваŅиŅŅ в ŅĐĩŅСŅ OpenAI. (ĐĻĐĩ вŅĐ´ŅŅСĐŊŅŅŅŅŅŅ вŅĐ´ ChatGPT Plus)",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "ĐĐĐĐĐĐĐ ĐŋŅи ĐžŅŅиĐŧĐ°ĐŊĐŊŅ ĐŋĐžŅĐ°ŅĐēОвиŅ
СавдаĐŊŅ. ĐĄĐŋŅОйŅĐšŅĐĩ ŅĐĩ ŅаС, ŅŅĐžŅĐŧŅĐģŅĐšŅĐĩ ĐŧĐĩŅŅ Đ°ĐŗĐĩĐŊŅĐ° ŅŅĐŊŅŅĐĩ айО СĐŧŅĐŊŅŅŅ ŅŅ ŅĐ°ĐēиĐŧ ŅиĐŊĐžĐŧ, ŅОй вОĐŊĐ° вŅĐ´ĐŋОвŅĐ´Đ°ĐģĐ° ĐŊĐ°ŅŅĐš ĐŧОдĐĩĐģŅ. ĐŅиĐŋиĐŊĐĩĐŊĐŊŅ...",
+ "INVALID_OPENAI_API_KEY": "ĐĐĐĐĐĐĐ ĐŊĐĩĐ´ŅĐšŅĐŊиК OpenAI API-ĐēĐģŅŅ"
+}
diff --git a/next/public/locales/uk/help.json b/next/public/locales/uk/help.json
new file mode 100644
index 0000000..264717b
--- /dev/null
+++ b/next/public/locales/uk/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "ĐĐžĐēŅĐŧĐĩĐŊŅĐ°ŅŅŅ AgentGPT",
+ "FOLLOW_THE_JOURNEY": "ĐĄĐģŅĐ´ĐēŅĐšŅĐĩ Са ĐŊĐ°ŅиĐŧи Đ´ĐžŅŅĐŗĐŊĐĩĐŊĐŊŅĐŧи ĐŊĐ°:",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "ĐСаŅĐŧОдŅŅ С вĐĩĐą-ŅĐ°ĐšŅĐ°Đŧи ŅĐ° ĐģŅĐ´ŅĐŧи đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "дОСвОĐģŅŅ ваĐŧ ĐŊĐ°ĐģĐ°ŅŅОвŅваŅи ŅĐ° СаĐŋŅŅĐēĐ°Ņи вĐģĐ°ŅĐŊиŅ
ĐŊĐĩСаĐģĐĩĐļĐŊиŅ
Đ°ĐŗĐĩĐŊŅŅв ŅŅŅŅĐŊĐžĐŗĐž ŅĐŊŅĐĩĐģĐĩĐēŅŅ ŅĐĩŅĐĩС ŅвŅĐš вĐĩĐą-ĐąŅĐ°ŅСĐĩŅ. ĐаСвŅŅŅ ваŅĐžĐŗĐž ĐŋĐĩŅŅĐžĐŊĐ°ĐģŅСОваĐŊĐžĐŗĐž Đ°ĐŗĐĩĐŊŅĐ° ŅŅŅŅĐŊĐžĐŗĐž ŅĐŊŅĐĩĐģĐĩĐēŅŅ ŅĐ° виСĐŊĐ°ŅŅĐĩ КОĐŗĐž ŅŅĐģŅ. ĐĐŗĐĩĐŊŅ ШРĐŊĐ°ĐŧĐ°ĐŗĐ°ŅŅŅŅŅ Đ´ĐžŅŅĐŗŅи СадаĐŊĐžŅ ĐŧĐĩŅи, ŅŅвОŅŅŅŅи СавдаĐŊĐŊŅ, виĐēĐžĐŊŅŅŅи ŅŅ
ŅĐ° ĐžŅŅĐŊŅŅŅи ŅŅ
ŅĐĩСŅĐģŅŅĐ°Ņи đ",
+ "LONG_TERM_MEMORY": "ĐОвĐŗĐžŅŅиваĐģĐ° ĐŋĐ°Đŧ'ŅŅŅ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "ĐĻŅ ĐŋĐģĐ°ŅŅĐžŅĐŧĐ° ĐŊĐ°ŅаСŅ ĐŋĐĩŅĐĩĐąŅваŅ Ņ ĐąĐĩŅĐ°-вĐĩŅŅŅŅ, ĐŊĐ° Đ´Đ°ĐŊиК ĐŧĐžĐŧĐĩĐŊŅ Đŧи ĐŋŅĐ°ŅŅŅĐŧĐž ĐŊĐ°Đ´ ĐŊĐ°ŅŅŅĐŋĐŊиĐŧи ŅŅĐŊĐēŅŅŅĐŧи:",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "ЊОй Đ´ŅСĐŊĐ°ŅиŅŅ ĐąŅĐģŅŅĐĩ ĐŋŅĐž AgentGPT, КОĐŗĐž Đ´ĐžŅĐžĐļĐŊŅ ĐēĐ°ŅŅŅ, ĐŋĐžŅиŅĐĩĐŊŅ СаĐŋиŅĐ°ĐŊĐŊŅ ŅĐžŅĐž, вŅдвŅĐ´Đ°ĐšŅĐĩ",
+ "WEB_BROWSING": "ĐĐĩĐą-ĐŋĐĩŅĐĩĐŗĐģŅĐ´ đ",
+ "WELCOME_TO_AGENT_GPT": "ĐĐ°ŅĐēавО ĐŋŅĐžŅиĐŧĐž Đ´Đž AgentGPT"
+}
diff --git a/next/public/locales/uk/indexPage.json b/next/public/locales/uk/indexPage.json
new file mode 100644
index 0000000..038bb50
--- /dev/null
+++ b/next/public/locales/uk/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "ĐĐĩŅĐ°",
+ "HEADING_DESCRIPTION": "ĐйиŅĐ°ĐšŅĐĩ, ĐŊĐ°ĐģĐ°ŅŅОвŅĐšŅĐĩ ŅĐ° вŅŅĐ°ĐŊОвĐģŅĐšŅĐĩ авŅĐžĐŊĐžĐŧĐŊиŅ
Đ°ĐŗĐĩĐŊŅŅв ШРŅ ŅвОŅĐŧŅ ĐąŅĐ°ŅСĐĩŅŅ.",
+ "AGENT_NAME": "ĐĐŧ'Ņ",
+ "LABEL_AGENT_GOAL": "ĐĐĩŅĐ°",
+ "PLACEHOLDER_AGENT_GOAL": "ĐŅОйиŅи ŅвŅŅ ĐēŅĐ°ŅиĐŧ ĐŧŅŅŅĐĩĐŧ",
+ "BUTTON_DEPLOY_AGENT": "ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°",
+ "BUTTON_STOP_AGENT": "ĐŅĐŋиĐŊиŅи Đ°ĐŗĐĩĐŊŅĐ°"
+}
diff --git a/next/public/locales/uk/languages.json b/next/public/locales/uk/languages.json
new file mode 100644
index 0000000..f595893
--- /dev/null
+++ b/next/public/locales/uk/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "ĐĐŊĐŗĐģŅĐšŅŅĐēĐ°",
+ "FRENCH": "ФŅĐ°ĐŊŅŅСŅĐēĐ°",
+ "SPANISH": "ĐŅĐŋĐ°ĐŊŅŅĐēĐ°",
+ "GERMAN": "ĐŅĐŧĐĩŅŅĐēĐ°",
+ "JAPANESE": "Đ¯ĐŋĐžĐŊŅŅĐēĐ°",
+ "KOREAN": "ĐĐžŅĐĩĐšŅŅĐēĐ°",
+ "CHINESE": "ĐиŅĐ°ĐšŅŅĐēĐ°",
+ "PORTUGEES": "ĐĐžŅŅŅĐŗĐ°ĐģŅŅŅĐēĐ°",
+ "ITALIAN": "ĐŅĐ°ĐģŅĐšŅŅĐēĐ°",
+ "DUTCH": "ĐĐžĐģĐģĐ°ĐŊĐ´ŅŅĐēĐ°",
+ "POLSKI": "ĐĐžĐģŅŅŅĐēĐ°",
+ "HUNGARIAN": "ĐŖĐŗĐžŅŅŅĐēĐ°",
+ "ROMANIAN": "Đ ŅĐŧŅĐŊŅŅĐēĐ°",
+ "SLOVAK": "ĐĄĐģОваŅŅ"
+}
diff --git a/next/public/locales/uk/settings.json b/next/public/locales/uk/settings.json
new file mode 100644
index 0000000..529916d
--- /dev/null
+++ b/next/public/locales/uk/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "РОСŅиŅĐĩĐŊŅ ĐŊĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅ",
+ "API_KEY": "API ĐēĐģŅŅ",
+ "AUTOMATIC_MODE": "ĐвŅĐžĐŧĐ°ŅиŅĐŊиК ŅĐĩĐļиĐŧ",
+ "AUTOMATIC_MODE_DESCRIPTION": "(ĐĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ): ĐĐŗĐĩĐŊŅ авŅĐžĐŧĐ°ŅиŅĐŊĐž виĐēĐžĐŊŅŅ ĐēĐžĐļĐŊĐĩ СавдаĐŊĐŊŅ.",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "ĐĐĩŅŅŅ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžŅ ĐēŅĐģŅĐēŅŅŅŅ ŅĐžĐēĐĩĐŊŅв, ŅĐēŅ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ в ĐēĐžĐļĐŊĐžĐŧŅ API-виĐēĐģиĐēŅ (ĐąŅĐģŅŅĐĩ СĐŊĐ°ŅĐĩĐŊĐŊŅ Đ´Đ°Ņ ĐąŅĐģŅŅ Đ´ĐĩŅĐ°ĐģŅĐŊŅ вŅĐ´ĐŋОвŅĐ´Ņ, Đ°ĐģĐĩ ĐēĐžŅŅŅŅ ĐąŅĐģŅŅĐĩ).",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "ĐĐĩŅŅŅ ĐŧĐ°ĐēŅиĐŧĐ°ĐģŅĐŊĐžŅ ĐēŅĐģŅĐēŅŅŅŅ ŅиĐēĐģŅв, ŅĐēŅ виĐēĐžĐŊŅŅ Đ°ĐŗĐĩĐŊŅ (ĐąŅĐģŅŅ виŅĐžĐēĐĩ СĐŊĐ°ŅĐĩĐŊĐŊŅ ĐŋŅиСвОдиŅŅ Đ´Đž ĐąŅĐģŅŅĐžŅ ĐēŅĐģŅĐēĐžŅŅŅ API-виĐēĐģиĐēŅв).",
+ "GET_YOUR_OWN_APIKEY": "ĐŅŅиĐŧĐ°ĐšŅĐĩ ŅвŅĐš вĐģĐ°ŅĐŊиК ĐēĐģŅŅ API OpenAI",
+ "HERE": "ŅŅŅ",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "ĐĸŅŅ ви ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ŅвŅĐš API-ĐēĐģŅŅ OpenAI. ĐĻĐĩ ОСĐŊĐ°ŅĐ°Ņ, ŅĐž ваĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ĐąŅĐ´Đĩ ĐŋĐģĐ°ŅиŅи Са виĐēĐžŅиŅŅĐ°ĐŊĐŊŅ ŅвОĐŗĐž вĐģĐ°ŅĐŊĐžĐŗĐž ŅĐžĐēĐĩĐŊŅ OpenAI, Đ°ĐģĐĩ ви ĐžŅŅиĐŧĐ°ŅŅĐĩ ĐąŅĐģŅŅиК Đ´ĐžŅŅŅĐŋ Đ´Đž ChatGPT! ĐŅŅĐŧ ŅĐžĐŗĐž, ви ĐŧĐžĐļĐĩŅĐĩ вийŅĐ°Ņи ĐąŅĐ´Ņ-ŅĐēŅ ĐŧОдĐĩĐģŅ, ŅĐēŅ ĐŋŅĐžĐŋĐžĐŊŅŅ OpenAI.",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "ĐиŅŅ СĐŊĐ°ŅĐĩĐŊĐŊŅ ŅОйĐģŅŅŅ виŅ
ŅĐ´ ĐąŅĐģŅŅ виĐŋĐ°Đ´ĐēОвиĐŧ, ŅОдŅ ŅĐē ĐŊиĐļŅŅ СĐŊĐ°ŅĐĩĐŊĐŊŅ СОŅĐĩŅĐĩĐ´ĐļĐĩĐŊŅŅиĐŧи ŅĐ° ĐąŅĐģŅŅ виСĐŊĐ°ŅĐĩĐŊиĐŧи.",
+ "INFO_TO_USE_GPT4": "ĐĐģŅ виĐēĐžŅиŅŅĐ°ĐŊĐŊŅ ĐŧОдĐĩĐģŅ GPT-4 ĐŋĐžŅŅŅĐąĐŊĐž ŅĐ°ĐēĐžĐļ вĐēаСаŅи ĐēĐģŅŅ API. Đи ĐŧĐžĐļĐĩŅĐĩ ĐžŅŅиĐŧĐ°Ņи КОĐŗĐž",
+ "INVALID_OPENAI_API_KEY": "ĐĐĩĐŋŅиĐŋŅŅŅиĐŧиК API-ĐēĐģŅŅ!",
+ "LABEL_MODE": "Đ ĐĩĐļиĐŧ",
+ "LABEL_MODEL": "ĐОдĐĩĐģŅ",
+ "LANG": "ĐОва",
+ "LINK": "ĐĐ°ĐŋиŅ ĐēĐģŅŅĐ° API",
+ "LOOP": "ĐĻиĐēĐģ",
+ "MUST_CONNECT_CREDIT_CARD": "ĐŅиĐŧŅŅĐēĐ°: Đи ĐŋОвиĐŊĐŊŅ ĐŋŅĐ´ĐēĐģŅŅиŅи ĐēŅĐĩдиŅĐŊŅ ĐēĐ°ŅŅĐēŅ Đ´Đž ŅвОĐŗĐž ОйĐģŅĐēОвОĐŗĐž СаĐŋиŅŅ",
+ "NOTE_API_KEY_USAGE": "ĐĻĐĩĐš ĐēĐģŅŅ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ ĐģиŅĐĩ ĐŋŅĐžŅŅĐŗĐžĐŧ ĐŋĐžŅĐžŅĐŊĐžŅ ŅĐĩŅŅŅ ĐąŅĐ°ŅСĐĩŅĐ°.",
+ "NOTE_TO_GET_OPENAI_KEY": "ĐĐ ĐĐĐĐĸĐĐ: ĐĐģŅ ĐžŅŅиĐŧĐ°ĐŊĐŊŅ ĐēĐģŅŅĐ° API ваĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СаŅĐĩŅŅŅŅŅваŅиŅŅ в ОйĐģŅĐēОвОĐŧŅ СаĐŋиŅŅ OpenAI, ŅĐž ĐŧĐžĐļĐŊĐ° СŅОйиŅи Са ĐŊĐ°ŅŅŅĐŋĐŊиĐŧ ĐŋĐžŅиĐģĐ°ĐŊĐŊŅĐŧ:",
+ "PAUSE": "ĐŅиСŅĐŋиĐŊиŅи",
+ "PAUSE_MODE": "Đ ĐĩĐļиĐŧ ĐŋĐ°ŅСи",
+ "PAUSE_MODE_DESCRIPTION": "ĐĐŗĐĩĐŊŅ ĐŋĐ°ŅСŅŅ ĐŋŅŅĐģŅ ĐēĐžĐļĐŊĐžĐŗĐž ĐŊайОŅŅ СавдаĐŊŅ",
+ "PENAI_API_KEY": "ĐĐĩĐ´ŅĐšŅĐŊиК API-ĐēĐģŅŅ OpenAI",
+ "PLAY": "ĐŅĐ´ŅвОŅиŅи",
+ "SETTINGS_DIALOG_HEADER": "ĐĐ°ĐģĐ°ŅŅŅваĐŊĐŊŅ â",
+ "SUBSCRIPTION_WILL_NOT_WORK": "(ĐŅĐ´ĐŋиŅĐēĐ° ChatGPT Plus ĐŊĐĩ ĐąŅĐ´Đĩ ĐŋŅĐ°ŅŅваŅи)",
+ "TEMPERATURE": "ĐĸĐĩĐŧĐŋĐĩŅĐ°ŅŅŅĐ°",
+ "TOKENS": "ĐĸĐžĐēĐĩĐŊи"
+}
diff --git a/next/public/locales/zh/chat.json b/next/public/locales/zh/chat.json
new file mode 100644
index 0000000..249675d
--- /dev/null
+++ b/next/public/locales/zh/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "åŽæīŧ",
+ "CONSIDER_SPONSORING_ON_GITHUB": "éčŋGitHubčĩåŠč¯Ĩ饚įŽã",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "ææŦåˇ˛å¤åļå°åĒč´´æŋ",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "æ æŗå°ææŦå¤åļå°åĒč´´æŋ",
+ "CREATE_AN_AGENT_DESCRIPTION": "ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ",
+ "EMBARKING_ON_NEW_GOAL": "čŋæĨæ°įŽæ īŧ",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ æäģŦæŖå¨įģååŧ常įæĩéīŧč¯ˇéĸ莥äŧæåģļčŋåéč¯¯īŧåĻææ¨æ˛ĄæäŊŋį¨čĒåˇąįAPIå¯éĨ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ æ¯æAgentGPTįååąã đī¸",
+ "NO_MORE_TASKS": "æ˛Ąææ´å¤įåäģģåĄå¯äģĨäŊŋį¨īŧ",
+ "RESTART_IF_IT_TAKES_X_SEC": "īŧåĻæéčĻ30į§äģĨä¸īŧč¯ˇåˇæ°éĄĩéĸææå¨éæ°å¯å¨äģŖįīŧ",
+ "SUPPORT_NOW": "į°å¨æ¯æ đ",
+ "TASK_ADDED": "äģģåĄåˇ˛æˇģå īŧ",
+ "THINKING": "æčä¸...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ æ¨å¯äģĨå¨čŽžįŊŽé饚åĄä¸æäžčĒåˇąįOpenAI APIå¯éĨäģĨčˇåžæéĢįéåļīŧ",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ éčŋæˇģå åį§°/įŽæ åšļæé¨įŊ˛æĨååģēäģŖįīŧ"
+}
diff --git a/next/public/locales/zh/chat.missing.json b/next/public/locales/zh/chat.missing.json
new file mode 100644
index 0000000..10a048d
--- /dev/null
+++ b/next/public/locales/zh/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ éčŋæˇģå åį§°/įŽæ åšļįšåģé¨įŊ˛æĨååģēäģŖįīŧ\nå°č¯ä¸éĸįį¤ēäžīŧ",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģâå¯å¨äģŖįīŧâæéŽ"
+}
diff --git a/next/public/locales/zh/common.json b/next/public/locales/zh/common.json
new file mode 100644
index 0000000..5928859
--- /dev/null
+++ b/next/public/locales/zh/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "æˇģå äģģåĄ",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT įææĄŖ",
+ "CLOSE": "å
ŗé",
+ "CONTINUE": "įģ§įģ",
+ "COPIED_TO_CLIPBOARD": "åˇ˛å¤åļå°åĒč´´æŋīŧ đ",
+ "COPY": "å¤åļ",
+ "CREATE_AN_AGENT_DESCRIPTION": "éčŋæˇģå åį§°/įŽæ åšļįšåģé¨įŊ˛æĨååģēäģŖįīŧ",
+ "CURRENT_TASKS": "åŊåäģģåĄ",
+ "EXECUTING": "æ§čĄä¸",
+ "EXPORT": "å¯ŧåē",
+ "IMAGE": "åžį",
+ "LOOP": "åžĒį¯",
+ "PAUSED": "æå",
+ "RESET": "éįŊŽ",
+ "RUNNING": "čŋčĄä¸",
+ "SAVE": "äŋå",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "čĻčˇåæå
ŗ AgentGPT åå
ļčˇ¯įēŋåžįįæ´å¤äŋĄæ¯īŧč¯ˇčŽŋéŽäģĨä¸éžæĨ",
+ "create-a-comprehensive-report-of-the-nike-company": "ååģēčå
å
Ŧå¸įįģŧåæĨå",
+ "if-you-are-facing-issues-please-head-over-to-our": "åĻææ¨éå°éŽéĸīŧč¯ˇååžæäģŦį",
+ "plan-a-detailed-trip-to-hawaii": "莥åč¯Ļįģįå¤å¨å¤ˇäšæ
ã",
+ "platformergpt": "åšŗå° GPT đŽ",
+ "researchgpt": "į įŠļ GPT đ",
+ "travelgpt": "æ
游 GPT đ´",
+ "web-search": "įŊįģæį´ĸ"
+}
diff --git a/next/public/locales/zh/drawer.json b/next/public/locales/zh/drawer.json
new file mode 100644
index 0000000..9e1b8ae
--- /dev/null
+++ b/next/public/locales/zh/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "å¸æˇ",
+ "HELP_BUTTON": "帎åŠ",
+ "MY_AGENTS": "æįäģŖįäēē",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "å¨æ¤æžį¤ēäģģäŊå
厚äšåīŧæ¨éčĻå
ååģēåäŋåįŦŦä¸ä¸ĒäģŖįäēēīŧ",
+ "SETTINGS_BUTTON": "莞įŊŽ",
+ "SIGN_IN": "įģåŊ",
+ "SIGN_IN_NOTICE": "č¯ˇįģåŊäģĨäŋåæ¨įäģŖįäēēåšļįŽĄįæ¨įå¸æˇīŧ",
+ "SIGN_OUT": "éåē",
+ "SUPPORT_BUTTON": "æ¯æ",
+ "USER_IMAGE": "į¨æˇåžį"
+}
diff --git a/next/public/locales/zh/errors.json b/next/public/locales/zh/errors.json
new file mode 100644
index 0000000..ad68a9e
--- /dev/null
+++ b/next/public/locales/zh/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "å¨čŋæĨ OpenAI API æļåēéãč¯ˇæŖæĨ API å¯éĨīŧæį¨ååč¯ã",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "æˇģå å
ļäģäģģåĄæļåēéãå¯čŊæ¯å ä¸ēæäģŦįæ¨Ąåæ æŗå¤įæ¨įååēåįģæãįģ§įģ...",
+ "RATE_LIMIT_EXCEEDED": "åˇ˛čžžå°æ大æĨč¯ĸæŦĄæ°īŧč¯ˇæžæ
ĸéåēĻ...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "æ¤äģŖįåˇ˛čžžå°å¯čŋčĄåžĒį¯įæ大æŦĄæ°ãä¸ēäēčįæ¨įéąå
īŧæ¤äģŖįį°å¨å°åæĸ... å¯äģĨå¨čŽžįŊŽä¸é
įŊŽäģŖįčŋčĄåžĒį¯įæ大æŦĄæ°ã",
+ "DEMO_LOOPS_REACHED": "æąæīŧå ä¸ēčŋæ¯ä¸ä¸Ēæŧį¤ēåēį¨į¨åēīŧæäģĨæäģŦæ æŗ莊äģŖįčŋčĄå¤Ēéŋæļé´ãå¤æŗ¨īŧåĻææ¨æŗčŋčĄæ´éŋæļé´īŧč¯ˇå¨čŽžįŊŽä¸æäžčĒåˇąį API å¯éĨãåæĸ...",
+ "AGENT_MANUALLY_SHUT_DOWN": "äģŖįåˇ˛æå¨å
ŗéã",
+ "ALL_TASKS_COMPLETETD": "ææäģģåĄåˇ˛åŽæãåæĸ...",
+ "ERROR_API_KEY_QUOTA": "äŊŋį¨ OpenAI API å¯éĨæļåēéãæ¨åˇ˛čļ
åēåŊåé
éĸīŧč¯ˇæŖæĨæ¨įå¸åäŋĄæ¯ã",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "éč¯¯īŧæ¨į OpenAI API å¯éĨæ˛Ąæ GPT-4 čŽŋéŽæéãæ¨éĻå
éčĻå¨ OpenAI įåž
å襨ä¸æŗ¨åã īŧčŋä¸ ChatGPT Plus ä¸åīŧ",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "æŖį´ĸåå§äģģåĄæļåēéãč¯ˇéč¯īŧæ´æ¸
æĨå°čĄ¨čžžäģŖįįŽæ īŧæč
äŋŽæšäģŖįäģĨäŊŋå
ļįŦĻåæäģŦįæ¨Ąåãåæĸ...",
+ "INVALID_OPENAI_API_KEY": "é¯čĒ¤īŧOpenAI API éé°įĄæ"
+}
diff --git a/next/public/locales/zh/help.json b/next/public/locales/zh/help.json
new file mode 100644
index 0000000..e3e4824
--- /dev/null
+++ b/next/public/locales/zh/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT įææĄŖ",
+ "FOLLOW_THE_JOURNEY": "å¨äģĨä¸æšéĸå
ŗæŗ¨æäģŦįæ
į¨īŧ",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "ä¸įŊįĢåäēēäģŦįäēå¨ đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "莊æ¨čŊå¤éčŋæĩč§å¨é
įŊŽåčŋčĄčĒä¸ģįAIäģŖįãåŊåæ¨įåŽåļAIäģŖįåšļåŽäšå
ļįŽæ ãAIäģŖįéčŋååģēäģģåĄīŧæ§čĄäģģåĄīŧįļåč¯äŧ°å
ļįģææĨå°č¯åŽį°æåŽįįŽæ đ",
+ "LONG_TERM_MEMORY": "éŋæ莰åŋ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "č¯Ĩåšŗå°įŽåå¤äēbetaįīŧæäģŦįŽåæŖå¨å¤įäģĨä¸å
厚īŧ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "čĻäēč§Ŗæå
ŗ AgentGPTãå
ļčˇ¯įēŋåžã常č§éŽéĸč§Ŗįįįæ´å¤äŋĄæ¯īŧč¯ˇčŽŋéŽ",
+ "WEB_BROWSING": "įŊįģæĩč§ đ",
+ "WELCOME_TO_AGENT_GPT": "æŦĸčŋäŊŋį¨AgentGPT"
+}
diff --git a/next/public/locales/zh/indexPage.json b/next/public/locales/zh/indexPage.json
new file mode 100644
index 0000000..10db1ba
--- /dev/null
+++ b/next/public/locales/zh/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "č´åĄ",
+ "HEADING_DESCRIPTION": "å¨æĩč§å¨ä¸įŧč¯īŧé
įŊŽååŽčŖ
čĒä¸ģ AI äģŖįã",
+ "AGENT_NAME": "åį§°",
+ "LABEL_AGENT_GOAL": "įŽæ ",
+ "PLACEHOLDER_AGENT_GOAL": "莊ä¸įååžæ´įžåĨŊ",
+ "BUTTON_DEPLOY_AGENT": "čŋčĄäģŖį",
+ "BUTTON_STOP_AGENT": "åæĸäģŖį"
+ }
\ No newline at end of file
diff --git a/next/public/locales/zh/languages.json b/next/public/locales/zh/languages.json
new file mode 100644
index 0000000..440ec5d
--- /dev/null
+++ b/next/public/locales/zh/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "čąč¯",
+ "FRENCH": "æŗč¯",
+ "SPANISH": "čĨŋįįč¯",
+ "GERMAN": "åžˇč¯",
+ "JAPANESE": "æĨč¯",
+ "KOREAN": "éŠč¯",
+ "CHINESE": "ä¸æ",
+ "PORTUGEES": "čĄčįč¯",
+ "ITALIAN": "æ大åŠč¯",
+ "DUTCH": "čˇå
°č¯",
+ "POLSKI": "æŗĸå
°č¯",
+ "HUNGARIAN": "åįåŠč¯",
+ "ROMANIAN": "įŊéŠŦå°ŧäēč¯",
+ "SLOVAK": "æ¯æ´äŧå
č¯"
+}
\ No newline at end of file
diff --git a/next/public/locales/zh/settings.json b/next/public/locales/zh/settings.json
new file mode 100644
index 0000000..27448a8
--- /dev/null
+++ b/next/public/locales/zh/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "éĢįē§čŽžįŊŽ",
+ "API_KEY": "APIå¯éĨ",
+ "AUTOMATIC_MODE": "čĒå¨æ¨Ąåŧ",
+ "AUTOMATIC_MODE_DESCRIPTION": "īŧéģ莤īŧīŧäģŖįčĒå¨æ§čĄæ¯ä¸ĒäģģåĄã",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "æ§åļæ¯ä¸ĒAPIč°į¨ä¸äŊŋį¨įäģ¤įįæ大æ°éīŧčžéĢįåŧäŧäē§įæ´č¯ĻįģįååēīŧäŊææŦæ´éĢīŧã",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "æ§åļäģŖįį¨åēčŋčĄįæ大åžĒį¯æŦĄæ°īŧčžéĢįåŧäŧå¯ŧč´æ´å¤įAPIč°į¨īŧã",
+ "GET_YOUR_OWN_APIKEY": "čˇåæ¨čĒåˇąį OpenAI API å¯éĨ",
+ "HERE": "čŋé",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "æ¨å¯äģĨå¨čŋéæˇģå OpenAI APIå¯éĨãčŋæåŗįæ¨éčĻæ¯äģäŊŋį¨čĒåˇąįOpenAIäģ¤įįč´šį¨īŧäŊæ¨å°čˇåžæ´å¤§įChatGPTčŽŋéŽæéīŧæ¤å¤īŧæ¨čŋå¯äģĨéæŠäģģäŊOpenAIæäžįæ¨Ąåã",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "čžéĢįåŧäŧäŊŋčžåēæ´å éæēīŧččžäŊįåŧäŧäŊŋå
ļæ´å čįĻåæįĄŽã",
+ "INFO_TO_USE_GPT4": "äŊŋį¨GPT-4æ¨ĄåéčĻæäžAPIå¯éĨãæ¨å¯äģĨå¨æ¤å¤čˇåã",
+ "INVALID_OPENAI_API_KEY": "æ æį API å¯éĨīŧ",
+ "LABEL_MODE": "æ¨Ąåŧ",
+ "LABEL_MODEL": "æ¨Ąå",
+ "LANG": "č¯č¨",
+ "LINK": "čˇåAPIå¯éĨ",
+ "LOOP": "åžĒį¯",
+ "MUST_CONNECT_CREDIT_CARD": "æŗ¨īŧæ¨åŋ
éĄģå°äŋĄį¨åĄčŋæĨå°æ¨įč´Ļæˇ",
+ "NOTE_API_KEY_USAGE": "æ¤å¯éĨäģ
å¨åŊåæĩč§å¨äŧč¯ä¸äŊŋį¨ã",
+ "NOTE_TO_GET_OPENAI_KEY": "æŗ¨æīŧčĻčˇåAPIå¯éĨīŧæ¨éčĻæŗ¨åä¸ä¸ĒOpenAIå¸æˇīŧå¯äģĨå¨äģĨä¸éžæĨä¸åŽæīŧ",
+ "PAUSE": "æå",
+ "PAUSE_MODE": "æåæ¨Ąåŧ",
+ "PAUSE_MODE_DESCRIPTION": "äģŖįå¨æ¯įģäģģåĄåæå",
+ "PENAI_API_KEY": "æ æį OpenAI API å¯éĨ",
+ "PLAY": "ææž",
+ "SETTINGS_DIALOG_HEADER": "莞įŊŽâ",
+ "SUBSCRIPTION_WILL_NOT_WORK": "īŧChatGPT PlusčŽĸé
ä¸čĩˇäŊį¨īŧ",
+ "TEMPERATURE": "渊åēĻ",
+ "TOKENS": "äģ¤į"
+}
diff --git a/next/public/locales/zhtw/chat.json b/next/public/locales/zhtw/chat.json
new file mode 100644
index 0000000..292d208
--- /dev/null
+++ b/next/public/locales/zhtw/chat.json
@@ -0,0 +1,17 @@
+{
+ "COMPLETING": "åŽæīŧ",
+ "CONSIDER_SPONSORING_ON_GITHUB": "ééGitHubč´åŠæŦå°æĄã",
+ "CONSOLE_TEXT_COPIED_TO_CLIPBOARD": "æååˇ˛č¤čŖŊå°åĒč˛ŧį°ŋ",
+ "CONSOLE_UNABLE_TO_COPY_TO_CLIPBOARD": "įĄæŗå°æåč¤čŖŊčŗåĒč˛ŧį°ŋ",
+ "CREATE_AN_AGENT_DESCRIPTION": "åĩåģēä¸åAIæŠå¨äēēīŧčŧ¸å
Ĩåį¨ąåįŽæ¨īŧįļåžéģæ\"ååAIīŧ\"æé",
+ "EMBARKING_ON_NEW_GOAL": "åˇčĄæ°įŽæ¨īŧ",
+ "EXPERIENCING_EXCEPTIONAL_TRAFFIC": "đ¨ æåæŖå¨įļæˇéĢæĩéīŧåĻææ¨æ˛æäŊŋį¨čĒåˇąįAPIéé°īŧé č¨ææåģļé˛æé¯čĒ¤ đ¨",
+ "HELP_SUPPORT_THE_ADVANCEMENT_OF_AGENTGPT": "đī¸ æ¯æAgentGPTįįŧåąã đī¸",
+ "NO_MORE_TASKS": "æ˛ææ´å¤įæŦĄčĻäģģåå¯äģĨåˇčĄīŧ",
+ "RESTART_IF_IT_TAKES_X_SEC": "īŧåĻæéčĻ30į§äģĨä¸īŧčĢéæ°æ´įįļ˛é ææåéæ°ååAIæŠå¨äēēīŧ",
+ "SUPPORT_NOW": "įžå¨æ¯æ đ",
+ "TASK_ADDED": "åˇ˛æˇģå äģģåīŧ",
+ "THINKING": "æčä¸...",
+ "YOU_CAN_PROVIDE_YOUR_API_KEY": "đĸ æ¨å¯äģĨå¨č¨åŽä¸æäžčĒåˇąį OpenAI API éé°äģĨč§Ŗé¤AIåæ¸ä¸éīŧ",
+ "đ Create an agent by adding a name / goal, and hitting deploy!": "đ čŧ¸å
Ĩåį¨ą/įŽæ¨ä¸Ļéģæé¨įŊ˛äģĨåĩåģēä¸åAIæŠå¨äēēīŧ"
+}
diff --git a/next/public/locales/zhtw/chat.missing.json b/next/public/locales/zhtw/chat.missing.json
new file mode 100644
index 0000000..10a048d
--- /dev/null
+++ b/next/public/locales/zhtw/chat.missing.json
@@ -0,0 +1,7 @@
+{
+ "đ Create an agent by adding a name / goal, and hitting deploy! Try our examples below!": "đ éčŋæˇģå åį§°/įŽæ åšļįšåģé¨įŊ˛æĨååģēäģŖįīŧ\nå°č¯ä¸éĸįį¤ēäžīŧ",
+ "đ Vytvorte agenta pridanÃm mena a cieÄža a kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"": "đ Vytvorte agenta pridanÃm mena a cieÄža kliknite na tlaÄidlo \"SpustiÅĨ agenta!\"",
+ "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ХОСдаКŅĐĩ Đ°ĐŗĐĩĐŊŅĐ°, дОйавив иĐŧŅ и ŅĐĩĐģŅ, СаŅĐĩĐŧ ĐŊĐ°ĐļĐŧиŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅŅ Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"": "đ ĐĄŅвОŅŅŅŅ Đ°ĐŗĐĩĐŊŅĐ°, дОдавŅи ŅĐŧ'Ņ ŅĐ° ĐŧĐĩŅŅ, Đ° ĐŋĐžŅŅĐŧ ĐēĐģĐ°ŅĐŊŅŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĐ°ĐŋŅŅŅиŅи Đ°ĐŗĐĩĐŊŅĐ°!\"",
+ "đ ååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģ\"å¯å¨äģŖįīŧ\"æéŽ": "đååģēä¸ä¸ĒäģŖįīŧæˇģå åį§°åįŽæ īŧįļåååģâå¯å¨äģŖįīŧâæéŽ"
+}
diff --git a/next/public/locales/zhtw/common.json b/next/public/locales/zhtw/common.json
new file mode 100644
index 0000000..104bb9c
--- /dev/null
+++ b/next/public/locales/zhtw/common.json
@@ -0,0 +1,26 @@
+{
+ "ADDING_TASK": "åĸå äģģå",
+ "AGENTGPT_DOCUMENTATION": "AgentGPT įæäģļ",
+ "CLOSE": "éé",
+ "CONTINUE": "įšŧįē",
+ "COPIED_TO_CLIPBOARD": "äģĨč¤čŖŊå°åĒč˛ŧį°ŋīŧ \nđ",
+ "COPY": "č¤čŖŊ",
+ "CREATE_AN_AGENT_DESCRIPTION": "čŧ¸å
Ĩåį¨ą/įŽæ¨ä¸Ļéģæé¨įŊ˛äģĨåĩåģēä¸åAIæŠå¨äēēīŧ",
+ "CURRENT_TASKS": "įŽåäģģå",
+ "EXECUTING": "åˇčĄä¸",
+ "EXPORT": "å¯åē",
+ "IMAGE": "åį",
+ "LOOP": "åæ¸",
+ "PAUSED": "æĢå",
+ "RESET": "éįŊŽ",
+ "RUNNING": "é˛čĄä¸",
+ "SAVE": "å˛å",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "åĻæčĻååžæé AgentGPT åįĸåčˇ¯įˇåįčŗč¨īŧčĢéģéąäģĨä¸éŖįĩ",
+ "create-a-comprehensive-report-of-the-nike-company": "åģēįĢNikeå
Ŧå¸įįļåå ąå",
+ "if-you-are-facing-issues-please-head-over-to-our": "åĻææ¨éå°åéĄīŧčĢååžæåį",
+ "plan-a-detailed-trip-to-hawaii": "č¨įĢčŠŗį´°įå¤å¨å¤ˇäšæ
ã",
+ "platformergpt": "åšŗå° GPT đŽ",
+ "researchgpt": "į įŠļ GPT đ",
+ "travelgpt": "æ
é GPT đ´",
+ "web-search": "įļ˛čˇ¯æå°"
+}
diff --git a/next/public/locales/zhtw/drawer.json b/next/public/locales/zhtw/drawer.json
new file mode 100644
index 0000000..660089c
--- /dev/null
+++ b/next/public/locales/zhtw/drawer.json
@@ -0,0 +1,12 @@
+{
+ "ACCOUNT": "å¸ŗæļ",
+ "HELP_BUTTON": "ååŠ",
+ "MY_AGENTS": "æįAIæŠå¨äēē",
+ "NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST": "å¨éĄ¯į¤ēäģģäŊå
§åŽšäšåīŧæ¨éčĻåģēįĢåå˛åįŦŦä¸åAIæŠå¨äēēīŧ",
+ "SETTINGS_BUTTON": "č¨åŽ",
+ "SIGN_IN": "įģå
Ĩ",
+ "SIGN_IN_NOTICE": "čĢįģå
Ĩåˇ˛å˛åæ¨įAIæŠå¨äēēä¸ĻįŽĄįæ¨įå¸ŗæļīŧ",
+ "SIGN_OUT": "įģåē",
+ "SUPPORT_BUTTON": "æ¯æ",
+ "USER_IMAGE": "äŊŋį¨č
åį"
+}
diff --git a/next/public/locales/zhtw/errors.json b/next/public/locales/zhtw/errors.json
new file mode 100644
index 0000000..c215de9
--- /dev/null
+++ b/next/public/locales/zhtw/errors.json
@@ -0,0 +1,13 @@
+{
+ "ERROR_ACCESSING_OPENAI_API_KEY": "é¯čĒ¤īŧå¨éŖįĩ OpenAI API æåˇčĄé¯čĒ¤ãčĢæĒĸæĨæ¨į API éé°æį¨åžåčŠĻã",
+ "ERROR_ADDING_ADDITIONAL_TASKS": "é¯čĒ¤īŧåĸå å
ļäģäģģåæåēé¯ãå¯čŊå įēæåįæ¨ĄåįĄæŗčįæ¨įįĩæīŧįšŧįēä¸...",
+ "RATE_LIMIT_EXCEEDED": "čļ
éæéĢæåæŦĄæ¸ãčĢæ¸å°æåæŦĄæ¸...đ
",
+ "AGENT_MAXED_OUT_LOOPS": "æ¤AIæŠå¨äēēäģĨéåžĒį°æŦĄæ¸ä¸éãįēäēį¯įæ¨įčˇå
īŧæ¤AIæŖå¨åæĸåˇčĄ...æ¨å¯äģĨå¨æ´å¤č¨åŽä¸čĒŋæ´åžĒį°æŦĄæ¸ä¸éã",
+ "DEMO_LOOPS_REACHED": "åžæąæīŧå įēéæ¯ä¸åDemoį¨åŧīŧæäģĨæåįĄæŗčŽæŠå¨äēēéäŊå¤Ēéˇãåč¨ģīŧåĻææ¨æŗéäŊæ´éˇįæéīŧčĢå¨č¨åŽä¸æäžčĒåˇąį API éé°ãåæĸä¸...",
+ "AGENT_MANUALLY_SHUT_DOWN": "æŠå¨äēēåˇ˛æåééã",
+ "ALL_TASKS_COMPLETETD": "æäģĨäģģååˇ˛åŽæãåæĸä¸...",
+ "ERROR_API_KEY_QUOTA": "é¯čĒ¤īŧ OpenAI API éé°é¯čĒ¤ãæ¨åˇ˛čļ
åēäŊŋį¨éĄåēĻīŧčĢæĒĸæĨæ¨įæšæĄåäģč˛ģčŗč¨ã",
+ "ERROR_OPENAI_API_KEY_NO_GPT4": "é¯čĒ¤īŧæ¨į API éé°æ˛æ GPT-4 äŊŋį¨æŦéãæ¨åŋ
é å
å å
Ĩ OpenAI įįåæ¸
åŽãīŧéå ChatGPT Plus ä¸åīŧ",
+ "ERROR_RETRIEVE_INITIAL_TASKS": "é¯čĒ¤īŧå°æžåå§äģģåæ¸åé¯čĒ¤ãčĢéčŠĻãå°įŽæ¨å¯Ģåžæ´å æ¸
æĨīŧæäŋŽæšįŽæ¨äģĨįŦĻåæåįæ¨Ąåæŋįãåæĸä¸...",
+ "INVALID_OPENAI_API_KEY": "é¯čĒ¤īŧOpenAI API éé°įĄæ"
+}
diff --git a/next/public/locales/zhtw/help.json b/next/public/locales/zhtw/help.json
new file mode 100644
index 0000000..56bca5a
--- /dev/null
+++ b/next/public/locales/zhtw/help.json
@@ -0,0 +1,11 @@
+{
+ "AGENTGPT_DOCUMENTATION": "AgentGPT įæäģļ",
+ "FOLLOW_THE_JOURNEY": "čĢčˇé¨äģĨä¸æĩį¨īŧ",
+ "INTERACTION_WITH_WEBSITES_AND_PEOPLE": "čįļ˛įĢåäēēäēå đ¨âđŠâđĻ",
+ "INTRODUCING_AGENTGPT": "å
訹č¨åŽéé¨įŊ˛čĒä¸ģAIæŠå¨äēēäģĨåå°å
ļåŊåäģĨčŽäģčŋŊæąäģģäŊčŊæŗåįįŽæ¨ãäģå°æééæčãåˇčĄäģģåä¸Ļåžįĩæä¸å¸įŋäžå¯ĻįžįŽæ¨ đ",
+ "LONG_TERM_MEMORY": "éˇæč¨æļ đ§ ",
+ "PLATFORM_BETA_DESCRIPTION": "æ¤åšŗå°įŽåčæŧbetačŠĻį¨įīŧæåæŖå¨čįäģĨä¸å
§åŽšīŧ",
+ "TO_LEARN_MORE_ABOUT_AGENTGPT": "čĻäēč§Ŗæé AgentGPTãå
ļįĸåčˇ¯įˇåã常čĻåéĄįįæ´å¤čŗč¨īŧčĢéģæ",
+ "WEB_BROWSING": "įļ˛é įčĻŊ đ",
+ "WELCOME_TO_AGENT_GPT": "æĄčŋäŊŋį¨AgentGPT"
+}
diff --git a/next/public/locales/zhtw/indexPage.json b/next/public/locales/zhtw/indexPage.json
new file mode 100644
index 0000000..1f6ba80
--- /dev/null
+++ b/next/public/locales/zhtw/indexPage.json
@@ -0,0 +1,9 @@
+{
+ "BETA": "BetačŠĻį¨į",
+ "HEADING_DESCRIPTION": "å¨įčĻŊå¨ä¸įˇ¨č¯ãé
įŊŽä¸ĻåŽčŖčĒä¸ģAIæŠå¨äēēã",
+ "AGENT_NAME": "åį¨ą",
+ "LABEL_AGENT_GOAL": "įŽæ¨",
+ "PLACEHOLDER_AGENT_GOAL": "čŽä¸įčŽåæ´įžåĨŊ",
+ "BUTTON_DEPLOY_AGENT": "åˇčĄAIæŠå¨äēē",
+ "BUTTON_STOP_AGENT": "åæĸAIæŠå¨äēē"
+}
diff --git a/next/public/locales/zhtw/languages.json b/next/public/locales/zhtw/languages.json
new file mode 100644
index 0000000..c1c38bb
--- /dev/null
+++ b/next/public/locales/zhtw/languages.json
@@ -0,0 +1,16 @@
+{
+ "ENGLISH": "čąčĒ",
+ "FRENCH": "æŗčĒ",
+ "SPANISH": "čĨŋįįčĒ",
+ "GERMAN": "åžˇčĒ",
+ "JAPANESE": "æĨčĒ",
+ "KOREAN": "éčĒ",
+ "CHINESE": "ä¸æ",
+ "PORTUGEES": "čĄčįčĒ",
+ "ITALIAN": "įžŠå¤§åŠčĒ",
+ "DUTCH": "čˇččĒ",
+ "POLSKI": "æŗĸččĒ",
+ "HUNGARIAN": "åįåŠčĒ",
+ "ROMANIAN": "įž
éĻŦå°ŧäēčĒ",
+ "SLOVAK": "æ¯æ´äŧå
čĒ"
+}
\ No newline at end of file
diff --git a/next/public/locales/zhtw/settings.json b/next/public/locales/zhtw/settings.json
new file mode 100644
index 0000000..d8e0283
--- /dev/null
+++ b/next/public/locales/zhtw/settings.json
@@ -0,0 +1,31 @@
+{
+ "ADVANCED_SETTINGS": "é˛éč¨åŽ",
+ "API_KEY": "APIéé°",
+ "AUTOMATIC_MODE": "čĒåæ¨Ąåŧ",
+ "AUTOMATIC_MODE_DESCRIPTION": "īŧåå§č¨åŽīŧīŧAIæŠå¨äēēčĒååˇčĄæ¯åäģģåã",
+ "CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION": "æ§åļæ¯åAPIæåä¸äŊŋį¨įtokenæ大æ¸éīŧčŧéĢįåŧæįĸįæ´čŠŗį´°įåéĨīŧäŊææŦææ´éĢīŧã",
+ "CONTROL_THE_MAXIMUM_NUM_OF_LOOPS": "æ§åļAIåˇčĄį大åžĒį°æŦĄæ¸īŧčŧéĢįåŧæäŊŋį¨æ´å¤APIæåīŧã",
+ "GET_YOUR_OWN_APIKEY": "į˛åžæ¨čĒåˇąį OpenAI API éé°",
+ "HERE": "éčŖĄ",
+ "HERE_YOU_CAN_ADD_YOUR_OPENAI_API_KEY": "æ¨å¯äģĨå¨éčŖĄčŧ¸å
ĨOpenAI APIéé°ãåįŽĄéæäŊŋį¨æ¨čĒåˇąįOpenAIäģč˛ģåčŊīŧäŊå°æįēæ¨åĸå äŊŋį¨AgentGPTįæŦéīŧä¸Ļä¸īŧæ¨éå¯äģĨé¸æOpenAIæäžįäģģä¸æ¨Ąåã",
+ "HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM": "čŧéĢįåŧæåĸå čŧ¸åēįé¨æŠæ§īŧčŧäŊįåŧæåĸå įčŧ¸åēįåŽä¸åéä¸æ§ã",
+ "INFO_TO_USE_GPT4": "åĻæéčĻäŊŋį¨GPT-4æ¨Ąåīŧæ¨éé æäžGPT-4įAPIéé°ãæ¨å¯äģĨå¨æ¤čįŗčĢ",
+ "INVALID_OPENAI_API_KEY": "įĄæį OpenAI API éé°īŧ",
+ "LABEL_MODE": "æ¨Ąåŧ",
+ "LABEL_MODEL": "æ¨Ąå",
+ "LANG": "čĒč¨",
+ "LINK": "į˛åžAPIéé°",
+ "LOOP": "åžĒį°",
+ "MUST_CONNECT_CREDIT_CARD": "æŗ¨æīŧæ¨åŋ
é å°äŋĄį¨åĄéŖæĨå°æ¨įå¸ŗæļ",
+ "NOTE_API_KEY_USAGE": "æ¤éé°å
å¨įļåįčĻŊå¨å°čŠąä¸äŊŋį¨ã",
+ "NOTE_TO_GET_OPENAI_KEY": "æŗ¨æīŧåĻæčĻį˛åéé°īŧčĢč¨ģåOpenAIå¸ŗčä¸ĻįčĻŊä¸ä¸įļ˛åīŧ",
+ "PAUSE": "æĢå",
+ "PAUSE_MODE": "æĢåæ¨Ąåŧ",
+ "PAUSE_MODE_DESCRIPTION": "AIæŠå¨ä¸æå¨åˇčĄæ¯é
äģģååžæĢå",
+ "PENAI_API_KEY": "įĄæį API éé°",
+ "PLAY": "ææž",
+ "SETTINGS_DIALOG_HEADER": "č¨åŽâ",
+ "SUBSCRIPTION_WILL_NOT_WORK": "īŧChatGPT Plusč¨éąå¸ŗčįĄæŗäŊŋį¨īŧ",
+ "TEMPERATURE": "æēĢåēĻ",
+ "TOKENS": "token"
+}
diff --git a/next/public/logos/dark-default-gradient.svg b/next/public/logos/dark-default-gradient.svg
new file mode 100644
index 0000000..fa4f41a
--- /dev/null
+++ b/next/public/logos/dark-default-gradient.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/logos/dark-default-solid.svg b/next/public/logos/dark-default-solid.svg
new file mode 100644
index 0000000..fd036ae
--- /dev/null
+++ b/next/public/logos/dark-default-solid.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/next/public/logos/light-default-solid.svg b/next/public/logos/light-default-solid.svg
new file mode 100644
index 0000000..45bea5a
--- /dev/null
+++ b/next/public/logos/light-default-solid.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/next/public/logos/panache-default-solid.svg b/next/public/logos/panache-default-solid.svg
new file mode 100644
index 0000000..c106af5
--- /dev/null
+++ b/next/public/logos/panache-default-solid.svg
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/logos/yc-default-solid.svg b/next/public/logos/yc-default-solid.svg
new file mode 100644
index 0000000..7cfedc8
--- /dev/null
+++ b/next/public/logos/yc-default-solid.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/orb-v1-medium.webm b/next/public/orb-v1-medium.webm
new file mode 100644
index 0000000..a6afeea
Binary files /dev/null and b/next/public/orb-v1-medium.webm differ
diff --git a/next/public/prod_square.png b/next/public/prod_square.png
new file mode 100644
index 0000000..934d84b
Binary files /dev/null and b/next/public/prod_square.png differ
diff --git a/next/public/robots.txt b/next/public/robots.txt
new file mode 100644
index 0000000..14267e9
--- /dev/null
+++ b/next/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Allow: /
\ No newline at end of file
diff --git a/next/public/site.webmanifest b/next/public/site.webmanifest
new file mode 100644
index 0000000..fdc3aba
--- /dev/null
+++ b/next/public/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "Agent-GPT",
+ "short_name": "Agent-GPT",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/next/public/social.png b/next/public/social.png
new file mode 100644
index 0000000..bb7c231
Binary files /dev/null and b/next/public/social.png differ
diff --git a/next/public/stars.svg b/next/public/stars.svg
new file mode 100644
index 0000000..77a2d1a
--- /dev/null
+++ b/next/public/stars.svg
@@ -0,0 +1,2410 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/public/tools/google.png b/next/public/tools/google.png
new file mode 100644
index 0000000..001e1a2
Binary files /dev/null and b/next/public/tools/google.png differ
diff --git a/next/public/tools/openai-white.png b/next/public/tools/openai-white.png
new file mode 100644
index 0000000..97e73e0
Binary files /dev/null and b/next/public/tools/openai-white.png differ
diff --git a/next/public/tools/openai.png b/next/public/tools/openai.png
new file mode 100644
index 0000000..7d42028
Binary files /dev/null and b/next/public/tools/openai.png differ
diff --git a/next/public/tools/replicate.png b/next/public/tools/replicate.png
new file mode 100644
index 0000000..9fa534b
Binary files /dev/null and b/next/public/tools/replicate.png differ
diff --git a/next/public/tools/sid.png b/next/public/tools/sid.png
new file mode 100644
index 0000000..ea5bde8
Binary files /dev/null and b/next/public/tools/sid.png differ
diff --git a/next/public/tools/web.png b/next/public/tools/web.png
new file mode 100644
index 0000000..4082aa2
Binary files /dev/null and b/next/public/tools/web.png differ
diff --git a/next/public/tools/wikipedia.png b/next/public/tools/wikipedia.png
new file mode 100644
index 0000000..33710df
Binary files /dev/null and b/next/public/tools/wikipedia.png differ
diff --git a/next/public/wordmark.svg b/next/public/wordmark.svg
new file mode 100644
index 0000000..10dcc7f
--- /dev/null
+++ b/next/public/wordmark.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next/src/components/Accordion.tsx b/next/src/components/Accordion.tsx
new file mode 100644
index 0000000..badcffc
--- /dev/null
+++ b/next/src/components/Accordion.tsx
@@ -0,0 +1,29 @@
+import { Disclosure as AccordionPrimitive } from "@headlessui/react";
+import { FaChevronDown } from "react-icons/fa";
+
+interface AccordionProps {
+ child: React.ReactNode;
+ name: string;
+}
+
+const Accordion = ({ child, name }: AccordionProps) => {
+ return (
+
+ {({ open }) => (
+ <>
+
+ {name}
+
+
+
+ {child}
+
+ >
+ )}
+
+ );
+};
+
+export default Accordion;
diff --git a/next/src/components/AppHead.tsx b/next/src/components/AppHead.tsx
new file mode 100644
index 0000000..9588350
--- /dev/null
+++ b/next/src/components/AppHead.tsx
@@ -0,0 +1,32 @@
+import Head from "next/head";
+
+const AppHead = ({ title, ogTitle }: { title?: string; ogTitle?: string }) => {
+ // Do not translate. Head attributes won't have access to i18n.
+ const description = "Assemble, configure, and deploy autonomous AI Agents in your browser.";
+ return (
+
+ {title ?? "AgentGPT"}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default AppHead;
diff --git a/next/src/components/AppTitle.tsx b/next/src/components/AppTitle.tsx
new file mode 100644
index 0000000..b6b63d9
--- /dev/null
+++ b/next/src/components/AppTitle.tsx
@@ -0,0 +1,42 @@
+import React from "react";
+
+import BannerBadge from "./BannerBadge";
+
+const AppTitle = () => {
+ return (
+
+
+
+ AgentGPT
+
+
+
+
+ {
+ window.open("https://6h6bquxo5g1.typeform.com/to/qscfsOf1", "_blank");
+ }}
+ >
+ Automate your business with Agents
+
+
+
{
+ window.open("https://6h6bquxo5g1.typeform.com/to/qscfsOf1", "_blank");
+ }}
+ >
+ Interested in automating businesses with AI Agents? Apply here
+
+
+
+ );
+};
+
+export default AppTitle;
diff --git a/next/src/components/Badge.tsx b/next/src/components/Badge.tsx
new file mode 100644
index 0000000..397401e
--- /dev/null
+++ b/next/src/components/Badge.tsx
@@ -0,0 +1,24 @@
+import clsx from "clsx";
+import React from "react";
+
+interface BadgeProps {
+ className?: string;
+ colorClass?: string;
+ children: React.ReactNode;
+}
+
+const Badge = ({ className, colorClass, children }: BadgeProps) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default Badge;
diff --git a/next/src/components/BannerBadge.tsx b/next/src/components/BannerBadge.tsx
new file mode 100644
index 0000000..f7f3685
--- /dev/null
+++ b/next/src/components/BannerBadge.tsx
@@ -0,0 +1,28 @@
+import clsx from "clsx";
+import type { PropsWithChildren } from "react";
+import React from "react";
+import { FaChevronRight } from "react-icons/fa";
+
+type BadgeProps = PropsWithChildren>;
+
+const BannerBadge = ({ children, className, ...props }: BadgeProps) => (
+
+);
+
+export default BannerBadge;
diff --git a/next/src/components/Button.tsx b/next/src/components/Button.tsx
new file mode 100644
index 0000000..8ef83b3
--- /dev/null
+++ b/next/src/components/Button.tsx
@@ -0,0 +1,62 @@
+import clsx from "clsx";
+import type { ForwardedRef } from "react";
+import React, { forwardRef, useState } from "react";
+
+import Loader from "./loader";
+
+export interface ButtonProps {
+ type?: "button" | "submit" | "reset";
+ className?: string;
+ icon?: React.ReactNode;
+ children?: React.ReactNode;
+ loader?: boolean;
+ disabled?: boolean;
+ ping?: boolean;
+ enabledClassName?: string;
+ onClick?: (e: React.MouseEvent) => Promise | void;
+}
+
+const Button = forwardRef((props: ButtonProps, ref: ForwardedRef) => {
+ const [loading, setLoading] = useState(false);
+ const onClick = (e: React.MouseEvent) => {
+ if (props.loader == true) setLoading(true);
+
+ try {
+ void Promise.resolve(props.onClick?.(e)).then();
+ } catch (e) {
+ setLoading(false);
+ }
+ };
+
+ return (
+
+
+ {loading && (
+
+ )}
+
+ {props.icon ?
{props.icon}
: null}
+ {props.children}
+
+
+
+ );
+});
+
+Button.displayName = "Button";
+export default Button;
diff --git a/next/src/components/Globe.tsx b/next/src/components/Globe.tsx
new file mode 100644
index 0000000..cc92ffb
--- /dev/null
+++ b/next/src/components/Globe.tsx
@@ -0,0 +1,46 @@
+import type { COBEOptions } from "cobe";
+import createGlobe from "cobe";
+import type { MutableRefObject } from "react";
+import React, { useEffect, useRef } from "react";
+
+export default function Globe(): JSX.Element {
+ const canvasRef: MutableRefObject = useRef(null);
+
+ const size = 700;
+ useEffect(() => {
+ if (!canvasRef.current) return;
+ let phi = 0;
+
+ const globeSettings: COBEOptions = {
+ devicePixelRatio: 2,
+ width: size * 2,
+ height: size * 2,
+ phi: 0,
+ theta: 0,
+ dark: 0,
+ diffuse: 1.2,
+ mapSamples: 16000,
+ mapBrightness: 6,
+ baseColor: [1, 1, 1],
+ markerColor: [1, 1, 0],
+ glowColor: [0.757, 0.784, 0.804],
+ markers: [],
+ onRender: (state) => {
+ // Called on every animation frame.
+ // `state` will be an empty object, return updated params.
+ state.phi = phi;
+ phi += 0.001;
+ },
+ };
+
+ const globe = createGlobe(canvasRef.current, globeSettings);
+
+ return () => {
+ if (canvasRef.current && globe) {
+ globe.destroy();
+ }
+ };
+ }, []);
+
+ return ;
+}
diff --git a/next/src/components/GlowWrapper.tsx b/next/src/components/GlowWrapper.tsx
new file mode 100644
index 0000000..aac4563
--- /dev/null
+++ b/next/src/components/GlowWrapper.tsx
@@ -0,0 +1,23 @@
+import type { ReactNode } from "react";
+import clsx from "clsx";
+
+type GlowWrapperProps = {
+ children: ReactNode;
+ className?: string;
+};
+
+const GlowWrapper = ({ children, className }: GlowWrapperProps) => {
+ return (
+
+ );
+};
+
+export default GlowWrapper;
diff --git a/next/src/components/HeroCard.tsx b/next/src/components/HeroCard.tsx
new file mode 100644
index 0000000..89dbe1a
--- /dev/null
+++ b/next/src/components/HeroCard.tsx
@@ -0,0 +1,41 @@
+import type { ReactNode } from "react";
+import React from "react";
+
+import GlowWrapper from "./GlowWrapper";
+import SparkleIcon from "../../public/icons/sparkle-default-regular.svg";
+
+type HeroCardProps = {
+ title: string;
+ subtitle: string;
+ leftIcon: ReactNode;
+};
+
+const HeroCard: React.FC = ({ title, subtitle, leftIcon }) => {
+ return (
+
+
+
{leftIcon}
+
+
+ {title}
+
+
+ {subtitle}
+
+
+
+
+ {
+ window.open("https://6h6bquxo5g1.typeform.com/to/qscfsOf1", "_blank");
+ }}
+ >
+
+
+
+
+ );
+};
+
+export default HeroCard;
diff --git a/next/src/components/Input.tsx b/next/src/components/Input.tsx
new file mode 100644
index 0000000..a3ebc0b
--- /dev/null
+++ b/next/src/components/Input.tsx
@@ -0,0 +1,72 @@
+import clsx from "clsx";
+import type { ChangeEvent, KeyboardEvent, ReactNode, RefObject } from "react";
+
+import Label from "./Label";
+import type { toolTipProperties } from "../types";
+
+type InputElement = HTMLInputElement | HTMLTextAreaElement;
+
+interface InputProps {
+ small?: boolean; // Will lower padding and font size. Currently only works for the default input
+ left?: ReactNode;
+ value: string | number | undefined;
+ onChange: (e: ChangeEvent) => void;
+ placeholder?: string;
+ disabled?: boolean;
+ type?: string;
+ subType?: string;
+ attributes?: { [key: string]: string | number | string[] }; // attributes specific to input type
+ toolTipProperties?: toolTipProperties;
+ inputRef?: RefObject;
+ onKeyDown?: (e: KeyboardEvent) => void;
+}
+
+const Input = (props: InputProps) => {
+ const isTypeTextArea = () => {
+ return props.type === "textarea";
+ };
+
+ return (
+
+ {props.left && (
+
+ )}
+ {isTypeTextArea() ? (
+
+ );
+};
+
+export default Input;
diff --git a/next/src/components/Label.tsx b/next/src/components/Label.tsx
new file mode 100644
index 0000000..2ae8bbb
--- /dev/null
+++ b/next/src/components/Label.tsx
@@ -0,0 +1,38 @@
+import clsx from "clsx";
+import React from "react";
+
+import Tooltip from "./Tooltip";
+import type { toolTipProperties } from "../types";
+
+interface LabelProps {
+ left?: React.ReactNode;
+ type?: string;
+ toolTipProperties?: toolTipProperties;
+}
+
+const Label = ({ type, left, toolTipProperties }: LabelProps) => {
+ const isTypeTextArea = () => {
+ return type === "textarea";
+ };
+
+ return (
+
+ {left}
+
+ }
+ sideOffset={0}
+ toolTipProperties={toolTipProperties}
+ >
+ );
+};
+
+export default Label;
diff --git a/next/src/components/Menu.tsx b/next/src/components/Menu.tsx
new file mode 100644
index 0000000..baeb842
--- /dev/null
+++ b/next/src/components/Menu.tsx
@@ -0,0 +1,65 @@
+import { Menu as MenuPrimitive, Transition } from "@headlessui/react";
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import { Fragment } from "react";
+import { FaChevronDown } from "react-icons/fa";
+
+interface MenuProps {
+ icon?: ReactNode;
+ chevron?: boolean;
+ name?: string;
+ buttonPosition?: "top" | "bottom";
+ items: JSX.Element[];
+}
+
+function Menu({ icon, name, items, chevron, buttonPosition = "top" }: MenuProps) {
+ return (
+
+
+
+ {icon}
+ {name && {name}
}
+ {chevron && }
+
+
+
+
+ );
+}
+
+type MenuItemsProps = {
+ buttonPosition: "top" | "bottom";
+ items: JSX.Element[];
+ show?: boolean;
+};
+
+export const MenuItems = ({ buttonPosition, items, show }: MenuItemsProps) => {
+ return (
+
+
+ {items.map((item, i) => {
+ return (
+
+ {item}
+
+ );
+ })}
+
+
+ );
+};
+
+export default Menu;
diff --git a/next/src/components/NavBar.tsx b/next/src/components/NavBar.tsx
new file mode 100644
index 0000000..65c898e
--- /dev/null
+++ b/next/src/components/NavBar.tsx
@@ -0,0 +1,126 @@
+import { Disclosure } from "@headlessui/react";
+import clsx from "clsx";
+import Image from "next/image";
+import { useRouter } from "next/router";
+import { useState } from "react";
+import { FaBars, FaChevronRight, FaTimes } from "react-icons/fa";
+
+import GlowWrapper from "./GlowWrapper";
+import CycleIcons from "./motions/CycleIcons";
+import FadeIn from "./motions/FadeIn";
+import PrimaryButton from "./PrimaryButton";
+import TextButton from "./TextButton";
+import BlogsIcon from "../../public/icons/icon-blogs.svg";
+import DocsIcon from "../../public/icons/icon-docs.svg";
+import GithubIcon from "../../public/icons/icon-github.svg";
+import HomeIcon from "../../public/icons/icon-home.svg";
+import PricingIcon from "../../public/icons/icon-pricing.svg";
+
+const navigation = [
+ { name: "Home", href: "/home", icon: },
+ { name: "Blog", href: "/blog", icon: },
+ { name: "Pricing", href: "https://agentgpt.reworkd.ai/plan", icon: },
+ {
+ name: "Github",
+ href: "https://github.com/reworkd/AgentGPT",
+ icon: ,
+ },
+ { name: "Docs", href: "https://docs.reworkd.ai/", icon: },
+];
+
+export default function NavBar() {
+ const router = useRouter();
+ const currentIndex = navigation.findIndex(
+ (nav) => router.pathname.includes(nav.href) || router.pathname === nav.href
+ );
+ const [hoveredButtonIndex, setHoveredButtonIndex] = useState(0);
+
+ return (
+
+
+ {({ open }) => (
+ <>
+
+
+
+ Reworkd
+
+
+
+
+ {
+ window.open("https://6h6bquxo5g1.typeform.com/to/qscfsOf1", "_blank");
+ }}
+ >
+ <>
+ Join the Waitlist
+
+ >
+
+
+
+
+ {/* Mobile menu button */}
+
+ Open main menu
+ {open ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+ {navigation.map((item) => (
+
+ {item.name}
+
+ ))}
+
+
+ >
+ )}
+
+
+ );
+}
diff --git a/next/src/components/Ping.tsx b/next/src/components/Ping.tsx
new file mode 100644
index 0000000..ef87504
--- /dev/null
+++ b/next/src/components/Ping.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+const Ping = ({ color }: { color: "blue" | "white" }) => {
+ const colorClasses = {
+ primary: color == "blue" ? "bg-sky-400" : "bg-white",
+ secondary: color == "blue" ? "bg-sky-400" : "bg-white",
+ };
+
+ return (
+
+
+
+
+ );
+};
+
+export default Ping;
diff --git a/next/src/components/PrimaryButton.tsx b/next/src/components/PrimaryButton.tsx
new file mode 100644
index 0000000..c7dbe3d
--- /dev/null
+++ b/next/src/components/PrimaryButton.tsx
@@ -0,0 +1,27 @@
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import React from "react";
+
+import Button from "../ui/button";
+
+type PrimaryButtonProps = {
+ className?: string;
+ children: ReactNode | string;
+ icon?: React.ReactNode;
+ onClick?: () => void | Promise;
+};
+
+export default function PrimaryButton({ children, onClick, icon, className }: PrimaryButtonProps) {
+ return (
+
+ {icon}
+ {children}
+
+ );
+}
diff --git a/next/src/components/QuestionInput.tsx b/next/src/components/QuestionInput.tsx
new file mode 100644
index 0000000..efa9cdb
--- /dev/null
+++ b/next/src/components/QuestionInput.tsx
@@ -0,0 +1,49 @@
+import clsx from "clsx";
+import React from "react";
+import { FaArrowRight } from "react-icons/fa";
+
+interface Props extends React.InputHTMLAttributes {
+ name: string;
+ attributes?: { [key: string]: string | number | string[] };
+ icon?: React.ReactNode;
+ disabled?: boolean;
+ handleFocusChange?: (focused: boolean) => void;
+ onSubmit: () => void;
+}
+
+// Test stylized input component
+const QuestionInput = (props: Props) => {
+ return (
+
+
+
props.handleFocusChange && props.handleFocusChange(true)}
+ onBlur={() => props.handleFocusChange && props.handleFocusChange(false)}
+ {...{ "aria-describedby": `${props.name}-description` }}
+ {...props.attributes}
+ />
+
+
+
+
+
+ );
+};
+
+export default QuestionInput;
diff --git a/next/src/components/Switch.tsx b/next/src/components/Switch.tsx
new file mode 100644
index 0000000..cc5e0b7
--- /dev/null
+++ b/next/src/components/Switch.tsx
@@ -0,0 +1,47 @@
+import * as SwitchPrimitive from "@radix-ui/react-switch";
+import { clsx } from "clsx";
+import React, { useEffect, useState } from "react";
+
+interface SwitchProps {
+ value: boolean;
+ disabled?: boolean;
+ onChange: (checked: boolean) => void;
+}
+
+const Switch = ({ value, disabled = false, onChange }: SwitchProps) => {
+ const [checked, setChecked] = useState(false);
+
+ // Due to SSR, we should only change the internal state after the initial render
+ useEffect(() => {
+ setChecked(value);
+ }, [value]);
+
+ const handleChange = (checked: boolean) => {
+ onChange(checked);
+ };
+
+ return (
+
+
+
+ );
+};
+
+export { Switch };
diff --git a/next/src/components/TextButton.tsx b/next/src/components/TextButton.tsx
new file mode 100644
index 0000000..51b6034
--- /dev/null
+++ b/next/src/components/TextButton.tsx
@@ -0,0 +1,26 @@
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import React from "react";
+
+import Button from "../ui/button";
+
+type TextButtonProps = {
+ children: ReactNode | string;
+ icon?: ReactNode;
+ onClick?: () => void;
+ className?: string;
+};
+export default function TextButton({ children, onClick, icon, className }: TextButtonProps) {
+ return (
+
+ {icon}
+ {children}
+
+ );
+}
diff --git a/next/src/components/Tooltip.tsx b/next/src/components/Tooltip.tsx
new file mode 100644
index 0000000..7b6583f
--- /dev/null
+++ b/next/src/components/Tooltip.tsx
@@ -0,0 +1,42 @@
+import * as TooltipPrimitive from "@radix-ui/react-tooltip";
+import React from "react";
+
+import type { toolTipProperties } from "../types";
+
+interface TooltipProps {
+ child: React.ReactNode;
+ toolTipProperties?: toolTipProperties;
+ style?: { [key: string]: string };
+ sideOffset: number;
+}
+
+const Tooltip = ({
+ child,
+ toolTipProperties = { message: "", disabled: true },
+ style = { container: "" },
+ sideOffset,
+}: TooltipProps) => {
+ const { message, disabled } = toolTipProperties;
+ return (
+
+
+
+ {child}
+ {disabled ? null : (
+
+
+ {message}
+
+
+
+ )}
+
+
+
+ );
+};
+
+export default Tooltip;
diff --git a/next/src/components/WindowButton.tsx b/next/src/components/WindowButton.tsx
new file mode 100644
index 0000000..495f3cc
--- /dev/null
+++ b/next/src/components/WindowButton.tsx
@@ -0,0 +1,30 @@
+import clsx from "clsx";
+import React from "react";
+
+import Ping from "./Ping";
+
+type WindowButtonProps = {
+ ping?: boolean; // Toggles the ping animation
+ onClick?: () => void;
+ icon: React.ReactNode;
+ text: string;
+ border?: boolean;
+};
+
+const WindowButton = ({ ping, onClick, icon, text, border }: WindowButtonProps) => {
+ return (
+
+ {ping ?
: <>>}
+ {icon}
+
{text}
+
+ );
+};
+
+export default WindowButton;
diff --git a/next/src/components/console/AgentControls.tsx b/next/src/components/console/AgentControls.tsx
new file mode 100644
index 0000000..a70cbb9
--- /dev/null
+++ b/next/src/components/console/AgentControls.tsx
@@ -0,0 +1,48 @@
+import clsx from "clsx";
+import React from "react";
+import { FaPause, FaPlay, FaStop, FaUndo } from "react-icons/fa";
+import { ImSpinner2 } from "react-icons/im";
+
+import type { AgentLifecycle } from "../../services/agent/agent-run-model";
+import Button from "../Button";
+
+type AgentControlsProps = {
+ disablePlay: boolean;
+ lifecycle: AgentLifecycle;
+ handlePlay: () => void;
+ handlePause: () => void;
+ handleStop: () => void;
+};
+const AgentControls = ({
+ lifecycle,
+ disablePlay,
+ handlePlay,
+ handlePause,
+ handleStop,
+}: AgentControlsProps) => {
+ return (
+
+
+ {lifecycle === "running" && }
+ {lifecycle === "stopped" && }
+ {!["running", "stopped"].includes(lifecycle || "") && }
+
+
+ {lifecycle === "pausing" ? : }
+
+
+
+
+
+ );
+};
+
+export default AgentControls;
diff --git a/next/src/components/console/ChatMessage.tsx b/next/src/components/console/ChatMessage.tsx
new file mode 100644
index 0000000..bf67389
--- /dev/null
+++ b/next/src/components/console/ChatMessage.tsx
@@ -0,0 +1,108 @@
+import clsx from "clsx";
+import { useTranslation } from "next-i18next";
+import React, { useState } from "react";
+import { FaCheck } from "react-icons/fa";
+import { FiClipboard } from "react-icons/fi";
+
+import MarkdownRenderer from "./MarkdownRenderer";
+import SourceCard from "./SourceCard";
+import type { Message } from "../../types/message";
+import { MESSAGE_TYPE_GOAL, MESSAGE_TYPE_SYSTEM } from "../../types/message";
+import {
+ getTaskStatus,
+ isAction,
+ TASK_STATUS_COMPLETED,
+ TASK_STATUS_FINAL,
+ TASK_STATUS_STARTED,
+} from "../../types/task";
+import Button from "../../ui/button";
+import { getMessageContainerStyle, getTaskStatusIcon } from "../utils/helpers";
+
+const ChatMessage = ({ message }: { message: Message }) => {
+ const [t] = useTranslation();
+ const [isCopied, setIsCopied] = useState(false);
+
+ const handleCopy = () => {
+ try {
+ const textToCopy = isAction(message) ? message.info || "" : message.value;
+ void navigator.clipboard.writeText(textToCopy);
+ setIsCopied(true);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ if (message.type === MESSAGE_TYPE_GOAL && !isAction(message)) {
+ return {message.value}
;
+ }
+ return (
+
+ {message.type !== MESSAGE_TYPE_SYSTEM && !isAction(message) && (
+ <>
+
{getTaskStatusIcon(message, {})}
+
{getMessagePrefix(message)}
+ >
+ )}
+
+ {isAction(message) ? (
+ <>
+
+
{getTaskStatusIcon(message, {})}
+
{getMessagePrefix(message)}
+
+ {isCopied ? : }
+
+
+
+
+ {message.info || ""}
+
+
+ >
+ ) : (
+ <>
+
{message.value}
+ {message.type === MESSAGE_TYPE_SYSTEM &&
+ (message.value.toLowerCase().includes("shut") ||
+ message.value.toLowerCase().includes("error")) &&
}
+ >
+ )}
+
+ );
+};
+
+const FAQ = () => {
+ return (
+
+
+ If you are facing issues, please head over to our{" "}
+
+ FAQ
+
+
+ );
+};
+
+// Returns the translation key of the prefix
+const getMessagePrefix = (message: Message) => {
+ if (getTaskStatus(message) === TASK_STATUS_STARTED) {
+ return "Task Added:";
+ } else if (getTaskStatus(message) === TASK_STATUS_COMPLETED) {
+ return message.value;
+ } else if (getTaskStatus(message) === TASK_STATUS_FINAL) {
+ return `Finished:`;
+ }
+ return "";
+};
+export { ChatMessage };
diff --git a/next/src/components/console/ChatWindow.tsx b/next/src/components/console/ChatWindow.tsx
new file mode 100644
index 0000000..6d31425
--- /dev/null
+++ b/next/src/components/console/ChatWindow.tsx
@@ -0,0 +1,114 @@
+import clsx from "clsx";
+import { useTranslation } from "next-i18next";
+import type { ReactNode } from "react";
+import React, { useEffect, useRef, useState } from "react";
+import { FaArrowCircleDown, FaCommentDots } from "react-icons/fa";
+import { ImSpinner2 } from "react-icons/im";
+
+import type { HeaderProps } from "./MacWindowHeader";
+import { MacWindowHeader, messageListId } from "./MacWindowHeader";
+import { useAgentStore } from "../../stores";
+import Button from "../Button";
+import Input from "../Input";
+import HideShow from "../motions/HideShow";
+
+interface ChatControls {
+ value: string;
+ onChange: (string) => void;
+ handleChat: () => Promise;
+ loading?: boolean;
+}
+
+interface ChatWindowProps extends HeaderProps {
+ children?: ReactNode;
+ setAgentRun?: (name: string, goal: string) => void;
+ visibleOnMobile?: boolean;
+ chatControls?: ChatControls;
+}
+
+const ChatWindow = ({ messages, children, title, chatControls }: ChatWindowProps) => {
+ const [t] = useTranslation();
+ const [hasUserScrolled, setHasUserScrolled] = useState(false);
+ const isThinking = useAgentStore.use.isAgentThinking();
+ const isStopped = useAgentStore.use.lifecycle() === "stopped";
+ const scrollRef = useRef(null);
+
+ const handleScroll = (event: React.UIEvent) => {
+ const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;
+
+ // Use has scrolled if we have scrolled up at all from the bottom
+ const hasUserScrolled = scrollTop < scrollHeight - clientHeight - 10;
+ setHasUserScrolled(hasUserScrolled);
+ };
+
+ const handleScrollToBottom = (behaviour: "instant" | "smooth") => {
+ if (!scrollRef || !scrollRef.current) return;
+
+ scrollRef.current.scrollTo({
+ top: scrollRef.current.scrollHeight,
+ behavior: behaviour,
+ });
+ };
+
+ useEffect(() => {
+ if (!hasUserScrolled) {
+ handleScrollToBottom("instant");
+ }
+ });
+
+ return (
+
+
+ handleScrollToBottom("smooth")}
+ className="h-6 w-6 animate-bounce md:h-7 md:w-7"
+ />
+
+
+
+ {chatControls && (
+
+ chatControls?.onChange(e.target.value)}
+ />
+
+
+
+
+ )}
+
+ );
+};
+
+export default ChatWindow;
diff --git a/next/src/components/console/ChatWindowTitle.tsx b/next/src/components/console/ChatWindowTitle.tsx
new file mode 100644
index 0000000..89f67fc
--- /dev/null
+++ b/next/src/components/console/ChatWindowTitle.tsx
@@ -0,0 +1,31 @@
+import React from "react";
+
+import type { GPTModelNames } from "../../types";
+import { GPT_35_TURBO_16K, GPT_4 } from "../../types";
+
+export const ChatWindowTitle = ({ model }: { model: GPTModelNames }) => {
+ if (model === GPT_4) {
+ return (
+ <>
+ AgentGPT-4
+ >
+ );
+ }
+
+ if (model === GPT_35_TURBO_16K) {
+ return (
+ <>
+ Agent
+
+ GPT-3.5-16K
+
+ >
+ );
+ }
+
+ return (
+ <>
+ AgentGPT-3.5
+ >
+ );
+};
diff --git a/next/src/components/console/ExampleAgentButton.tsx b/next/src/components/console/ExampleAgentButton.tsx
new file mode 100644
index 0000000..29fc1f6
--- /dev/null
+++ b/next/src/components/console/ExampleAgentButton.tsx
@@ -0,0 +1,27 @@
+import React from "react";
+
+export const ExampleAgentButton = ({
+ name,
+ children,
+ setAgentRun,
+}: {
+ name: string;
+ children: string;
+ setAgentRun?: (name: string, goal: string) => void;
+}) => {
+ const handleClick = () => {
+ if (setAgentRun) {
+ setAgentRun(name, children);
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/next/src/components/console/ExampleAgents.tsx b/next/src/components/console/ExampleAgents.tsx
new file mode 100644
index 0000000..14a5b20
--- /dev/null
+++ b/next/src/components/console/ExampleAgents.tsx
@@ -0,0 +1,38 @@
+import { useSession } from "next-auth/react";
+import React from "react";
+
+import { ExampleAgentButton } from "./ExampleAgentButton";
+import { useSID } from "../../hooks/useSID";
+import FadeIn from "../motions/FadeIn";
+
+type ExampleAgentsProps = {
+ setAgentRun?: (name: string, goal: string) => void;
+ setShowSignIn: (show: boolean) => void;
+};
+
+const ExampleAgents = ({ setAgentRun, setShowSignIn }: ExampleAgentsProps) => {
+ const { data: session } = useSession();
+ const sid = useSID(session);
+
+ return (
+ <>
+
+
+
+ Plan a detailed trip to Hawaii
+
+
+
+ Create a study plan for an intro to Calculus exam
+
+
+
+ Create a comprehensive report for how to scale a startup to 1000 customers
+
+
+
+ >
+ );
+};
+
+export default ExampleAgents;
diff --git a/next/src/components/console/MacWindowHeader.tsx b/next/src/components/console/MacWindowHeader.tsx
new file mode 100644
index 0000000..b3c4e47
--- /dev/null
+++ b/next/src/components/console/MacWindowHeader.tsx
@@ -0,0 +1,149 @@
+import clsx from "clsx";
+import * as htmlToImage from "html-to-image";
+import { useTranslation } from "next-i18next";
+import type { PropsWithChildren, ReactNode } from "react";
+import React from "react";
+import { CgExport } from "react-icons/cg";
+import { FaImage } from "react-icons/fa";
+import { FiClipboard } from "react-icons/fi";
+
+import type { Message } from "../../types/message";
+import Menu from "../Menu";
+import Expand from "../motions/expand";
+import PopIn from "../motions/popin";
+import PDFButton from "../pdf/PDFButton";
+import WindowButton from "../WindowButton";
+
+export const messageListId = "chat-window-message-list";
+
+export interface HeaderProps {
+ title?: string | ReactNode;
+ messages: Message[];
+}
+
+export const MacWindowHeader = (props: HeaderProps) => {
+ const [t] = useTranslation();
+
+ const saveElementAsImage = (elementId: string) => {
+ const element = document.getElementById(elementId);
+ if (!element) {
+ return;
+ }
+
+ htmlToImage
+ .toJpeg(element, {
+ height: element.scrollHeight,
+ style: {
+ overflowY: "visible",
+ maxHeight: "none",
+ border: "none",
+ },
+ })
+ .then((dataUrl) => {
+ const link = document.createElement("a");
+ link.href = dataUrl;
+ link.download = "agent-gpt-output.png";
+ link.click();
+ })
+ .catch(() =>
+ alert("Error saving image! Note this doesn't work if the AI generated an image")
+ );
+ };
+
+ const copyElementText = (elementId: string) => {
+ const element = document.getElementById(elementId);
+ if (!element) {
+ return;
+ }
+
+ const text = element.innerText;
+
+ if (navigator.clipboard) {
+ void navigator.clipboard.writeText(text);
+ } else {
+ // Fallback to a different method for unsupported browsers
+ const textArea = document.createElement("textarea");
+ textArea.value = text;
+ document.body.appendChild(textArea);
+ textArea.focus();
+ textArea.select();
+
+ try {
+ document.execCommand("copy");
+ console.log("Text copied to clipboard");
+ } catch (err) {
+ console.error("Unable to copy text to clipboard", err);
+ }
+
+ document.body.removeChild(textArea);
+ }
+ };
+
+ const exportOptions = [
+ saveElementAsImage(messageListId)}
+ icon={ }
+ text={t("IMAGE", { ns: "common" })}
+ />,
+ copyElementText(messageListId)}
+ icon={ }
+ text={t("COPY", { ns: "common" })}
+ />,
+ ,
+ ];
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {props.title}
+
+
} items={exportOptions} />
+
+ );
+};
+
+interface MacWindowInternalProps extends PropsWithChildren {
+ className?: string;
+}
+
+export const MacWindowInternal = (props: MacWindowInternalProps) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {props.children}
+
+
+ );
+};
diff --git a/next/src/components/console/MarkdownRenderer.tsx b/next/src/components/console/MarkdownRenderer.tsx
new file mode 100644
index 0000000..4a79290
--- /dev/null
+++ b/next/src/components/console/MarkdownRenderer.tsx
@@ -0,0 +1,145 @@
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import React, { useCallback, useState } from "react";
+import { FiClipboard } from "react-icons/fi";
+import ReactMarkdown from "react-markdown";
+import rehypeHighlight from "rehype-highlight";
+import remarkGfm from "remark-gfm";
+import "highlight.js/styles/default.css";
+
+interface MarkdownRendererProps {
+ children: string;
+ className?: string;
+}
+
+const MarkdownRenderer = ({ children, className }: MarkdownRendererProps) => {
+ return (
+ rehypeHighlight({ ignoreMissing: true })]}
+ components={{
+ pre: CustomPre,
+ code: CustomCodeBlock,
+ h1: (props) => {props.children} ,
+ h2: (props) => {props.children} ,
+ a: (props) => CustomLink({ children: props.children, href: props.href }),
+ p: (props) => {props.children}
,
+ ul: (props) => (
+
+ ),
+ ol: (props) => (
+ {props.children}
+ ),
+ li: (props) => {props.children} ,
+ }}
+ >
+ {children}
+
+ );
+};
+
+const CustomPre = ({ children }: { children: ReactNode }) => {
+ const [isCopied, setIsCopied] = useState(false);
+
+ const code = React.Children.toArray(children).find(isValidCustomCodeBlock);
+
+ const language: string =
+ code && code.props.className
+ ? extractLanguageName(code.props.className.replace("hljs ", ""))
+ : "";
+
+ const handleCopyClick = useCallback(() => {
+ if (code && React.isValidElement(code)) {
+ const codeString = extractTextFromNode(code.props.children);
+ void navigator.clipboard.writeText(codeString);
+ setIsCopied(true);
+ setTimeout(() => {
+ setIsCopied(false);
+ }, 2000);
+ }
+ }, [code]);
+
+ return (
+
+
+
{language.charAt(0).toUpperCase() + language.slice(1)}
+
+
+ {isCopied ? "Copied!" : "Copy Code"}
+
+
+
{children}
+
+ );
+};
+
+interface CustomCodeBlockProps {
+ inline?: boolean;
+ className?: string;
+ children: ReactNode;
+}
+
+const CustomCodeBlock = ({ inline, className, children }: CustomCodeBlockProps) => {
+ // Inline code blocks will be placed directly within a paragraph
+ if (inline) {
+ return {children}
;
+ }
+
+ const language = className ? className.replace("language-", "") : "plaintext";
+
+ return {children}
;
+};
+
+const CustomLink = ({ children, href }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+const isValidCustomCodeBlock = (
+ element: ReactNode
+): element is React.ReactElement =>
+ React.isValidElement(element) && element.type === CustomCodeBlock;
+
+const extractLanguageName = (languageString: string): string => {
+ // The provided language will be "language-{PROGRAMMING_LANGUAGE}"
+ const parts = languageString.split("-");
+ if (parts.length > 1) {
+ return parts[1] || "";
+ }
+ return "";
+};
+
+const extractTextFromNode = (node: React.ReactNode): string => {
+ if (typeof node === "string") {
+ return node;
+ }
+
+ if (Array.isArray(node)) {
+ return node.map(extractTextFromNode).join("");
+ }
+
+ if (React.isValidElement(node)) {
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
+ return extractTextFromNode(node.props.children);
+ }
+
+ return "";
+};
+
+export default MarkdownRenderer;
diff --git a/next/src/components/console/SourceCard.tsx b/next/src/components/console/SourceCard.tsx
new file mode 100644
index 0000000..7734ac8
--- /dev/null
+++ b/next/src/components/console/SourceCard.tsx
@@ -0,0 +1,23 @@
+import SourceLink from "./SourceLink";
+
+const SourceCard = ({ content }: { content: string }) => {
+ const regex = /(?=\[(!\[.+?\]\(.+?\)|.+?)]\((https?:\/\/[^\)]+)\))/gi;
+ const linksSet = new Set();
+ const linksMatches = [...content.matchAll(regex)];
+ linksMatches.forEach((m) => linksSet.add(m[2] as string));
+ const linksArray = Array.from(linksSet);
+
+ if (linksArray.length === 0) return null;
+
+ return (
+ <>
+
+ {linksArray.map((link, index) => {
+ return ;
+ })}
+
+ >
+ );
+};
+
+export default SourceCard;
diff --git a/next/src/components/console/SourceLink.tsx b/next/src/components/console/SourceLink.tsx
new file mode 100644
index 0000000..8b50602
--- /dev/null
+++ b/next/src/components/console/SourceLink.tsx
@@ -0,0 +1,78 @@
+import { useQuery } from "@tanstack/react-query";
+import axios from "axios";
+import type { SyntheticEvent } from "react";
+import { z } from "zod";
+
+import { env } from "../../env/client.mjs";
+import FadeIn from "../motions/FadeIn";
+
+interface LinkInfo {
+ link: string;
+ index: number;
+}
+
+const MetaDataSchema = z.object({
+ title: z.string().nullish(),
+ favicon: z.string().nullish(),
+ hostname: z.string().nullish(),
+});
+
+const SourceLink = ({ link, index }: LinkInfo) => {
+ const linkMeta = useQuery(["linkMeta", link], async () =>
+ MetaDataSchema.parse(
+ (
+ await axios.get(env.NEXT_PUBLIC_BACKEND_URL + "/api/metadata", {
+ params: {
+ url: link,
+ },
+ })
+ ).data
+ )
+ );
+
+ const addImageFallback = (event: SyntheticEvent) => {
+ event.currentTarget.src = "/errorFavicon.ico";
+ };
+
+ return (
+
+
+
+ {linkMeta.isLoading ? (
+
+ ) : linkMeta.isSuccess ? (
+ <>
+
{linkMeta.data.title}
+
+
+
{linkMeta.data.hostname}
+
+ {index + 1}
+
+
+ >
+ ) : linkMeta.isError ? (
+
+ ) : null}
+
+
+
+ );
+};
+
+export default SourceLink;
diff --git a/next/src/components/console/SummarizeButton.tsx b/next/src/components/console/SummarizeButton.tsx
new file mode 100644
index 0000000..282f6ba
--- /dev/null
+++ b/next/src/components/console/SummarizeButton.tsx
@@ -0,0 +1,40 @@
+import clsx from "clsx";
+import React from "react";
+
+import { useAgentStore } from "../../stores";
+import { useTaskStore } from "../../stores/taskStore";
+import Button from "../Button";
+
+const Summarize = () => {
+ const agent = useAgentStore.use.agent();
+ const lifecycle = useAgentStore.use.lifecycle();
+ const tasksWithResults = useTaskStore.use
+ .tasks()
+ .filter((task) => task.status == "completed" && task.result !== "");
+ const summarized = useAgentStore.use.summarized();
+ const setSummarized = useAgentStore.use.setSummarized();
+
+ if (!agent || lifecycle !== "stopped" || tasksWithResults.length < 1 || summarized) return null;
+
+ return (
+
+ Click here to summarize the conversation
+ {
+ setSummarized(true);
+ await agent?.summarize();
+ }}
+ >
+ Summarize
+
+
+ );
+};
+
+export default Summarize;
diff --git a/next/src/components/dialog/HelpDialog.tsx b/next/src/components/dialog/HelpDialog.tsx
new file mode 100644
index 0000000..1a74cac
--- /dev/null
+++ b/next/src/components/dialog/HelpDialog.tsx
@@ -0,0 +1,81 @@
+import { useTranslation } from "next-i18next";
+import React, { useEffect, useState } from "react";
+import { FaDiscord, FaGithub } from "react-icons/fa";
+import {FaXTwitter} from 'react-icons/fa6';
+
+import Dialog from "../../ui/dialog";
+
+export default function HelpDialog() {
+ const [show, setShow] = useState(false);
+
+ useEffect(() => {
+ const key = "agentgpt-modal-opened-v0.2";
+ const savedModalData = localStorage.getItem(key);
+
+ setTimeout(() => {
+ if (savedModalData == null) {
+ setShow(true);
+ }
+ }, 1500);
+
+ localStorage.setItem(key, JSON.stringify(true));
+ }, []);
+
+ const [t] = useTranslation();
+ return (
+
+ {
+ setShow(false);
+ }}
+ >
+ Get Started
+
+ >
+ }
+ >
+
+
+ AgentGPT is the next generation of Google search. Ask any question and watch as an AI
+ Agent gives you the perfect answer after aggregating relevant sources from across the
+ internet.
+
+
+
{t("FOLLOW_THE_JOURNEY", { ns: "help" })}
+
+
window.open("https://discord.gg/jdSBAnmdnY", "_blank")}
+ >
+
+
+
+ window.open(
+ "https://twitter.com/asimdotshrestha/status/1644883727707959296",
+ "_blank"
+ )
+ }
+ >
+
+
+
window.open("https://github.com/reworkd/AgentGPT", "_blank")}
+ >
+
+
+
+
+
+ );
+}
diff --git a/next/src/components/dialog/SignInDialog.tsx b/next/src/components/dialog/SignInDialog.tsx
new file mode 100644
index 0000000..972d64c
--- /dev/null
+++ b/next/src/components/dialog/SignInDialog.tsx
@@ -0,0 +1,50 @@
+import React from "react";
+
+import { useAuth } from "../../hooks/useAuth";
+import Dialog from "../../ui/dialog";
+
+export interface SignInDialogProps {
+ show: boolean;
+ setOpen: (boolean) => void;
+}
+
+export const SignInDialog = ({ show, setOpen }: SignInDialogProps) => {
+ const { signIn } = useAuth();
+
+ return (
+
+ {
+ signIn().catch(console.error);
+ }}
+ >
+ Sign in
+
+ setOpen(false)}
+ >
+ Close
+
+ >
+ }
+ >
+
+ Please{" "}
+ void signIn()}>
+ sign in
+ {" "}
+ to deploy an Agent! đ¤
+
+
+ );
+};
diff --git a/next/src/components/dialog/ToolsDialog.tsx b/next/src/components/dialog/ToolsDialog.tsx
new file mode 100644
index 0000000..edd7583
--- /dev/null
+++ b/next/src/components/dialog/ToolsDialog.tsx
@@ -0,0 +1,118 @@
+import { useSession } from "next-auth/react";
+import React from "react";
+
+import { useSID } from "../../hooks/useSID";
+import type { ActiveTool } from "../../hooks/useTools";
+import { useTools } from "../../hooks/useTools";
+import Dialog from "../../ui/dialog";
+import Button from "../Button";
+import { Switch } from "../Switch";
+
+export const ToolsDialog: React.FC<{
+ show: boolean;
+ setOpen: (boolean) => void;
+}> = ({ show, setOpen }) => {
+ const { activeTools, setToolActive, isSuccess } = useTools();
+
+ return (
+
+ {
+ setOpen(false);
+ }}
+ >
+ Close
+
+ >
+ }
+ >
+ Select what external tools your agents have access to.
+
+ {activeTools.map((tool, i) => {
+ if (tool.name === "sid") {
+ return
;
+ }
+
+ return
;
+ })}
+ {!isSuccess &&
Error loading tools.
}
+
+
+ );
+};
+
+interface ToolProps {
+ tool: ActiveTool;
+ onChange: (name: string, active: boolean) => void;
+}
+
+const GenericTool = ({ tool, onChange }: ToolProps) => {
+ return (
+
+
+
+
{tool.name}
+
{tool.description}
+
+
onChange(tool.name, !tool.active)} />
+
+ );
+};
+
+const SidTool = ({ tool, onChange }: ToolProps) => {
+ const { data: session } = useSession();
+ const sid = useSID(session);
+
+ return (
+
+ {!sid.connected && (
+
+
+
+ Connect your Data
+
+
+ )}
+
+
+
{tool.name}
+
{tool.description}
+ {sid.connected && (
+ <>
+
Manage
+
+ Disconnect
+
+ >
+ )}
+
+
onChange(tool.name, !tool.active)}
+ />
+
+ );
+};
+
+const ToolAvatar = ({ tool }: { tool: ActiveTool }) => {
+ if (tool.image_url) {
+ // eslint-disable-next-line @next/next/no-img-element
+ return ;
+ }
+
+ return
;
+};
diff --git a/next/src/components/drawer/DrawerItemButton.tsx b/next/src/components/drawer/DrawerItemButton.tsx
new file mode 100644
index 0000000..2525bc5
--- /dev/null
+++ b/next/src/components/drawer/DrawerItemButton.tsx
@@ -0,0 +1,29 @@
+import clsx from "clsx";
+import React from "react";
+
+interface DrawerItemProps {
+ text: string;
+ className?: string;
+ onClick?: () => Promise | void;
+}
+
+export const DrawerItemButton = (props: DrawerItemProps) => {
+ const { text, onClick } = props;
+
+ return (
+
+ {text}
+
+ );
+};
+
+export const DrawerItemButtonLoader = () => {
+ return
;
+};
diff --git a/next/src/components/drawer/LeftSidebar.tsx b/next/src/components/drawer/LeftSidebar.tsx
new file mode 100644
index 0000000..df622ec
--- /dev/null
+++ b/next/src/components/drawer/LeftSidebar.tsx
@@ -0,0 +1,136 @@
+import Image from "next/image";
+import { useRouter } from "next/router";
+import { useTranslation } from "next-i18next";
+import { FaBars } from "react-icons/fa";
+
+import { DrawerItemButton, DrawerItemButtonLoader } from "./DrawerItemButton";
+import type { DisplayProps } from "./Sidebar";
+import Sidebar from "./Sidebar";
+import { useAuth } from "../../hooks/useAuth";
+import { api } from "../../utils/api";
+import AuthItem from "../sidebar/AuthItem";
+import LinkIconItem from "../sidebar/LinkIconItem";
+import LinkItem from "../sidebar/LinkItem";
+import { PAGE_LINKS, SOCIAL_LINKS } from "../sidebar/links";
+
+const LeftSidebar = ({ show, setShow, onReload }: DisplayProps & { onReload?: () => void }) => {
+ const router = useRouter();
+ const { session, signIn, signOut, status } = useAuth();
+ const [t] = useTranslation("drawer");
+
+ const { isLoading, data } = api.agent.getAll.useQuery(undefined, {
+ enabled: status === "authenticated",
+ });
+ const userAgents = data ?? [];
+
+ const navigateToPage = (href: string) => {
+ if (router.pathname === href) {
+ onReload?.();
+ return;
+ }
+
+ void router.push(href);
+ };
+
+ return (
+
+
+
+
setShow(!show)}
+ >
+
+
+
+ navigateToPage("/")}
+ >
+ New Agent
+
+
+ {status === "unauthenticated" && (
+
+ )}
+ {status === "authenticated" && !isLoading && userAgents.length === 0 && (
+
+ {t("NEED_TO_SIGN_IN_AND_CREATE_AGENT_FIRST")}
+
+ )}
+ {(status === "loading" || (status === "authenticated" && isLoading)) && (
+
+ {Array(13)
+ .fill(0)
+ .map((_, index) => (
+
+ ))}
+
+ )}
+
+ {userAgents.map((agent, index) => (
+
void router.push(`/agent?id=${agent.id}`)}
+ />
+ ))}
+
+
+
+ );
+};
+
+export default LeftSidebar;
diff --git a/next/src/components/drawer/Sidebar.tsx b/next/src/components/drawer/Sidebar.tsx
new file mode 100644
index 0000000..f6ae669
--- /dev/null
+++ b/next/src/components/drawer/Sidebar.tsx
@@ -0,0 +1,94 @@
+import { Transition } from "@headlessui/react";
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import { Fragment } from "react";
+import { FaBars } from "react-icons/fa";
+
+export type DisplayProps = {
+ show: boolean;
+ setShow: (boolean: boolean) => void;
+};
+
+export type SidebarProps = DisplayProps & {
+ children: ReactNode;
+ side: "left" | "right";
+ className?: string;
+};
+
+const Sidebar = ({ show, children, side, className }: SidebarProps) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+type SidebarTransitionProps = {
+ side: "left" | "right";
+ children: ReactNode;
+ show: boolean;
+ className?: string;
+};
+
+export const SidebarTransition = ({ children, show, side, className }: SidebarTransitionProps) => {
+ return (
+
+
+
+ );
+};
+
+export const SidebarControlButton = ({
+ show,
+ setShow,
+ side,
+}: DisplayProps & { side: "left" | "right" }) => {
+ return (
+ setShow(!show)}
+ >
+
+
+ );
+};
+export default Sidebar;
diff --git a/next/src/components/drawer/TaskSidebar.tsx b/next/src/components/drawer/TaskSidebar.tsx
new file mode 100644
index 0000000..690120d
--- /dev/null
+++ b/next/src/components/drawer/TaskSidebar.tsx
@@ -0,0 +1,128 @@
+import clsx from "clsx";
+import { AnimatePresence } from "framer-motion";
+import { useTranslation } from "next-i18next";
+import React from "react";
+import { FaBars, FaTimesCircle } from "react-icons/fa";
+import { v1 } from "uuid";
+
+import Sidebar from "./Sidebar";
+import { useAgentStore } from "../../stores";
+import { useConfigStore } from "../../stores/configStore";
+import { useTaskStore } from "../../stores/taskStore";
+import type { Task as TaskType } from "../../types/task";
+import { MESSAGE_TYPE_TASK, TASK_STATUS_STARTED } from "../../types/task";
+import Button from "../Button";
+import Input from "../Input";
+import FadeIn from "../motions/FadeIn";
+import { getMessageContainerStyle, getTaskStatusIcon } from "../utils/helpers";
+
+const TaskSidebar = () => {
+ const [customTask, setCustomTask] = React.useState("");
+ const agent = useAgentStore.use.agent();
+ const tasks = useTaskStore.use.tasks();
+ const addTask = useTaskStore.use.addTask();
+ const [t] = useTranslation();
+
+ const { layout, setLayout } = useConfigStore();
+
+ const setShow = (show: boolean) => {
+ setLayout({ showRightSidebar: show });
+ };
+
+ const handleAddTask = () => {
+ addTask({
+ id: v1().toString(),
+ taskId: v1().toString(),
+ value: customTask,
+ status: TASK_STATUS_STARTED,
+ type: MESSAGE_TYPE_TASK,
+ });
+ setCustomTask("");
+ };
+
+ return (
+
+
+
+
setShow(!layout.showRightSidebar)}
+ >
+
+
+
{t("Current tasks")}
+
+
+ {tasks.length == 0 && (
+
+ This window will display agent tasks as they are created.
+
+ )}
+
+ {tasks.map((task) => (
+
+ ))}
+
+
+
+ setCustomTask(e.target.value)}
+ placeholder={"Custom task"}
+ small
+ />
+
+ Add
+
+
+
+
+ );
+};
+
+const Task = ({ task }: { task: TaskType }) => {
+ const isAgentStopped = useAgentStore.use.lifecycle() === "stopped";
+ const deleteTask = useTaskStore.use.deleteTask();
+ const isTaskDeletable = task.taskId && !isAgentStopped && task.status === "started";
+
+ const handleDeleteTask = () => {
+ if (isTaskDeletable) {
+ deleteTask(task.taskId as string);
+ }
+ };
+
+ return (
+
+
+ {getTaskStatusIcon(task, { isAgentStopped })}
+
{task.value}
+
+
+
+
+
+ );
+};
+
+export default TaskSidebar;
diff --git a/next/src/components/index/chat.tsx b/next/src/components/index/chat.tsx
new file mode 100644
index 0000000..e1eed4b
--- /dev/null
+++ b/next/src/components/index/chat.tsx
@@ -0,0 +1,77 @@
+import { useTranslation } from "next-i18next";
+import React from "react";
+
+import { useSettings } from "../../hooks/useSettings";
+import { useAgentStore } from "../../stores";
+import { useTaskStore } from "../../stores/taskStore";
+import type { Message } from "../../types/message";
+import AgentControls from "../console/AgentControls";
+import { ChatMessage } from "../console/ChatMessage";
+import ChatWindow from "../console/ChatWindow";
+import { ChatWindowTitle } from "../console/ChatWindowTitle";
+import Summarize from "../console/SummarizeButton";
+import FadeIn from "../motions/FadeIn";
+
+type ChatProps = {
+ messages: Message[];
+ disableStartAgent: boolean;
+ handlePlay: (name: string, goal: string) => void;
+ nameInput: string;
+ goalInput: string;
+ setShowSignInDialog: (boolean) => void;
+ setAgentRun: (newName: string, newGoal: string) => void;
+};
+const Chat = (props: ChatProps) => {
+ const { settings } = useSettings();
+ const { t } = useTranslation("indexPage");
+ const [chatInput, setChatInput] = React.useState("");
+ const agent = useAgentStore.use.agent();
+ const agentLifecycle = useAgentStore.use.lifecycle();
+
+ const tasks = useTaskStore.use.tasks();
+
+ return (
+ <>
+
+ }
+ chatControls={
+ agent
+ ? {
+ value: chatInput,
+ onChange: (value: string) => {
+ setChatInput(value);
+ },
+ handleChat: async () => {
+ const currentInput = chatInput;
+ setChatInput("");
+ await agent?.chat(currentInput);
+ },
+ loading: tasks.length == 0 || chatInput === "",
+ }
+ : undefined
+ }
+ >
+ {props.messages.map((message, index) => {
+ return (
+
+
+
+ );
+ })}
+
+
+
+ props.handlePlay(props.nameInput, props.goalInput)}
+ handlePause={() => agent?.pauseAgent()}
+ handleStop={() => agent?.stopAgent()}
+ />
+ >
+ );
+};
+
+export default Chat;
diff --git a/next/src/components/index/landing.tsx b/next/src/components/index/landing.tsx
new file mode 100644
index 0000000..07a685a
--- /dev/null
+++ b/next/src/components/index/landing.tsx
@@ -0,0 +1,97 @@
+import { motion } from "framer-motion";
+import { useTranslation } from "next-i18next";
+import type { KeyboardEvent, RefObject } from "react";
+import { useState } from "react";
+import { FaCog, FaPlay, FaStar } from "react-icons/fa";
+
+import { useAgentStore } from "../../stores";
+import type { Message } from "../../types/message";
+import AppTitle from "../AppTitle";
+import Button from "../Button";
+import ExampleAgents from "../console/ExampleAgents";
+import { ToolsDialog } from "../dialog/ToolsDialog";
+import Globe from "../Globe";
+import Input from "../Input";
+
+type LandingProps = {
+ messages: Message[];
+ disableStartAgent: boolean;
+ handlePlay: () => void;
+ handleKeyPress: (e: KeyboardEvent) => void;
+ goalInputRef: RefObject;
+ goalInput: string;
+ setGoalInput: (string) => void;
+ setShowSignInDialog: (boolean) => void;
+ setAgentRun: (newName: string, newGoal: string) => void;
+};
+const Landing = (props: LandingProps) => {
+ const [showToolsDialog, setShowToolsDialog] = useState(false);
+
+ const { t } = useTranslation("indexPage");
+ const agent = useAgentStore.use.agent();
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {`${t("LABEL_AGENT_GOAL")}`}
+ >
+ }
+ disabled={agent != null}
+ value={props.goalInput}
+ onChange={(e) => props.setGoalInput(e.target.value)}
+ onKeyDown={props.handleKeyPress}
+ placeholder={`${t("PLACEHOLDER_AGENT_GOAL")}`}
+ type="textarea"
+ />
+
+
+ setShowToolsDialog(true)}
+ className="h-full bg-gradient-to-t from-slate-9 to-slate-12 hover:shadow-depth-3"
+ >
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default Landing;
diff --git a/next/src/components/landing/Backing.tsx b/next/src/components/landing/Backing.tsx
new file mode 100644
index 0000000..864de4a
--- /dev/null
+++ b/next/src/components/landing/Backing.tsx
@@ -0,0 +1,46 @@
+import clsx from "clsx";
+
+import PanacheLogo from "../../../public/logos/panache-default-solid.svg";
+import YCLogo from "../../../public/logos/yc-default-solid.svg";
+
+const Backing = (props: { className?: string }) => (
+
+);
+
+export default Backing;
diff --git a/next/src/components/landing/ConnectorSection.tsx b/next/src/components/landing/ConnectorSection.tsx
new file mode 100644
index 0000000..5290357
--- /dev/null
+++ b/next/src/components/landing/ConnectorSection.tsx
@@ -0,0 +1,26 @@
+import clsx from "clsx";
+import React from "react";
+
+const ConnectorSection = () => {
+ return (
+
+
+
+
Integrate with your
+ Entire Stack
+
+
+
Custom Connectors for every part of your business
+
+
+
+ );
+};
+
+export default ConnectorSection;
diff --git a/next/src/components/landing/FooterLinks.tsx b/next/src/components/landing/FooterLinks.tsx
new file mode 100644
index 0000000..78c48a6
--- /dev/null
+++ b/next/src/components/landing/FooterLinks.tsx
@@ -0,0 +1,35 @@
+import type { FC, ReactNode } from "react";
+
+interface FooterLinkProps {
+ href: string;
+ children: ReactNode;
+}
+
+const FooterLink: FC = ({ href, children }) => (
+
+ {children}
+
+);
+
+const FooterLinks = () => {
+ return (
+
+
Careers
+
+
+
+
Privacy
+
Terms
+
+ );
+};
+
+export default FooterLinks;
diff --git a/next/src/components/landing/Hero.tsx b/next/src/components/landing/Hero.tsx
new file mode 100644
index 0000000..a69bff3
--- /dev/null
+++ b/next/src/components/landing/Hero.tsx
@@ -0,0 +1,200 @@
+import Spline from "@splinetool/react-spline";
+import clsx from "clsx";
+import { motion } from "framer-motion";
+import Image from "next/image";
+import { useRouter } from "next/router";
+import type { FC } from "react";
+import { Suspense, useEffect, useState } from "react";
+import { FaChevronLeft, FaChevronRight } from "react-icons/fa";
+
+import BlueHeroIcon from "../../../public/icons/icon-hero-blue.svg";
+import GreenHeroIcon from "../../../public/icons/icon-hero-green.svg";
+import OrangeHeroIcon from "../../../public/icons/icon-hero-orange.svg";
+import PurpleHeroIcon from "../../../public/icons/icon-hero-purple.svg";
+import BannerBadge from "../BannerBadge";
+import GlowWrapper from "../GlowWrapper";
+import HeroCard from "../HeroCard";
+import FadeIn from "../motions/FadeIn";
+import PrimaryButton from "../PrimaryButton";
+
+const Hero: FC<{ className?: string }> = ({ className }) => {
+ const router = useRouter();
+ const [sliderIndex, setSliderIndex] = useState(0);
+ const totalCards = roles.length;
+ const [showVideo, setShowVideo] = useState(false);
+
+ const handleWindowResize = () => {
+ setShowVideo(window.innerWidth <= 768);
+ };
+
+ const handleSliderButtonLeft = (decrement: number) => {
+ if (sliderIndex != 0) {
+ const newIndex = (sliderIndex - decrement + totalCards) % totalCards;
+ setSliderIndex(newIndex);
+ }
+ };
+
+ const handleSliderButtonRight = (increment: number) => {
+ if (sliderIndex != roles.length - 2) {
+ const newIndex = (sliderIndex + increment + totalCards) % totalCards;
+ setSliderIndex(newIndex);
+ }
+ };
+
+ useEffect(() => {
+ window.addEventListener("resize", handleWindowResize);
+
+ return () => {
+ window.removeEventListener("resize", handleWindowResize);
+ };
+ }, []);
+
+ return (
+
+
+
+ {showVideo ? (
+
+ ) : (
+
+
+
+ )}
+
+
+
+
+ Reworkd raises a $1.25M pre-seed
+
+
+
+
+
+ Web Extraction
+ {" "}
+
+ At Your Fingertips.
+
+
+
+
+
+ Optimize web scraping with AI that generates and repairs scraping code, adapting to
+ website changes. Scale your data extraction effortlessly.
+
+
+
+
+
handleSliderButtonLeft(1)}
+ className="group absolute left-0 z-30 flex h-6 w-8 -translate-x-5 items-center justify-center rounded-full border border-white/20 bg-black bg-gradient-to-r from-white/10 to-black opacity-75 hover:border-white/30"
+ >
+
+
+
+
+ {roles.map((role, index) => (
+
+ ))}
+
+
+
+
+
handleSliderButtonRight(1)}
+ className="group absolute right-10 z-30 flex h-6 w-8 items-center justify-center rounded-full border border-white/20 bg-black bg-gradient-to-r from-white/10 to-black opacity-75 hover:border-white/30"
+ >
+
+
+
+
+
+
+ }
+ onClick={() => {
+ window.open("https://6h6bquxo5g1.typeform.com/to/qscfsOf1", "_blank");
+ }}
+ >
+ <>
+ Join the Waitlist
+
+ >
+
+
+
+
+
+
+ );
+};
+
+const roles = [
+ {
+ title: "Manufacturing",
+ subtitle: "Collect product data",
+ icon: ,
+ },
+ {
+ title: "E-commerce",
+ subtitle: "Get competitor prices",
+ icon: ,
+ },
+ {
+ title: "Recruiting",
+ subtitle: "Scrape job postings",
+ icon: ,
+ },
+ {
+ title: "Lead Generation",
+ subtitle: "Assemble prospect list",
+ icon: ,
+ },
+ {
+ title: "Real Estate",
+ subtitle: "Get property listings",
+ icon: ,
+ },
+ {
+ title: "Media",
+ subtitle: "Get News & Article data",
+ icon: ,
+ },
+];
+
+export default Hero;
diff --git a/next/src/components/landing/OpenSource.tsx b/next/src/components/landing/OpenSource.tsx
new file mode 100644
index 0000000..df7ea0b
--- /dev/null
+++ b/next/src/components/landing/OpenSource.tsx
@@ -0,0 +1,105 @@
+import clsx from "clsx";
+import React from "react";
+import { FaGithub } from "react-icons/fa";
+
+import { MacWindowInternal } from "../console/MacWindowHeader";
+import PrimaryButton from "../PrimaryButton";
+
+interface TerminalProps {
+ className?: string;
+ title?: string;
+ children?: React.ReactNode;
+}
+
+const OpenSource = () => {
+ return (
+
+
+
+
+
+ {"" +
+ "\n" +
+ "\n" +
+ "\n" +
+ " My AgentGPT Website \n" +
+ "\n" +
+ "\n" +
+ " Welcome to AgentGPT! \n" +
+ " Explore the power of autonomous AI agents.
\n" +
+ ' \n' +
+ " \n" +
+ "\n" +
+ "\n"}
+
+
+
+
+ {"import requests\n" +
+ "\n" +
+ "# Define the API endpoint\n" +
+ 'url = "https://api.agentgpt.example.com"\n' +
+ "\n" +
+ "# Make a GET request to retrieve data from the API\n" +
+ "response = requests.get(url)\n" +
+ "\n" +
+ "# Process the response data\n" +
+ "if response.status_code == 200:\n" +
+ " data = response.json()\n" +
+ " # Perform further actions with the data\n" +
+ " print(data)\n" +
+ "else:\n" +
+ ' print("Error: Unable to fetch data from the API")\n'}
+
+
+
+
+
+
Proudly Open Source
+
+ We think the power of AI should be available to everyone and should be driven by
+ community. This is why we are proudly open source. We'd love to hear your feedback
+ at every step of the journey.
+
+
+
+
+
+ );
+};
+
+const Terminal = (props: TerminalProps) => {
+ return (
+
+
{props.title}
+
+ {props.children}
+
+
+ );
+};
+
+export default OpenSource;
diff --git a/next/src/components/landing/Section.tsx b/next/src/components/landing/Section.tsx
new file mode 100644
index 0000000..85ac1da
--- /dev/null
+++ b/next/src/components/landing/Section.tsx
@@ -0,0 +1,76 @@
+import clsx from "clsx";
+import React from "react";
+
+import Highlight from "../../ui/highlight";
+
+const Sections = () => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+interface ResourceProps {
+ title: string;
+ subtitle: string;
+ className: string;
+}
+
+const Section = ({ title, subtitle, className }: ResourceProps) => {
+ return (
+
+ );
+};
+
+export default Sections;
diff --git a/next/src/components/loader.tsx b/next/src/components/loader.tsx
new file mode 100644
index 0000000..13caf2a
--- /dev/null
+++ b/next/src/components/loader.tsx
@@ -0,0 +1,26 @@
+import { Ring } from "@uiball/loaders";
+import type { FC } from "react";
+
+interface LoaderProps {
+ className?: string;
+ size?: number;
+ speed?: number;
+ lineWeight?: number;
+ color?: string;
+}
+
+const Loader: FC = ({
+ className,
+ size = 16,
+ speed = 2,
+ lineWeight = 7,
+ color = "white",
+}) => {
+ return (
+
+
+
+ );
+};
+
+export default Loader;
diff --git a/next/src/components/motions/CycleIcons.tsx b/next/src/components/motions/CycleIcons.tsx
new file mode 100644
index 0000000..a0ec36a
--- /dev/null
+++ b/next/src/components/motions/CycleIcons.tsx
@@ -0,0 +1,39 @@
+import { motion } from "framer-motion";
+import type { PropsWithChildren, ReactNode } from "react";
+
+import GlowWrapper from "../GlowWrapper";
+
+interface CycleItemsProps extends PropsWithChildren {
+ className?: string;
+ currentIndex: number;
+ hoveredItemIndex: number;
+ icons: ReactNode[];
+}
+
+const CycleIcons = (props: CycleItemsProps) => {
+ return (
+
+
+
+ {props.icons.map((item, i) => (
+
+ {item}
+
+ ))}
+
+
+
+ );
+};
+
+export default CycleIcons;
diff --git a/next/src/components/motions/FadeIn.tsx b/next/src/components/motions/FadeIn.tsx
new file mode 100644
index 0000000..01cad8f
--- /dev/null
+++ b/next/src/components/motions/FadeIn.tsx
@@ -0,0 +1,29 @@
+import { motion } from "framer-motion";
+import type { PropsWithChildren } from "react";
+
+interface MotionProps extends PropsWithChildren {
+ className?: string;
+ delay?: number;
+ duration?: number;
+ initialY?: number;
+ initialX?: number;
+}
+
+const FadeIn = (props: MotionProps) => {
+ // Because we are directly applying props, we cannot place initialX and initialY in the motion.div
+ const { initialY = -30, initialX = 0, duration = 0.5, delay = 0, className } = props;
+
+ return (
+
+ {props.children}
+
+ );
+};
+
+FadeIn.displayName = "FadeIn";
+export default FadeIn;
diff --git a/next/src/components/motions/FadeOut.tsx b/next/src/components/motions/FadeOut.tsx
new file mode 100644
index 0000000..165e597
--- /dev/null
+++ b/next/src/components/motions/FadeOut.tsx
@@ -0,0 +1,21 @@
+import { motion } from "framer-motion";
+import type { PropsWithChildren } from "react";
+
+interface MotionProps extends PropsWithChildren {
+ className?: string;
+ delay?: number;
+}
+
+const FadeOut = (props: MotionProps) => (
+
+ {props.children}
+
+);
+
+FadeOut.displayName = "FadeOut";
+export default FadeOut;
diff --git a/next/src/components/motions/HideShow.tsx b/next/src/components/motions/HideShow.tsx
new file mode 100644
index 0000000..42d2ac5
--- /dev/null
+++ b/next/src/components/motions/HideShow.tsx
@@ -0,0 +1,26 @@
+import { motion } from "framer-motion";
+import type { PropsWithChildren } from "react";
+
+interface MotionProps extends PropsWithChildren {
+ showComponent: boolean;
+ className?: string;
+}
+
+const HideShow = (props: MotionProps) => {
+ const { showComponent, ...rest } = props;
+ return (
+
+ {props.children}
+
+ );
+};
+
+HideShow.displayName = "HideShow";
+export default HideShow;
diff --git a/next/src/components/motions/expand.tsx b/next/src/components/motions/expand.tsx
new file mode 100644
index 0000000..e40569b
--- /dev/null
+++ b/next/src/components/motions/expand.tsx
@@ -0,0 +1,26 @@
+import { motion } from "framer-motion";
+import type { PropsWithChildren } from "react";
+
+interface MotionProps extends PropsWithChildren {
+ className?: string;
+ delay?: number;
+ type?: "spring" | "tween";
+}
+
+const Expand = (props: MotionProps) => (
+
+ {props.children}
+
+);
+
+Expand.displayName = "Expand";
+export default Expand;
diff --git a/next/src/components/motions/popin.tsx b/next/src/components/motions/popin.tsx
new file mode 100644
index 0000000..23cb42f
--- /dev/null
+++ b/next/src/components/motions/popin.tsx
@@ -0,0 +1,25 @@
+import { motion } from "framer-motion";
+import type { MouseEventHandler, PropsWithChildren } from "react";
+
+interface MotionProps extends PropsWithChildren {
+ className?: string;
+ delay?: number;
+ duration?: number;
+ onClick?: MouseEventHandler;
+}
+
+const PopIn = (props: MotionProps) => (
+
+ {props.children}
+
+);
+
+PopIn.displayName = "PopIn";
+export default PopIn;
diff --git a/next/src/components/pdf/MyDocument.tsx b/next/src/components/pdf/MyDocument.tsx
new file mode 100644
index 0000000..fc1904b
--- /dev/null
+++ b/next/src/components/pdf/MyDocument.tsx
@@ -0,0 +1,89 @@
+import ReactPDF, { Document, Font, Page, StyleSheet, Text } from "@react-pdf/renderer";
+import { i18n } from "next-i18next";
+import React from "react";
+
+import View = ReactPDF.View;
+
+const getFontUrlForLanguageCode = (languageCode: string) => {
+ switch (languageCode) {
+ case "en":
+ return ""; // Do not use a custom font for english
+ case "zh":
+ return "/fonts/SimSun.ttf";
+ case "ja":
+ return "/fonts/Nasu-Regular.ttf";
+ case "ko":
+ return "/fonts/NanumMyeongjo-Regular.ttf";
+ default:
+ return "/fonts/Roboto-Regular.ttf";
+ }
+};
+
+const getFontUrl = () => getFontUrlForLanguageCode(i18n?.language || "en");
+
+Font.register({
+ family: "customFont",
+ src: getFontUrl(),
+});
+
+const styles = StyleSheet.create({
+ page: {
+ flexDirection: "column",
+ backgroundColor: "#FFFFFF",
+ padding: 40,
+ wordBreak: "break-all",
+ },
+ horizontalRule: {
+ borderBottomWidth: 0.3,
+ borderBottomColor: "#000",
+ borderBottomStyle: "solid",
+ },
+ section: {
+ fontSize: 10,
+ ...(getFontUrl() == "" ? {} : { fontFamily: "customFont" }),
+ marginVertical: 10,
+ lineHeight: 1.5,
+ wordBreak: "break-all",
+ paddingRight: 10,
+ },
+});
+
+// NOTE: This should only ever be imported dynamically to reduce load times
+const MyDocument: React.FC<{
+ textSections: string[];
+}> = ({ textSections }) => (
+
+
+ {textSections.map((text, index) => (
+ <>
+
+ {renderTextLines(text)}
+
+
+ >
+ ))}
+
+
+);
+
+const HorizontalRule: React.FC = () => ;
+
+const renderTextLines = (text: string): React.ReactNode[] => {
+ const MAX_LINE_LENGTH = 10;
+ const lines: string[] = [];
+ let start = 0;
+ while (start < text.length) {
+ const end = start + MAX_LINE_LENGTH;
+ const line: string = text.slice(start, end);
+ lines.push(line);
+ start = end;
+ }
+ return lines.map((line: string, index) => (
+
+ {line}
+
+
+ ));
+};
+
+export default MyDocument;
diff --git a/next/src/components/pdf/PDFButton.tsx b/next/src/components/pdf/PDFButton.tsx
new file mode 100644
index 0000000..0674f25
--- /dev/null
+++ b/next/src/components/pdf/PDFButton.tsx
@@ -0,0 +1,60 @@
+import { pdf } from "@react-pdf/renderer";
+import { i18n } from "next-i18next";
+import React, { memo } from "react";
+import { FaFilePdf } from "react-icons/fa";
+
+import type { Message } from "../../types/message";
+import { MESSAGE_TYPE_GOAL } from "../../types/message";
+import { MESSAGE_TYPE_TASK } from "../../types/task";
+import WindowButton from "../WindowButton";
+
+const PDFButton = ({ messages, name }: { messages: Message[]; name: string }) => {
+ const textSections = getTextSections(messages);
+
+ const downloadPDF = async () => {
+ const MyDocument = (await import("./MyDocument")).default as React.FC<{
+ textSections: string[];
+ }>;
+
+ const blob = await pdf( ).toBlob();
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement("a");
+ link.href = url;
+ link.download = "my-document.pdf";
+ link.click();
+ URL.revokeObjectURL(url);
+ };
+
+ return (
+ <>
+ {
+ downloadPDF().catch(console.error);
+ }}
+ icon={ }
+ text={name}
+ />
+ >
+ );
+};
+
+const getTextSections = (messages: Message[]): string[] => {
+ // Note "Thinking" messages have no `value` so they show up as new lines
+ return messages
+ .map((message) => {
+ if (message.type == MESSAGE_TYPE_GOAL) {
+ return `${i18n?.t("LABEL_AGENT_GOAL", { ns: "indexPage" })}: ${message.value}`;
+ }
+ if (message.type == MESSAGE_TYPE_TASK) {
+ if (message.info) {
+ return `${i18n?.t("EXECUTING", { ns: "common" })}: "${message.value}": ${message.info}`;
+ } else {
+ return `${i18n?.t("ADDING_TASK", { ns: "common" })}: ${message.value}`;
+ }
+ }
+ return message.value;
+ })
+ .filter((message) => message !== "");
+};
+
+export default memo(PDFButton);
diff --git a/next/src/components/sidebar/AuthItem.tsx b/next/src/components/sidebar/AuthItem.tsx
new file mode 100644
index 0000000..ed8bb58
--- /dev/null
+++ b/next/src/components/sidebar/AuthItem.tsx
@@ -0,0 +1,102 @@
+import clsx from "clsx";
+import { useRouter } from "next/router";
+import type { Session } from "next-auth";
+import { useTranslation } from "next-i18next";
+import type { FC } from "react";
+import React, { useState } from "react";
+import { BsThreeDots } from "react-icons/bs";
+import { FaSignInAlt } from "react-icons/fa";
+
+import Dialog from "../../ui/dialog";
+import { get_avatar } from "../../utils/user";
+
+const AuthItem: FC<{
+ session: Session | null;
+ classname?: string;
+ signIn: () => Promise;
+ signOut: () => Promise;
+}> = ({ session, classname, signOut, signIn }) => {
+ const [t] = useTranslation("drawer");
+ const [showDialog, setShowDialog] = useState(false);
+ const router = useRouter();
+ const user = session?.user;
+
+ const organization = user?.organizations?.at(0)?.name;
+
+ return (
+
+
{
+ user ? setShowDialog(true) : void signIn();
+ }}
+ >
+ {user && (
+
+
+
+ )}
+
+ {!user && (
+
+
+ Sign in
+
+ )}
+
+
Your profile
+
+ {user &&
}
+
+
}
+ actions={
+ <>
+
{
+ signOut()
+ .then(() => setShowDialog(false))
+ .catch(console.error)
+ .finally(console.log);
+ }}
+ >
+ Sign out
+
+
setShowDialog(false)}
+ >
+ Close
+
+ >
+ }
+ >
+
+
{user?.name}
+
{user?.email}
+
+
+
+
+ );
+};
+
+export default AuthItem;
diff --git a/next/src/components/sidebar/LinkIconItem.tsx b/next/src/components/sidebar/LinkIconItem.tsx
new file mode 100644
index 0000000..636005c
--- /dev/null
+++ b/next/src/components/sidebar/LinkIconItem.tsx
@@ -0,0 +1,16 @@
+import type { ReactNode } from "react";
+
+const LinkIconItem = (props: { children: ReactNode; href?: string; onClick: () => void }) => (
+ {
+ e.preventDefault();
+ props.onClick();
+ }}
+ >
+ {props.children}
+
+);
+
+export default LinkIconItem;
diff --git a/next/src/components/sidebar/LinkItem.tsx b/next/src/components/sidebar/LinkItem.tsx
new file mode 100644
index 0000000..81bd22b
--- /dev/null
+++ b/next/src/components/sidebar/LinkItem.tsx
@@ -0,0 +1,29 @@
+import clsx from "clsx";
+import type { ReactNode } from "react";
+
+const LinkItem = (props: {
+ title: string;
+ children: ReactNode;
+ forceRefresh?: boolean;
+ href?: string;
+ onClick: () => void;
+}) => (
+
+ {
+ e.preventDefault();
+ props.onClick();
+ }}
+ >
+ {props.children}
+ {props.title}
+
+
+);
+
+export default LinkItem;
diff --git a/next/src/components/sidebar/links.tsx b/next/src/components/sidebar/links.tsx
new file mode 100644
index 0000000..1de8bdf
--- /dev/null
+++ b/next/src/components/sidebar/links.tsx
@@ -0,0 +1,67 @@
+import type { IconType } from "react-icons";
+import {
+ FaDiscord,
+ FaFileCode,
+ FaGear,
+ FaGithub,
+ FaHouse,
+ FaLinkedin,
+ FaQuestion,
+ FaXTwitter,
+} from "react-icons/fa6";
+
+type LinkMetadata = {
+ name: string;
+ href: string;
+ icon: IconType;
+ className?: string;
+};
+
+export const PAGE_LINKS: LinkMetadata[] = [
+ {
+ name: "Home",
+ href: "/",
+ icon: FaHouse,
+ },
+ {
+ name: "Help",
+ href: "https://docs.reworkd.ai/",
+ icon: FaQuestion,
+ className: "group-hover:text-red-500",
+ },
+ {
+ name: "Templates",
+ href: "/templates",
+ icon: FaFileCode,
+ className: "transition-transform group-hover:scale-110",
+ },
+ {
+ name: "Settings",
+ href: "/settings",
+ icon: FaGear,
+ className: "transition-transform group-hover:rotate-90",
+ },
+];
+
+export const SOCIAL_LINKS: LinkMetadata[] = [
+ {
+ name: "Github",
+ href: "https://github.com/reworkd/AgentGPT",
+ icon: FaGithub,
+ },
+ {
+ name: "Twitter",
+ href: "https://twitter.com/ReworkdAI",
+ icon: FaXTwitter,
+ },
+ {
+ name: "Discord",
+ href: "https://discord.gg/gcmNyAAFfV",
+ icon: FaDiscord,
+ },
+ {
+ name: "LinkedIn",
+ href: "https://www.linkedin.com/company/reworkd/",
+ icon: FaLinkedin,
+ },
+];
diff --git a/next/src/components/templates/TemplateCard.tsx b/next/src/components/templates/TemplateCard.tsx
new file mode 100644
index 0000000..d36e1ef
--- /dev/null
+++ b/next/src/components/templates/TemplateCard.tsx
@@ -0,0 +1,41 @@
+import clsx from "clsx";
+import { useRouter } from "next/router";
+
+import type { TemplateModel } from "./TemplateData";
+import { useAgentInputStore } from "../../stores/agentInputStore";
+
+type TemplateCardProps = {
+ model: TemplateModel;
+};
+
+const TemplateCard = ({ model }: TemplateCardProps) => {
+ const router = useRouter();
+ const setNameInput = useAgentInputStore.use.setNameInput();
+ const setGoalInput = useAgentInputStore.use.setGoalInput();
+
+ const handleClick = () => {
+ setNameInput(model.name);
+ setGoalInput(model.promptTemplate);
+ router.push("/").catch(console.log);
+ };
+ return (
+
+
+
{model.icon}
+
{model.name}
+
+
+ {model.category}
+
+
{model.description}
+
+ );
+};
+
+export default TemplateCard;
diff --git a/next/src/components/templates/TemplateData.tsx b/next/src/components/templates/TemplateData.tsx
new file mode 100644
index 0000000..c41fdeb
--- /dev/null
+++ b/next/src/components/templates/TemplateData.tsx
@@ -0,0 +1,215 @@
+import {
+ FaAppleAlt,
+ FaBlog,
+ FaBook,
+ FaBookOpen,
+ FaBookReader,
+ FaCalendarAlt,
+ FaChartLine,
+ FaDumbbell,
+ FaFileAlt,
+ FaGamepad,
+ FaGraduationCap,
+ FaHashtag,
+ FaLaptopCode,
+ FaMoneyBillWave,
+ FaPalette,
+ FaPlaneDeparture,
+ FaRegEnvelope,
+ FaRegNewspaper,
+ FaShoppingCart,
+ FaStarAndCrescent,
+} from "react-icons/fa";
+
+export const TEMPLATE_DATA: TemplateModel[] = [
+ {
+ name: "ResearchGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Generate a thorough report on a specific subject",
+ promptTemplate:
+ "Compile a comprehensive report on Global Warming, touching on its causes, effects, and mitigation strategies. Include recent research findings and statistics.",
+ placeholder: "Global Warming",
+ },
+ {
+ name: "BrandGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Evaluate a brand's performance, market position, and future prospects",
+ promptTemplate:
+ "Provide an in-depth analysis of the Coca-Cola brand, assessing its current market status, consumer perception, competitive positioning, and future outlook. Include potential strategies for growth.",
+ placeholder: "Coca-Cola",
+ },
+ {
+ name: "TravelGPT",
+ icon: ,
+ category: "Other",
+ description: "Plan a detailed journey to a selected destination",
+ promptTemplate:
+ "Outline a detailed itinerary for a 7-day trip to Paris, including sightseeing recommendations, accommodation options, and local dining experiences.",
+ placeholder: "Paris",
+ },
+ {
+ name: "PlatformerGPT",
+ icon: ,
+ category: "Creative and Social",
+ description: "Code a platformer game featuring a popular character or theme",
+ promptTemplate:
+ "Develop a platformer game featuring the adventures of Mario in a mysterious realm.",
+ placeholder: "Mario",
+ },
+ {
+ name: "IndustryGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description:
+ "Present a comprehensive review of an industry, covering key trends, players, and future predictions",
+ promptTemplate:
+ "Conduct an in-depth examination of the ClimateTech industry, detailing its current market status, emerging trends, significant challenges, and opportunities. Make sure to include data and statistics, a list of major players, a forecast for the industry, and how current events or developments could influence it.",
+ placeholder: "ClimateTech",
+ },
+ {
+ name: "ScraperGPT",
+ icon: ,
+ category: "Other",
+ description: "Extract and summarize data from a selected website",
+ promptTemplate:
+ "Write a program to scrape the IMDb website and summarize the top 10 trending movies, including their ratings, director names, and a brief synopsis.",
+ placeholder: "IMDb",
+ },
+ {
+ name: "PostGPT",
+ icon: ,
+ category: "Creative and Social",
+ description: "Create engaging captions and hashtags for your social media posts",
+ promptTemplate:
+ "Create an engaging caption and appropriate hashtags for a social media post celebrating a fun-filled Summer Vacation at the beach.",
+ placeholder: "Summer Vacation",
+ },
+ {
+ name: "EmailGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Compose a concise and detailed email",
+ promptTemplate:
+ "Compose a clear and succinct email to update the team about the progress of Project Alpha, discussing completed milestones, forthcoming tasks, and any challenges encountered.",
+ placeholder: "Project Alpha",
+ },
+ {
+ name: "ResumeGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Design a professional resume based on your career history and skills",
+ promptTemplate:
+ "Develop a resume highlighting your skills and experiences in the Marketing field, paying particular attention to relevant projects, achievements, and any unique capabilities.",
+ placeholder: "Marketing",
+ },
+ {
+ name: "NovelGPT",
+ icon: ,
+ category: "Creative and Social",
+ description: "Begin writing a novel in a selected genre",
+ promptTemplate:
+ "Begin writing a Fantasy novel set in a magical realm teeming with enchanting creatures, ancient prophecies, and epic quests.",
+ placeholder: "Fantasy",
+ },
+ {
+ name: "DietGPT",
+ icon: ,
+ category: "Health and Fitness",
+ description: "Create a customized diet plan based on dietary preferences and goals",
+ promptTemplate:
+ "Create a Vegetarian diet plan for a week aimed at promoting weight loss and overall health. Include a shopping list, meal suggestions, and simple recipes.",
+ placeholder: "Vegetarian",
+ },
+ {
+ name: "FitnessGPT",
+ icon: ,
+ category: "Health and Fitness",
+ description: "Design a workout regimen tailored to your fitness goals",
+ promptTemplate:
+ "Develop a 4-week workout regimen for Weight Loss that includes a balanced mix of cardio, strength training, and flexibility exercises. Include rest days and provide safety precautions.",
+ placeholder: "Weight Loss",
+ },
+ {
+ name: "MarketingGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Design a comprehensive marketing strategy for your business",
+ promptTemplate:
+ "Develop a 6-month marketing plan for a Tech Startup. Include marketing objectives, target audience analysis, promotional strategies, budget allocation, timelines, and performance indicators.",
+ placeholder: "Tech Startup",
+ },
+ {
+ name: "BudgetGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Prepare a personal or family budget",
+ promptTemplate:
+ "Create a detailed budget for a Family Vacation to Europe, including expenses for flights, accommodation, meals, sightseeing, shopping, and any contingencies.",
+ placeholder: "Family Vacation",
+ },
+ {
+ name: "StudyGPT",
+ icon: ,
+ category: "Academics and Professional",
+ description: "Design a study schedule to achieve your academic objectives",
+ promptTemplate:
+ "Draft a study schedule for Final Exams, including study times, subjects to be covered each day, revision days, and breaks for rest and relaxation.",
+ placeholder: "Final Exams",
+ },
+ {
+ name: "NewsGPT",
+ icon: ,
+ category: "Other",
+ description: "Author a detailed news article on a selected topic",
+ promptTemplate:
+ "Write a detailed news article discussing recent Technology Advancements, including their implications for society and the economy.",
+ placeholder: "Technology Advancements",
+ },
+ {
+ name: "EventPlannerGPT",
+ icon: ,
+ category: "Other",
+ description: "Organize a detailed schedule for your forthcoming event",
+ promptTemplate:
+ "Plan a detailed schedule for a Music Festival, including artist line-ups, set times, venue arrangements, and contingency plans.",
+ placeholder: "Music Festival",
+ },
+ {
+ name: "BlogGPT",
+ icon: ,
+ category: "Creative and Social",
+ description: "Write a blog post on a selected topic",
+ promptTemplate:
+ "Write an engaging blog post about Healthy Living, discussing nutrition, exercise, mental health, and practical tips for maintaining a healthy lifestyle.",
+ placeholder: "Healthy Living",
+ },
+ {
+ name: "AstroGPT",
+ icon: ,
+ category: "Science and Technology",
+ description: "Discuss astronomical phenomena, discoveries, and related technology",
+ promptTemplate:
+ "Delve into the latest discoveries about Black Holes. Cover their characteristics, theoretical underpinnings, related astronomical observations, and potential technological advancements driven by the research.",
+ placeholder: "Black Holes",
+ },
+ {
+ name: "ArtReviewGPT",
+ icon: ,
+ category: "Creative and Social",
+ description: "Critique a piece of art, discussing its style, context, and influence",
+ promptTemplate:
+ "Provide a thoughtful critique of Vincent van Gogh's 'Starry Night'. Discuss its artistic style, historical context, symbolism, and influence on later art movements.",
+ placeholder: "Starry Night",
+ },
+];
+
+export interface TemplateModel {
+ name: string;
+ icon: JSX.Element;
+ category: string;
+ description: string;
+ promptTemplate: string;
+ placeholder: string;
+}
diff --git a/next/src/components/templates/TemplateSearch.tsx b/next/src/components/templates/TemplateSearch.tsx
new file mode 100644
index 0000000..7e3b29c
--- /dev/null
+++ b/next/src/components/templates/TemplateSearch.tsx
@@ -0,0 +1,49 @@
+import type { ChangeEvent, FC } from "react";
+import React from "react";
+
+interface SearchBarProps {
+ setSearchQuery: (query: string) => void;
+ setCategory: (category: string) => void;
+}
+
+const SearchBar: FC = ({ setSearchQuery, setCategory }) => {
+ const handleSearchChange = (e: ChangeEvent) => {
+ setSearchQuery(e.target.value);
+ };
+
+ const handleCategoryChange = (e: ChangeEvent) => {
+ setCategory(e.target.value);
+ };
+
+ return (
+
+
+
+
+
+
+
+ All
+ Health and Fitness
+ Creative and social
+ Academics and Professional
+ Other
+
+
+
+ );
+};
+
+export default SearchBar;
diff --git a/next/src/components/toast.tsx b/next/src/components/toast.tsx
new file mode 100644
index 0000000..b8afdb3
--- /dev/null
+++ b/next/src/components/toast.tsx
@@ -0,0 +1,78 @@
+import * as ToastPrimitive from "@radix-ui/react-toast";
+import clsx from "clsx";
+import { useTranslation } from "next-i18next";
+import type { Dispatch, SetStateAction } from "react";
+import React from "react";
+
+type Props = {
+ model: [boolean, Dispatch>];
+ onAction?: () => void;
+ title: string;
+ description?: string;
+ className?: string;
+};
+
+const Toast = (props: Props) => {
+ const [t] = useTranslation();
+ const [open, setOpen] = props.model;
+
+ return (
+
+
+
+
+
+
+ {props.title}
+
+ {props.description && (
+
+ {props.description}
+
+ )}
+
+
+
+
+ {props.onAction && (
+ {
+ e.preventDefault();
+ if (props.onAction) props.onAction();
+ setOpen(false);
+ }}
+ >
+ {t("COPY", { ns: "common" })}
+
+ )}
+
+ {t("CLOSE", { ns: "common" })}
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Toast;
diff --git a/next/src/components/utils/helpers.tsx b/next/src/components/utils/helpers.tsx
new file mode 100644
index 0000000..845392b
--- /dev/null
+++ b/next/src/components/utils/helpers.tsx
@@ -0,0 +1,74 @@
+import {
+ FaCheckCircle,
+ FaCircleNotch,
+ FaExclamationTriangle,
+ FaStar,
+ FaStopCircle,
+ FaThumbtack,
+} from "react-icons/fa";
+
+import type { Message } from "../../types/message";
+import { MESSAGE_TYPE_ERROR, MESSAGE_TYPE_GOAL } from "../../types/message";
+import {
+ getTaskStatus,
+ isTask,
+ TASK_STATUS_COMPLETED,
+ TASK_STATUS_EXECUTING,
+ TASK_STATUS_FINAL,
+ TASK_STATUS_STARTED,
+} from "../../types/task";
+
+export const getMessageContainerStyle = (message: Message) => {
+ if (!isTask(message)) {
+ switch (message.type) {
+ case "error":
+ return "border-yellow-400 hover:border-yellow-300 transition-colors";
+ default:
+ return "border-white/10 hover:border-white/40";
+ }
+ }
+
+ switch (message.status) {
+ case TASK_STATUS_STARTED:
+ return "border-white/20 hover:border-white/40";
+ case TASK_STATUS_EXECUTING:
+ return "border-white/20 hover:border-white/40";
+ case TASK_STATUS_COMPLETED:
+ case TASK_STATUS_FINAL:
+ return "border-green-500 hover:border-green-400";
+ default:
+ return "";
+ }
+};
+
+export const getTaskStatusIcon = (
+ message: Message,
+ config: { [key: string]: string | boolean | undefined }
+) => {
+ const taskStatusIconClass = "mr-1 mb-1 inline-block";
+ const { isAgentStopped } = config;
+
+ switch (message.type) {
+ case MESSAGE_TYPE_GOAL:
+ return ;
+ case MESSAGE_TYPE_ERROR:
+ return ;
+ }
+
+ if (getTaskStatus(message) === TASK_STATUS_STARTED) {
+ return ;
+ } else if (getTaskStatus(message) === TASK_STATUS_EXECUTING) {
+ return isAgentStopped ? (
+
+ ) : (
+
+ );
+ } else if (
+ getTaskStatus(message) === TASK_STATUS_COMPLETED ||
+ getTaskStatus(message) === TASK_STATUS_FINAL
+ ) {
+ return (
+
+ );
+ }
+};
diff --git a/next/src/env/client.mjs b/next/src/env/client.mjs
new file mode 100644
index 0000000..30958cb
--- /dev/null
+++ b/next/src/env/client.mjs
@@ -0,0 +1,35 @@
+// @ts-check
+import { clientEnv, clientSchema } from "./schema.mjs";
+
+const _clientEnv = clientSchema.safeParse(clientEnv);
+
+export const formatErrors = (
+ /** @type {import('zod').ZodFormattedError,string>} */
+ errors,
+) =>
+ Object.entries(errors)
+ .map(([name, value]) => {
+ if (value && "_errors" in value)
+ return `${name}: ${value._errors.join(", ")}\n`;
+ })
+ .filter(Boolean);
+
+if (!_clientEnv.success) {
+ console.error(
+ "â Invalid environment variables:\n",
+ ...formatErrors(_clientEnv.error.format()),
+ );
+ throw new Error("Invalid environment variables");
+}
+
+for (let key of Object.keys(_clientEnv.data)) {
+ if (!key.startsWith("NEXT_PUBLIC_")) {
+ console.warn(
+ `â Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'`,
+ );
+
+ throw new Error("Invalid public environment variable name");
+ }
+}
+
+export const env = _clientEnv.data;
diff --git a/next/src/env/schema.mjs b/next/src/env/schema.mjs
new file mode 100644
index 0000000..3f71e16
--- /dev/null
+++ b/next/src/env/schema.mjs
@@ -0,0 +1,91 @@
+// @ts-check
+import {z} from "zod";
+
+const requiredForProduction = () =>
+ process.env.NODE_ENV === "production"
+ ? z.string().min(1).trim()
+ : z.string().min(1).trim().optional();
+
+function stringToBoolean() {
+ return z.preprocess((str) => str === "true", z.boolean());
+}
+
+/**
+ * Specify your server-side environment variables schema here.
+ * This way you can ensure the app isn't built with invalid env vars.
+ */
+export const serverSchema = z.object({
+ DATABASE_URL: z.string().url(),
+ NODE_ENV: z.enum(["development", "test", "production"]),
+ NEXTAUTH_SECRET: requiredForProduction(),
+ NEXTAUTH_URL: z.preprocess(
+ // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL
+ // Since NextAuth.js automatically uses the VERCEL_URL if present.
+ (str) => process.env.VERCEL_URL ?? str,
+ // VERCEL_URL doesn't include `https` so it cant be validated as a URL
+ process.env.VERCEL ? z.string() : z.string().url()
+ ),
+ OPENAI_API_KEY: z.string().min(1).trim().optional(),
+
+ GOOGLE_CLIENT_ID: z.string().min(1).trim().optional(),
+ GOOGLE_CLIENT_SECRET: z.string().min(1).trim().optional(),
+ GITHUB_CLIENT_ID: z.string().min(1).trim().optional(),
+ GITHUB_CLIENT_SECRET: z.string().min(1).trim().optional(),
+ DISCORD_CLIENT_ID: z.string().min(1).trim().optional(),
+ DISCORD_CLIENT_SECRET: z.string().min(1).trim().optional(),
+});
+
+/**
+ * You can't destruct `process.env` as a regular object in the Next.js
+ * middleware, so you have to do it manually here.
+ * @type {{ [k in keyof z.input]: string | undefined }}
+ */
+export const serverEnv = {
+ DATABASE_URL: process.env.DATABASE_URL,
+ NODE_ENV: process.env.NODE_ENV,
+ NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
+ NEXTAUTH_URL: process.env.NEXTAUTH_URL,
+ OPENAI_API_KEY: process.env.OPENAI_API_KEY,
+
+ GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
+ GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
+ GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID,
+ GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET,
+ DISCORD_CLIENT_ID: process.env.DISCORD_CLIENT_ID,
+ DISCORD_CLIENT_SECRET: process.env.DISCORD_CLIENT_SECRET,
+};
+
+/**
+ * Specify your client-side environment variables schema here.
+ * This way you can ensure the app isn't built with invalid env vars.
+ * To expose them to the client, prefix them with `NEXT_PUBLIC_`.
+ */
+export const clientSchema = z.object({
+ NEXT_PUBLIC_EXPERIMENTAL_FF_ENABLED: stringToBoolean().default(false),
+ NEXT_PUBLIC_CDN: z.string().default(""),
+ NEXT_PUBLIC_VERCEL_ENV: z.enum(["production", "preview", "development", "test"]).default("development"),
+ NEXT_PUBLIC_FF_MOCK_MODE_ENABLED: stringToBoolean().default(false),
+ NEXT_PUBLIC_FF_SID_ENABLED: stringToBoolean().default(false),
+ NEXT_PUBLIC_VERCEL_URL: z.string().default("http://localhost:3000"),
+ NEXT_PUBLIC_BACKEND_URL: z.string().url().default("http://localhost:8000"),
+ NEXT_PUBLIC_MAX_LOOPS: z.coerce.number().default(25),
+ NEXT_PUBLIC_PUSHER_APP_KEY: z.string().optional(),
+});
+
+/**
+ * You can't destruct `process.env` as a regular object, so you have to do
+ * it manually here. This is because Next.js evaluates this at build time,
+ * and only used environment variables are included in the build.
+ * @type {{ [k in keyof z.input]: string | undefined }}
+ */
+export const clientEnv = {
+ NEXT_PUBLIC_CDN: process.env.NEXT_PUBLIC_CDN,
+ NEXT_PUBLIC_EXPERIMENTAL_FF_ENABLED: process.env.NEXT_PUBLIC_EXPERIMENTAL_FF_ENABLED,
+ NEXT_PUBLIC_VERCEL_ENV: process.env.NEXT_PUBLIC_VERCEL_ENV,
+ NEXT_PUBLIC_VERCEL_URL: process.env.NEXT_PUBLIC_VERCEL_URL,
+ NEXT_PUBLIC_BACKEND_URL: process.env.NEXT_PUBLIC_BACKEND_URL,
+ NEXT_PUBLIC_FF_MOCK_MODE_ENABLED: process.env.NEXT_PUBLIC_FF_MOCK_MODE_ENABLED,
+ NEXT_PUBLIC_FF_SID_ENABLED: process.env.NEXT_PUBLIC_FF_SID_ENABLED,
+ NEXT_PUBLIC_MAX_LOOPS: process.env.NEXT_PUBLIC_MAX_LOOPS,
+ NEXT_PUBLIC_PUSHER_APP_KEY: process.env.NEXT_PUBLIC_PUSHER_APP_KEY,
+};
diff --git a/next/src/env/server.mjs b/next/src/env/server.mjs
new file mode 100644
index 0000000..bc0cde6
--- /dev/null
+++ b/next/src/env/server.mjs
@@ -0,0 +1,27 @@
+// @ts-check
+/**
+ * This file is included in `/next.config.mjs` which ensures the app isn't built with invalid env vars.
+ * It has to be a `.mjs`-file to be imported there.
+ */
+import { env as clientEnv, formatErrors } from "./client.mjs";
+import { serverSchema, serverEnv } from "./schema.mjs";
+
+const _serverEnv = serverSchema.safeParse(serverEnv);
+
+if (!_serverEnv.success) {
+ console.error(
+ "â Invalid environment variables:\n",
+ ...formatErrors(_serverEnv.error.format()),
+ );
+ throw new Error("Invalid environment variables");
+}
+
+for (let key of Object.keys(_serverEnv.data)) {
+ if (key.startsWith("NEXT_PUBLIC_")) {
+ console.warn("â You are exposing a server-side env-variable:", key);
+
+ throw new Error("You are exposing a server-side env-variable");
+ }
+}
+
+export const env = { ..._serverEnv.data, ...clientEnv };
diff --git a/next/src/hooks/useAgent.ts b/next/src/hooks/useAgent.ts
new file mode 100644
index 0000000..2917725
--- /dev/null
+++ b/next/src/hooks/useAgent.ts
@@ -0,0 +1,40 @@
+import type { Agent as PrismaAgent } from "@prisma/client";
+
+import { useAuth } from "./useAuth";
+import type { CreateAgentProps, SaveAgentProps } from "../server/api/routers/agentRouter";
+import { api } from "../utils/api";
+
+
+export type AgentUtils = {
+ createAgent: (data: CreateAgentProps) => Promise;
+ saveAgent: (data: SaveAgentProps) => void;
+};
+
+export function useAgent(): AgentUtils {
+ const { status } = useAuth();
+ const utils = api.useContext();
+
+ const createMutation = api.agent.create.useMutation({
+ onSuccess: (data: PrismaAgent) => {
+ utils.agent.getAll.setData(void 0, (oldData) => [data, ...(oldData ?? [])]);
+ return data;
+ },
+ });
+ const createAgent = async (data: CreateAgentProps): Promise => {
+ if (status === "authenticated") {
+ return await createMutation.mutateAsync(data);
+ } else {
+ return undefined;
+ }
+ };
+
+ const saveMutation = api.agent.save.useMutation();
+ const saveAgent = (data: SaveAgentProps) => {
+ if (status === "authenticated") saveMutation.mutate(data);
+ };
+
+ return {
+ createAgent,
+ saveAgent,
+ };
+}
diff --git a/next/src/hooks/useAuth.ts b/next/src/hooks/useAuth.ts
new file mode 100644
index 0000000..a8dcb51
--- /dev/null
+++ b/next/src/hooks/useAuth.ts
@@ -0,0 +1,52 @@
+import { useRouter } from "next/router";
+import type { Session } from "next-auth";
+import { signIn, signOut, useSession } from "next-auth/react";
+import { useEffect } from "react";
+
+type Provider = "google" | "github" | "discord";
+
+interface Auth {
+ signIn: (provider?: Provider) => Promise;
+ signOut: () => Promise;
+ status: "authenticated" | "unauthenticated" | "loading";
+ session: Session | null;
+}
+
+interface UseAuthOptions {
+ protectedRoute?: boolean;
+ isAllowed?: (user: Session) => boolean;
+}
+
+export function useAuth(
+ { protectedRoute, isAllowed }: UseAuthOptions = { protectedRoute: false, isAllowed: () => true }
+): Auth {
+ const { data: session, status } = useSession();
+ const { push } = useRouter();
+
+ useEffect(() => {
+ if (protectedRoute && status === "unauthenticated") {
+ handleSignIn().catch(console.error);
+ }
+
+ if (protectedRoute && status === "authenticated" && isAllowed && !isAllowed(session)) {
+ void push("/404").catch(console.error);
+ }
+ }, [protectedRoute, isAllowed, status, session, push]);
+
+ const handleSignIn = async () => {
+ await signIn();
+ };
+
+ const handleSignOut = async () => {
+ await signOut({
+ callbackUrl: "/",
+ }).catch();
+ };
+
+ return {
+ signIn: handleSignIn,
+ signOut: handleSignOut,
+ status,
+ session,
+ };
+}
diff --git a/next/src/hooks/useModels.ts b/next/src/hooks/useModels.ts
new file mode 100644
index 0000000..c35cb3a
--- /dev/null
+++ b/next/src/hooks/useModels.ts
@@ -0,0 +1,31 @@
+import { useQuery } from "@tanstack/react-query";
+import { useSession } from "next-auth/react";
+import { z } from "zod";
+
+import { get } from "../services/fetch-utils";
+
+const Model = z.object({
+ name: z.string(),
+ max_tokens: z.number(),
+ has_access: z.boolean(),
+});
+
+const ModelList = z.array(Model);
+
+export type LLMModel = z.infer;
+
+export function useModels() {
+ const { data: session } = useSession();
+ const query = useQuery(
+ ["llm"],
+ async () => await get("/api/models", ModelList, session?.accessToken),
+ {
+ enabled: !!session?.accessToken,
+ }
+ );
+
+ return {
+ models: query.data ?? [],
+ getModel: (name: string) => query.data?.find((m) => m.name === name),
+ };
+}
diff --git a/next/src/hooks/useMouseMovement.ts b/next/src/hooks/useMouseMovement.ts
new file mode 100644
index 0000000..b5bc26f
--- /dev/null
+++ b/next/src/hooks/useMouseMovement.ts
@@ -0,0 +1,20 @@
+import { useMotionValue } from "framer-motion";
+import type { MouseEvent } from "react";
+
+export function useMouseMovement() {
+ const mouseX = useMotionValue(0);
+ const mouseY = useMotionValue(0);
+
+ function onMouseMove(event: MouseEvent) {
+ const { clientX, clientY } = event;
+ const { left, top } = event.currentTarget.getBoundingClientRect();
+ mouseX.set(clientX - left);
+ mouseY.set(clientY - top);
+ }
+
+ return {
+ mouseX,
+ mouseY,
+ onMouseMove,
+ };
+}
diff --git a/next/src/hooks/useSID.ts b/next/src/hooks/useSID.ts
new file mode 100644
index 0000000..b8aefe3
--- /dev/null
+++ b/next/src/hooks/useSID.ts
@@ -0,0 +1,37 @@
+import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
+import type { Session } from "next-auth";
+
+import OauthApi from "../services/workflow/oauthApi";
+
+const QUERY_KEY = ["sid"];
+
+export function useSID(session: Session | null) {
+ const api = OauthApi.fromSession(session);
+ const queryClient = useQueryClient();
+
+ const { data, refetch } = useQuery(QUERY_KEY, async () => await api.get_info_sid(), {
+ enabled: !!session,
+ retry: false,
+ });
+
+ const { mutateAsync: install } = useMutation(async () => {
+ if (!session) return;
+
+ window.location.href = await api.install("sid");
+ });
+
+ const { mutateAsync: uninstall } = useMutation(async () => {
+ if (!session) return;
+
+ await api.uninstall("sid");
+ queryClient.setQueriesData(QUERY_KEY, { connected: false });
+ });
+
+ return {
+ connected: data?.connected ?? false,
+ refetch,
+ install: async () => install(),
+ uninstall: async () => uninstall(),
+ manage: () => void window.open("https://me.sid.ai/", "_blank"),
+ };
+}
diff --git a/next/src/hooks/useSettings.ts b/next/src/hooks/useSettings.ts
new file mode 100644
index 0000000..ae712a3
--- /dev/null
+++ b/next/src/hooks/useSettings.ts
@@ -0,0 +1,50 @@
+import { useRouter } from "next/router";
+import { useTranslation } from "next-i18next";
+import { useEffect, useState } from "react";
+
+import { useModelSettingsStore } from "../stores";
+import type { ModelSettings } from "../types";
+import { getDefaultModelSettings } from "../utils/constants";
+import type { Language } from "../utils/languages";
+import { findLanguage } from "../utils/languages";
+
+
+export type SettingsModel = {
+ settings: ModelSettings;
+ updateSettings: (key: Key, value: ModelSettings[Key]) => void;
+ updateLangauge: (language: Language) => Promise;
+};
+
+export function useSettings(): SettingsModel {
+ const [_modelSettings, set_ModelSettings] = useState(getDefaultModelSettings());
+ const modelSettings = useModelSettingsStore.use.modelSettings();
+ const updateSettings = useModelSettingsStore.use.updateSettings();
+ const router = useRouter();
+ const { i18n } = useTranslation();
+
+ // The server doesn't have access to local storage so rendering Zustand directly will lead to a hydration error
+ useEffect(() => {
+ set_ModelSettings(modelSettings);
+ }, [modelSettings]);
+
+ // We must handle language setting changes uniquely as the router must be the source of truth for the language
+ useEffect(() => {
+ if (router.locale !== modelSettings.language.code) {
+ updateSettings("language", findLanguage(router.locale || "en"));
+ }
+ }, [router, modelSettings.language, updateSettings]);
+
+ const updateLangauge = async (language: Language): Promise => {
+ await i18n.changeLanguage(language.code);
+ const { pathname, asPath, query } = router;
+ await router.push({ pathname, query }, asPath, {
+ locale: language.code,
+ });
+ };
+
+ return {
+ settings: _modelSettings,
+ updateSettings: updateSettings,
+ updateLangauge: updateLangauge,
+ };
+}
diff --git a/next/src/hooks/useTools.ts b/next/src/hooks/useTools.ts
new file mode 100644
index 0000000..f205b18
--- /dev/null
+++ b/next/src/hooks/useTools.ts
@@ -0,0 +1,78 @@
+import { useQuery, useQueryClient } from "@tanstack/react-query";
+import { z } from "zod";
+
+import { get } from "../services/fetch-utils";
+import { useAgentStore } from "../stores";
+
+const Tool = z.object({
+ name: z.string(),
+ description: z.string(),
+ color: z.string(),
+ image_url: z.string().optional(),
+});
+
+const ToolsResponseSchema = z.object({
+ tools: z.array(Tool),
+});
+
+const ActiveToolSchema = Tool.extend({
+ active: z.boolean(),
+});
+
+export type ActiveTool = z.infer;
+
+const loadTools = async (key: string) => {
+ const allTools = await get("/api/agent/tools", ToolsResponseSchema);
+
+ const data = localStorage.getItem(key);
+ let activeTools: ActiveTool[] = [];
+
+ try {
+ const obj = z.array(ActiveToolSchema).parse(JSON.parse(data ?? ""));
+ activeTools = allTools.tools.map((db_tool) => {
+ const tool = obj.find((t) => t.name === db_tool.name);
+ return tool ?? { ...db_tool, active: false };
+ });
+ } catch (error) {
+ activeTools = allTools.tools.map((toolModel) => ({ ...toolModel, active: false }));
+ }
+
+ return activeTools;
+};
+
+const save = (key: string, data: object) => {
+ localStorage.setItem(key, JSON.stringify(data));
+};
+
+export function useTools() {
+ const setTools = useAgentStore.use.setTools();
+
+ const queryClient = useQueryClient();
+ const query = useQuery(["tools"], () => loadTools("tools"), {
+ onSuccess: (data) => {
+ updateActiveTools(data);
+ },
+ });
+
+ function updateActiveTools(data: ActiveTool[]) {
+ save("tools", data);
+ setTools(data.filter((tool) => tool.active));
+ }
+
+ const setToolActive = (toolName: string, active: boolean) => {
+ queryClient.setQueriesData(["tools"], (old) => {
+ const data = (old as ActiveTool[]).map((tool) =>
+ tool.name === toolName ? { ...tool, active } : tool
+ );
+
+ updateActiveTools(data);
+ return data;
+ });
+ };
+
+ return {
+ activeTools: query.data ?? [],
+ setToolActive,
+ isSuccess: query.isSuccess,
+ };
+}
diff --git a/next/src/layout/dashboard.tsx b/next/src/layout/dashboard.tsx
new file mode 100644
index 0000000..bd6ab2b
--- /dev/null
+++ b/next/src/layout/dashboard.tsx
@@ -0,0 +1,101 @@
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import { useState } from "react";
+
+import AppHead from "../components/AppHead";
+import LeftSidebar from "../components/drawer/LeftSidebar";
+import { SidebarControlButton } from "../components/drawer/Sidebar";
+import { useConfigStore } from "../stores/configStore";
+
+type SidebarSettings = {
+ mobile: boolean;
+ desktop: boolean;
+};
+
+type DashboardLayoutProps = {
+ children: ReactNode;
+ rightSidebar?: ReactNode;
+ onReload?: () => void;
+};
+
+const defaultState: SidebarSettings = {
+ mobile: false,
+ desktop: true,
+};
+
+const setMobile =
+ (settings: SidebarSettings, setSettings: (SidebarSettings) => void) => (open: boolean) =>
+ setSettings({
+ mobile: open,
+ desktop: settings.desktop,
+ });
+
+const setDesktop =
+ (settings: SidebarSettings, setSettings: (SidebarSettings) => void) => (open: boolean) =>
+ setSettings({
+ mobile: settings.mobile,
+ desktop: open,
+ });
+
+const DashboardLayout = (props: DashboardLayoutProps) => {
+ const [leftSettings, setLeftSettings] = useState(defaultState);
+ const { layout, setLayout } = useConfigStore();
+
+ return (
+ <>
+
+ {/* Left sidebar */}
+ {/* Mobile */}
+
+
+
+
+ {/* Desktop */}
+
+
+
+
+
+
+ {/* Right sidebar */}
+ {/* Mobile */}
+ {props.rightSidebar && (
+ <>
+ {props.rightSidebar}
+ setLayout({ showRightSidebar: show })}
+ />
+ >
+ )}
+
+ {props.children}
+
+ >
+ );
+};
+
+export default DashboardLayout;
diff --git a/next/src/layout/default.tsx b/next/src/layout/default.tsx
new file mode 100644
index 0000000..00c1666
--- /dev/null
+++ b/next/src/layout/default.tsx
@@ -0,0 +1,49 @@
+import clsx from "clsx";
+import Head from "next/head";
+import { type ReactNode } from "react";
+
+interface LayoutProps {
+ children: ReactNode;
+ className?: string;
+ centered?: boolean;
+}
+
+const DefaultLayout = (props: LayoutProps) => {
+ const description = "Assemble, configure, and deploy autonomous AI Agents in your browser.";
+
+ return (
+
+
+
AgentGPT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{props.children}
+
+ );
+};
+
+export default DefaultLayout;
diff --git a/next/src/layout/grid.tsx b/next/src/layout/grid.tsx
new file mode 100644
index 0000000..8a00287
--- /dev/null
+++ b/next/src/layout/grid.tsx
@@ -0,0 +1,23 @@
+import type { PropsWithChildren } from "react";
+
+import AppHead from "../components/AppHead";
+
+interface Props extends PropsWithChildren {
+ title: string;
+}
+
+export default function GridLayout(props: Props) {
+ return (
+
+ );
+}
diff --git a/next/src/lib/posts.ts b/next/src/lib/posts.ts
new file mode 100644
index 0000000..a355763
--- /dev/null
+++ b/next/src/lib/posts.ts
@@ -0,0 +1,57 @@
+import fs from "fs";
+import path from "path";
+
+import matter from "gray-matter";
+
+// Define the types for the data
+export interface SlugData {
+ id: string;
+ date: string;
+
+ [key: string]: string;
+}
+
+const postsDirectory = path.join(process.cwd(), "posts");
+
+export function getSortedPostsData(): SlugData[] {
+ const fileNames = fs.readdirSync(postsDirectory);
+ const allPostsData: SlugData[] = fileNames.map((fileName) => {
+ const id = fileName.replace(/\.mdx$/, "");
+ const fullPath = path.join(postsDirectory, fileName);
+ const fileContents = fs.readFileSync(fullPath, "utf8");
+ const matterResult = matter(fileContents);
+
+ return {
+ id,
+ date: matterResult.data.date as string,
+ ...matterResult.data,
+ };
+ });
+
+ return allPostsData.sort((a, b) => {
+ if (a.date < b.date) {
+ return 1;
+ } else {
+ return -1;
+ }
+ });
+}
+
+export interface PostData {
+ slug: string;
+ content: string;
+
+ [key: string]: string;
+}
+
+export function getPostData(slug: string): PostData {
+ const fullPath = path.join(postsDirectory, `${slug}.mdx`);
+ const fileContents = fs.readFileSync(fullPath, "utf8");
+ const matterResult = matter(fileContents);
+
+ return {
+ slug,
+ ...matterResult.data,
+ content: matterResult.content,
+ };
+}
diff --git a/next/src/pages/_app.tsx b/next/src/pages/_app.tsx
new file mode 100644
index 0000000..1fad371
--- /dev/null
+++ b/next/src/pages/_app.tsx
@@ -0,0 +1,41 @@
+/* eslint-disable import/order */
+import { type AppType } from "next/app";
+import { type Session } from "next-auth";
+import { SessionProvider } from "next-auth/react";
+
+import { api } from "../utils/api";
+
+import "../styles/globals.css";
+import { Analytics } from "@vercel/analytics/react";
+import { appWithTranslation, useTranslation } from "next-i18next";
+import { useEffect } from "react";
+
+import nextI18NextConfig from "../../next-i18next.config.js";
+
+import { GoogleAnalytics } from "nextjs-google-analytics";
+
+const MyApp: AppType<{ session: Session | null }> = ({
+ Component,
+ pageProps: { session, ...pageProps },
+}) => {
+ const { i18n } = useTranslation();
+
+ useEffect(() => {
+ i18n.on("languageChanged", () => {
+ document.documentElement.lang = i18n.language;
+ });
+ document.documentElement.lang = i18n.language;
+ }, [i18n]);
+
+ return (
+
+ );
+};
+
+export default api.withTRPC(appWithTranslation(MyApp, nextI18NextConfig));
diff --git a/next/src/pages/agent/index.tsx b/next/src/pages/agent/index.tsx
new file mode 100644
index 0000000..2db32a7
--- /dev/null
+++ b/next/src/pages/agent/index.tsx
@@ -0,0 +1,109 @@
+import type { GetStaticProps } from "next";
+import { type NextPage } from "next";
+import { useRouter } from "next/router";
+import { useTranslation } from "next-i18next";
+import { serverSideTranslations } from "next-i18next/serverSideTranslations";
+import React, { useState } from "react";
+import { FaBackspace, FaShare, FaTrash } from "react-icons/fa";
+
+import nextI18NextConfig from "../../../next-i18next.config";
+import Button from "../../components/Button";
+import { ChatMessage } from "../../components/console/ChatMessage";
+import ChatWindow from "../../components/console/ChatWindow";
+import FadeIn from "../../components/motions/FadeIn";
+import Toast from "../../components/toast";
+import { env } from "../../env/client.mjs";
+import DashboardLayout from "../../layout/dashboard";
+import type { Message } from "../../types/message";
+import { api } from "../../utils/api";
+import { languages } from "../../utils/languages";
+
+const AgentPage: NextPage = () => {
+ const [t] = useTranslation();
+ const [showCopied, setShowCopied] = useState(false);
+ const router = useRouter();
+
+ const agentId = typeof router.query.id === "string" ? router.query.id : "";
+
+ const getAgent = api.agent.findById.useQuery(agentId, {
+ enabled: router.isReady,
+ });
+
+ const deleteAgent = api.agent.deleteById.useMutation({
+ onSuccess: () => {
+ void router.push("/");
+ },
+ });
+
+ const messages = getAgent.data ? (getAgent.data.tasks as Message[]) : [];
+
+ const shareLink = () => {
+ return encodeURI(`${env.NEXT_PUBLIC_VERCEL_URL}${router.asPath}`);
+ };
+
+ return (
+
+
+
+
+ {messages.map((message, index) => {
+ return (
+
+
+
+ );
+ })}
+
+
+
+ } onClick={() => void router.push("/")}>
+ Back
+
+ }
+ loader
+ onClick={() => {
+ deleteAgent.mutate(agentId);
+ }}
+ enabledClassName={"bg-red-600 hover:bg-red-400"}
+ >
+ Delete
+
+
+ }
+ onClick={() => {
+ void window.navigator.clipboard
+ .writeText(shareLink())
+ .then(() => setShowCopied(true));
+ }}
+ enabledClassName={"bg-green-600 hover:bg-green-400"}
+ >
+ Share
+
+
+
+
+
+ );
+};
+
+export default AgentPage;
+
+export const getStaticProps: GetStaticProps = async ({ locale = "en" }) => {
+ const supportedLocales = languages.map((language) => language.code);
+ const chosenLocale = supportedLocales.includes(locale) ? locale : "en";
+
+ return {
+ props: {
+ ...(await serverSideTranslations(chosenLocale, nextI18NextConfig.ns)),
+ },
+ };
+};
diff --git a/next/src/pages/api/auth/[...nextauth].ts b/next/src/pages/api/auth/[...nextauth].ts
new file mode 100644
index 0000000..da5f426
--- /dev/null
+++ b/next/src/pages/api/auth/[...nextauth].ts
@@ -0,0 +1,11 @@
+import type { NextApiRequest, NextApiResponse } from "next";
+import NextAuth from "next-auth";
+
+import { authOptions } from "../../../server/auth";
+
+const auth = (req: NextApiRequest, res: NextApiResponse) => {
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ return NextAuth(req, res, authOptions(req, res));
+};
+
+export default auth;
diff --git a/next/src/pages/api/trpc/[trpc].ts b/next/src/pages/api/trpc/[trpc].ts
new file mode 100644
index 0000000..318d087
--- /dev/null
+++ b/next/src/pages/api/trpc/[trpc].ts
@@ -0,0 +1,17 @@
+import { createNextApiHandler } from "@trpc/server/adapters/next";
+
+import { env } from "../../../env/server.mjs";
+import { appRouter } from "../../../server/api/root";
+import { createTRPCContext } from "../../../server/api/trpc";
+
+// export API handler
+export default createNextApiHandler({
+ router: appRouter,
+ createContext: createTRPCContext,
+ onError:
+ env.NODE_ENV === "development"
+ ? ({ path, error }) => {
+ console.error(`â tRPC failed on ${path ?? ""}: ${error.message}`);
+ }
+ : undefined,
+});
diff --git a/next/src/pages/blog.tsx b/next/src/pages/blog.tsx
new file mode 100644
index 0000000..fb2d02f
--- /dev/null
+++ b/next/src/pages/blog.tsx
@@ -0,0 +1,109 @@
+import React from "react";
+import { useRouter } from "next/router";
+
+import AppHead from "../components/AppHead";
+import FooterLinks from "../components/landing/FooterLinks";
+import FadeIn from "../components/motions/FadeIn";
+import NavBar from "../components/NavBar";
+import { getSortedPostsData } from "../lib/posts";
+
+
+export default function BlogPage({ allPostsData }) {
+ const router = useRouter();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {allPostsData.map(({ id, title, date, imageUrl, category, author }) => (
+
{
+ router.push(`/blog/${id}`).catch(console.error);
+ }}
+ >
+
+
+
+
+
+
+
+ {date}
+
+
+ {category.title}
+
+
+
+
+
+ {title}
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ );
+}
+
+export async function getStaticProps() {
+ const allPostsData = getSortedPostsData();
+ return {
+ props: {
+ allPostsData,
+ },
+ };
+}
diff --git a/next/src/pages/blog/[slug].tsx b/next/src/pages/blog/[slug].tsx
new file mode 100644
index 0000000..3c9658e
--- /dev/null
+++ b/next/src/pages/blog/[slug].tsx
@@ -0,0 +1,87 @@
+import { useRouter } from "next/router";
+import React from "react";
+import ReactMarkdown from "react-markdown";
+
+import AppHead from "../../components/AppHead";
+import FooterLinks from "../../components/landing/FooterLinks";
+import FadeIn from "../../components/motions/FadeIn";
+import NavBar from "../../components/NavBar";
+import { getPostData, getSortedPostsData } from "../../lib/posts";
+
+
+
+
+export default function BlogPost({
+ postData,
+}: {
+ postData: { title: string; date: string; content: string };
+}) {
+ const router = useRouter();
+
+ if (router.isFallback) {
+ return Loading...
;
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{postData.date}
+
{postData.content}
+
+
+
+
+
+
+
+
+ );
+}
+
+export async function getStaticPaths() {
+ // Fetch the list of blog post slugs or IDs dynamically
+ const allPostsData = getSortedPostsData();
+
+ // Generate the paths based on the slugs
+ const paths = allPostsData.map(({ id }) => ({
+ params: { slug: id },
+ }));
+
+ return {
+ paths,
+ fallback: true,
+ };
+}
+
+export async function getStaticProps({ params }: { params: { slug: string } }) {
+ const postData = getPostData(params.slug);
+
+ return {
+ props: {
+ postData,
+ },
+ };
+}
diff --git a/next/src/pages/home.tsx b/next/src/pages/home.tsx
new file mode 100644
index 0000000..7e2fad7
--- /dev/null
+++ b/next/src/pages/home.tsx
@@ -0,0 +1,40 @@
+import Image from "next/image";
+import React from "react";
+
+import AppHead from "../components/AppHead";
+import Backing from "../components/landing/Backing";
+import FooterLinks from "../components/landing/FooterLinks";
+import Hero from "../components/landing/Hero";
+import FadeIn from "../components/motions/FadeIn";
+import NavBar from "../components/NavBar";
+
+const HomePage = () => {
+ return (
+
+ );
+};
+
+export default HomePage;
diff --git a/next/src/pages/index.tsx b/next/src/pages/index.tsx
new file mode 100644
index 0000000..a40188a
--- /dev/null
+++ b/next/src/pages/index.tsx
@@ -0,0 +1,193 @@
+import { type GetStaticProps, type NextPage } from "next";
+import { useTranslation } from "next-i18next";
+import { serverSideTranslations } from "next-i18next/serverSideTranslations";
+import React, { useEffect, useRef } from "react";
+
+import nextI18NextConfig from "../../next-i18next.config.js";
+import HelpDialog from "../components/dialog/HelpDialog";
+import { SignInDialog } from "../components/dialog/SignInDialog";
+import Chat from "../components/index/chat";
+import Landing from "../components/index/landing";
+import { useAgent } from "../hooks/useAgent";
+import { useAuth } from "../hooks/useAuth";
+import { useSettings } from "../hooks/useSettings";
+import DashboardLayout from "../layout/dashboard";
+import { AgentApi } from "../services/agent/agent-api";
+import { DefaultAgentRunModel } from "../services/agent/agent-run-model";
+import AutonomousAgent from "../services/agent/autonomous-agent";
+import { MessageService } from "../services/agent/message-service";
+import {
+ resetAllAgentSlices,
+ resetAllMessageSlices,
+ useAgentStore,
+ useMessageStore,
+} from "../stores";
+import { useAgentInputStore } from "../stores/agentInputStore";
+import { resetAllTaskSlices, useTaskStore } from "../stores/taskStore";
+import { toApiModelSettings } from "../utils/interfaces";
+import { languages } from "../utils/languages";
+import { isEmptyOrBlank } from "../utils/whitespace";
+
+const Home: NextPage = () => {
+ const { t } = useTranslation("indexPage");
+ const addMessage = useMessageStore.use.addMessage();
+ const messages = useMessageStore.use.messages();
+ const tasks = useTaskStore.use.tasks();
+
+ const setAgent = useAgentStore.use.setAgent();
+ const agentLifecycle = useAgentStore.use.lifecycle();
+
+ const agent = useAgentStore.use.agent();
+
+ const { session } = useAuth();
+ const nameInput = useAgentInputStore.use.nameInput();
+ const setNameInput = useAgentInputStore.use.setNameInput();
+ const goalInput = useAgentInputStore.use.goalInput();
+ const setGoalInput = useAgentInputStore.use.setGoalInput();
+ const { settings } = useSettings();
+
+ const [showSignInDialog, setShowSignInDialog] = React.useState(false);
+ const agentUtils = useAgent();
+
+ const goalInputRef = useRef(null);
+ useEffect(() => {
+ goalInputRef?.current?.focus();
+ }, []);
+
+ const setAgentRun = (newName: string, newGoal: string) => {
+ setNameInput(newName);
+ setGoalInput(newGoal);
+ handlePlay(newGoal);
+ };
+
+ const disableStartAgent =
+ (agent !== null && !["paused", "stopped"].includes(agentLifecycle)) ||
+ isEmptyOrBlank(goalInput);
+
+ const handlePlay = (goal: string) => {
+ if (agentLifecycle === "stopped") handleRestart();
+ else handleNewAgent(goal.trim());
+ };
+
+ const handleNewAgent = (goal: string) => {
+ if (session === null) {
+ storeAgentDataInLocalStorage("", goal);
+ setShowSignInDialog(true);
+ return;
+ }
+
+ if (agent && agentLifecycle == "paused") {
+ agent?.run().catch(console.error);
+ return;
+ }
+
+ const model = new DefaultAgentRunModel(goal.trim());
+ const messageService = new MessageService(addMessage);
+ const agentApi = new AgentApi({
+ model_settings: toApiModelSettings(settings, session),
+ goal: goal,
+ session: session,
+ agentUtils: agentUtils,
+ });
+ const newAgent = new AutonomousAgent(
+ model,
+ messageService,
+ settings,
+ agentApi,
+ session ?? undefined
+ );
+ setAgent(newAgent);
+ newAgent?.run().then(console.log).catch(console.error);
+ };
+
+ const storeAgentDataInLocalStorage = (name: string, goal: string) => {
+ const agentData = { name, goal };
+ localStorage.setItem("agentData", JSON.stringify(agentData));
+ };
+
+ const getAgentDataFromLocalStorage = () => {
+ const agentData = localStorage.getItem("agentData");
+ return agentData ? (JSON.parse(agentData) as { name: string; goal: string }) : null;
+ };
+
+ useEffect(() => {
+ if (session !== null) {
+ const agentData = getAgentDataFromLocalStorage();
+
+ if (agentData) {
+ setNameInput(agentData.name);
+ setGoalInput(agentData.goal);
+ localStorage.removeItem("agentData");
+ }
+ }
+ }, [session, setGoalInput, setNameInput]);
+
+ const handleRestart = () => {
+ resetAllMessageSlices();
+ resetAllTaskSlices();
+ resetAllAgentSlices();
+ };
+
+ const handleKeyPress = (e: React.KeyboardEvent) => {
+ // Only Enter is pressed, execute the function
+ if (e.key === "Enter" && !disableStartAgent && !e.shiftKey) {
+ handlePlay(goalInput);
+ }
+ };
+
+ return (
+ {
+ agent?.stopAgent();
+ handleRestart();
+ }}
+ >
+
+
+
+
+
+ {agent !== null ? (
+
+ ) : (
+ handlePlay(goalInput)}
+ handleKeyPress={handleKeyPress}
+ goalInputRef={goalInputRef}
+ goalInput={goalInput}
+ setGoalInput={setGoalInput}
+ setShowSignInDialog={setShowSignInDialog}
+ setAgentRun={setAgentRun}
+ />
+ )}
+
+
+
+ );
+};
+
+export default Home;
+
+export const getStaticProps: GetStaticProps = async ({ locale = "en" }) => {
+ const supportedLocales = languages.map((language) => language.code);
+ const chosenLocale = supportedLocales.includes(locale) ? locale : "en";
+
+ return {
+ props: {
+ ...(await serverSideTranslations(chosenLocale, nextI18NextConfig.ns)),
+ },
+ };
+};
diff --git a/next/src/pages/settings.tsx b/next/src/pages/settings.tsx
new file mode 100644
index 0000000..eee6787
--- /dev/null
+++ b/next/src/pages/settings.tsx
@@ -0,0 +1,219 @@
+import axios from "axios";
+import clsx from "clsx";
+import type { GetStaticProps } from "next";
+import { useTranslation } from "next-i18next";
+import { serverSideTranslations } from "next-i18next/serverSideTranslations";
+import React, { useState } from "react";
+import {
+ FaCheckCircle,
+ FaCoins,
+ FaExclamationCircle,
+ FaGlobe,
+ FaKey,
+ FaRobot,
+ FaSyncAlt,
+ FaThermometerFull,
+} from "react-icons/fa";
+
+import nextI18NextConfig from "../../next-i18next.config.js";
+import FadeIn from "../components/motions/FadeIn";
+import { useAuth } from "../hooks/useAuth";
+import type { LLMModel } from "../hooks/useModels";
+import { useModels } from "../hooks/useModels";
+import { useSettings } from "../hooks/useSettings";
+import DashboardLayout from "../layout/dashboard";
+import type { GPTModelNames } from "../types";
+import Button from "../ui/button";
+import Combo from "../ui/combox";
+import Input from "../ui/input";
+import type { Language } from "../utils/languages";
+import { languages } from "../utils/languages";
+
+const SettingsPage = () => {
+ const [t] = useTranslation("settings");
+ const { settings, updateSettings, updateLangauge } = useSettings();
+ const { session } = useAuth({ protectedRoute: true });
+ const { models, getModel } = useModels();
+
+ const [isApiKeyValid, setIsApiKeyValid] = useState(undefined);
+
+ const validateApiKey = async () => {
+ try {
+ await axios.get("https://api.openai.com/v1/engines", {
+ headers: {
+ Authorization: `Bearer ${settings.customApiKey}`,
+ },
+ });
+
+ setIsApiKeyValid(true);
+ } catch (error) {
+ setIsApiKeyValid(false);
+ }
+ };
+
+ const disableAdvancedSettings = !session?.user;
+ const model = getModel(settings.customModelName) || {
+ name: settings.customModelName,
+ max_tokens: 2000,
+ has_access: true,
+ };
+
+ const updateModel = (model: LLMModel) => {
+ if (settings.maxTokens > model.max_tokens) {
+ updateSettings("maxTokens", model.max_tokens);
+ }
+
+ updateSettings("customModelName", model.name as GPTModelNames);
+ };
+
+ const onDisconnect = () => {
+ return Promise.resolve();
+ };
+
+ return (
+
+
+
+
+
+ {" "}
+
Settings
+ Customize your agent experience
+
+
+
+
+
+ {!disableAdvancedSettings && (
+
+
Advanced Settings
+
+
+ label="Model"
+ value={model}
+ valueMapper={(e) => e.name}
+ onChange={updateModel}
+ items={models}
+ icon={ }
+ />
+
+ updateSettings("customTemperature", parseFloat(e.target.value))
+ }
+ attributes={{
+ min: 0,
+ max: 1,
+ step: 0.01,
+ }}
+ helpText={t("HIGHER_VALUES_MAKE_OUTPUT_MORE_RANDOM")}
+ icon={ }
+ disabled={disableAdvancedSettings}
+ />
+ updateSettings("customMaxLoops", parseFloat(e.target.value))}
+ attributes={{
+ min: 1,
+ max: 25,
+ step: 1,
+ }}
+ helpText={t("CONTROL_THE_MAXIMUM_NUM_OF_LOOPS")}
+ icon={ }
+ disabled={disableAdvancedSettings}
+ />
+ updateSettings("maxTokens", parseFloat(e.target.value))}
+ attributes={{
+ min: 200,
+ max: model.max_tokens,
+ step: 100,
+ }}
+ helpText={t("CONTROL_MAXIMUM_OF_TOKENS_DESCRIPTION")}
+ icon={ }
+ disabled={disableAdvancedSettings}
+ />
+
+
+ )}
+
+
+
+
+ );
+};
+
+export default SettingsPage;
+
+export const getStaticProps: GetStaticProps = async ({ locale = "en" }) => {
+ const supportedLocales = languages.map((language) => language.code);
+ const chosenLocale = supportedLocales.includes(locale) ? locale : "en";
+
+ return {
+ props: {
+ ...(await serverSideTranslations(chosenLocale, nextI18NextConfig.ns)),
+ },
+ };
+};
diff --git a/next/src/pages/signin.tsx b/next/src/pages/signin.tsx
new file mode 100644
index 0000000..5fe1857
--- /dev/null
+++ b/next/src/pages/signin.tsx
@@ -0,0 +1,152 @@
+import clsx from "clsx";
+import type { GetServerSidePropsContext } from "next";
+import Image from "next/image";
+import { useRouter } from "next/router";
+import { getServerSession } from "next-auth/next";
+import type { BuiltInProviderType } from "next-auth/providers";
+import type { ClientSafeProvider } from "next-auth/react";
+import { getProviders, signIn, useSession } from "next-auth/react";
+import type { LiteralUnion } from "next-auth/react/types";
+import React, { useState } from "react";
+import { FaDiscord, FaGithub, FaGoogle } from "react-icons/fa";
+
+import FadeIn from "../components/motions/FadeIn";
+import GridLayout from "../layout/grid";
+import { authOptions } from "../server/auth/auth";
+import Input from "../ui/input";
+
+const SignIn = ({ providers }: { providers: Provider }) => {
+ const { data: session } = useSession();
+ const { push } = useRouter();
+
+ if (session) push("/").catch(console.error);
+
+ const details = Object.values(providers)
+ .map((provider) => providerButtonDetails[provider.id])
+ .filter((detail): detail is ButtonDetail => detail !== undefined);
+
+ return (
+
+
+
+
+
+
+
+ Reworkd
+
+
+
+
+ {providers.credentials && }
+ {details.map((detail) => (
+
+ ))}
+
+
+
+
+ );
+};
+
+const InsecureSignin = () => {
+ const [usernameValue, setUsernameValue] = useState("");
+
+ return (
+
+ setUsernameValue(e.target.value)}
+ placeholder="Enter Username"
+ type="text"
+ name="Username Field"
+ />
+ {
+ if (!usernameValue) return;
+
+ signIn("credentials", {
+ callbackUrl: "/",
+ name: usernameValue,
+ }).catch(console.error);
+ }}
+ className={clsx(
+ "mb-4 mt-4 flex items-center rounded-md bg-slate-12 px-10 py-3 text-sm font-semibold text-white transition-colors duration-300 hover:bg-slate-10 sm:text-base",
+ !usernameValue && "cursor-not-allowed"
+ )}
+ >
+ Sign in with username (Insecure)
+
+
+ );
+};
+
+type Provider = Record, ClientSafeProvider>;
+
+interface ButtonDetail {
+ id: string;
+ icon: JSX.Element;
+ color: string;
+}
+
+const providerButtonDetails: { [key: string]: ButtonDetail } = {
+ google: {
+ id: "google",
+ icon: ,
+ color: "bg-white hover:bg-gray-200 text-black",
+ },
+ discord: {
+ id: "discord",
+ icon: ,
+ color: "bg-blue-600 hover:bg-blue-700 text-white",
+ },
+ github: {
+ id: "github",
+ icon: ,
+ color: "bg-gray-800 hover:bg-gray-900 text-white",
+ },
+};
+
+const ProviderSignInButton = ({ detail }: { detail: ButtonDetail }) => {
+ return (
+ {
+ signIn(detail.id, { callbackUrl: "/" }).catch(console.error);
+ }}
+ className={clsx(
+ detail.color,
+ "mb-4 flex w-full items-center rounded-md px-10 py-3 text-base font-semibold shadow-md transition-colors duration-300 sm:px-16 sm:py-5 sm:text-xl"
+ )}
+ >
+ {detail.icon}
+ Sign in with {detail.id}
+
+ );
+};
+
+export default SignIn;
+
+export async function getServerSideProps(context: GetServerSidePropsContext) {
+ const session = await getServerSession(context.req, context.res, authOptions);
+
+ if (session) {
+ return {
+ redirect: {
+ destination: "/",
+ },
+ };
+ }
+
+ return {
+ props: { providers: (await getProviders()) ?? {} },
+ };
+}
diff --git a/next/src/pages/templates.tsx b/next/src/pages/templates.tsx
new file mode 100644
index 0000000..3fc23db
--- /dev/null
+++ b/next/src/pages/templates.tsx
@@ -0,0 +1,59 @@
+import type { GetStaticProps } from "next";
+import { serverSideTranslations } from "next-i18next/serverSideTranslations";
+import React, { useState } from "react";
+
+import nextI18NextConfig from "../../next-i18next.config.js";
+import FadeIn from "../components/motions/FadeIn";
+import TemplateCard from "../components/templates/TemplateCard";
+import { TEMPLATE_DATA } from "../components/templates/TemplateData";
+import SearchBar from "../components/templates/TemplateSearch";
+import DashboardLayout from "../layout/dashboard";
+import { languages } from "../utils/languages";
+
+const Templates = () => {
+ const [searchQuery, setSearchQuery] = useState("");
+ const [category, setCategory] = useState("");
+
+ const filteredData = TEMPLATE_DATA.filter((model) => {
+ const matchQuery = model.name.toLowerCase().includes(searchQuery.toLowerCase());
+ const matchCategory =
+ category === "" || model.category.toLowerCase() === category.toLowerCase();
+ return matchQuery && matchCategory;
+ });
+
+ return (
+
+
+
+
+
Templates
+
+ Customizable and ready to deploy agents
+
+
+
+
+
+
+ {filteredData.map((model) => (
+
+ ))}
+
+
+
+
+ );
+};
+
+export default Templates;
+
+export const getStaticProps: GetStaticProps = async ({ locale = "en" }) => {
+ const supportedLocales = languages.map((language) => language.code);
+ const chosenLocale = supportedLocales.includes(locale) ? locale : "en";
+
+ return {
+ props: {
+ ...(await serverSideTranslations(chosenLocale, nextI18NextConfig.ns)),
+ },
+ };
+};
diff --git a/next/src/pages/welcome.tsx b/next/src/pages/welcome.tsx
new file mode 100644
index 0000000..c669759
--- /dev/null
+++ b/next/src/pages/welcome.tsx
@@ -0,0 +1,75 @@
+import { motion, useAnimation } from "framer-motion";
+import Image from "next/image";
+import { useRouter } from "next/router";
+import React, { useEffect, useState } from "react";
+
+import FadeIn from "../components/motions/FadeIn";
+import PrimaryButton from "../components/PrimaryButton";
+
+const welcome = () => {
+ const router = useRouter();
+ const controls = useAnimation();
+ const [buttonClicked, setButtonClicked] = useState(false);
+
+ useEffect(() => {
+ controls.start({
+ scale: 1,
+ y: 0,
+ transition: { type: "spring", stiffness: 80, damping: 15, mass: 1 },
+ });
+ }, [controls]);
+
+ useEffect(() => {
+ if (buttonClicked) {
+ controls.start({
+ opacity: 0,
+ transition: { duration: 0.75 },
+ });
+ }
+ }, [buttonClicked, controls]);
+
+ const handleButtonClick = () => {
+ setButtonClicked(true);
+ setInterval(() => {
+ // Wait 1 second and redirect
+ router.push("/").catch(console.error);
+ }, 1000);
+ };
+
+ return (
+
+
+
+
+
+
+
+ Welcome to Reworkd
+
+
+
+
+ Optimize web scraping with AI Agents that auto-generates, repairs scripts, and ensures uninterrupted data retrieval. Scale your data extraction effortlessly.
+
+
+
+
+ Get Started
+
+
+
+
+ );
+};
+
+export default welcome;
\ No newline at end of file
diff --git a/next/src/server/api/root.ts b/next/src/server/api/root.ts
new file mode 100644
index 0000000..d195a33
--- /dev/null
+++ b/next/src/server/api/root.ts
@@ -0,0 +1,9 @@
+import { agentRouter } from "./routers/agentRouter";
+import { createTRPCRouter } from "./trpc";
+
+export const appRouter = createTRPCRouter({
+ agent: agentRouter,
+});
+
+// export type definition of API
+export type AppRouter = typeof appRouter;
diff --git a/next/src/server/api/routers/agentRouter.ts b/next/src/server/api/routers/agentRouter.ts
new file mode 100644
index 0000000..05ab7ca
--- /dev/null
+++ b/next/src/server/api/routers/agentRouter.ts
@@ -0,0 +1,124 @@
+import OpenAI from "openai";
+import { z } from "zod";
+
+import { env } from "../../../env/server.mjs";
+import { messageSchema } from "../../../types/message";
+import { MESSAGE_TYPE_TASK } from "../../../types/task";
+import { prisma } from "../../db";
+import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
+
+const createAgentParser = z.object({
+ goal: z.string(),
+});
+
+export type CreateAgentProps = z.infer;
+
+const saveAgentParser = z.object({
+ id: z.string(),
+ tasks: z.array(messageSchema),
+});
+export type SaveAgentProps = z.infer;
+
+async function generateAgentName(goal: string) {
+ if (!env.OPENAI_API_KEY) return undefined;
+
+ try {
+ const openAI = new OpenAI({
+ apiKey: env.OPENAI_API_KEY as string,
+ });
+
+ const chatCompletion = await openAI.chat.completions.create({
+ messages: [
+ {
+ role: "user",
+ content: goal,
+ },
+ {
+ role: "system",
+ content: `Summarize this into one or two words followed by "GPT" and a single emoji.
+ Examples:
+ - 'I want to buy a house' becomes HouseGPT đ
+ - 'Analyze top stock prices and generate a report' becomes AnalyzeStockGPT đ
+ `,
+ },
+ ],
+ model: "gpt-3.5-turbo",
+ });
+
+ // @ts-ignore
+ return chatCompletion.choices[0].message.content as string;
+ } catch (e) {
+ console.error(e);
+ return undefined;
+ }
+}
+
+export const agentRouter = createTRPCRouter({
+ create: protectedProcedure.input(createAgentParser).mutation(async ({ input, ctx }) => {
+ const name = (await generateAgentName(input.goal)) || input.goal;
+
+ return ctx.prisma.agent.create({
+ data: {
+ name: name.trim(),
+ goal: input.goal,
+ userId: ctx.session?.user?.id,
+ },
+ });
+ }),
+ save: protectedProcedure.input(saveAgentParser).mutation(async ({ input, ctx }) => {
+ const agent = await prisma.agent.findFirst({
+ where: {
+ id: input.id,
+ userId: ctx.session?.user?.id,
+ },
+ });
+
+ if (!agent) throw new Error("Agent not found");
+
+ const all = input.tasks.map((e, i) => {
+ return prisma.agentTask.create({
+ data: {
+ agentId: agent.id,
+ type: e.type,
+ ...(e.type === MESSAGE_TYPE_TASK && { status: e.status }),
+ info: e.info,
+ value: e.value,
+ sort: 0, // TODO: Remove sort
+ },
+ });
+ });
+
+ await Promise.all(all);
+ return agent;
+ }),
+ getAll: protectedProcedure.query(async ({ ctx }) => {
+ return prisma.agent.findMany({
+ where: {
+ userId: ctx.session?.user?.id,
+ deleteDate: null,
+ },
+ orderBy: { createDate: "desc" },
+ take: 20,
+ });
+ }),
+ findById: publicProcedure.input(z.string()).query(async ({ input, ctx }) => {
+ return prisma.agent.findFirstOrThrow({
+ where: { id: input, deleteDate: null },
+ include: {
+ tasks: {
+ orderBy: {
+ createDate: "asc",
+ },
+ },
+ },
+ });
+ }),
+ deleteById: protectedProcedure.input(z.string()).mutation(async ({ input, ctx }) => {
+ await prisma.agent.updateMany({
+ where: { id: input, userId: ctx.session?.user?.id },
+ data: {
+ deleteDate: new Date(),
+ },
+ });
+ }),
+});
diff --git a/next/src/server/api/trpc.ts b/next/src/server/api/trpc.ts
new file mode 100644
index 0000000..c1b703e
--- /dev/null
+++ b/next/src/server/api/trpc.ts
@@ -0,0 +1,124 @@
+/**
+ * YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS:
+ * 1. You want to modify request context (see Part 1)
+ * 2. You want to create a new middleware or type of procedure (see Part 3)
+ *
+ * tl;dr - this is where all the tRPC server stuff is created and plugged in.
+ * The pieces you will need to use are documented accordingly near the end
+ */
+
+/**
+ * 1. CONTEXT
+ *
+ * This section defines the "contexts" that are available in the backend API
+ *
+ * These allow you to access things like the database, the session, etc, when
+ * processing a request
+ *
+ */
+import { initTRPC, TRPCError } from "@trpc/server";
+import { type CreateNextContextOptions } from "@trpc/server/adapters/next";
+import { type Session } from "next-auth";
+import superjson from "superjson";
+
+import { getServerAuthSession } from "../auth";
+import { prisma } from "../db";
+
+/**
+ * 2. INITIALIZATION
+ *
+ * This is where the trpc api is initialized, connecting the context and
+ * transformer
+ */
+
+type CreateContextOptions = {
+ session: Session | null;
+};
+
+/**
+ * This helper generates the "internals" for a tRPC context. If you need to use
+ * it, you can export it from here
+ *
+ * Examples of things you may need it for:
+ * - testing, so we dont have to mock Next.js' req/res
+ * - trpc's `createSSGHelpers` where we don't have req/res
+ * @see https://create.t3.gg/en/usage/trpc#-servertrpccontextts
+ */
+const createInnerTRPCContext = (opts: CreateContextOptions) => {
+ return {
+ session: opts.session,
+ prisma,
+ };
+};
+
+/**
+ * This is the actual context you'll use in your router. It will be used to
+ * process every request that goes through your tRPC endpoint
+ * @link https://trpc.io/docs/context
+ */
+export const createTRPCContext = async (opts: CreateNextContextOptions) => {
+ const { req, res } = opts;
+
+ // Get the session from the server using the unstable_getServerSession wrapper function
+ const session = await getServerAuthSession({ req, res });
+
+ return createInnerTRPCContext({
+ session,
+ });
+};
+
+const t = initTRPC.context().create({
+ transformer: superjson,
+ errorFormatter({ shape }) {
+ return shape;
+ },
+});
+
+/**
+ * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT)
+ *
+ * These are the pieces you use to build your tRPC API. You should import these
+ * a lot in the /src/server/api/routers folder
+ */
+
+/**
+ * This is how you create new routers and subrouters in your tRPC API
+ * @see https://trpc.io/docs/router
+ */
+export const createTRPCRouter = t.router;
+
+/**
+ * Public (unauthed) procedure
+ *
+ * This is the base piece you use to build new queries and mutations on your
+ * tRPC API. It does not guarantee that a user querying is authorized, but you
+ * can still access user session data if they are logged in
+ */
+export const publicProcedure = t.procedure;
+
+/**
+ * Reusable middleware that enforces users are logged in before running the
+ * procedure
+ */
+const enforceUserIsAuthed = t.middleware(({ ctx, next }) => {
+ if (!ctx.session || !ctx.session.user) {
+ throw new TRPCError({ code: "UNAUTHORIZED" });
+ }
+ return next({
+ ctx: {
+ // infers the `session` as non-nullable
+ session: { ...ctx.session, user: ctx.session.user },
+ },
+ });
+});
+
+/**
+ * Protected (authed) procedure
+ *
+ * If you want a query or mutation to ONLY be accessible to logged in users, use
+ * this. It verifies the session is valid and guarantees ctx.session.user is not
+ * null
+ *
+ * @see https://trpc.io/docs/procedures
+ */
+export const protectedProcedure = t.procedure.use(enforceUserIsAuthed);
diff --git a/next/src/server/auth/auth.ts b/next/src/server/auth/auth.ts
new file mode 100644
index 0000000..ccc3f12
--- /dev/null
+++ b/next/src/server/auth/auth.ts
@@ -0,0 +1,30 @@
+import type { NextAuthOptions } from "next-auth";
+import DiscordProvider from "next-auth/providers/discord";
+import GithubProvider from "next-auth/providers/github";
+import GoogleProvider from "next-auth/providers/google";
+
+import { serverEnv } from "../../env/schema.mjs";
+
+
+export const authOptions: NextAuthOptions = {
+ providers: [
+ GoogleProvider({
+ clientId: serverEnv.GOOGLE_CLIENT_ID ?? "",
+ clientSecret: serverEnv.GOOGLE_CLIENT_SECRET ?? "",
+ allowDangerousEmailAccountLinking: true,
+ }),
+ GithubProvider({
+ clientId: serverEnv.GITHUB_CLIENT_ID ?? "",
+ clientSecret: serverEnv.GITHUB_CLIENT_SECRET ?? "",
+ allowDangerousEmailAccountLinking: true,
+ }),
+ DiscordProvider({
+ clientId: serverEnv.DISCORD_CLIENT_ID ?? "",
+ clientSecret: serverEnv.DISCORD_CLIENT_SECRET ?? "",
+ allowDangerousEmailAccountLinking: true,
+ }),
+ ],
+ pages: {
+ signIn: "/signin",
+ }
+};
diff --git a/next/src/server/auth/index.ts b/next/src/server/auth/index.ts
new file mode 100644
index 0000000..4bfedd1
--- /dev/null
+++ b/next/src/server/auth/index.ts
@@ -0,0 +1,82 @@
+import type { IncomingMessage, ServerResponse } from "http";
+
+import { PrismaAdapter } from "@next-auth/prisma-adapter";
+import merge from "lodash/merge";
+import type { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next";
+import type { AuthOptions, Awaitable } from "next-auth";
+import { getServerSession } from "next-auth";
+import type { Adapter, AdapterUser } from "next-auth/adapters";
+
+import { authOptions as prodOptions } from "./auth";
+import { options as devOptions } from "./local-auth";
+import { env } from "../../env/server.mjs";
+import { prisma } from "../db";
+
+function overridePrisma(fn: (user: T) => Awaitable) {
+ return async (user: T) => {
+ const newUser = await fn(user);
+
+ try {
+ // Add custom functionality here
+ } catch (e) {
+ console.error(e);
+ }
+
+ return newUser;
+ };
+}
+
+const prismaAdapter = PrismaAdapter(prisma);
+prismaAdapter.createUser = overridePrisma>(prismaAdapter.createUser);
+
+const commonOptions: Partial & { adapter: Adapter } = {
+ adapter: prismaAdapter,
+ callbacks: {
+ async session({ session, user }) {
+ const [token, orgs] = await Promise.all([
+ prisma.session.findFirstOrThrow({
+ where: { userId: user.id },
+ orderBy: { expires: "desc" },
+ }),
+ prisma.organizationUser.findMany({
+ where: { user_id: user.id },
+ include: { organization: true },
+ }),
+ ]);
+
+ session.accessToken = token.sessionToken;
+ session.user.id = user.id;
+ session.user.superAdmin = user.superAdmin;
+ session.user.organizations = orgs.map((row) => ({
+ id: row.organization.id,
+ name: row.organization.name,
+ role: row.role,
+ }));
+
+ return session;
+ },
+ },
+};
+export const authOptions = (
+ req: NextApiRequest | IncomingMessage,
+ res: NextApiResponse | ServerResponse
+) => {
+ const options =
+ env.NEXT_PUBLIC_VERCEL_ENV === "development"
+ ? devOptions(commonOptions.adapter, req, res)
+ : prodOptions;
+
+ return merge(commonOptions, options) as AuthOptions;
+};
+
+/**
+ * Wrapper for getServerSession so that you don't need
+ * to import the authOptions in every file.
+ * @see https://next-auth.js.org/configuration/nextjs
+ **/
+export const getServerAuthSession = (ctx: {
+ req: GetServerSidePropsContext["req"];
+ res: GetServerSidePropsContext["res"];
+}) => {
+ return getServerSession(ctx.req, ctx.res, authOptions(ctx.req, ctx.res));
+};
diff --git a/next/src/server/auth/local-auth.ts b/next/src/server/auth/local-auth.ts
new file mode 100644
index 0000000..6af77c4
--- /dev/null
+++ b/next/src/server/auth/local-auth.ts
@@ -0,0 +1,109 @@
+import type { IncomingMessage, ServerResponse } from "http";
+
+import { getCookie, setCookie } from "cookies-next";
+import type { NextApiRequest, NextApiResponse } from "next";
+import type { AuthOptions } from "next-auth";
+import type { Adapter, AdapterUser } from "next-auth/adapters";
+import Credentials from "next-auth/providers/credentials";
+import { v4 } from "uuid";
+import { z } from "zod";
+
+const monthFromNow = () => {
+ const now = new Date(Date.now());
+ return new Date(now.setMonth(now.getMonth() + 1));
+};
+
+function cookieToString(cookie: string | undefined | null | boolean) {
+ switch (typeof cookie) {
+ case "boolean":
+ return cookie.toString();
+ case "string":
+ return cookie;
+ default:
+ return "";
+ }
+}
+
+export const options = (
+ adapter: Adapter,
+ req: NextApiRequest | IncomingMessage,
+ res: NextApiResponse | ServerResponse
+): AuthOptions => {
+ return {
+ adapter,
+ providers: [
+ Credentials({
+ name: "Username, Development Only (Insecure)",
+ credentials: {
+ name: { label: "Username", type: "text" },
+ superAdmin: { label: "SuperAdmin", type: "text" },
+ },
+ async authorize(credentials, req) {
+ if (!credentials) return null;
+
+ const creds = z
+ .object({
+ name: z.string().min(1),
+ superAdmin: z.preprocess((str) => str === "true", z.boolean()).default(false),
+ })
+ .parse(credentials);
+
+ const user = await adapter.getUserByEmail(creds.name);
+ return user
+ ? adapter.updateUser({
+ id: user.id,
+ name: creds.name,
+ superAdmin: creds.superAdmin,
+ })
+ : adapter.createUser({
+ name: creds.name,
+ email: creds.name,
+ image: undefined,
+ emailVerified: null,
+ superAdmin: false,
+ } as AdapterUser);
+ },
+ }),
+ ],
+ pages: {
+ signIn: "/signin",
+ },
+ callbacks: {
+ // Fallback to base url if provided url is not a subdirectory
+ redirect: (params: { url: string; baseUrl: string }) =>
+ params.url.startsWith(params.baseUrl) ? params.url : params.baseUrl,
+
+ async signIn({ user }) {
+ if (user) {
+ const session = await adapter.createSession({
+ sessionToken: v4(),
+ userId: user.id,
+ expires: monthFromNow(),
+ });
+
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
+ setCookie("next-auth.session-token", session.sessionToken, {
+ expires: session.expires,
+ req: req,
+ res: res,
+ });
+ }
+
+ return true;
+ },
+ },
+ jwt: {
+ encode: () => {
+ const cookie = getCookie("next-auth.session-token", {
+ req: req,
+ res: res,
+ });
+
+ return cookieToString(cookie);
+ },
+ decode: () => {
+ return null;
+ },
+ },
+ };
+};
diff --git a/next/src/server/db.ts b/next/src/server/db.ts
new file mode 100644
index 0000000..038504d
--- /dev/null
+++ b/next/src/server/db.ts
@@ -0,0 +1,14 @@
+import { PrismaClient } from "@prisma/client";
+
+import { env } from "../env/server.mjs";
+
+const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
+
+export const prisma =
+ globalForPrisma.prisma ||
+ new PrismaClient({
+ log:
+ env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
+ });
+
+if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
diff --git a/next/src/services/agent/agent-api.ts b/next/src/services/agent/agent-api.ts
new file mode 100644
index 0000000..5f8f80e
--- /dev/null
+++ b/next/src/services/agent/agent-api.ts
@@ -0,0 +1,95 @@
+import type { Session } from "next-auth";
+
+import type { Analysis } from "./analysis";
+import type { AgentUtils } from "../../hooks/useAgent";
+import { useAgentStore } from "../../stores";
+import type { Message } from "../../types/message";
+import type { RequestBody } from "../../utils/interfaces";
+import * as apiUtils from "../api-utils";
+
+type ApiProps = Pick & {
+ session?: Session;
+ agentUtils: AgentUtils;
+};
+
+export class AgentApi {
+ readonly props: ApiProps;
+ agentId: string | undefined;
+ runId: string | undefined;
+
+ constructor(apiProps: ApiProps) {
+ this.props = apiProps;
+ }
+
+ async createAgent(): Promise {
+ if (this.agentId) return;
+ const agent = await this.props.agentUtils.createAgent({
+ goal: this.props.goal,
+ });
+ this.agentId = agent?.id;
+ }
+
+ saveMessages(messages: Message[]): void {
+ if (!this.agentId) return;
+
+ this.props.agentUtils.saveAgent({
+ id: this.agentId,
+ tasks: messages,
+ });
+ }
+
+ async getInitialTasks(): Promise {
+ return (await this.post<{ newTasks: string[] }>("/api/agent/start", {})).newTasks;
+ }
+
+ async getAdditionalTasks(
+ tasks: {
+ current: string;
+ completed: string[];
+ remaining: string[];
+ },
+ result: string
+ ): Promise {
+ return (
+ await this.post<{ newTasks: string[] }>("/api/agent/create", {
+ result: result,
+ last_task: tasks.current,
+ tasks: tasks.remaining,
+ completed_tasks: tasks.completed,
+ })
+ ).newTasks;
+ }
+
+ async analyzeTask(task: string): Promise {
+ return await this.post("/api/agent/analyze", {
+ task: task,
+ tool_names: useAgentStore.getState().tools.map((tool) => tool.name),
+ });
+ }
+
+ private async post(
+ url: string,
+ data: Omit
+ ) {
+ const requestBody: RequestBody = {
+ model_settings: this.props.model_settings,
+ goal: this.props.goal,
+ run_id: this.runId,
+ ...data,
+ };
+
+ try {
+ useAgentStore.getState().setIsAgentThinking(true);
+ const { run_id, ...data } = await apiUtils.post(
+ url,
+ requestBody,
+ this.props.session
+ );
+
+ if (this.runId === undefined) this.runId = run_id;
+ return data;
+ } finally {
+ useAgentStore.getState().setIsAgentThinking(false);
+ }
+ }
+}
diff --git a/next/src/services/agent/agent-run-model.tsx b/next/src/services/agent/agent-run-model.tsx
new file mode 100644
index 0000000..41f697b
--- /dev/null
+++ b/next/src/services/agent/agent-run-model.tsx
@@ -0,0 +1,79 @@
+import { v4 } from "uuid";
+
+import { useAgentStore } from "../../stores";
+import { useTaskStore } from "../../stores/taskStore";
+import type { Task, TaskStatus } from "../../types/task";
+
+/*
+ * Abstraction over model used by Autonomous Agent to encapsulate the data required for a given run
+ */
+export interface AgentRunModel {
+ getId(): string;
+
+ getGoal(): string;
+
+ getLifecycle(): AgentLifecycle;
+
+ setLifecycle(AgentLifecycle): void;
+
+ getRemainingTasks(): Task[];
+
+ getCurrentTask(): Task | undefined;
+
+ updateTaskStatus(task: Task, status: TaskStatus): Task;
+
+ updateTaskResult(task: Task, result: string): Task;
+
+ getCompletedTasks(): Task[];
+
+ addTask(taskValue: string): void;
+}
+
+export type AgentLifecycle = "offline" | "running" | "pausing" | "paused" | "stopped";
+
+export class DefaultAgentRunModel implements AgentRunModel {
+ private readonly id: string;
+ private readonly goal: string;
+
+ constructor(goal: string) {
+ this.id = v4().toString();
+ this.goal = goal;
+ }
+
+ getId = () => this.id;
+
+ getGoal = () => this.goal;
+ getLifecycle = (): AgentLifecycle => useAgentStore.getState().lifecycle;
+ setLifecycle = (lifecycle: AgentLifecycle) => useAgentStore.getState().setLifecycle(lifecycle);
+
+ getRemainingTasks = (): Task[] => {
+ return useTaskStore.getState().tasks.filter((t: Task) => t.status === "started");
+ };
+
+ getCurrentTask = (): Task | undefined => this.getRemainingTasks()[0];
+
+ getCompletedTasks = (): Task[] =>
+ useTaskStore.getState().tasks.filter((t: Task) => t.status === "completed");
+
+ addTask = (taskValue: string): void =>
+ useTaskStore.getState().addTask({
+ id: v4().toString(),
+ type: "task",
+ value: taskValue,
+ status: "started",
+ result: "",
+ });
+
+ updateTaskStatus(task: Task, status: TaskStatus): Task {
+ return this.updateTask({ ...task, status });
+ }
+
+ updateTaskResult(task: Task, result: string): Task {
+ return this.updateTask({ ...task, result });
+ }
+
+ updateTask(updatedTask: Task): Task {
+ useTaskStore.getState().updateTask(updatedTask);
+ return updatedTask;
+ }
+}
diff --git a/next/src/services/agent/agent-work/agent-work.ts b/next/src/services/agent/agent-work/agent-work.ts
new file mode 100644
index 0000000..59f0eb4
--- /dev/null
+++ b/next/src/services/agent/agent-work/agent-work.ts
@@ -0,0 +1,6 @@
+export default interface AgentWork {
+ run: () => Promise;
+ conclude: () => Promise;
+ next: () => AgentWork | undefined;
+ onError: (e: unknown) => boolean; // Handles errors and returns whether to continue retrying
+}
diff --git a/next/src/services/agent/agent-work/analyze-task-work.ts b/next/src/services/agent/agent-work/analyze-task-work.ts
new file mode 100644
index 0000000..983355a
--- /dev/null
+++ b/next/src/services/agent/agent-work/analyze-task-work.ts
@@ -0,0 +1,38 @@
+import type AgentWork from "./agent-work";
+import ExecuteTaskWork from "./execute-task-work";
+import type { Message } from "../../../types/message";
+import type { Task } from "../../../types/task";
+import type { Analysis } from "../analysis";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class AnalyzeTaskWork implements AgentWork {
+ analysis: Analysis | undefined = undefined;
+
+ constructor(private parent: AutonomousAgent, private task: Task) {}
+
+ run = async () => {
+ this.task = this.parent.model.updateTaskStatus(this.task, "executing");
+ this.analysis = await this.parent.api.analyzeTask(this.task.value);
+ };
+
+ // eslint-disable-next-line @typescript-eslint/require-await
+ conclude = async () => {
+ let message: Message | undefined = undefined;
+ if (this.analysis) {
+ message = this.parent.messageService.sendAnalysisMessage(this.analysis);
+ } else {
+ message = this.parent.messageService.skipTaskMessage(this.task);
+ }
+ this.parent.api.saveMessages([message]);
+ };
+
+ next = () => {
+ if (!this.analysis) return undefined;
+ return new ExecuteTaskWork(this.parent, this.task, this.analysis);
+ };
+
+ onError = (e: unknown): boolean => {
+ this.parent.messageService.sendErrorMessage(e);
+ return true;
+ };
+}
diff --git a/next/src/services/agent/agent-work/chat-work.ts b/next/src/services/agent/agent-work/chat-work.ts
new file mode 100644
index 0000000..616cf5f
--- /dev/null
+++ b/next/src/services/agent/agent-work/chat-work.ts
@@ -0,0 +1,57 @@
+import { v1 } from "uuid";
+
+import type AgentWork from "./agent-work";
+import type { Message } from "../../../types/message";
+import { toApiModelSettings } from "../../../utils/interfaces";
+import { streamText } from "../../stream-utils";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class ChatWork implements AgentWork {
+ constructor(private parent: AutonomousAgent, private message: string) {}
+
+ run = async () => {
+ const executionMessage: Message = {
+ type: "task",
+ status: "completed",
+ value: `Response for '${this.message}'`,
+ id: v1(),
+ info: "Loading...",
+ };
+ this.parent.messageService.sendMessage({ ...executionMessage });
+
+ // TODO: this should be moved to the api layer
+ await streamText(
+ "/api/agent/chat",
+ {
+ run_id: this.parent.api.runId,
+ goal: this.parent.model.getGoal(),
+ model_settings: toApiModelSettings(this.parent.modelSettings, this.parent.session),
+ message: this.message,
+ results: this.parent.model
+ .getCompletedTasks()
+ .filter((task) => task.result && task.result !== "")
+ .map((task) => task.result || ""),
+ },
+ this.parent.api.props.session?.accessToken || "",
+ () => {
+ executionMessage.info = "";
+ },
+ (text) => {
+ executionMessage.info += text;
+ this.parent.messageService.updateMessage(executionMessage);
+ },
+ () => this.parent.model.getLifecycle() === "stopped"
+ );
+ this.parent.api.saveMessages([executionMessage]);
+ };
+
+ // eslint-disable-next-line @typescript-eslint/require-await
+ conclude = async () => void 0;
+
+ next = () => undefined;
+
+ onError = (e: unknown): boolean => {
+ this.parent.messageService.sendErrorMessage(e);
+ return true;
+ };
+}
diff --git a/next/src/services/agent/agent-work/create-task-work.ts b/next/src/services/agent/agent-work/create-task-work.ts
new file mode 100644
index 0000000..4fed3b3
--- /dev/null
+++ b/next/src/services/agent/agent-work/create-task-work.ts
@@ -0,0 +1,31 @@
+import type AgentWork from "./agent-work";
+import type { Task } from "../../../types/task";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class CreateTaskWork implements AgentWork {
+ taskValues: string[] = [];
+
+ constructor(private parent: AutonomousAgent, private task: Task) {}
+
+ run = async () => {
+ this.taskValues = await this.parent.api.getAdditionalTasks(
+ {
+ current: this.task.value,
+ remaining: this.parent.model.getRemainingTasks().map((task) => task.value),
+ completed: this.parent.model.getCompletedTasks().map((task) => task.value),
+ },
+ this.task.result || ""
+ );
+ };
+
+ conclude = async () => {
+ const TIMEOUT_LONG = 1000;
+ this.parent.api.saveMessages(await this.parent.createTaskMessages(this.taskValues));
+ await new Promise((r) => setTimeout(r, TIMEOUT_LONG));
+ };
+
+ next = () => undefined;
+
+ // Ignore errors and simply avoid creating more tasks
+ onError = (): boolean => false;
+}
diff --git a/next/src/services/agent/agent-work/execute-task-work.ts b/next/src/services/agent/agent-work/execute-task-work.ts
new file mode 100644
index 0000000..91bd4b6
--- /dev/null
+++ b/next/src/services/agent/agent-work/execute-task-work.ts
@@ -0,0 +1,60 @@
+import { v1 } from "uuid";
+
+import type AgentWork from "./agent-work";
+import type { Message } from "../../../types/message";
+import type { Task } from "../../../types/task";
+import { toApiModelSettings } from "../../../utils/interfaces";
+import { streamText } from "../../stream-utils";
+import type { Analysis } from "../analysis";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class ExecuteTaskWork implements AgentWork {
+ result = "";
+
+ constructor(private parent: AutonomousAgent, private task: Task, private analysis: Analysis) {}
+
+ run = async () => {
+ const executionMessage: Message = {
+ ...this.task,
+ id: v1(),
+ status: "completed",
+ info: "Loading...",
+ };
+ this.parent.messageService.sendMessage({ ...executionMessage, status: "completed" });
+
+ // TODO: this should be moved to the api layer
+ await streamText(
+ "/api/agent/execute",
+ {
+ run_id: this.parent.api.runId,
+ goal: this.parent.model.getGoal(),
+ task: this.task.value,
+ analysis: this.analysis,
+ model_settings: toApiModelSettings(this.parent.modelSettings, this.parent.session),
+ },
+ this.parent.api.props.session?.accessToken || "",
+ () => {
+ executionMessage.info = "";
+ },
+ (text) => {
+ executionMessage.info += text;
+ this.task = this.parent.model.updateTaskResult(this.task, executionMessage.info || "");
+ this.parent.messageService.updateMessage(executionMessage);
+ },
+ () => this.parent.model.getLifecycle() === "stopped"
+ );
+ this.result = executionMessage.info || "";
+ this.parent.api.saveMessages([executionMessage]);
+ this.task = this.parent.model.updateTaskStatus(this.task, "completed");
+ };
+
+ // eslint-disable-next-line @typescript-eslint/require-await
+ conclude = async () => void 0;
+
+ next = () => undefined;
+
+ onError = (e: unknown): boolean => {
+ this.parent.messageService.sendErrorMessage(e);
+ return true;
+ };
+}
diff --git a/next/src/services/agent/agent-work/start-task-work.ts b/next/src/services/agent/agent-work/start-task-work.ts
new file mode 100644
index 0000000..1b0be8c
--- /dev/null
+++ b/next/src/services/agent/agent-work/start-task-work.ts
@@ -0,0 +1,27 @@
+import type AgentWork from "./agent-work";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class StartGoalWork implements AgentWork {
+ tasksValues: string[] = [];
+
+ constructor(private parent: AutonomousAgent) {}
+
+ run = async () => {
+ const goalMessage = this.parent.messageService.sendGoalMessage(this.parent.model.getGoal());
+ this.tasksValues = await this.parent.api.getInitialTasks();
+ await this.parent.api.createAgent();
+ this.parent.api.saveMessages([goalMessage]);
+ };
+
+ conclude = async () => {
+ const messages = await this.parent.createTaskMessages(this.tasksValues);
+ this.parent.api.saveMessages(messages);
+ };
+
+ onError = (e: unknown): boolean => {
+ this.parent.messageService.sendErrorMessage(e);
+ return true;
+ };
+
+ next = () => undefined;
+}
diff --git a/next/src/services/agent/agent-work/summarize-work.ts b/next/src/services/agent/agent-work/summarize-work.ts
new file mode 100644
index 0000000..7a7b3fd
--- /dev/null
+++ b/next/src/services/agent/agent-work/summarize-work.ts
@@ -0,0 +1,56 @@
+import { v1 } from "uuid";
+
+import type AgentWork from "./agent-work";
+import type { Message } from "../../../types/message";
+import { toApiModelSettings } from "../../../utils/interfaces";
+import { streamText } from "../../stream-utils";
+import type AutonomousAgent from "../autonomous-agent";
+
+export default class SummarizeWork implements AgentWork {
+ constructor(private parent: AutonomousAgent) {}
+
+ run = async () => {
+ const executionMessage: Message = {
+ type: "task",
+ status: "completed",
+ value: `Summarizing ${this.parent.model.getGoal()}`,
+ id: v1(),
+ info: "Loading...",
+ };
+ this.parent.messageService.sendMessage({ ...executionMessage });
+
+ // TODO: this should be moved to the api layer
+ await streamText(
+ "/api/agent/summarize",
+ {
+ run_id: this.parent.api.runId,
+ goal: this.parent.model.getGoal(),
+ model_settings: toApiModelSettings(this.parent.modelSettings, this.parent.session),
+ results: this.parent.model
+ .getCompletedTasks()
+ .filter((task) => task.result && task.result !== "")
+ .map((task) => task.result || ""),
+ },
+ this.parent.api.props.session?.accessToken || "",
+ () => {
+ executionMessage.info = "";
+ },
+ (text) => {
+ executionMessage.info += text;
+ this.parent.messageService.updateMessage(executionMessage);
+ },
+ () => this.parent.model.getLifecycle() === "stopped"
+ );
+ this.parent.api.saveMessages([executionMessage]);
+ };
+
+ // eslint-disable-next-line @typescript-eslint/require-await
+ conclude = async () => void 0;
+
+ next = () => undefined;
+
+ onError = (e: unknown): boolean => {
+ this.parent.messageService.sendErrorMessage(e);
+ return true;
+ };
+}
diff --git a/next/src/services/agent/analysis.ts b/next/src/services/agent/analysis.ts
new file mode 100644
index 0000000..8c28321
--- /dev/null
+++ b/next/src/services/agent/analysis.ts
@@ -0,0 +1,5 @@
+export type Analysis = {
+ reasoning: string;
+ action: "reason" | "search" | "wikipedia" | "image" | "code";
+ arg: string;
+};
diff --git a/next/src/services/agent/autonomous-agent.ts b/next/src/services/agent/autonomous-agent.ts
new file mode 100644
index 0000000..910e58e
--- /dev/null
+++ b/next/src/services/agent/autonomous-agent.ts
@@ -0,0 +1,171 @@
+import type { Session } from "next-auth";
+
+import type { AgentApi } from "./agent-api";
+import type { AgentRunModel } from "./agent-run-model";
+import type AgentWork from "./agent-work/agent-work";
+import AnalyzeTaskWork from "./agent-work/analyze-task-work";
+import ChatWork from "./agent-work/chat-work";
+import StartGoalWork from "./agent-work/start-task-work";
+import SummarizeWork from "./agent-work/summarize-work";
+import type { MessageService } from "./message-service";
+import { useAgentStore } from "../../stores";
+import type { ModelSettings } from "../../types";
+import { isRetryableError } from "../../types/errors";
+import type { Message } from "../../types/message";
+import { withRetries } from "../api-utils";
+
+class AutonomousAgent {
+ model: AgentRunModel;
+ modelSettings: ModelSettings;
+ session?: Session;
+ messageService: MessageService;
+ api: AgentApi;
+
+ private readonly workLog: AgentWork[];
+ private lastConclusion?: () => Promise;
+
+ constructor(
+ model: AgentRunModel,
+ messageService: MessageService,
+ modelSettings: ModelSettings,
+ api: AgentApi,
+ session?: Session
+ ) {
+ this.model = model;
+ this.messageService = messageService;
+ this.modelSettings = modelSettings;
+ this.session = session;
+ this.api = api;
+ this.workLog = [new StartGoalWork(this)];
+ }
+
+ async run() {
+ this.model.setLifecycle("running");
+
+ // If an agent is paused during execution, we need to play work conclusions
+ if (this.lastConclusion) {
+ await this.lastConclusion();
+ this.lastConclusion = undefined;
+ }
+
+ this.addTasksIfWorklogEmpty();
+ while (this.workLog[0]) {
+ // No longer running, dip
+ if (this.model.getLifecycle() === "pausing") this.model.setLifecycle("paused");
+ if (this.model.getLifecycle() !== "running") return;
+
+ // Get and run the next work item
+ const work = this.workLog[0];
+ await this.runWork(work, () => this.model.getLifecycle() === "stopped");
+
+ this.workLog.shift();
+ if (this.model.getLifecycle() !== "running") {
+ this.lastConclusion = () => work.conclude();
+ } else {
+ await work.conclude();
+ }
+
+ // Add next thing if available
+ const next = work.next();
+ if (next) {
+ this.workLog.push(next);
+ }
+
+ this.addTasksIfWorklogEmpty();
+ }
+
+ if (this.model.getLifecycle() === "pausing") this.model.setLifecycle("paused");
+ if (this.model.getLifecycle() !== "running") return;
+
+ // Done with everything in the log and all queued tasks
+ this.stopAgent();
+ }
+
+ /*
+ * Runs a provided work object with error handling and retries
+ */
+ private async runWork(work: AgentWork, shouldStop: () => boolean = () => false) {
+ const RETRY_TIMEOUT = 2000;
+
+ await withRetries(
+ async () => {
+ if (shouldStop()) return;
+ await work.run();
+ },
+ async (e) => {
+ const shouldRetry = work.onError?.(e) || true;
+
+ if (!isRetryableError(e)) {
+ this.stopAgent();
+ return false;
+ }
+
+ if (shouldRetry) {
+ // Wait a bit before retrying
+ useAgentStore.getState().setIsAgentThinking(true);
+ await new Promise((r) => setTimeout(r, RETRY_TIMEOUT));
+ }
+
+ return shouldRetry;
+ }
+ );
+ useAgentStore.getState().setIsAgentThinking(false);
+ }
+
+ addTasksIfWorklogEmpty = () => {
+ if (this.workLog.length > 0) return;
+
+ // No work items, check if we still have tasks
+ const currentTask = this.model.getCurrentTask();
+ if (currentTask) {
+ this.workLog.push(new AnalyzeTaskWork(this, currentTask));
+ }
+ };
+
+ pauseAgent() {
+ this.model.setLifecycle("pausing");
+ }
+
+ stopAgent() {
+ this.model.setLifecycle("stopped");
+ return;
+ }
+
+ async summarize() {
+ this.model.setLifecycle("running");
+ const summarizeWork = new SummarizeWork(this);
+ await this.runWork(summarizeWork);
+ await summarizeWork.conclude();
+ this.model.setLifecycle("stopped");
+ }
+
+ async chat(message: string) {
+ if (this.model.getLifecycle() == "running") this.pauseAgent();
+ let paused = false;
+ if (this.model.getLifecycle() == "stopped") {
+ paused = true;
+ this.model.setLifecycle("pausing");
+ }
+ const chatWork = new ChatWork(this, message);
+ await this.runWork(chatWork);
+ await chatWork.conclude();
+ if (paused) {
+ this.model.setLifecycle("stopped");
+ }
+ }
+
+ async createTaskMessages(tasks: string[]) {
+ const TIMOUT_SHORT = 150;
+ const messages: Message[] = [];
+
+ for (const value of tasks) {
+ messages.push(this.messageService.startTask(value));
+ this.model.addTask(value);
+ await new Promise((r) => setTimeout(r, TIMOUT_SHORT));
+ }
+
+ return messages;
+ }
+}
+
+export default AutonomousAgent;
diff --git a/next/src/services/agent/message-service.ts b/next/src/services/agent/message-service.ts
new file mode 100644
index 0000000..944aed3
--- /dev/null
+++ b/next/src/services/agent/message-service.ts
@@ -0,0 +1,107 @@
+import axios from "axios";
+import { v1 } from "uuid";
+
+import type { Analysis } from "./analysis";
+import { useMessageStore } from "../../stores";
+import { isPlatformError, isValueError } from "../../types/errors";
+import type { Message } from "../../types/message";
+import { MESSAGE_TYPE_GOAL, MESSAGE_TYPE_SYSTEM } from "../../types/message";
+import type { Task } from "../../types/task";
+import { translate } from "../../utils/translations";
+
+export class MessageService {
+ private readonly renderMessage: (message: Message) => void;
+
+ constructor(renderMessage: (message: Message) => void) {
+ this.renderMessage = renderMessage;
+ }
+
+ sendMessage = (message: Message): Message => {
+ this.renderMessage({ ...message });
+ return message;
+ };
+
+ updateMessage = (message: Message): Message => {
+ useMessageStore.getState().updateMessage(message);
+ return message;
+ };
+
+ skipTaskMessage = (task: Task) =>
+ this.sendMessage({
+ type: "system",
+ value: `đĨē Skipping task: ${task.value}`,
+ });
+
+ startTask = (task: string) =>
+ this.sendMessage({
+ taskId: v1().toString(),
+ value: task,
+ status: "started",
+ type: "task",
+ });
+
+ sendGoalMessage = (goal: string) => this.sendMessage({ type: MESSAGE_TYPE_GOAL, value: goal });
+
+ sendAnalysisMessage = (analysis: Analysis) => {
+ let message = "â° Generating response...";
+ if (analysis.action == "search") {
+ message = `đ Searching the web for "${analysis.arg}"...`;
+ }
+ if (analysis.action == "wikipedia") {
+ message = `đ Searching Wikipedia for "${analysis.arg}"...`;
+ }
+ if (analysis.action == "image") {
+ message = `đ¨ Generating an image with prompt: "${analysis.arg}"...`;
+ }
+ if (analysis.action == "code") {
+ message = `đģ Writing code...`;
+ }
+
+ return this.sendMessage({
+ type: MESSAGE_TYPE_SYSTEM,
+ value: message,
+ });
+ };
+
+ sendErrorMessage = (e: unknown) => {
+ let message = "An unknown error occurred. Please try again later.";
+ if (typeof e == "string") message = e;
+ else if (axios.isAxiosError(e) && e.message == "Network Error") {
+ message = "Error attempting to connect to the server.";
+ } else if (axios.isAxiosError(e)) {
+ const data = (e.response?.data as object) || {};
+ switch (e.response?.status) {
+ case 409:
+ message = isPlatformError(data)
+ ? data.detail
+ : "An Unknown Error Occurred, Please Try Again!";
+ break;
+ case 422:
+ if (isValueError(data)) {
+ const detailMessages = data.detail.map((detail) => detail.msg);
+ message = detailMessages.join("\n");
+ }
+ break;
+ case 429:
+ if (e.response?.data && "detail" in e.response.data) {
+ const { detail } = e.response.data as { detail?: string };
+ message = detail || "Too many requests. Please try again later.";
+ } else {
+ message = "Too many requests. Please try again later.";
+ }
+ break;
+ case 403:
+ message = "Authentication Error. Please make sure you are logged in.";
+ break;
+ case 404:
+ message = "ERROR_OPENAI_API_KEY_NO_GPT4";
+ break;
+ default:
+ message = "ERROR_ACCESSING_OPENAI_API_KEY";
+ break;
+ }
+ } else if (e instanceof Error) message = e.message;
+
+ return this.sendMessage({ type: "error", value: translate(message, "errors") });
+ };
+}
diff --git a/next/src/services/api-utils.ts b/next/src/services/api-utils.ts
new file mode 100644
index 0000000..2e3df75
--- /dev/null
+++ b/next/src/services/api-utils.ts
@@ -0,0 +1,65 @@
+import axios from "axios";
+import type { Session } from "next-auth";
+
+import { env } from "../env/client.mjs";
+
+export const post = async (url: string, body: unknown, session?: Session) => {
+ const headers = getHeaders(session);
+ url = getUrl(url);
+
+ return (
+ await axios.post(url, body, {
+ headers,
+ })
+ ).data as T;
+};
+
+export const get = async (url: string, session?: Session) => {
+ const headers = getHeaders(session);
+ url = getUrl(url);
+
+ return (
+ await axios.get(url, {
+ headers,
+ })
+ ).data as T;
+};
+
+export const delete_ = async (url: string, accessToken?: string) => {
+ const headers: Record = {};
+ if (accessToken) headers.Authorization = `Bearer ${accessToken}`;
+
+ url = getUrl(url);
+
+ return (
+ await axios.delete(url, {
+ headers,
+ })
+ ).data as T;
+};
+
+export function getHeaders(session?: Session) {
+ const headers: Record = {};
+ if (session?.accessToken) {
+ headers.Authorization = `Bearer ${session.accessToken}`;
+ }
+
+ return headers;
+}
+
+function getUrl(url: string) {
+ return env.NEXT_PUBLIC_BACKEND_URL + url;
+}
+export async function withRetries(
+ fn: () => Promise,
+ onError: (error: unknown) => Promise, // Function to handle the error and return whether to continue retrying
+ retries = 3
+): Promise {
+ for (let i = 0; i < retries + 1; i++) {
+ try {
+ return await fn();
+ } catch (error) {
+ if (!(await onError(error))) return;
+ }
+ }
+}
diff --git a/next/src/services/api/org.ts b/next/src/services/api/org.ts
new file mode 100644
index 0000000..242760d
--- /dev/null
+++ b/next/src/services/api/org.ts
@@ -0,0 +1,31 @@
+import { z } from "zod";
+
+import { get } from "../fetch-utils";
+
+const OrganizationUsersSchema = z.object({
+ id: z.string(),
+ name: z.string(),
+ users: z.array(
+ z.object({
+ id: z.string(),
+ role: z.string(),
+ user: z.object({
+ id: z.string(),
+ name: z.string(),
+ email: z.string(),
+ }),
+ })
+ ),
+});
+
+export class OrganizationApi {
+ readonly accessToken?: string;
+
+ constructor(accessToken?: string) {
+ this.accessToken = accessToken;
+ }
+
+ async get(name: string) {
+ return await get(`/api/auth/organization/${name}`, OrganizationUsersSchema, this.accessToken);
+ }
+}
diff --git a/next/src/services/fetch-utils.ts b/next/src/services/fetch-utils.ts
new file mode 100644
index 0000000..bf8b81c
--- /dev/null
+++ b/next/src/services/fetch-utils.ts
@@ -0,0 +1,93 @@
+import type { z } from "zod";
+
+import { env } from "../env/client.mjs";
+
+function getHeaders(accessToken: string | undefined, organizationId: string | undefined) {
+ return {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${accessToken || ""}`,
+ ...(organizationId ? { "X-Organization-Id": organizationId } : {}),
+ };
+}
+
+export const get = async (
+ path: string,
+ schema: T,
+ accessToken?: string,
+ organizationId?: string
+): Promise> => {
+ const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, {
+ method: "GET",
+ headers: getHeaders(accessToken, organizationId),
+ });
+
+ if (!response.ok) {
+ throw new Error("Request failed");
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ return schema.parse(await response.json());
+};
+
+export const post = async (
+ path: string,
+ schema: T,
+ body: unknown,
+ accessToken?: string,
+ organizationId?: string
+): Promise> => {
+ const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, {
+ body: JSON.stringify(body),
+ method: "POST",
+ headers: getHeaders(accessToken, organizationId),
+ });
+
+ if (!response.ok) {
+ throw new Error("Request failed");
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ return schema.parse(await response.json());
+};
+
+export const put = async (
+ path: string,
+ schema: T,
+ body: unknown,
+ accessToken?: string,
+ organizationId?: string
+): Promise> => {
+ const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, {
+ body: JSON.stringify(body),
+ method: "PUT",
+ headers: getHeaders(accessToken, organizationId),
+ });
+
+ if (!response.ok) {
+ throw new Error(response.statusText);
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ return schema.parse(await response.json());
+};
+
+export const delete_ = async (
+ path: string,
+ schema: T,
+ body: unknown,
+ accessToken?: string,
+ organizationId?: string
+): Promise> => {
+ const response = await fetch(`${env.NEXT_PUBLIC_BACKEND_URL}${path}`, {
+ body: JSON.stringify(body),
+ method: "DELETE",
+ headers: getHeaders(accessToken, organizationId),
+ });
+
+ if (!response.ok) {
+ throw new Error(response.statusText);
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
+ return schema.parse(await response.json());
+};
diff --git a/next/src/services/stream-utils.ts b/next/src/services/stream-utils.ts
new file mode 100644
index 0000000..c978da5
--- /dev/null
+++ b/next/src/services/stream-utils.ts
@@ -0,0 +1,71 @@
+import { env } from "../env/client.mjs";
+
+type TextStream = ReadableStreamDefaultReader;
+
+const fetchData = async (
+ url: string,
+ body: T,
+ accessToken: string
+): Promise => {
+ url = env.NEXT_PUBLIC_BACKEND_URL + url;
+
+ const response = await fetch(url, {
+ method: "POST",
+ cache: "no-cache",
+ keepalive: true,
+ headers: {
+ "Content-Type": "application/json",
+ Accept: "text/event-stream",
+ Authorization: `Bearer ${accessToken}`,
+ },
+ body: JSON.stringify(body),
+ });
+
+ if (response.status === 409) {
+ const error = (await response.json()) as { error: string; detail: string };
+ throw new Error(error.detail);
+ }
+
+ return response.body?.getReader();
+};
+
+async function readStream(reader: TextStream): Promise {
+ const result = await reader.read();
+ return result.done ? null : new TextDecoder().decode(result.value);
+}
+
+async function processStream(
+ reader: TextStream,
+ onStart: () => void,
+ onText: (text: string) => void,
+ shouldClose: () => boolean
+): Promise {
+ onStart();
+ while (true) {
+ if (shouldClose()) {
+ await reader.cancel();
+ return;
+ }
+
+ const text = await readStream(reader);
+ if (text === null) break;
+ onText(text);
+ }
+}
+
+export const streamText = async (
+ url: string,
+ body: T,
+ accessToken: string,
+ onStart: () => void,
+ onText: (text: string) => void,
+ shouldClose: () => boolean // Event handler to close connection early
+) => {
+ const reader = await fetchData(url, body, accessToken);
+ if (!reader) {
+ console.error("Reader is undefined!");
+ return;
+ }
+
+ await processStream(reader, onStart, onText, shouldClose);
+};
diff --git a/next/src/services/workflow/oauthApi.ts b/next/src/services/workflow/oauthApi.ts
new file mode 100644
index 0000000..b135d7e
--- /dev/null
+++ b/next/src/services/workflow/oauthApi.ts
@@ -0,0 +1,66 @@
+import type { Session } from "next-auth";
+import { z } from "zod";
+
+import { env } from "../../env/client.mjs";
+import { get } from "../fetch-utils";
+
+export default class OauthApi {
+ readonly accessToken?: string;
+ readonly organizationId?: string;
+
+ constructor(accessToken?: string, organizationId?: string) {
+ this.accessToken = accessToken;
+ this.organizationId = organizationId;
+ }
+
+ static fromSession(session: Session | null) {
+ return new OauthApi(session?.accessToken, session?.user?.organizations[0]?.id);
+ }
+
+ async install(provider: string, redirectUri?: string) {
+ const url = `${env.NEXT_PUBLIC_VERCEL_URL}${redirectUri || ""}`;
+
+ return await get(
+ `/api/auth/${provider}?redirect=${encodeURIComponent(url)}`,
+ z.string().url(),
+ this.accessToken,
+ this.organizationId
+ );
+ }
+
+ async uninstall(provider: string) {
+ return await get(
+ `/api/auth/${provider}/uninstall`,
+ z.object({
+ success: z.boolean(),
+ }),
+ this.accessToken,
+ this.organizationId
+ );
+ }
+ // TODO: decouple this
+ async get_info(provider: string) {
+ return await get(
+ `/api/auth/${provider}/info`,
+ z
+ .object({
+ name: z.string(),
+ id: z.string(),
+ })
+ .array(),
+ this.accessToken,
+ this.organizationId
+ );
+ }
+
+ async get_info_sid() {
+ return await get(
+ `/api/auth/sid/info`,
+ z.object({
+ connected: z.boolean(),
+ }),
+ this.accessToken,
+ this.organizationId
+ );
+ }
+}
diff --git a/next/src/stores/agentInputStore.ts b/next/src/stores/agentInputStore.ts
new file mode 100644
index 0000000..1ce9086
--- /dev/null
+++ b/next/src/stores/agentInputStore.ts
@@ -0,0 +1,40 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+
+import { createSelectors } from "./helpers";
+
+const resetters: (() => void)[] = [];
+
+interface AgentInputSlice {
+ nameInput: string;
+ goalInput: string;
+ setNameInput: (nameInput: string) => void;
+ setGoalInput: (goalInput: string) => void;
+ resetInputs: () => void;
+}
+
+const initialInputState = {
+ nameInput: "",
+ goalInput: "",
+};
+
+const createAgentInputSlice: StateCreator = (set) => {
+ resetters.push(() => set(initialInputState));
+ return {
+ ...initialInputState,
+ setNameInput: (nameInput: string) => {
+ set(() => ({ nameInput }));
+ },
+ setGoalInput: (goalInput: string) => {
+ set(() => ({ goalInput }));
+ },
+ resetInputs: () => {
+ set(initialInputState);
+ },
+ };
+};
+export const useAgentInputStore = createSelectors(
+ create()((...a) => ({
+ ...createAgentInputSlice(...a),
+ }))
+);
diff --git a/next/src/stores/agentStore.ts b/next/src/stores/agentStore.ts
new file mode 100644
index 0000000..490b870
--- /dev/null
+++ b/next/src/stores/agentStore.ts
@@ -0,0 +1,96 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+import { createJSONStorage, persist } from "zustand/middleware";
+
+import { createSelectors } from "./helpers";
+import type { ActiveTool } from "../hooks/useTools";
+import type { AgentLifecycle } from "../services/agent/agent-run-model";
+import type AutonomousAgent from "../services/agent/autonomous-agent";
+
+interface AgentSlice {
+ agent: AutonomousAgent | null;
+ lifecycle: AgentLifecycle;
+ setLifecycle: (AgentLifecycle) => void;
+ summarized: boolean;
+ setSummarized: (boolean) => void;
+ isAgentThinking: boolean;
+ setIsAgentThinking: (isThinking: boolean) => void;
+ setAgent: (newAgent: AutonomousAgent | null) => void;
+}
+
+const initialAgentState = {
+ agent: null,
+ lifecycle: "offline" as const,
+ summarized: false,
+ isAgentThinking: false,
+ isAgentPaused: undefined,
+};
+
+interface ToolsSlice {
+ tools: Omit[];
+ setTools: (tools: ActiveTool[]) => void;
+}
+
+const resetters: (() => void)[] = [];
+
+const createAgentSlice: StateCreator = (set, get) => {
+ resetters.push(() => set(initialAgentState));
+ return {
+ ...initialAgentState,
+ setLifecycle: (lifecycle: AgentLifecycle) => {
+ set(() => ({
+ lifecycle: lifecycle,
+ }));
+ },
+ setSummarized: (summarized: boolean) => {
+ set(() => ({
+ summarized: summarized,
+ }));
+ },
+ setIsAgentThinking: (isThinking: boolean) => {
+ set(() => ({
+ isAgentThinking: isThinking,
+ }));
+ },
+ setAgent: (newAgent) => {
+ set(() => ({
+ agent: newAgent,
+ }));
+
+ if (get().agent === null) {
+ resetters.forEach((resetter) => resetter());
+ }
+ },
+ };
+};
+
+const createToolsSlice: StateCreator = (set) => {
+ return {
+ tools: [],
+ setTools: (tools) => {
+ set(() => ({
+ tools: tools,
+ }));
+ },
+ };
+};
+
+export const useAgentStore = createSelectors(
+ create()(
+ persist(
+ (...a) => ({
+ ...createAgentSlice(...a),
+ ...createToolsSlice(...a),
+ }),
+ {
+ name: "agent-storage-v2",
+ storage: createJSONStorage(() => localStorage),
+ partialize: (state) => ({
+ tools: state.tools,
+ }),
+ }
+ )
+ )
+);
+
+export const resetAllAgentSlices = () => resetters.forEach((resetter) => resetter());
diff --git a/next/src/stores/configStore.ts b/next/src/stores/configStore.ts
new file mode 100644
index 0000000..75835c6
--- /dev/null
+++ b/next/src/stores/configStore.ts
@@ -0,0 +1,75 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+import { createJSONStorage, persist } from "zustand/middleware";
+
+import { createSelectors } from "./helpers";
+
+interface Layout {
+ showRightSidebar: boolean;
+ showLogSidebar: boolean;
+}
+
+interface LayoutSlice {
+ layout: Layout;
+ setLayout: (layout: Partial) => void;
+}
+
+interface OrganizationRole {
+ id: string;
+ name: string;
+ role: string;
+}
+
+interface AuthSlice {
+ organization: OrganizationRole | undefined;
+ setOrganization: (orgRole: OrganizationRole | undefined) => void;
+}
+
+const createLayoutSlice: StateCreator = (set, get) => {
+ return {
+ ...{
+ layout: {
+ showRightSidebar: false,
+ showLogSidebar: false,
+ },
+ },
+ setLayout: (layout: Partial) => {
+ if (layout.showLogSidebar) layout.showRightSidebar = false;
+ if (layout.showRightSidebar) layout.showLogSidebar = false;
+
+ set((prev) => ({
+ layout: {
+ ...prev.layout,
+ ...layout,
+ },
+ }));
+ },
+ };
+};
+
+const createAuthSlice: StateCreator = (set, get) => {
+ return {
+ ...{ organization: undefined },
+ setOrganization: (orgRole: OrganizationRole | undefined) => {
+ set(() => ({
+ organization: orgRole,
+ }));
+ },
+ };
+};
+
+export const useConfigStore = createSelectors(
+ create()(
+ persist(
+ (...a) => ({
+ ...createLayoutSlice(...a),
+ ...createAuthSlice(...a),
+ }),
+ {
+ name: "reworkd-config-2",
+ version: 1,
+ storage: createJSONStorage(() => localStorage),
+ }
+ )
+ )
+);
diff --git a/next/src/stores/helpers.ts b/next/src/stores/helpers.ts
new file mode 100644
index 0000000..d036ba0
--- /dev/null
+++ b/next/src/stores/helpers.ts
@@ -0,0 +1,22 @@
+import type { StoreApi, UseBoundStore } from "zustand";
+
+/*
+ Automatically creates selectors for each states in store.
+ Zustand recommends using selectors for calling state/actions for optimal performance
+ Reference: https://docs.pmnd.rs/zustand/guides/auto-generating-selectors
+*/
+type WithSelectors = S extends { getState: () => infer T }
+ ? S & { use: { [K in keyof T]: () => T[K] } }
+ : never;
+
+export const createSelectors = >>(
+ _store: S
+) => {
+ const store = _store as WithSelectors;
+ store.use = {};
+ for (const k of Object.keys(store.getState())) {
+ (store.use)[k] = () => store((s) => s[k as keyof typeof s]);
+ }
+
+ return store;
+};
diff --git a/next/src/stores/index.ts b/next/src/stores/index.ts
new file mode 100644
index 0000000..5f1ed2f
--- /dev/null
+++ b/next/src/stores/index.ts
@@ -0,0 +1,3 @@
+export * from "./messageStore";
+export * from "./agentStore";
+export * from "./modelSettingsStore";
diff --git a/next/src/stores/messageStore.ts b/next/src/stores/messageStore.ts
new file mode 100644
index 0000000..58c71c5
--- /dev/null
+++ b/next/src/stores/messageStore.ts
@@ -0,0 +1,54 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+
+import { createSelectors } from "./helpers";
+import type { Message } from "../types/message";
+
+const resetters: (() => void)[] = [];
+
+const initialMessageState = {
+ messages: [],
+};
+
+interface MessageSlice {
+ messages: Message[];
+ addMessage: (newMessage: Message) => void;
+ updateMessage: (newMessage: Message) => void;
+}
+
+const createMessageSlice: StateCreator = (set) => {
+ resetters.push(() => set(initialMessageState));
+ return {
+ ...initialMessageState,
+ addMessage: (newMessage) => {
+ set((state) => ({
+ ...state,
+ messages: [...state.messages, { ...newMessage }],
+ }));
+ },
+
+ updateMessage: (newMessage) => {
+ set((state) => {
+ const oldMessage = state.messages.find((message) => message.id === newMessage.id);
+ if (oldMessage) {
+ const updatedMessages = state.messages.map((message) =>
+ message.id === oldMessage.id ? newMessage : message
+ );
+ return {
+ ...state,
+ messages: updatedMessages,
+ };
+ }
+ return state;
+ });
+ },
+ };
+};
+
+export const useMessageStore = createSelectors(
+ create()((...a) => ({
+ ...createMessageSlice(...a),
+ }))
+);
+
+export const resetAllMessageSlices = () => resetters.forEach((resetter) => resetter());
diff --git a/next/src/stores/modelSettingsStore.ts b/next/src/stores/modelSettingsStore.ts
new file mode 100644
index 0000000..c7baa7d
--- /dev/null
+++ b/next/src/stores/modelSettingsStore.ts
@@ -0,0 +1,54 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+import { createJSONStorage, persist } from "zustand/middleware";
+
+import { createSelectors } from "./helpers";
+import type { ModelSettings } from "../types";
+import { getDefaultModelSettings } from "../utils/constants";
+
+const resetters: (() => void)[] = [];
+
+interface ModelSettingsSlice {
+ modelSettings: ModelSettings;
+ updateSettings: (key: Key, value: ModelSettings[Key]) => void;
+}
+
+const initialModelSettingsState = {
+ modelSettings: getDefaultModelSettings(),
+};
+
+const createModelSettingsSlice: StateCreator = (set) => {
+ resetters.push(() => set(initialModelSettingsState));
+
+ return {
+ ...initialModelSettingsState,
+ updateSettings: (key: Key, value: ModelSettings[Key]) => {
+ set((state) => ({
+ modelSettings: { ...state.modelSettings, [key]: value },
+ }));
+ },
+ };
+};
+
+export const useModelSettingsStore = createSelectors(
+ create()(
+ persist(
+ (...a) => ({
+ ...createModelSettingsSlice(...a),
+ }),
+ {
+ name: "agentgpt-settings-storage-v2",
+ storage: createJSONStorage(() => localStorage),
+ partialize: (state) => ({
+ modelSettings: {
+ ...state.modelSettings,
+ customModelName: "gpt-3.5-turbo",
+ maxTokens: Math.min(state.modelSettings.maxTokens, 4000),
+ },
+ }),
+ }
+ )
+ )
+);
+
+export const resetSettings = () => resetters.forEach((resetter) => resetter());
diff --git a/next/src/stores/taskStore.ts b/next/src/stores/taskStore.ts
new file mode 100644
index 0000000..22adce8
--- /dev/null
+++ b/next/src/stores/taskStore.ts
@@ -0,0 +1,69 @@
+import type { StateCreator } from "zustand";
+import { create } from "zustand";
+
+import { createSelectors } from "./helpers";
+import type { Message } from "../types/message";
+import type { Task } from "../types/task";
+import { isTask, TASK_STATUS_COMPLETED, TASK_STATUS_EXECUTING } from "../types/task";
+
+export const isExistingTask = (message: Message): boolean =>
+ isTask(message) &&
+ (message.status === TASK_STATUS_EXECUTING || message.status === TASK_STATUS_COMPLETED);
+
+const resetters: (() => void)[] = [];
+
+const initialTaskState = {
+ tasks: [],
+};
+
+export interface TaskSlice {
+ tasks: Task[];
+ addTask: (newTask: Task) => void;
+ updateTask: (updatedTask: Task) => void;
+ deleteTask: (taskId: string) => void;
+}
+
+export const createTaskSlice: StateCreator = (set) => {
+ resetters.push(() => set(initialTaskState));
+
+ return {
+ ...initialTaskState,
+ addTask: (newTask) => {
+ set((state) => ({
+ ...state,
+ tasks: [...state.tasks, { ...newTask }],
+ }));
+ },
+ updateTask: (updatedTask) => {
+ set((state) => {
+ const updatedTasks = state.tasks.map((task) => {
+ if (task.id === updatedTask.id && task.taskId == updatedTask.taskId) {
+ return {
+ ...updatedTask,
+ };
+ }
+ return task;
+ });
+
+ return {
+ ...state,
+ tasks: updatedTasks,
+ };
+ });
+ },
+ deleteTask: (taskId) => {
+ set((state) => ({
+ ...state,
+ tasks: state.tasks.filter((task) => task.taskId !== taskId),
+ }));
+ },
+ };
+};
+
+export const useTaskStore = createSelectors(
+ create()((...a) => ({
+ ...createTaskSlice(...a),
+ }))
+);
+
+export const resetAllTaskSlices = () => resetters.forEach((resetter) => resetter());
diff --git a/next/src/styles/globals.css b/next/src/styles/globals.css
new file mode 100644
index 0000000..5625411
--- /dev/null
+++ b/next/src/styles/globals.css
@@ -0,0 +1,197 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+body {
+ background: black;
+}
+
+.resend-font-effect-hero {
+ /* #Resend */
+ -webkit-text-fill-color: transparent;
+ text-shadow: -1px -1px 0 hsla(0, 0%, 100%, .15), 1px 1px 0 rgba(0, 0, 0, .1);
+}
+
+.border-gradient {
+ /* Mark as important to override react flow styling */
+ background: linear-gradient(black, black) padding-box,
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0.15)) border-box !important;
+ border: 1px solid transparent !important;
+}
+
+.radial-background-1 {
+ background-image: radial-gradient(at 170% 0%, rgb(49, 46, 129) 0, transparent 69%), radial-gradient(at 0% -30%, rgb(21, 94, 117) 0, transparent 50%);
+}
+
+.after-gradient::after {
+ background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, .8) 47.92%, rgba(255, 255, 255, 0));
+}
+
+.lower-gradient {
+ background-image: linear-gradient(
+ to top,
+ rgba(255, 255, 255, 0.03),
+ rgba(255, 255, 255, 0)
+ );
+ height: 20vh;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+
+.fading-hr {
+ position: relative;
+ height: 1px;
+ background: linear-gradient(
+ to right,
+ transparent,
+ hsla(0, 0%, 0%, 0.1),
+ hsla(0, 0%, 0%, 0.2),
+ hsla(0, 0%, 0%, 0.2),
+ hsla(20, 0%, 0%, 0.1),
+ transparent
+ );
+}
+
+.fading-hr-dark {
+ position: relative;
+ height: 1px;
+ background: linear-gradient(
+ to right,
+ transparent,
+ rgba(255, 255, 255, 0.1),
+ rgba(255, 255, 255, 0.2),
+ rgba(255, 255, 255, 0.2),
+ rgba(255, 255, 255, 0.1),
+ transparent
+ );
+}
+
+/* Used for code / table formatting within messages */
+pre {
+ @apply overflow-auto rounded-lg;
+}
+
+.window-heights {
+ @apply h-[14em] overflow-y-auto overflow-x-hidden sm-h:h-[17em] md-h:h-[22em] lg-h:h-[30em];
+}
+
+.link {
+ @apply cursor-pointer text-sky-500 underline hover:text-sky-300;
+}
+
+table {
+ @apply w-full rounded-lg text-white;
+ background-color: #0d1117;
+}
+
+th,
+td {
+ @apply rounded-lg border border-gray-700 px-4 py-2;
+}
+
+th {
+ background-color: #161b22;
+}
+
+tr:nth-child(even) {
+ background-color: #1c2028;
+}
+
+
+/* range input track style */
+input[type=range] {
+ -webkit-appearance: none;
+ appearance: none;
+ width: 100%;
+ background: transparent;
+}
+
+input[type=range]:focus {
+ outline: none;
+}
+
+input[type=range]::-ms-track {
+ width: 100%;
+ cursor: pointer;
+
+ /* Hides the slider so custom styles can be added */
+ background: transparent;
+ border-color: transparent;
+ color: transparent;
+}
+
+input[type=range] {
+ @apply bg-slate-11 rounded-md;
+ height: 0.5rem;
+}
+
+/* Customize website's scrollbar like Mac OS
+Not supports in Firefox and IE */
+/* total width */
+*::-webkit-scrollbar {
+ border-radius: 12px;
+ background-color: #889096;
+ width: 12px;
+}
+
+/* scrollbar itself */
+*::-webkit-scrollbar-thumb {
+ background-color: #D7DBDF;
+ @apply rounded-lg;
+ border: 2px solid #889096; /* This creates the illusion of padding inside the track */
+}
+
+/* set button(top and bottom of the scrollbar) */
+*::-webkit-scrollbar-button {
+ display: none;
+}
+
+/* disappearing animation */
+.animation-hide {
+ animation: hide 1s cubic-bezier(0.4, 0, 0.2, 1) 0s 1 forwards;
+}
+
+@keyframes hide {
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes border-pulse-animation {
+ 0% {
+ border-color: rgba(216, 180, 254, 0.3);
+ }
+ 50% {
+ border-color: rgba(216, 180, 254, 0.4);
+ }
+ 100% {
+ border-color: rgba(216, 180, 254, 0.3);
+ }
+}
+
+.animate-border-pulse {
+ animation: border-pulse-animation 2s infinite;
+}
+
+@keyframes moveBackground {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 100% 0;
+ }
+}
+
+.bg-stars {
+ animation: moveBackground 30s linear infinite;
+ background: url("/stars.svg");
+ background-size: cover;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -1;
+}
diff --git a/next/src/types/errors.ts b/next/src/types/errors.ts
new file mode 100644
index 0000000..f742f92
--- /dev/null
+++ b/next/src/types/errors.ts
@@ -0,0 +1,44 @@
+import axios from "axios";
+import { z } from "zod";
+
+export const MAX_LOOPS_ERROR = "MaxLoopsError";
+const platformErrorSchema = z.object({
+ error: z.string(),
+ detail: z.string(),
+ code: z.number().optional(),
+});
+
+export type PlatformError = z.infer;
+
+export const isPlatformError = (e: unknown): e is PlatformError => {
+ return platformErrorSchema.safeParse(e).success;
+};
+
+export const isRetryableError = (e: unknown): boolean => {
+ if (axios.isAxiosError(e)) {
+ if (isPlatformError(e.response?.data)) {
+ const error = e.response?.data.error;
+ return error !== MAX_LOOPS_ERROR;
+ }
+
+ return e.response?.status !== 429;
+ }
+ return true;
+};
+
+// Backend returns a value error when the user's input is invalid.
+const valueErrorDetailSchema = z.object({
+ loc: z.array(z.string()),
+ msg: z.string(),
+ type: z.string(),
+});
+
+const valueErrorSchema = z.object({
+ detail: z.array(valueErrorDetailSchema),
+});
+
+export type ValueError = z.infer;
+
+export const isValueError = (e: object): e is ValueError => {
+ return valueErrorSchema.safeParse(e).success;
+};
diff --git a/next/src/types/index.ts b/next/src/types/index.ts
new file mode 100644
index 0000000..49befe7
--- /dev/null
+++ b/next/src/types/index.ts
@@ -0,0 +1,2 @@
+export * from "./propTypes";
+export * from "./modelSettings";
diff --git a/next/src/types/message.ts b/next/src/types/message.ts
new file mode 100644
index 0000000..c899360
--- /dev/null
+++ b/next/src/types/message.ts
@@ -0,0 +1,43 @@
+import { z } from "zod";
+
+import { taskSchema } from "./task";
+
+/* Message & Task Type */
+export const [MESSAGE_TYPE_GOAL, MESSAGE_TYPE_ACTION, MESSAGE_TYPE_SYSTEM, MESSAGE_TYPE_ERROR] = [
+ "goal" as const,
+ "action" as const,
+ "system" as const,
+ "error" as const,
+];
+
+const messageSchemaBase = z.object({
+ id: z.string().optional(),
+ value: z.string(),
+ info: z.string().optional().nullable(),
+});
+
+export const nonTaskScehma = z
+ .object({
+ type: z.union([
+ z.literal(MESSAGE_TYPE_GOAL),
+ z.literal(MESSAGE_TYPE_ACTION),
+ z.literal(MESSAGE_TYPE_SYSTEM),
+ z.literal(MESSAGE_TYPE_ERROR),
+ ]),
+ })
+ .merge(messageSchemaBase);
+
+export const messageSchema = z.union([taskSchema, nonTaskScehma]);
+
+export type Message = z.infer;
+
+/*
+ * Ideal message type
+ * {
+ * icon: IconType,
+ * title: string,
+ * subtitle: string, // Optional
+ * value: string, // Markdown formatted value
+ * color: string, // Classname used for the border
+ * }
+ */
diff --git a/next/src/types/modelSettings.ts b/next/src/types/modelSettings.ts
new file mode 100644
index 0000000..a3df4c0
--- /dev/null
+++ b/next/src/types/modelSettings.ts
@@ -0,0 +1,24 @@
+import { type Language } from "../utils/languages";
+
+export const [GPT_35_TURBO, GPT_35_TURBO_16K, GPT_4] = [
+ "gpt-3.5-turbo" as const,
+ "gpt-3.5-turbo-16k" as const,
+ "gpt-4" as const,
+];
+export const GPT_MODEL_NAMES = [GPT_35_TURBO, GPT_35_TURBO_16K, GPT_4];
+export type GPTModelNames = "gpt-3.5-turbo" | "gpt-3.5-turbo-16k" | "gpt-4";
+
+export const MAX_TOKENS: Record = {
+ "gpt-3.5-turbo": 4000,
+ "gpt-3.5-turbo-16k": 16000,
+ "gpt-4": 4000,
+};
+
+export interface ModelSettings {
+ language: Language;
+ customApiKey: string;
+ customModelName: GPTModelNames;
+ customTemperature: number;
+ customMaxLoops: number;
+ maxTokens: number;
+}
diff --git a/next/src/types/next-auth.d.ts b/next/src/types/next-auth.d.ts
new file mode 100644
index 0000000..0274be3
--- /dev/null
+++ b/next/src/types/next-auth.d.ts
@@ -0,0 +1,24 @@
+import type { DefaultSession } from "next-auth";
+
+declare module "next-auth" {
+ /**
+ * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context
+ */
+ interface Session {
+ accessToken?: string;
+ user: {
+ id: string;
+ } & DefaultSession["user"] &
+ User;
+ }
+
+ interface User {
+ image?: string;
+ superAdmin: boolean;
+ organizations: {
+ id: string;
+ name: string;
+ role: string;
+ }[];
+ }
+}
diff --git a/next/src/types/propTypes.ts b/next/src/types/propTypes.ts
new file mode 100644
index 0000000..a03f821
--- /dev/null
+++ b/next/src/types/propTypes.ts
@@ -0,0 +1,4 @@
+export type toolTipProperties = {
+ message?: string;
+ disabled?: boolean;
+};
diff --git a/next/src/types/task.ts b/next/src/types/task.ts
new file mode 100644
index 0000000..7ebf878
--- /dev/null
+++ b/next/src/types/task.ts
@@ -0,0 +1,59 @@
+import { z } from "zod";
+
+export const MESSAGE_TYPE_TASK = "task";
+const messageSchemaBase = z.object({
+ id: z.string().optional(),
+ value: z.string(),
+ info: z.string().optional().nullable(),
+});
+
+export const [
+ TASK_STATUS_STARTED,
+ TASK_STATUS_EXECUTING,
+ TASK_STATUS_COMPLETED,
+ TASK_STATUS_FINAL,
+] = ["started" as const, "executing" as const, "completed" as const, "final" as const];
+
+export const TaskStatusSchema = z.union([
+ z.literal(TASK_STATUS_STARTED),
+ z.literal(TASK_STATUS_EXECUTING),
+ z.literal(TASK_STATUS_COMPLETED),
+ z.literal(TASK_STATUS_FINAL),
+ z.literal(""),
+]);
+
+export type TaskStatus = z.infer;
+
+export const taskSchema = z
+ .object({
+ taskId: z.string().optional(),
+ type: z.literal(MESSAGE_TYPE_TASK),
+ status: TaskStatusSchema,
+ result: z.string().optional(),
+ })
+ .merge(messageSchemaBase);
+
+export type Task = z.infer;
+
+/* Type Predicates */
+export const isTask = (value: unknown): value is Task => {
+ try {
+ taskSchema.parse(value);
+ return true;
+ } catch (err) {
+ return false;
+ }
+};
+
+/* Helper Functions */
+export const getTaskStatus = (value: unknown): TaskStatus | undefined => {
+ if (!isTask(value)) {
+ return;
+ }
+
+ return value.status;
+};
+
+export const isAction = (value: unknown): boolean => {
+ return isTask(value) && value.status === TASK_STATUS_COMPLETED;
+};
diff --git a/next/src/ui/button.tsx b/next/src/ui/button.tsx
new file mode 100644
index 0000000..eb109a9
--- /dev/null
+++ b/next/src/ui/button.tsx
@@ -0,0 +1,40 @@
+import type { ForwardedRef } from "react";
+import React, { forwardRef } from "react";
+
+import Loader from "../components/loader";
+import Ping from "../components/Ping";
+
+export interface ButtonProps extends React.ButtonHTMLAttributes {
+ className?: string;
+ icon?: React.ReactNode;
+ children?: React.ReactNode;
+ loader?: boolean;
+ disabled?: boolean;
+ ping?: boolean;
+ onClick?: (e: React.MouseEvent) => Promise | void;
+}
+
+const Button = forwardRef((props: ButtonProps, ref: ForwardedRef) => {
+ const onClick = (e: React.MouseEvent) => {
+ void Promise.resolve(props.onClick?.(e)).then();
+ e.preventDefault();
+ };
+
+ return (
+
+ {props.ping && }
+
+ {props.loader ? : props.children}
+
+
+ );
+});
+
+Button.displayName = "Button";
+export default Button;
diff --git a/next/src/ui/checkbox.tsx b/next/src/ui/checkbox.tsx
new file mode 100644
index 0000000..512b301
--- /dev/null
+++ b/next/src/ui/checkbox.tsx
@@ -0,0 +1,29 @@
+import clsx from "clsx";
+import type { ButtonHTMLAttributes, Dispatch, SetStateAction } from "react";
+
+export interface Props extends ButtonHTMLAttributes {
+ label?: string;
+ description?: string;
+ model: [boolean, Dispatch>];
+ className?: string;
+}
+
+function Checkbox(props: Props) {
+ return (
+
+
+ props.model[1](e.target.checked)}
+ />
+
+
+ {props.label && {props.label} }
+
+
+ );
+}
+
+export default Checkbox;
diff --git a/next/src/ui/combox.tsx b/next/src/ui/combox.tsx
new file mode 100644
index 0000000..c485cec
--- /dev/null
+++ b/next/src/ui/combox.tsx
@@ -0,0 +1,79 @@
+import { Combobox } from "@headlessui/react";
+import clsx from "clsx";
+import type { ReactNode } from "react";
+import { useState } from "react";
+import { HiCheck, HiChevronDown } from "react-icons/hi2";
+
+interface Props {
+ label: string;
+ items: T[];
+ value: T | undefined;
+ valueMapper: (e: T) => string;
+ onChange: (value: T) => void;
+ icon?: ReactNode;
+}
+
+const Combo = ({ items, ...props }: Props) => {
+ const [query, setQuery] = useState("");
+
+ const filtered =
+ query === ""
+ ? items
+ : items.filter((e) => props.valueMapper(e).toLowerCase().includes(query.toLowerCase()));
+
+ return (
+
+
+ {props.icon}
+ {props.label}
+
+
+ setQuery(event.target.value)}
+ displayValue={(e) => props.valueMapper(e as T)}
+ />
+
+
+
+
+ {filtered.length > 0 && (
+
+ {filtered.map((e, i) => (
+
+ clsx(
+ "relative cursor-default select-none py-2 pl-3 pr-9 ",
+ active ? "hover:bg-slate-3" : "text-slate-12"
+ )
+ }
+ >
+ {({ selected }) => (
+ <>
+
+ {props.valueMapper(e)}
+
+
+ {selected && (
+
+
+
+ )}
+ >
+ )}
+
+ ))}
+
+ )}
+
+
+ );
+};
+
+export default Combo;
diff --git a/next/src/ui/dialog.tsx b/next/src/ui/dialog.tsx
new file mode 100644
index 0000000..956dc3a
--- /dev/null
+++ b/next/src/ui/dialog.tsx
@@ -0,0 +1,93 @@
+import { Dialog as HeadlessDialog, Transition } from "@headlessui/react";
+import clsx from "clsx";
+import type { Dispatch, FC, PropsWithChildren, ReactNode, SetStateAction } from "react";
+import { Fragment, useRef } from "react";
+
+interface DialogProps extends PropsWithChildren {
+ open: boolean;
+ setOpen: Dispatch>;
+ icon?: ReactNode;
+ title: ReactNode;
+ actions?: ReactNode;
+ inline?: boolean;
+}
+
+const Dialog: FC = ({ open, setOpen, ...props }) => {
+ const cancelButtonRef = useRef(null);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {props.title}
+
+
+
+
+ {props.icon}
+
+
{props.children}
+
+
+
+ {props.actions}
+
+
+
+
+
+
+
+ );
+};
+
+export default Dialog;
diff --git a/next/src/ui/highlight.tsx b/next/src/ui/highlight.tsx
new file mode 100644
index 0000000..000d8d8
--- /dev/null
+++ b/next/src/ui/highlight.tsx
@@ -0,0 +1,35 @@
+import clsx from "clsx";
+import { motion, useMotionTemplate } from "framer-motion";
+import React from "react";
+
+import { useMouseMovement } from "../hooks/useMouseMovement";
+
+const colors = {
+ blue: "bg-gradient-to-r from-sky-500/30 to-sky-500/20",
+ purple: "bg-gradient-to-r from-purple-500/30 to-purple-500/20",
+} as const;
+
+interface Props {
+ color: keyof typeof colors;
+}
+
+const Highlight = (props: Props) => {
+ const { mouseX, mouseY, onMouseMove } = useMouseMovement();
+
+ const maskImage = useMotionTemplate`radial-gradient(200px at ${mouseX}px ${mouseY}px, white, transparent)`;
+ const style = { maskImage, WebkitMaskImage: maskImage };
+
+ return (
+
+
+
+ );
+};
+
+export default Highlight;
diff --git a/next/src/ui/input.tsx b/next/src/ui/input.tsx
new file mode 100644
index 0000000..e5ddd28
--- /dev/null
+++ b/next/src/ui/input.tsx
@@ -0,0 +1,64 @@
+import clsx from "clsx";
+import React from "react";
+
+interface Props extends React.InputHTMLAttributes {
+ name: string;
+ label?: string;
+ attributes?: { [key: string]: string | number | string[] };
+ helpText?: string | React.ReactNode;
+ icon?: React.ReactNode;
+ disabled?: boolean;
+ right?: React.ReactNode;
+ handleFocusChange?: (focused: boolean) => void;
+}
+
+const Input = (props: Props) => {
+ return (
+
+ {props.label && (
+
+ {props.icon}
+ {props.label}
+
+ {props.type == "range" && (
+ ({props.value})
+ )}
+
+ )}
+
+ {props.helpText && (
+
+ {props.helpText}
+
+ )}
+
+ props.handleFocusChange && props.handleFocusChange(true)}
+ onBlur={() => props.handleFocusChange && props.handleFocusChange(false)}
+ {...(props.helpText ? { "aria-describedby": `${props.name}-description` } : {})}
+ {...props.attributes}
+ />
+ {props.right}
+
+
+
+ );
+};
+
+export default Input;
diff --git a/next/src/ui/select.tsx b/next/src/ui/select.tsx
new file mode 100644
index 0000000..f5bcf18
--- /dev/null
+++ b/next/src/ui/select.tsx
@@ -0,0 +1,99 @@
+import { Listbox, Transition } from "@headlessui/react";
+import clsx from "clsx";
+import { Fragment } from "react";
+import type { IconType } from "react-icons";
+import { FaCheck } from "react-icons/fa";
+import { HiOutlineChevronUpDown } from "react-icons/hi2";
+
+interface Props {
+ value?: T;
+ onChange?: (value: T | undefined) => void | Promise;
+ items?: T[];
+ valueMapper?: (item?: T) => string | undefined;
+ icon: IconType;
+ disabled?: boolean;
+ defaultValue: T;
+}
+
+export default function Select(props: Props) {
+ return (
+
+ {({ open }) => (
+ <>
+
+
+
+ {props.icon({
+ className: "text-white bg-black rounded-sm ring-2 ring-black",
+ size: "1em",
+ })}
+
+ {props.valueMapper?.(props.value || props.defaultValue)}
+
+
+
+
+
+
+
+ {(!props.items || props.items?.length == 0) && (
+ No options available
+ )}
+ {props.items?.map((item, i) => (
+
+ clsx(
+ active ? "bg-indigo-600 text-white" : "text-gray-900",
+ "relative cursor-default select-none py-2 pl-3 pr-9"
+ )
+ }
+ value={item}
+ >
+ {({ selected, active }) => (
+ <>
+
+
+ {props.valueMapper?.(item)}
+
+
+
+ {selected ? (
+
+
+
+ ) : null}
+ >
+ )}
+
+ ))}
+
+
+
+ >
+ )}
+
+ );
+}
diff --git a/next/src/utils/api.ts b/next/src/utils/api.ts
new file mode 100644
index 0000000..c99a366
--- /dev/null
+++ b/next/src/utils/api.ts
@@ -0,0 +1,65 @@
+/**
+ * This is the client-side entrypoint for your tRPC API.
+ * It's used to create the `api` object which contains the Next.js App-wrapper
+ * as well as your typesafe react-query hooks.
+ *
+ * We also create a few inference helpers for input and output types
+ */
+import { httpBatchLink, loggerLink } from "@trpc/client";
+import { createTRPCNext } from "@trpc/next";
+import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
+import superjson from "superjson";
+
+import { type AppRouter } from "../server/api/root";
+
+const getBaseUrl = () => {
+ if (typeof window !== "undefined") return ""; // browser should use relative url
+ if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url
+ return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost
+};
+
+/**
+ * A set of typesafe react-query hooks for your tRPC API
+ */
+export const api = createTRPCNext({
+ config() {
+ return {
+ /**
+ * Transformer used for data de-serialization from the server
+ * @see https://trpc.io/docs/data-transformers
+ **/
+ transformer: superjson,
+
+ /**
+ * Links used to determine request flow from client to server
+ * @see https://trpc.io/docs/links
+ * */
+ links: [
+ loggerLink({
+ enabled: (opts) =>
+ process.env.NODE_ENV === "development" ||
+ (opts.direction === "down" && opts.result instanceof Error),
+ }),
+ httpBatchLink({
+ url: `${getBaseUrl()}/api/trpc`,
+ }),
+ ],
+ };
+ },
+ /**
+ * Whether tRPC should await queries when server rendering pages
+ * @see https://trpc.io/docs/nextjs#ssr-boolean-default-false
+ */
+ ssr: false,
+});
+
+/**
+ * Inference helper for inputs
+ * @example type HelloInput = RouterInputs['example']['hello']
+ **/
+export type RouterInputs = inferRouterInputs;
+/**
+ * Inference helper for outputs
+ * @example type HelloOutput = RouterOutputs['example']['hello']
+ **/
+export type RouterOutputs = inferRouterOutputs;
diff --git a/next/src/utils/constants.ts b/next/src/utils/constants.ts
new file mode 100644
index 0000000..296ae68
--- /dev/null
+++ b/next/src/utils/constants.ts
@@ -0,0 +1,20 @@
+import { ENGLISH } from "./languages";
+import type { ModelSettings } from "../types";
+
+export const GPT_35_TURBO = "gpt-3.5-turbo" as const;
+export const GPT_4 = "gpt-4" as const;
+export const GPT_MODEL_NAMES = [GPT_35_TURBO, GPT_4];
+
+export const DEFAULT_MAX_LOOPS_FREE = 25 as const;
+export const DEFAULT_MAX_LOOPS_CUSTOM_API_KEY = 10 as const;
+
+export const getDefaultModelSettings = (): ModelSettings => {
+ return {
+ customApiKey: "",
+ language: ENGLISH,
+ customModelName: GPT_35_TURBO,
+ customTemperature: 0.8,
+ customMaxLoops: DEFAULT_MAX_LOOPS_FREE,
+ maxTokens: 1250,
+ };
+};
diff --git a/next/src/utils/helpers.ts b/next/src/utils/helpers.ts
new file mode 100644
index 0000000..734e34c
--- /dev/null
+++ b/next/src/utils/helpers.ts
@@ -0,0 +1,18 @@
+type Constructor = new (...args: unknown[]) => T;
+
+/* Check whether array is of the specified type */
+export const isArrayOfType = (
+ arr: unknown[] | unknown,
+ type: Constructor | string
+): arr is T[] => {
+ return (
+ Array.isArray(arr) &&
+ arr.every((item): item is T => {
+ if (typeof type === "string") {
+ return typeof item === type;
+ } else {
+ return item instanceof type;
+ }
+ })
+ );
+};
diff --git a/next/src/utils/i18next.n.ts b/next/src/utils/i18next.n.ts
new file mode 100644
index 0000000..3eead56
--- /dev/null
+++ b/next/src/utils/i18next.n.ts
@@ -0,0 +1,21 @@
+import i18next from "i18next";
+import { initReactI18next } from "react-i18next";
+
+await i18next.use(initReactI18next).init({
+ fallbackLng: ["en"],
+ debug: true,
+ interpolation: {
+ escapeValue: false, // react already safes from xss
+ },
+ keySeparator: false,
+ react: {
+ useSuspense: false,
+ },
+ defaultNS: "translation",
+ backend: {
+ loadPath: "./public/locales/{{lng}}/{{ns}}.json",
+ crossDomain: false,
+ },
+});
+
+export default i18next;
diff --git a/next/src/utils/interfaces.ts b/next/src/utils/interfaces.ts
new file mode 100644
index 0000000..2ea218c
--- /dev/null
+++ b/next/src/utils/interfaces.ts
@@ -0,0 +1,38 @@
+import type { Session } from "next-auth";
+
+import type { Analysis } from "../services/agent/analysis";
+import type { GPTModelNames, ModelSettings } from "../types";
+
+export interface ApiModelSettings {
+ language: string;
+ model: GPTModelNames;
+ temperature: number;
+ max_tokens: number;
+}
+
+export const toApiModelSettings = (modelSettings: ModelSettings, session?: Session) => {
+ const allowCustomization = session?.user;
+
+ return {
+ language: modelSettings.language.name,
+ model: allowCustomization ? modelSettings.customModelName : "gpt-3.5-turbo",
+ temperature: modelSettings.customTemperature,
+ max_tokens: allowCustomization ? modelSettings.maxTokens : 500,
+ custom_api_key: modelSettings.customApiKey,
+ };
+};
+
+export interface RequestBody {
+ run_id?: string;
+ model_settings: ApiModelSettings;
+ goal: string;
+ task?: string;
+ tasks?: string[];
+ last_task?: string;
+ result?: string;
+ results?: string[];
+ completed_tasks?: string[];
+ analysis?: Analysis;
+ tool_names?: string[];
+ message?: string; // Used for the chat endpoint
+}
diff --git a/next/src/utils/languages.ts b/next/src/utils/languages.ts
new file mode 100644
index 0000000..3d495aa
--- /dev/null
+++ b/next/src/utils/languages.ts
@@ -0,0 +1,41 @@
+export type Language = {
+ code: string;
+ name: string;
+ flag: string;
+};
+
+export const ENGLISH = { code: "en", name: "English", flag: "đēđ¸" };
+
+export const availableLanguages: Language[] = [
+ ENGLISH,
+ { code: "fr", name: "Français", flag: "đĢđˇ" },
+ { code: "es", name: "EspaÃąol", flag: "đĒđ¸" },
+ { code: "de", name: "Deutsch", flag: "đŠđĒ" },
+ { code: "ja", name: "æĨæŦčĒ", flag: "đ¯đĩ" },
+ { code: "ko", name: "íęĩė´", flag: "đ°đˇ" },
+ { code: "zh", name: "įŽäŊä¸æ", flag: "đ¨đŗ" },
+ { code: "zhtw", name: "įšéĢä¸æ", flag: "đšđŧ" },
+ { code: "hr", name: "Hrvatski", flag: "đđˇ" },
+ { code: "lt", name: "LietuviÅŗ", flag: "đąđš" },
+ { code: "uk", name: "ĐŖĐēŅĐ°ŅĐŊŅŅĐēĐ°", flag: "đēđĻ" },
+ { code: "pt", name: "PortuguÃĒs", flag: "đĩđš" },
+ { code: "it", name: "Italiano", flag: "đŽđš" },
+ { code: "hu", name: "Magyar", flag: "đđē" },
+ { code: "nl", name: "Nederlands", flag: "đŗđą" },
+ { code: "pl", name: "Polski", flag: "đĩđą" },
+ { code: "ru", name: "Đ ŅŅŅĐēиК", flag: "đˇđē" },
+ { code: "ro", name: "RomÃĸnÄ", flag: "đˇđ´" },
+ { code: "sk", name: "SlovenÄina", flag: "đ¸đ°" },
+ { code: "tr", name: "TÃŧrkçe", flag: "đšđˇ" },
+];
+
+export const languages: Language[] = availableLanguages.sort((a, b) =>
+ a.name.localeCompare(b.name)
+);
+
+export const findLanguage = (nameOrLocale: string): Language => {
+ const selectedLanguage = languages.find(
+ (lang) => lang.code === nameOrLocale || lang.name === nameOrLocale.substring(4).trim()
+ );
+ return selectedLanguage || ENGLISH;
+};
diff --git a/next/src/utils/translations.ts b/next/src/utils/translations.ts
new file mode 100644
index 0000000..175237c
--- /dev/null
+++ b/next/src/utils/translations.ts
@@ -0,0 +1,10 @@
+import {i18n} from "next-i18next";
+
+type Namespace =
+ 'errors' | 'drawer'
+
+
+export const translate = (key: string, ns: Namespace | undefined) => {
+ const opts = !!ns ? { ns } : undefined
+ return i18n?.t(key, key, opts) ?? key;
+}
diff --git a/next/src/utils/user.ts b/next/src/utils/user.ts
new file mode 100644
index 0000000..cf67cc3
--- /dev/null
+++ b/next/src/utils/user.ts
@@ -0,0 +1,10 @@
+export const get_avatar = (user?: {
+ name?: string | null;
+ email?: string | null;
+ image?: string | null;
+}) =>
+ user?.image ||
+ "https://avatar.vercel.sh/" +
+ (user?.email || "") +
+ ".svg?text=" +
+ (user?.name?.substr(0, 2).toUpperCase() || "");
diff --git a/next/src/utils/whitespace.ts b/next/src/utils/whitespace.ts
new file mode 100644
index 0000000..b253af9
--- /dev/null
+++ b/next/src/utils/whitespace.ts
@@ -0,0 +1,7 @@
+function regex() {
+ return /^[\s\f\n\r\t\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\x09\x0a\x0b\x0c\x0d\x20\xa0]+$/;
+}
+
+export function isEmptyOrBlank(value: string) {
+ return regex().test(value) || value === '';
+}
diff --git a/next/tailwind.config.cjs b/next/tailwind.config.cjs
new file mode 100644
index 0000000..a23b5cf
--- /dev/null
+++ b/next/tailwind.config.cjs
@@ -0,0 +1,277 @@
+/** @type {import("tailwindcss").Config} */
+const defaultTheme = require("tailwindcss/defaultTheme");
+
+module.exports = {
+ content: [
+ "./src/**/*.{js,ts,jsx,tsx}",
+ "./node_modules/@tremor/**/*.{js,ts,jsx,tsx}",
+ ],
+ darkMode: "class",
+ theme: {
+ transparent: "transparent",
+ current: "currentColor",
+ screens: {
+ "xs": "300px",
+ "xmd": "850px",
+ "sm-h": { "raw": "(min-height: 700px)" },
+ "md-h": { "raw": "(min-height: 800px)" },
+ "lg-h": { "raw": "(min-height: 1000px)" },
+
+ ...defaultTheme.screens
+ },
+ extend: {
+ typography: (theme) => ({
+ DEFAULT: {
+ css: {
+ color: theme('colors.gray.900'), // Change color as per your need
+ a: {
+ color: theme('colors.blue.500'), // Change color as per your need
+ '&:hover': {
+ color: theme('colors.blue.600'), // Change color as per your need
+ },
+ },
+ 'h1,h2,h3,h4': {
+ color: theme('colors.white'), // This is where you change your heading color
+ },
+ 'b,strong': {
+ color: theme('colors.gray.500'), // This is where you change your bold text color
+ },
+ },
+ },
+ }),
+ backgroundImage: {
+ 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', // Add bg-gradient-radial for radial gradients
+ },
+ boxShadow: {
+ "xs": "0px 0px 0px 0.75px rgba(0, 0, 0, 0.05), 0px 2px 4px rgba(0, 0, 0, 0.05)",
+ // light
+ "tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)",
+ "tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
+ "tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
+ // dark
+ "dark-tremor-input": "0 1px 2px 0 rgb(0 0 0 / 0.05)",
+ "dark-tremor-card": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
+ "dark-tremor-dropdown": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
+
+ "depth-1": "0 2px 4px 0 rgba(0, 0, 0, 0.05), 0 0 0 0.75px rgba(0, 0, 0, 0.05), 0 0 12px -2px rgba(0, 0, 0, 0.05)",
+ "depth-2": "0 0 0 0.75px rgba(0, 0, 0, 0.05), 0 8px 32px 0 rgba(39, 40, 51, 0.05), 0 4px 16px 0 rgba(39, 40, 51, 0.05)",
+ "depth-3": "0 0 0 0.75px rgba(0, 0, 0, 0.05), 0 8px 32px 0 rgba(39, 40, 51, 0.05), 0 4px 16px 0 rgba(39, 40, 51, 0.05), 0 8px 24px -4px rgba(0, 0, 0, 0.20)"
+ },
+ borderRadius: {
+ "tremor-small": "0.375rem",
+ "tremor-default": "0.5rem",
+ "tremor-full": "9999px",
+ },
+ fontSize: {
+ "tremor-label": ["0.75rem"],
+ "tremor-default": ["0.875rem", { lineHeight: "1.25rem" }],
+ "tremor-title": ["1.125rem", { lineHeight: "1.75rem" }],
+ "tremor-metric": ["1.875rem", { lineHeight: "2.25rem" }],
+ },
+ fontFamily: {
+ inter: ["Inter", ...defaultTheme.fontFamily.sans]
+ },
+
+ colors: {
+ slate: {
+ 1: "#FBFCFD",
+ 2: "#F8F9FA",
+ 3: "#F1F3F5",
+ 4: "#ECEEF0",
+ 5: "#E6E8EB",
+ 6: "#DFE3E6",
+ 7: "#D7DBDF",
+ 8: "#C1C8CD",
+ 9: "#889096",
+ 10: "#7E868C",
+ 11: "#687076",
+ 12: "#11181C",
+ },
+ // light mode
+ tremor: {
+ brand: {
+ faint: "#eff6ff", // blue-50
+ muted: "#bfdbfe", // blue-200
+ subtle: "#60a5fa", // blue-400
+ DEFAULT: "#3b82f6", // blue-500
+ emphasis: "#1d4ed8", // blue-700
+ inverted: "#ffffff", // white
+ },
+ background: {
+ muted: "#f9fafb", // gray-50
+ subtle: "#f3f4f6", // gray-100
+ DEFAULT: "#ffffff", // white
+ emphasis: "#374151", // gray-700
+ },
+ border: {
+ DEFAULT: "#e5e7eb", // gray-200
+ },
+ ring: {
+ DEFAULT: "#e5e7eb", // gray-200
+ },
+ content: {
+ subtle: "#9ca3af", // gray-400
+ DEFAULT: "#6b7280", // gray-500
+ emphasis: "#374151", // gray-700
+ strong: "#111827", // gray-900
+ inverted: "#ffffff", // white
+ },
+ },
+ // dark mode
+ "dark-tremor": {
+ brand: {
+ faint: "#0B1229", // custom
+ muted: "#172554", // blue-950
+ subtle: "#1e40af", // blue-800
+ DEFAULT: "#3b82f6", // blue-500
+ emphasis: "#60a5fa", // blue-400
+ inverted: "#030712", // gray-950
+ },
+ background: {
+ muted: "#131A2B", // custom
+ subtle: "#1f2937", // gray-800
+ DEFAULT: "#111827", // gray-900
+ emphasis: "#d1d5db", // gray-300
+ },
+ border: {
+ DEFAULT: "#1f2937", // gray-800
+ },
+ ring: {
+ DEFAULT: "#1f2937", // gray-800
+ },
+ content: {
+ subtle: "#4b5563", // gray-600
+ DEFAULT: "#6b7280", // gray-600
+ emphasis: "#e5e7eb", // gray-200
+ strong: "#f9fafb", // gray-50
+ inverted: "#000000", // black
+ },
+ },
+ blue: {
+ base: {
+ dark: "hsl(199, 89%, 48%)",
+ light: "hsl(199, 89%, 48%)",
+ },
+ hover: {
+ dark: "hsl(199, 80%, 30%)",
+ light: "hsl(199, 90%, 40%)",
+ },
+ focusVisible: {
+ dark: "hsl(208, 79%, 51%)",
+ light: "hsl(208, 79%, 55%)",
+ },
+ },
+ amber: {
+ base: {
+ dark: "hsl(39, 100%, 50%)",
+ light: "hsl(45, 100%, 50%)",
+ },
+ hover: {
+ dark: "hsl(39, 100%, 40%)",
+ light: "hsl(45, 100%, 45%)",
+ },
+ focusVisible: {
+ dark: "hsl(39, 85%, 30%)",
+ light: "hsl(45, 85%, 35%)",
+ }
+ },
+ red: {
+ base: {
+ dark: "hsl(3, 100%, 61%)",
+ light: "hsl(3, 100%, 59%)",
+ },
+ hover: {
+ dark: "hsl(3, 100% 45%)",
+ light: "hsl(3, 100%, 40%)",
+ },
+ focusVisible: {
+ dark: "hsl(3, 85%, 40%)",
+ light: "hsl(3, 85%, 35%)",
+ }
+ },
+ green: {
+ base: {
+ dark: "hsl(143, 71%, 45%)",
+ light: "hsl(143, 71%, 40%)",
+ },
+ hover: {
+ dark: "hsl(143, 65%, 40%)",
+ light: "hsl(143, 71%, 33%)",
+ },
+ focusVisible: {
+ dark: "hsl(143, 65%, 35%)",
+ light: "hsl(143, 71%, 30%)",
+ }
+ },
+ shade: {
+ 100: {
+ dark: "hsl(0, 0%, 100%)",
+ light: "hsl(0, 0%, 0%)",
+ },
+ 200: {
+ dark: "hsl(240, 3%, 69%)",
+ light: "hsl(240, 2%, 30%)",
+ },
+ 300: {
+ dark: "hsl(240, 2%, 49%)",
+ light: "hsl(240, 2%, 57%)",
+ },
+ 400: {
+ dark: "hsl(240, 1%, 33%)",
+ light: "hsl(240, 3%, 69%)",
+ },
+ 500: {
+ dark: "hsl(240, 1%, 27%)",
+ light: "hsl(240, 5%, 79%)",
+ },
+ 600: {
+ dark: "hsl(240, 2%, 22%)",
+ light: "hsl(240, 6%, 83%)",
+ },
+ 700: {
+ dark: "hsl(240, 3%, 15%)",
+ light: "hsl(240, 11%, 91%)",
+ },
+ 800: {
+ dark: "hsl(240, 6%, 10%)",
+ light: "hsl(240, 24%, 96%)",
+ }
+ }
+ },
+ },
+ },
+ safelist: [
+ {
+ pattern:
+ /^(bg-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ variants: ["hover", "ui-selected"],
+ },
+ {
+ pattern:
+ /^(text-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ variants: ["hover", "ui-selected"],
+ },
+ {
+ pattern:
+ /^(border-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ variants: ["hover", "ui-selected"],
+ },
+ {
+ pattern:
+ /^(ring-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ },
+ {
+ pattern:
+ /^(stroke-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ },
+ {
+ pattern:
+ /^(fill-(?:slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(?:50|100|200|300|400|500|600|700|800|900|950))$/,
+ },
+ ],
+ plugins: [
+ require('@tailwindcss/typography'),
+ require('@tailwindcss/forms'),
+ require("tailwindcss-radix"),
+ ]
+};
diff --git a/next/tsconfig.json b/next/tsconfig.json
new file mode 100644
index 0000000..648e745
--- /dev/null
+++ b/next/tsconfig.json
@@ -0,0 +1,29 @@
+{
+ "compilerOptions": {
+ "noImplicitAny": false,
+ "target": "es2017",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "noUncheckedIndexedAccess": true
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ "**/*.cjs",
+ "**/*.mjs",
+ "**/*.js"
+ ],
+ "exclude": ["node_modules", "venv"]
+}
diff --git a/next/wait-for-db.sh b/next/wait-for-db.sh
new file mode 100755
index 0000000..4daf5b8
--- /dev/null
+++ b/next/wait-for-db.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env sh
+
+host="$1"
+port="$2"
+
+until echo "SELECT 1;" | nc "$host" "$port" > /dev/null 2>&1; do
+ >&2 echo "Database is unavailable - Sleeping..."
+ sleep 2
+done
+
+>&2 echo "Database is available! Continuing..."
diff --git a/platform/.dockerignore b/platform/.dockerignore
new file mode 100644
index 0000000..173ed8d
--- /dev/null
+++ b/platform/.dockerignore
@@ -0,0 +1,145 @@
+### Python template
+
+deploy/
+.idea/
+.vscode/
+.git/
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+poetry.lock
diff --git a/platform/.editorconfig b/platform/.editorconfig
new file mode 100644
index 0000000..eb831fe
--- /dev/null
+++ b/platform/.editorconfig
@@ -0,0 +1,31 @@
+root = true
+
+[*]
+tab_width = 4
+end_of_line = lf
+max_line_length = 88
+ij_visual_guides = 88
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{js,py,html}]
+charset = utf-8
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yml,yaml}]
+indent_style = space
+indent_size = 2
+
+[Makefile]
+indent_style = tab
+
+[.flake8]
+indent_style = space
+indent_size = 2
+
+[*.py]
+indent_style = space
+indent_size = 4
+ij_python_from_import_parentheses_force_if_multiline = true
diff --git a/platform/.flake8 b/platform/.flake8
new file mode 100644
index 0000000..e5c9aab
--- /dev/null
+++ b/platform/.flake8
@@ -0,0 +1,115 @@
+[flake8]
+max-complexity = 6
+inline-quotes = double
+max-line-length = 88
+extend-ignore = E203
+docstring_style=sphinx
+
+ignore =
+ ; Found `f` string
+ WPS305,
+ ; Missing docstring in public module
+ D100,
+ ; Missing docstring in magic method
+ D105,
+ ; Missing docstring in __init__
+ D107,
+ ; Found `__init__.py` module with logic
+ WPS412,
+ ; Found class without a base class
+ WPS306,
+ ; Missing docstring in public nested class
+ D106,
+ ; First line should be in imperative mood
+ D401,
+ ; Found wrong variable name
+ WPS110,
+ ; Found `__init__.py` module with logic
+ WPS326,
+ ; Found string constant over-use
+ WPS226,
+ ; Found upper-case constant in a class
+ WPS115,
+ ; Found nested function
+ WPS602,
+ ; Found method without arguments
+ WPS605,
+ ; Found overused expression
+ WPS204,
+ ; Found too many module members
+ WPS202,
+ ; Found too high module cognitive complexity
+ WPS232,
+ ; line break before binary operator
+ W503,
+ ; Found module with too many imports
+ WPS201,
+ ; Inline strong start-string without end-string.
+ RST210,
+ ; Found nested class
+ WPS431,
+ ; Found wrong module name
+ WPS100,
+ ; Found too many methods
+ WPS214,
+ ; Found too long ``try`` body
+ WPS229,
+ ; Found unpythonic getter or setter
+ WPS615,
+ ; Found a line that starts with a dot
+ WPS348,
+ ; Found complex default value (for dependency injection)
+ WPS404,
+ ; not perform function calls in argument defaults (for dependency injection)
+ B008,
+ ; Model should define verbose_name in its Meta inner class
+ DJ10,
+ ; Model should define verbose_name_plural in its Meta inner class
+ DJ11,
+ ; Found mutable module constant.
+ WPS407,
+ ; Found too many empty lines in `def`
+ WPS473,
+ ; Found missing trailing comma
+ C812,
+
+per-file-ignores =
+ ; all tests
+ test_*.py,tests.py,tests_*.py,*/tests/*,conftest.py:
+ ; Use of assert detected
+ S101,
+ ; Found outer scope names shadowing
+ WPS442,
+ ; Found too many local variables
+ WPS210,
+ ; Found magic number
+ WPS432,
+ ; Missing parameter(s) in Docstring
+ DAR101,
+ ; Found too many arguments
+ WPS211,
+
+ ; all init files
+ __init__.py:
+ ; ignore not used imports
+ F401,
+ ; ignore import with wildcard
+ F403,
+ ; Found wrong metadata variable
+ WPS410,
+
+exclude =
+ ./.cache,
+ ./.git,
+ ./.idea,
+ ./.mypy_cache,
+ ./.pytest_cache,
+ ./.venv,
+ ./venv,
+ ./env,
+ ./cached_venv,
+ ./docs,
+ ./deploy,
+ ./var,
+ ./.vscode,
+ *migrations*,
diff --git a/platform/.gitignore b/platform/.gitignore
new file mode 100644
index 0000000..fb7b30f
--- /dev/null
+++ b/platform/.gitignore
@@ -0,0 +1,143 @@
+### Python template
+
+.idea/
+.vscode/
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+*.pem
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+ssl/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+*.sqlite3
+*.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
diff --git a/platform/.pre-commit-config.yaml b/platform/.pre-commit-config.yaml
new file mode 100644
index 0000000..fefc842
--- /dev/null
+++ b/platform/.pre-commit-config.yaml
@@ -0,0 +1,63 @@
+---
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v2.4.0
+ hooks:
+ - id: check-ast
+ - id: trailing-whitespace
+ - id: check-toml
+ - id: end-of-file-fixer
+
+ - repo: https://github.com/asottile/add-trailing-comma
+ rev: v2.1.0
+ hooks:
+ - id: add-trailing-comma
+
+ - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
+ rev: v2.1.0
+ hooks:
+ - id: pretty-format-yaml
+ args:
+ - --autofix
+ - --preserve-quotes
+ - --indent=2
+
+ - repo: local
+ hooks:
+ - id: black
+ name: Format with Black
+ entry: poetry run black
+ language: system
+ types: [python]
+
+ - id: autoflake
+ name: autoflake
+ entry: poetry run autoflake
+ language: system
+ types: [python]
+ args: [--in-place, --remove-all-unused-imports, --remove-duplicate-keys]
+
+ - id: isort
+ name: isort
+ entry: poetry run isort
+ language: system
+ types: [python]
+
+ - id: flake8
+ name: Check with Flake8
+ entry: poetry run flake8
+ language: system
+ pass_filenames: false
+ types: [python]
+ args: [--count, .]
+
+ - id: mypy
+ name: Validate types with MyPy
+ entry: poetry run mypy
+ language: system
+ types: [python]
+ pass_filenames: false
+ args:
+ - "reworkd_platform"
diff --git a/platform/Dockerfile b/platform/Dockerfile
new file mode 100644
index 0000000..fbdf5fa
--- /dev/null
+++ b/platform/Dockerfile
@@ -0,0 +1,37 @@
+FROM python:3.11-slim-buster as prod
+
+RUN apt-get update && apt-get install -y \
+ default-libmysqlclient-dev \
+ gcc \
+ pkg-config \
+ openjdk-11-jdk \
+ build-essential \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN pip install poetry==1.4.2
+
+# Configuring poetry
+RUN poetry config virtualenvs.create false
+
+# Copying requirements of a project
+COPY pyproject.toml /app/src/
+WORKDIR /app/src
+
+# Installing requirements
+RUN poetry install --only main
+# Removing gcc
+RUN apt-get purge -y \
+ g++ \
+ gcc \
+ pkg-config \
+ && rm -rf /var/lib/apt/lists/*
+
+# Copying actual application
+COPY . /app/src/
+RUN poetry install --only main
+
+CMD ["/usr/local/bin/python", "-m", "reworkd_platform"]
+
+FROM prod as dev
+
+RUN poetry install
diff --git a/platform/README.md b/platform/README.md
new file mode 100644
index 0000000..db545ea
--- /dev/null
+++ b/platform/README.md
@@ -0,0 +1,151 @@
+# reworkd_platform
+
+This project was generated using fastapi_template.
+
+## Poetry
+
+This project uses poetry. It's a modern dependency management
+tool.
+
+To run the project use this set of commands:
+
+```bash
+poetry install
+poetry run python -m reworkd_platform
+```
+
+This will start the server on the configured host.
+
+You can find swagger documentation at `/api/docs`.
+
+You can read more about poetry here: https://python-poetry.org/
+
+## Docker
+
+You can start the project with docker using this command:
+
+```bash
+docker-compose -f deploy/docker-compose.yml --project-directory . up --build
+```
+
+If you want to develop in docker with autoreload add `-f deploy/docker-compose.dev.yml` to your docker command.
+Like this:
+
+```bash
+docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . up --build
+```
+
+This command exposes the web application on port 8000, mounts current directory and enables autoreload.
+
+But you have to rebuild image every time you modify `poetry.lock` or `pyproject.toml` with this command:
+
+```bash
+docker-compose -f deploy/docker-compose.yml --project-directory . build
+```
+
+## Project structure
+
+```bash
+$ tree "reworkd_platform"
+reworkd_platform
+âââ conftest.py # Fixtures for all tests.
+âââ db # module contains db configurations
+â  âââ dao # Data Access Objects. Contains different classes to interact with database.
+â  âââ models # Package contains different models for ORMs.
+âââ __main__.py # Startup script. Starts uvicorn.
+âââ services # Package for different external services such as rabbit or redis etc.
+âââ settings.py # Main configuration settings for project.
+âââ static # Static content.
+âââ tests # Tests for project.
+âââ web # Package contains web server. Handlers, startup config.
+ âââ api # Package with all handlers.
+ â  âââ router.py # Main router.
+ âââ application.py # FastAPI application configuration.
+ âââ lifetime.py # Contains actions to perform on startup and shutdown.
+```
+
+## Configuration
+
+This application can be configured with environment variables.
+
+You can create `.env` file in the root directory and place all
+environment variables here.
+
+All environment variables should start with "REWORKD_PLATFORM_" prefix.
+
+For example if you see in your "reworkd_platform/settings.py" a variable named like
+`random_parameter`, you should provide the "REWORKD_PLATFORM_RANDOM_PARAMETER"
+variable to configure the value. This behaviour can be changed by overriding `env_prefix` property
+in `reworkd_platform.settings.Settings.Config`.
+
+An example of .env file:
+
+```bash
+REWORKD_PLATFORM_RELOAD="True"
+REWORKD_PLATFORM_PORT="8000"
+REWORKD_PLATFORM_ENVIRONMENT="development"
+```
+
+You can read more about BaseSettings class here: https://pydantic-docs.helpmanual.io/usage/settings/
+
+## Pre-commit
+
+To install pre-commit simply run inside the shell:
+
+```bash
+pre-commit install
+```
+
+pre-commit is very useful to check your code before publishing it.
+It's configured using .pre-commit-config.yaml file.
+
+By default it runs:
+
+* black (formats your code);
+* mypy (validates types);
+* isort (sorts imports in all files);
+* flake8 (spots possibe bugs);
+
+You can read more about pre-commit here: https://pre-commit.com/
+
+## Running tests
+
+If you want to run it in docker, simply run:
+
+```bash
+docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . run --build --rm api pytest -vv .
+docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . down
+```
+
+For running tests on your local machine.
+
+1. you need to start a database.
+
+I prefer doing it with docker:
+
+```
+docker run -p "3306:3306" -e "MYSQL_PASSWORD=reworkd_platform" -e "MYSQL_USER=reworkd_platform" -e "MYSQL_DATABASE=reworkd_platform" -e ALLOW_EMPTY_PASSWORD=yes bitnami/mysql:8.0.30
+```
+
+2. Run the pytest.
+
+```bash
+pytest -vv .
+```
+
+## Running linters
+
+```bash
+# Flake
+poetry run black .
+poetry run autoflake --in-place --remove-duplicate-keys --remove-all-unused-imports -r .
+poetry run flake8
+poetry run mypy .
+
+# Pytest
+poetry run pytest -vv --cov="reworkd_platform" .
+
+# Bump packages
+poetry self add poetry-plugin-up
+poetry up --latest
+```
diff --git a/platform/entrypoint.sh b/platform/entrypoint.sh
new file mode 100644
index 0000000..4941d16
--- /dev/null
+++ b/platform/entrypoint.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env sh
+
+host=agentgpt_db
+port=3306
+
+until echo "SELECT 1;" | nc "$host" "$port" > /dev/null 2>&1; do
+ >&2 echo "Database is unavailable - Sleeping..."
+ sleep 2
+done
+
+>&2 echo "Database is available! Continuing..."
+
+# Run cmd
+exec "$@"
diff --git a/platform/poetry.lock b/platform/poetry.lock
new file mode 100644
index 0000000..dc313ee
--- /dev/null
+++ b/platform/poetry.lock
@@ -0,0 +1,3549 @@
+# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
+
+[[package]]
+name = "aiohttp"
+version = "3.8.6"
+description = "Async http client/server framework (asyncio)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"},
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"},
+ {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"},
+ {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"},
+ {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"},
+ {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"},
+ {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"},
+ {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"},
+ {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"},
+ {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"},
+ {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"},
+ {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"},
+ {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"},
+ {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"},
+ {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"},
+ {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"},
+ {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"},
+ {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"},
+ {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"},
+ {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"},
+ {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"},
+ {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"},
+ {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"},
+ {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"},
+ {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"},
+]
+
+[package.dependencies]
+aiosignal = ">=1.1.2"
+async-timeout = ">=4.0.0a3,<5.0"
+attrs = ">=17.3.0"
+charset-normalizer = ">=2.0,<4.0"
+frozenlist = ">=1.1.1"
+multidict = ">=4.5,<7.0"
+yarl = ">=1.0,<2.0"
+
+[package.extras]
+speedups = ["Brotli", "aiodns", "cchardet"]
+
+[[package]]
+name = "aiokafka"
+version = "0.8.1"
+description = "Kafka integration with asyncio."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "aiokafka-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f6044ed270b946d31f265903b5eb101940ed0ff3a902eaf8178103c943bbcc9"},
+ {file = "aiokafka-0.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e24839088fd6d3ff481cc09a48ea487b997328df11630bc0a1b88255edbcfe9"},
+ {file = "aiokafka-0.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3816bcfc3c57dfa4ed77fe1dc3a9a464e17b6400061348155115f282c8150c47"},
+ {file = "aiokafka-0.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2bf97548fa77ad31062ca580368d346b16ba9fdca5856c435f256f3699ab12b"},
+ {file = "aiokafka-0.8.1-cp310-cp310-win32.whl", hash = "sha256:6421ee81084532f915501074a132acb2afc8cb88bf5ddb11e584230a30f6f006"},
+ {file = "aiokafka-0.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f19d90b7360bc2239fcd8b147508ae39c3e5b1acfc8e6a2a9b0f306070f7ffe"},
+ {file = "aiokafka-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:673c163dee62dfe45146d5250af0e395da5cc92b63f8878c592abc7dc1862899"},
+ {file = "aiokafka-0.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4693fbe3c10f125bf3e2df8a8ccbca3eff2bdaaa6589d28c7532c10e7d84598b"},
+ {file = "aiokafka-0.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbffc431d9285328c0bc108949132ae11cec863f1dd5a43a1fc3d45a69ffb8a9"},
+ {file = "aiokafka-0.8.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fccd599ab6b3fda4f4187d854b343f153b40d05d6774be9acf238618da50031"},
+ {file = "aiokafka-0.8.1-cp311-cp311-win32.whl", hash = "sha256:90960356513f3979754261b132b12a96b0d9e3c6eb44420e3a90a7c31156a81a"},
+ {file = "aiokafka-0.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:7f09784322c0d2c4fcc222add4337a5ac394aa30a248eb4e0e4587a125573c75"},
+ {file = "aiokafka-0.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff318d29ecbeea8c58d69c91c24d48d7ed4a8d3e829b607e670d118a9a35d5ba"},
+ {file = "aiokafka-0.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af6df9a41e08b61d7e62c0a416feeabd81bad76fa5c70d499b083d6af9ce72c3"},
+ {file = "aiokafka-0.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d327d66b41c4e3bafff7f9efb71936a08f940aa665680717e20862e4272a068"},
+ {file = "aiokafka-0.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24373bb2d519abac036d5b04ebc43452ef4ad1916953b6678b9801a9c93ba237"},
+ {file = "aiokafka-0.8.1-cp38-cp38-win32.whl", hash = "sha256:fd8f9e17bc9cd2ea664a7f5133aede39a8fffebffe0c450252d475dbdedb4a35"},
+ {file = "aiokafka-0.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:2fa54b8b068d9d8735cb6757a0f48168f8cf9be68860b0bae6b3ed1684cef49b"},
+ {file = "aiokafka-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bf7473c55dc7959d4b7f9d750fa6017b325813d6cb761e488c2d9ea44e922954"},
+ {file = "aiokafka-0.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4332d37cb9d52181cfda4236566b4028c7c188549277f87bcc3027577d72b1b"},
+ {file = "aiokafka-0.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f43d2afd7d3e4407ada8d754895fad7c344ca00648a8a38418d76564eaaf6cd"},
+ {file = "aiokafka-0.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8a641a8102c51422afe111d4bc70c51f335f38fc5906e4c839bd17afeaf3cb2"},
+ {file = "aiokafka-0.8.1-cp39-cp39-win32.whl", hash = "sha256:935da8c4da9a00a1e16020d88e578206097b4bb72ebc2a25fbd2cb817907ef28"},
+ {file = "aiokafka-0.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:45cd28af6590d6a999bb706803166570121ba8a5a0d06c51ebd8a59fab53593c"},
+ {file = "aiokafka-0.8.1.tar.gz", hash = "sha256:d300188e358cd29989c817f6ee2a2965a039e5a71de8ade6f80f02ebb9bd07b8"},
+]
+
+[package.dependencies]
+async-timeout = "*"
+kafka-python = ">=2.0.2"
+packaging = "*"
+
+[package.extras]
+all = ["gssapi", "lz4", "python-snappy (>=0.5)", "zstandard"]
+gssapi = ["gssapi"]
+lz4 = ["lz4"]
+snappy = ["python-snappy (>=0.5)"]
+zstd = ["zstandard"]
+
+[[package]]
+name = "aiomysql"
+version = "0.1.1"
+description = "MySQL driver for asyncio."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "aiomysql-0.1.1-py3-none-any.whl", hash = "sha256:b66fa1481ca71c5ee0d933ec3abf51f6136543a3710ba80b134eb33da7ed6f13"},
+ {file = "aiomysql-0.1.1.tar.gz", hash = "sha256:0d686c4fdae6b67d1825d8be60fa3b0e644fca2c84d3c936d850fc259c8e107e"},
+]
+
+[package.dependencies]
+PyMySQL = ">=1.0"
+
+[package.extras]
+rsa = ["PyMySQL[rsa] (>=1.0)"]
+sa = ["sqlalchemy (>=1.0,<1.4)"]
+
+[[package]]
+name = "aiosignal"
+version = "1.3.1"
+description = "aiosignal: a list of registered asynchronous callbacks"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
+ {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+]
+
+[package.dependencies]
+frozenlist = ">=1.1.0"
+
+[[package]]
+name = "anyio"
+version = "3.7.1"
+description = "High level compatibility layer for multiple asynchronous event loop implementations"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"},
+ {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"},
+]
+
+[package.dependencies]
+idna = ">=2.8"
+sniffio = ">=1.1"
+
+[package.extras]
+doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"]
+test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (<0.22)"]
+
+[[package]]
+name = "astor"
+version = "0.8.1"
+description = "Read/rewrite/write Python ASTs"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+files = [
+ {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"},
+ {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"},
+]
+
+[[package]]
+name = "async-timeout"
+version = "4.0.3"
+description = "Timeout context manager for asyncio programs"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
+ {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
+]
+
+[[package]]
+name = "attrs"
+version = "23.1.0"
+description = "Classes Without Boilerplate"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
+ {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
+]
+
+[package.extras]
+cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
+dev = ["attrs[docs,tests]", "pre-commit"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
+tests = ["attrs[tests-no-zope]", "zope-interface"]
+tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+
+[[package]]
+name = "autoflake"
+version = "2.2.1"
+description = "Removes unused imports and unused variables"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "autoflake-2.2.1-py3-none-any.whl", hash = "sha256:265cde0a43c1f44ecfb4f30d95b0437796759d07be7706a2f70e4719234c0f79"},
+ {file = "autoflake-2.2.1.tar.gz", hash = "sha256:62b7b6449a692c3c9b0c916919bbc21648da7281e8506bcf8d3f8280e431ebc1"},
+]
+
+[package.dependencies]
+pyflakes = ">=3.0.0"
+
+[[package]]
+name = "autopep8"
+version = "2.0.4"
+description = "A tool that automatically formats Python code to conform to the PEP 8 style guide"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "autopep8-2.0.4-py2.py3-none-any.whl", hash = "sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb"},
+ {file = "autopep8-2.0.4.tar.gz", hash = "sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"},
+]
+
+[package.dependencies]
+pycodestyle = ">=2.10.0"
+
+[[package]]
+name = "aws-secretsmanager-caching"
+version = "1.1.1.5"
+description = "Client-side AWS Secrets Manager caching library"
+category = "main"
+optional = false
+python-versions = ">3.5"
+files = [
+ {file = "aws_secretsmanager_caching-1.1.1.5-py3-none-any.whl", hash = "sha256:6afb0233b6ae0183b518138e79b3a53f26432f3a71b03df99801e02e2456adc0"},
+ {file = "aws_secretsmanager_caching-1.1.1.5.tar.gz", hash = "sha256:5cee2762bb89b72f3e5123feee8e45fbe44ffe163bfca08b28f27b2e2b7772e1"},
+]
+
+[package.dependencies]
+botocore = "*"
+
+[[package]]
+name = "bandit"
+version = "1.7.5"
+description = "Security oriented static analyser for python code."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"},
+ {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""}
+GitPython = ">=1.0.1"
+PyYAML = ">=5.3.1"
+rich = "*"
+stevedore = ">=1.20.0"
+
+[package.extras]
+test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"]
+toml = ["tomli (>=1.1.0)"]
+yaml = ["PyYAML"]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.2"
+description = "Screen-scraping library"
+category = "main"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+ {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"},
+ {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"},
+]
+
+[package.dependencies]
+soupsieve = ">1.2"
+
+[package.extras]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
+[[package]]
+name = "black"
+version = "23.10.1"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"},
+ {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"},
+ {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"},
+ {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"},
+ {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"},
+ {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"},
+ {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"},
+ {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"},
+ {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"},
+ {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"},
+ {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"},
+ {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"},
+ {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"},
+ {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"},
+ {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"},
+ {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"},
+ {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"},
+ {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+packaging = ">=22.0"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "boto3"
+version = "1.28.75"
+description = "The AWS SDK for Python"
+category = "main"
+optional = false
+python-versions = ">= 3.7"
+files = [
+ {file = "boto3-1.28.75-py3-none-any.whl", hash = "sha256:b959decd588982bc919bfcbebc7916926b05003a0093e7f2845362da4f5dd9fc"},
+ {file = "boto3-1.28.75.tar.gz", hash = "sha256:63d772a784e8e35ee51974eb1c20dff5faa51b007d22c5647783f18966bf4042"},
+]
+
+[package.dependencies]
+botocore = ">=1.31.75,<1.32.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.7.0,<0.8.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.31.75"
+description = "Low-level, data-driven core of boto 3."
+category = "main"
+optional = false
+python-versions = ">= 3.7"
+files = [
+ {file = "botocore-1.31.75-py3-none-any.whl", hash = "sha256:fa078c4aa9a5777b3ede756540e62fec551e13d39cf7abf9a37bb81981496d68"},
+ {file = "botocore-1.31.75.tar.gz", hash = "sha256:d704ea9867b2227de0350bc2a5ca2543349e164ecb5d15edbfacbb05f2056482"},
+]
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""}
+
+[package.extras]
+crt = ["awscrt (==0.16.26)"]
+
+[[package]]
+name = "certifi"
+version = "2023.7.22"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.16.0"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
+ {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
+ {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
+ {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
+ {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
+ {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
+ {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
+ {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
+ {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
+ {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
+ {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
+ {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
+ {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
+ {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
+ {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
+ {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
+ {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
+ {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
+ {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
+ {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
+ {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
+ {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
+ {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
+ {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
+ {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
+ {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.4.0"
+description = "Validate configuration and produce human readable error messages."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
+ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.3.2"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "coverage"
+version = "7.3.2"
+description = "Code coverage measurement for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"},
+ {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"},
+ {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"},
+ {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"},
+ {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"},
+ {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"},
+ {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"},
+ {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"},
+ {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"},
+ {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"},
+ {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"},
+ {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"},
+ {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"},
+ {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"},
+ {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"},
+ {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"},
+ {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"},
+ {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"},
+ {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"},
+ {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"},
+ {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"},
+ {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"},
+ {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"},
+ {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"},
+ {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"},
+ {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"},
+ {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"},
+ {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"},
+]
+
+[package.extras]
+toml = ["tomli"]
+
+[[package]]
+name = "cryptography"
+version = "41.0.5"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797"},
+ {file = "cryptography-41.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5"},
+ {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147"},
+ {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696"},
+ {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da"},
+ {file = "cryptography-41.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20"},
+ {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548"},
+ {file = "cryptography-41.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d"},
+ {file = "cryptography-41.0.5-cp37-abi3-win32.whl", hash = "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936"},
+ {file = "cryptography-41.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81"},
+ {file = "cryptography-41.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1"},
+ {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72"},
+ {file = "cryptography-41.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88"},
+ {file = "cryptography-41.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf"},
+ {file = "cryptography-41.0.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e"},
+ {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8"},
+ {file = "cryptography-41.0.5-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179"},
+ {file = "cryptography-41.0.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d"},
+ {file = "cryptography-41.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1"},
+ {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86"},
+ {file = "cryptography-41.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723"},
+ {file = "cryptography-41.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84"},
+ {file = "cryptography-41.0.5.tar.gz", hash = "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"},
+]
+
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
+docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
+nox = ["nox"]
+pep8test = ["black", "check-sdist", "mypy", "ruff"]
+sdist = ["build"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
+test-randomorder = ["pytest-randomly"]
+
+[[package]]
+name = "darglint"
+version = "1.8.1"
+description = "A utility for ensuring Google-style docstrings stay up to date with the source code."
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+files = [
+ {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"},
+ {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"},
+]
+
+[[package]]
+name = "dataclasses-json"
+version = "0.5.9"
+description = "Easily serialize dataclasses to and from JSON"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "dataclasses-json-0.5.9.tar.gz", hash = "sha256:e9ac87b73edc0141aafbce02b44e93553c3123ad574958f0fe52a534b6707e8e"},
+ {file = "dataclasses_json-0.5.9-py3-none-any.whl", hash = "sha256:1280542631df1c375b7bc92e5b86d39e06c44760d7e3571a537b3b8acabf2f0c"},
+]
+
+[package.dependencies]
+marshmallow = ">=3.3.0,<4.0.0"
+marshmallow-enum = ">=1.5.1,<2.0.0"
+typing-inspect = ">=0.4.0"
+
+[package.extras]
+dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=7.2.0)", "setuptools", "simplejson", "twine", "types-dataclasses", "wheel"]
+
+[[package]]
+name = "distlib"
+version = "0.3.7"
+description = "Distribution utilities"
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"},
+ {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
+]
+
+[[package]]
+name = "dnspython"
+version = "2.4.2"
+description = "DNS toolkit"
+category = "main"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"},
+ {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"},
+]
+
+[package.extras]
+dnssec = ["cryptography (>=2.6,<42.0)"]
+doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"]
+doq = ["aioquic (>=0.9.20)"]
+idna = ["idna (>=2.1,<4.0)"]
+trio = ["trio (>=0.14,<0.23)"]
+wmi = ["wmi (>=1.5.1,<2.0.0)"]
+
+[[package]]
+name = "docutils"
+version = "0.20.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
+ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
+]
+
+[[package]]
+name = "dotmap"
+version = "1.3.30"
+description = "ordered, dynamically-expandable dot-access dictionary"
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "dotmap-1.3.30-py3-none-any.whl", hash = "sha256:bd9fa15286ea2ad899a4d1dc2445ed85a1ae884a42effb87c89a6ecce71243c6"},
+ {file = "dotmap-1.3.30.tar.gz", hash = "sha256:5821a7933f075fb47563417c0e92e0b7c031158b4c9a6a7e56163479b658b368"},
+]
+
+[[package]]
+name = "eradicate"
+version = "2.3.0"
+description = "Removes commented-out code."
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "eradicate-2.3.0-py3-none-any.whl", hash = "sha256:2b29b3dd27171f209e4ddd8204b70c02f0682ae95eecb353f10e8d72b149c63e"},
+ {file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"},
+]
+
+[[package]]
+name = "fastapi"
+version = "0.98.0"
+description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "fastapi-0.98.0-py3-none-any.whl", hash = "sha256:f4165fb1fe3610c52cb1b8282c1480de9c34bc270f56a965aa93a884c350d605"},
+ {file = "fastapi-0.98.0.tar.gz", hash = "sha256:0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b"},
+]
+
+[package.dependencies]
+pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0"
+starlette = ">=0.27.0,<0.28.0"
+
+[package.extras]
+all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
+
+[[package]]
+name = "filelock"
+version = "3.13.1"
+description = "A platform independent file lock."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"},
+ {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"]
+typing = ["typing-extensions (>=4.8)"]
+
+[[package]]
+name = "flake8"
+version = "6.0.0"
+description = "the modular source code checker: pep8 pyflakes and co"
+category = "dev"
+optional = false
+python-versions = ">=3.8.1"
+files = [
+ {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"},
+ {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"},
+]
+
+[package.dependencies]
+mccabe = ">=0.7.0,<0.8.0"
+pycodestyle = ">=2.10.0,<2.11.0"
+pyflakes = ">=3.0.0,<3.1.0"
+
+[[package]]
+name = "flake8-bandit"
+version = "4.1.1"
+description = "Automated security testing with bandit and flake8."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "flake8_bandit-4.1.1-py3-none-any.whl", hash = "sha256:4c8a53eb48f23d4ef1e59293657181a3c989d0077c9952717e98a0eace43e06d"},
+ {file = "flake8_bandit-4.1.1.tar.gz", hash = "sha256:068e09287189cbfd7f986e92605adea2067630b75380c6b5733dab7d87f9a84e"},
+]
+
+[package.dependencies]
+bandit = ">=1.7.3"
+flake8 = ">=5.0.0"
+
+[[package]]
+name = "flake8-broken-line"
+version = "1.0.0"
+description = "Flake8 plugin to forbid backslashes for line breaks"
+category = "dev"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "flake8_broken_line-1.0.0-py3-none-any.whl", hash = "sha256:96c964336024a5030dc536a9f6fb02aa679e2d2a6b35b80a558b5136c35832a9"},
+ {file = "flake8_broken_line-1.0.0.tar.gz", hash = "sha256:e2c6a17f8d9a129e99c1320fce89b33843e2963871025c4c2bb7b8b8d8732a85"},
+]
+
+[package.dependencies]
+flake8 = ">5"
+
+[[package]]
+name = "flake8-bugbear"
+version = "23.9.16"
+description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
+category = "dev"
+optional = false
+python-versions = ">=3.8.1"
+files = [
+ {file = "flake8-bugbear-23.9.16.tar.gz", hash = "sha256:90cf04b19ca02a682feb5aac67cae8de742af70538590509941ab10ae8351f71"},
+ {file = "flake8_bugbear-23.9.16-py3-none-any.whl", hash = "sha256:b182cf96ea8f7a8595b2f87321d7d9b28728f4d9c3318012d896543d19742cb5"},
+]
+
+[package.dependencies]
+attrs = ">=19.2.0"
+flake8 = ">=6.0.0"
+
+[package.extras]
+dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest", "tox"]
+
+[[package]]
+name = "flake8-commas"
+version = "2.1.0"
+description = "Flake8 lint for trailing commas."
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-commas-2.1.0.tar.gz", hash = "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263"},
+ {file = "flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"},
+]
+
+[package.dependencies]
+flake8 = ">=2"
+
+[[package]]
+name = "flake8-comprehensions"
+version = "3.14.0"
+description = "A flake8 plugin to help you write better list/set/dict comprehensions."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"},
+ {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"},
+]
+
+[package.dependencies]
+flake8 = ">=3.0,<3.2.0 || >3.2.0"
+
+[[package]]
+name = "flake8-debugger"
+version = "4.1.2"
+description = "ipdb/pdb statement checker plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8-debugger-4.1.2.tar.gz", hash = "sha256:52b002560941e36d9bf806fca2523dc7fb8560a295d5f1a6e15ac2ded7a73840"},
+ {file = "flake8_debugger-4.1.2-py3-none-any.whl", hash = "sha256:0a5e55aeddcc81da631ad9c8c366e7318998f83ff00985a49e6b3ecf61e571bf"},
+]
+
+[package.dependencies]
+flake8 = ">=3.0"
+pycodestyle = "*"
+
+[[package]]
+name = "flake8-docstrings"
+version = "1.7.0"
+description = "Extension for flake8 which uses pydocstyle to check docstrings"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"},
+ {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"},
+]
+
+[package.dependencies]
+flake8 = ">=3"
+pydocstyle = ">=2.1"
+
+[[package]]
+name = "flake8-eradicate"
+version = "1.5.0"
+description = "Flake8 plugin to find commented out code"
+category = "dev"
+optional = false
+python-versions = ">=3.8,<4.0"
+files = [
+ {file = "flake8_eradicate-1.5.0-py3-none-any.whl", hash = "sha256:18acc922ad7de623f5247c7d5595da068525ec5437dd53b22ec2259b96ce9d22"},
+ {file = "flake8_eradicate-1.5.0.tar.gz", hash = "sha256:aee636cb9ecb5594a7cd92d67ad73eb69909e5cc7bd81710cf9d00970f3983a6"},
+]
+
+[package.dependencies]
+attrs = "*"
+eradicate = ">=2.0,<3.0"
+flake8 = ">5"
+
+[[package]]
+name = "flake8-isort"
+version = "6.1.0"
+description = "flake8 plugin that integrates isort ."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "flake8-isort-6.1.0.tar.gz", hash = "sha256:d4639343bac540194c59fb1618ac2c285b3e27609f353bef6f50904d40c1643e"},
+]
+
+[package.dependencies]
+flake8 = "*"
+isort = ">=5.0.0,<6"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "flake8-quotes"
+version = "3.3.2"
+description = "Flake8 lint for quotes."
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"},
+]
+
+[package.dependencies]
+flake8 = "*"
+
+[[package]]
+name = "flake8-rst-docstrings"
+version = "0.3.0"
+description = "Python docstring reStructuredText (RST) validator for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "flake8-rst-docstrings-0.3.0.tar.gz", hash = "sha256:d1ce22b4bd37b73cd86b8d980e946ef198cfcc18ed82fedb674ceaa2f8d1afa4"},
+ {file = "flake8_rst_docstrings-0.3.0-py3-none-any.whl", hash = "sha256:f8c3c6892ff402292651c31983a38da082480ad3ba253743de52989bdc84ca1c"},
+]
+
+[package.dependencies]
+flake8 = ">=3"
+pygments = "*"
+restructuredtext-lint = "*"
+
+[package.extras]
+develop = ["build", "twine"]
+
+[[package]]
+name = "flake8-string-format"
+version = "0.3.0"
+description = "string format checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "flake8-string-format-0.3.0.tar.gz", hash = "sha256:65f3da786a1461ef77fca3780b314edb2853c377f2e35069723348c8917deaa2"},
+ {file = "flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af"},
+]
+
+[package.dependencies]
+flake8 = "*"
+
+[[package]]
+name = "frozenlist"
+version = "1.4.0"
+description = "A list-like structure which implements collections.abc.MutableSequence"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"},
+ {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"},
+ {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"},
+ {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"},
+ {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"},
+ {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"},
+ {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"},
+ {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"},
+ {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"},
+ {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"},
+ {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"},
+ {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"},
+ {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"},
+ {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"},
+ {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"},
+ {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"},
+ {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"},
+]
+
+[[package]]
+name = "gitdb"
+version = "4.0.11"
+description = "Git Object Database"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
+ {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
+]
+
+[package.dependencies]
+smmap = ">=3.0.1,<6"
+
+[[package]]
+name = "gitpython"
+version = "3.1.40"
+description = "GitPython is a Python library used to interact with Git repositories"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"},
+ {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"},
+]
+
+[package.dependencies]
+gitdb = ">=4.0.1,<5"
+
+[package.extras]
+test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"]
+
+[[package]]
+name = "greenlet"
+version = "3.0.1"
+description = "Lightweight in-process concurrent programming"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "greenlet-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2"},
+ {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63"},
+ {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e"},
+ {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846"},
+ {file = "greenlet-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9"},
+ {file = "greenlet-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72"},
+ {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234"},
+ {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884"},
+ {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94"},
+ {file = "greenlet-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c"},
+ {file = "greenlet-3.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0"},
+ {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5"},
+ {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d"},
+ {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445"},
+ {file = "greenlet-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a"},
+ {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de"},
+ {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166"},
+ {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"},
+ {file = "greenlet-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1"},
+ {file = "greenlet-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8"},
+ {file = "greenlet-3.0.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd"},
+ {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9"},
+ {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e"},
+ {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a"},
+ {file = "greenlet-3.0.1-cp38-cp38-win32.whl", hash = "sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd"},
+ {file = "greenlet-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6"},
+ {file = "greenlet-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1"},
+ {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d"},
+ {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8"},
+ {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546"},
+ {file = "greenlet-3.0.1-cp39-cp39-win32.whl", hash = "sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57"},
+ {file = "greenlet-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619"},
+ {file = "greenlet-3.0.1.tar.gz", hash = "sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b"},
+]
+
+[package.extras]
+docs = ["Sphinx"]
+test = ["objgraph", "psutil"]
+
+[[package]]
+name = "grpcio"
+version = "1.59.2"
+description = "HTTP/2-based RPC framework"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "grpcio-1.59.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:d2fa68a96a30dd240be80bbad838a0ac81a61770611ff7952b889485970c4c71"},
+ {file = "grpcio-1.59.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cf0dead5a2c5a3347af2cfec7131d4f2a2e03c934af28989c9078f8241a491fa"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e420ced29b5904cdf9ee5545e23f9406189d8acb6750916c2db4793dada065c6"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b230028a008ae1d0f430acb227d323ff8a619017415cf334c38b457f814119f"},
+ {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4a3833c0e067f3558538727235cd8a49709bff1003200bbdefa2f09334e4b1"},
+ {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6b25ed37c27e652db01be341af93fbcea03d296c024d8a0e680017a268eb85dd"},
+ {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73abb8584b0cf74d37f5ef61c10722adc7275502ab71789a8fe3cb7ef04cf6e2"},
+ {file = "grpcio-1.59.2-cp310-cp310-win32.whl", hash = "sha256:d6f70406695e3220f09cd7a2f879333279d91aa4a8a1d34303b56d61a8180137"},
+ {file = "grpcio-1.59.2-cp310-cp310-win_amd64.whl", hash = "sha256:3c61d641d4f409c5ae46bfdd89ea42ce5ea233dcf69e74ce9ba32b503c727e29"},
+ {file = "grpcio-1.59.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:3059668df17627f0e0fa680e9ef8c995c946c792612e9518f5cc1503be14e90b"},
+ {file = "grpcio-1.59.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:72ca2399097c0b758198f2ff30f7178d680de8a5cfcf3d9b73a63cf87455532e"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c978f864b35f2261e0819f5cd88b9830b04dc51bcf055aac3c601e525a10d2ba"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9411e24328a2302e279e70cae6e479f1fddde79629fcb14e03e6d94b3956eabf"},
+ {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb7e0fe6ad73b7f06d7e2b689c19a71cf5cc48f0c2bf8608469e51ffe0bd2867"},
+ {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c2504eed520958a5b77cc99458297cb7906308cb92327f35fb7fbbad4e9b2188"},
+ {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2171c39f355ba5b551c5d5928d65aa6c69807fae195b86ef4a7d125bcdb860a9"},
+ {file = "grpcio-1.59.2-cp311-cp311-win32.whl", hash = "sha256:d2794f0e68b3085d99b4f6ff9c089f6fdd02b32b9d3efdfbb55beac1bf22d516"},
+ {file = "grpcio-1.59.2-cp311-cp311-win_amd64.whl", hash = "sha256:2067274c88bc6de89c278a672a652b4247d088811ece781a4858b09bdf8448e3"},
+ {file = "grpcio-1.59.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:535561990e075fa6bd4b16c4c3c1096b9581b7bb35d96fac4650f1181e428268"},
+ {file = "grpcio-1.59.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a213acfbf186b9f35803b52e4ca9addb153fc0b67f82a48f961be7000ecf6721"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:6959fb07e8351e20501ffb8cc4074c39a0b7ef123e1c850a7f8f3afdc3a3da01"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e82c5cf1495244adf5252f925ac5932e5fd288b3e5ab6b70bec5593074b7236c"},
+ {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023088764012411affe7db183d1ada3ad9daf2e23ddc719ff46d7061de661340"},
+ {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da2d94c15f88cd40d7e67f7919d4f60110d2b9d5b1e08cf354c2be773ab13479"},
+ {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6009386a2df66159f64ac9f20425ae25229b29b9dd0e1d3dd60043f037e2ad7e"},
+ {file = "grpcio-1.59.2-cp312-cp312-win32.whl", hash = "sha256:75c6ecb70e809cf1504465174343113f51f24bc61e22a80ae1c859f3f7034c6d"},
+ {file = "grpcio-1.59.2-cp312-cp312-win_amd64.whl", hash = "sha256:cbe946b3e6e60a7b4618f091e62a029cb082b109a9d6b53962dd305087c6e4fd"},
+ {file = "grpcio-1.59.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:f8753a6c88d1d0ba64302309eecf20f70d2770f65ca02d83c2452279085bfcd3"},
+ {file = "grpcio-1.59.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f1ef0d39bc1feb420caf549b3c657c871cad4ebbcf0580c4d03816b0590de0cf"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:4c93f4abbb54321ee6471e04a00139c80c754eda51064187963ddf98f5cf36a4"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08d77e682f2bf730a4961eea330e56d2f423c6a9b91ca222e5b1eb24a357b19f"},
+ {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff16d68bf453275466a9a46739061a63584d92f18a0f5b33d19fc97eb69867c"},
+ {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4abb717e320e74959517dc8e84a9f48fbe90e9abe19c248541e9418b1ce60acd"},
+ {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36f53c2b3449c015880e7d55a89c992c357f176327b0d2873cdaaf9628a37c69"},
+ {file = "grpcio-1.59.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cc3e4cd087f07758b16bef8f31d88dbb1b5da5671d2f03685ab52dece3d7a16e"},
+ {file = "grpcio-1.59.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:27f879ae604a7fcf371e59fba6f3ff4635a4c2a64768bd83ff0cac503142fef4"},
+ {file = "grpcio-1.59.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:7cf05053242f61ba94014dd3a986e11a083400a32664058f80bf4cf817c0b3a1"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e1727c1c0e394096bb9af185c6923e8ea55a5095b8af44f06903bcc0e06800a2"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d573e70a6fe77555fb6143c12d3a7d3fa306632a3034b4e7c59ca09721546f8"},
+ {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31176aa88f36020055ace9adff2405a33c8bdbfa72a9c4980e25d91b2f196873"},
+ {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11168ef43e4a43ff1b1a65859f3e0ef1a173e277349e7fb16923ff108160a8cd"},
+ {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:53c9aa5ddd6857c0a1cd0287225a2a25873a8e09727c2e95c4aebb1be83a766a"},
+ {file = "grpcio-1.59.2-cp38-cp38-win32.whl", hash = "sha256:3b4368b33908f683a363f376dfb747d40af3463a6e5044afee07cf9436addf96"},
+ {file = "grpcio-1.59.2-cp38-cp38-win_amd64.whl", hash = "sha256:0a754aff9e3af63bdc4c75c234b86b9d14e14a28a30c4e324aed1a9b873d755f"},
+ {file = "grpcio-1.59.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:1f9524d1d701e399462d2c90ba7c193e49d1711cf429c0d3d97c966856e03d00"},
+ {file = "grpcio-1.59.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f93dbf58f03146164048be5426ffde298b237a5e059144847e4940f5b80172c3"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6da6dea3a1bacf99b3c2187e296db9a83029ed9c38fd4c52b7c9b7326d13c828"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f09cffa619adfb44799fa4a81c2a1ad77c887187613fb0a8f201ab38d89ba1"},
+ {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35aa9657f5d5116d23b934568e0956bd50c615127810fffe3ac356a914c176a"},
+ {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74100fecaec8a535e380cf5f2fb556ff84957d481c13e54051c52e5baac70541"},
+ {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:128e20f57c5f27cb0157e73756d1586b83c1b513ebecc83ea0ac37e4b0e4e758"},
+ {file = "grpcio-1.59.2-cp39-cp39-win32.whl", hash = "sha256:686e975a5d16602dc0982c7c703948d17184bd1397e16c8ee03511ecb8c4cdda"},
+ {file = "grpcio-1.59.2-cp39-cp39-win_amd64.whl", hash = "sha256:242adc47725b9a499ee77c6a2e36688fa6c96484611f33b1be4c57ab075a92dd"},
+ {file = "grpcio-1.59.2.tar.gz", hash = "sha256:d8f9cd4ad1be90b0cf350a2f04a38a36e44a026cac1e036ac593dc48efe91d52"},
+]
+
+[package.extras]
+protobuf = ["grpcio-tools (>=1.59.2)"]
+
+[[package]]
+name = "h11"
+version = "0.14.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
+ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
+]
+
+[[package]]
+name = "httpcore"
+version = "0.18.0"
+description = "A minimal low-level HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "httpcore-0.18.0-py3-none-any.whl", hash = "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced"},
+ {file = "httpcore-0.18.0.tar.gz", hash = "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9"},
+]
+
+[package.dependencies]
+anyio = ">=3.0,<5.0"
+certifi = "*"
+h11 = ">=0.13,<0.15"
+sniffio = ">=1.0.0,<2.0.0"
+
+[package.extras]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (>=1.0.0,<2.0.0)"]
+
+[[package]]
+name = "httptools"
+version = "0.6.1"
+description = "A collection of framework independent HTTP protocol utils."
+category = "main"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"},
+ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"},
+ {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"},
+ {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"},
+ {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"},
+ {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"},
+ {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"},
+ {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"},
+ {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"},
+ {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"},
+ {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"},
+ {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"},
+ {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"},
+ {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"},
+ {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"},
+ {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"},
+ {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"},
+ {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"},
+ {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"},
+ {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"},
+ {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"},
+ {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"},
+ {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"},
+ {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"},
+ {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"},
+ {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"},
+ {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"},
+ {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"},
+ {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"},
+ {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"},
+ {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"},
+ {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"},
+ {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"},
+ {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"},
+ {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"},
+ {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"},
+]
+
+[package.extras]
+test = ["Cython (>=0.29.24,<0.30.0)"]
+
+[[package]]
+name = "httpx"
+version = "0.25.0"
+description = "The next generation HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "httpx-0.25.0-py3-none-any.whl", hash = "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100"},
+ {file = "httpx-0.25.0.tar.gz", hash = "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875"},
+]
+
+[package.dependencies]
+certifi = "*"
+httpcore = ">=0.18.0,<0.19.0"
+idna = "*"
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotli", "brotlicffi"]
+cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
+http2 = ["h2 (>=3,<5)"]
+socks = ["socksio (>=1.0.0,<2.0.0)"]
+
+[[package]]
+name = "identify"
+version = "2.5.31"
+description = "File identification library for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"},
+ {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"},
+]
+
+[package.extras]
+license = ["ukkonen"]
+
+[[package]]
+name = "idna"
+version = "3.4"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
+ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
+]
+
+[[package]]
+name = "iniconfig"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
+ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
+]
+
+[[package]]
+name = "isort"
+version = "5.12.0"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
+ {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
+]
+
+[package.extras]
+colors = ["colorama (>=0.4.3)"]
+pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
+plugins = ["setuptools"]
+requirements-deprecated-finder = ["pip-api", "pipreqs"]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+description = "JSON Matching Expressions"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
+ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
+]
+
+[[package]]
+name = "kafka-python"
+version = "2.0.2"
+description = "Pure Python client for Apache Kafka"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "kafka-python-2.0.2.tar.gz", hash = "sha256:04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3"},
+ {file = "kafka_python-2.0.2-py2.py3-none-any.whl", hash = "sha256:2d92418c7cb1c298fa6c7f0fb3519b520d0d7526ac6cb7ae2a4fc65a51a94b6e"},
+]
+
+[package.extras]
+crc32c = ["crc32c"]
+
+[[package]]
+name = "lanarky"
+version = "0.7.16"
+description = "FastAPI framework to build production-grade LLM applications"
+category = "main"
+optional = false
+python-versions = ">=3.9,<4.0"
+files = [
+ {file = "lanarky-0.7.16-py3-none-any.whl", hash = "sha256:589c315652edc8c98fc2f54ef008574b0e96b2bf4e8bc7299bdfc05fd7c0a433"},
+ {file = "lanarky-0.7.16.tar.gz", hash = "sha256:dbfdb927afdaa52524337b65384230ca99158f2523133d0a0a57c937bd263fdb"},
+]
+
+[package.dependencies]
+fastapi = ">=0.97.0"
+langchain = ">=0.0.200"
+python-dotenv = ">=1.0.0,<2.0.0"
+
+[package.extras]
+gptcache = ["gptcache (>=0.1.31,<0.2.0)"]
+openai = ["openai (>=0.27.8,<0.28.0)", "tiktoken (>=0.4.0,<0.5.0)"]
+redis = ["redis (>=4.5.5,<5.0.0)"]
+
+[[package]]
+name = "langchain"
+version = "0.0.295"
+description = "Building applications with LLMs through composability"
+category = "main"
+optional = false
+python-versions = ">=3.8.1,<4.0"
+files = [
+ {file = "langchain-0.0.295-py3-none-any.whl", hash = "sha256:eb7fad53c2af68771369dfb6d1242b38ab413994491d9b9a49027aafeb22220a"},
+ {file = "langchain-0.0.295.tar.gz", hash = "sha256:e91d2df38bbbecc513b6c6e22090371862450ec8dba22fa9433e2ac71dba106b"},
+]
+
+[package.dependencies]
+aiohttp = ">=3.8.3,<4.0.0"
+dataclasses-json = ">=0.5.7,<0.6.0"
+langsmith = ">=0.0.38,<0.1.0"
+numexpr = ">=2.8.4,<3.0.0"
+numpy = ">=1,<2"
+pydantic = ">=1,<3"
+PyYAML = ">=5.3"
+requests = ">=2,<3"
+SQLAlchemy = ">=1.4,<3"
+tenacity = ">=8.1.0,<9.0.0"
+
+[package.extras]
+all = ["O365 (>=2.0.26,<3.0.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "amadeus (>=8.1.0)", "arxiv (>=1.4,<2.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "awadb (>=0.3.9,<0.4.0)", "azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "beautifulsoup4 (>=4,<5)", "clarifai (>=9.1.0)", "clickhouse-connect (>=0.5.14,<0.6.0)", "cohere (>=4,<5)", "deeplake (>=3.6.8,<4.0.0)", "docarray[hnswlib] (>=0.32.0,<0.33.0)", "duckduckgo-search (>=3.8.3,<4.0.0)", "elasticsearch (>=8,<9)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-auth (>=2.18.1,<3.0.0)", "google-search-results (>=2,<3)", "gptcache (>=0.1.7)", "html2text (>=2020.1.16,<2021.0.0)", "huggingface_hub (>=0,<1)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lancedb (>=0.1,<0.2)", "langkit (>=0.0.6,<0.1.0)", "lark (>=1.1.5,<2.0.0)", "libdeeplake (>=0.0.60,<0.0.61)", "librosa (>=0.10.0.post2,<0.11.0)", "lxml (>=4.9.2,<5.0.0)", "manifest-ml (>=0.0.1,<0.0.2)", "marqo (>=1.2.4,<2.0.0)", "momento (>=1.5.0,<2.0.0)", "nebula3-python (>=3.4.0,<4.0.0)", "neo4j (>=5.8.1,<6.0.0)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "openai (>=0,<1)", "openlm (>=0.0.5,<0.0.6)", "opensearch-py (>=2.0.0,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pexpect (>=4.8.0,<5.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "pinecone-text (>=0.4.2,<0.5.0)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pymongo (>=4.3.3,<5.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pytesseract (>=0.3.10,<0.4.0)", "python-arango (>=7.5.9,<8.0.0)", "pyvespa (>=0.33.0,<0.34.0)", "qdrant-client (>=1.3.1,<2.0.0)", "rdflib (>=6.3.2,<7.0.0)", "redis (>=4,<5)", "requests-toolbelt (>=1.0.0,<2.0.0)", "sentence-transformers (>=2,<3)", "singlestoredb (>=0.7.1,<0.8.0)", "tensorflow-text (>=2.11.0,<3.0.0)", "tigrisdb (>=1.0.0b6,<2.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<3)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"]
+azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (>=0,<1)"]
+clarifai = ["clarifai (>=9.1.0)"]
+cohere = ["cohere (>=4,<5)"]
+docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"]
+embeddings = ["sentence-transformers (>=2,<3)"]
+extended-testing = ["amazon-textract-caller (<2)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "dashvector (>=1.0.1,<2.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "gql (>=3.4.1,<4.0.0)", "html2text (>=2020.1.16,<2021.0.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "openai (>=0,<1)", "openapi-schema-pydantic (>=1.2,<2.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tqdm (>=4.48.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"]
+javascript = ["esprima (>=4.0.1,<5.0.0)"]
+llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"]
+openai = ["openai (>=0,<1)", "tiktoken (>=0.3.2,<0.4.0)"]
+qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"]
+text-helpers = ["chardet (>=5.1.0,<6.0.0)"]
+
+[[package]]
+name = "langsmith"
+version = "0.0.55"
+description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
+category = "main"
+optional = false
+python-versions = ">=3.8.1,<4.0"
+files = [
+ {file = "langsmith-0.0.55-py3-none-any.whl", hash = "sha256:cb342db9a2ff61c9d41f01009f343bd5dcd696d4edf1b6c64652049d6f1f7dc8"},
+ {file = "langsmith-0.0.55.tar.gz", hash = "sha256:9737cc646500accdb6fa6deca5787608eef31b9c44172bd3957a01aaf57e6207"},
+]
+
+[package.dependencies]
+pydantic = ">=1,<3"
+requests = ">=2,<3"
+
+[[package]]
+name = "loguru"
+version = "0.7.2"
+description = "Python logging made (stupidly) simple"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"},
+ {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
+win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"]
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
+ {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
+]
+
+[package.dependencies]
+mdurl = ">=0.1,<1.0"
+
+[package.extras]
+benchmarking = ["psutil", "pytest", "pytest-benchmark"]
+code-style = ["pre-commit (>=3.0,<4.0)"]
+compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
+linkify = ["linkify-it-py (>=1,<3)"]
+plugins = ["mdit-py-plugins"]
+profiling = ["gprof2dot"]
+rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "marshmallow"
+version = "3.20.1"
+description = "A lightweight library for converting complex datatypes to and from native Python datatypes."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "marshmallow-3.20.1-py3-none-any.whl", hash = "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c"},
+ {file = "marshmallow-3.20.1.tar.gz", hash = "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889"},
+]
+
+[package.dependencies]
+packaging = ">=17.0"
+
+[package.extras]
+dev = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"]
+docs = ["alabaster (==0.7.13)", "autodocsumm (==0.2.11)", "sphinx (==7.0.1)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"]
+lint = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)"]
+tests = ["pytest", "pytz", "simplejson"]
+
+[[package]]
+name = "marshmallow-enum"
+version = "1.5.1"
+description = "Enum field for Marshmallow"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"},
+ {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"},
+]
+
+[package.dependencies]
+marshmallow = ">=2.0.0"
+
+[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
+ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
+]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+description = "Markdown URL utilities"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
+ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
+]
+
+[[package]]
+name = "multidict"
+version = "6.0.4"
+description = "multidict implementation"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"},
+ {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"},
+ {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"},
+ {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"},
+ {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"},
+ {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"},
+ {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"},
+ {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"},
+ {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"},
+ {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"},
+ {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"},
+ {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"},
+ {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"},
+ {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"},
+ {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"},
+ {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"},
+ {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"},
+ {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"},
+ {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"},
+ {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"},
+ {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"},
+ {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"},
+ {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"},
+ {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"},
+ {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"},
+ {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"},
+ {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"},
+ {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"},
+ {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"},
+ {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"},
+ {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"},
+ {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"},
+ {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"},
+ {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"},
+ {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"},
+ {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"},
+ {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"},
+ {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"},
+ {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"},
+ {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"},
+ {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"},
+ {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"},
+ {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"},
+ {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"},
+ {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"},
+ {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"},
+ {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"},
+ {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"},
+ {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"},
+ {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"},
+ {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"},
+ {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"},
+ {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"},
+ {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"},
+ {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"},
+ {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"},
+ {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"},
+ {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"},
+ {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"},
+ {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"},
+ {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"},
+ {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"},
+ {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"},
+ {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"},
+ {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"},
+ {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"},
+ {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"},
+ {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"},
+ {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"},
+ {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"},
+ {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"},
+ {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"},
+ {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"},
+ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"},
+]
+
+[[package]]
+name = "mypy"
+version = "1.6.1"
+description = "Optional static typing for Python"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"},
+ {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"},
+ {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"},
+ {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"},
+ {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"},
+ {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"},
+ {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"},
+ {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"},
+ {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"},
+ {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"},
+ {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"},
+ {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"},
+ {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"},
+ {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"},
+ {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"},
+ {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"},
+ {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"},
+ {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"},
+ {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"},
+ {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"},
+ {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"},
+ {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"},
+ {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"},
+ {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"},
+ {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"},
+ {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"},
+ {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"},
+]
+
+[package.dependencies]
+mypy-extensions = ">=1.0.0"
+typing-extensions = ">=4.1.0"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+install-types = ["pip"]
+reports = ["lxml"]
+
+[[package]]
+name = "mypy-extensions"
+version = "1.0.0"
+description = "Type system extensions for programs checked with the mypy type checker."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
+ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
+]
+
+[[package]]
+name = "mysqlclient"
+version = "2.2.0"
+description = "Python interface to MySQL"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mysqlclient-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:68837b6bb23170acffb43ae411e47533a560b6360c06dac39aa55700972c93b2"},
+ {file = "mysqlclient-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5670679ff1be1cc3fef0fa81bf39f0cd70605ba121141050f02743eb878ac114"},
+ {file = "mysqlclient-2.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:004fe1d30d2c2ff8072f8ea513bcec235fd9b896f70dad369461d0ad7e570e98"},
+ {file = "mysqlclient-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c6b142836c7dba4f723bf9c93cc46b6e5081d65b2af807f400dda9eb85a16d0"},
+ {file = "mysqlclient-2.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:955dba905a7443ce4788c63fdb9f8d688316260cf60b20ff51ac3b1c77616ede"},
+ {file = "mysqlclient-2.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:530ece9995a36cadb6211b9787f0c9e05cdab6702549bdb4236af5e9b535ed6a"},
+ {file = "mysqlclient-2.2.0.tar.gz", hash = "sha256:04368445f9c487d8abb7a878e3d23e923e6072c04a6c320f9e0dc8a82efba14e"},
+]
+
+[[package]]
+name = "nodeenv"
+version = "1.8.0"
+description = "Node.js virtual environment builder"
+category = "dev"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
+files = [
+ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
+ {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
+]
+
+[package.dependencies]
+setuptools = "*"
+
+[[package]]
+name = "numexpr"
+version = "2.8.7"
+description = "Fast numerical expression evaluator for NumPy"
+category = "main"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "numexpr-2.8.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d88531ffea3ea9287e8a1665c6a2d0206d3f4660d5244423e2a134a7f0ce5fba"},
+ {file = "numexpr-2.8.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db1065ba663a854115cf1f493afd7206e2efcef6643129e8061e97a51ad66ebb"},
+ {file = "numexpr-2.8.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4546416004ff2e7eb9cf52c2d7ab82732b1b505593193ee9f93fa770edc5230"},
+ {file = "numexpr-2.8.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb2f473fdfd09d17db3038e34818d05b6bc561a36785aa927d6c0e06bccc9911"},
+ {file = "numexpr-2.8.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5496fc9e3ae214637cbca1ab556b0e602bd3afe9ff4c943a29c482430972cda8"},
+ {file = "numexpr-2.8.7-cp310-cp310-win32.whl", hash = "sha256:d43f1f0253a6f2db2f76214e6f7ae9611b422cba3f7d4c86415d7a78bbbd606f"},
+ {file = "numexpr-2.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:cf5f112bce5c5966c47cc33700bc14ce745c8351d437ed57a9574fff581f341a"},
+ {file = "numexpr-2.8.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:32934d51b5bc8a6636436326da79ed380e2f151989968789cf65b1210572cb46"},
+ {file = "numexpr-2.8.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f021ac93cb3dd5d8ba2882627b615b1f58cb089dcc85764c6fbe7a549ed21b0c"},
+ {file = "numexpr-2.8.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dccf572763517db6562fb7b17db46aacbbf62a9ca0a66672872f4f71aee7b186"},
+ {file = "numexpr-2.8.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11121b14ee3179bade92e823f25f1b94e18716d33845db5081973331188c3338"},
+ {file = "numexpr-2.8.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:81451962d4145a46dba189df65df101d4d1caddb6efe6ebfe05982cd9f62b2cf"},
+ {file = "numexpr-2.8.7-cp311-cp311-win32.whl", hash = "sha256:da55ba845b847cc33c4bf81cee4b1bddfb0831118cabff8db62888ab8697ec34"},
+ {file = "numexpr-2.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:fd93b88d5332069916fa00829ea1b972b7e73abcb1081eee5c905a514b8b59e3"},
+ {file = "numexpr-2.8.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5340d2c86d83f52e1a3e7fd97c37d358ae99af9de316bdeeab2565b9b1e622ca"},
+ {file = "numexpr-2.8.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3bdf8cbc00c77a46230c765d242f92d35905c239b20c256c48dbac91e49f253"},
+ {file = "numexpr-2.8.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46c47e361fa60966a3339cb4f463ae6151ce7d78ed38075f06e8585d2c8929f"},
+ {file = "numexpr-2.8.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a371cfc1670a18eea2d5c70abaa95a0e8824b70d28da884bad11931266e3a0ca"},
+ {file = "numexpr-2.8.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:47a249cecd1382d482a5bf1fac0d11392fb2ed0f7d415ebc4cd901959deb1ec9"},
+ {file = "numexpr-2.8.7-cp312-cp312-win32.whl", hash = "sha256:b8a5b2c21c26b62875bf819d375d798b96a32644e3c28bd4ce7789ed1fb489da"},
+ {file = "numexpr-2.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:f29f4d08d9b0ed6fa5d32082971294b2f9131b8577c2b7c36432ed670924313f"},
+ {file = "numexpr-2.8.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ecaa5be24cf8fa0f00108e9dfa1021b7510e9dd9d159b8d8bc7c7ddbb995b31"},
+ {file = "numexpr-2.8.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a84284e0a407ca52980fd20962e89aff671c84cd6e73458f2e29ea2aa206356"},
+ {file = "numexpr-2.8.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e838289e3b7bbe100b99e35496e6cc4cc0541c2207078941ee5a1d46e6b925ae"},
+ {file = "numexpr-2.8.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0983052f308ea75dd232eb7f4729eed839db8fe8d82289940342b32cc55b15d0"},
+ {file = "numexpr-2.8.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8bf005acd7f1985c71b1b247aaac8950d6ea05a0fe0bbbbf3f96cd398b136daa"},
+ {file = "numexpr-2.8.7-cp39-cp39-win32.whl", hash = "sha256:56ec95f8d1db0819e64987dcf1789acd500fa4ea396eeabe4af6efdcb8902d07"},
+ {file = "numexpr-2.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:c7bf60fc1a9c90a9cb21c4c235723e579bff70c8d5362228cb2cf34426104ba2"},
+ {file = "numexpr-2.8.7.tar.gz", hash = "sha256:596eeb3bbfebc912f4b6eaaf842b61ba722cebdb8bc42dfefa657d3a74953849"},
+]
+
+[package.dependencies]
+numpy = ">=1.13.3"
+
+[[package]]
+name = "numpy"
+version = "1.25.2"
+description = "Fundamental package for array computing in Python"
+category = "main"
+optional = false
+python-versions = ">=3.9"
+files = [
+ {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"},
+ {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"},
+ {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"},
+ {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"},
+ {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"},
+ {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"},
+ {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"},
+ {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"},
+ {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"},
+ {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"},
+ {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"},
+ {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"},
+ {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"},
+ {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"},
+ {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"},
+ {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"},
+ {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"},
+ {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"},
+ {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"},
+ {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"},
+ {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"},
+ {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"},
+ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"},
+]
+
+[[package]]
+name = "openai"
+version = "0.28.1"
+description = "Python client library for the OpenAI API"
+category = "main"
+optional = false
+python-versions = ">=3.7.1"
+files = [
+ {file = "openai-0.28.1-py3-none-any.whl", hash = "sha256:d18690f9e3d31eedb66b57b88c2165d760b24ea0a01f150dd3f068155088ce68"},
+ {file = "openai-0.28.1.tar.gz", hash = "sha256:4be1dad329a65b4ce1a660fe6d5431b438f429b5855c883435f0f7fcb6d2dcc8"},
+]
+
+[package.dependencies]
+aiohttp = "*"
+requests = ">=2.20"
+tqdm = "*"
+
+[package.extras]
+datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
+dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"]
+embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"]
+wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"]
+
+[[package]]
+name = "packaging"
+version = "23.2"
+description = "Core utilities for Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
+ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
+]
+
+[[package]]
+name = "pathspec"
+version = "0.11.2"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
+ {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
+]
+
+[[package]]
+name = "pbr"
+version = "5.11.1"
+description = "Python Build Reasonableness"
+category = "dev"
+optional = false
+python-versions = ">=2.6"
+files = [
+ {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"},
+ {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"},
+]
+
+[[package]]
+name = "pep8-naming"
+version = "0.13.3"
+description = "Check PEP-8 naming conventions, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pep8-naming-0.13.3.tar.gz", hash = "sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971"},
+ {file = "pep8_naming-0.13.3-py3-none-any.whl", hash = "sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80"},
+]
+
+[package.dependencies]
+flake8 = ">=5.0.0"
+
+[[package]]
+name = "pinecone-client"
+version = "2.2.4"
+description = "Pinecone client and SDK"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pinecone-client-2.2.4.tar.gz", hash = "sha256:2c1cc1d6648b2be66e944db2ffa59166a37b9164d1135ad525d9cd8b1e298168"},
+ {file = "pinecone_client-2.2.4-py3-none-any.whl", hash = "sha256:5bf496c01c2f82f4e5c2dc977cc5062ecd7168b8ed90743b09afcc8c7eb242ec"},
+]
+
+[package.dependencies]
+dnspython = ">=2.0.0"
+loguru = ">=0.5.0"
+numpy = ">=1.22.0"
+python-dateutil = ">=2.5.3"
+pyyaml = ">=5.4"
+requests = ">=2.19.0"
+tqdm = ">=4.64.1"
+typing-extensions = ">=3.7.4"
+urllib3 = ">=1.21.1"
+
+[package.extras]
+grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"]
+
+[[package]]
+name = "platformdirs"
+version = "3.11.0"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"},
+ {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
+
+[[package]]
+name = "pluggy"
+version = "1.3.0"
+description = "plugin and hook calling mechanisms for python"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
+ {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "pre-commit"
+version = "3.5.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"},
+ {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"},
+]
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+virtualenv = ">=20.10.0"
+
+[[package]]
+name = "pycodestyle"
+version = "2.10.0"
+description = "Python style guide checker"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"},
+ {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"},
+]
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "pydantic"
+version = "1.10.13"
+description = "Data validation and settings management using python type hints"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"},
+ {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"},
+ {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"},
+ {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"},
+ {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"},
+ {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"},
+ {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"},
+ {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"},
+ {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"},
+ {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"},
+ {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"},
+ {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"},
+ {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"},
+ {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"},
+ {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"},
+ {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"},
+ {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"},
+ {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"},
+ {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"},
+ {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"},
+ {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"},
+ {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"},
+ {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"},
+ {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"},
+ {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"},
+ {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"},
+ {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"},
+ {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"},
+ {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"},
+ {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"},
+ {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"},
+ {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"},
+ {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"},
+ {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"},
+ {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"},
+ {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"},
+]
+
+[package.dependencies]
+python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""}
+typing-extensions = ">=4.2.0"
+
+[package.extras]
+dotenv = ["python-dotenv (>=0.10.4)"]
+email = ["email-validator (>=1.0.3)"]
+
+[[package]]
+name = "pydocstyle"
+version = "6.3.0"
+description = "Python docstring style checker"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"},
+ {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"},
+]
+
+[package.dependencies]
+snowballstemmer = ">=2.2.0"
+
+[package.extras]
+toml = ["tomli (>=1.2.3)"]
+
+[[package]]
+name = "pyflakes"
+version = "3.0.1"
+description = "passive checker of Python programs"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"},
+ {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"},
+]
+
+[[package]]
+name = "pygments"
+version = "2.16.1"
+description = "Pygments is a syntax highlighting package written in Python."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"},
+ {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
+]
+
+[package.extras]
+plugins = ["importlib-metadata"]
+
+[[package]]
+name = "pymysql"
+version = "1.1.0"
+description = "Pure Python MySQL Driver"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "PyMySQL-1.1.0-py3-none-any.whl", hash = "sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7"},
+ {file = "PyMySQL-1.1.0.tar.gz", hash = "sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96"},
+]
+
+[package.extras]
+ed25519 = ["PyNaCl (>=1.4.0)"]
+rsa = ["cryptography"]
+
+[[package]]
+name = "pytest"
+version = "7.4.3"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"},
+ {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+iniconfig = "*"
+packaging = "*"
+pluggy = ">=0.12,<2.0"
+
+[package.extras]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+
+[[package]]
+name = "pytest-asyncio"
+version = "0.21.1"
+description = "Pytest support for asyncio"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-asyncio-0.21.1.tar.gz", hash = "sha256:40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d"},
+ {file = "pytest_asyncio-0.21.1-py3-none-any.whl", hash = "sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b"},
+]
+
+[package.dependencies]
+pytest = ">=7.0.0"
+
+[package.extras]
+docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"]
+testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"]
+
+[[package]]
+name = "pytest-cov"
+version = "4.1.0"
+description = "Pytest plugin for measuring coverage."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
+ {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
+]
+
+[package.dependencies]
+coverage = {version = ">=5.2.1", extras = ["toml"]}
+pytest = ">=4.6"
+
+[package.extras]
+testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"]
+
+[[package]]
+name = "pytest-env"
+version = "0.8.2"
+description = "py.test plugin that allows you to add environment variables."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"},
+ {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"},
+]
+
+[package.dependencies]
+pytest = ">=7.3.1"
+
+[package.extras]
+test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"]
+
+[[package]]
+name = "pytest-mock"
+version = "3.12.0"
+description = "Thin-wrapper around the mock package for easier use with pytest"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"},
+ {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"},
+]
+
+[package.dependencies]
+pytest = ">=5.0"
+
+[package.extras]
+dev = ["pre-commit", "pytest-asyncio", "tox"]
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+files = [
+ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
+ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "python-dotenv"
+version = "1.0.0"
+description = "Read key-value pairs from a .env file and set them as environment variables"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"},
+ {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"},
+]
+
+[package.extras]
+cli = ["click (>=5.0)"]
+
+[[package]]
+name = "python-multipart"
+version = "0.0.6"
+description = "A streaming multipart parser for Python"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"},
+ {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"},
+]
+
+[package.extras]
+dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.1"
+description = "YAML parser and emitter for Python"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+ {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+ {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+ {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
+ {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+ {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
+ {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
+ {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+ {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+ {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+ {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+ {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+ {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+]
+
+[[package]]
+name = "regex"
+version = "2023.10.3"
+description = "Alternative regular expression module, to replace re."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"},
+ {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"},
+ {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"},
+ {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"},
+ {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"},
+ {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"},
+ {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"},
+ {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"},
+ {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"},
+ {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"},
+ {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"},
+ {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"},
+ {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"},
+ {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"},
+ {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"},
+ {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"},
+ {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"},
+ {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"},
+ {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"},
+ {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"},
+ {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"},
+ {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"},
+ {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"},
+ {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"},
+ {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"},
+ {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"},
+ {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"},
+ {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"},
+ {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"},
+ {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"},
+ {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"},
+ {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"},
+]
+
+[[package]]
+name = "replicate"
+version = "0.8.4"
+description = "Python client for Replicate"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "replicate-0.8.4-py3-none-any.whl", hash = "sha256:b433dc8f336001903f4652d68d094a92d6fcf46ca8273cfb0c84e53edc15e33d"},
+ {file = "replicate-0.8.4.tar.gz", hash = "sha256:5620dab09d47749d6eaed2e3c980831fdceb7512ad52bd05111dfccc9f58697f"},
+]
+
+[package.dependencies]
+packaging = "*"
+pydantic = ">1,<2"
+requests = ">2"
+
+[package.extras]
+dev = ["black", "mypy", "pytest", "responses", "ruff"]
+
+[[package]]
+name = "requests"
+version = "2.31.0"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "restructuredtext-lint"
+version = "1.4.0"
+description = "reStructuredText linter"
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"},
+]
+
+[package.dependencies]
+docutils = ">=0.11,<1.0"
+
+[[package]]
+name = "rich"
+version = "13.6.0"
+description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
+category = "dev"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"},
+ {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=2.2.0"
+pygments = ">=2.13.0,<3.0.0"
+
+[package.extras]
+jupyter = ["ipywidgets (>=7.5.1,<9)"]
+
+[[package]]
+name = "s3transfer"
+version = "0.7.0"
+description = "An Amazon S3 Transfer Manager"
+category = "main"
+optional = false
+python-versions = ">= 3.7"
+files = [
+ {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"},
+ {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"},
+]
+
+[package.dependencies]
+botocore = ">=1.12.36,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+
+[[package]]
+name = "sentry-sdk"
+version = "1.33.1"
+description = "Python client for Sentry (https://sentry.io)"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "sentry-sdk-1.33.1.tar.gz", hash = "sha256:816aeb900a54bba2d9346bad8ffac2d258c4fa09271b95a6533a714e9000f074"},
+ {file = "sentry_sdk-1.33.1-py2.py3-none-any.whl", hash = "sha256:1cce906dc86afda1ecd22c4716b0c846639151a3c3b59e23826711c6525c5642"},
+]
+
+[package.dependencies]
+certifi = "*"
+urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""}
+
+[package.extras]
+aiohttp = ["aiohttp (>=3.5)"]
+arq = ["arq (>=0.23)"]
+asyncpg = ["asyncpg (>=0.23)"]
+beam = ["apache-beam (>=2.12)"]
+bottle = ["bottle (>=0.12.13)"]
+celery = ["celery (>=3)"]
+chalice = ["chalice (>=1.16.0)"]
+clickhouse-driver = ["clickhouse-driver (>=0.2.0)"]
+django = ["django (>=1.8)"]
+falcon = ["falcon (>=1.4)"]
+fastapi = ["fastapi (>=0.79.0)"]
+flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"]
+grpcio = ["grpcio (>=1.21.1)"]
+httpx = ["httpx (>=0.16.0)"]
+huey = ["huey (>=2)"]
+loguru = ["loguru (>=0.5)"]
+opentelemetry = ["opentelemetry-distro (>=0.35b0)"]
+opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"]
+pure-eval = ["asttokens", "executing", "pure_eval"]
+pymongo = ["pymongo (>=3.1)"]
+pyspark = ["pyspark (>=2.4.4)"]
+quart = ["blinker (>=1.1)", "quart (>=0.16.1)"]
+rq = ["rq (>=0.6)"]
+sanic = ["sanic (>=0.8)"]
+sqlalchemy = ["sqlalchemy (>=1.2)"]
+starlette = ["starlette (>=0.19.1)"]
+starlite = ["starlite (>=1.48)"]
+tornado = ["tornado (>=5)"]
+
+[[package]]
+name = "setuptools"
+version = "68.2.2"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"},
+ {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"},
+]
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "smmap"
+version = "5.0.1"
+description = "A pure Python implementation of a sliding window memory map manager"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
+ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.0"
+description = "Sniff out which async library your code is running under"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
+ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
+]
+
+[[package]]
+name = "snowballstemmer"
+version = "2.2.0"
+description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.5"
+description = "A modern CSS selector implementation for Beautiful Soup."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
+ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
+]
+
+[[package]]
+name = "sqlalchemy"
+version = "2.0.22"
+description = "Database Abstraction Library"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f146c61ae128ab43ea3a0955de1af7e1633942c2b2b4985ac51cc292daf33222"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:875de9414393e778b655a3d97d60465eb3fae7c919e88b70cc10b40b9f56042d"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13790cb42f917c45c9c850b39b9941539ca8ee7917dacf099cc0b569f3d40da7"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e04ab55cf49daf1aeb8c622c54d23fa4bec91cb051a43cc24351ba97e1dd09f5"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a42c9fa3abcda0dcfad053e49c4f752eef71ecd8c155221e18b99d4224621176"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:14cd3bcbb853379fef2cd01e7c64a5d6f1d005406d877ed9509afb7a05ff40a5"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-win32.whl", hash = "sha256:d143c5a9dada696bcfdb96ba2de4a47d5a89168e71d05a076e88a01386872f97"},
+ {file = "SQLAlchemy-2.0.22-cp310-cp310-win_amd64.whl", hash = "sha256:ccd87c25e4c8559e1b918d46b4fa90b37f459c9b4566f1dfbce0eb8122571547"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f6ff392b27a743c1ad346d215655503cec64405d3b694228b3454878bf21590"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f776c2c30f0e5f4db45c3ee11a5f2a8d9de68e81eb73ec4237de1e32e04ae81c"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8f1792d20d2f4e875ce7a113f43c3561ad12b34ff796b84002a256f37ce9437"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80eeb5189d7d4b1af519fc3f148fe7521b9dfce8f4d6a0820e8f5769b005051"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69fd9e41cf9368afa034e1c81f3570afb96f30fcd2eb1ef29cb4d9371c6eece2"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54bcceaf4eebef07dadfde424f5c26b491e4a64e61761dea9459103ecd6ccc95"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-win32.whl", hash = "sha256:7ee7ccf47aa503033b6afd57efbac6b9e05180f492aeed9fcf70752556f95624"},
+ {file = "SQLAlchemy-2.0.22-cp311-cp311-win_amd64.whl", hash = "sha256:b560f075c151900587ade06706b0c51d04b3277c111151997ea0813455378ae0"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2c9bac865ee06d27a1533471405ad240a6f5d83195eca481f9fc4a71d8b87df8"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:625b72d77ac8ac23da3b1622e2da88c4aedaee14df47c8432bf8f6495e655de2"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39a6e21110204a8c08d40ff56a73ba542ec60bab701c36ce721e7990df49fb9"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a766cb0b468223cafdf63e2d37f14a4757476157927b09300c8c5832d88560"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0e1ce8ebd2e040357dde01a3fb7d30d9b5736b3e54a94002641dfd0aa12ae6ce"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:505f503763a767556fa4deae5194b2be056b64ecca72ac65224381a0acab7ebe"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-win32.whl", hash = "sha256:154a32f3c7b00de3d090bc60ec8006a78149e221f1182e3edcf0376016be9396"},
+ {file = "SQLAlchemy-2.0.22-cp312-cp312-win_amd64.whl", hash = "sha256:129415f89744b05741c6f0b04a84525f37fbabe5dc3774f7edf100e7458c48cd"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3940677d341f2b685a999bffe7078697b5848a40b5f6952794ffcf3af150c301"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55914d45a631b81a8a2cb1a54f03eea265cf1783241ac55396ec6d735be14883"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2096d6b018d242a2bcc9e451618166f860bb0304f590d205173d317b69986c95"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:19c6986cf2fb4bc8e0e846f97f4135a8e753b57d2aaaa87c50f9acbe606bd1db"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ac28bd6888fe3c81fbe97584eb0b96804bd7032d6100b9701255d9441373ec1"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-win32.whl", hash = "sha256:cb9a758ad973e795267da334a92dd82bb7555cb36a0960dcabcf724d26299db8"},
+ {file = "SQLAlchemy-2.0.22-cp37-cp37m-win_amd64.whl", hash = "sha256:40b1206a0d923e73aa54f0a6bd61419a96b914f1cd19900b6c8226899d9742ad"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3aa1472bf44f61dd27987cd051f1c893b7d3b17238bff8c23fceaef4f1133868"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:56a7e2bb639df9263bf6418231bc2a92a773f57886d371ddb7a869a24919face"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccca778c0737a773a1ad86b68bda52a71ad5950b25e120b6eb1330f0df54c3d0"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6c3e9350f9fb16de5b5e5fbf17b578811a52d71bb784cc5ff71acb7de2a7f9"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:564e9f9e4e6466273dbfab0e0a2e5fe819eec480c57b53a2cdee8e4fdae3ad5f"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:af66001d7b76a3fab0d5e4c1ec9339ac45748bc4a399cbc2baa48c1980d3c1f4"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-win32.whl", hash = "sha256:9e55dff5ec115316dd7a083cdc1a52de63693695aecf72bc53a8e1468ce429e5"},
+ {file = "SQLAlchemy-2.0.22-cp38-cp38-win_amd64.whl", hash = "sha256:4e869a8ff7ee7a833b74868a0887e8462445ec462432d8cbeff5e85f475186da"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9886a72c8e6371280cb247c5d32c9c8fa141dc560124348762db8a8b236f8692"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a571bc8ac092a3175a1d994794a8e7a1f2f651e7c744de24a19b4f740fe95034"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8db5ba8b7da759b727faebc4289a9e6a51edadc7fc32207a30f7c6203a181592"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b0b3f2686c3f162123adba3cb8b626ed7e9b8433ab528e36ed270b4f70d1cdb"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c1fea8c0abcb070ffe15311853abfda4e55bf7dc1d4889497b3403629f3bf00"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4bb062784f37b2d75fd9b074c8ec360ad5df71f933f927e9e95c50eb8e05323c"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-win32.whl", hash = "sha256:58a3aba1bfb32ae7af68da3f277ed91d9f57620cf7ce651db96636790a78b736"},
+ {file = "SQLAlchemy-2.0.22-cp39-cp39-win_amd64.whl", hash = "sha256:92e512a6af769e4725fa5b25981ba790335d42c5977e94ded07db7d641490a85"},
+ {file = "SQLAlchemy-2.0.22-py3-none-any.whl", hash = "sha256:3076740335e4aaadd7deb3fe6dcb96b3015f1613bd190a4e1634e1b99b02ec86"},
+ {file = "SQLAlchemy-2.0.22.tar.gz", hash = "sha256:5434cc601aa17570d79e5377f5fd45ff92f9379e2abed0be5e8c2fba8d353d2b"},
+]
+
+[package.dependencies]
+greenlet = {version = "!=0.4.17", optional = true, markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or extra == \"asyncio\""}
+mypy = {version = ">=0.910", optional = true, markers = "extra == \"mypy\""}
+typing-extensions = ">=4.2.0"
+
+[package.extras]
+aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"]
+aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"]
+asyncio = ["greenlet (!=0.4.17)"]
+asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"]
+mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"]
+mssql = ["pyodbc"]
+mssql-pymssql = ["pymssql"]
+mssql-pyodbc = ["pyodbc"]
+mypy = ["mypy (>=0.910)"]
+mysql = ["mysqlclient (>=1.4.0)"]
+mysql-connector = ["mysql-connector-python"]
+oracle = ["cx-oracle (>=7)"]
+oracle-oracledb = ["oracledb (>=1.0.1)"]
+postgresql = ["psycopg2 (>=2.7)"]
+postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"]
+postgresql-pg8000 = ["pg8000 (>=1.29.1)"]
+postgresql-psycopg = ["psycopg (>=3.0.7)"]
+postgresql-psycopg2binary = ["psycopg2-binary"]
+postgresql-psycopg2cffi = ["psycopg2cffi"]
+postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"]
+pymysql = ["pymysql"]
+sqlcipher = ["sqlcipher3-binary"]
+
+[[package]]
+name = "starlette"
+version = "0.27.0"
+description = "The little ASGI library that shines."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"},
+ {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"},
+]
+
+[package.dependencies]
+anyio = ">=3.4.0,<5"
+
+[package.extras]
+full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"]
+
+[[package]]
+name = "stevedore"
+version = "5.1.0"
+description = "Manage dynamic plugins for Python applications"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"},
+ {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"},
+]
+
+[package.dependencies]
+pbr = ">=2.0.0,<2.1.0 || >2.1.0"
+
+[[package]]
+name = "stripe"
+version = "5.5.0"
+description = "Python bindings for the Stripe API"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "stripe-5.5.0-py2.py3-none-any.whl", hash = "sha256:b4947da66dbb3de8969004ba6398f9a019c6b1b3ffe6aa88d5b07ac560a52b28"},
+ {file = "stripe-5.5.0.tar.gz", hash = "sha256:04a9732b37a46228ecf0e496163a3edd93596b0e6200029fbc48911638627e19"},
+]
+
+[package.dependencies]
+requests = {version = ">=2.20", markers = "python_version >= \"3.0\""}
+
+[[package]]
+name = "tenacity"
+version = "8.2.3"
+description = "Retry code until it succeeds"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
+ {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
+]
+
+[package.extras]
+doc = ["reno", "sphinx", "tornado (>=4.5)"]
+
+[[package]]
+name = "tiktoken"
+version = "0.5.1"
+description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "tiktoken-0.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b0bae3fd56de1c0a5874fb6577667a3c75bf231a6cef599338820210c16e40a"},
+ {file = "tiktoken-0.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e529578d017045e2f0ed12d2e00e7e99f780f477234da4aae799ec4afca89f37"},
+ {file = "tiktoken-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edd2ffbb789712d83fee19ab009949f998a35c51ad9f9beb39109357416344ff"},
+ {file = "tiktoken-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c73d47bdc1a3f1f66ffa019af0386c48effdc6e8797e5e76875f6388ff72e9"},
+ {file = "tiktoken-0.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46b8554b9f351561b1989157c6bb54462056f3d44e43aa4e671367c5d62535fc"},
+ {file = "tiktoken-0.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92ed3bbf71a175a6a4e5fbfcdb2c422bdd72d9b20407e00f435cf22a68b4ea9b"},
+ {file = "tiktoken-0.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:714efb2f4a082635d9f5afe0bf7e62989b72b65ac52f004eb7ac939f506c03a4"},
+ {file = "tiktoken-0.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a10488d1d1a5f9c9d2b2052fdb4cf807bba545818cb1ef724a7f5d44d9f7c3d4"},
+ {file = "tiktoken-0.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8079ac065572fe0e7c696dbd63e1fdc12ce4cdca9933935d038689d4732451df"},
+ {file = "tiktoken-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ef730db4097f5b13df8d960f7fdda2744fe21d203ea2bb80c120bb58661b155"},
+ {file = "tiktoken-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:426e7def5f3f23645dada816be119fa61e587dfb4755de250e136b47a045c365"},
+ {file = "tiktoken-0.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:323cec0031358bc09aa965c2c5c1f9f59baf76e5b17e62dcc06d1bb9bc3a3c7c"},
+ {file = "tiktoken-0.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5abd9436f02e2c8eda5cce2ff8015ce91f33e782a7423de2a1859f772928f714"},
+ {file = "tiktoken-0.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:1fe99953b63aabc0c9536fbc91c3c9000d78e4755edc28cc2e10825372046a2d"},
+ {file = "tiktoken-0.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcdc630461927718b317e6f8be7707bd0fc768cee1fdc78ddaa1e93f4dc6b2b1"},
+ {file = "tiktoken-0.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1f2b3b253e22322b7f53a111e1f6d7ecfa199b4f08f3efdeb0480f4033b5cdc6"},
+ {file = "tiktoken-0.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43ce0199f315776dec3ea7bf86f35df86d24b6fcde1babd3e53c38f17352442f"},
+ {file = "tiktoken-0.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a84657c083d458593c0235926b5c993eec0b586a2508d6a2020556e5347c2f0d"},
+ {file = "tiktoken-0.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c008375c0f3d97c36e81725308699116cd5804fdac0f9b7afc732056329d2790"},
+ {file = "tiktoken-0.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:779c4dea5edd1d3178734d144d32231e0b814976bec1ec09636d1003ffe4725f"},
+ {file = "tiktoken-0.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:b5dcfcf9bfb798e86fbce76d40a1d5d9e3f92131aecfa3d1e5c9ea1a20f1ef1a"},
+ {file = "tiktoken-0.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b180a22db0bbcc447f691ffc3cf7a580e9e0587d87379e35e58b826ebf5bc7b"},
+ {file = "tiktoken-0.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b756a65d98b7cf760617a6b68762a23ab8b6ef79922be5afdb00f5e8a9f4e76"},
+ {file = "tiktoken-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba9873c253ca1f670e662192a0afcb72b41e0ba3e730f16c665099e12f4dac2d"},
+ {file = "tiktoken-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74c90d2be0b4c1a2b3f7dde95cd976757817d4df080d6af0ee8d461568c2e2ad"},
+ {file = "tiktoken-0.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:709a5220891f2b56caad8327fab86281787704931ed484d9548f65598dea9ce4"},
+ {file = "tiktoken-0.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d5a187ff9c786fae6aadd49f47f019ff19e99071dc5b0fe91bfecc94d37c686"},
+ {file = "tiktoken-0.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:e21840043dbe2e280e99ad41951c00eff8ee3b63daf57cd4c1508a3fd8583ea2"},
+ {file = "tiktoken-0.5.1.tar.gz", hash = "sha256:27e773564232004f4f810fd1f85236673ec3a56ed7f1206fc9ed8670ebedb97a"},
+]
+
+[package.dependencies]
+regex = ">=2022.1.18"
+requests = ">=2.26.0"
+
+[package.extras]
+blobfile = ["blobfile (>=2)"]
+
+[[package]]
+name = "tqdm"
+version = "4.66.1"
+description = "Fast, Extensible Progress Meter"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"},
+ {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
+notebook = ["ipywidgets (>=6)"]
+slack = ["slack-sdk"]
+telegram = ["requests"]
+
+[[package]]
+name = "types-pytz"
+version = "2023.3.1.1"
+description = "Typing stubs for pytz"
+category = "dev"
+optional = false
+python-versions = "*"
+files = [
+ {file = "types-pytz-2023.3.1.1.tar.gz", hash = "sha256:cc23d0192cd49c8f6bba44ee0c81e4586a8f30204970fc0894d209a6b08dab9a"},
+ {file = "types_pytz-2023.3.1.1-py3-none-any.whl", hash = "sha256:1999a123a3dc0e39a2ef6d19f3f8584211de9e6a77fe7a0259f04a524e90a5cf"},
+]
+
+[[package]]
+name = "types-requests"
+version = "2.31.0.10"
+description = "Typing stubs for requests"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "types-requests-2.31.0.10.tar.gz", hash = "sha256:dc5852a76f1eaf60eafa81a2e50aefa3d1f015c34cf0cba130930866b1b22a92"},
+ {file = "types_requests-2.31.0.10-py3-none-any.whl", hash = "sha256:b32b9a86beffa876c0c3ac99a4cd3b8b51e973fb8e3bd4e0a6bb32c7efad80fc"},
+]
+
+[package.dependencies]
+urllib3 = ">=2"
+
+[[package]]
+name = "typing-extensions"
+version = "4.8.0"
+description = "Backported and Experimental Type Hints for Python 3.8+"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
+ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
+]
+
+[[package]]
+name = "typing-inspect"
+version = "0.9.0"
+description = "Runtime inspection utilities for typing module."
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"},
+ {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"},
+]
+
+[package.dependencies]
+mypy-extensions = ">=0.3.0"
+typing-extensions = ">=3.7.4"
+
+[[package]]
+name = "ujson"
+version = "5.8.0"
+description = "Ultra fast JSON encoder and decoder for Python"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"},
+ {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"},
+ {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"},
+ {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"},
+ {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"},
+ {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"},
+ {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"},
+ {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"},
+ {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"},
+ {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"},
+ {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"},
+ {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"},
+ {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"},
+ {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"},
+ {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"},
+ {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"},
+ {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"},
+ {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"},
+ {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"},
+ {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"},
+ {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"},
+ {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"},
+ {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"},
+ {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"},
+ {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"},
+ {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"},
+ {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"},
+ {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"},
+ {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"},
+ {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"},
+ {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"},
+ {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"},
+ {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"},
+]
+
+[[package]]
+name = "urllib3"
+version = "2.0.7"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
+ {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
+]
+
+[package.extras]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
+
+[[package]]
+name = "uvicorn"
+version = "0.22.0"
+description = "The lightning-fast ASGI server."
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"},
+ {file = "uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8"},
+]
+
+[package.dependencies]
+click = ">=7.0"
+colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""}
+h11 = ">=0.8"
+httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
+python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
+pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
+websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
+
+[package.extras]
+standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
+
+[[package]]
+name = "uvloop"
+version = "0.19.0"
+description = "Fast implementation of asyncio event loop on top of libuv"
+category = "main"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"},
+ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"},
+ {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"},
+ {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"},
+ {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"},
+ {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"},
+ {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"},
+ {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"},
+ {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"},
+ {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"},
+ {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"},
+ {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"},
+ {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"},
+ {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"},
+ {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"},
+ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"},
+ {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"},
+]
+
+[package.extras]
+docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
+test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"]
+
+[[package]]
+name = "virtualenv"
+version = "20.24.6"
+description = "Virtual Python Environment builder"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"},
+ {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"},
+]
+
+[package.dependencies]
+distlib = ">=0.3.7,<1"
+filelock = ">=3.12.2,<4"
+platformdirs = ">=3.9.1,<4"
+
+[package.extras]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
+test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"]
+
+[[package]]
+name = "watchfiles"
+version = "0.21.0"
+description = "Simple, modern and high performance file watching and code reload in python."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"},
+ {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"},
+ {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"},
+ {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"},
+ {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"},
+ {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"},
+ {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"},
+ {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"},
+ {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"},
+ {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"},
+ {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"},
+ {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"},
+ {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"},
+ {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"},
+ {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"},
+ {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"},
+ {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"},
+ {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"},
+ {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"},
+ {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"},
+ {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"},
+ {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"},
+ {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"},
+ {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"},
+ {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"},
+ {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"},
+ {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"},
+ {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"},
+ {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"},
+ {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"},
+ {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"},
+ {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"},
+ {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"},
+ {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"},
+ {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"},
+ {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"},
+ {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"},
+ {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"},
+ {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"},
+ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"},
+ {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"},
+]
+
+[package.dependencies]
+anyio = ">=3.0.0"
+
+[[package]]
+name = "websockets"
+version = "12.0"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"},
+ {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"},
+ {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"},
+ {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"},
+ {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"},
+ {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"},
+ {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"},
+ {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"},
+ {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"},
+ {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"},
+ {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"},
+ {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"},
+ {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"},
+ {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"},
+ {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"},
+ {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"},
+ {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"},
+ {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"},
+ {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"},
+ {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"},
+ {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"},
+ {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"},
+ {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"},
+ {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"},
+ {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"},
+ {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"},
+ {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"},
+ {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"},
+ {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"},
+ {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"},
+ {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"},
+ {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"},
+ {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"},
+ {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"},
+ {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"},
+ {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"},
+]
+
+[[package]]
+name = "wemake-python-styleguide"
+version = "0.18.0"
+description = "The strictest and most opinionated python linter ever"
+category = "dev"
+optional = false
+python-versions = ">=3.8.1,<4.0"
+files = [
+ {file = "wemake_python_styleguide-0.18.0-py3-none-any.whl", hash = "sha256:2219be145185edcd5e01f4ce49e3dea11acc34f2c377face0c175bb6ea6ac988"},
+ {file = "wemake_python_styleguide-0.18.0.tar.gz", hash = "sha256:69139858cf5b2a9ba09dac136e2873a4685515768f68fdef2684ebefd7b1dafd"},
+]
+
+[package.dependencies]
+astor = ">=0.8,<0.9"
+attrs = "*"
+darglint = ">=1.2,<2.0"
+flake8 = ">5"
+flake8-bandit = ">=4.1,<5.0"
+flake8-broken-line = ">=1.0,<2.0"
+flake8-bugbear = ">=23.5,<24.0"
+flake8-commas = ">=2.0,<3.0"
+flake8-comprehensions = ">=3.1,<4.0"
+flake8-debugger = ">=4.0,<5.0"
+flake8-docstrings = ">=1.3,<2.0"
+flake8-eradicate = ">=1.5,<2.0"
+flake8-isort = ">=6.0,<7.0"
+flake8-quotes = ">=3.0,<4.0"
+flake8-rst-docstrings = ">=0.3,<0.4"
+flake8-string-format = ">=0.3,<0.4"
+pep8-naming = ">=0.13,<0.14"
+pygments = ">=2.4,<3.0"
+setuptools = "*"
+typing_extensions = ">=4.0,<5.0"
+
+[[package]]
+name = "wikipedia"
+version = "1.4.0"
+description = "Wikipedia API for Python"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"},
+]
+
+[package.dependencies]
+beautifulsoup4 = "*"
+requests = ">=2.0.0,<3.0.0"
+
+[[package]]
+name = "win32-setctime"
+version = "1.1.0"
+description = "A small Python utility to set file creation time on Windows"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"},
+ {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"},
+]
+
+[package.extras]
+dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
+
+[[package]]
+name = "yarl"
+version = "1.9.2"
+description = "Yet another URL library"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"},
+ {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"},
+ {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"},
+ {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"},
+ {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"},
+ {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"},
+ {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"},
+ {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"},
+ {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"},
+ {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"},
+ {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"},
+ {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"},
+ {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"},
+ {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"},
+ {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"},
+ {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"},
+ {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"},
+ {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"},
+ {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"},
+ {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"},
+ {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"},
+ {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"},
+ {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"},
+ {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"},
+ {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"},
+ {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"},
+ {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"},
+ {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"},
+]
+
+[package.dependencies]
+idna = ">=2.0"
+multidict = ">=4.0"
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.11"
+content-hash = "248cb46ce6ba46dfb53d054e8c28192a0d53443fad28b61d0971506014b0513a"
diff --git a/platform/pyproject.toml b/platform/pyproject.toml
new file mode 100644
index 0000000..e48072e
--- /dev/null
+++ b/platform/pyproject.toml
@@ -0,0 +1,100 @@
+[tool.poetry]
+name = "reworkd_platform"
+version = "0.1.0"
+description = ""
+authors = [
+ "awtkns",
+ "asim-shrestha"
+]
+
+maintainers = [
+ "reworkd"
+]
+
+readme = "README.md"
+
+[tool.poetry.dependencies]
+python = "^3.11"
+fastapi = "^0.98.0"
+boto3 = "^1.28.51"
+uvicorn = { version = "^0.22.0", extras = ["standard"] }
+pydantic = { version = "<2.0", extras = ["dotenv"] }
+ujson = "^5.8.0"
+sqlalchemy = { version = "^2.0.21", extras = ["mypy", "asyncio"] }
+aiomysql = "^0.1.1"
+mysqlclient = "^2.2.0"
+sentry-sdk = "^1.31.0"
+loguru = "^0.7.2"
+aiokafka = "^0.8.1"
+requests = "^2.31.0"
+langchain = "^0.0.295"
+openai = "^0.28.0"
+wikipedia = "^1.4.0"
+replicate = "^0.8.4"
+lanarky = "^0.7.15"
+tiktoken = "^0.5.1"
+grpcio = "^1.58.0"
+pinecone-client = "^2.2.4"
+python-multipart = "^0.0.6"
+aws-secretsmanager-caching = "^1.1.1.5"
+botocore = "^1.31.51"
+stripe = "^5.5.0"
+cryptography = "^41.0.4"
+httpx = "^0.25.0"
+
+
+[tool.poetry.dev-dependencies]
+autopep8 = "^2.0.4"
+pytest = "^7.4.2"
+flake8 = "~6.0.0"
+mypy = "^1.5.1"
+isort = "^5.12.0"
+pre-commit = "^3.4.0"
+wemake-python-styleguide = "^0.18.0"
+black = "^23.9.1"
+autoflake = "^2.2.1"
+pytest-cov = "^4.1.0"
+anyio = "^3.7.1"
+pytest-env = "^0.8.2"
+
+[tool.poetry.group.dev.dependencies]
+dotmap = "^1.3.30"
+pytest-mock = "^3.10.0"
+pytest-asyncio = "^0.21.0"
+mypy = "^1.4.1"
+types-requests = "^2.31.0.1"
+types-pytz = "^2023.3.0.0"
+
+[tool.isort]
+profile = "black"
+multi_line_output = 3
+src_paths = ["reworkd_platform"]
+
+[tool.mypy]
+strict = true
+ignore_missing_imports = true
+allow_subclassing_any = true
+allow_untyped_calls = true
+pretty = true
+show_error_codes = true
+implicit_reexport = true
+allow_untyped_decorators = true
+warn_unused_ignores = false
+warn_return_any = false
+namespace_packages = true
+exclude = "tests"
+
+[tool.pytest.ini_options]
+filterwarnings = [
+ "error",
+ "ignore::DeprecationWarning",
+ "ignore:.*unclosed.*:ResourceWarning",
+ "ignore::ImportWarning",
+]
+env = [
+ "REWORKD_PLATFORM_DB_BASE=reworkd_platform_test",
+]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/platform/reworkd_platform/__init__.py b/platform/reworkd_platform/__init__.py
new file mode 100644
index 0000000..9a4d017
--- /dev/null
+++ b/platform/reworkd_platform/__init__.py
@@ -0,0 +1 @@
+"""reworkd_platform package."""
diff --git a/platform/reworkd_platform/__main__.py b/platform/reworkd_platform/__main__.py
new file mode 100644
index 0000000..9a86b4d
--- /dev/null
+++ b/platform/reworkd_platform/__main__.py
@@ -0,0 +1,20 @@
+import uvicorn
+
+from reworkd_platform.settings import settings
+
+
+def main() -> None:
+ """Entrypoint of the application."""
+ uvicorn.run(
+ "reworkd_platform.web.application:get_app",
+ workers=settings.workers_count,
+ host=settings.host,
+ port=settings.port,
+ reload=settings.reload,
+ log_level=settings.log_level.lower(),
+ factory=True,
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/platform/reworkd_platform/conftest.py b/platform/reworkd_platform/conftest.py
new file mode 100644
index 0000000..cd95c34
--- /dev/null
+++ b/platform/reworkd_platform/conftest.py
@@ -0,0 +1,107 @@
+from typing import Any, AsyncGenerator
+
+import pytest
+from fastapi import FastAPI
+from httpx import AsyncClient
+from sqlalchemy.ext.asyncio import (
+ AsyncEngine,
+ AsyncSession,
+ async_sessionmaker,
+ create_async_engine,
+)
+
+from reworkd_platform.db.dependencies import get_db_session
+from reworkd_platform.db.utils import create_database, drop_database
+from reworkd_platform.settings import settings
+from reworkd_platform.web.application import get_app
+
+
+@pytest.fixture(scope="session")
+def anyio_backend() -> str:
+ """
+ Backend for anyio pytest plugin.
+
+ :return: backend name.
+ """
+ return "asyncio"
+
+
+@pytest.fixture(scope="session")
+async def _engine() -> AsyncGenerator[AsyncEngine, None]:
+ """
+ Create engine and databases.
+
+ :yield: new engine.
+ """
+ from reworkd_platform.db.meta import meta # noqa: WPS433
+ from reworkd_platform.db.models import load_all_models # noqa: WPS433
+
+ load_all_models()
+
+ await create_database()
+
+ engine = create_async_engine(str(settings.db_url))
+ async with engine.begin() as conn:
+ await conn.run_sync(meta.create_all)
+
+ try:
+ yield engine
+ finally:
+ await engine.dispose()
+ await drop_database()
+
+
+@pytest.fixture
+async def dbsession(
+ _engine: AsyncEngine,
+) -> AsyncGenerator[AsyncSession, None]:
+ """
+ Get session to database.
+
+ Fixture that returns a SQLAlchemy session with a SAVEPOINT, and the rollback to it
+ after the test completes.
+
+ :param _engine: current engine.
+ :yields: async session.
+ """
+ connection = await _engine.connect()
+ trans = await connection.begin()
+
+ session_maker = async_sessionmaker(
+ connection,
+ expire_on_commit=False,
+ )
+ session = session_maker()
+
+ try:
+ yield session
+ finally:
+ await session.close()
+ await trans.rollback()
+ await connection.close()
+
+
+@pytest.fixture
+def fastapi_app(dbsession: AsyncSession) -> FastAPI:
+ """
+ Fixture for creating FastAPI app.
+
+ :return: fastapi app with mocked dependencies.
+ """
+ application = get_app()
+ application.dependency_overrides[get_db_session] = lambda: dbsession
+ return application # noqa: WPS331
+
+
+@pytest.fixture
+async def client(
+ fastapi_app: FastAPI, anyio_backend: Any
+) -> AsyncGenerator[AsyncClient, None]:
+ """
+ Fixture that creates client for requesting server.
+
+ :param fastapi_app: the application.
+ :yield: client for the app.
+ """
+ async with AsyncClient(app=fastapi_app, base_url="http://test") as ac:
+ yield ac
diff --git a/platform/reworkd_platform/constants.py b/platform/reworkd_platform/constants.py
new file mode 100644
index 0000000..1b3daff
--- /dev/null
+++ b/platform/reworkd_platform/constants.py
@@ -0,0 +1 @@
+ENV_PREFIX = "REWORKD_PLATFORM_"
diff --git a/platform/reworkd_platform/db/__init__.py b/platform/reworkd_platform/db/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/platform/reworkd_platform/db/base.py b/platform/reworkd_platform/db/base.py
new file mode 100644
index 0000000..d497f06
--- /dev/null
+++ b/platform/reworkd_platform/db/base.py
@@ -0,0 +1,68 @@
+import uuid
+from datetime import datetime
+from typing import Optional, Type, TypeVar
+
+from sqlalchemy import DateTime, String, func
+from sqlalchemy.ext.asyncio import AsyncSession
+from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
+
+from reworkd_platform.db.meta import meta
+from reworkd_platform.web.api.http_responses import not_found
+
+T = TypeVar("T", bound="Base")
+
+
+class Base(DeclarativeBase):
+ """Base for all models."""
+
+ metadata = meta
+ id: Mapped[str] = mapped_column(
+ String,
+ primary_key=True,
+ default=lambda _: str(uuid.uuid4()),
+ unique=True,
+ nullable=False,
+ )
+
+ @classmethod
+ async def get(cls: Type[T], session: AsyncSession, id_: str) -> Optional[T]:
+ return await session.get(cls, id_)
+
+ @classmethod
+ async def get_or_404(cls: Type[T], session: AsyncSession, id_: str) -> T:
+ if model := await cls.get(session, id_):
+ return model
+
+ raise not_found(detail=f"{cls.__name__}[{id_}] not found")
+
+ async def save(self: T, session: AsyncSession) -> T:
+ session.add(self)
+ await session.flush()
+ return self
+
+ async def delete(self: T, session: AsyncSession) -> None:
+ await session.delete(self)
+
+
+class TrackedModel(Base):
+ """Base for all tracked models."""
+
+ __abstract__ = True
+
+ create_date = mapped_column(
+ DateTime, name="create_date", server_default=func.now(), nullable=False
+ )
+ update_date = mapped_column(
+ DateTime, name="update_date", onupdate=func.now(), nullable=True
+ )
+ delete_date = mapped_column(DateTime, name="delete_date", nullable=True)
+
+ async def delete(self, session: AsyncSession) -> None:
+ """Marks the model as deleted."""
+ self.delete_date = datetime.now()
+ await self.save(session)
+
+
+class UserMixin:
+ user_id = mapped_column(String, name="user_id", nullable=False)
+ organization_id = mapped_column(String, name="organization_id", nullable=True)
diff --git a/platform/reworkd_platform/db/crud/__init__.py b/platform/reworkd_platform/db/crud/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/platform/reworkd_platform/db/crud/agent.py b/platform/reworkd_platform/db/crud/agent.py
new file mode 100644
index 0000000..4762bfe
--- /dev/null
+++ b/platform/reworkd_platform/db/crud/agent.py
@@ -0,0 +1,58 @@
+from fastapi import HTTPException
+from sqlalchemy import and_, func, select
+from sqlalchemy.ext.asyncio import AsyncSession
+
+from reworkd_platform.db.crud.base import BaseCrud
+from reworkd_platform.db.models.agent import AgentRun, AgentTask
+from reworkd_platform.schemas.agent import Loop_Step
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.errors import MaxLoopsError, MultipleSummaryError
+
+
+class AgentCRUD(BaseCrud):
+ def __init__(self, session: AsyncSession, user: UserBase):
+ super().__init__(session)
+ self.user = user
+
+ async def create_run(self, goal: str) -> AgentRun:
+ return await AgentRun(
+ user_id=self.user.id,
+ goal=goal,
+ ).save(self.session)
+
+ async def create_task(self, run_id: str, type_: Loop_Step) -> AgentTask:
+ await self.validate_task_count(run_id, type_)
+ return await AgentTask(
+ run_id=run_id,
+ type_=type_,
+ ).save(self.session)
+
+ async def validate_task_count(self, run_id: str, type_: str) -> None:
+ if not await AgentRun.get(self.session, run_id):
+ raise HTTPException(404, f"Run {run_id} not found")
+
+ query = select(func.count(AgentTask.id)).where(
+ and_(
+ AgentTask.run_id == run_id,
+ AgentTask.type_ == type_,
+ )
+ )
+
+ task_count = (await self.session.execute(query)).scalar_one()
+ max_ = settings.max_loops
+
+ if task_count >= max_:
+ raise MaxLoopsError(
+ StopIteration(),
+ f"Max loops of {max_} exceeded, shutting down.",
+ 429,
+ should_log=False,
+ )
+
+ if type_ == "summarize" and task_count > 1:
+ raise MultipleSummaryError(
+ StopIteration(),
+ "Multiple summary tasks are not allowed",
+ 429,
+ )
diff --git a/platform/reworkd_platform/db/crud/base.py b/platform/reworkd_platform/db/crud/base.py
new file mode 100644
index 0000000..3eebc0c
--- /dev/null
+++ b/platform/reworkd_platform/db/crud/base.py
@@ -0,0 +1,10 @@
+from typing import TypeVar
+
+from sqlalchemy.ext.asyncio import AsyncSession
+
+T = TypeVar("T", bound="BaseCrud")
+
+
+class BaseCrud:
+ def __init__(self, session: AsyncSession):
+ self.session = session
diff --git a/platform/reworkd_platform/db/crud/oauth.py b/platform/reworkd_platform/db/crud/oauth.py
new file mode 100644
index 0000000..911bd01
--- /dev/null
+++ b/platform/reworkd_platform/db/crud/oauth.py
@@ -0,0 +1,77 @@
+import secrets
+from typing import Dict, Optional
+
+from fastapi import Depends
+from sqlalchemy import func, select
+from sqlalchemy.ext.asyncio import AsyncSession
+
+from reworkd_platform.db.crud.base import BaseCrud
+from reworkd_platform.db.dependencies import get_db_session
+from reworkd_platform.db.models.auth import OauthCredentials
+from reworkd_platform.schemas import UserBase
+
+
+class OAuthCrud(BaseCrud):
+ @classmethod
+ async def inject(
+ cls,
+ session: AsyncSession = Depends(get_db_session),
+ ) -> "OAuthCrud":
+ return cls(session)
+
+ async def create_installation(
+ self, user: UserBase, provider: str, redirect_uri: Optional[str]
+ ) -> OauthCredentials:
+ return await OauthCredentials(
+ user_id=user.id,
+ organization_id=user.organization_id,
+ provider=provider,
+ state=secrets.token_hex(16),
+ redirect_uri=redirect_uri,
+ ).save(self.session)
+
+ async def get_installation_by_state(self, state: str) -> Optional[OauthCredentials]:
+ query = select(OauthCredentials).filter(OauthCredentials.state == state)
+
+ return (await self.session.execute(query)).scalar_one_or_none()
+
+ async def get_installation_by_user_id(
+ self, user_id: str, provider: str
+ ) -> Optional[OauthCredentials]:
+ query = select(OauthCredentials).filter(
+ OauthCredentials.user_id == user_id,
+ OauthCredentials.provider == provider,
+ OauthCredentials.access_token_enc.isnot(None),
+ )
+
+ return (await self.session.execute(query)).scalars().first()
+
+ async def get_installation_by_organization_id(
+ self, organization_id: str, provider: str
+ ) -> Optional[OauthCredentials]:
+ query = select(OauthCredentials).filter(
+ OauthCredentials.organization_id == organization_id,
+ OauthCredentials.provider == provider,
+ OauthCredentials.access_token_enc.isnot(None),
+ OauthCredentials.organization_id.isnot(None),
+ )
+
+ return (await self.session.execute(query)).scalars().first()
+
+ async def get_all(self, user: UserBase) -> Dict[str, str]:
+ query = (
+ select(
+ OauthCredentials.provider,
+ func.any_value(OauthCredentials.access_token_enc),
+ )
+ .filter(
+ OauthCredentials.access_token_enc.isnot(None),
+ OauthCredentials.organization_id == user.organization_id,
+ )
+ .group_by(OauthCredentials.provider)
+ )
+
+ return {
+ provider: token
+ for provider, token in (await self.session.execute(query)).all()
+ }
diff --git a/platform/reworkd_platform/db/crud/organization.py b/platform/reworkd_platform/db/crud/organization.py
new file mode 100644
index 0000000..e2c3321
--- /dev/null
+++ b/platform/reworkd_platform/db/crud/organization.py
@@ -0,0 +1,98 @@
+# from
+from typing import List, Optional
+
+from fastapi import Depends
+from pydantic import BaseModel
+from sqlalchemy import and_, select
+from sqlalchemy.ext.asyncio import AsyncSession
+from sqlalchemy.orm import aliased
+
+from reworkd_platform.db.crud.base import BaseCrud
+from reworkd_platform.db.dependencies import get_db_session
+from reworkd_platform.db.models.auth import Organization, OrganizationUser
+from reworkd_platform.db.models.user import User
+from reworkd_platform.schemas import UserBase
+from reworkd_platform.web.api.dependencies import get_current_user
+
+
+class OrgUser(BaseModel):
+ id: str
+ role: str
+ user: UserBase
+
+
+class OrganizationUsers(BaseModel):
+ id: str
+ name: str
+ users: List[OrgUser]
+
+
+class OrganizationCrud(BaseCrud):
+ def __init__(self, session: AsyncSession, user: UserBase):
+ super().__init__(session)
+ self.user = user
+
+ @classmethod
+ def inject(
+ cls,
+ session: AsyncSession = Depends(get_db_session),
+ user: UserBase = Depends(get_current_user),
+ ) -> "OrganizationCrud":
+ return cls(session, user)
+
+ async def create_organization(self, name: str) -> Organization:
+ return await Organization(
+ created_by=self.user.id,
+ name=name,
+ ).save(self.session)
+
+ async def get_by_name(self, name: str) -> Optional[OrganizationUsers]:
+ owner = aliased(OrganizationUser, name="owner")
+
+ query = (
+ select(
+ Organization,
+ User,
+ OrganizationUser,
+ )
+ .join(
+ OrganizationUser,
+ and_(
+ Organization.id == OrganizationUser.organization_id,
+ ),
+ )
+ .join(
+ User,
+ User.id == OrganizationUser.user_id,
+ )
+ .join( # Owner
+ owner,
+ and_(
+ OrganizationUser.organization_id == Organization.id,
+ OrganizationUser.user_id == self.user.id,
+ ),
+ )
+ .filter(Organization.name == name)
+ )
+
+ rows = (await self.session.execute(query)).all()
+ if not rows:
+ return None
+
+ org: Organization = rows[0][0]
+ return OrganizationUsers(
+ id=org.id,
+ name=org.name,
+ users=[
+ OrgUser(
+ id=org_user.user_id,
+ role=org_user.role,
+ user=UserBase(
+ id=user.id,
+ email=user.email,
+ name=user.name,
+ ),
+ )
+ for [_, user, org_user] in rows
+ ],
+ )
diff --git a/platform/reworkd_platform/db/crud/user.py b/platform/reworkd_platform/db/crud/user.py
new file mode 100644
index 0000000..2e9f711
--- /dev/null
+++ b/platform/reworkd_platform/db/crud/user.py
@@ -0,0 +1,31 @@
+from typing import Optional
+
+from sqlalchemy import and_, select
+from sqlalchemy.orm import selectinload
+
+from reworkd_platform.db.crud.base import BaseCrud
+from reworkd_platform.db.models.auth import OrganizationUser
+from reworkd_platform.db.models.user import UserSession
+
+
+class UserCrud(BaseCrud):
+ async def get_user_session(self, token: str) -> UserSession:
+ query = (
+ select(UserSession)
+ .filter(UserSession.session_token == token)
+ .options(selectinload(UserSession.user))
+ )
+ return (await self.session.execute(query)).scalar_one()
+
+ async def get_user_organization(
+ self, user_id: str, organization_id: str
+ ) -> Optional[OrganizationUser]:
+ query = select(OrganizationUser).filter(
+ and_(
+ OrganizationUser.user_id == user_id,
+ OrganizationUser.organization_id == organization_id,
+ )
+ )
+
+ # TODO: Only returns the first organization
+ return (await self.session.execute(query)).scalar()
diff --git a/platform/reworkd_platform/db/dependencies.py b/platform/reworkd_platform/db/dependencies.py
new file mode 100644
index 0000000..cdd6ce8
--- /dev/null
+++ b/platform/reworkd_platform/db/dependencies.py
@@ -0,0 +1,20 @@
+from typing import AsyncGenerator
+
+from sqlalchemy.ext.asyncio import AsyncSession
+from starlette.requests import Request
+
+
+async def get_db_session(request: Request) -> AsyncGenerator[AsyncSession, None]:
+ """
+ Create and get database session.
+
+ :param request: current request.
+ :yield: database session.
+ """
+ session: AsyncSession = request.app.state.db_session_factory()
+
+ try: # noqa: WPS501
+ yield session
+ await session.commit()
+ finally:
+ await session.close()
diff --git a/platform/reworkd_platform/db/meta.py b/platform/reworkd_platform/db/meta.py
new file mode 100644
index 0000000..4c95254
--- /dev/null
+++ b/platform/reworkd_platform/db/meta.py
@@ -0,0 +1,3 @@
+import sqlalchemy as sa
+
+meta = sa.MetaData()
diff --git a/platform/reworkd_platform/db/models/__init__.py b/platform/reworkd_platform/db/models/__init__.py
new file mode 100644
index 0000000..b1452ae
--- /dev/null
+++ b/platform/reworkd_platform/db/models/__init__.py
@@ -0,0 +1,14 @@
+"""reworkd_platform models."""
+import pkgutil
+from pathlib import Path
+
+
+def load_all_models() -> None:
+ """Load all models from this folder."""
+ package_dir = Path(__file__).resolve().parent
+ modules = pkgutil.walk_packages(
+ path=[str(package_dir)],
+ prefix="reworkd_platform.db.models.",
+ )
+ for module in modules:
+ __import__(module.name) # noqa: WPS421
diff --git a/platform/reworkd_platform/db/models/agent.py b/platform/reworkd_platform/db/models/agent.py
new file mode 100644
index 0000000..a0fa58c
--- /dev/null
+++ b/platform/reworkd_platform/db/models/agent.py
@@ -0,0 +1,24 @@
+from sqlalchemy import DateTime, String, Text, func
+from sqlalchemy.orm import mapped_column
+
+from reworkd_platform.db.base import Base
+
+
+class AgentRun(Base):
+ __tablename__ = "agent_run"
+
+ user_id = mapped_column(String, nullable=False)
+ goal = mapped_column(Text, nullable=False)
+ create_date = mapped_column(
+ DateTime, name="create_date", server_default=func.now(), nullable=False
+ )
+
+
+class AgentTask(Base):
+ __tablename__ = "agent_task"
+
+ run_id = mapped_column(String, nullable=False)
+ type_ = mapped_column(String, nullable=False, name="type")
+ create_date = mapped_column(
+ DateTime, name="create_date", server_default=func.now(), nullable=False
+ )
diff --git a/platform/reworkd_platform/db/models/auth.py b/platform/reworkd_platform/db/models/auth.py
new file mode 100644
index 0000000..18a087d
--- /dev/null
+++ b/platform/reworkd_platform/db/models/auth.py
@@ -0,0 +1,36 @@
+from sqlalchemy import DateTime, String
+from sqlalchemy.orm import mapped_column
+
+from reworkd_platform.db.base import TrackedModel
+
+
+class Organization(TrackedModel):
+ __tablename__ = "organization"
+
+ name = mapped_column(String, nullable=False)
+ created_by = mapped_column(String, nullable=False)
+
+
+class OrganizationUser(TrackedModel):
+ __tablename__ = "organization_user"
+
+ user_id = mapped_column(String, nullable=False)
+ organization_id = mapped_column(String, nullable=False)
+ role = mapped_column(String, nullable=False, default="member")
+
+
+class OauthCredentials(TrackedModel):
+ __tablename__ = "oauth_credentials"
+
+ user_id = mapped_column(String, nullable=False)
+ organization_id = mapped_column(String, nullable=True)
+ provider = mapped_column(String, nullable=False)
+ state = mapped_column(String, nullable=False)
+ redirect_uri = mapped_column(String, nullable=False)
+
+ # Post-installation
+ token_type = mapped_column(String, nullable=True)
+ access_token_enc = mapped_column(String, nullable=True)
+ access_token_expiration = mapped_column(DateTime, nullable=True)
+ refresh_token_enc = mapped_column(String, nullable=True)
+ scope = mapped_column(String, nullable=True)
diff --git a/platform/reworkd_platform/db/models/user.py b/platform/reworkd_platform/db/models/user.py
new file mode 100644
index 0000000..ba7d763
--- /dev/null
+++ b/platform/reworkd_platform/db/models/user.py
@@ -0,0 +1,38 @@
+from typing import List
+
+from sqlalchemy import DateTime, ForeignKey, Index, String, text
+from sqlalchemy.orm import Mapped, mapped_column, relationship
+
+from reworkd_platform.db.base import Base
+
+
+class UserSession(Base):
+ __tablename__ = "Session"
+
+ session_token = mapped_column(String, unique=True, name="sessionToken")
+ user_id = mapped_column(
+ String, ForeignKey("User.id", ondelete="CASCADE"), name="userId"
+ )
+ expires = mapped_column(DateTime)
+
+ user = relationship("User")
+
+ __table_args__ = (Index("user_id"),)
+
+
+class User(Base):
+ __tablename__ = "User"
+
+ name = mapped_column(String, nullable=True)
+ email = mapped_column(String, nullable=True, unique=True)
+ email_verified = mapped_column(DateTime, nullable=True, name="emailVerified")
+ image = mapped_column(String, nullable=True)
+ create_date = mapped_column(
+ DateTime, server_default=text("(now())"), name="createDate"
+ )
+
+ sessions: Mapped[List["UserSession"]] = relationship(
+ "UserSession", back_populates="user"
+ )
+
+ __table_args__ = (Index("email"),)
diff --git a/platform/reworkd_platform/db/utils.py b/platform/reworkd_platform/db/utils.py
new file mode 100644
index 0000000..3fe433c
--- /dev/null
+++ b/platform/reworkd_platform/db/utils.py
@@ -0,0 +1,57 @@
+from ssl import CERT_REQUIRED
+
+from sqlalchemy import text
+from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
+
+from reworkd_platform.services.ssl import get_ssl_context
+from reworkd_platform.settings import settings
+
+
+def create_engine() -> AsyncEngine:
+ """
+ Creates SQLAlchemy engine instance.
+
+ :return: SQLAlchemy engine instance.
+ """
+ if settings.environment == "development":
+ return create_async_engine(
+ str(settings.db_url),
+ echo=settings.db_echo,
+ )
+
+ ssl_context = get_ssl_context(settings)
+ ssl_context.verify_mode = CERT_REQUIRED
+ connect_args = {"ssl": ssl_context}
+
+ return create_async_engine(
+ str(settings.db_url),
+ echo=settings.db_echo,
+ connect_args=connect_args,
+ )
+
+
+async def create_database() -> None:
+ """Create a database."""
+ engine = create_async_engine(str(settings.db_url.with_path("/mysql")))
+
+ async with engine.connect() as conn:
+ database_existance = await conn.execute(
+ text(
+ "SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA" # noqa: S608
+ f" WHERE SCHEMA_NAME='{settings.db_base}';",
+ )
+ )
+ database_exists = database_existance.scalar() == 1
+
+ if database_exists:
+ await drop_database()
+
+ async with engine.connect() as conn: # noqa: WPS440
+ await conn.execute(text(f"CREATE DATABASE {settings.db_base};"))
+
+
+async def drop_database() -> None:
+ """Drop current database."""
+ engine = create_async_engine(str(settings.db_url.with_path("/mysql")))
+ async with engine.connect() as conn:
+ await conn.execute(text(f"DROP DATABASE {settings.db_base};"))
diff --git a/platform/reworkd_platform/logging.py b/platform/reworkd_platform/logging.py
new file mode 100644
index 0000000..5d785bb
--- /dev/null
+++ b/platform/reworkd_platform/logging.py
@@ -0,0 +1,63 @@
+import logging
+import sys
+from typing import Union
+
+from loguru import logger
+
+from reworkd_platform.settings import settings
+
+
+class InterceptHandler(logging.Handler):
+ """
+ Default handler from examples in loguru documentation.
+
+ This handler intercepts all log requests and
+ passes them to loguru.
+
+ For more info see:
+ https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
+ """
+
+ def emit(self, record: logging.LogRecord) -> None: # pragma: no cover
+ """
+ Propagates logs to loguru.
+
+ :param record: record to log.
+ """
+ try:
+ level: Union[str, int] = logger.level(record.levelname).name
+ except ValueError:
+ level = record.levelno
+
+ # Find caller from where originated the logged message
+ frame, depth = logging.currentframe(), 2
+ while frame.f_code.co_filename == logging.__file__:
+ frame = frame.f_back # type: ignore
+ depth += 1
+
+ logger.opt(depth=depth, exception=record.exc_info).log(
+ level,
+ record.getMessage(),
+ )
+
+
+def configure_logging() -> None: # pragma: no cover
+ """Configures logging."""
+ intercept_handler = InterceptHandler()
+
+ logging.basicConfig(handlers=[intercept_handler], level=logging.NOTSET)
+
+ for logger_name in logging.root.manager.loggerDict:
+ if logger_name.startswith("uvicorn."):
+ logging.getLogger(logger_name).handlers = []
+
+ # change handler for default uvicorn logger
+ logging.getLogger("uvicorn").handlers = [intercept_handler]
+ logging.getLogger("uvicorn.access").handlers = [intercept_handler]
+
+ # set logs output, level and format
+ logger.remove()
+ logger.add(
+ sys.stdout,
+ level=settings.log_level,
+ )
diff --git a/platform/reworkd_platform/schemas/__init__.py b/platform/reworkd_platform/schemas/__init__.py
new file mode 100644
index 0000000..6c82c9a
--- /dev/null
+++ b/platform/reworkd_platform/schemas/__init__.py
@@ -0,0 +1,2 @@
+from .agent import ModelSettings
+from .user import UserBase
diff --git a/platform/reworkd_platform/schemas/agent.py b/platform/reworkd_platform/schemas/agent.py
new file mode 100644
index 0000000..f6c5e6e
--- /dev/null
+++ b/platform/reworkd_platform/schemas/agent.py
@@ -0,0 +1,87 @@
+from datetime import datetime
+from typing import Any, Dict, List, Literal, Optional
+
+from pydantic import BaseModel, Field, validator
+
+from reworkd_platform.web.api.agent.analysis import Analysis
+
+LLM_Model = Literal[
+ "gpt-3.5-turbo",
+ "gpt-3.5-turbo-16k",
+ "gpt-4",
+]
+Loop_Step = Literal[
+ "start",
+ "analyze",
+ "execute",
+ "create",
+ "summarize",
+ "chat",
+]
+LLM_MODEL_MAX_TOKENS: Dict[LLM_Model, int] = {
+ "gpt-3.5-turbo": 4000,
+ "gpt-3.5-turbo-16k": 16000,
+ "gpt-4": 8000,
+}
+
+
+class ModelSettings(BaseModel):
+ model: LLM_Model = Field(default="gpt-3.5-turbo")
+ custom_api_key: Optional[str] = Field(default=None)
+ temperature: float = Field(default=0.9, ge=0.0, le=1.0)
+ max_tokens: int = Field(default=500, ge=0)
+ language: str = Field(default="English")
+
+ @validator("max_tokens")
+ def validate_max_tokens(cls, v: float, values: Dict[str, Any]) -> float:
+ model = values["model"]
+ if v > (max_tokens := LLM_MODEL_MAX_TOKENS[model]):
+ raise ValueError(f"Model {model} only supports {max_tokens} tokens")
+ return v
+
+
+class AgentRunCreate(BaseModel):
+ goal: str
+ model_settings: ModelSettings = Field(default=ModelSettings())
+
+
+class AgentRun(AgentRunCreate):
+ run_id: str
+
+
+class AgentTaskAnalyze(AgentRun):
+ task: str
+ tool_names: List[str] = Field(default=[])
+ model_settings: ModelSettings = Field(default=ModelSettings())
+
+
+class AgentTaskExecute(AgentRun):
+ task: str
+ analysis: Analysis
+
+
+class AgentTaskCreate(AgentRun):
+ tasks: List[str] = Field(default=[])
+ last_task: Optional[str] = Field(default=None)
+ result: Optional[str] = Field(default=None)
+ completed_tasks: List[str] = Field(default=[])
+
+
+class AgentSummarize(AgentRun):
+ results: List[str] = Field(default=[])
+
+
+class AgentChat(AgentRun):
+ message: str
+ results: List[str] = Field(default=[])
+
+
+class NewTasksResponse(BaseModel):
+ run_id: str
+ new_tasks: List[str] = Field(alias="newTasks")
+
+
+class RunCount(BaseModel):
+ count: int
+ first_run: Optional[datetime]
+ last_run: Optional[datetime]
diff --git a/platform/reworkd_platform/schemas/user.py b/platform/reworkd_platform/schemas/user.py
new file mode 100644
index 0000000..a1180f8
--- /dev/null
+++ b/platform/reworkd_platform/schemas/user.py
@@ -0,0 +1,21 @@
+from typing import Optional
+
+from pydantic import BaseModel, Field
+
+
+class OrganizationRole(BaseModel):
+ id: str
+ role: str
+ organization_id: str
+
+
+class UserBase(BaseModel):
+ id: str
+ name: Optional[str]
+ email: Optional[str]
+ image: Optional[str] = Field(default=None)
+ organization: Optional[OrganizationRole] = Field(default=None)
+
+ @property
+ def organization_id(self) -> Optional[str]:
+ return self.organization.organization_id if self.organization else None
diff --git a/platform/reworkd_platform/services/__init__.py b/platform/reworkd_platform/services/__init__.py
new file mode 100644
index 0000000..0bc6576
--- /dev/null
+++ b/platform/reworkd_platform/services/__init__.py
@@ -0,0 +1 @@
+"""Services for reworkd_platform."""
diff --git a/platform/reworkd_platform/services/anthropic.py b/platform/reworkd_platform/services/anthropic.py
new file mode 100644
index 0000000..a15b36c
--- /dev/null
+++ b/platform/reworkd_platform/services/anthropic.py
@@ -0,0 +1,42 @@
+from typing import Any, Optional
+
+from anthropic import AsyncAnthropic
+from pydantic import BaseModel
+
+
+class AbstractPrompt(BaseModel):
+ def to_string(self) -> str:
+ raise NotImplementedError
+
+
+class HumanAssistantPrompt(AbstractPrompt):
+ assistant_prompt: str
+ human_prompt: str
+
+ def to_string(self) -> str:
+ return (
+ f"""\n\nHuman: {self.human_prompt}\n\nAssistant: {self.assistant_prompt}"""
+ )
+
+
+class ClaudeService:
+ def __init__(self, api_key: Optional[str], model: str = "claude-2"):
+ self.claude = AsyncAnthropic(api_key=api_key)
+ self.model = model
+
+ async def completion(
+ self,
+ prompt: AbstractPrompt,
+ max_tokens_to_sample: int,
+ temperature: int = 0,
+ **kwargs: Any,
+ ) -> str:
+ return (
+ await self.claude.completions.create(
+ model=self.model,
+ prompt=prompt.to_string(),
+ max_tokens_to_sample=max_tokens_to_sample,
+ temperature=temperature,
+ **kwargs,
+ )
+ ).completion.strip()
diff --git a/platform/reworkd_platform/services/aws/__init__.py b/platform/reworkd_platform/services/aws/__init__.py
new file mode 100644
index 0000000..1f1ee98
--- /dev/null
+++ b/platform/reworkd_platform/services/aws/__init__.py
@@ -0,0 +1,7 @@
+import boto3
+from botocore.exceptions import ProfileNotFound
+
+try:
+ boto3.setup_default_session(profile_name="dev")
+except ProfileNotFound:
+ pass
diff --git a/platform/reworkd_platform/services/aws/s3.py b/platform/reworkd_platform/services/aws/s3.py
new file mode 100644
index 0000000..e721015
--- /dev/null
+++ b/platform/reworkd_platform/services/aws/s3.py
@@ -0,0 +1,85 @@
+import io
+import os
+from typing import Dict, List, Optional
+
+from aiohttp import ClientError
+from boto3 import client as boto3_client
+from loguru import logger
+from pydantic import BaseModel
+
+REGION = "us-east-1"
+
+
+# noinspection SpellCheckingInspection
+class PresignedPost(BaseModel):
+ url: str
+ fields: Dict[str, str]
+
+
+class SimpleStorageService:
+ # TODO: would be great if with could make this async
+
+ def __init__(self, bucket: Optional[str]) -> None:
+ if not bucket:
+ raise ValueError("Bucket name must be provided")
+
+ self._client = boto3_client("s3", region_name=REGION)
+ self._bucket = bucket
+
+ def create_presigned_upload_url(
+ self,
+ object_name: str,
+ ) -> PresignedPost:
+ return PresignedPost(
+ **self._client.generate_presigned_post(
+ Bucket=self._bucket,
+ Key=object_name,
+ )
+ )
+
+ def create_presigned_download_url(self, object_name: str) -> str:
+ return self._client.generate_presigned_url(
+ "get_object",
+ Params={"Bucket": self._bucket, "Key": object_name},
+ )
+
+ def upload_to_bucket(
+ self,
+ object_name: str,
+ file: io.BytesIO,
+ ) -> None:
+ try:
+ self._client.put_object(
+ Bucket=self._bucket, Key=object_name, Body=file.getvalue()
+ )
+ except ClientError as e:
+ logger.error(e)
+ raise e
+
+ def download_file(self, object_name: str, local_filename: str) -> None:
+ self._client.download_file(
+ Bucket=self._bucket, Key=object_name, Filename=local_filename
+ )
+
+ def list_keys(self, prefix: str) -> List[str]:
+ files = self._client.list_objects_v2(Bucket=self._bucket, Prefix=prefix)
+ if "Contents" not in files:
+ return []
+
+ return [file["Key"] for file in files["Contents"]]
+
+ def download_folder(self, prefix: str, path: str) -> List[str]:
+ local_files = []
+ for key in self.list_keys(prefix):
+ local_filename = os.path.join(path, key.split("/")[-1])
+ self.download_file(key, local_filename)
+ local_files.append(local_filename)
+
+ return local_files
+
+ def delete_folder(self, prefix: str) -> None:
+ keys = self.list_keys(prefix)
+ self._client.delete_objects(
+ Bucket=self._bucket,
+ Delete={"Objects": [{"Key": key} for key in keys]},
+ )
diff --git a/platform/reworkd_platform/services/oauth_installers.py b/platform/reworkd_platform/services/oauth_installers.py
new file mode 100644
index 0000000..ff920c7
--- /dev/null
+++ b/platform/reworkd_platform/services/oauth_installers.py
@@ -0,0 +1,147 @@
+import json
+from abc import ABC, abstractmethod
+from datetime import datetime, timedelta
+from urllib.parse import urlencode
+
+import aiohttp
+from fastapi import Depends, Path
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.db.models.auth import OauthCredentials
+from reworkd_platform.schemas import UserBase
+from reworkd_platform.services.security import encryption_service
+from reworkd_platform.settings import Settings
+from reworkd_platform.settings import settings as platform_settings
+from reworkd_platform.web.api.http_responses import forbidden
+
+
+class OAuthInstaller(ABC):
+ def __init__(self, crud: OAuthCrud, settings: Settings):
+ self.crud = crud
+ self.settings = settings
+
+ @abstractmethod
+ async def install(self, user: UserBase, redirect_uri: str) -> str:
+ raise NotImplementedError()
+
+ @abstractmethod
+ async def install_callback(self, code: str, state: str) -> OauthCredentials:
+ raise NotImplementedError()
+
+ @abstractmethod
+ async def uninstall(self, user: UserBase) -> bool:
+ raise NotImplementedError()
+
+ @staticmethod
+ def store_access_token(creds: OauthCredentials, access_token: str) -> None:
+ creds.access_token_enc = encryption_service.encrypt(access_token)
+
+ @staticmethod
+ def store_refresh_token(creds: OauthCredentials, refresh_token: str) -> None:
+ creds.refresh_token_enc = encryption_service.encrypt(refresh_token)
+
+
+class SIDInstaller(OAuthInstaller):
+ PROVIDER = "sid"
+
+ async def install(self, user: UserBase, redirect_uri: str) -> str:
+ # gracefully handle the case where the installation already exists
+ # this can happen if the user starts the process from multiple tabs
+ installation = await self.crud.get_installation_by_user_id(
+ user.id, self.PROVIDER
+ )
+ if not installation:
+ installation = await self.crud.create_installation(
+ user,
+ self.PROVIDER,
+ redirect_uri,
+ )
+ scopes = ["data:query", "offline_access"]
+ params = {
+ "client_id": self.settings.sid_client_id,
+ "redirect_uri": self.settings.sid_redirect_uri,
+ "response_type": "code",
+ "scope": " ".join(scopes),
+ "state": installation.state,
+ "audience": "https://api.sid.ai/api/v1/",
+ }
+ auth_url = "https://me.sid.ai/api/oauth/authorize"
+ auth_url += "?" + urlencode(params)
+ return auth_url
+
+ async def install_callback(self, code: str, state: str) -> OauthCredentials:
+ creds = await self.crud.get_installation_by_state(state)
+ if not creds:
+ raise forbidden()
+ req = {
+ "grant_type": "authorization_code",
+ "client_id": self.settings.sid_client_id,
+ "client_secret": self.settings.sid_client_secret,
+ "redirect_uri": self.settings.sid_redirect_uri,
+ "code": code,
+ }
+ async with aiohttp.ClientSession() as session:
+ async with session.post(
+ "https://auth.sid.ai/oauth/token",
+ headers={
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ },
+ data=json.dumps(req),
+ ) as response:
+ res_data = await response.json()
+
+ OAuthInstaller.store_access_token(creds, res_data["access_token"])
+ OAuthInstaller.store_refresh_token(creds, res_data["refresh_token"])
+ creds.access_token_expiration = datetime.now() + timedelta(
+ seconds=res_data["expires_in"]
+ )
+ return await creds.save(self.crud.session)
+
+ async def uninstall(self, user: UserBase) -> bool:
+ creds = await self.crud.get_installation_by_user_id(user.id, self.PROVIDER)
+ # check if credentials exist and contain a refresh token
+ if not creds:
+ return False
+
+ # use refresh token to revoke access
+ delete_token = encryption_service.decrypt(creds.refresh_token_enc)
+ # delete credentials from database
+ await self.crud.session.delete(creds)
+
+ # revoke refresh token
+ async with aiohttp.ClientSession() as session:
+ await session.post(
+ "https://auth.sid.ai/oauth/revoke",
+ headers={
+ "Content-Type": "application/json",
+ },
+ data=json.dumps(
+ {
+ "client_id": self.settings.sid_client_id,
+ "client_secret": self.settings.sid_client_secret,
+ "token": delete_token,
+ }
+ ),
+ )
+ return True
+
+
+integrations = {
+ SIDInstaller.PROVIDER: SIDInstaller,
+}
+
+
+def installer_factory(
+ provider: str = Path(description="OAuth Provider"),
+ crud: OAuthCrud = Depends(OAuthCrud.inject),
+) -> OAuthInstaller:
+ """Factory for OAuth installers
+ Args:
+ provider (str): OAuth Provider (can be slack, github, etc.) (injected)
+ crud (OAuthCrud): OAuth Crud (injected)
+ """
+
+ if provider in integrations:
+ return integrations[provider](crud, platform_settings)
+ raise NotImplementedError()
diff --git a/platform/reworkd_platform/services/pinecone/__init__.py b/platform/reworkd_platform/services/pinecone/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/platform/reworkd_platform/services/pinecone/lifetime.py b/platform/reworkd_platform/services/pinecone/lifetime.py
new file mode 100644
index 0000000..be44019
--- /dev/null
+++ b/platform/reworkd_platform/services/pinecone/lifetime.py
@@ -0,0 +1,11 @@
+import pinecone
+
+from reworkd_platform.settings import settings
+
+
+def init_pinecone() -> None:
+ if settings.pinecone_api_key and settings.pinecone_environment:
+ pinecone.init(
+ api_key=settings.pinecone_api_key,
+ environment=settings.pinecone_environment,
+ )
diff --git a/platform/reworkd_platform/services/pinecone/pinecone.py b/platform/reworkd_platform/services/pinecone/pinecone.py
new file mode 100644
index 0000000..db64ad9
--- /dev/null
+++ b/platform/reworkd_platform/services/pinecone/pinecone.py
@@ -0,0 +1,98 @@
+from __future__ import annotations
+
+import uuid
+from typing import Any, Dict, List
+
+from langchain.embeddings import OpenAIEmbeddings
+from langchain.embeddings.base import Embeddings
+from pinecone import Index # import doesnt work on plane wifi
+from pydantic import BaseModel
+
+from reworkd_platform.settings import settings
+from reworkd_platform.timer import timed_function
+from reworkd_platform.web.api.memory.memory import AgentMemory
+
+OPENAI_EMBEDDING_DIM = 1536
+
+
+class Row(BaseModel):
+ id: str
+ values: List[float]
+ metadata: Dict[str, Any] = {}
+
+
+class QueryResult(BaseModel):
+ id: str
+ score: float
+ metadata: Dict[str, Any] = {}
+
+
+class PineconeMemory(AgentMemory):
+ """
+ Wrapper around pinecone
+ """
+
+ def __init__(self, index_name: str, namespace: str = ""):
+ self.index = Index(settings.pinecone_index_name)
+ self.namespace = namespace or index_name
+
+ @timed_function(level="DEBUG")
+ def __enter__(self) -> AgentMemory:
+ self.embeddings: Embeddings = OpenAIEmbeddings(
+ client=None, # Meta private value but mypy will complain its missing
+ openai_api_key=settings.openai_api_key,
+ )
+
+ return self
+
+ def __exit__(self, *args: Any, **kwargs: Any) -> None:
+ pass
+
+ @timed_function(level="DEBUG")
+ def reset_class(self) -> None:
+ self.index.delete(delete_all=True, namespace=self.namespace)
+
+ @timed_function(level="DEBUG")
+ def add_tasks(self, tasks: List[str]) -> List[str]:
+ if len(tasks) == 0:
+ return []
+
+ embeds = self.embeddings.embed_documents(tasks)
+
+ if len(tasks) != len(embeds):
+ raise ValueError("Embeddings and tasks are not the same length")
+
+ rows = [
+ Row(values=vector, metadata={"text": tasks[i]}, id=str(uuid.uuid4()))
+ for i, vector in enumerate(embeds)
+ ]
+
+ self.index.upsert(
+ vectors=[row.dict() for row in rows], namespace=self.namespace
+ )
+
+ return [row.id for row in rows]
+
+ @timed_function(level="DEBUG")
+ def get_similar_tasks(
+ self, text: str, score_threshold: float = 0.95
+ ) -> List[QueryResult]:
+ # Get similar tasks
+ vector = self.embeddings.embed_query(text)
+ results = self.index.query(
+ vector=vector,
+ top_k=5,
+ include_metadata=True,
+ include_values=True,
+ namespace=self.namespace,
+ )
+
+ return [
+ QueryResult(id=row.id, score=row.score, metadata=row.metadata)
+ for row in getattr(results, "matches", [])
+ if row.score > score_threshold
+ ]
+
+ @staticmethod
+ def should_use() -> bool:
+ return False
diff --git a/platform/reworkd_platform/services/security.py b/platform/reworkd_platform/services/security.py
new file mode 100644
index 0000000..8f478d1
--- /dev/null
+++ b/platform/reworkd_platform/services/security.py
@@ -0,0 +1,23 @@
+from typing import Union
+
+from cryptography.fernet import Fernet, InvalidToken
+
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.http_responses import forbidden
+
+
+class EncryptionService:
+ def __init__(self, secret: bytes):
+ self.fernet = Fernet(secret)
+
+ def encrypt(self, text: str) -> bytes:
+ return self.fernet.encrypt(text.encode("utf-8"))
+
+ def decrypt(self, encoded_bytes: Union[bytes, str]) -> str:
+ try:
+ return self.fernet.decrypt(encoded_bytes).decode("utf-8")
+ except InvalidToken:
+ raise forbidden()
+
+
+encryption_service = EncryptionService(settings.secret_signing_key.encode())
diff --git a/platform/reworkd_platform/services/ssl.py b/platform/reworkd_platform/services/ssl.py
new file mode 100644
index 0000000..02289af
--- /dev/null
+++ b/platform/reworkd_platform/services/ssl.py
@@ -0,0 +1,25 @@
+from ssl import SSLContext, create_default_context
+from typing import List, Optional
+
+from reworkd_platform.settings import Settings
+
+MACOS_CERT_PATH = "/etc/ssl/cert.pem"
+DOCKER_CERT_PATH = "/etc/ssl/certs/ca-certificates.crt"
+
+
+def get_ssl_context(
+ settings: Settings, paths: Optional[List[str]] = None
+) -> SSLContext:
+ if settings.db_ca_path:
+ return create_default_context(cafile=settings.db_ca_path)
+
+ for path in paths or [MACOS_CERT_PATH, DOCKER_CERT_PATH]:
+ try:
+ return create_default_context(cafile=path)
+ except FileNotFoundError:
+ continue
+
+ raise ValueError(
+ "No CA certificates found for your OS. To fix this, please run change "
+ "db_ca_path in your settings.py to point to a valid CA certificate file."
+ )
diff --git a/platform/reworkd_platform/services/tokenizer/__init__.py b/platform/reworkd_platform/services/tokenizer/__init__.py
new file mode 100644
index 0000000..cbbb2d7
--- /dev/null
+++ b/platform/reworkd_platform/services/tokenizer/__init__.py
@@ -0,0 +1 @@
+"""Token Service"""
diff --git a/platform/reworkd_platform/services/tokenizer/dependencies.py b/platform/reworkd_platform/services/tokenizer/dependencies.py
new file mode 100644
index 0000000..6e73487
--- /dev/null
+++ b/platform/reworkd_platform/services/tokenizer/dependencies.py
@@ -0,0 +1,7 @@
+from fastapi import Request
+
+from reworkd_platform.services.tokenizer.token_service import TokenService
+
+
+def get_token_service(request: Request) -> TokenService:
+ return TokenService(request.app.state.token_encoding)
diff --git a/platform/reworkd_platform/services/tokenizer/lifetime.py b/platform/reworkd_platform/services/tokenizer/lifetime.py
new file mode 100644
index 0000000..01e207f
--- /dev/null
+++ b/platform/reworkd_platform/services/tokenizer/lifetime.py
@@ -0,0 +1,16 @@
+import tiktoken
+from fastapi import FastAPI
+
+ENCODING_NAME = "cl100k_base" # gpt-4, gpt-3.5-turbo, text-embedding-ada-002
+
+
+def init_tokenizer(app: FastAPI) -> None: # pragma: no cover
+ """
+ Initialize tokenizer.
+
+ TikToken downloads the encoding on start. It is then
+ stored in the state of the application.
+
+ :param app: current application.
+ """
+ app.state.token_encoding = tiktoken.get_encoding(ENCODING_NAME)
diff --git a/platform/reworkd_platform/services/tokenizer/token_service.py b/platform/reworkd_platform/services/tokenizer/token_service.py
new file mode 100644
index 0000000..b457c5f
--- /dev/null
+++ b/platform/reworkd_platform/services/tokenizer/token_service.py
@@ -0,0 +1,33 @@
+from tiktoken import Encoding, get_encoding
+
+from reworkd_platform.schemas.agent import LLM_MODEL_MAX_TOKENS, LLM_Model
+from reworkd_platform.web.api.agent.model_factory import WrappedChatOpenAI
+
+
+class TokenService:
+ def __init__(self, encoding: Encoding):
+ self.encoding = encoding
+
+ @classmethod
+ def create(cls, encoding: str = "cl100k_base") -> "TokenService":
+ return cls(get_encoding(encoding))
+
+ def tokenize(self, text: str) -> list[int]:
+ return self.encoding.encode(text)
+
+ def detokenize(self, tokens: list[int]) -> str:
+ return self.encoding.decode(tokens)
+
+ def count(self, text: str) -> int:
+ return len(self.tokenize(text))
+
+ def get_completion_space(self, model: LLM_Model, *prompts: str) -> int:
+ max_allowed_tokens = LLM_MODEL_MAX_TOKENS.get(model, 4000)
+ prompt_tokens = sum([self.count(p) for p in prompts])
+ return max_allowed_tokens - prompt_tokens
+
+ def calculate_max_tokens(self, model: WrappedChatOpenAI, *prompts: str) -> None:
+ requested_tokens = self.get_completion_space(model.model_name, *prompts)
+
+ model.max_tokens = min(model.max_tokens, requested_tokens)
+ model.max_tokens = max(model.max_tokens, 1)
diff --git a/platform/reworkd_platform/settings.py b/platform/reworkd_platform/settings.py
new file mode 100644
index 0000000..fe3563d
--- /dev/null
+++ b/platform/reworkd_platform/settings.py
@@ -0,0 +1,178 @@
+import platform
+from pathlib import Path
+from tempfile import gettempdir
+from typing import List, Literal, Optional, Union
+
+from pydantic import BaseSettings
+from yarl import URL
+
+from reworkd_platform.constants import ENV_PREFIX
+
+TEMP_DIR = Path(gettempdir())
+
+LOG_LEVEL = Literal[
+ "NOTSET",
+ "DEBUG",
+ "INFO",
+ "WARNING",
+ "ERROR",
+ "FATAL",
+]
+
+
+SASL_MECHANISM = Literal[
+ "PLAIN",
+ "SCRAM-SHA-256",
+]
+
+ENVIRONMENT = Literal[
+ "development",
+ "production",
+]
+
+
+class Settings(BaseSettings):
+ """
+ Application settings.
+
+ These parameters can be configured
+ with environment variables.
+ """
+
+ # Application settings
+ host: str = "127.0.0.1"
+ port: int = 8000
+ workers_count: int = 1
+ reload: bool = True
+ environment: ENVIRONMENT = "development"
+ log_level: LOG_LEVEL = "INFO"
+
+ # Make sure you update this with your own secret key
+ # Must be 32 url-safe base64-encoded bytes
+ secret_signing_key: str = "JF52S66x6WMoifP5gZreiguYs9LYMn0lkXqgPYoNMD0="
+
+ # OpenAI
+ openai_api_base: str = "https://api.openai.com/v1"
+ openai_api_key: str = ""
+ openai_api_version: str = "2023-08-01-preview"
+ azure_openai_deployment_name: str = ""
+
+ # Helicone
+ helicone_api_base: str = "https://oai.hconeai.com/v1"
+ helicone_api_key: Optional[str] = None
+
+ replicate_api_key: Optional[str] = None
+ serp_api_key: Optional[str] = None
+
+ # Frontend URL for CORS
+ frontend_url: str = "http://localhost:3000"
+ allowed_origins_regex: Optional[str] = None
+
+ # Variables for the database
+ db_host: str = "localhost"
+ db_port: int = 3308
+ db_user: str = "reworkd_platform"
+ db_pass: str = "reworkd_platform"
+ db_base: str = "reworkd_platform"
+ db_echo: bool = False
+ db_ca_path: Optional[str] = None
+
+ # Variables for Pinecone DB
+ pinecone_api_key: Optional[str] = None
+ pinecone_index_name: Optional[str] = None
+ pinecone_environment: Optional[str] = None
+
+ # Sentry's configuration.
+ sentry_dsn: Optional[str] = None
+ sentry_sample_rate: float = 1.0
+
+ kafka_bootstrap_servers: Union[str, List[str]] = []
+ kafka_username: Optional[str] = None
+ kafka_password: Optional[str] = None
+ kafka_ssal_mechanism: SASL_MECHANISM = "PLAIN"
+
+ # Websocket settings
+ pusher_app_id: Optional[str] = None
+ pusher_key: Optional[str] = None
+ pusher_secret: Optional[str] = None
+ pusher_cluster: Optional[str] = None
+
+ # Application Settings
+ ff_mock_mode_enabled: bool = False # Controls whether calls are mocked
+ max_loops: int = 25 # Maximum number of loops to run
+
+ # Settings for sid
+ sid_client_id: Optional[str] = None
+ sid_client_secret: Optional[str] = None
+ sid_redirect_uri: Optional[str] = None
+
+ @property
+ def kafka_consumer_group(self) -> str:
+ """
+ Kafka consumer group will be the name of the host in development
+ mode, making it easier to share a dev cluster.
+ """
+
+ if self.environment == "development":
+ return platform.node()
+
+ return "platform"
+
+ @property
+ def db_url(self) -> URL:
+ return URL.build(
+ scheme="mysql+aiomysql",
+ host=self.db_host,
+ port=self.db_port,
+ user=self.db_user,
+ password=self.db_pass,
+ path=f"/{self.db_base}",
+ )
+
+ @property
+ def pusher_enabled(self) -> bool:
+ return all(
+ [
+ self.pusher_app_id,
+ self.pusher_key,
+ self.pusher_secret,
+ self.pusher_cluster,
+ ]
+ )
+
+ @property
+ def kafka_enabled(self) -> bool:
+ return all(
+ [
+ self.kafka_bootstrap_servers,
+ self.kafka_username,
+ self.kafka_password,
+ ]
+ )
+
+ @property
+ def helicone_enabled(self) -> bool:
+ return all(
+ [
+ self.helicone_api_base,
+ self.helicone_api_key,
+ ]
+ )
+
+ @property
+ def sid_enabled(self) -> bool:
+ return all(
+ [
+ self.sid_client_id,
+ self.sid_client_secret,
+ self.sid_redirect_uri,
+ ]
+ )
+
+ class Config:
+ env_file = ".env"
+ env_prefix = ENV_PREFIX
+ env_file_encoding = "utf-8"
+
+
+settings = Settings()
diff --git a/platform/reworkd_platform/tests/__init__.py b/platform/reworkd_platform/tests/__init__.py
new file mode 100644
index 0000000..59a6c64
--- /dev/null
+++ b/platform/reworkd_platform/tests/__init__.py
@@ -0,0 +1 @@
+"""Tests for reworkd_platform."""
diff --git a/platform/reworkd_platform/tests/agent/test_analysis.py b/platform/reworkd_platform/tests/agent/test_analysis.py
new file mode 100644
index 0000000..e240a1e
--- /dev/null
+++ b/platform/reworkd_platform/tests/agent/test_analysis.py
@@ -0,0 +1,31 @@
+import pytest
+from pydantic import ValidationError
+
+from reworkd_platform.web.api.agent.analysis import Analysis
+from reworkd_platform.web.api.agent.tools.tools import get_default_tool, get_tool_name
+
+
+def test_analysis_model() -> None:
+ valid_tool_name = get_tool_name(get_default_tool())
+ analysis = Analysis(action=valid_tool_name, arg="arg", reasoning="reasoning")
+
+ assert analysis.action == valid_tool_name
+ assert analysis.arg == "arg"
+ assert analysis.reasoning == "reasoning"
+
+
+def test_analysis_model_search_empty_arg() -> None:
+ with pytest.raises(ValidationError):
+ Analysis(action="search", arg="", reasoning="reasoning")
+
+
+def test_analysis_model_search_non_empty_arg() -> None:
+ analysis = Analysis(action="search", arg="non-empty arg", reasoning="reasoning")
+ assert analysis.action == "search"
+ assert analysis.arg == "non-empty arg"
+ assert analysis.reasoning == "reasoning"
+
+
+def test_analysis_model_invalid_tool() -> None:
+ with pytest.raises(ValidationError):
+ Analysis(action="invalid tool name", arg="test argument", reasoning="reasoning")
diff --git a/platform/reworkd_platform/tests/agent/test_crud.py b/platform/reworkd_platform/tests/agent/test_crud.py
new file mode 100644
index 0000000..1f2ab91
--- /dev/null
+++ b/platform/reworkd_platform/tests/agent/test_crud.py
@@ -0,0 +1,63 @@
+from unittest.mock import AsyncMock
+
+import pytest
+from fastapi import HTTPException
+from pytest_mock import MockerFixture
+
+from reworkd_platform.db.crud.agent import AgentCRUD
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.errors import MaxLoopsError, MultipleSummaryError
+
+
+@pytest.mark.asyncio
+async def test_validate_task_count_no_error(mocker) -> None:
+ mock_agent_run_exists(mocker, True)
+ session = mock_session_with_run_count(mocker, 0)
+ agent_crud: AgentCRUD = AgentCRUD(session, mocker.MagicMock())
+
+ # Doesn't throw an exception
+ await agent_crud.validate_task_count("test", "summarize")
+
+
+@pytest.mark.asyncio
+async def test_validate_task_count_when_run_not_found(mocker: MockerFixture) -> None:
+ mock_agent_run_exists(mocker, False)
+ agent_crud: AgentCRUD = AgentCRUD(mocker.AsyncMock(), mocker.MagicMock())
+
+ with pytest.raises(HTTPException):
+ await agent_crud.validate_task_count("test", "test")
+
+
+@pytest.mark.asyncio
+async def test_validate_task_count_max_loops_error(mocker: MockerFixture) -> None:
+ mock_agent_run_exists(mocker, True)
+ session = mock_session_with_run_count(mocker, settings.max_loops)
+ agent_crud: AgentCRUD = AgentCRUD(session, mocker.AsyncMock())
+
+ with pytest.raises(MaxLoopsError):
+ await agent_crud.validate_task_count("test", "test")
+
+
+@pytest.mark.asyncio
+async def test_validate_task_count_multiple_summary_error(
+ mocker: MockerFixture,
+) -> None:
+ mock_agent_run_exists(mocker, True)
+ session = mock_session_with_run_count(mocker, 2)
+ agent_crud: AgentCRUD = AgentCRUD(session, mocker.MagicMock())
+
+ with pytest.raises(MultipleSummaryError):
+ await agent_crud.validate_task_count("test", "summarize")
+
+
+def mock_agent_run_exists(mocker: MockerFixture, exists: bool) -> None:
+ mocker.patch("reworkd_platform.db.models.agent.AgentRun.get", return_value=exists)
+
+
+def mock_session_with_run_count(mocker: MockerFixture, run_count: int) -> AsyncMock:
+ session = mocker.AsyncMock()
+ scalar_mock = mocker.MagicMock()
+
+ session.execute.return_value = scalar_mock
+ scalar_mock.scalar_one.return_value = run_count
+ return session
diff --git a/platform/reworkd_platform/tests/agent/test_model_factory.py b/platform/reworkd_platform/tests/agent/test_model_factory.py
new file mode 100644
index 0000000..f657989
--- /dev/null
+++ b/platform/reworkd_platform/tests/agent/test_model_factory.py
@@ -0,0 +1,138 @@
+import itertools
+
+import pytest
+from langchain.chat_models import AzureChatOpenAI, ChatOpenAI
+
+from reworkd_platform.schemas import ModelSettings, UserBase
+from reworkd_platform.settings import Settings
+from reworkd_platform.web.api.agent.model_factory import (
+ WrappedAzureChatOpenAI,
+ WrappedChatOpenAI,
+ create_model,
+ get_base_and_headers,
+)
+
+
+def test_helicone_enabled_without_custom_api_key():
+ model_settings = ModelSettings()
+ user = UserBase(id="user_id")
+ settings = Settings(
+ helicone_api_key="some_key",
+ helicone_api_base="helicone_base",
+ openai_api_base="openai_base",
+ )
+
+ base, headers, use_helicone = get_base_and_headers(settings, model_settings, user)
+
+ assert use_helicone is True
+ assert base == "helicone_base"
+ assert headers == {
+ "Helicone-Auth": "Bearer some_key",
+ "Helicone-Cache-Enabled": "true",
+ "Helicone-User-Id": "user_id",
+ "Helicone-OpenAI-Api-Base": "openai_base",
+ }
+
+
+def test_helicone_disabled():
+ model_settings = ModelSettings()
+ user = UserBase(id="user_id")
+ settings = Settings()
+
+ base, headers, use_helicone = get_base_and_headers(settings, model_settings, user)
+ assert base == "https://api.openai.com/v1"
+ assert headers is None
+ assert use_helicone is False
+
+
+def test_helicone_enabled_with_custom_api_key():
+ model_settings = ModelSettings(
+ custom_api_key="custom_key",
+ )
+ user = UserBase(id="user_id")
+ settings = Settings(
+ openai_api_base="openai_base",
+ helicone_api_key="some_key",
+ helicone_api_base="helicone_base",
+ )
+
+ base, headers, use_helicone = get_base_and_headers(settings, model_settings, user)
+
+ assert base == "https://api.openai.com/v1"
+ assert headers is None
+ assert use_helicone is False
+
+
+@pytest.mark.parametrize(
+ "streaming, use_azure",
+ list(
+ itertools.product(
+ [True, False],
+ [True, False],
+ )
+ ),
+)
+def test_create_model(streaming, use_azure):
+ user = UserBase(id="user_id")
+ settings = Settings()
+ model_settings = ModelSettings(
+ temperature=0.7,
+ model="gpt-3.5-turbo",
+ max_tokens=100,
+ )
+
+ settings.openai_api_base = (
+ "https://api.openai.com" if not use_azure else "https://oai.azure.com"
+ )
+ settings.openai_api_key = "key"
+ settings.openai_api_version = "version"
+
+ result = create_model(settings, model_settings, user, streaming)
+ assert issubclass(result.__class__, WrappedChatOpenAI)
+ assert issubclass(result.__class__, ChatOpenAI)
+
+ # Check if the required keys are set properly
+ assert result.openai_api_base == settings.openai_api_base
+ assert result.openai_api_key == settings.openai_api_key
+ assert result.temperature == model_settings.temperature
+ assert result.max_tokens == model_settings.max_tokens
+ assert result.streaming == streaming
+ assert result.max_retries == 5
+
+ # For Azure specific checks
+ if use_azure:
+ assert isinstance(result, WrappedAzureChatOpenAI)
+ assert issubclass(result.__class__, AzureChatOpenAI)
+ assert result.openai_api_version == settings.openai_api_version
+ assert result.deployment_name == "gpt-35-turbo"
+ assert result.openai_api_type == "azure"
+
+
+@pytest.mark.parametrize(
+ "model_settings, streaming",
+ list(
+ itertools.product(
+ [
+ ModelSettings(
+ customTemperature=0.222,
+ customModelName="gpt-4",
+ maxTokens=1234,
+ ),
+ ModelSettings(),
+ ],
+ [True, False],
+ )
+ ),
+)
+def test_custom_model_settings(model_settings: ModelSettings, streaming: bool):
+ model = create_model(
+ Settings(),
+ model_settings,
+ UserBase(id="", email="test@example.com"),
+ streaming=streaming,
+ )
+
+ assert model.temperature == model_settings.temperature
+ assert model.model_name.startswith(model_settings.model)
+ assert model.max_tokens == model_settings.max_tokens
+ assert model.streaming == streaming
diff --git a/platform/reworkd_platform/tests/agent/test_task_output_parser.py b/platform/reworkd_platform/tests/agent/test_task_output_parser.py
new file mode 100644
index 0000000..aa85055
--- /dev/null
+++ b/platform/reworkd_platform/tests/agent/test_task_output_parser.py
@@ -0,0 +1,203 @@
+from typing import List, Type
+
+import pytest
+from langchain.schema import OutputParserException
+
+from reworkd_platform.web.api.agent.task_output_parser import (
+ TaskOutputParser,
+ extract_array,
+ real_tasks_filter,
+ remove_prefix,
+)
+
+
+@pytest.mark.parametrize(
+ "input_text,expected_output",
+ [
+ (
+ '["Task 1: Do something", "Task 2: Do something else", "Task 3: Do '
+ 'another thing"]',
+ ["Do something", "Do something else", "Do another thing"],
+ ),
+ (
+ 'Some random stuff ["1: Hello"]',
+ ["Hello"],
+ ),
+ (
+ "[]",
+ [],
+ ),
+ ],
+)
+def test_parse_success(input_text: str, expected_output: List[str]) -> None:
+ parser = TaskOutputParser(completed_tasks=[])
+ result = parser.parse(input_text)
+ assert result == expected_output
+
+
+def test_parse_with_completed_tasks() -> None:
+ input_text = '["One", "Two", "Three"]'
+ completed = ["One"]
+ expected = ["Two", "Three"]
+
+ parser = TaskOutputParser(completed_tasks=completed)
+
+ result = parser.parse(input_text)
+ assert result == expected
+
+
+@pytest.mark.parametrize(
+ "input_text, exception",
+ [
+ # Test cases for non-array and non-multiline string inputs
+ ("This is not an array", OutputParserException),
+ ("123456", OutputParserException),
+ ("Some random text", OutputParserException),
+ ("[abc]", OutputParserException),
+ # Test cases for malformed arrays
+ ("[1, 2, 3", OutputParserException),
+ ("'item1', 'item2']", OutputParserException),
+ ("['item1', 'item2", OutputParserException),
+ # Test case for invalid multiline strings
+ ("This is not\na valid\nmultiline string.", OutputParserException),
+ # Test case for multiline strings that don't start with digit + period
+ ("Some text\nMore text\nAnd more text.", OutputParserException),
+ ],
+)
+def test_parse_failure(input_text: str, exception: Type[Exception]) -> None:
+ parser = TaskOutputParser(completed_tasks=[])
+ with pytest.raises(exception):
+ parser.parse(input_text)
+
+
+@pytest.mark.parametrize(
+ "input_str, expected",
+ [
+ # Test cases for empty array
+ ("[]", []),
+ # Test cases for arrays with one element
+ ('["One"]', ["One"]),
+ ("['Single quote']", ["Single quote"]),
+ # Test cases for arrays with multiple elements
+ ('["Research", "Develop", "Integrate"]', ["Research", "Develop", "Integrate"]),
+ ('["Search", "Identify"]', ["Search", "Identify"]),
+ ('["Item 1","Item 2","Item 3"]', ["Item 1", "Item 2", "Item 3"]),
+ # Test cases for arrays with special characters in elements
+ ("['Single with \"quote\"']", ['Single with "quote"']),
+ ('["Escape \\" within"]', ['Escape " within']),
+ # Test case for array embedded in other text
+ ("Random stuff ['Search', 'Identify']", ["Search", "Identify"]),
+ # Test case for array within JSON
+ ('{"array": ["123", "456"]}', ["123", "456"]),
+ # Multiline string cases
+ (
+ "1. Identify the target\n2. Conduct research\n3. Implement the methods",
+ [
+ "1. Identify the target",
+ "2. Conduct research",
+ "3. Implement the methods",
+ ],
+ ),
+ ("1. Step one.\n2. Step two.", ["1. Step one.", "2. Step two."]),
+ (
+ """1. Review and understand the code to be debugged
+2. Identify and address any errors or issues found during the review process
+3. Print out debug information and setup initial variables
+4. Start necessary threads and execute program logic.""",
+ [
+ "1. Review and understand the code to be debugged",
+ "2. Identify and address any errors or issues found during the review "
+ "process",
+ "3. Print out debug information and setup initial variables",
+ "4. Start necessary threads and execute program logic.",
+ ],
+ ),
+ # Test cases with sentences before the digit + period pattern
+ (
+ "Any text before 1. Identify the task to be repeated\nUnrelated info 2. "
+ "Determine the frequency of the repetition\nAnother sentence 3. Create a "
+ "schedule or system to ensure completion of the task at the designated "
+ "frequency\nMore text 4. Execute the task according to the established "
+ "schedule or system",
+ [
+ "1. Identify the task to be repeated",
+ "2. Determine the frequency of the repetition",
+ "3. Create a schedule or system to ensure completion of the task at "
+ "the designated frequency",
+ "4. Execute the task according to the established schedule or system",
+ ],
+ ),
+ ],
+)
+def test_extract_array_success(input_str: str, expected: List[str]) -> None:
+ print(extract_array(input_str), expected)
+ assert extract_array(input_str) == expected
+
+
+@pytest.mark.parametrize(
+ "input_str, exception",
+ [
+ (None, TypeError),
+ ("123", RuntimeError),
+ ("Some random text", RuntimeError),
+ ('"single_string"', RuntimeError),
+ ('{"test": 123}', RuntimeError),
+ ('["Unclosed array", "other"', RuntimeError),
+ ],
+)
+def test_extract_array_exception(input_str: str, exception: Type[Exception]) -> None:
+ with pytest.raises(exception):
+ extract_array(input_str)
+
+
+@pytest.mark.parametrize(
+ "task_input, expected_output",
+ [
+ ("Task: This is a sample task", "This is a sample task"),
+ (
+ "Task 1: Perform a comprehensive analysis of system performance.",
+ "Perform a comprehensive analysis of system performance.",
+ ),
+ ("Task 2. Create a python script", "Create a python script"),
+ ("5 - This is a sample task", "This is a sample task"),
+ ("2: This is a sample task", "This is a sample task"),
+ (
+ "This is a sample task without a prefix",
+ "This is a sample task without a prefix",
+ ),
+ ("Step: This is a sample task", "This is a sample task"),
+ (
+ "Step 1: Perform a comprehensive analysis of system performance.",
+ "Perform a comprehensive analysis of system performance.",
+ ),
+ ("Step 2:Create a python script", "Create a python script"),
+ ("Step:This is a sample task", "This is a sample task"),
+ (
+ ". Conduct research on the history of Nike",
+ "Conduct research on the history of Nike",
+ ),
+ (".This is a sample task", "This is a sample task"),
+ (
+ "1. Research the history and background of Nike company.",
+ "Research the history and background of Nike company.",
+ ),
+ ],
+)
+def test_remove_task_prefix(task_input: str, expected_output: str) -> None:
+ output = remove_prefix(task_input)
+ assert output == expected_output
+
+
+@pytest.mark.parametrize(
+ "input_text, expected_result",
+ [
+ ("Write the report", True),
+ ("No new task needed", False),
+ ("Task completed", False),
+ ("Do nothing", False),
+ ("", False), # empty_string
+ ("no new task needed", False), # case_insensitive
+ ],
+)
+def test_real_tasks_filter_no_task(input_text: str, expected_result: bool) -> None:
+ assert real_tasks_filter(input_text) == expected_result
diff --git a/platform/reworkd_platform/tests/agent/test_tools.py b/platform/reworkd_platform/tests/agent/test_tools.py
new file mode 100644
index 0000000..0ac0ca8
--- /dev/null
+++ b/platform/reworkd_platform/tests/agent/test_tools.py
@@ -0,0 +1,56 @@
+from typing import List, Type
+
+from reworkd_platform.web.api.agent.tools.conclude import Conclude
+from reworkd_platform.web.api.agent.tools.image import Image
+from reworkd_platform.web.api.agent.tools.reason import Reason
+from reworkd_platform.web.api.agent.tools.search import Search
+from reworkd_platform.web.api.agent.tools.sidsearch import SID
+from reworkd_platform.web.api.agent.tools.tools import (
+ Tool,
+ format_tool_name,
+ get_default_tool,
+ get_tool_from_name,
+ get_tool_name,
+ get_tools_overview,
+)
+
+
+def test_get_tool_name() -> None:
+ assert get_tool_name(Image) == "image"
+ assert get_tool_name(Search) == "search"
+ assert get_tool_name(Reason) == "reason"
+
+
+def test_format_tool_name() -> None:
+ assert format_tool_name("Search") == "search"
+ assert format_tool_name("reason") == "reason"
+ assert format_tool_name("Conclude") == "conclude"
+ assert format_tool_name("CoNcLuDe") == "conclude"
+
+
+def test_get_tools_overview_no_duplicates() -> None:
+ """Test to assert that the tools overview doesn't include duplicates."""
+ tools: List[Type[Tool]] = [Image, Search, Reason, Conclude, Image, Search]
+ overview = get_tools_overview(tools)
+
+ # Check if each unique tool description is included in the overview
+ for tool in set(tools):
+ expected_description = f"'{get_tool_name(tool)}': {tool.description}"
+ assert expected_description in overview
+
+ # Check for duplicates in the overview
+ overview_list = overview.split("\n")
+ assert len(overview_list) == len(
+ set(overview_list)
+ ), "Overview includes duplicate entries"
+
+
+def test_get_default_tool() -> None:
+ assert get_default_tool() == Search
+
+
+def test_get_tool_from_name() -> None:
+ assert get_tool_from_name("Search") == Search
+ assert get_tool_from_name("CoNcLuDe") == Conclude
+ assert get_tool_from_name("NonExistingTool") == Search
+ assert get_tool_from_name("SID") == SID
diff --git a/platform/reworkd_platform/tests/memory/memory_with_fallback_test.py b/platform/reworkd_platform/tests/memory/memory_with_fallback_test.py
new file mode 100644
index 0000000..b44af29
--- /dev/null
+++ b/platform/reworkd_platform/tests/memory/memory_with_fallback_test.py
@@ -0,0 +1,43 @@
+import pytest
+
+from reworkd_platform.web.api.memory.memory_with_fallback import MemoryWithFallback
+
+
+@pytest.mark.parametrize(
+ "method_name, args",
+ [
+ ("add_tasks", (["task1", "task2"],)),
+ ("get_similar_tasks", ("task1",)),
+ ("reset_class", ()),
+ ],
+)
+def test_memory_primary(mocker, method_name: str, args) -> None:
+ primary = mocker.Mock()
+ secondary = mocker.Mock()
+ memory_with_fallback = MemoryWithFallback(primary, secondary)
+
+ # Use getattr() to call the method on the object with args
+ getattr(memory_with_fallback, method_name)(*args)
+ getattr(primary, method_name).assert_called_once_with(*args)
+ getattr(secondary, method_name).assert_not_called()
+
+
+@pytest.mark.parametrize(
+ "method_name, args",
+ [
+ ("add_tasks", (["task1", "task2"],)),
+ ("get_similar_tasks", ("task1",)),
+ ("reset_class", ()),
+ ],
+)
+def test_memory_fallback(mocker, method_name: str, args) -> None:
+ primary = mocker.Mock()
+ secondary = mocker.Mock()
+ memory_with_fallback = MemoryWithFallback(primary, secondary)
+
+ getattr(primary, method_name).side_effect = Exception("Primary Failed")
+
+ # Call the method again, this time it should fall back to secondary
+ getattr(memory_with_fallback, method_name)(*args)
+ getattr(primary, method_name).assert_called_once_with(*args)
+ getattr(secondary, method_name).assert_called_once_with(*args)
diff --git a/platform/reworkd_platform/tests/test_dependancies.py b/platform/reworkd_platform/tests/test_dependancies.py
new file mode 100644
index 0000000..cd46449
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_dependancies.py
@@ -0,0 +1,26 @@
+import pytest
+
+from reworkd_platform.web.api.agent import dependancies
+
+
+@pytest.mark.anyio
+@pytest.mark.parametrize(
+ "validator, step",
+ [
+ (dependancies.agent_summarize_validator, "summarize"),
+ (dependancies.agent_chat_validator, "chat"),
+ (dependancies.agent_analyze_validator, "analyze"),
+ (dependancies.agent_create_validator, "create"),
+ (dependancies.agent_execute_validator, "execute"),
+ ],
+)
+async def test_agent_validate(mocker, validator, step):
+ run_id = "asim"
+ crud = mocker.Mock()
+ body = mocker.Mock()
+ body.run_id = run_id
+
+ crud.create_task = mocker.AsyncMock()
+
+ await validator(body, crud)
+ crud.create_task.assert_called_once_with(run_id, step)
diff --git a/platform/reworkd_platform/tests/test_helpers.py b/platform/reworkd_platform/tests/test_helpers.py
new file mode 100644
index 0000000..530887b
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_helpers.py
@@ -0,0 +1,45 @@
+import pytest
+from openai.error import InvalidRequestError, ServiceUnavailableError
+
+from reworkd_platform.schemas.agent import ModelSettings
+from reworkd_platform.web.api.agent.helpers import openai_error_handler
+from reworkd_platform.web.api.errors import OpenAIError
+
+
+async def act(*args, settings: ModelSettings = ModelSettings(), **kwargs):
+ return await openai_error_handler(*args, settings=settings, **kwargs)
+
+
+@pytest.mark.asyncio
+async def test_service_unavailable_error():
+ async def mock_service_unavailable_error():
+ raise ServiceUnavailableError("Service Unavailable")
+
+ with pytest.raises(OpenAIError):
+ await act(mock_service_unavailable_error)
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+ "settings,should_log",
+ [
+ (ModelSettings(custom_api_key="xyz"), False),
+ (ModelSettings(custom_api_key=None), True),
+ ],
+)
+async def test_should_log(settings, should_log):
+ async def mock_invalid_request_error_model_access():
+ raise InvalidRequestError(
+ "The model: xyz does not exist or you do not have access to it.",
+ param="model",
+ )
+
+ with pytest.raises(Exception) as exc_info:
+ await openai_error_handler(
+ mock_invalid_request_error_model_access, settings=settings
+ )
+
+ assert isinstance(exc_info.value, OpenAIError)
+ error: OpenAIError = exc_info.value
+
+ assert error.should_log == should_log
diff --git a/platform/reworkd_platform/tests/test_oauth_installers.py b/platform/reworkd_platform/tests/test_oauth_installers.py
new file mode 100644
index 0000000..52b1c57
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_oauth_installers.py
@@ -0,0 +1,15 @@
+import pytest
+
+from reworkd_platform.services.oauth_installers import installer_factory
+
+
+def test_installer_factory(mocker):
+ crud = mocker.Mock()
+ installer_factory("sid", crud)
+
+
+def test_integration_dne(mocker):
+ crud = mocker.Mock()
+
+ with pytest.raises(NotImplementedError):
+ installer_factory("asim", crud)
diff --git a/platform/reworkd_platform/tests/test_reworkd_platform.py b/platform/reworkd_platform/tests/test_reworkd_platform.py
new file mode 100644
index 0000000..474131a
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_reworkd_platform.py
@@ -0,0 +1,18 @@
+import pytest
+from fastapi import FastAPI
+from httpx import AsyncClient
+from starlette import status
+
+
+@pytest.mark.skip(reason="Mysql needs to be mocked")
+@pytest.mark.anyio
+async def test_health(client: AsyncClient, fastapi_app: FastAPI) -> None:
+ """
+ Checks the health endpoint.
+
+ :param client: client for the app.
+ :param fastapi_app: current FastAPI application.
+ """
+ url = fastapi_app.url_path_for("health_check")
+ response = await client.get(url)
+ assert response.status_code == status.HTTP_200_OK
diff --git a/platform/reworkd_platform/tests/test_s3.py b/platform/reworkd_platform/tests/test_s3.py
new file mode 100644
index 0000000..aca5f32
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_s3.py
@@ -0,0 +1,21 @@
+from reworkd_platform.services.aws.s3 import SimpleStorageService
+
+
+def test_create_signed_post(mocker):
+ post_url = {
+ "url": "https://my_bucket.s3.amazonaws.com/my_object",
+ "fields": {"key": "value"},
+ }
+
+ boto3_mock = mocker.Mock()
+ boto3_mock.generate_presigned_post.return_value = post_url
+ mocker.patch(
+ "reworkd_platform.services.aws.s3.boto3_client", return_value=boto3_mock
+ )
+
+ assert (
+ SimpleStorageService(bucket="my_bucket").create_presigned_upload_url(
+ object_name="json"
+ )
+ == post_url
+ )
diff --git a/platform/reworkd_platform/tests/test_schemas.py b/platform/reworkd_platform/tests/test_schemas.py
new file mode 100644
index 0000000..095c30d
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_schemas.py
@@ -0,0 +1,61 @@
+import pytest
+
+from reworkd_platform.schemas.agent import ModelSettings
+
+
+@pytest.mark.parametrize(
+ "settings",
+ [
+ {
+ "model": "gpt-4",
+ "max_tokens": 7000,
+ "temperature": 0.5,
+ "language": "french",
+ },
+ {
+ "model": "gpt-3.5-turbo",
+ "max_tokens": 3000,
+ },
+ {
+ "model": "gpt-3.5-turbo-16k",
+ "max_tokens": 16000,
+ },
+ ],
+)
+def test_model_settings_valid(settings):
+ result = ModelSettings(**settings)
+ assert result.model == settings.get("model", "gpt-3.5-turbo")
+ assert result.max_tokens == settings.get("max_tokens", 500)
+ assert result.temperature == settings.get("temperature", 0.9)
+ assert result.language == settings.get("language", "English")
+
+
+@pytest.mark.parametrize(
+ "settings",
+ [
+ {
+ "model": "gpt-4-32k",
+ },
+ {
+ "temperature": -1,
+ },
+ {
+ "max_tokens": 8000,
+ },
+ {
+ "model": "gpt-4",
+ "max_tokens": 32000,
+ },
+ ],
+)
+def test_model_settings_invalid(settings):
+ with pytest.raises(Exception):
+ ModelSettings(**settings)
+
+
+def test_model_settings_default():
+ settings = ModelSettings(**{})
+ assert settings.model == "gpt-3.5-turbo"
+ assert settings.temperature == 0.9
+ assert settings.max_tokens == 500
+ assert settings.language == "English"
diff --git a/platform/reworkd_platform/tests/test_security.py b/platform/reworkd_platform/tests/test_security.py
new file mode 100644
index 0000000..a336f38
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_security.py
@@ -0,0 +1,29 @@
+import pytest
+from cryptography.fernet import Fernet
+from fastapi import HTTPException
+
+from reworkd_platform.services.security import EncryptionService
+
+
+def test_encrypt_decrypt():
+ key = Fernet.generate_key()
+ service = EncryptionService(key)
+
+ original_text = "Hello, world!"
+ encrypted = service.encrypt(original_text)
+ decrypted = service.decrypt(encrypted)
+
+ assert original_text == decrypted
+
+
+def test_invalid_key():
+ key = Fernet.generate_key()
+
+ different_key = Fernet.generate_key()
+ different_service = EncryptionService(different_key)
+
+ original_text = "Hello, world!"
+ encrypted = Fernet(key).encrypt(original_text.encode())
+
+ with pytest.raises(HTTPException):
+ different_service.decrypt(encrypted)
diff --git a/platform/reworkd_platform/tests/test_settings.py b/platform/reworkd_platform/tests/test_settings.py
new file mode 100644
index 0000000..a066b63
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_settings.py
@@ -0,0 +1,5 @@
+from reworkd_platform.settings import Settings
+
+
+def test_settings_create():
+ assert Settings() is not None
diff --git a/platform/reworkd_platform/tests/test_token_service.py b/platform/reworkd_platform/tests/test_token_service.py
new file mode 100644
index 0000000..8609c07
--- /dev/null
+++ b/platform/reworkd_platform/tests/test_token_service.py
@@ -0,0 +1,105 @@
+from unittest.mock import Mock
+
+import tiktoken
+
+from reworkd_platform.schemas.agent import LLM_MODEL_MAX_TOKENS
+from reworkd_platform.services.tokenizer.token_service import TokenService
+
+encoding = tiktoken.get_encoding("cl100k_base")
+
+
+def test_happy_path() -> None:
+ service = TokenService(encoding)
+ text = "Hello world!"
+ validate_tokenize_and_detokenize(service, text, 3)
+
+
+def test_nothing() -> None:
+ service = TokenService(encoding)
+ text = ""
+ validate_tokenize_and_detokenize(service, text, 0)
+
+
+def validate_tokenize_and_detokenize(
+ service: TokenService, text: str, expected_token_count: int
+) -> None:
+ tokens = service.tokenize(text)
+ assert text == service.detokenize(tokens)
+ assert len(tokens) == service.count(text)
+ assert len(tokens) == expected_token_count
+
+
+def test_calculate_max_tokens_with_small_max_tokens() -> None:
+ initial_max_tokens = 3000
+ service = TokenService(encoding)
+ model = Mock(spec=["model_name", "max_tokens"])
+ model.model_name = "gpt-3.5-turbo"
+ model.max_tokens = initial_max_tokens
+
+ service.calculate_max_tokens(model, "Hello")
+
+ assert model.max_tokens == initial_max_tokens
+
+
+def test_calculate_max_tokens_with_high_completion_tokens() -> None:
+ service = TokenService(encoding)
+ prompt_tokens = service.count(LONG_TEXT)
+ model = Mock(spec=["model_name", "max_tokens"])
+ model.model_name = "gpt-3.5-turbo"
+ model.max_tokens = 8000
+
+ service.calculate_max_tokens(model, LONG_TEXT)
+
+ assert model.max_tokens == (
+ LLM_MODEL_MAX_TOKENS.get("gpt-3.5-turbo") - prompt_tokens
+ )
+
+
+def test_calculate_max_tokens_with_negative_result() -> None:
+ service = TokenService(encoding)
+ model = Mock(spec=["model_name", "max_tokens"])
+ model.model_name = "gpt-3.5-turbo"
+ model.max_tokens = 8000
+
+ service.calculate_max_tokens(model, *([LONG_TEXT] * 100))
+
+ # We use the minimum length of 1
+ assert model.max_tokens == 1
+
+
+LONG_TEXT = """
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+This is some long text. This is some long text. This is some long text.
+"""
diff --git a/platform/reworkd_platform/timer.py b/platform/reworkd_platform/timer.py
new file mode 100644
index 0000000..52d5aa4
--- /dev/null
+++ b/platform/reworkd_platform/timer.py
@@ -0,0 +1,34 @@
+from functools import wraps
+from time import time
+from typing import Any, Callable, Literal
+
+from loguru import logger
+
+Log_Level = Literal[
+ "TRACE",
+ "DEBUG",
+ "INFO",
+ "SUCCESS",
+ "WARNING",
+ "ERROR",
+ "CRITICAL",
+]
+
+
+def timed_function(level: Log_Level = "INFO") -> Callable[..., Any]:
+ def decorator(func: Any) -> Callable[..., Any]:
+ @wraps(func)
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
+ start_time = time()
+ result = func(*args, **kwargs)
+ execution_time = time() - start_time
+ logger.log(
+ level,
+ f"Function '{func.__qualname__}' executed in {execution_time:.4f} seconds",
+ )
+
+ return result
+
+ return wrapper
+
+ return decorator
diff --git a/platform/reworkd_platform/web/__init__.py b/platform/reworkd_platform/web/__init__.py
new file mode 100644
index 0000000..b37c072
--- /dev/null
+++ b/platform/reworkd_platform/web/__init__.py
@@ -0,0 +1 @@
+"""WEB API for reworkd_platform."""
diff --git a/platform/reworkd_platform/web/api/__init__.py b/platform/reworkd_platform/web/api/__init__.py
new file mode 100644
index 0000000..8937a69
--- /dev/null
+++ b/platform/reworkd_platform/web/api/__init__.py
@@ -0,0 +1 @@
+"""reworkd_platform API package."""
diff --git a/platform/reworkd_platform/web/api/agent/__init__.py b/platform/reworkd_platform/web/api/agent/__init__.py
new file mode 100644
index 0000000..e1b4bcf
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/__init__.py
@@ -0,0 +1,4 @@
+"""API for checking running agents"""
+from reworkd_platform.web.api.agent.views import router
+
+__all__ = ["router"]
diff --git a/platform/reworkd_platform/web/api/agent/agent_service/__init__.py b/platform/reworkd_platform/web/api/agent/agent_service/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/platform/reworkd_platform/web/api/agent/agent_service/agent_service.py b/platform/reworkd_platform/web/api/agent/agent_service/agent_service.py
new file mode 100644
index 0000000..127958e
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/agent_service/agent_service.py
@@ -0,0 +1,51 @@
+from typing import List, Optional, Protocol
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+
+from reworkd_platform.web.api.agent.analysis import Analysis
+
+
+class AgentService(Protocol):
+ async def start_goal_agent(self, *, goal: str) -> List[str]:
+ pass
+
+ async def analyze_task_agent(
+ self, *, goal: str, task: str, tool_names: List[str]
+ ) -> Analysis:
+ pass
+
+ async def execute_task_agent(
+ self,
+ *,
+ goal: str,
+ task: str,
+ analysis: Analysis,
+ ) -> FastAPIStreamingResponse:
+ pass
+
+ async def create_tasks_agent(
+ self,
+ *,
+ goal: str,
+ tasks: List[str],
+ last_task: str,
+ result: str,
+ completed_tasks: Optional[List[str]] = None,
+ ) -> List[str]:
+ pass
+
+ async def summarize_task_agent(
+ self,
+ *,
+ goal: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ pass
+
+ async def chat(
+ self,
+ *,
+ message: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ pass
diff --git a/platform/reworkd_platform/web/api/agent/agent_service/agent_service_provider.py b/platform/reworkd_platform/web/api/agent/agent_service/agent_service_provider.py
new file mode 100644
index 0000000..19b3777
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/agent_service/agent_service_provider.py
@@ -0,0 +1,53 @@
+from typing import Any, Callable, Coroutine, Optional
+
+from fastapi import Depends
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.schemas.agent import AgentRun, LLM_Model
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.services.tokenizer.dependencies import get_token_service
+from reworkd_platform.services.tokenizer.token_service import TokenService
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.agent.agent_service.agent_service import AgentService
+from reworkd_platform.web.api.agent.agent_service.mock_agent_service import (
+ MockAgentService,
+)
+from reworkd_platform.web.api.agent.agent_service.open_ai_agent_service import (
+ OpenAIAgentService,
+)
+from reworkd_platform.web.api.agent.model_factory import create_model
+from reworkd_platform.web.api.dependencies import get_current_user
+
+
+def get_agent_service(
+ validator: Callable[..., Coroutine[Any, Any, AgentRun]],
+ streaming: bool = False,
+ llm_model: Optional[LLM_Model] = None,
+) -> Callable[..., AgentService]:
+ def func(
+ run: AgentRun = Depends(validator),
+ user: UserBase = Depends(get_current_user),
+ token_service: TokenService = Depends(get_token_service),
+ oauth_crud: OAuthCrud = Depends(OAuthCrud.inject),
+ ) -> AgentService:
+ if settings.ff_mock_mode_enabled:
+ return MockAgentService()
+
+ model = create_model(
+ settings,
+ run.model_settings,
+ user,
+ streaming=streaming,
+ force_model=llm_model,
+ )
+
+ return OpenAIAgentService(
+ model,
+ run.model_settings,
+ token_service,
+ callbacks=None,
+ user=user,
+ oauth_crud=oauth_crud,
+ )
+
+ return func
diff --git a/platform/reworkd_platform/web/api/agent/agent_service/mock_agent_service.py b/platform/reworkd_platform/web/api/agent/agent_service/mock_agent_service.py
new file mode 100644
index 0000000..5f2ee62
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/agent_service/mock_agent_service.py
@@ -0,0 +1,74 @@
+import time
+from typing import Any, List
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+
+from reworkd_platform.web.api.agent.agent_service.agent_service import (
+ AgentService,
+ Analysis,
+)
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+
+
+class MockAgentService(AgentService):
+ async def start_goal_agent(self, **kwargs: Any) -> List[str]:
+ time.sleep(1)
+ return ["Task X", "Task Y", "Task Z"]
+
+ async def create_tasks_agent(self, **kwargs: Any) -> List[str]:
+ time.sleep(1)
+ return ["Some random task that doesn't exist"]
+
+ async def analyze_task_agent(self, **kwargs: Any) -> Analysis:
+ time.sleep(1.5)
+ return Analysis(
+ action="reason",
+ arg="Mock analysis",
+ reasoning="Mock to avoid wasting money calling the OpenAI API.",
+ )
+
+ async def execute_task_agent(self, **kwargs: Any) -> FastAPIStreamingResponse:
+ time.sleep(0.5)
+ return stream_string(
+ """ This is going to be a longer task result such that
+ We make the stream of this string take time and feel long. The reality is... this is a mock!
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry.
+ Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
+ when an unknown printer took a galley of type and scrambled it to make a type specimen book.
+ It has survived not only five centuries, but also the leap into electronic typesetting, remaining unchanged.
+ """
+ + kwargs.get("task", "task"),
+ True,
+ )
+
+ async def summarize_task_agent(
+ self,
+ *,
+ goal: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ time.sleep(0.5)
+ return stream_string(
+ """ This is going to be a longer task result such that
+ We make the stream of this string take time and feel long. The reality is... this is a mock!
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry.
+ Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
+ when an unknown printer took a galley of type and scrambled it to make a type specimen book.
+ It has survived not only five centuries, but also the leap into electronic typesetting, remaining unchanged.
+ """,
+ True,
+ )
+
+ async def chat(
+ self,
+ *,
+ message: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ time.sleep(0.5)
+ return stream_string(
+ "What do you want dude?",
+ True,
+ )
diff --git a/platform/reworkd_platform/web/api/agent/agent_service/open_ai_agent_service.py b/platform/reworkd_platform/web/api/agent/agent_service/open_ai_agent_service.py
new file mode 100644
index 0000000..3221a3f
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/agent_service/open_ai_agent_service.py
@@ -0,0 +1,227 @@
+from typing import List, Optional
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from lanarky.responses import StreamingResponse
+from langchain import LLMChain
+from langchain.callbacks.base import AsyncCallbackHandler
+from langchain.output_parsers import PydanticOutputParser
+from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate
+from langchain.schema import HumanMessage
+from loguru import logger
+from pydantic import ValidationError
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.schemas.agent import ModelSettings
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.services.tokenizer.token_service import TokenService
+from reworkd_platform.web.api.agent.agent_service.agent_service import AgentService
+from reworkd_platform.web.api.agent.analysis import Analysis, AnalysisArguments
+from reworkd_platform.web.api.agent.helpers import (
+ call_model_with_handling,
+ openai_error_handler,
+ parse_with_handling,
+)
+from reworkd_platform.web.api.agent.model_factory import WrappedChatOpenAI
+from reworkd_platform.web.api.agent.prompts import (
+ analyze_task_prompt,
+ chat_prompt,
+ create_tasks_prompt,
+ start_goal_prompt,
+)
+from reworkd_platform.web.api.agent.task_output_parser import TaskOutputParser
+from reworkd_platform.web.api.agent.tools.open_ai_function import get_tool_function
+from reworkd_platform.web.api.agent.tools.tools import (
+ get_default_tool,
+ get_tool_from_name,
+ get_tool_name,
+ get_user_tools,
+)
+from reworkd_platform.web.api.agent.tools.utils import summarize
+from reworkd_platform.web.api.errors import OpenAIError
+
+
+class OpenAIAgentService(AgentService):
+ def __init__(
+ self,
+ model: WrappedChatOpenAI,
+ settings: ModelSettings,
+ token_service: TokenService,
+ callbacks: Optional[List[AsyncCallbackHandler]],
+ user: UserBase,
+ oauth_crud: OAuthCrud,
+ ):
+ self.model = model
+ self.settings = settings
+ self.token_service = token_service
+ self.callbacks = callbacks
+ self.user = user
+ self.oauth_crud = oauth_crud
+
+ async def start_goal_agent(self, *, goal: str) -> List[str]:
+ prompt = ChatPromptTemplate.from_messages(
+ [SystemMessagePromptTemplate(prompt=start_goal_prompt)]
+ )
+
+ self.token_service.calculate_max_tokens(
+ self.model,
+ prompt.format_prompt(
+ goal=goal,
+ language=self.settings.language,
+ ).to_string(),
+ )
+
+ completion = await call_model_with_handling(
+ self.model,
+ ChatPromptTemplate.from_messages(
+ [SystemMessagePromptTemplate(prompt=start_goal_prompt)]
+ ),
+ {"goal": goal, "language": self.settings.language},
+ settings=self.settings,
+ callbacks=self.callbacks,
+ )
+
+ task_output_parser = TaskOutputParser(completed_tasks=[])
+ tasks = parse_with_handling(task_output_parser, completion)
+
+ return tasks
+
+ async def analyze_task_agent(
+ self, *, goal: str, task: str, tool_names: List[str]
+ ) -> Analysis:
+ user_tools = await get_user_tools(tool_names, self.user, self.oauth_crud)
+ functions = list(map(get_tool_function, user_tools))
+ prompt = analyze_task_prompt.format_prompt(
+ goal=goal,
+ task=task,
+ language=self.settings.language,
+ )
+
+ self.token_service.calculate_max_tokens(
+ self.model,
+ prompt.to_string(),
+ str(functions),
+ )
+
+ message = await openai_error_handler(
+ func=self.model.apredict_messages,
+ messages=prompt.to_messages(),
+ functions=functions,
+ settings=self.settings,
+ callbacks=self.callbacks,
+ )
+
+ function_call = message.additional_kwargs.get("function_call", {})
+ completion = function_call.get("arguments", "")
+
+ try:
+ pydantic_parser = PydanticOutputParser(pydantic_object=AnalysisArguments)
+ analysis_arguments = parse_with_handling(pydantic_parser, completion)
+ return Analysis(
+ action=function_call.get("name", get_tool_name(get_default_tool())),
+ **analysis_arguments.dict(),
+ )
+ except (OpenAIError, ValidationError):
+ return Analysis.get_default_analysis(task)
+
+ async def execute_task_agent(
+ self,
+ *,
+ goal: str,
+ task: str,
+ analysis: Analysis,
+ ) -> StreamingResponse:
+ # TODO: More mature way of calculating max_tokens
+ if self.model.max_tokens > 3000:
+ self.model.max_tokens = max(self.model.max_tokens - 1000, 3000)
+
+ tool_class = get_tool_from_name(analysis.action)
+ return await tool_class(self.model, self.settings.language).call(
+ goal,
+ task,
+ analysis.arg,
+ self.user,
+ self.oauth_crud,
+ )
+
+ async def create_tasks_agent(
+ self,
+ *,
+ goal: str,
+ tasks: List[str],
+ last_task: str,
+ result: str,
+ completed_tasks: Optional[List[str]] = None,
+ ) -> List[str]:
+ prompt = ChatPromptTemplate.from_messages(
+ [SystemMessagePromptTemplate(prompt=create_tasks_prompt)]
+ )
+
+ args = {
+ "goal": goal,
+ "language": self.settings.language,
+ "tasks": "\n".join(tasks),
+ "lastTask": last_task,
+ "result": result,
+ }
+
+ self.token_service.calculate_max_tokens(
+ self.model, prompt.format_prompt(**args).to_string()
+ )
+
+ completion = await call_model_with_handling(
+ self.model, prompt, args, settings=self.settings, callbacks=self.callbacks
+ )
+
+ previous_tasks = (completed_tasks or []) + tasks
+ return [completion] if completion not in previous_tasks else []
+
+ async def summarize_task_agent(
+ self,
+ *,
+ goal: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ self.model.model_name = "gpt-3.5-turbo-16k"
+ self.model.max_tokens = 8000 # Total tokens = prompt tokens + completion tokens
+
+ snippet_max_tokens = 7000 # Leave room for the rest of the prompt
+ text_tokens = self.token_service.tokenize("".join(results))
+ text = self.token_service.detokenize(text_tokens[0:snippet_max_tokens])
+ logger.info(f"Summarizing text: {text}")
+
+ return summarize(
+ model=self.model,
+ language=self.settings.language,
+ goal=goal,
+ text=text,
+ )
+
+ async def chat(
+ self,
+ *,
+ message: str,
+ results: List[str],
+ ) -> FastAPIStreamingResponse:
+ self.model.model_name = "gpt-3.5-turbo-16k"
+ prompt = ChatPromptTemplate.from_messages(
+ [
+ SystemMessagePromptTemplate(prompt=chat_prompt),
+ *[HumanMessage(content=result) for result in results],
+ HumanMessage(content=message),
+ ]
+ )
+
+ self.token_service.calculate_max_tokens(
+ self.model,
+ prompt.format_prompt(
+ language=self.settings.language,
+ ).to_string(),
+ )
+
+ chain = LLMChain(llm=self.model, prompt=prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {"language": self.settings.language},
+ media_type="text/event-stream",
+ )
diff --git a/platform/reworkd_platform/web/api/agent/analysis.py b/platform/reworkd_platform/web/api/agent/analysis.py
new file mode 100644
index 0000000..f8ee644
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/analysis.py
@@ -0,0 +1,45 @@
+from typing import Dict
+
+from pydantic import BaseModel, validator
+
+
+class AnalysisArguments(BaseModel):
+ """
+ Arguments for the analysis function of a tool. OpenAI functions will resolve these values but leave out the action.
+ """
+
+ reasoning: str
+ arg: str
+
+
+class Analysis(AnalysisArguments):
+ action: str
+
+ @validator("action")
+ def action_must_be_valid_tool(cls, v: str) -> str:
+ # TODO: Remove circular import
+ from reworkd_platform.web.api.agent.tools.tools import get_available_tools_names
+
+ if v not in get_available_tools_names():
+ raise ValueError(f"Analysis action '{v}' is not a valid tool")
+ return v
+
+ @validator("action")
+ def search_action_must_have_arg(cls, v: str, values: Dict[str, str]) -> str:
+ from reworkd_platform.web.api.agent.tools.search import Search
+ from reworkd_platform.web.api.agent.tools.tools import get_tool_name
+
+ if v == get_tool_name(Search) and not values["arg"]:
+ raise ValueError("Analysis arg cannot be empty if action is 'search'")
+ return v
+
+ @classmethod
+ def get_default_analysis(cls, task: str) -> "Analysis":
+ # TODO: Remove circular import
+ from reworkd_platform.web.api.agent.tools.tools import get_default_tool_name
+
+ return cls(
+ reasoning="Hmm... I'll try searching it up",
+ action=get_default_tool_name(),
+ arg=task,
+ )
diff --git a/platform/reworkd_platform/web/api/agent/dependancies.py b/platform/reworkd_platform/web/api/agent/dependancies.py
new file mode 100644
index 0000000..2bd21ea
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/dependancies.py
@@ -0,0 +1,95 @@
+from typing import TypeVar
+
+from fastapi import Body, Depends
+from sqlalchemy.ext.asyncio import AsyncSession
+
+from reworkd_platform.db.crud.agent import AgentCRUD
+from reworkd_platform.db.dependencies import get_db_session
+from reworkd_platform.schemas.agent import (
+ AgentChat,
+ AgentRun,
+ AgentRunCreate,
+ AgentSummarize,
+ AgentTaskAnalyze,
+ AgentTaskCreate,
+ AgentTaskExecute,
+ Loop_Step,
+)
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.web.api.dependencies import get_current_user
+
+T = TypeVar(
+ "T", AgentTaskAnalyze, AgentTaskExecute, AgentTaskCreate, AgentSummarize, AgentChat
+)
+
+
+def agent_crud(
+ user: UserBase = Depends(get_current_user),
+ session: AsyncSession = Depends(get_db_session),
+) -> AgentCRUD:
+ return AgentCRUD(session, user)
+
+
+async def agent_start_validator(
+ body: AgentRunCreate = Body(
+ example={
+ "goal": "Create business plan for a bagel company",
+ "modelSettings": {
+ "customModelName": "gpt-3.5-turbo",
+ },
+ },
+ ),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentRun:
+ id_ = (await crud.create_run(body.goal)).id
+ return AgentRun(**body.dict(), run_id=str(id_))
+
+
+async def validate(body: T, crud: AgentCRUD, type_: Loop_Step) -> T:
+ body.run_id = (await crud.create_task(body.run_id, type_)).id
+ return body
+
+
+async def agent_analyze_validator(
+ body: AgentTaskAnalyze = Body(),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentTaskAnalyze:
+ return await validate(body, crud, "analyze")
+
+
+async def agent_execute_validator(
+ body: AgentTaskExecute = Body(
+ example={
+ "goal": "Perform tasks accurately",
+ "task": "Write code to make a platformer",
+ "analysis": {
+ "reasoning": "I like to write code.",
+ "action": "code",
+ "arg": "",
+ },
+ },
+ ),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentTaskExecute:
+ return await validate(body, crud, "execute")
+
+
+async def agent_create_validator(
+ body: AgentTaskCreate = Body(),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentTaskCreate:
+ return await validate(body, crud, "create")
+
+
+async def agent_summarize_validator(
+ body: AgentSummarize = Body(),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentSummarize:
+ return await validate(body, crud, "summarize")
+
+
+async def agent_chat_validator(
+ body: AgentChat = Body(),
+ crud: AgentCRUD = Depends(agent_crud),
+) -> AgentChat:
+ return await validate(body, crud, "chat")
diff --git a/platform/reworkd_platform/web/api/agent/helpers.py b/platform/reworkd_platform/web/api/agent/helpers.py
new file mode 100644
index 0000000..9c90106
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/helpers.py
@@ -0,0 +1,76 @@
+from typing import Any, Callable, Dict, TypeVar
+
+from langchain import BasePromptTemplate, LLMChain
+from langchain.chat_models.base import BaseChatModel
+from langchain.schema import BaseOutputParser, OutputParserException
+from openai.error import (
+ AuthenticationError,
+ InvalidRequestError,
+ RateLimitError,
+ ServiceUnavailableError,
+)
+
+from reworkd_platform.schemas.agent import ModelSettings
+from reworkd_platform.web.api.errors import OpenAIError
+
+T = TypeVar("T")
+
+
+def parse_with_handling(parser: BaseOutputParser[T], completion: str) -> T:
+ try:
+ return parser.parse(completion)
+ except OutputParserException as e:
+ raise OpenAIError(
+ e, "There was an issue parsing the response from the AI model."
+ )
+
+
+async def openai_error_handler(
+ func: Callable[..., Any], *args: Any, settings: ModelSettings, **kwargs: Any
+) -> Any:
+ try:
+ return await func(*args, **kwargs)
+ except ServiceUnavailableError as e:
+ raise OpenAIError(
+ e,
+ "OpenAI is experiencing issues. Visit "
+ "https://status.openai.com/ for more info.",
+ should_log=not settings.custom_api_key,
+ )
+ except InvalidRequestError as e:
+ if e.user_message.startswith("The model:"):
+ raise OpenAIError(
+ e,
+ f"Your API key does not have access to your current model. Please use a different model.",
+ should_log=not settings.custom_api_key,
+ )
+ raise OpenAIError(e, e.user_message)
+ except AuthenticationError as e:
+ raise OpenAIError(
+ e,
+ "Authentication error: Ensure a valid API key is being used.",
+ should_log=not settings.custom_api_key,
+ )
+ except RateLimitError as e:
+ if e.user_message.startswith("You exceeded your current quota"):
+ raise OpenAIError(
+ e,
+ f"Your API key exceeded your current quota, please check your plan and billing details.",
+ should_log=not settings.custom_api_key,
+ )
+ raise OpenAIError(e, e.user_message)
+ except Exception as e:
+ raise OpenAIError(
+ e, "There was an unexpected issue getting a response from the AI model."
+ )
+
+
+async def call_model_with_handling(
+ model: BaseChatModel,
+ prompt: BasePromptTemplate,
+ args: Dict[str, str],
+ settings: ModelSettings,
+ **kwargs: Any,
+) -> str:
+ chain = LLMChain(llm=model, prompt=prompt)
+ return await openai_error_handler(chain.arun, args, settings=settings, **kwargs)
diff --git a/platform/reworkd_platform/web/api/agent/model_factory.py b/platform/reworkd_platform/web/api/agent/model_factory.py
new file mode 100644
index 0000000..52644a9
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/model_factory.py
@@ -0,0 +1,97 @@
+from typing import Any, Dict, Optional, Tuple, Type, Union
+
+from langchain.chat_models import AzureChatOpenAI, ChatOpenAI
+from pydantic import Field
+
+from reworkd_platform.schemas.agent import LLM_Model, ModelSettings
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.settings import Settings
+
+
+class WrappedChatOpenAI(ChatOpenAI):
+ client: Any = Field(
+ default=None,
+ description="Meta private value but mypy will complain its missing",
+ )
+ max_tokens: int
+ model_name: LLM_Model = Field(alias="model")
+
+
+class WrappedAzureChatOpenAI(AzureChatOpenAI, WrappedChatOpenAI):
+ openai_api_base: str
+ openai_api_version: str
+ deployment_name: str
+
+
+WrappedChat = Union[WrappedAzureChatOpenAI, WrappedChatOpenAI]
+
+
+def create_model(
+ settings: Settings,
+ model_settings: ModelSettings,
+ user: UserBase,
+ streaming: bool = False,
+ force_model: Optional[LLM_Model] = None,
+) -> WrappedChat:
+ use_azure = (
+ not model_settings.custom_api_key and "azure" in settings.openai_api_base
+ )
+
+ llm_model = force_model or model_settings.model
+ model: Type[WrappedChat] = WrappedChatOpenAI
+ base, headers, use_helicone = get_base_and_headers(settings, model_settings, user)
+ kwargs = {
+ "openai_api_base": base,
+ "openai_api_key": model_settings.custom_api_key or settings.openai_api_key,
+ "temperature": model_settings.temperature,
+ "model": llm_model,
+ "max_tokens": model_settings.max_tokens,
+ "streaming": streaming,
+ "max_retries": 5,
+ "model_kwargs": {"user": user.email, "headers": headers},
+ }
+
+ if use_azure:
+ model = WrappedAzureChatOpenAI
+ deployment_name = llm_model.replace(".", "")
+ kwargs.update(
+ {
+ "openai_api_version": settings.openai_api_version,
+ "deployment_name": deployment_name,
+ "openai_api_type": "azure",
+ "openai_api_base": base.rstrip("v1"),
+ }
+ )
+
+ if use_helicone:
+ kwargs["model"] = deployment_name
+
+ return model(**kwargs) # type: ignore
+
+
+def get_base_and_headers(
+ settings_: Settings, model_settings: ModelSettings, user: UserBase
+) -> Tuple[str, Optional[Dict[str, str]], bool]:
+ use_helicone = settings_.helicone_enabled and not model_settings.custom_api_key
+ base = (
+ settings_.helicone_api_base
+ if use_helicone
+ else (
+ "https://api.openai.com/v1"
+ if model_settings.custom_api_key
+ else settings_.openai_api_base
+ )
+ )
+
+ headers = (
+ {
+ "Helicone-Auth": f"Bearer {settings_.helicone_api_key}",
+ "Helicone-Cache-Enabled": "true",
+ "Helicone-User-Id": user.id,
+ "Helicone-OpenAI-Api-Base": settings_.openai_api_base,
+ }
+ if use_helicone
+ else None
+ )
+
+ return base, headers, use_helicone
diff --git a/platform/reworkd_platform/web/api/agent/prompts.py b/platform/reworkd_platform/web/api/agent/prompts.py
new file mode 100644
index 0000000..484bc61
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/prompts.py
@@ -0,0 +1,185 @@
+from langchain import PromptTemplate
+
+# Create initial tasks using plan and solve prompting
+# https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting
+start_goal_prompt = PromptTemplate(
+ template="""You are a task creation AI called AgentGPT.
+You answer in the "{language}" language. You have the following objective "{goal}".
+Return a list of search queries that would be required to answer the entirety of the objective.
+Limit the list to a maximum of 5 queries. Ensure the queries are as succinct as possible.
+For simple questions use a single query.
+
+Return the response as a JSON array of strings. Examples:
+
+query: "Who is considered the best NBA player in the current season?", answer: ["current NBA MVP candidates"]
+query: "How does the Olympicpayroll brand currently stand in the market, and what are its prospects and strategies for expansion in NJ, NY, and PA?", answer: ["Olympicpayroll brand comprehensive analysis 2023", "customer reviews of Olympicpayroll.com", "Olympicpayroll market position analysis", "payroll industry trends forecast 2023-2025", "payroll services expansion strategies in NJ, NY, PA"]
+query: "How can I create a function to add weight to edges in a digraph using {language}?", answer: ["algorithm to add weight to digraph edge in {language}"]
+query: "What is the current weather in New York?", answer: ["current weather in New York"]
+query: "5 + 5?", answer: ["Sum of 5 and 5"]
+query: "What is a good homemade recipe for KFC-style chicken?", answer: ["KFC style chicken recipe at home"]
+query: "What are the nutritional values of almond milk and soy milk?", answer: ["nutritional information of almond milk", "nutritional information of soy milk"]""",
+ input_variables=["goal", "language"],
+)
+
+analyze_task_prompt = PromptTemplate(
+ template="""
+ High level objective: "{goal}"
+ Current task: "{task}"
+
+ Based on this information, use the best function to make progress or accomplish the task entirely.
+ Select the correct function by being smart and efficient. Ensure "reasoning" and only "reasoning" is in the
+ {language} language.
+
+ Note you MUST select a function.
+ """,
+ input_variables=["goal", "task", "language"],
+)
+
+code_prompt = PromptTemplate(
+ template="""
+ You are a world-class software engineer and an expert in all programing languages,
+ software systems, and architecture.
+
+ For reference, your high level goal is {goal}
+
+ Write code in English but explanations/comments in the "{language}" language.
+
+ Provide no information about who you are and focus on writing code.
+ Ensure code is bug and error free and explain complex concepts through comments
+ Respond in well-formatted markdown. Ensure code blocks are used for code sections.
+ Approach problems step by step and file by file, for each section, use a heading to describe the section.
+
+ Write code to accomplish the following:
+ {task}
+ """,
+ input_variables=["goal", "language", "task"],
+)
+
+execute_task_prompt = PromptTemplate(
+ template="""Answer in the "{language}" language. Given
+ the following overall objective `{goal}` and the following sub-task, `{task}`.
+
+ Perform the task by understanding the problem, extracting variables, and being smart
+ and efficient. Write a detailed response that address the task.
+ When confronted with choices, make a decision yourself with reasoning.
+ """,
+ input_variables=["goal", "language", "task"],
+)
+
+create_tasks_prompt = PromptTemplate(
+ template="""You are an AI task creation agent. You must answer in the "{language}"
+ language. You have the following objective `{goal}`.
+
+ You have the following incomplete tasks:
+ `{tasks}`
+
+ You just completed the following task:
+ `{lastTask}`
+
+ And received the following result:
+ `{result}`.
+
+ Based on this, create a single new task to be completed by your AI system such that your goal is closer reached.
+ If there are no more tasks to be done, return nothing. Do not add quotes to the task.
+
+ Examples:
+ Search the web for NBA news
+ Create a function to add a new vertex with a specified weight to the digraph.
+ Search for any additional information on Bertie W.
+ ""
+ """,
+ input_variables=["goal", "language", "tasks", "lastTask", "result"],
+)
+
+summarize_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ Combine the following text into a cohesive document:
+
+ "{text}"
+
+ Write using clear markdown formatting in a style expected of the goal "{goal}".
+ Be as clear, informative, and descriptive as necessary.
+ You will not make up information or add any information outside of the above text.
+ Only use the given information and nothing more.
+
+ If there is no information provided, say "There is nothing to summarize".
+ """,
+ input_variables=["goal", "language", "text"],
+)
+
+company_context_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ Create a short description on "{company_name}".
+ Find out what sector it is in and what are their primary products.
+
+ Be as clear, informative, and descriptive as necessary.
+ You will not make up information or add any information outside of the above text.
+ Only use the given information and nothing more.
+
+ If there is no information provided, say "There is nothing to summarize".
+ """,
+ input_variables=["company_name", "language"],
+)
+
+summarize_pdf_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ For the given text: "{text}", you have the following objective "{query}".
+
+ Be as clear, informative, and descriptive as necessary.
+ You will not make up information or add any information outside of the above text.
+ Only use the given information and nothing more.
+ """,
+ input_variables=["query", "language", "text"],
+)
+
+summarize_with_sources_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ Answer the following query: "{query}" using the following information: "{snippets}".
+ Write using clear markdown formatting and use markdown lists where possible.
+
+ Cite sources for sentences via markdown links using the source link as the link and the index as the text.
+ Use in-line sources. Do not separately list sources at the end of the writing.
+
+ If the query cannot be answered with the provided information, mention this and provide a reason why along with what it does mention.
+ Also cite the sources of what is actually mentioned.
+
+ Example sentences of the paragraph:
+ "So this is a cited sentence at the end of a paragraph[1](https://test.com). This is another sentence."
+ "Stephen curry is an american basketball player that plays for the warriors[1](https://www.britannica.com/biography/Stephen-Curry)."
+ "The economic growth forecast for the region has been adjusted from 2.5% to 3.1% due to improved trade relations[1](https://economictimes.com), while inflation rates are expected to remain steady at around 1.7% according to financial analysts[2](https://financeworld.com)."
+ """,
+ input_variables=["language", "query", "snippets"],
+)
+
+summarize_sid_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ Parse and summarize the following text snippets "{snippets}".
+ Write using clear markdown formatting in a style expected of the goal "{goal}".
+ Be as clear, informative, and descriptive as necessary and attempt to
+ answer the query: "{query}" as best as possible.
+ If any of the snippets are not relevant to the query,
+ ignore them, and do not include them in the summary.
+ Do not mention that you are ignoring them.
+
+ If there is no information provided, say "There is nothing to summarize".
+ """,
+ input_variables=["goal", "language", "query", "snippets"],
+)
+
+chat_prompt = PromptTemplate(
+ template="""You must answer in the "{language}" language.
+
+ You are a helpful AI Assistant that will provide responses based on the current conversation history.
+
+ The human will provide previous messages as context. Use ONLY this information for your responses.
+ Do not make anything up and do not add any additional information.
+ If you have no information for a given question in the conversation history,
+ say "I do not have any information on this".
+ """,
+ input_variables=["language"],
+)
diff --git a/platform/reworkd_platform/web/api/agent/stream_mock.py b/platform/reworkd_platform/web/api/agent/stream_mock.py
new file mode 100644
index 0000000..68eb7e0
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/stream_mock.py
@@ -0,0 +1,26 @@
+import asyncio
+from typing import AsyncGenerator
+
+import tiktoken
+from fastapi import FastAPI
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+
+app = FastAPI()
+
+
+def stream_string(data: str, delayed: bool = False) -> FastAPIStreamingResponse:
+ return FastAPIStreamingResponse(
+ stream_generator(data, delayed),
+ )
+
+
+async def stream_generator(data: str, delayed: bool) -> AsyncGenerator[bytes, None]:
+ if delayed:
+ encoding = tiktoken.get_encoding("cl100k_base")
+ token_data = encoding.encode(data)
+
+ for token in token_data:
+ yield encoding.decode([token]).encode("utf-8")
+ await asyncio.sleep(0.025) # simulate slow processing
+ else:
+ yield data.encode()
diff --git a/platform/reworkd_platform/web/api/agent/task_output_parser.py b/platform/reworkd_platform/web/api/agent/task_output_parser.py
new file mode 100644
index 0000000..f4bc373
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/task_output_parser.py
@@ -0,0 +1,88 @@
+import ast
+import re
+from typing import List
+
+from langchain.schema import BaseOutputParser, OutputParserException
+
+
+class TaskOutputParser(BaseOutputParser[List[str]]):
+ """
+ Extension of LangChain's BaseOutputParser
+ Responsible for parsing task creation output into a list of task strings
+ """
+
+ completed_tasks: List[str] = []
+
+ def __init__(self, *, completed_tasks: List[str]):
+ super().__init__()
+ self.completed_tasks = completed_tasks
+
+ def parse(self, text: str) -> List[str]:
+ try:
+ array_str = extract_array(text)
+ all_tasks = [
+ remove_prefix(task) for task in array_str if real_tasks_filter(task)
+ ]
+ return [task for task in all_tasks if task not in self.completed_tasks]
+ except Exception as e:
+ msg = f"Failed to parse tasks from completion '{text}'. Exception: {e}"
+ raise OutputParserException(msg)
+
+ def get_format_instructions(self) -> str:
+ return """
+ The response should be a JSON array of strings. Example:
+
+ ["Search the web for NBA news", "Write some code to build a web scraper"]
+
+ This should be parsable by json.loads()
+ """
+
+
+def extract_array(input_str: str) -> List[str]:
+ regex = (
+ r"\[\s*\]|" # Empty array check
+ r"(\[(?:\s*(?:\"(?:[^\"\\]|\\.)*\"|\'(?:[^\'\\]|\\.)*\')\s*,?)*\s*\])"
+ )
+ match = re.search(regex, input_str)
+ if match is not None:
+ return ast.literal_eval(match[0])
+ else:
+ return handle_multiline_string(input_str)
+
+
+def handle_multiline_string(input_str: str) -> List[str]:
+ # Handle multiline string as a list
+ processed_lines = [
+ re.sub(r".*?(\d+\..+)", r"\1", line).strip()
+ for line in input_str.split("\n")
+ if line.strip() != ""
+ ]
+
+ # Check if there is at least one line that starts with a digit and a period
+ if any(re.match(r"\d+\..+", line) for line in processed_lines):
+ return processed_lines
+ else:
+ raise RuntimeError(f"Failed to extract array from {input_str}")
+
+
+def remove_prefix(input_str: str) -> str:
+ prefix_pattern = (
+ r"^(Task\s*\d*\.\s*|Task\s*\d*[-:]?\s*|Step\s*\d*["
+ r"-:]?\s*|Step\s*[-:]?\s*|\d+\.\s*|\d+\s*[-:]?\s*|^\.\s*|^\.*)"
+ )
+ return re.sub(prefix_pattern, "", input_str, flags=re.IGNORECASE)
+
+
+def real_tasks_filter(input_str: str) -> bool:
+ no_task_regex = (
+ r"^No( (new|further|additional|extra|other))? tasks? (is )?("
+ r"required|needed|added|created|inputted).*"
+ )
+ task_complete_regex = r"^Task (complete|completed|finished|done|over|success).*"
+ do_nothing_regex = r"^(\s*|Do nothing(\s.*)?)$"
+
+ return (
+ not re.search(no_task_regex, input_str, re.IGNORECASE)
+ and not re.search(task_complete_regex, input_str, re.IGNORECASE)
+ and not re.search(do_nothing_regex, input_str, re.IGNORECASE)
+ )
diff --git a/platform/reworkd_platform/web/api/agent/tools/__init__.py b/platform/reworkd_platform/web/api/agent/tools/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/platform/reworkd_platform/web/api/agent/tools/code.py b/platform/reworkd_platform/web/api/agent/tools/code.py
new file mode 100644
index 0000000..1b0053f
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/code.py
@@ -0,0 +1,25 @@
+from typing import Any
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from lanarky.responses import StreamingResponse
+from langchain import LLMChain
+
+from reworkd_platform.web.api.agent.tools.tool import Tool
+
+
+class Code(Tool):
+ description = "Should only be used to write code, refactor code, fix code bugs, and explain programming concepts."
+ public_description = "Write and review code."
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ from reworkd_platform.web.api.agent.prompts import code_prompt
+
+ chain = LLMChain(llm=self.model, prompt=code_prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {"goal": goal, "language": self.language, "task": task},
+ media_type="text/event-stream",
+ )
diff --git a/platform/reworkd_platform/web/api/agent/tools/conclude.py b/platform/reworkd_platform/web/api/agent/tools/conclude.py
new file mode 100644
index 0000000..7c3a29f
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/conclude.py
@@ -0,0 +1,15 @@
+from typing import Any
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+from reworkd_platform.web.api.agent.tools.tool import Tool
+
+
+class Conclude(Tool):
+ description = "Use when there is nothing else to do. The task has been concluded."
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ return stream_string("Task execution concluded.", delayed=True)
diff --git a/platform/reworkd_platform/web/api/agent/tools/image.py b/platform/reworkd_platform/web/api/agent/tools/image.py
new file mode 100644
index 0000000..f934448
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/image.py
@@ -0,0 +1,66 @@
+from typing import Any
+
+import openai
+import replicate
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from replicate.exceptions import ModelError
+from replicate.exceptions import ReplicateError as ReplicateAPIError
+
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+from reworkd_platform.web.api.agent.tools.tool import Tool
+from reworkd_platform.web.api.errors import ReplicateError
+
+
+async def get_replicate_image(input_str: str) -> str:
+ if settings.replicate_api_key is None or settings.replicate_api_key == "":
+ raise RuntimeError("Replicate API key not set")
+
+ client = replicate.Client(settings.replicate_api_key)
+ try:
+ output = client.run(
+ "stability-ai/stable-diffusion"
+ ":db21e45d3f7023abc2a46ee38a23973f6dce16bb082a930b0c49861f96d1e5bf",
+ input={"prompt": input_str},
+ image_dimensions="512x512",
+ )
+ except ModelError as e:
+ raise ReplicateError(e, "Image generation failed due to NSFW image.")
+ except ReplicateAPIError as e:
+ raise ReplicateError(e, "Failed to generate an image.")
+
+ return output[0]
+
+
+# Use AI to generate an Image based on a prompt
+async def get_open_ai_image(input_str: str) -> str:
+ response = openai.Image.create(
+ api_key=settings.openai_api_key,
+ prompt=input_str,
+ n=1,
+ size="256x256",
+ )
+
+ return response["data"][0]["url"]
+
+
+class Image(Tool):
+ description = "Used to sketch, draw, or generate an image."
+ public_description = "Generate AI images."
+ arg_description = (
+ "The input prompt to the image generator. "
+ "This should be a detailed description of the image touching on image "
+ "style, image focus, color, etc."
+ )
+ image_url = "/tools/replicate.png"
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ # Use the replicate API if its available, otherwise use DALL-E
+ try:
+ url = await get_replicate_image(input_str)
+ except RuntimeError:
+ url = await get_open_ai_image(input_str)
+
+ return stream_string(f"")
diff --git a/platform/reworkd_platform/web/api/agent/tools/open_ai_function.py b/platform/reworkd_platform/web/api/agent/tools/open_ai_function.py
new file mode 100644
index 0000000..8f54cba
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/open_ai_function.py
@@ -0,0 +1,43 @@
+from typing import Type, TypedDict
+
+from reworkd_platform.web.api.agent.tools.tool import Tool
+from reworkd_platform.web.api.agent.tools.tools import get_tool_name
+
+
+class FunctionDescription(TypedDict):
+ """Representation of a callable function to the OpenAI API."""
+
+ name: str
+ """The name of the function."""
+ description: str
+ """A description of the function."""
+ parameters: dict[str, object]
+ """The parameters of the function."""
+
+
+def get_tool_function(tool: Type[Tool]) -> FunctionDescription:
+ """A function that will return the tool's function specification"""
+ name = get_tool_name(tool)
+
+ return {
+ "name": name,
+ "description": tool.description,
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "reasoning": {
+ "type": "string",
+ "description": (
+ f"Reasoning is how the task will be accomplished with the current function. "
+ "Detail your overall plan along with any concerns you have."
+ "Ensure this reasoning value is in the user defined langauge "
+ ),
+ },
+ "arg": {
+ "type": "string",
+ "description": tool.arg_description,
+ },
+ },
+ "required": ["reasoning", "arg"],
+ },
+ }
diff --git a/platform/reworkd_platform/web/api/agent/tools/reason.py b/platform/reworkd_platform/web/api/agent/tools/reason.py
new file mode 100644
index 0000000..f34a017
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/reason.py
@@ -0,0 +1,27 @@
+from typing import Any
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from lanarky.responses import StreamingResponse
+from langchain import LLMChain
+
+from reworkd_platform.web.api.agent.tools.tool import Tool
+
+
+class Reason(Tool):
+ description = (
+ "Reason about task via existing information or understanding. "
+ "Make decisions / selections from options."
+ )
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ from reworkd_platform.web.api.agent.prompts import execute_task_prompt
+
+ chain = LLMChain(llm=self.model, prompt=execute_task_prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {"goal": goal, "language": self.language, "task": task},
+ media_type="text/event-stream",
+ )
diff --git a/platform/reworkd_platform/web/api/agent/tools/search.py b/platform/reworkd_platform/web/api/agent/tools/search.py
new file mode 100644
index 0000000..fb83e82
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/search.py
@@ -0,0 +1,109 @@
+from typing import Any, List
+from urllib.parse import quote
+
+import aiohttp
+from aiohttp import ClientResponseError
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from loguru import logger
+
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+from reworkd_platform.web.api.agent.tools.reason import Reason
+from reworkd_platform.web.api.agent.tools.tool import Tool
+from reworkd_platform.web.api.agent.tools.utils import (
+ CitedSnippet,
+ summarize_with_sources,
+)
+
+# Search google via serper.dev. Adapted from LangChain
+# https://github.com/hwchase17/langchain/blob/master/langchain/utilities
+
+
+async def _google_serper_search_results(
+ search_term: str, search_type: str = "search"
+) -> dict[str, Any]:
+ headers = {
+ "X-API-KEY": settings.serp_api_key or "",
+ "Content-Type": "application/json",
+ }
+ params = {
+ "q": search_term,
+ }
+
+ async with aiohttp.ClientSession() as session:
+ async with session.post(
+ f"https://google.serper.dev/{search_type}", headers=headers, params=params
+ ) as response:
+ response.raise_for_status()
+ search_results = await response.json()
+ return search_results
+
+
+class Search(Tool):
+ description = (
+ "Search Google for short up to date searches for simple questions about public information "
+ "news and people.\n"
+ )
+ public_description = "Search google for information about current events."
+ arg_description = "The query argument to search for. This value is always populated and cannot be an empty string."
+ image_url = "/tools/google.png"
+
+ @staticmethod
+ def available() -> bool:
+ return settings.serp_api_key is not None and settings.serp_api_key != ""
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ try:
+ return await self._call(goal, task, input_str, *args, **kwargs)
+ except ClientResponseError:
+ logger.exception("Error calling Serper API, falling back to reasoning")
+ return await Reason(self.model, self.language).call(
+ goal, task, input_str, *args, **kwargs
+ )
+
+ async def _call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> FastAPIStreamingResponse:
+ results = await _google_serper_search_results(
+ input_str,
+ )
+
+ k = 5 # Number of results to return
+ snippets: List[CitedSnippet] = []
+
+ if results.get("answerBox"):
+ answer_values = []
+ answer_box = results.get("answerBox", {})
+ if answer_box.get("answer"):
+ answer_values.append(answer_box.get("answer"))
+ elif answer_box.get("snippet"):
+ answer_values.append(answer_box.get("snippet").replace("\n", " "))
+ elif answer_box.get("snippetHighlighted"):
+ answer_values.append(", ".join(answer_box.get("snippetHighlighted")))
+
+ if len(answer_values) > 0:
+ snippets.append(
+ CitedSnippet(
+ len(snippets) + 1,
+ "\n".join(answer_values),
+ f"https://www.google.com/search?q={quote(input_str)}",
+ )
+ )
+
+ for i, result in enumerate(results["organic"][:k]):
+ texts = []
+ link = ""
+ if "snippet" in result:
+ texts.append(result["snippet"])
+ if "link" in result:
+ link = result["link"]
+ for attribute, value in result.get("attributes", {}).items():
+ texts.append(f"{attribute}: {value}.")
+ snippets.append(CitedSnippet(len(snippets) + 1, "\n".join(texts), link))
+
+ if len(snippets) == 0:
+ return stream_string("No good Google Search Result was found", True)
+
+ return summarize_with_sources(self.model, self.language, goal, task, snippets)
diff --git a/platform/reworkd_platform/web/api/agent/tools/sidsearch.py b/platform/reworkd_platform/web/api/agent/tools/sidsearch.py
new file mode 100644
index 0000000..e99453c
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/sidsearch.py
@@ -0,0 +1,143 @@
+import json
+from datetime import datetime, timedelta
+from typing import Any, List, Optional
+
+import aiohttp
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from loguru import logger
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.db.models.auth import OauthCredentials
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.services.security import encryption_service
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+from reworkd_platform.web.api.agent.tools.tool import Tool
+from reworkd_platform.web.api.agent.tools.utils import Snippet, summarize_sid
+
+from reworkd_platform.web.api.agent.tools.search import Search
+
+
+async def _sid_search_results(
+ search_term: str, limit: int, token: str
+) -> dict[str, Any]:
+ headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
+ data = {"query": search_term, "limit": limit}
+
+ async with aiohttp.ClientSession() as session:
+ async with session.post(
+ "https://api.sid.ai/v1/users/me/query",
+ headers=headers,
+ data=json.dumps(data),
+ ) as response:
+ response.raise_for_status()
+ search_results = await response.json()
+ return search_results
+
+
+async def token_exchange(refresh_token: str) -> tuple[str, datetime]:
+ data = {
+ "grant_type": "refresh_token",
+ "client_id": settings.sid_client_id,
+ "client_secret": settings.sid_client_secret,
+ "redirect_uri": settings.sid_redirect_uri,
+ "refresh_token": refresh_token,
+ }
+ async with aiohttp.ClientSession() as session:
+ async with session.post(
+ "https://auth.sid.ai/oauth/token", data=data
+ ) as response:
+ response.raise_for_status()
+ response_data = await response.json()
+ access_token = response_data["access_token"]
+ expires_in = response_data["expires_in"]
+ return access_token, datetime.now() + timedelta(seconds=expires_in)
+
+
+async def get_access_token(
+ oauth_crud: OAuthCrud, installation: OauthCredentials
+) -> Optional[str]:
+ if not installation.refresh_token_enc:
+ return None
+ if datetime.now() + timedelta(minutes=5) > installation.access_token_expiration:
+ refresh_token = encryption_service.decrypt(installation.refresh_token_enc)
+ access_token, expiration = await token_exchange(refresh_token)
+ installation.access_token_enc = encryption_service.encrypt(access_token)
+ installation.access_token_expiration = expiration
+ await installation.save(oauth_crud.session)
+
+ return encryption_service.decrypt(installation.access_token_enc)
+
+
+class SID(Tool):
+ public_description = "Grant access to your Notion, Google Drive, etc."
+ description = """
+ Find private information by searching through notion, email and google drive.
+ Should be used when questions refer to personal information.
+ """
+ arg_description = (
+ "The query to search for. It should be a question in natural language."
+ )
+ image_url = "/tools/sid.png"
+
+ @staticmethod
+ def available() -> bool:
+ return settings.sid_enabled
+
+ @staticmethod
+ async def dynamic_available(user: UserBase, oauth_crud: OAuthCrud) -> bool:
+ installation = await oauth_crud.get_installation_by_user_id(
+ user_id=user.id, provider="sid"
+ )
+
+ return bool(installation and installation.access_token_enc)
+
+ async def _run_sid(
+ self,
+ goal: str,
+ task: str,
+ input_str: str,
+ user: UserBase,
+ oauth_crud: OAuthCrud,
+ ) -> Optional[FastAPIStreamingResponse]:
+ installation = await oauth_crud.get_installation_by_user_id(
+ user_id=user.id, provider="sid"
+ )
+ if not installation:
+ logger.warning("No sid installation found for user {user.id}")
+ return None
+
+ token = await get_access_token(oauth_crud, installation)
+ if not token:
+ logger.warning("Unable to fetch sid access token for {user.id}")
+ return None
+
+ try:
+ res = await _sid_search_results(input_str, limit=10, token=token)
+ snippets: List[Snippet] = [
+ Snippet(text=result["text"]) for result in (res.get("results", []))
+ ]
+ except Exception as e:
+ logger.exception(e)
+ return None
+
+ if not snippets:
+ return None
+
+ return summarize_sid(self.model, self.language, goal, task, snippets)
+
+
+ async def call(
+ self,
+ goal: str,
+ task: str,
+ input_str: str,
+ user: UserBase,
+ oauth_crud: OAuthCrud,
+ *args: Any,
+ **kwargs: Any,
+ ) -> FastAPIStreamingResponse:
+ # fall back to search if no results are found
+ return await self._run_sid(goal, task, input_str, user, oauth_crud) or await Search(self.model, self.language).call(
+ goal, task, input_str, user, oauth_crud
+ )
diff --git a/platform/reworkd_platform/web/api/agent/tools/tool.py b/platform/reworkd_platform/web/api/agent/tools/tool.py
new file mode 100644
index 0000000..8cc8952
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/tool.py
@@ -0,0 +1,41 @@
+from abc import ABC, abstractmethod
+from typing import Optional
+
+from lanarky.responses import StreamingResponse
+from langchain.chat_models.base import BaseChatModel
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.schemas.user import UserBase
+
+
+class Tool(ABC):
+ description: str = ""
+ public_description: str = ""
+ arg_description: str = "The argument to the function."
+ image_url: str = "/tools/openai-white.png"
+
+ model: BaseChatModel
+ language: str
+
+ def __init__(self, model: BaseChatModel, language: str):
+ self.model = model
+ self.language = language
+
+ @staticmethod
+ def available() -> bool:
+ return True
+
+ @staticmethod
+ async def dynamic_available(user: UserBase, oauth_crud: OAuthCrud) -> bool:
+ return True
+
+ @abstractmethod
+ async def call(
+ self,
+ goal: str,
+ task: str,
+ input_str: str,
+ user: UserBase,
+ oauth_crud: OAuthCrud,
+ ) -> StreamingResponse:
+ pass
diff --git a/platform/reworkd_platform/web/api/agent/tools/tools.py b/platform/reworkd_platform/web/api/agent/tools/tools.py
new file mode 100644
index 0000000..12c1dc3
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/tools.py
@@ -0,0 +1,78 @@
+from typing import List, Type
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.web.api.agent.tools.code import Code
+from reworkd_platform.web.api.agent.tools.image import Image
+from reworkd_platform.web.api.agent.tools.search import Search
+from reworkd_platform.web.api.agent.tools.sidsearch import SID
+from reworkd_platform.web.api.agent.tools.tool import Tool
+
+
+async def get_user_tools(
+ tool_names: List[str], user: UserBase, crud: OAuthCrud
+) -> List[Type[Tool]]:
+ tools = list(map(get_tool_from_name, tool_names)) + get_default_tools()
+ return [tool for tool in tools if await tool.dynamic_available(user, crud)]
+
+
+def get_available_tools() -> List[Type[Tool]]:
+ return get_external_tools() + get_default_tools()
+
+
+def get_available_tools_names() -> List[str]:
+ return [get_tool_name(tool) for tool in get_available_tools()]
+
+
+def get_external_tools() -> List[Type[Tool]]:
+ return [
+ # Wikipedia, # TODO: Remove if async doesn't work
+ Image,
+ Code,
+ SID,
+ ]
+
+
+def get_default_tools() -> List[Type[Tool]]:
+ return [
+ Search,
+ ]
+
+
+def get_tool_name(tool: Type[Tool]) -> str:
+ return format_tool_name(tool.__name__)
+
+
+def format_tool_name(tool_name: str) -> str:
+ return tool_name.lower()
+
+
+def get_tools_overview(tools: List[Type[Tool]]) -> str:
+ """Return a formatted string of name: description pairs for all available tools"""
+
+ # Create a list of formatted strings
+ formatted_strings = [
+ f"'{get_tool_name(tool)}': {tool.description}" for tool in tools
+ ]
+
+ # Remove duplicates by converting the list to a set and back to a list
+ unique_strings = list(set(formatted_strings))
+
+ # Join the unique strings with newlines
+ return "\n".join(unique_strings)
+
+
+def get_tool_from_name(tool_name: str) -> Type[Tool]:
+ for tool in get_available_tools():
+ if get_tool_name(tool) == format_tool_name(tool_name):
+ return tool
+
+ return get_default_tool()
+
+
+def get_default_tool() -> Type[Tool]:
+ return Search
+
+
+def get_default_tool_name() -> str:
+ return get_tool_name(get_default_tool())
diff --git a/platform/reworkd_platform/web/api/agent/tools/utils.py b/platform/reworkd_platform/web/api/agent/tools/utils.py
new file mode 100644
index 0000000..5a1b775
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/utils.py
@@ -0,0 +1,98 @@
+from dataclasses import dataclass
+from typing import List
+
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from lanarky.responses import StreamingResponse
+from langchain import LLMChain
+from langchain.chat_models.base import BaseChatModel
+
+
+@dataclass
+class CitedSnippet:
+ index: int
+ text: str
+ url: str = ""
+
+ def __repr__(self) -> str:
+ """
+ The string representation the AI model will see
+ """
+ return f"{{i: {self.index}, text: {self.text}, url: {self.url}}}"
+
+
+@dataclass
+class Snippet:
+ text: str
+
+ def __repr__(self) -> str:
+ """
+ The string representation the AI model will see
+ """
+ return f"{{text: {self.text}}}"
+
+
+def summarize(
+ model: BaseChatModel,
+ language: str,
+ goal: str,
+ text: str,
+) -> FastAPIStreamingResponse:
+ from reworkd_platform.web.api.agent.prompts import summarize_prompt
+
+ chain = LLMChain(llm=model, prompt=summarize_prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {
+ "goal": goal,
+ "language": language,
+ "text": text,
+ },
+ media_type="text/event-stream",
+ )
+
+
+def summarize_with_sources(
+ model: BaseChatModel,
+ language: str,
+ goal: str,
+ query: str,
+ snippets: List[CitedSnippet],
+) -> FastAPIStreamingResponse:
+ from reworkd_platform.web.api.agent.prompts import summarize_with_sources_prompt
+
+ chain = LLMChain(llm=model, prompt=summarize_with_sources_prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {
+ "goal": goal,
+ "query": query,
+ "language": language,
+ "snippets": snippets,
+ },
+ media_type="text/event-stream",
+ )
+
+
+def summarize_sid(
+ model: BaseChatModel,
+ language: str,
+ goal: str,
+ query: str,
+ snippets: List[Snippet],
+) -> FastAPIStreamingResponse:
+ from reworkd_platform.web.api.agent.prompts import summarize_sid_prompt
+
+ chain = LLMChain(llm=model, prompt=summarize_sid_prompt)
+
+ return StreamingResponse.from_chain(
+ chain,
+ {
+ "goal": goal,
+ "query": query,
+ "language": language,
+ "snippets": snippets,
+ },
+ media_type="text/event-stream",
+ )
diff --git a/platform/reworkd_platform/web/api/agent/tools/wikipedia_search.py b/platform/reworkd_platform/web/api/agent/tools/wikipedia_search.py
new file mode 100644
index 0000000..f9a6a89
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/tools/wikipedia_search.py
@@ -0,0 +1,30 @@
+from typing import Any
+
+from lanarky.responses import StreamingResponse
+from langchain import WikipediaAPIWrapper
+
+from reworkd_platform.web.api.agent.stream_mock import stream_string
+from reworkd_platform.web.api.agent.tools.tool import Tool
+
+
+class Wikipedia(Tool):
+ description = (
+ "Search Wikipedia for information about historical people, companies, events, "
+ "places or research. This should be used over search for broad overviews of "
+ "specific nouns."
+ )
+ public_description = "Search Wikipedia for historical information."
+ arg_description = "A simple query string of just the noun in question."
+ image_url = "/tools/wikipedia.png"
+
+ async def call(
+ self, goal: str, task: str, input_str: str, *args: Any, **kwargs: Any
+ ) -> StreamingResponse:
+ wikipedia_client = WikipediaAPIWrapper(
+ wiki_client=None, # Meta private value but mypy will complain its missing
+ )
+
+ # TODO: Make the below async
+ wikipedia_search = wikipedia_client.run(input_str)
+ # return summarize_with_sources(self.model, self.language, goal, task, [wikipedia_search])
+ return stream_string("Wikipedia is currently not working")
diff --git a/platform/reworkd_platform/web/api/agent/views.py b/platform/reworkd_platform/web/api/agent/views.py
new file mode 100644
index 0000000..69a2ab5
--- /dev/null
+++ b/platform/reworkd_platform/web/api/agent/views.py
@@ -0,0 +1,145 @@
+from typing import List, Optional
+
+from fastapi import APIRouter, Depends
+from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
+from pydantic import BaseModel
+
+from reworkd_platform.schemas.agent import (
+ AgentChat,
+ AgentRun,
+ AgentSummarize,
+ AgentTaskAnalyze,
+ AgentTaskCreate,
+ AgentTaskExecute,
+ NewTasksResponse,
+)
+from reworkd_platform.web.api.agent.agent_service.agent_service import AgentService
+from reworkd_platform.web.api.agent.agent_service.agent_service_provider import (
+ get_agent_service,
+)
+from reworkd_platform.web.api.agent.analysis import Analysis
+from reworkd_platform.web.api.agent.dependancies import (
+ agent_analyze_validator,
+ agent_chat_validator,
+ agent_create_validator,
+ agent_execute_validator,
+ agent_start_validator,
+ agent_summarize_validator,
+)
+from reworkd_platform.web.api.agent.tools.tools import get_external_tools, get_tool_name
+
+router = APIRouter()
+
+
+@router.post(
+ "/start",
+)
+async def start_tasks(
+ req_body: AgentRun = Depends(agent_start_validator),
+ agent_service: AgentService = Depends(get_agent_service(agent_start_validator)),
+) -> NewTasksResponse:
+ new_tasks = await agent_service.start_goal_agent(goal=req_body.goal)
+ return NewTasksResponse(newTasks=new_tasks, run_id=req_body.run_id)
+
+
+@router.post("/analyze")
+async def analyze_tasks(
+ req_body: AgentTaskAnalyze = Depends(agent_analyze_validator),
+ agent_service: AgentService = Depends(get_agent_service(agent_analyze_validator)),
+) -> Analysis:
+ return await agent_service.analyze_task_agent(
+ goal=req_body.goal,
+ task=req_body.task or "",
+ tool_names=req_body.tool_names or [],
+ )
+
+
+@router.post("/execute")
+async def execute_tasks(
+ req_body: AgentTaskExecute = Depends(agent_execute_validator),
+ agent_service: AgentService = Depends(
+ get_agent_service(validator=agent_execute_validator, streaming=True),
+ ),
+) -> FastAPIStreamingResponse:
+ return await agent_service.execute_task_agent(
+ goal=req_body.goal or "",
+ task=req_body.task or "",
+ analysis=req_body.analysis,
+ )
+
+
+@router.post("/create")
+async def create_tasks(
+ req_body: AgentTaskCreate = Depends(agent_create_validator),
+ agent_service: AgentService = Depends(get_agent_service(agent_create_validator)),
+) -> NewTasksResponse:
+ new_tasks = await agent_service.create_tasks_agent(
+ goal=req_body.goal,
+ tasks=req_body.tasks or [],
+ last_task=req_body.last_task or "",
+ result=req_body.result or "",
+ completed_tasks=req_body.completed_tasks or [],
+ )
+ return NewTasksResponse(newTasks=new_tasks, run_id=req_body.run_id)
+
+
+@router.post("/summarize")
+async def summarize(
+ req_body: AgentSummarize = Depends(agent_summarize_validator),
+ agent_service: AgentService = Depends(
+ get_agent_service(
+ validator=agent_summarize_validator,
+ streaming=True,
+ llm_model="gpt-3.5-turbo-16k",
+ ),
+ ),
+) -> FastAPIStreamingResponse:
+ return await agent_service.summarize_task_agent(
+ goal=req_body.goal or "",
+ results=req_body.results,
+ )
+
+
+@router.post("/chat")
+async def chat(
+ req_body: AgentChat = Depends(agent_chat_validator),
+ agent_service: AgentService = Depends(
+ get_agent_service(
+ validator=agent_chat_validator,
+ streaming=True,
+ llm_model="gpt-3.5-turbo-16k",
+ ),
+ ),
+) -> FastAPIStreamingResponse:
+ return await agent_service.chat(
+ message=req_body.message,
+ results=req_body.results,
+ )
+
+
+class ToolModel(BaseModel):
+ name: str
+ description: str
+ color: str
+ image_url: Optional[str]
+
+
+class ToolsResponse(BaseModel):
+ tools: List[ToolModel]
+
+
+@router.get("/tools")
+async def get_user_tools() -> ToolsResponse:
+ tools = get_external_tools()
+ formatted_tools = [
+ ToolModel(
+ name=get_tool_name(tool),
+ description=tool.public_description,
+ color="TODO: Change to image of tool",
+ image_url=tool.image_url,
+ )
+ for tool in tools
+ if tool.available()
+ ]
+
+ return ToolsResponse(tools=formatted_tools)
diff --git a/platform/reworkd_platform/web/api/auth/__init__.py b/platform/reworkd_platform/web/api/auth/__init__.py
new file mode 100644
index 0000000..7038649
--- /dev/null
+++ b/platform/reworkd_platform/web/api/auth/__init__.py
@@ -0,0 +1,3 @@
+from .views import router
+
+__all__ = ["router"]
diff --git a/platform/reworkd_platform/web/api/auth/views.py b/platform/reworkd_platform/web/api/auth/views.py
new file mode 100644
index 0000000..c01ff18
--- /dev/null
+++ b/platform/reworkd_platform/web/api/auth/views.py
@@ -0,0 +1,70 @@
+from typing import Any, Dict, Optional
+
+from fastapi import APIRouter, Depends, HTTPException
+from fastapi.responses import RedirectResponse
+
+from reworkd_platform.db.crud.oauth import OAuthCrud
+from reworkd_platform.db.crud.organization import OrganizationCrud, OrganizationUsers
+from reworkd_platform.schemas import UserBase
+from reworkd_platform.services.oauth_installers import OAuthInstaller, installer_factory
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.dependencies import get_current_user
+
+router = APIRouter()
+
+
+@router.get("/organization/{name}")
+async def organizations(
+ name: str, crud: OrganizationCrud = Depends(OrganizationCrud.inject)
+) -> OrganizationUsers:
+ if org := await crud.get_by_name(name):
+ return org
+ raise HTTPException(status_code=404)
+
+
+@router.get("/{provider}")
+async def oauth_install(
+ redirect: str = settings.frontend_url,
+ user: UserBase = Depends(get_current_user),
+ installer: OAuthInstaller = Depends(installer_factory),
+) -> str:
+ """Install an OAuth App"""
+ return await installer.install(user, redirect)
+
+
+@router.get("/{provider}/uninstall")
+async def oauth_uninstall(
+ user: UserBase = Depends(get_current_user),
+ installer: OAuthInstaller = Depends(installer_factory),
+) -> Dict[str, Any]:
+ res = await installer.uninstall(user)
+ return {
+ "success": res,
+ }
+
+
+@router.get("/{provider}/callback")
+async def oauth_callback(
+ code: Optional[str] = None,
+ state: Optional[str] = None,
+ installer: OAuthInstaller = Depends(installer_factory),
+) -> RedirectResponse:
+ """Callback for OAuth App"""
+
+ # if code or state are missing (user cancelled), redirect to frontend
+ if not code or not state:
+ return RedirectResponse(url=settings.frontend_url)
+
+ creds = await installer.install_callback(code, state)
+ return RedirectResponse(url=creds.redirect_uri)
+
+
+@router.get("/sid/info")
+async def sid_info(
+ user: UserBase = Depends(get_current_user),
+ crud: OAuthCrud = Depends(OAuthCrud.inject),
+) -> Dict[str, Any]:
+ creds = await crud.get_installation_by_user_id(user.id, "sid")
+ return {
+ "connected": bool(creds and creds.access_token_enc),
+ }
diff --git a/platform/reworkd_platform/web/api/dependencies.py b/platform/reworkd_platform/web/api/dependencies.py
new file mode 100644
index 0000000..9546337
--- /dev/null
+++ b/platform/reworkd_platform/web/api/dependencies.py
@@ -0,0 +1,41 @@
+from datetime import datetime
+from typing import Annotated
+
+from fastapi import Depends, Header
+from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
+from sqlalchemy.ext.asyncio import AsyncSession
+from sqlalchemy.orm.exc import NoResultFound
+
+from reworkd_platform.db.crud.user import UserCrud
+from reworkd_platform.db.dependencies import get_db_session
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.web.api.http_responses import forbidden
+
+
+def user_crud(
+ session: AsyncSession = Depends(get_db_session),
+) -> UserCrud:
+ return UserCrud(session)
+
+
+async def get_current_user(
+ x_organization_id: Annotated[str | None, Header()] = None,
+ bearer: HTTPAuthorizationCredentials = Depends(HTTPBearer()),
+ crud: UserCrud = Depends(user_crud),
+) -> UserBase:
+ session_token = bearer.credentials
+
+ try:
+ session = await crud.get_user_session(session_token)
+ except NoResultFound:
+ raise forbidden("Invalid session token")
+
+ if session.expires <= datetime.utcnow():
+ raise forbidden("Session token expired")
+
+ return UserBase(
+ id=session.user.id,
+ name=session.user.name,
+ email=session.user.email,
+ image=session.user.image,
+ )
diff --git a/platform/reworkd_platform/web/api/error_handling.py b/platform/reworkd_platform/web/api/error_handling.py
new file mode 100644
index 0000000..10124b5
--- /dev/null
+++ b/platform/reworkd_platform/web/api/error_handling.py
@@ -0,0 +1,22 @@
+from fastapi import Request
+from fastapi.responses import JSONResponse
+from loguru import logger
+
+from reworkd_platform.web.api.errors import PlatformaticError
+
+
+async def platformatic_exception_handler(
+ _: Request,
+ platform_exception: PlatformaticError,
+) -> JSONResponse:
+ if platform_exception.should_log:
+ logger.exception(platform_exception)
+
+ return JSONResponse(
+ status_code=409,
+ content={
+ "error": platform_exception.__class__.__name__,
+ "detail": platform_exception.detail,
+ "code": platform_exception.code,
+ },
+ )
diff --git a/platform/reworkd_platform/web/api/errors.py b/platform/reworkd_platform/web/api/errors.py
new file mode 100644
index 0000000..85cad7d
--- /dev/null
+++ b/platform/reworkd_platform/web/api/errors.py
@@ -0,0 +1,38 @@
+class PlatformaticError(Exception):
+ """
+ Parent exception class for all expected backend exceptions
+ Will be caught and handled by the platform_exception_handler
+ Shoutout to https://platformatic.dev/
+ """
+
+ detail: str
+ code: int
+ should_log: bool = True
+
+ def __init__(
+ self,
+ base_exception: Exception,
+ detail: str = "",
+ code: int = 409,
+ should_log: bool = True,
+ ):
+ super().__init__(base_exception)
+ self.detail = detail
+ self.code = code
+ self.should_log = should_log
+
+
+class OpenAIError(PlatformaticError):
+ pass
+
+
+class ReplicateError(PlatformaticError):
+ pass
+
+
+class MaxLoopsError(PlatformaticError):
+ pass
+
+
+class MultipleSummaryError(PlatformaticError):
+ pass
diff --git a/platform/reworkd_platform/web/api/http_responses.py b/platform/reworkd_platform/web/api/http_responses.py
new file mode 100644
index 0000000..50b6623
--- /dev/null
+++ b/platform/reworkd_platform/web/api/http_responses.py
@@ -0,0 +1,9 @@
+from fastapi import HTTPException, status
+
+
+def forbidden(detail: str = "Forbidden") -> HTTPException:
+ return HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=detail)
+
+
+def not_found(detail: str = "Not Found") -> HTTPException:
+ return HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=detail)
diff --git a/platform/reworkd_platform/web/api/memory/__init__.py b/platform/reworkd_platform/web/api/memory/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/platform/reworkd_platform/web/api/memory/__init__.py
@@ -0,0 +1 @@
+
diff --git a/platform/reworkd_platform/web/api/memory/memory.py b/platform/reworkd_platform/web/api/memory/memory.py
new file mode 100644
index 0000000..f565944
--- /dev/null
+++ b/platform/reworkd_platform/web/api/memory/memory.py
@@ -0,0 +1,35 @@
+from abc import ABC, abstractmethod
+from typing import Any, List, Tuple
+
+SimilarTasks = List[Tuple[str, float]]
+
+
+class AgentMemory(ABC):
+ """
+ Base class for AgentMemory
+ Expose __enter__ and __exit__ to ensure connections get closed within requests
+ """
+
+ @abstractmethod
+ def __enter__(self) -> "AgentMemory":
+ raise NotImplementedError()
+
+ @abstractmethod
+ def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
+ raise NotImplementedError()
+
+ @abstractmethod
+ def add_tasks(self, tasks: List[str]) -> List[str]:
+ raise NotImplementedError()
+
+ @abstractmethod
+ def get_similar_tasks(self, query: str, score_threshold: float = 0.95) -> List[str]:
+ raise NotImplementedError()
+
+ @abstractmethod
+ def reset_class(self) -> None:
+ raise NotImplementedError()
+
+ @staticmethod
+ def should_use() -> bool:
+ return True
diff --git a/platform/reworkd_platform/web/api/memory/memory_with_fallback.py b/platform/reworkd_platform/web/api/memory/memory_with_fallback.py
new file mode 100644
index 0000000..874d14a
--- /dev/null
+++ b/platform/reworkd_platform/web/api/memory/memory_with_fallback.py
@@ -0,0 +1,53 @@
+from __future__ import annotations
+
+from typing import Any, List
+
+from loguru import logger
+
+from reworkd_platform.web.api.memory.memory import AgentMemory
+
+
+class MemoryWithFallback(AgentMemory):
+ """
+ Wrap a primary AgentMemory provider and use a fallback in the case that it fails
+ We do this because we've had issues with Weaviate crashing and causing memory to randomly fail
+ """
+
+ def __init__(self, primary: AgentMemory, secondary: AgentMemory):
+ self.primary = primary
+ self.secondary = secondary
+
+ def __enter__(self) -> AgentMemory:
+ try:
+ return self.primary.__enter__()
+ except Exception as e:
+ logger.exception(e)
+ return self.secondary.__enter__()
+
+ def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
+ try:
+ self.primary.__exit__(exc_type, exc_value, traceback)
+ except Exception as e:
+ logger.exception(e)
+ self.secondary.__exit__(exc_type, exc_value, traceback)
+
+ def add_tasks(self, tasks: List[str]) -> List[str]:
+ try:
+ return self.primary.add_tasks(tasks)
+ except Exception as e:
+ logger.exception(e)
+ return self.secondary.add_tasks(tasks)
+
+ def get_similar_tasks(self, query: str, score_threshold: float = 0) -> List[str]:
+ try:
+ return self.primary.get_similar_tasks(query)
+ except Exception as e:
+ logger.exception(e)
+ return self.secondary.get_similar_tasks(query)
+
+ def reset_class(self) -> None:
+ try:
+ self.primary.reset_class()
+ except Exception as e:
+ logger.exception(e)
+ self.secondary.reset_class()
diff --git a/platform/reworkd_platform/web/api/memory/null.py b/platform/reworkd_platform/web/api/memory/null.py
new file mode 100644
index 0000000..2861143
--- /dev/null
+++ b/platform/reworkd_platform/web/api/memory/null.py
@@ -0,0 +1,25 @@
+from typing import Any, List
+
+from reworkd_platform.web.api.memory.memory import AgentMemory
+
+
+class NullAgentMemory(AgentMemory):
+ """
+ NullObjectPattern for AgentMemory
+ Used when database connections cannot be established
+ """
+
+ def __enter__(self) -> AgentMemory:
+ return self
+
+ def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
+ pass
+
+ def add_tasks(self, tasks: List[str]) -> List[str]:
+ return []
+
+ def get_similar_tasks(self, query: str, score_threshold: float = 0) -> List[str]:
+ return []
+
+ def reset_class(self) -> None:
+ pass
diff --git a/platform/reworkd_platform/web/api/metadata.py b/platform/reworkd_platform/web/api/metadata.py
new file mode 100644
index 0000000..39f4ab8
--- /dev/null
+++ b/platform/reworkd_platform/web/api/metadata.py
@@ -0,0 +1,68 @@
+from typing import Optional
+from urllib.parse import urljoin, urlparse
+
+from bs4 import BeautifulSoup
+from fastapi import APIRouter
+from httpx import AsyncClient, HTTPStatusError, RequestError
+from pydantic import BaseModel, Field
+
+from reworkd_platform.web.api.errors import PlatformaticError
+
+router = APIRouter()
+
+
+class Metadata(BaseModel):
+ title: Optional[str] = Field(default=None, description="Title of the page")
+ hostname: Optional[str] = Field(default=None, description="Hostname of the page")
+ favicon: Optional[str] = Field(default=None, description="Favicon of the page")
+
+
+@router.get(
+ "",
+)
+async def extract_metadata(url: str) -> Metadata:
+ try:
+ headers = {
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
+ }
+
+ async with AsyncClient() as client:
+ res = await client.get(url, headers=headers)
+
+ res.raise_for_status()
+
+ soup = BeautifulSoup(res.text, "html.parser")
+ parsed_url = urlparse(url)
+
+ metadata = Metadata(
+ hostname=parsed_url.hostname,
+ title=soup.title.string.strip() if soup.title else None,
+ )
+
+ favicon = None
+ for link in soup.find_all("link", rel=lambda x: x in ["icon", "shortcut icon"]):
+ favicon = link.get("href")
+ if not favicon.startswith("http"):
+ favicon = urljoin(url, favicon)
+ break
+
+ metadata.favicon = (
+ favicon
+ if favicon
+ else f"{parsed_url.scheme}://{parsed_url.hostname}/favicon.ico"
+ )
+
+ return metadata
+
+ except (RequestError, HTTPStatusError):
+ parsed_url = urlparse(url)
+ return Metadata(
+ hostname=parsed_url.hostname,
+ favicon=f"{parsed_url.scheme}://{parsed_url.hostname}/favicon.ico",
+ )
+ except Exception as e:
+ raise PlatformaticError(
+ base_exception=e,
+ detail=f"Could not extract metadata from {url}",
+ should_log=False,
+ )
diff --git a/platform/reworkd_platform/web/api/models/__init__.py b/platform/reworkd_platform/web/api/models/__init__.py
new file mode 100644
index 0000000..28c78a7
--- /dev/null
+++ b/platform/reworkd_platform/web/api/models/__init__.py
@@ -0,0 +1,4 @@
+"""API for llm models"""
+from reworkd_platform.web.api.models.views import router
+
+__all__ = ["router"]
diff --git a/platform/reworkd_platform/web/api/models/views.py b/platform/reworkd_platform/web/api/models/views.py
new file mode 100644
index 0000000..b2bbc61
--- /dev/null
+++ b/platform/reworkd_platform/web/api/models/views.py
@@ -0,0 +1,33 @@
+from typing import List
+
+from fastapi import APIRouter, Depends
+from pydantic import BaseModel, Field
+
+from reworkd_platform.schemas.agent import LLM_MODEL_MAX_TOKENS
+from reworkd_platform.schemas.user import UserBase
+from reworkd_platform.web.api.dependencies import get_current_user
+
+router = APIRouter()
+
+
+class ModelWithAccess(BaseModel):
+ name: str
+ max_tokens: int
+ has_access: bool = Field(
+ default=False, description="Whether the user has access to this model"
+ )
+
+ @staticmethod
+ def from_model(name: str, max_tokens: int, user: UserBase) -> "ModelWithAccess":
+ has_access = user is not None
+ return ModelWithAccess(name=name, max_tokens=max_tokens, has_access=has_access)
+
+
+@router.get("")
+async def get_models(
+ user: UserBase = Depends(get_current_user),
+) -> List[ModelWithAccess]:
+ return [
+ ModelWithAccess.from_model(name=model, max_tokens=tokens, user=user)
+ for model, tokens in LLM_MODEL_MAX_TOKENS.items()
+ ]
diff --git a/platform/reworkd_platform/web/api/monitoring/__init__.py b/platform/reworkd_platform/web/api/monitoring/__init__.py
new file mode 100644
index 0000000..64a6bf4
--- /dev/null
+++ b/platform/reworkd_platform/web/api/monitoring/__init__.py
@@ -0,0 +1,4 @@
+"""API for checking project status."""
+from reworkd_platform.web.api.monitoring.views import router
+
+__all__ = ["router"]
diff --git a/platform/reworkd_platform/web/api/monitoring/views.py b/platform/reworkd_platform/web/api/monitoring/views.py
new file mode 100644
index 0000000..9255db4
--- /dev/null
+++ b/platform/reworkd_platform/web/api/monitoring/views.py
@@ -0,0 +1,20 @@
+from fastapi import APIRouter
+
+router = APIRouter()
+
+
+@router.get("/health")
+def health_check() -> None:
+ """
+ Checks the health of a project.
+
+ It returns 200 if the project is healthy.
+ """
+
+
+@router.get("/error")
+def error_check() -> None:
+ """
+ Checks that errors are being correctly logged.
+ """
+ raise Exception("This is an expected error from the error check endpoint!")
diff --git a/platform/reworkd_platform/web/api/router.py b/platform/reworkd_platform/web/api/router.py
new file mode 100644
index 0000000..70b235a
--- /dev/null
+++ b/platform/reworkd_platform/web/api/router.py
@@ -0,0 +1,10 @@
+from fastapi.routing import APIRouter
+
+from reworkd_platform.web.api import agent, auth, metadata, models, monitoring
+
+api_router = APIRouter()
+api_router.include_router(monitoring.router, prefix="/monitoring", tags=["monitoring"])
+api_router.include_router(agent.router, prefix="/agent", tags=["agent"])
+api_router.include_router(models.router, prefix="/models", tags=["models"])
+api_router.include_router(auth.router, prefix="/auth", tags=["auth"])
+api_router.include_router(metadata.router, prefix="/metadata", tags=["metadata"])
diff --git a/platform/reworkd_platform/web/application.py b/platform/reworkd_platform/web/application.py
new file mode 100644
index 0000000..f6ad8cd
--- /dev/null
+++ b/platform/reworkd_platform/web/application.py
@@ -0,0 +1,55 @@
+from importlib import metadata
+
+from fastapi import FastAPI
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.responses import UJSONResponse
+
+from reworkd_platform.logging import configure_logging
+from reworkd_platform.settings import settings
+from reworkd_platform.web.api.error_handling import platformatic_exception_handler
+from reworkd_platform.web.api.errors import PlatformaticError
+from reworkd_platform.web.api.router import api_router
+from reworkd_platform.web.lifetime import (
+ register_shutdown_event,
+ register_startup_event,
+)
+
+
+def get_app() -> FastAPI:
+ """
+ Get FastAPI application.
+
+ This is the main constructor of an application.
+
+ :return: application.
+ """
+ configure_logging()
+
+ app = FastAPI(
+ title="Reworkd Platform API",
+ version=metadata.version("reworkd_platform"),
+ docs_url="/api/docs",
+ redoc_url="/api/redoc",
+ openapi_url="/api/openapi.json",
+ default_response_class=UJSONResponse,
+ )
+
+ app.add_middleware(
+ CORSMiddleware,
+ allow_origins=[settings.frontend_url],
+ allow_origin_regex=settings.allowed_origins_regex,
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+ )
+
+ # Adds startup and shutdown events.
+ register_startup_event(app)
+ register_shutdown_event(app)
+
+ # Main router for the API.
+ app.include_router(router=api_router, prefix="/api")
+
+ app.exception_handler(PlatformaticError)(platformatic_exception_handler)
+
+ return app
diff --git a/platform/reworkd_platform/web/lifetime.py b/platform/reworkd_platform/web/lifetime.py
new file mode 100644
index 0000000..ffc58e6
--- /dev/null
+++ b/platform/reworkd_platform/web/lifetime.py
@@ -0,0 +1,77 @@
+from typing import Awaitable, Callable
+
+from fastapi import FastAPI
+from sqlalchemy.ext.asyncio import async_sessionmaker
+
+from reworkd_platform.db.meta import meta
+from reworkd_platform.db.models import load_all_models
+from reworkd_platform.db.utils import create_engine
+from reworkd_platform.services.tokenizer.lifetime import init_tokenizer
+
+
+def _setup_db(app: FastAPI) -> None: # pragma: no cover
+ """
+ Creates connection to the database.
+
+ This function creates SQLAlchemy engine instance,
+ session_factory for creating sessions
+ and stores them in the application's state property.
+
+ :param app: fastAPI application.
+ """
+ engine = create_engine()
+ session_factory = async_sessionmaker(
+ engine,
+ expire_on_commit=False,
+ )
+ app.state.db_engine = engine
+ app.state.db_session_factory = session_factory
+
+
+async def _create_tables() -> None: # pragma: no cover
+ """Populates tables in the database."""
+ load_all_models()
+
+ engine = create_engine()
+ async with engine.begin() as connection:
+ await connection.run_sync(meta.create_all)
+ await engine.dispose()
+
+
+def register_startup_event(
+ app: FastAPI,
+) -> Callable[[], Awaitable[None]]: # pragma: no cover
+ """
+ Actions to run on application startup.
+
+ This function uses fastAPI app to store data
+ in the state, such as db_engine.
+
+ :param app: the fastAPI application.
+ :return: function that actually performs actions.
+ """
+
+ @app.on_event("startup")
+ async def _startup() -> None: # noqa: WPS430
+ _setup_db(app)
+ init_tokenizer(app)
+ # await _create_tables()
+
+ return _startup
+
+
+def register_shutdown_event(
+ app: FastAPI,
+) -> Callable[[], Awaitable[None]]: # pragma: no cover
+ """
+ Actions to run on application's shutdown.
+
+ :param app: fastAPI application.
+ :return: function that actually performs actions.
+ """
+
+ @app.on_event("shutdown")
+ async def _shutdown() -> None: # noqa: WPS430
+ await app.state.db_engine.dispose()
+
+ return _shutdown
diff --git a/scripts/post-sync.sh b/scripts/post-sync.sh
new file mode 100755
index 0000000..0658215
--- /dev/null
+++ b/scripts/post-sync.sh
@@ -0,0 +1,7 @@
+cd "$(dirname "$0")" || exit 1
+cd .. || exit 1
+cd platform || exit 1
+
+rm poetry.lock
+poetry install
+poetry lock
diff --git a/scripts/prepare-sync.sh b/scripts/prepare-sync.sh
new file mode 100755
index 0000000..43aea17
--- /dev/null
+++ b/scripts/prepare-sync.sh
@@ -0,0 +1,10 @@
+cd "$(dirname "$0")" || exit 1
+git reset --hard
+
+git fetch origin
+
+git checkout main
+git pull
+
+git branch -d actions/sync --force
+git checkout -b actions/sync origin/actions/sync
diff --git a/setup.bat b/setup.bat
new file mode 100644
index 0000000..00c52aa
--- /dev/null
+++ b/setup.bat
@@ -0,0 +1,7 @@
+@echo off
+setlocal
+
+rem The CLI will take care of setting up the ENV variables
+cd cli || exit /b 1
+call npm install
+npm run start
diff --git a/setup.sh b/setup.sh
new file mode 100755
index 0000000..99c4189
--- /dev/null
+++ b/setup.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+cd "$(dirname "$0")" || exit 1
+
+# The CLI will take care of setting up the ENV variables
+cd ./cli || exit 1
+npm install
+npm run start