From 95b0bd1bfc2630002fc286c98c0ced19f3ef1a66 Mon Sep 17 00:00:00 2001 From: gabogg Date: Fri, 12 Jun 2026 01:59:31 +0000 Subject: [PATCH] feat: integrate SalesImportJob tracking table and fix E2E test race conditions --- .dockerignore | 8 + Dockerfile | 27 + docs/ARCHITECTURE.md | 2 +- docs/PHASE_3_IMPLEMENTATION.md | 8 +- package-lock.json | 7941 ----------------- pnpm-lock.yaml | 5633 ++++++++++++ .../migration.sql | 18 + prisma/rls_and_seed.sql | 164 +- prisma/schema.prisma | 16 +- .../01_collaborator_unauthorized.png | Bin 0 -> 40492 bytes .../02_admin_import_view.png | Bin 0 -> 41878 bytes .../03_invalid_file_selected.png | Bin 0 -> 42829 bytes .../04_validation_errors_rendered.png | Bin 0 -> 55481 bytes .../05_valid_upload_success.png | Bin 0 -> 54871 bytes .../06_idempotency_duplicate.png | Bin 0 -> 58928 bytes .../screenshots-phase4/error_screenshot.png | Bin 0 -> 2727 bytes prisma/test-auth-rls.js | 16 +- prisma/test-phase3-ui.js | 128 +- prisma/test-phase4-ui.js | 4 +- prisma/test-rls.js | 26 +- src/app/api/auth/login/route.ts | 16 +- src/app/api/goals/route.ts | 4 +- src/app/api/plans/[id]/route.ts | 18 +- src/app/api/plans/[id]/rules/route.ts | 74 +- src/app/api/plans/route.ts | 6 +- src/app/api/sales/batch-save/route.ts | 234 +- src/app/api/sales/import/route.ts | 280 +- .../api/sales/import/status/[key]/route.ts | 11 +- src/app/api/users/route.ts | 2 +- src/app/globals.css | 14 +- src/app/goals/page.module.css | 31 +- src/app/goals/page.tsx | 176 +- src/app/layout.tsx | 4 +- src/app/login/page.tsx | 8 +- src/app/plans/[id]/rules/page.module.css | 34 +- src/app/plans/[id]/rules/page.tsx | 84 +- src/app/plans/page.module.css | 62 +- src/app/plans/page.tsx | 69 +- src/app/sales/import/page.tsx | 6 + src/components/Header.module.css | 71 + src/lib/api-guards.ts | 6 +- src/lib/auth-edge.ts | 5 +- src/lib/auth.ts | 5 +- src/lib/db.ts | 24 + src/lib/roles.ts | 27 + src/middleware.ts | 2 +- 46 files changed, 6780 insertions(+), 8484 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 package-lock.json create mode 100644 pnpm-lock.yaml create mode 100644 prisma/migrations/20260612012032_add_sales_import_job/migration.sql create mode 100644 prisma/screenshots-phase4/01_collaborator_unauthorized.png create mode 100644 prisma/screenshots-phase4/02_admin_import_view.png create mode 100644 prisma/screenshots-phase4/03_invalid_file_selected.png create mode 100644 prisma/screenshots-phase4/04_validation_errors_rendered.png create mode 100644 prisma/screenshots-phase4/05_valid_upload_success.png create mode 100644 prisma/screenshots-phase4/06_idempotency_duplicate.png create mode 100644 prisma/screenshots-phase4/error_screenshot.png create mode 100644 src/components/Header.module.css create mode 100644 src/lib/roles.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c4ebfb7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +.next +.git +out +build +prisma/screenshots +*.log +.env*.local diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8ff9e7f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM node:20-alpine + +RUN apk add --no-cache libc6-compat openssl + +RUN npm install -g pnpm@9 + +WORKDIR /app + +COPY package.json pnpm-lock.yaml ./ + +# Skip Puppeteer Chrome download in Docker builds +ENV PUPPETEER_SKIP_DOWNLOAD=1 + +RUN pnpm install --frozen-lockfile + +COPY . . + +RUN pnpm prisma generate + +ENV NEXT_TELEMETRY_DISABLED=1 +RUN pnpm run build + +EXPOSE 3000 + +ENV PORT=3000 + +CMD ["pnpm", "start"] diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index e5e6bb8..8f5cf6d 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -82,7 +82,7 @@ erDiagram string username string email string password_hash - string role "ADMIN | DIRECTOR | GERENTE | LIDER | ANALISTA | CONSULTA | COLABORADOR" + string role "admin | director | hotel_manager | commercial_leader | analyst | auditor | collaborator" int hotel_id FK string area string status "ACTIVE | INACTIVE" diff --git a/docs/PHASE_3_IMPLEMENTATION.md b/docs/PHASE_3_IMPLEMENTATION.md index 3b524ce..b054172 100644 --- a/docs/PHASE_3_IMPLEMENTATION.md +++ b/docs/PHASE_3_IMPLEMENTATION.md @@ -47,7 +47,7 @@ Goals are assigned per period (`YYYY-MM`) at different scopes (`INDIVIDUAL` | `T ## 2. API Specifications ### 2.1. `POST /api/plans` (Create Plan) -- **Role Restriction**: `ADMIN` or `DIRECTOR` +- **Role Restriction**: `admin` or `director` - **Request Body**: ```json { @@ -60,15 +60,15 @@ Goals are assigned per period (`YYYY-MM`) at different scopes (`INDIVIDUAL` | `T ``` ### 2.2. `PUT /api/plans/[id]` (Update/Version Plan) -- **Role Restriction**: `ADMIN` or `DIRECTOR` +- **Role Restriction**: `admin` or `director` - **Logic**: Evaluates status to execute in-place updates or clone/version logic. ### 2.3. `POST /api/plans/[id]/rules` (Configure Rules) -- **Role Restriction**: `ADMIN` or `DIRECTOR` +- **Role Restriction**: `admin` or `director` - **Request Body**: Array of calculation rules to bulk upsert. ### 2.4. `POST /api/goals` (Assign Goals) -- **Role Restriction**: `ADMIN` or `DIRECTOR` +- **Role Restriction**: `admin` or `director` --- diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3f99a6b..0000000 --- a/package-lock.json +++ /dev/null @@ -1,7941 +0,0 @@ -{ - "name": "tmp_app", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "tmp_app", - "version": "0.1.0", - "dependencies": { - "@prisma/adapter-pg": "^7.8.0", - "@prisma/client": "^7.8.0", - "bcryptjs": "^3.0.3", - "forgejo-mcp": "^1.2.0", - "mcp-git": "^0.0.4", - "next": "16.2.9", - "pg": "^8.21.0", - "react": "19.2.4", - "react-dom": "19.2.4" - }, - "devDependencies": { - "@types/bcryptjs": "^3.0.0", - "@types/node": "^20", - "@types/pg": "^8.20.0", - "@types/react": "^19", - "@types/react-dom": "^19", - "eslint": "^9", - "eslint-config-next": "16.2.9", - "prisma": "^7.8.0", - "puppeteer": "^25.1.0", - "typescript": "^5" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.29.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@electric-sql/pglite": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz", - "integrity": "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==", - "devOptional": true - }, - "node_modules/@electric-sql/pglite-socket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.1.tgz", - "integrity": "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==", - "devOptional": true, - "bin": { - "pglite-server": "dist/scripts/server.js" - }, - "peerDependencies": { - "@electric-sql/pglite": "0.4.1" - } - }, - "node_modules/@electric-sql/pglite-tools": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.1.tgz", - "integrity": "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==", - "devOptional": true, - "peerDependencies": { - "@electric-sql/pglite": "0.4.1" - } - }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.0.tgz", - "integrity": "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", - "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", - "dev": true, - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.5" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", - "dev": true, - "dependencies": { - "ajv": "^6.14.0", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.5", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@hono/node-server": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", - "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "hono": "^4" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", - "dev": true, - "dependencies": { - "@humanfs/types": "^0.15.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", - "dev": true, - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "engines": { - "node": ">=18.18.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/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", - "optional": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@inversifyjs/common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@inversifyjs/common/-/common-1.5.2.tgz", - "integrity": "sha512-WlzR9xGadABS9gtgZQ+luoZ8V6qm4Ii6RQfcfC9Ho2SOlE6ZuemFo7PKJvKI0ikm8cmKbU8hw5UK6E4qovH21w==" - }, - "node_modules/@inversifyjs/container": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@inversifyjs/container/-/container-1.15.0.tgz", - "integrity": "sha512-U2xYsPrJTz5za2TExi5lg8qOWf8TEVBpN+pQM7B8BVA2rajtbRE9A66SLRHk8c1eGXmg+0K4Hdki6tWAsSQBUA==", - "dependencies": { - "@inversifyjs/common": "1.5.2", - "@inversifyjs/core": "9.2.0", - "@inversifyjs/plugin": "0.2.0", - "@inversifyjs/reflect-metadata-utils": "1.4.1" - }, - "peerDependencies": { - "reflect-metadata": "~0.2.2" - } - }, - "node_modules/@inversifyjs/core": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@inversifyjs/core/-/core-9.2.0.tgz", - "integrity": "sha512-Nm7BR6KmpgshIHpVQWuEDehqRVb6GBm8LFEuhc2s4kSZWrArZ15RmXQzROLk4m+hkj4kMXgvMm5Qbopot/D6Sg==", - "dependencies": { - "@inversifyjs/common": "1.5.2", - "@inversifyjs/prototype-utils": "0.1.3", - "@inversifyjs/reflect-metadata-utils": "1.4.1" - } - }, - "node_modules/@inversifyjs/plugin": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@inversifyjs/plugin/-/plugin-0.2.0.tgz", - "integrity": "sha512-R/JAdkTSD819pV1zi0HP54mWHyX+H2m8SxldXRgPQarS3ySV4KPyRdosWcfB8Se0JJZWZLHYiUNiS6JvMWSPjw==" - }, - "node_modules/@inversifyjs/prototype-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@inversifyjs/prototype-utils/-/prototype-utils-0.1.3.tgz", - "integrity": "sha512-EzRamZzNgE9Sn3QtZ8NncNa2lpPMZfspqbK6BWFguWnOpK8ymp2TUuH46ruFHZhrHKnknPd7fG22ZV7iF517TQ==", - "dependencies": { - "@inversifyjs/common": "1.5.2" - } - }, - "node_modules/@inversifyjs/reflect-metadata-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@inversifyjs/reflect-metadata-utils/-/reflect-metadata-utils-1.4.1.tgz", - "integrity": "sha512-Cp77C4d2wLaHXiUB7iH6Cxb7i1lD/YDuTIHLTDzKINqGSz0DCSoL/Dg2wVkW/6Qx03r/yQMLJ+32Agl32N2X8g==", - "peerDependencies": { - "reflect-metadata": "~0.2.2" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", - "devOptional": true - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", - "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", - "dependencies": { - "@hono/node-server": "^1.19.9", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.2.1", - "express-rate-limit": "^8.2.1", - "hono": "^4.11.4", - "jose": "^6.1.3", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", - "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", - "dev": true, - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1" - } - }, - "node_modules/@next/env": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.9.tgz", - "integrity": "sha512-ki5VxxXfzD/9TDe13wyeTKIjQTAwBVpnr8KhRDUr8ltMUq1/NBpWNT5tiPoxiGl+PHM4X2ahSOiPk6iAimIzPg==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.9.tgz", - "integrity": "sha512-UZi8+YT/MLgTC9nrrn2Xd4lBYv1B7lVmtWHfPcthAI5Tt/C1LuDe6DfmtCtJ+WQod3ksY4VrKSvk3oMVAnL7qw==", - "dev": true, - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.9.tgz", - "integrity": "sha512-HkfxNYUCmcct0Xsqib5KxqMSHV4AHJq857BNRchyBDs4YS19aHzVfn1kDuBYKqLLQBjXgnkIsjV2Kd4d2wzYhw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.9.tgz", - "integrity": "sha512-7IAtK4MeybpqRV9GRABWEhJ62mOS+rzWOzOTFie4cSEtm12xsoOMJRcECoZx3FHPzFAqN/IJtHqWAFOLfl152w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.9.tgz", - "integrity": "sha512-hBD75iWpUtkL9SmQmcRhmLomn9jgkPzCEkbOcLgHymPEKzv+6ONy13RRiIEz/iEObjkS2Jlb5gYS2XGoS3X4rw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.9.tgz", - "integrity": "sha512-qZTI3pf9SGc/obr8NkQAekBxmp1QK+kVm+VAf3BALLfFAj+1kUhkTxmrWpVos9R/UYIA8AWX2p6cGI5WdwzVUA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.9.tgz", - "integrity": "sha512-xm0HfRNX+UkH4R3c18ynswjj5o5uEj/7iI9p9omdtTSIsRCzQqkGMA+10nzJ4EHnYC3as65IMhbbl5fWRUWHYg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.9.tgz", - "integrity": "sha512-QumimHkGEG6vM3PfEDWKyKen03NcqLOkeKB1EfcPe7VxzmEiCa4jNnMyBn/US5zcd/VE1CI+O8Ovb3lfjVHfGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.9.tgz", - "integrity": "sha512-hzQpKZvw8rAwI6A2uQh6SacCSvNAXaIkPNsWwzqqfRiIMiXMfH936skDhz1OO6KpvdKkJrgHHtqQOq5PIXOvdQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.9.tgz", - "integrity": "sha512-qr2VL3Ce5QrwgO2yh1ujSBawrimjVKX8FGF/cOynmdYKJY0BdHpGVNIRK1tqONB10Vkm25Ub1BD2bkjWs4+96w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@prisma/adapter-pg": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz", - "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==", - "dependencies": { - "@prisma/driver-adapter-utils": "7.8.0", - "@types/pg": "^8.16.0", - "pg": "^8.16.3", - "postgres-array": "3.0.4" - } - }, - "node_modules/@prisma/client": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", - "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==", - "dependencies": { - "@prisma/client-runtime-utils": "7.8.0" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0" - }, - "peerDependencies": { - "prisma": "*", - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@prisma/client-runtime-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz", - "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==" - }, - "node_modules/@prisma/config": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz", - "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==", - "devOptional": true, - "dependencies": { - "c12": "3.3.4", - "deepmerge-ts": "7.1.5", - "effect": "3.20.0", - "empathic": "2.0.0" - } - }, - "node_modules/@prisma/debug": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz", - "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==" - }, - "node_modules/@prisma/dev": { - "version": "0.24.3", - "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.3.tgz", - "integrity": "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==", - "devOptional": true, - "dependencies": { - "@electric-sql/pglite": "0.4.1", - "@electric-sql/pglite-socket": "0.1.1", - "@electric-sql/pglite-tools": "0.3.1", - "@hono/node-server": "1.19.11", - "@prisma/get-platform": "7.2.0", - "@prisma/query-plan-executor": "7.2.0", - "@prisma/streams-local": "0.1.2", - "foreground-child": "3.3.1", - "get-port-please": "3.2.0", - "hono": "^4.12.8", - "http-status-codes": "2.3.0", - "pathe": "2.0.3", - "proper-lockfile": "4.1.2", - "remeda": "2.33.4", - "std-env": "3.10.0", - "valibot": "1.2.0", - "zeptomatch": "2.1.0" - } - }, - "node_modules/@prisma/driver-adapter-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz", - "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==", - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/engines": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz", - "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@prisma/debug": "7.8.0", - "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "@prisma/fetch-engine": "7.8.0", - "@prisma/get-platform": "7.8.0" - } - }, - "node_modules/@prisma/engines-version": { - "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz", - "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==", - "devOptional": true - }, - "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", - "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/fetch-engine": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz", - "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "7.8.0", - "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", - "@prisma/get-platform": "7.8.0" - } - }, - "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", - "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "7.8.0" - } - }, - "node_modules/@prisma/get-platform": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", - "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "7.2.0" - } - }, - "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz", - "integrity": "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==", - "devOptional": true - }, - "node_modules/@prisma/query-plan-executor": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-7.2.0.tgz", - "integrity": "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==", - "devOptional": true - }, - "node_modules/@prisma/streams-local": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.2.tgz", - "integrity": "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==", - "devOptional": true, - "dependencies": { - "ajv": "^8.12.0", - "better-result": "^2.7.0", - "env-paths": "^3.0.0", - "proper-lockfile": "^4.1.2" - }, - "engines": { - "bun": ">=1.3.6", - "node": ">=22.0.0" - } - }, - "node_modules/@prisma/streams-local/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "devOptional": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@prisma/streams-local/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "devOptional": true - }, - "node_modules/@prisma/studio-core": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.27.3.tgz", - "integrity": "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==", - "devOptional": true, - "dependencies": { - "@radix-ui/react-toggle": "1.1.10", - "chart.js": "4.5.1" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0", - "pnpm": "8" - }, - "peerDependencies": { - "@types/react": "^18.0.0 || ^19.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.4.tgz", - "integrity": "sha512-HGM8iAmGTf+Y7t0373szVbTmt3d7vPkYL/1bpOkOFO0YUYLgSeuYBCzESklogNPvOBnZ/MRD5f07OkpqH1trtA==", - "dev": true, - "dependencies": { - "modern-tar": "^0.7.6", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/main-cli.js" - }, - "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "proxy-agent": ">=8.0.1" - }, - "peerDependenciesMeta": { - "proxy-agent": { - "optional": true - } - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "devOptional": true - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "devOptional": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "devOptional": true, - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "devOptional": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "devOptional": true, - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "devOptional": true, - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "devOptional": true, - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "devOptional": true, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "devOptional": true - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", - "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/bcryptjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-3.0.0.tgz", - "integrity": "sha512-WRZOuCuaz8UcZZE4R5HXTco2goQSI2XxjGY3hbM/xDvwmqFWd4ivooImsMx65OKM6CtNKbnZ5YL+YwAwK7c1dg==", - "deprecated": "This is a stub types definition. bcryptjs provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "bcryptjs": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "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/node": { - "version": "20.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", - "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/pg": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", - "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/@types/react": { - "version": "19.2.17", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", - "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", - "devOptional": true, - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.0.tgz", - "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/type-utils": "8.61.0", - "@typescript-eslint/utils": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.61.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.0.tgz", - "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.0.tgz", - "integrity": "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==", - "dev": true, - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.61.0", - "@typescript-eslint/types": "^8.61.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.0.tgz", - "integrity": "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz", - "integrity": "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.0.tgz", - "integrity": "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/utils": "8.61.0", - "debug": "^4.4.3", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", - "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.0.tgz", - "integrity": "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==", - "dev": true, - "dependencies": { - "@typescript-eslint/project-service": "8.61.0", - "@typescript-eslint/tsconfig-utils": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", - "dev": true, - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.0.tgz", - "integrity": "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.0.tgz", - "integrity": "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.61.0", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", - "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", - "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", - "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", - "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", - "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", - "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", - "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", - "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", - "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", - "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-loong64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", - "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", - "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", - "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", - "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", - "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", - "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", - "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-openharmony-arm64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", - "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", - "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "^1.1.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", - "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", - "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", - "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "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/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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "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/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "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==", - "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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "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/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-ssl-profiles": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", - "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", - "devOptional": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/axe-core": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", - "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", - "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.35", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.35.tgz", - "integrity": "sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bcryptjs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.3.tgz", - "integrity": "sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==", - "bin": { - "bcrypt": "bin/bcrypt" - } - }, - "node_modules/better-result": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.9.2.tgz", - "integrity": "sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==", - "devOptional": true - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "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": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c12": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", - "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", - "devOptional": true, - "dependencies": { - "chokidar": "^5.0.0", - "confbox": "^0.2.4", - "defu": "^6.1.6", - "dotenv": "^17.3.1", - "exsolve": "^1.0.8", - "giget": "^3.2.0", - "jiti": "^2.6.1", - "ohash": "^2.0.11", - "pathe": "^2.0.3", - "perfect-debounce": "^2.1.0", - "pkg-types": "^2.3.0", - "rc9": "^3.0.1" - }, - "peerDependencies": { - "magicast": "*" - }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } - } - }, - "node_modules/call-bind": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", - "dev": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "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/caniuse-lite": { - "version": "1.0.30001799", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", - "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", - "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/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/chart.js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", - "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", - "devOptional": true, - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, - "node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "devOptional": true, - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chromium-bidi": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-16.0.1.tgz", - "integrity": "sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==", - "dev": true, - "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" - }, - "engines": { - "node": ">=20.19.0 <22.0.0 || >=22.12.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/chromium-bidi/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "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==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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==", - "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/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/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/confbox": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", - "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", - "devOptional": true - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "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.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "devOptional": true - }, - "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-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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-ts": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", - "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", - "devOptional": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", - "devOptional": true - }, - "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/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "devOptional": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "devOptional": true - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1624250", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1624250.tgz", - "integrity": "sha512-YFAat/lOiIk0ARmBweG+ygrEcbZrq5B9urRyUoeQKp53MlidHXE2TmTbxKcaXoQj7u/aX+jebDO4BW55rs0WwA==", - "dev": true - }, - "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/dotenv": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", - "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", - "devOptional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/effect": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.20.0.tgz", - "integrity": "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==", - "devOptional": true, - "dependencies": { - "@standard-schema/spec": "^1.0.0", - "fast-check": "^3.23.1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.371", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.371.tgz", - "integrity": "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==", - "dev": true - }, - "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/empathic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", - "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", - "devOptional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "devOptional": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/es-abstract": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", - "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz", - "integrity": "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.1.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.3.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.5", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.2", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.5", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-next": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.9.tgz", - "integrity": "sha512-olGtBrs07bQchpaJWeqbk9GaMoU0oGmN/pYNEBXSbfgKngb5uHnPe37X6tVeh6DJfaWFQildvinGEOrolo5fmw==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "16.2.9", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^7.0.0", - "globals": "16.4.0", - "typescript-eslint": "^8.46.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-next/node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", - "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.16.1", - "resolve": "^2.0.0-next.6" - } - }, - "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.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", - "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", - "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.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "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-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", - "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "hermes-parser": "^0.25.1", - "zod": "^3.25.0 || ^4.0.0", - "zod-validation-error": "^3.5.0 || ^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "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/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", - "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", - "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", - "dependencies": { - "ip-address": "^10.2.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, - "node_modules/exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", - "devOptional": true - }, - "node_modules/fast-check": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", - "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "dependencies": { - "pure-rand": "^6.1.0" - }, - "engines": { - "node": ">=8.0.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.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "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==", - "dev": true, - "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/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "devOptional": true, - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forgejo-mcp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/forgejo-mcp/-/forgejo-mcp-1.2.0.tgz", - "integrity": "sha512-N9L4PbBTYApOQu2WvynSTnuO3w4CdxqBQd7d22l8QEtJFe3sAZ0UCQfbTP6B8YzOXkvx6qNR3TN+vv+YYEiXvA==", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "@types/node": "^22.13.14", - "@types/yargs": "^17.0.33", - "axios": "^1.8.4", - "dotenv": "^16.4.7", - "inversify": "^7.5.0", - "reflect-metadata": "^0.2.2", - "typescript": "^5.8.2", - "yargs": "^17.7.2" - } - }, - "node_modules/forgejo-mcp/node_modules/@types/node": { - "version": "22.19.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.21.tgz", - "integrity": "sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/forgejo-mcp/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data/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/form-data/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/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "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/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "devOptional": true, - "dependencies": { - "is-property": "^1.0.2" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port-please": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", - "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", - "devOptional": true - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/giget": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-3.3.0.tgz", - "integrity": "sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==", - "devOptional": true, - "bin": { - "giget": "dist/cli.mjs" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "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==", - "devOptional": true - }, - "node_modules/grammex": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz", - "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==", - "devOptional": true - }, - "node_modules/graphmatch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz", - "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==", - "devOptional": true - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "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.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", - "dev": true - }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dev": true, - "dependencies": { - "hermes-estree": "0.25.1" - } - }, - "node_modules/hono": { - "version": "4.12.25", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.25.tgz", - "integrity": "sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==", - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-status-codes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", - "devOptional": true - }, - "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==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "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/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/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/inversify": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-7.11.0.tgz", - "integrity": "sha512-yZDprSSr8TyVeMGI/AOV4ws6gwjX22hj9Z8/oHAVpJORY6WRFTcUzhnZtibBUHEw2U8ArvHcR+i863DplQ3Cwg==", - "dependencies": { - "@inversifyjs/common": "1.5.2", - "@inversifyjs/container": "1.15.0", - "@inversifyjs/core": "9.2.0" - } - }, - "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "dependencies": { - "semver": "^7.7.1" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "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==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "devOptional": true - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "devOptional": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jose": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", - "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", - "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==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "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-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==" - }, - "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.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "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": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "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.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/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "devOptional": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "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/lru.min": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", - "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", - "devOptional": true, - "engines": { - "bun": ">=1.0.0", - "deno": ">=1.30.0", - "node": ">=8.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wellwelwel" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mcp-git": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/mcp-git/-/mcp-git-0.0.4.tgz", - "integrity": "sha512-Zo3XmYWnwzDzQyGn99SUO4K6QUDt8l0Qp0m+mZy8GgzhjugpXtbg4mHQfcvzyHWslZPypH16BWneVFwRccymuA==", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "commander": "^12.0.0" - }, - "bin": { - "mcp-git": "dist/cli.js" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "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/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true - }, - "node_modules/modern-tar": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.6.tgz", - "integrity": "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==", - "dev": true, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mysql2": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", - "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", - "devOptional": true, - "dependencies": { - "aws-ssl-profiles": "^1.1.1", - "denque": "^2.1.0", - "generate-function": "^2.3.1", - "iconv-lite": "^0.7.0", - "long": "^5.2.1", - "lru.min": "^1.0.0", - "named-placeholders": "^1.1.3", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/named-placeholders": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", - "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", - "devOptional": true, - "dependencies": { - "lru.min": "^1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", - "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/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "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/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next": { - "version": "16.2.9", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.9.tgz", - "integrity": "sha512-MEOJiq/UvuezAdqVSceHbqDgZt1kDw2tpGVOlsdIoJsQdbN2JY2hpVG4xnXGkbdJUOEWhnRfiu/O4Hpc9Juwww==", - "dependencies": { - "@next/env": "16.2.9", - "@swc/helpers": "0.5.15", - "baseline-browser-mapping": "^2.9.19", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=20.9.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "16.2.9", - "@next/swc-darwin-x64": "16.2.9", - "@next/swc-linux-arm64-gnu": "16.2.9", - "@next/swc-linux-arm64-musl": "16.2.9", - "@next/swc-linux-x64-gnu": "16.2.9", - "@next/swc-linux-x64-musl": "16.2.9", - "@next/swc-win32-arm64-msvc": "16.2.9", - "@next/swc-win32-x64-msvc": "16.2.9", - "sharp": "^0.34.5" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/node-exports-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", - "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", - "dev": true, - "dependencies": { - "array.prototype.flatmap": "^1.3.3", - "es-errors": "^1.3.0", - "object.entries": "^1.1.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/node-releases": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", - "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "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-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "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.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "devOptional": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "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.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "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-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "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==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "devOptional": true - }, - "node_modules/perfect-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", - "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", - "devOptional": true - }, - "node_modules/pg": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz", - "integrity": "sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==", - "dependencies": { - "pg-connection-string": "^2.13.0", - "pg-pool": "^3.14.0", - "pg-protocol": "^1.14.0", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, - "engines": { - "node": ">= 16.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.4.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", - "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.13.0.tgz", - "integrity": "sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", - "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.14.0.tgz", - "integrity": "sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pg-types/node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/pkg-types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", - "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", - "devOptional": true, - "dependencies": { - "confbox": "^0.2.4", - "exsolve": "^1.0.8", - "pathe": "^2.0.3" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "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/postgres": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", - "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", - "devOptional": true, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/porsager" - } - }, - "node_modules/postgres-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", - "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", - "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/prisma": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz", - "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@prisma/config": "7.8.0", - "@prisma/dev": "0.24.3", - "@prisma/engines": "7.8.0", - "@prisma/studio-core": "0.27.3", - "mysql2": "3.15.3", - "postgres": "3.4.7" - }, - "bin": { - "prisma": "build/index.js" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24.0" - }, - "peerDependencies": { - "better-sqlite3": ">=9.0.0", - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "better-sqlite3": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "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==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "devOptional": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proper-lockfile/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==", - "devOptional": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.1.0.tgz", - "integrity": "sha512-7L6/0JM7XStK99lIL4xQySyNEXNfII6pk0BxkI5kKBTOhR7AsoQiv067YTsE/rIXxQiq9ajlO4WcqBjS/FWK1A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@puppeteer/browsers": "3.0.4", - "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1624250", - "lilconfig": "^3.1.3", - "puppeteer-core": "25.1.0", - "typed-query-selector": "^2.12.2" - }, - "bin": { - "puppeteer": "lib/puppeteer/node/cli.js" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/puppeteer-core": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.1.0.tgz", - "integrity": "sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ==", - "dev": true, - "dependencies": { - "@puppeteer/browsers": "3.0.4", - "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1624250", - "typed-query-selector": "^2.12.2", - "webdriver-bidi-protocol": "0.4.2", - "ws": "^8.21.0" - }, - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/rc9": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", - "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", - "devOptional": true, - "dependencies": { - "defu": "^6.1.6", - "destr": "^2.0.5" - } - }, - "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.4" - } - }, - "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==", - "dev": true - }, - "node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", - "devOptional": true, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/remeda": { - "version": "2.33.4", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz", - "integrity": "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==", - "devOptional": true, - "funding": { - "url": "https://github.com/sponsors/remeda" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", - "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.2", - "node-exports-info": "^1.6.0", - "object-keys": "^1.1.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "devOptional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "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==", - "dev": true, - "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/safe-array-concat": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", - "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.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==" - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" - }, - "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/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", - "devOptional": true - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "devOptional": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sqlstring": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", - "devOptional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "devOptional": true - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/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==" - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", - "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-object-atoms": "^1.1.2", - "has-property-descriptors": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", - "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.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==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/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/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "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/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - }, - "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-is": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", - "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.9", - "for-each": "^0.3.5", - "gopd": "^1.2.0", - "is-typed-array": "^1.1.15", - "possible-typed-array-names": "^1.1.0", - "reflect.getprototypeof": "^1.0.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-query-selector": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", - "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.0.tgz", - "integrity": "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.61.0", - "@typescript-eslint/parser": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/utils": "8.61.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unrs-resolver": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", - "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "napi-postinstall": "^0.3.4" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.12.2", - "@unrs/resolver-binding-android-arm64": "1.12.2", - "@unrs/resolver-binding-darwin-arm64": "1.12.2", - "@unrs/resolver-binding-darwin-x64": "1.12.2", - "@unrs/resolver-binding-freebsd-x64": "1.12.2", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", - "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", - "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", - "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", - "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-x64-musl": "1.12.2", - "@unrs/resolver-binding-openharmony-arm64": "1.12.2", - "@unrs/resolver-binding-wasm32-wasi": "1.12.2", - "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", - "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", - "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "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.2.0", - "picocolors": "^1.1.1" - }, - "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/valibot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", - "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", - "devOptional": true, - "peerDependencies": { - "typescript": ">=5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webdriver-bidi-protocol": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.2.tgz", - "integrity": "sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", - "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "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==", - "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/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/ws": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", - "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/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "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==", - "engines": { - "node": ">=12" - } - }, - "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/zeptomatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz", - "integrity": "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==", - "devOptional": true, - "dependencies": { - "grammex": "^3.1.11", - "graphmatch": "^1.1.0" - } - }, - "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", - "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", - "peerDependencies": { - "zod": "^3.25.28 || ^4" - } - }, - "node_modules/zod-validation-error": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", - "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", - "dev": true, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "zod": "^3.25.0 || ^4.0.0" - } - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..852b2d7 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5633 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@prisma/adapter-pg': + specifier: ^7.8.0 + version: 7.8.0 + '@prisma/client': + specifier: ^7.8.0 + version: 7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) + bcryptjs: + specifier: ^3.0.3 + version: 3.0.3 + forgejo-mcp: + specifier: ^1.2.0 + version: 1.2.0(zod@4.4.3) + mcp-git: + specifier: ^0.0.4 + version: 0.0.4(zod@4.4.3) + next: + specifier: 16.2.9 + version: 16.2.9(@babel/core@7.29.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + pg: + specifier: ^8.21.0 + version: 8.21.0 + react: + specifier: 19.2.4 + version: 19.2.4 + react-dom: + specifier: 19.2.4 + version: 19.2.4(react@19.2.4) + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + devDependencies: + '@types/bcryptjs': + specifier: ^3.0.0 + version: 3.0.0 + '@types/node': + specifier: ^20 + version: 20.19.43 + '@types/pg': + specifier: ^8.20.0 + version: 8.20.0 + '@types/react': + specifier: ^19 + version: 19.2.17 + '@types/react-dom': + specifier: ^19 + version: 19.2.3(@types/react@19.2.17) + eslint: + specifier: ^9 + version: 9.39.4(jiti@2.7.0) + eslint-config-next: + specifier: 16.2.9 + version: 16.2.9(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + prisma: + specifier: ^7.8.0 + version: 7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + puppeteer: + specifier: ^25.1.0 + version: 25.1.0 + typescript: + specifier: ^5 + version: 5.9.3 + +packages: + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@electric-sql/pglite-socket@0.1.1': + resolution: {integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==} + hasBin: true + peerDependencies: + '@electric-sql/pglite': 0.4.1 + + '@electric-sql/pglite-tools@0.3.1': + resolution: {integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==} + peerDependencies: + '@electric-sql/pglite': 0.4.1 + + '@electric-sql/pglite@0.4.1': + resolution: {integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.0': + resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inversifyjs/common@1.5.2': + resolution: {integrity: sha512-WlzR9xGadABS9gtgZQ+luoZ8V6qm4Ii6RQfcfC9Ho2SOlE6ZuemFo7PKJvKI0ikm8cmKbU8hw5UK6E4qovH21w==} + + '@inversifyjs/container@1.15.0': + resolution: {integrity: sha512-U2xYsPrJTz5za2TExi5lg8qOWf8TEVBpN+pQM7B8BVA2rajtbRE9A66SLRHk8c1eGXmg+0K4Hdki6tWAsSQBUA==} + peerDependencies: + reflect-metadata: ~0.2.2 + + '@inversifyjs/core@9.2.0': + resolution: {integrity: sha512-Nm7BR6KmpgshIHpVQWuEDehqRVb6GBm8LFEuhc2s4kSZWrArZ15RmXQzROLk4m+hkj4kMXgvMm5Qbopot/D6Sg==} + + '@inversifyjs/plugin@0.2.0': + resolution: {integrity: sha512-R/JAdkTSD819pV1zi0HP54mWHyX+H2m8SxldXRgPQarS3ySV4KPyRdosWcfB8Se0JJZWZLHYiUNiS6JvMWSPjw==} + + '@inversifyjs/prototype-utils@0.1.3': + resolution: {integrity: sha512-EzRamZzNgE9Sn3QtZ8NncNa2lpPMZfspqbK6BWFguWnOpK8ymp2TUuH46ruFHZhrHKnknPd7fG22ZV7iF517TQ==} + + '@inversifyjs/reflect-metadata-utils@1.4.1': + resolution: {integrity: sha512-Cp77C4d2wLaHXiUB7iH6Cxb7i1lD/YDuTIHLTDzKINqGSz0DCSoL/Dg2wVkW/6Qx03r/yQMLJ+32Agl32N2X8g==} + peerDependencies: + reflect-metadata: ~0.2.2 + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} + + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@next/env@16.2.9': + resolution: {integrity: sha512-ki5VxxXfzD/9TDe13wyeTKIjQTAwBVpnr8KhRDUr8ltMUq1/NBpWNT5tiPoxiGl+PHM4X2ahSOiPk6iAimIzPg==} + + '@next/eslint-plugin-next@16.2.9': + resolution: {integrity: sha512-UZi8+YT/MLgTC9nrrn2Xd4lBYv1B7lVmtWHfPcthAI5Tt/C1LuDe6DfmtCtJ+WQod3ksY4VrKSvk3oMVAnL7qw==} + + '@next/swc-darwin-arm64@16.2.9': + resolution: {integrity: sha512-HkfxNYUCmcct0Xsqib5KxqMSHV4AHJq857BNRchyBDs4YS19aHzVfn1kDuBYKqLLQBjXgnkIsjV2Kd4d2wzYhw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.2.9': + resolution: {integrity: sha512-7IAtK4MeybpqRV9GRABWEhJ62mOS+rzWOzOTFie4cSEtm12xsoOMJRcECoZx3FHPzFAqN/IJtHqWAFOLfl152w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.2.9': + resolution: {integrity: sha512-hBD75iWpUtkL9SmQmcRhmLomn9jgkPzCEkbOcLgHymPEKzv+6ONy13RRiIEz/iEObjkS2Jlb5gYS2XGoS3X4rw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@16.2.9': + resolution: {integrity: sha512-qZTI3pf9SGc/obr8NkQAekBxmp1QK+kVm+VAf3BALLfFAj+1kUhkTxmrWpVos9R/UYIA8AWX2p6cGI5WdwzVUA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@16.2.9': + resolution: {integrity: sha512-xm0HfRNX+UkH4R3c18ynswjj5o5uEj/7iI9p9omdtTSIsRCzQqkGMA+10nzJ4EHnYC3as65IMhbbl5fWRUWHYg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@16.2.9': + resolution: {integrity: sha512-QumimHkGEG6vM3PfEDWKyKen03NcqLOkeKB1EfcPe7VxzmEiCa4jNnMyBn/US5zcd/VE1CI+O8Ovb3lfjVHfGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@16.2.9': + resolution: {integrity: sha512-hzQpKZvw8rAwI6A2uQh6SacCSvNAXaIkPNsWwzqqfRiIMiXMfH936skDhz1OO6KpvdKkJrgHHtqQOq5PIXOvdQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.2.9': + resolution: {integrity: sha512-qr2VL3Ce5QrwgO2yh1ujSBawrimjVKX8FGF/cOynmdYKJY0BdHpGVNIRK1tqONB10Vkm25Ub1BD2bkjWs4+96w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@prisma/adapter-pg@7.8.0': + resolution: {integrity: sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==} + + '@prisma/client-runtime-utils@7.8.0': + resolution: {integrity: sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==} + + '@prisma/client@7.8.0': + resolution: {integrity: sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==} + engines: {node: ^20.19 || ^22.12 || >=24.0} + peerDependencies: + prisma: '*' + typescript: '>=5.4.0' + peerDependenciesMeta: + prisma: + optional: true + typescript: + optional: true + + '@prisma/config@7.8.0': + resolution: {integrity: sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==} + + '@prisma/debug@7.2.0': + resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} + + '@prisma/debug@7.8.0': + resolution: {integrity: sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==} + + '@prisma/dev@0.24.3': + resolution: {integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==} + + '@prisma/driver-adapter-utils@7.8.0': + resolution: {integrity: sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==} + + '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': + resolution: {integrity: sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==} + + '@prisma/engines@7.8.0': + resolution: {integrity: sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==} + + '@prisma/fetch-engine@7.8.0': + resolution: {integrity: sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==} + + '@prisma/get-platform@7.2.0': + resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} + + '@prisma/get-platform@7.8.0': + resolution: {integrity: sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==} + + '@prisma/query-plan-executor@7.2.0': + resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} + + '@prisma/streams-local@0.1.2': + resolution: {integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==} + engines: {bun: '>=1.3.6', node: '>=22.0.0'} + + '@prisma/studio-core@0.27.3': + resolution: {integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==} + engines: {node: ^20.19 || ^22.12 || >=24.0, pnpm: '8'} + peerDependencies: + '@types/react': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + '@puppeteer/browsers@3.0.4': + resolution: {integrity: sha512-HGM8iAmGTf+Y7t0373szVbTmt3d7vPkYL/1bpOkOFO0YUYLgSeuYBCzESklogNPvOBnZ/MRD5f07OkpqH1trtA==} + engines: {node: '>=22.12.0'} + hasBin: true + peerDependencies: + proxy-agent: '>=8.0.1' + peerDependenciesMeta: + proxy-agent: + optional: true + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/bcryptjs@3.0.0': + resolution: {integrity: sha512-WRZOuCuaz8UcZZE4R5HXTco2goQSI2XxjGY3hbM/xDvwmqFWd4ivooImsMx65OKM6CtNKbnZ5YL+YwAwK7c1dg==} + deprecated: This is a stub types definition. bcryptjs provides its own type definitions, so you do not need this installed. + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + + '@types/node@22.19.21': + resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} + + '@types/pg@8.20.0': + resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.17': + resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + + '@typescript-eslint/eslint-plugin@8.61.0': + resolution: {integrity: sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.61.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.61.0': + resolution: {integrity: sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.61.0': + resolution: {integrity: sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.61.0': + resolution: {integrity: sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.61.0': + resolution: {integrity: sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.61.0': + resolution: {integrity: sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.61.0': + resolution: {integrity: sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.61.0': + resolution: {integrity: sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.61.0': + resolution: {integrity: sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.61.0': + resolution: {integrity: sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.12.2': + resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.12.2': + resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} + cpu: [loong64] + os: [linux] + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} + cpu: [loong64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} + cpu: [arm64] + os: [openharmony] + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==} + cpu: [x64] + os: [win32] + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adler-32@1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + + axe-core@4.12.1: + resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==} + engines: {node: '>=4'} + + axios@1.17.0: + resolution: {integrity: sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.10.36: + resolution: {integrity: sha512-lVq/Df7LXlO79MVaaUHztSwWiG9oXoWHlgvNS51v8Dpd4+G4/VIy6qYePTw31nAVls33nUtnfezYeLkYAak9dg==} + engines: {node: '>=6.0.0'} + hasBin: true + + bcryptjs@3.0.3: + resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} + hasBin: true + + better-result@2.9.2: + resolution: {integrity: sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==} + + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + c12@3.3.4: + resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + + cfb@1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chart.js@4.5.1: + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} + engines: {pnpm: '>=8'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + chromium-bidi@16.0.1: + resolution: {integrity: sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==} + engines: {node: '>=20.19.0 <22.0.0 || >=22.12.0'} + peerDependencies: + devtools-protocol: '*' + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + codepage@1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devtools-protocol@0.0.1624250: + resolution: {integrity: sha512-YFAat/lOiIk0ARmBweG+ygrEcbZrq5B9urRyUoeQKp53MlidHXE2TmTbxKcaXoQj7u/aX+jebDO4BW55rs0WwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + effect@3.20.0: + resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} + + electron-to-chromium@1.5.371: + resolution: {integrity: sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.3.3: + resolution: {integrity: sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@16.2.9: + resolution: {integrity: sha512-olGtBrs07bQchpaJWeqbk9GaMoU0oGmN/pYNEBXSbfgKngb5uHnPe37X6tVeh6DJfaWFQildvinGEOrolo5fmw==} + peerDependencies: + eslint: '>=9.0.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.13.0: + resolution: {integrity: sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventsource-parser@3.1.0: + resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + + express-rate-limit@8.5.2: + resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + forgejo-mcp@1.2.0: + resolution: {integrity: sha512-N9L4PbBTYApOQu2WvynSTnuO3w4CdxqBQd7d22l8QEtJFe3sAZ0UCQfbTP6B8YzOXkvx6qNR3TN+vv+YYEiXvA==} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + frac@1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-port-please@3.2.0: + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + + giget@3.3.0: + resolution: {integrity: sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + grammex@3.1.12: + resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} + + graphmatch@1.1.1: + resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hono@4.12.25: + resolution: {integrity: sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==} + engines: {node: '>=16.9.0'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + inversify@7.11.0: + resolution: {integrity: sha512-yZDprSSr8TyVeMGI/AOV4ws6gwjX22hj9Z8/oHAVpJORY6WRFTcUzhnZtibBUHEw2U8ArvHcR+i863DplQ3Cwg==} + + ip-address@10.2.0: + resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mcp-git@0.0.4: + resolution: {integrity: sha512-Zo3XmYWnwzDzQyGn99SUO4K6QUDt8l0Qp0m+mZy8GgzhjugpXtbg4mHQfcvzyHWslZPypH16BWneVFwRccymuA==} + hasBin: true + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + modern-tar@0.7.6: + resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} + engines: {node: '>=18.0.0'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mysql2@3.15.3: + resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + next@16.2.9: + resolution: {integrity: sha512-MEOJiq/UvuezAdqVSceHbqDgZt1kDw2tpGVOlsdIoJsQdbN2JY2hpVG4xnXGkbdJUOEWhnRfiu/O4Hpc9Juwww==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + + node-releases@2.0.47: + resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} + engines: {node: '>=18'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + + pg-cloudflare@1.4.0: + resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} + + pg-connection-string@2.13.0: + resolution: {integrity: sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.14.0: + resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.14.0: + resolution: {integrity: sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.21.0: + resolution: {integrity: sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prisma@7.8.0: + resolution: {integrity: sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==} + engines: {node: ^20.19 || ^22.12 || >=24.0} + hasBin: true + peerDependencies: + better-sqlite3: '>=9.0.0' + typescript: '>=5.4.0' + peerDependenciesMeta: + better-sqlite3: + optional: true + typescript: + optional: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + puppeteer-core@25.1.0: + resolution: {integrity: sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ==} + engines: {node: '>=22.12.0'} + + puppeteer@25.1.0: + resolution: {integrity: sha512-7L6/0JM7XStK99lIL4xQySyNEXNfII6pk0BxkI5kKBTOhR7AsoQiv067YTsE/rIXxQiq9ajlO4WcqBjS/FWK1A==} + engines: {node: '>=22.12.0'} + hasBin: true + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + + rc9@3.0.1: + resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==} + + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + peerDependencies: + react: ^19.2.4 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + remeda@2.33.4: + resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} + hasBin: true + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + ssf@0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} + + typed-query-selector@2.12.2: + resolution: {integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==} + + typescript-eslint@8.61.0: + resolution: {integrity: sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unrs-resolver@1.12.2: + resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + valibot@1.2.0: + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + webdriver-bidi-protocol@0.4.2: + resolution: {integrity: sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wmf@1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + word@0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + 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 + + xlsx@0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zeptomatch@2.1.0: + resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} + + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)': + dependencies: + '@electric-sql/pglite': 0.4.1 + + '@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)': + dependencies: + '@electric-sql/pglite': 0.4.1 + + '@electric-sql/pglite@0.4.1': {} + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': + dependencies: + eslint: 9.39.4(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.2.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.4': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@hono/node-server@1.19.11(hono@4.12.25)': + dependencies: + hono: 4.12.25 + + '@hono/node-server@1.19.14(hono@4.12.25)': + dependencies: + hono: 4.12.25 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.0 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@inversifyjs/common@1.5.2': {} + + '@inversifyjs/container@1.15.0(reflect-metadata@0.2.2)': + dependencies: + '@inversifyjs/common': 1.5.2 + '@inversifyjs/core': 9.2.0(reflect-metadata@0.2.2) + '@inversifyjs/plugin': 0.2.0 + '@inversifyjs/reflect-metadata-utils': 1.4.1(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + + '@inversifyjs/core@9.2.0(reflect-metadata@0.2.2)': + dependencies: + '@inversifyjs/common': 1.5.2 + '@inversifyjs/prototype-utils': 0.1.3 + '@inversifyjs/reflect-metadata-utils': 1.4.1(reflect-metadata@0.2.2) + transitivePeerDependencies: + - reflect-metadata + + '@inversifyjs/plugin@0.2.0': {} + + '@inversifyjs/prototype-utils@0.1.3': + dependencies: + '@inversifyjs/common': 1.5.2 + + '@inversifyjs/reflect-metadata-utils@1.4.1(reflect-metadata@0.2.2)': + dependencies: + reflect-metadata: 0.2.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@kurkle/color@0.3.4': {} + + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.25) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.0 + express: 5.2.1 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.25 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.4.3 + zod-to-json-schema: 3.25.2(zod@4.4.3) + transitivePeerDependencies: + - supports-color + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@next/env@16.2.9': {} + + '@next/eslint-plugin-next@16.2.9': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@16.2.9': + optional: true + + '@next/swc-darwin-x64@16.2.9': + optional: true + + '@next/swc-linux-arm64-gnu@16.2.9': + optional: true + + '@next/swc-linux-arm64-musl@16.2.9': + optional: true + + '@next/swc-linux-x64-gnu@16.2.9': + optional: true + + '@next/swc-linux-x64-musl@16.2.9': + optional: true + + '@next/swc-win32-arm64-msvc@16.2.9': + optional: true + + '@next/swc-win32-x64-msvc@16.2.9': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@prisma/adapter-pg@7.8.0': + dependencies: + '@prisma/driver-adapter-utils': 7.8.0 + '@types/pg': 8.20.0 + pg: 8.21.0 + postgres-array: 3.0.4 + transitivePeerDependencies: + - pg-native + + '@prisma/client-runtime-utils@7.8.0': {} + + '@prisma/client@7.8.0(prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@prisma/client-runtime-utils': 7.8.0 + optionalDependencies: + prisma: 7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + typescript: 5.9.3 + + '@prisma/config@7.8.0': + dependencies: + c12: 3.3.4 + deepmerge-ts: 7.1.5 + effect: 3.20.0 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast + + '@prisma/debug@7.2.0': {} + + '@prisma/debug@7.8.0': {} + + '@prisma/dev@0.24.3(typescript@5.9.3)': + dependencies: + '@electric-sql/pglite': 0.4.1 + '@electric-sql/pglite-socket': 0.1.1(@electric-sql/pglite@0.4.1) + '@electric-sql/pglite-tools': 0.3.1(@electric-sql/pglite@0.4.1) + '@hono/node-server': 1.19.11(hono@4.12.25) + '@prisma/get-platform': 7.2.0 + '@prisma/query-plan-executor': 7.2.0 + '@prisma/streams-local': 0.1.2 + foreground-child: 3.3.1 + get-port-please: 3.2.0 + hono: 4.12.25 + http-status-codes: 2.3.0 + pathe: 2.0.3 + proper-lockfile: 4.1.2 + remeda: 2.33.4 + std-env: 3.10.0 + valibot: 1.2.0(typescript@5.9.3) + zeptomatch: 2.1.0 + transitivePeerDependencies: + - typescript + + '@prisma/driver-adapter-utils@7.8.0': + dependencies: + '@prisma/debug': 7.8.0 + + '@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a': {} + + '@prisma/engines@7.8.0': + dependencies: + '@prisma/debug': 7.8.0 + '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + '@prisma/fetch-engine': 7.8.0 + '@prisma/get-platform': 7.8.0 + + '@prisma/fetch-engine@7.8.0': + dependencies: + '@prisma/debug': 7.8.0 + '@prisma/engines-version': 7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a + '@prisma/get-platform': 7.8.0 + + '@prisma/get-platform@7.2.0': + dependencies: + '@prisma/debug': 7.2.0 + + '@prisma/get-platform@7.8.0': + dependencies: + '@prisma/debug': 7.8.0 + + '@prisma/query-plan-executor@7.2.0': {} + + '@prisma/streams-local@0.1.2': + dependencies: + ajv: 8.20.0 + better-result: 2.9.2 + env-paths: 3.0.0 + proper-lockfile: 4.1.2 + + '@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@types/react': 19.2.17 + chart.js: 4.5.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + transitivePeerDependencies: + - '@types/react-dom' + + '@puppeteer/browsers@3.0.4': + dependencies: + modern-tar: 0.7.6 + yargs: 17.7.2 + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.17 + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.17)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.17)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.17)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.17 + + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.17)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.17 + '@types/react-dom': 19.2.3(@types/react@19.2.17) + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.17)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.17)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.17 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.17)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.17)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.17 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.17 + + '@rtsao/scc@1.1.0': {} + + '@standard-schema/spec@1.1.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/bcryptjs@3.0.0': + dependencies: + bcryptjs: 3.0.3 + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.19.43': + dependencies: + undici-types: 6.21.0 + + '@types/node@22.19.21': + dependencies: + undici-types: 6.21.0 + + '@types/pg@8.20.0': + dependencies: + '@types/node': 20.19.43 + pg-protocol: 1.14.0 + pg-types: 2.2.0 + + '@types/react-dom@19.2.3(@types/react@19.2.17)': + dependencies: + '@types/react': 19.2.17 + + '@types/react@19.2.17': + dependencies: + csstype: 3.2.3 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.61.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/type-utils': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.61.0 + eslint: 9.39.4(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.61.0 + debug: 4.4.3 + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.61.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.9.3) + '@typescript-eslint/types': 8.61.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.61.0': + dependencies: + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 + + '@typescript-eslint/tsconfig-utils@8.61.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.4(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.61.0': {} + + '@typescript-eslint/typescript-estree@8.61.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.61.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.9.3) + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.4 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.61.0': + dependencies: + '@typescript-eslint/types': 8.61.0 + eslint-visitor-keys: 5.0.1 + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + optional: true + + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + adler-32@1.3.1: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + aws-ssl-profiles@1.1.2: {} + + axe-core@4.12.1: {} + + axios@1.17.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.10.36: {} + + bcryptjs@3.0.3: {} + + better-result@2.9.2: {} + + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.36 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.371 + node-releases: 2.0.47 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + bytes@3.1.2: {} + + c12@3.3.4: + dependencies: + chokidar: 5.0.0 + confbox: 0.2.4 + defu: 6.1.7 + dotenv: 17.4.2 + exsolve: 1.0.8 + giget: 3.3.0 + jiti: 2.7.0 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.1 + rc9: 3.0.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001799: {} + + cfb@1.2.2: + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chart.js@4.5.1: + dependencies: + '@kurkle/color': 0.3.4 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + chromium-bidi@16.0.1(devtools-protocol@0.0.1624250): + dependencies: + devtools-protocol: 0.0.1624250 + mitt: 3.0.1 + zod: 3.25.76 + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + codepage@1.15.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + concat-map@0.0.1: {} + + confbox@0.2.4: {} + + content-disposition@1.1.0: {} + + content-type@1.0.5: {} + + content-type@2.0.0: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + crc-32@1.2.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + deepmerge-ts@7.1.5: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.7: {} + + delayed-stream@1.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: + optional: true + + devtools-protocol@0.0.1624250: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dotenv@16.6.1: {} + + dotenv@17.4.2: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + effect@3.20.0: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + + electron-to-chromium@1.5.371: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + empathic@2.0.0: {} + + encodeurl@2.0.0: {} + + env-paths@3.0.0: {} + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.3.3: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + math-intrinsics: 1.1.0 + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@16.2.9(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 16.2.9 + eslint: 9.39.4(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.4(jiti@2.7.0)) + globals: 16.4.0 + typescript-eslint: 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.10: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.2 + resolve: 2.0.0-next.7 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.4(jiti@2.7.0) + get-tsconfig: 4.14.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.13.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.4(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.7.0)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.12.1 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.4(jiti@2.7.0) + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)): + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + eslint: 9.39.4(jiti@2.7.0) + hermes-parser: 0.25.1 + zod: 4.4.3 + zod-validation-error: 4.0.2(zod@4.4.3) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.3.3 + eslint: 9.39.4(jiti@2.7.0) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.4(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventsource-parser@3.1.0: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.1.0 + + express-rate-limit@8.5.2(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.2.0 + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.2 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.8: {} + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.2: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + follow-redirects@1.16.0: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forgejo-mcp@1.2.0(zod@4.4.3): + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + '@types/node': 22.19.21 + '@types/yargs': 17.0.35 + axios: 1.17.0 + dotenv: 16.6.1 + inversify: 7.11.0(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + typescript: 5.9.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@cfworker/json-schema' + - debug + - supports-color + - zod + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + forwarded@0.2.0: {} + + frac@1.1.2: {} + + fresh@2.0.0: {} + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.4 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + generator-function@2.0.1: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-port-please@3.2.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + giget@3.3.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.4.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + grammex@3.1.12: {} + + graphmatch@1.1.1: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hono@4.12.25: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-status-codes@2.3.0: {} + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inherits@2.0.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + inversify@7.11.0(reflect-metadata@0.2.2): + dependencies: + '@inversifyjs/common': 1.5.2 + '@inversifyjs/container': 1.15.0(reflect-metadata@0.2.2) + '@inversifyjs/core': 9.2.0(reflect-metadata@0.2.2) + transitivePeerDependencies: + - reflect-metadata + + ip-address@10.2.0: {} + + ipaddr.js@1.9.1: {} + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.8.4 + + is-callable@1.2.7: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-promise@4.0.0: {} + + is-property@1.0.2: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.7.0: {} + + jose@6.2.3: {} + + js-tokens@4.0.0: {} + + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema-typed@8.0.2: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + long@5.3.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru.min@1.1.4: {} + + math-intrinsics@1.1.0: {} + + mcp-git@0.0.4(zod@4.4.3): + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + commander: 12.1.0 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod + + media-typer@1.1.0: {} + + merge-descriptors@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 + + minimist@1.2.8: {} + + mitt@3.0.1: {} + + modern-tar@0.7.6: {} + + ms@2.1.3: {} + + mysql2@3.15.3: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.2 + long: 5.3.2 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.6: + dependencies: + lru.min: 1.1.4 + + nanoid@3.3.12: {} + + napi-postinstall@0.3.4: {} + + natural-compare@1.4.0: {} + + negotiator@1.0.0: {} + + next@16.2.9(@babel/core@7.29.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@next/env': 16.2.9 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.36 + caniuse-lite: 1.0.30001799 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.4) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.9 + '@next/swc-darwin-x64': 16.2.9 + '@next/swc-linux-arm64-gnu': 16.2.9 + '@next/swc-linux-arm64-musl': 16.2.9 + '@next/swc-linux-x64-gnu': 16.2.9 + '@next/swc-linux-x64-musl': 16.2.9 + '@next/swc-win32-arm64-msvc': 16.2.9 + '@next/swc-win32-x64-msvc': 16.2.9 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + + node-releases@2.0.47: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + ohash@2.0.11: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@8.4.2: {} + + pathe@2.0.3: {} + + perfect-debounce@2.1.0: {} + + pg-cloudflare@1.4.0: + optional: true + + pg-connection-string@2.13.0: {} + + pg-int8@1.0.1: {} + + pg-pool@3.14.0(pg@8.21.0): + dependencies: + pg: 8.21.0 + + pg-protocol@1.14.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.1 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.21.0: + dependencies: + pg-connection-string: 2.13.0 + pg-pool: 3.14.0(pg@8.21.0) + pg-protocol: 1.14.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.4.0 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + pkce-challenge@5.0.1: {} + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + possible-typed-array-names@1.1.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.1: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres@3.4.7: {} + + prelude-ls@1.2.1: {} + + prisma@7.8.0(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + dependencies: + '@prisma/config': 7.8.0 + '@prisma/dev': 0.24.3(typescript@5.9.3) + '@prisma/engines': 7.8.0 + '@prisma/studio-core': 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + mysql2: 3.15.3 + postgres: 3.4.7 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - magicast + - react + - react-dom + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@2.1.0: {} + + punycode@2.3.1: {} + + puppeteer-core@25.1.0: + dependencies: + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 + typed-query-selector: 2.12.2 + webdriver-bidi-protocol: 0.4.2 + ws: 8.21.0 + transitivePeerDependencies: + - bufferutil + - proxy-agent + - utf-8-validate + + puppeteer@25.1.0: + dependencies: + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 + lilconfig: 3.1.3 + puppeteer-core: 25.1.0 + typed-query-selector: 2.12.2 + transitivePeerDependencies: + - bufferutil + - proxy-agent + - utf-8-validate + + pure-rand@6.1.0: {} + + qs@6.15.2: + dependencies: + side-channel: 1.1.1 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + + rc9@3.0.1: + dependencies: + defu: 6.1.7 + destr: 2.0.5 + + react-dom@19.2.4(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + + react-is@16.13.1: {} + + react@19.2.4: {} + + readdirp@5.0.0: {} + + reflect-metadata@0.2.2: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + remeda@2.33.4: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + node-exports-info: 1.6.0 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + retry@0.12.0: {} + + reusify@1.1.0: {} + + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.8.4: {} + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + seq-queue@0.0.5: {} + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + setprototypeof@1.2.0: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + source-map-js@1.2.1: {} + + split2@4.2.0: {} + + sqlstring@2.3.3: {} + + ssf@0.11.2: + dependencies: + frac: 1.1.2 + + stable-hash@0.0.5: {} + + statuses@2.0.2: {} + + std-env@3.10.0: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.1 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.4): + dependencies: + client-only: 0.0.1 + react: 19.2.4 + optionalDependencies: + '@babel/core': 7.29.7 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-is@2.1.0: + dependencies: + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-query-selector@2.12.2: {} + + typescript-eslint@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.61.0(@typescript-eslint/parser@8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.61.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.21.0: {} + + unpipe@1.0.0: {} + + unrs-resolver@1.12.2: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.12.2 + '@unrs/resolver-binding-android-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-x64': 1.12.2 + '@unrs/resolver-binding-freebsd-x64': 1.12.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.12.2 + '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-loong64-musl': 1.12.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-musl': 1.12.2 + '@unrs/resolver-binding-openharmony-arm64': 1.12.2 + '@unrs/resolver-binding-wasm32-wasi': 1.12.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + vary@1.1.2: {} + + webdriver-bidi-protocol@0.4.2: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wmf@1.0.2: {} + + word-wrap@1.2.5: {} + + word@0.3.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@8.21.0: {} + + xlsx@0.18.5: + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zeptomatch@2.1.0: + dependencies: + grammex: 3.1.12 + graphmatch: 1.1.1 + + zod-to-json-schema@3.25.2(zod@4.4.3): + dependencies: + zod: 4.4.3 + + zod-validation-error@4.0.2(zod@4.4.3): + dependencies: + zod: 4.4.3 + + zod@3.25.76: {} + + zod@4.4.3: {} diff --git a/prisma/migrations/20260612012032_add_sales_import_job/migration.sql b/prisma/migrations/20260612012032_add_sales_import_job/migration.sql new file mode 100644 index 0000000..9e48ecb --- /dev/null +++ b/prisma/migrations/20260612012032_add_sales_import_job/migration.sql @@ -0,0 +1,18 @@ +-- CreateTable +CREATE TABLE "sales_import_jobs" ( + "id" SERIAL NOT NULL, + "idempotency_key" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'PROCESSING', + "error_message" TEXT, + "uploaded_by" INTEGER NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "sales_import_jobs_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "sales_import_jobs_idempotency_key_key" ON "sales_import_jobs"("idempotency_key"); + +-- AddForeignKey +ALTER TABLE "sales_import_jobs" ADD CONSTRAINT "sales_import_jobs_uploaded_by_fkey" FOREIGN KEY ("uploaded_by") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/rls_and_seed.sql b/prisma/rls_and_seed.sql index 3ce4a78..8670ef0 100644 --- a/prisma/rls_and_seed.sql +++ b/prisma/rls_and_seed.sql @@ -1,62 +1,22 @@ -- RLS Policies and Seeding Script for Hoteles Estelar Variable Remuneration System -SET app.current_user_role = 'ADMIN'; +SET app.current_user_role = 'admin'; -- ========================================== --- 1. SEED DATA +-- 0. TEMPORARILY DISABLE RLS FOR SEEDING -- ========================================== - --- Seed Regions -INSERT INTO "regions" ("name", "code") VALUES -('Bogotá', 'BOG'), -('Antioquia', 'ANT'), -('Caribe', 'CAR') -ON CONFLICT ("code") DO NOTHING; - --- Seed Hotels -INSERT INTO "hotels" ("name", "code", "region_id", "status") VALUES -('Estelar Parque de la 93', 'EST-P93', (SELECT id FROM regions WHERE code = 'BOG'), 'ACTIVE'), -('Estelar Medellin', 'EST-MDE', (SELECT id FROM regions WHERE code = 'ANT'), 'ACTIVE'), -('Estelar Cartagena', 'EST-CTG', (SELECT id FROM regions WHERE code = 'CAR'), 'ACTIVE') -ON CONFLICT ("code") DO NOTHING; - --- Seed Users --- password_hash is bcrypt hash of 'password123' -INSERT INTO "users" ("username", "email", "password_hash", "role", "hotel_id", "area", "status", "created_at") VALUES -('admin', 'admin@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'ADMIN', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Sistemas', 'ACTIVE', NOW()), -('director', 'director@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'DIRECTOR', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Comercial', 'ACTIVE', NOW()), -('gerente_mde', 'gerente.mde@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'GERENTE', (SELECT id FROM hotels WHERE code = 'EST-MDE'), 'Administracion', 'ACTIVE', NOW()), -('lider_ctg', 'lider.ctg@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'LIDER', (SELECT id FROM hotels WHERE code = 'EST-CTG'), 'Ventas', 'ACTIVE', NOW()), -('analista', 'analista@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'ANALISTA', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Finanzas', 'ACTIVE', NOW()), -('consulta', 'consulta@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'CONSULTA', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Auditoria', 'ACTIVE', NOW()), -('colaborador_mde', 'colaborador.mde@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'COLABORADOR', (SELECT id FROM hotels WHERE code = 'EST-MDE'), 'Ventas', 'ACTIVE', NOW()) -ON CONFLICT ("username") DO NOTHING; - +ALTER TABLE "regions" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "hotels" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "users" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "goals" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "sales_results" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "settlements" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "audit_logs" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "compensation_plans" DISABLE ROW LEVEL SECURITY; +ALTER TABLE "calculation_rules" DISABLE ROW LEVEL SECURITY; -- ========================================== --- 2. ENABLE ROW-LEVEL SECURITY +-- 1. CLEAN UP OLD POLICIES -- ========================================== - -ALTER TABLE "regions" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "hotels" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "users" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "goals" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "sales_results" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "settlements" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "audit_logs" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "regions" FORCE ROW LEVEL SECURITY; -ALTER TABLE "hotels" FORCE ROW LEVEL SECURITY; -ALTER TABLE "users" FORCE ROW LEVEL SECURITY; -ALTER TABLE "goals" FORCE ROW LEVEL SECURITY; -ALTER TABLE "sales_results" FORCE ROW LEVEL SECURITY; -ALTER TABLE "settlements" FORCE ROW LEVEL SECURITY; -ALTER TABLE "audit_logs" FORCE ROW LEVEL SECURITY; - - --- ========================================== --- 3. CLEAN UP OLD POLICIES --- ========================================== - DROP POLICY IF EXISTS audit_logs_insert_policy ON "audit_logs"; DROP POLICY IF EXISTS audit_logs_select_policy ON "audit_logs"; DROP POLICY IF EXISTS regions_select_policy ON "regions"; @@ -76,6 +36,61 @@ DROP POLICY IF EXISTS plans_modify_policy ON "compensation_plans"; DROP POLICY IF EXISTS rules_select_policy ON "calculation_rules"; DROP POLICY IF EXISTS rules_modify_policy ON "calculation_rules"; +-- ========================================== +-- 2. SEED DATA +-- ========================================== + +-- Seed Regions +INSERT INTO "regions" ("name", "code") VALUES +('Bogotá', 'BOG'), +('Antioquia', 'ANT'), +('Caribe', 'CAR') +ON CONFLICT ("code") DO NOTHING; + +-- Seed Hotels +INSERT INTO "hotels" ("name", "code", "region_id", "status") VALUES +('Estelar Parque de la 93', 'EST-P93', (SELECT id FROM regions WHERE code = 'BOG'), 'ACTIVE'), +('Estelar Medellin', 'EST-MDE', (SELECT id FROM regions WHERE code = 'ANT'), 'ACTIVE'), +('Estelar Cartagena', 'EST-CTG', (SELECT id FROM regions WHERE code = 'CAR'), 'ACTIVE') +ON CONFLICT ("code") DO NOTHING; + +-- Seed Users +-- password_hash is bcrypt hash of 'password123' +INSERT INTO "users" ("username", "email", "password_hash", "role", "hotel_id", "area", "status", "created_at") VALUES +('admin', 'admin@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'admin', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Sistemas', 'ACTIVE', NOW()), +('director', 'director@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'director', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Comercial', 'ACTIVE', NOW()), +('gerente_mde', 'gerente.mde@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'hotel_manager', (SELECT id FROM hotels WHERE code = 'EST-MDE'), 'Administracion', 'ACTIVE', NOW()), +('lider_ctg', 'lider.ctg@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'commercial_leader', (SELECT id FROM hotels WHERE code = 'EST-CTG'), 'Ventas', 'ACTIVE', NOW()), +('analista', 'analista@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'analyst', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Finanzas', 'ACTIVE', NOW()), +('consulta', 'consulta@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'auditor', (SELECT id FROM hotels WHERE code = 'EST-P93'), 'Auditoria', 'ACTIVE', NOW()), +('colaborador_mde', 'colaborador.mde@estelar.com', '$2b$10$lRn/GrwzaEGxWqqQGGz0f.44nBywObKkGWRajlxWeDGZ3o4f7ayjy', 'collaborator', (SELECT id FROM hotels WHERE code = 'EST-MDE'), 'Ventas', 'ACTIVE', NOW()) +ON CONFLICT ("username") DO UPDATE SET role = EXCLUDED.role; + + +-- ========================================== +-- 3. ENABLE ROW-LEVEL SECURITY +-- ========================================== + +ALTER TABLE "regions" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "hotels" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "users" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "goals" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "sales_results" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "settlements" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "audit_logs" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "compensation_plans" ENABLE ROW LEVEL SECURITY; +ALTER TABLE "calculation_rules" ENABLE ROW LEVEL SECURITY; + +ALTER TABLE "regions" FORCE ROW LEVEL SECURITY; +ALTER TABLE "hotels" FORCE ROW LEVEL SECURITY; +ALTER TABLE "users" FORCE ROW LEVEL SECURITY; +ALTER TABLE "goals" FORCE ROW LEVEL SECURITY; +ALTER TABLE "sales_results" FORCE ROW LEVEL SECURITY; +ALTER TABLE "settlements" FORCE ROW LEVEL SECURITY; +ALTER TABLE "audit_logs" FORCE ROW LEVEL SECURITY; +ALTER TABLE "compensation_plans" FORCE ROW LEVEL SECURITY; +ALTER TABLE "calculation_rules" FORCE ROW LEVEL SECURITY; + -- ========================================== -- 4. CREATE RLS POLICIES @@ -87,7 +102,7 @@ CREATE POLICY audit_logs_insert_policy ON "audit_logs" CREATE POLICY audit_logs_select_policy ON "audit_logs" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA') + current_setting('app.current_user_role', true) IN ('admin', 'analyst') OR user_id = NULLIF(current_setting('app.current_user_id', true), '')::integer ); @@ -95,49 +110,49 @@ CREATE POLICY audit_logs_select_policy ON "audit_logs" -- B. Regions Policies CREATE POLICY regions_select_policy ON "regions" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR id = NULLIF(current_setting('app.current_region_id', true), '')::integer ); CREATE POLICY regions_modify_policy ON "regions" - FOR ALL USING (current_setting('app.current_user_role', true) IN ('ADMIN', 'DIRECTOR')); + FOR ALL USING (current_setting('app.current_user_role', true) IN ('admin', 'director')); -- C. Hotels Policies CREATE POLICY hotels_select_policy ON "hotels" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR region_id = NULLIF(current_setting('app.current_region_id', true), '')::integer OR id = NULLIF(current_setting('app.current_hotel_id', true), '')::integer ); CREATE POLICY hotels_modify_policy ON "hotels" - FOR ALL USING (current_setting('app.current_user_role', true) IN ('ADMIN', 'DIRECTOR')); + FOR ALL USING (current_setting('app.current_user_role', true) IN ('admin', 'director')); -- D. Users Policies CREATE POLICY users_select_policy ON "users" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR ( - current_setting('app.current_user_role', true) = 'GERENTE' + current_setting('app.current_user_role', true) = 'hotel_manager' AND hotel_id = NULLIF(current_setting('app.current_hotel_id', true), '')::integer ) OR ( - current_setting('app.current_user_role', true) = 'LIDER' + current_setting('app.current_user_role', true) = 'commercial_leader' AND hotel_id IN (SELECT id FROM hotels WHERE region_id = NULLIF(current_setting('app.current_region_id', true), '')::integer) ) OR id = NULLIF(current_setting('app.current_user_id', true), '')::integer ); CREATE POLICY users_modify_policy ON "users" - FOR ALL USING (current_setting('app.current_user_role', true) = 'ADMIN'); + FOR ALL USING (current_setting('app.current_user_role', true) = 'admin'); -- E. Goals Policies CREATE POLICY goals_select_policy ON "goals" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR target_id = NULLIF(current_setting('app.current_user_id', true), '')::integer OR target_id IN ( SELECT u.id FROM users u WHERE u.hotel_id = NULLIF(current_setting('app.current_hotel_id', true), '')::integer @@ -149,13 +164,13 @@ CREATE POLICY goals_select_policy ON "goals" ); CREATE POLICY goals_modify_policy ON "goals" - FOR ALL USING (current_setting('app.current_user_role', true) IN ('ADMIN', 'DIRECTOR')); + FOR ALL USING (current_setting('app.current_user_role', true) IN ('admin', 'director')); -- F. Sales Results Policies CREATE POLICY sales_results_select_policy ON "sales_results" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR user_id = NULLIF(current_setting('app.current_user_id', true), '')::integer OR hotel_id = NULLIF(current_setting('app.current_hotel_id', true), '')::integer OR hotel_id IN ( @@ -165,9 +180,9 @@ CREATE POLICY sales_results_select_policy ON "sales_results" CREATE POLICY sales_results_modify_policy ON "sales_results" FOR ALL USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA') + current_setting('app.current_user_role', true) IN ('admin', 'analyst') OR ( - current_setting('app.current_user_role', true) = 'LIDER' + current_setting('app.current_user_role', true) = 'commercial_leader' AND hotel_id IN ( SELECT id FROM hotels WHERE region_id = NULLIF(current_setting('app.current_region_id', true), '')::integer ) @@ -178,7 +193,7 @@ CREATE POLICY sales_results_modify_policy ON "sales_results" -- G. Settlements Policies CREATE POLICY settlements_select_policy ON "settlements" FOR SELECT USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA', 'DIRECTOR') + current_setting('app.current_user_role', true) IN ('admin', 'analyst', 'director') OR user_id = NULLIF(current_setting('app.current_user_id', true), '')::integer OR user_id IN ( SELECT u.id FROM users u WHERE u.hotel_id = NULLIF(current_setting('app.current_hotel_id', true), '')::integer @@ -191,9 +206,9 @@ CREATE POLICY settlements_select_policy ON "settlements" CREATE POLICY settlements_modify_policy ON "settlements" FOR ALL USING ( - current_setting('app.current_user_role', true) IN ('ADMIN', 'ANALISTA') + current_setting('app.current_user_role', true) IN ('admin', 'analyst') OR ( - current_setting('app.current_user_role', true) = 'LIDER' + current_setting('app.current_user_role', true) = 'commercial_leader' AND user_id IN ( SELECT u.id FROM users u JOIN hotels h ON u.hotel_id = h.id WHERE h.region_id = NULLIF(current_setting('app.current_region_id', true), '')::integer @@ -201,23 +216,18 @@ CREATE POLICY settlements_modify_policy ON "settlements" ) ); --- H. Compensation Plans Policies -ALTER TABLE "compensation_plans" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "compensation_plans" FORCE ROW LEVEL SECURITY; +-- H. Compensation Plans Policies CREATE POLICY plans_select_policy ON "compensation_plans" FOR SELECT USING (true); CREATE POLICY plans_modify_policy ON "compensation_plans" - FOR ALL USING (current_setting('app.current_user_role', true) IN ('ADMIN', 'DIRECTOR', 'ANALISTA')); + FOR ALL USING (current_setting('app.current_user_role', true) IN ('admin', 'director', 'analyst')); -- I. Calculation Rules Policies -ALTER TABLE "calculation_rules" ENABLE ROW LEVEL SECURITY; -ALTER TABLE "calculation_rules" FORCE ROW LEVEL SECURITY; - CREATE POLICY rules_select_policy ON "calculation_rules" FOR SELECT USING (true); CREATE POLICY rules_modify_policy ON "calculation_rules" - FOR ALL USING (current_setting('app.current_user_role', true) IN ('ADMIN', 'DIRECTOR', 'ANALISTA')); + FOR ALL USING (current_setting('app.current_user_role', true) IN ('admin', 'director', 'analyst')); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7feb5c3..3e304dc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -33,7 +33,7 @@ model User { username String @unique email String @unique passwordHash String @map("password_hash") - role String // ADMIN | DIRECTOR | GERENTE | LIDER | ANALISTA | CONSULTA | COLABORADOR + role String // admin | director | hotel_manager | commercial_leader | analyst | auditor | collaborator hotelId Int @map("hotel_id") hotel Hotel @relation(fields: [hotelId], references: [id]) area String @@ -48,6 +48,7 @@ model User { plansCreated CompensationPlan[] @relation("PlanCreator") auditLogs AuditLog[] notifications Notification[] + importJobs SalesImportJob[] @@map("users") } @@ -175,3 +176,16 @@ model Notification { @@map("notifications") } + +model SalesImportJob { + id Int @id @default(autoincrement()) + idempotencyKey String @unique @map("idempotency_key") + status String @default("PROCESSING") // PROCESSING | SUCCESS | FAILED + errorMessage String? @map("error_message") + uploadedBy Int @map("uploaded_by") + uploader User @relation(fields: [uploadedBy], references: [id]) + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + + @@map("sales_import_jobs") +} diff --git a/prisma/screenshots-phase4/01_collaborator_unauthorized.png b/prisma/screenshots-phase4/01_collaborator_unauthorized.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0fdc9c38a353d36a828163f223dbccba206a67 GIT binary patch literal 40492 zcmd42XIK+m+ct_=P*J%R1nD+; z7J@)P2qCnDny?3-=Xu|KeEZM-@x9;Pzt$Wxla*O(*1E3qI?r=H>g%dszQ}Qrj*jlK z#FCY^ho^6zrw5wt1M_k^y1(c&{(fj2oV|uU8^*lM+qoG%emM$>yaERE#;{Ad z{KR5u+p!loIb$w!zPZ)@9y$F2jCfRns6LiZ;CM7u=k|&vbKr1{ZN?wm1kp{J+08*l zt12j1oC5xU?j~wP_@t%VJ4Ju*r2QuG*ULXwB3{v5Iyteyc*gFeeQA4>?)1sQ5&fwf zC+!^D`EMsJ9qIwyxs!J9?Ei)?T2IDJ*C;ESC3at-9^&$O(s=%$us?9(btkL~jW zgZv@Ewmc18UDJ~r>6%ir-J`UgUA`>48c5NHkN6dO$%>jDX3*E7GZRu+c{u)JvC|KG z{jae!rDr>6%4FPWf6cO}>1plv(twxccl4#785d5v>f&=d)X}*^1toWFd`^+}*DTd& z+WglT6F7nA5x-@!mG#<#`8rR4(5;^u(u6VeOo+ zE_^%bGJ%u7)}(4gsF7z!v7+14!24drxj+Bq*DiX>TrX>$e9Oad9Pan#>Yqu!DOWDb zi3$#A?aHk4WBT(x=rHdjEMG>amEbKeoxe9;YEcn^o!XrZgy1!=v&a{Fl!T1DPZl^@ znmTURYoqz@6-Qm~>C2QAzpbp@eG8FFTHQ(X>WTg3WUP>a<6@*3Zpwmw{9 zQy7IGd#KVJ)VLkjrkRs@&v*4Flr4svoWCnkJ?W{HUIl6hBUdj7FtU6oHA9%@=Gf4m zKAl4No;8-VB0o}ej0|3h(o>6261=Csc_DD2jWTQ`<6-PinQ3#xz-?(axo69VOOAh5 znpazkrKc}XUB(Jx#4%ad>E<9IgY?;%nGN;}X|_+}Rwk%%G6Y%SjkO=$BdGX&Ek6=Nup4|6H zhWAZXJ0kr0ymy{91J%l&9UxtyOnaS)yo>sq(% z29?~fb#l9UT*&cM_#u;~;NE)Y)qYh5CT_Qx8iGJBlZm%b8RqNH+PkCq6 z6wANw)m>u(*M$igH9K`)sc_at5ApMhb$tBz@z`q;RQ7ZXvfivBdHWGJbib#*4C5{T zVora53!f?HHJE4NSbzL3n(a78(tnzQy?WLD@+xL!vNd^q)z!zcVq9UHwF-pzH8Z(g z?{3P-$Qa1I>Q4KV*DvEk<_4HZ^9D`O_yI&Fv9eJ^v;(1BdbTskh> z^L!$Bh}4Keb44rRN!gh9MB_dULb`Wj4Ygq}nNc99;>;&vQ8`?@>;MYJbFU;Uf%gex z`6JwjT~pnV`b;fOgZ?gh_czd+7E%QcM28t2dGAG}Q?FYM>N6?(*de2Hu|nIcc0b zgGMl=2I{ZrV{WC0tt?VxufSLes-^EdUld#N1A}Jc3$D4TW#h32&c&fOUNCmQVYRyu zIH0`$BG%oc079U^D&Me*S_U1r4~!P$nj@00=qVpgb?8`)()yov`7#&Pk%m#a?LoX$ z5@+qCGC6nBCKPK@Xj;p_8y+;dHP*l4c zi@)(k{YmzZ9zVXD;fZTo?OEzj!&Y}bndc>$(%vsR ziLH+wy&e-fI>@5_Ui@-Mx_IS6Qi<187=8xdOwQ6w6&-@RrdLdZsmgvk>nexqP1}^O zU%#T@{V8ua`QCV@^Gz$bG*c?`73)g{?(%!hHa`~AjASWKEH-0C=Yk(izf{pb0;XF5(l=jOhBXPULiGatIZ3~ySuD;1?s zJTY1GSkS3CQ-MfaZa6vo%cHYwG^LgNUC^Qb&Hyf)>igiqHySn4shH~)nB?KZ-sV5J z(5aW5q`FmdJF?TUL&trvd}NB8O6q{4y%;kd`)ZX#*jJ*ecO zpZaSRpWurxY_`$^Iy*q22m5lgUHtCu<%m@nlWO{QZU4S*7OjeFLyHgpMz=`_KWX&Y z$dKq^3P)yt!v}16_&}9I*Zy8UZ&cKmL_QpIC3Tx2rTxy2AtSis}$F7Bg+)@%4_msO&F#4z(B{#EI8CZ93KCdB9ni z(lJ6$st9!_nW?NQ{E#|ugq*8|!!IYm0 zZiF)1-7N)VPpWY7_33(791u5hX-9AVd3RCs?%`T5uM^%_(006{bW&Wa!T)Cf(MH{` z=J=m?6ZHgHjr=l}!u*(m?s@dxFA8PpE5b4ym)+mI+@?Q;-u6x)hBgjy@)5Z6{qPt2 zL&U6G9xah~627l~>bROe=4fPQu}0Lz)I^@{V$jW15Xrr?i&Oe)_nqFISD{1zI_$f& z)&$|XVff`yQ9Om!gop;Ti0I@cf~u(!ysQiq6ovFX>{N<9c5 zjkb{?yx|rt=0mQzp^KC0v+IKmc%yi=yRMf|M=qaYNX_TtRriO-y_9mHOZPQ;ZNsE~ zI!RJV?Q&!Lw5{n0^>etx5eXFP@E2QBU2m#b#f;MyKb=;c(LhTOaRx-(9;t#BztU`D zTFiRffB*Q1z{MNmh1PH0wrtQ3db|!!L-93$$Kbs}D@bI><&Po-ZR$3SigkAh=5zC}z zHiBJ(Hu0O7#Z+OVEFUI7msBIh#0dr-gZzvM>jm`;!P z9UnjrfVuNs-C`S2IAs+0=bHPGCeX+cNy z>2_?I_!S=$(|IGdCI@%bXogYObZj9jZtSj6`3AdXdN{_57gPK{)Gmvr)J6$)3qdH{ z_ikJsR;*|{8ZPY3J@za0o{W+Shk%XL&Y4wV1vM6vnP&Bu4=3gxO7_)_)}`b29&9z) zGT0$5nSOpSiUse4Z*4M+&F`@Lvvg)m0eDM;xIKid(kx0M2?Qn=KPIxV2x+1(;wije zZExLNK^S+>>#5y0r~k?_mNP2?D({LOP^}zu$AuC@WFC|nbu~*$sL1_IbW_70?cqhz z%8V=bdKmRq$)P1No`;b2HM!84A7WPEwb|N%z*Bs#J^fd?xQq*4eA&fC>@%v55Gt_{ zEd7g)L|ia_k_MjCQ_#zm!LYwn8BmQk=h{Df(B{D)9LA<{q1-m*&l7=lBIB;Fr<)ibsA=DCrNnBJ> z&})upht@dsxkR%77-=x@t*2Q@G8}tznmqR=b{=oo*e9YMy@KazofM&)S&d>5DhKv} z)D=bWEKN|fzFseI^(TA%Z0-r1;$x_s^?&~&gbX2?lc&SMldB(DBAPy#6YtLImxon2EOlu;5TP(Wbst8-viuY~0!#5Y=B#+T68 zoj3m~m$MCDFT~8I<4Z@1ZTePC@LqS|xrNTEN2>yzPUWBmLZ?XsLA@z7oW9Yd5wx({ zz35guRqwT*uyDzx{s+(aY)Y8VXuQ%wC#v#It3{!1#`?M0@<^b5 zXt9l&M@K6z^P%N%`?+=ZP{Cw3TOSI=W3v6!;_2ZJeDLnOuiFm(F&Y}8ysQnwPnpf` z&5gv*rhK~d#O-uhQiOs@NfMu|PXjJE&tD;AS^1RWR=gSzLiY!7P-$;-l>dNIa#B)N zO!6-$+{V>>IUnpMk&XBL`?oW`kSZzH{_vwo#MVd4V*R=TYlPi!h1Ov|_q6A9o7NN} zf?dJo`#;V}S4STX%L^QLST~0GEaa##IK4J7NbC{2&6GnQzUi>`X%h*Fuf!yuy>OA8)(TLwSo1H`)f1aO!b54;w z>baY~Bi0x5Xzbk@pF;!P`)uosWjj}82y7BILMnxBp+~%G_<6HTpHlMan@sGN4uH(Z ztL9tk^wEK}7XR(lf7tLDTmQ9wQDvihbMP$GeYyZHoyy*qNNo zusK7x?30E+=)aH2l=Z$DsXDy*d+wq4n;KA|z5N#;R!=l}_yl|}{^uQ|b2I1L_wWCe zOEz6P_3OQ`)=Ojn#A=MJH(x%6$p;?HLJp9z3vNE(aCPfmo+~$b6CUrzq&L-RjRKDr8*z`Nx#13i4T0TDeu3Oa1)?fw2mkTJ4o2 zAXAML0;HE35&C^Yb0> z$h1A;@px7CNj;zi-G6V&1kSehK{a0`Fg#ElDSk*LDuD++$>=qcP~gvDQ(+W56O>BT z!}JrqNz;$}AM~a-!!eruiOP1GQn7npGa3HNIXse$PoxgLT0>iD=;fRbF)=rkXg-}I zhn}n9_bZzN+##56ZOabgVQQWQPs@nwd#Rb_0tC%Cwb?LoQ)r+^Uj}M1GFQDP<6+5$ zh=i)M^c0k#Sf|V-UOB)g?9sdr^e7|c)6qoxZj;L6UdX?r1=bYRFl3jYw(^2Ag)B_O zAP<4~h!5LM!c)}wT$?$6baXiX!5t@SrDR)EQ!~*tg5#wBsz_p2P%RTMHOqF4<* zT5AQjg&t@s0yVS$y0vydz$@o%_;ta*Qi&Z&is|M0dX`v^v0_>9(wX{HRRY$?mZ7*5GG_Z8o2Y#wY)z9x13N zGhajOu2i10BVnb!=5oBm1urwBBUZvTxmuM8Jx&Kn4PKVoRM&>Z?$SWZ;&6^x)7>B4 zMnFDDG!jZ8IAzu@iKhIeWIrrTeq~Y`xsK8r_UX7-e5ZHcao?YkUMtbhd%5STp5Cjp zzYjV@21?WOadLZZm@g_wu%S|>jN9Hoi~@jOi$PVXEVd!Px&?Tlf&}uNzC*|^_e6uE z*`{CMXflgM74L~|KxVpr^6X!PCT6l(IYjgdjbB~`tdzK5bfpQ(J zAbr|cSUEVjxXN|6NowlKioyDC9l!Uc3GpplI{wAzmfv4TUwKC)P9(RGp0{;3)2~%! zd$Bz~f_(}BMy!qrN1kCYt2DNMfXXqVao~?8+fQ(3+%)96gz1m^P>ZTu@NDpR3x5d= z)5$nyp0_og;W#YrddOUs|quRJN`SCx>i*(=r0mbG2wP^F2rmg+@k391r0uBfS zCz=%<-9C5vga1E0<^QNU^}o*5!>Vr{vROJOg4xTgk5BUr=D6u!m}>JIm3Akkx#&t| z=#EwTdXgPf636vJYndw(aC*trpYcf)-hV*9NhNOQ$C@5 z=ajC#lrX})>Go6&q!^wA#gp4+dip`n1Wg4Es}OQ)iLXp%M&02>wq;|Xv`3GOgA@L& z0z_li*KgZw3w%q0M|nDm^c&7KkALvp<=nBX3_B476PRvX4u$D*<|b$#1m32b&aZl= zB?T|a3|_qsTzwgKNBQnezOlRZ>N+Y>xb0oKwV4ZsBia|!(I?BP%T-#lw7VcE>6P25 z2GSYRGGGpF?37;yF465rJ%meTh+YeMhPrsloDcc>j9qJ7{mDzXX*)!yzZUciC5(y- zYY1>>{F=jR_va_k952UM?bgrmZwaj+U+0a~$ex^D6uIVqcdfWDA_{kB>yPYtM6dU% z!Ith@(_epn_K72;k=eXzPbKKjkoS4Mt8Xr|+F|+zDo?K8g;~vvFC32bul9?;_s;@ zY_aY8rNu(bjwLW(dkXX~c;o?v&{40g#RdBmlhbQjo`?c8z!ICUPv43l+P-~zxo)GRovmzB z9oaet$a^fp#)DqjE453CNCpb2aOPevl$t+vD>hQ~$~RgAwsySq33GkEU*W}*H$5jZ zb9&7~0=3yDb(TyR32!eAiC)&tP=n0J>1gqCD?cMb7k^hHW)E|dY~}Nd`dqRU!yBgc zKSBX<%?QakYl_fbG1QD$jGR_sWbUMv(pqU-Qvd3hqx)`@ZB1b^or`2fe&xADlB<-`g|W=TucE-sy6bJKRSvv5f=8NcoWcxXX_z8M9VQNS)bcVFLmMm74Opt$^_zi z`Nn$dpT$L_`JLHppo*36 z?+t@}t2RF(!1<~l9o0_My(8P!6U074vz$4UP3J_hfO7nVM8f9H+qc`4G7_{N?eIQ2(hdibZk0`{w)wX!? zamMlZ=nz?@+T7|BA7j){4oY`sKib>ol=b$F3z?g<-_N=anazdjPy;8-*sBE8!Vf%w z0zrXPk|qNv{7a}~uKmT@s*352+$p29XSBOs5xeBhezqkCnCr|sJIOzdECB^j@(rno zt=xR5ux(|`{6p~|Wi!yY8rbS24)32%e{eVoh$3TgA2z<8BTKn?B*_Z8B^V!P3q7;+ zwt4f=*w_isVY4MN_DM$u`2vkP>V8FBBWx0;1y5?94xeFT_WuPa3PDA-8ILMB#++Uc zwCoj4Gy31JimC0De}tRG!m!6bKP{}Kxo9kt2VjbIran*|EiHc?$y?vQlL=#K+a~Ut zRj6b3{lj2BsbO1s^Nis_Yl7&c#%tR$R-No!*v0NxcV1UL3AQ6F6Y7NveB-OW+r1Q1 z&3eJhScz6zo3yY?x%qknvOK#pHx!)_@%Zs0?=o8}no0CENnYrIGnr;@W($=&S}c(w zua5gQFlpUbA7A#ixZpSYojlqOI3wh|o0T_bD*O?|O4Esqh_Q{+nvx!B30&d`*0mWd%Y6y0jM3Z?^$d>ps(8gMVeCmbH(i zZhkAKWGg{GPHPnyc>MDzSFXb1rVe!Yhy_!-rGY0jq;PQmMhG)ww;-!l<(wMVxLhhG^y&9t7Ms zbE)0W)j%B|4(wTsbSOY_l-RcC!oigmvR1V0vY|G8#Ze*F zz8D8DLwlXa-Ss}s5C1H4;s-0`B=3?3u&ih3=pN9%0lPU+Rps5&#YGL&H47_*CqMVo z{4c+}0>^R!38N`20#~0^+pad@hgSI#PuUS_(63nqD_LZVLNV=UK0(7OG__b6tIU$(0v{{TkvbBi|%XMNE~pzn0AqgV|kSUQ~a?Nn}h=`|D+Rsog6lWA|wbgrseCC&S0$0L?&2Vvj{9OS+K~;+$<$1kgs*%#^! zgPe#(4>oRjG5r5Neogw19B<>eRMJ+?Z(g`yg&-OtqgmpDWS?r>nE(KdWxdOrbUos@ zdsS$u)movJd!%$-Glhw0AozKCvu0P=iBk0Klv5_L=3vlzghUOQ%#@ zE02Up=!pqWc+k>JQ;f>vN3UU6pcv`C<->aP25g%ega!ocXY)0YbvBSO+VHdKLdWUl zoRCrWMQgk_veUY;nDSBF{F~R&@87-Q*8AB@k-oiqkTBys!M;)@lh|S7<u(qTI;zq*F2*Xt z`u7(K)o99^L_y1fjhOCyM#ZVq`128@w$o8yVH4r1b8{*XCV3LdgiDXdk8^u!IrSY# zMG-}#be5F34XcFC6uesj^Y^;@Qg2CWsJegp7!?x`?l*QB-}f3w>L&F_2qvzoWuxFo zV>de_nm2fneFXq#YA#1O-nPTi=^y?GtcPh;-jaq}p|bB*-L~*=$4ZtPF%DX#NS zIat){$60^;*mQ3(!wjZ&%O9t5IvZ@D=u;u8e^XLY@)0rOctOHu+D9r}xF(rUk)@}y z+g$fllRrZ~1sS#1#+BS$Qxq@=`b_hEy;l?)%_ z{N`^830XAbadJ3nuK$=qXVX)RGi>+wxB)R??w~^{_wHT(Qmk#5inb2wQTVXQ(^*n* zzdv84oH4`#8ja3Gik$~4(4$wZcD9Fm;SicJXHU^Uwg?n(;8hDX0FFL|$B%#%2Y3xF zmbDgtAI(2G6pI_aHt}Wp<)fjqg(@50zPDE5*L~^z}iRY`hvZDuCh44GEj5=^8J%;v;}< zn`-c`T(q8)EF5)JC(hQQ9%D`=)fZTK-P>{bj^dTg^M+++Aw132^rS#1ROV#RS;nUd z&?PfzkKubG7RwIE-L+W_%R6JdteFTq4dOYkGSiAi$Zmv;dFgi2zgPH$Z^K`!OwIiw zuCCk-vRvn-?f}1u(F%EDJLYo%6fV?4zNGu4*+nnwdy}h( z*`K3!_l{@;us2v%Q)>#7+e#93mzg3+R+R&CXx`jde84JUYfmI~=sDNs2xir1|3f`N zPD3VJNyD@Sw4pZw#j5j7>vjale#H5^qS{)K&WZ$U zPw=F>+VMt6{yFk!-XiGZVE@i^!H`!wbng-MNtp-OX1vMLewn-9(BwjUT#f= zO;Hs&qBHqAel2Y!_eEVH#P-7EjmFEuYeO35}zlZ6c0pII3p*k64Qdq`^mV3g&HNiu-P0CC;f+1CDVwq0&ceB00=uJa8DjJiqC<^GNQA1UMy3Im4 zbNY~*)Q8DoymHa9(P=-YmBBifjp$6Ra%Kc*lQ~m(H(DZYk*OhoHTp?h!@$4F+C`&Y zvq~7kt{cc)jg4=Yb3%Vi>Qjc`fP6Uetp1QNfI~s-)J|CK2Q)u^{#%NY&!+MM6k+_Z z`Sj^x_>zFEs1sDb|B+$ z$?iyz6U~Nyx4K|EoJGbPi*UI2P=7Ht*%JogTVK4^XX^a5=VJi(A)uWt+_Veq^2jT^ zsb?i@O8?%i#qyC2rpj%Vw zjLQuJtZ~%M^Hbx@YE&gjB^N){pp1%S@V{05r+QrusT&B|uX( zu-EJA;ulZcm3M~_YgFG?9_wEf=n7X+Y zd3O40>gXg>etJ!VGqsn5Q$+wHn7Fd?&-yEY?wH>bmE@Z1WeDQLb!PuBP9NvPA%P;+ z@|NNIfO#}s+%`~k=@Btgra91y_r_l@)~$aIplF)_4+f4n z2!XF82JQ?_{`5&6(*F+(x%>Xzdl_%@fy1-PL4j1II7*{sOA*ioH|x$z;}Ny zk&BIS31sW{%Av<7e>SvrqkgMp>blJo0|Udd0~(aRn=Ys1RK)B%{kp!?tS@NNfA{3g z(_XU9Dc3?s5ege7EYk%-QgJ*=vp_m)1)+jhG?&i<^0(V;oqcl0Wz%vHGL(3(ei?9g zFZbCRwpnK&*MBo}+t?l18U+z&31QuFFi10)IM@(aOACiQ+Z_77t7-I+i@)FMYw&g& z5vZ@dr%U%|TN!BC@?wtRE$p3cfKYygTVblnaT+lDYj*yGE+faj_`V6^k2jxT&YsrwhqHpsMu6=(*gw)%Q>3*Q_5xLE}v4NR@#f{ z+c~D6;XM$`AQB;YWqq+P=%+)rC!C}R6P3+{+wj4&zGa~el)HB7L6smq@<3>OABFi_ z??oq-^s~{6t){Kuc=68o-0W-`2$>ds$bqvJUvRBycelWHc96N~P;C8RiRlCv6=W%t_V(NWI^fPD~l zG&wk-(CnN4ZW2~ z4UK>iV3&lc1;H{YCh6Id{*)t8*1#%@M;9ahoU~Omm32dGSt_W&IYw@}#W2 zeS0QV5H#BKM7iRDUh06uBmk7QYgF060zM6n;|oqI;g}Vt>hn24*C(&~)m><@;6k6) zt0KFQLrYP{N(2?zX+1h0;RNDgo>pgrGZ#swLKm)kWJw`rx1m@DB-ig*=>2Fqo1CQU zgj{P177+rXKTxD@$AsR4^LRX!7jKA(Ij^Ow8z`HsX>O<_oF;(?LvyUi^ZMUXRjm%K z7wL2#CQfNGU%Qs=`}F>OHfH9eHlBl8j{*PXex!?<-olx4XPmM>Kh1ZWZr*PoB26nN zUmWaYFbnAN@xkRu-oU(?=sbH?YS@%FWdtA5Sb)zr9vINX0RPt%>VebWnwq84?QW~1 zm2LhQ&_`yV1d7*trk^f1?QCY#7;L~%Bb*|V&#ILwx=z)6QGtSQilj(z+I;;6I2$`Q^**Jv@PrIWiGl|pK{RbrDjdnRH=z%X6b=s7nt1qdZ9 zPWF{tbn=MUeBUbB{MdiFcGj_$dPcuxqHVHGBB}s|abjKlQRR&5UpW*RVfxFYgPWi5 z(P`$jg(yUPRuh;#y_4BnNRxY#|GaX?cO@vLe&yJ9U4m#FMLmD0Nf~snbMcprm#v>% zW1j;^R7sB5{v3dV-EzrhWOI;$EvZQ@SAuHW4AEP|2_liS;pV*YKIhkQrS4Lwj@e1u ztjY6a!nh?+B-AkyC+gv$^}?&<0gyPdZn-fwjZ81h6U<>Nd^FXor*$|>JIzoy=?=sm zMX;xcSfsZE!fE$wnYP*IhWEVv--Ca_w9!ZCN_2GZ z9Ln#EW~o-MFYbEQ3Ifl~U0s$3LXt4RgO86SzUQwnW#-_pu6|^(57g3gU)t4oLLcjP z`Zlw$A^gUg5g-UHF>*ci@#5#t+B|{G*V%8Gs08o%nH1jl0vu1BdO3zIe{tJai7e;O%!WZj{~(m+nU%+ZZiKS+L8YBpK2%#a9{pP>&sH6Y=nb% zNUcsQ!tA!;4f>D%!CR#dWUIh~m)y>VmWHwRu9v8?JI|aXnb{a%S}JSI&*&jFb>&{| znvf&z134vUH5Umk%kmUSh;CX8K!a3}gl(Fk7Ky6mF30`Mgj$aHfc$bX~8p+zTbf zU$SRE;}FMlr81oKF&#km8Lcuq-1;#BFPS*~BB48l|Gp=Fl{{PvP?y8Q$Z~M z0w5}*5{IUV2`v#!d3xPsz5gLMkY380BRJcoLB02 zfzrY5MJC2%J~6B2#W)+t$rpb|Kf1@oGBqO-_Ith~n(4FTJe&pzqhiDPK=LdfXrw2M zmi{W)%1Of-g-eQ?bzr-*h`-&qO57Vpz*e~yo^9IT)NF5h39yz~KNcC1eD3PiU+lKi zNS)6n#*9fe(K*};99=)>G+r8-3WSqDk$$?mYM&VPj&xK z=+gg>Z;p2^Zv8{aAD=&4f9t7p*T!f#+|zxaiFBq51yg(0dKGP4J4|4P+<#D|4ZU-d zPiKYd#*coGzct`-N~1&*Hy|l=jzQ4K_VP1rgM;vh!W+4sgyScfERX3^g{rKD-k)`& zMNHmEFTb>RTgLIe^0SN`zX#SeF5lRM*rTt0&-^IC?wFkN%63XU?&6Sk@KEr5gQo2= z?WnVlWT0(!F&g^oG{t0xfKM(n+a3PCJ*_y9P)@58r}QYO`_ZqSiDmkJ>l*B`p)$7z z@>mH{{o<|5&)N>7>IMcb^zEyeLxwHSA#)H&_49(Ic-I&Ki7B1{mgpz$5zvlc%_D6*jQrBK*PbAfPwcfq#!#XUFK01X*m5rjrj14T z=KexG9>;K@6`kvIwKhMK>#HdaSih-(bL_I*b#3c{<05csK!W|kDFWvL7kX<-k0eu$ z^9lE8X$`hIOBC3>F;1#&Bg0!KKEI|cKrRs|7Puf5PSeqd0E9ge)T_k&lj6WfR0p$< zuhq8@1Z7JLsDq%oHl^>XehWR#OzWdnlO7Q8>+q|Y#^Y^JxIGy(4G~A1Ks-su&JwZ} zdEq{v?eX5z49rBdi%A`+nI+3?tj#~t9xXl{nY@N(9jo(Ux+jXYr#jVyKdo^8J=RlhE+P8M2G`u3${yS?g+wnv+(Srb5$ky+lxH8KfGM>ag70%oe(GjCG<06?Geowhi{)gCqwQ z=T8*oQ1)})TX0t3`fAva;}})Uf@ZZt1w*fJ zimE9_sc`q?9|#~RvYntctp4%eX4tyGwA@jLJ5*+y03(cL zM2?39#jTuo*h0>^!nrYj0#Qxd>~HS&5Jmm0W%KdLgVrUllg83)mzAP)$nim=I+kAS zzXT~hrO<+W?|I?guCtW+mo5j9O27Fl>td{*OUw>wtC>fYmEU3e#PtL_cje%Mh*-Wj z)7X`DyFLGR_}wRz`EN_jky8X1S}BXb<5|Uvn%U}ffNWN>HZx4Ebc!Kjf`sC1T-a-W zfLf4+>$HZ0`&wd-=~L0W4dYDi70LIV!-TH5=c5p*xqj>_LN7YIl3H|H)} z7F7naC=m{2#;MX6$v%UymfAKSN94N*_0ct-R zeooj)s7~tO%3kSGZcnDKp(_tSmji3!yL0%_@a7eWY@=aVbJiF2(-mvEHR+lLl>3t- zP9!R(aE}}?GSf%NTdS-YQH-vU>J=9wF@}KUqYlK$0b7+B%Z4etDJ``Hf+uIYl)PW% z3z9fONL_~pv#EwDh)*p;i&$Zj1*AG2H2Z!Flm@P2!4rji3`5`&zAU!HG9NRo_nE+w zj~695ho~R>M1_0=dI$(XL6s+4JR@88I*9MbW$Ji!B`YSJp+u|GF=AzI*=PjA4J+f3 zuzN#weu&n+e(sJX6B%G%TGlUXZnmPd%ec{C297L~p|0heumg=vs#2_uu-1@hZfsoM zL)G;~DgO#B162dO|Cqt3TuFKIz%)57FU+M!03OEC>srHtXEsqa!`E7>Ru>BLqPA{{ z<}Pl9h(FnXkrw}aKl^yVASK>=pDx|!)V_Ga{PDWXs6y&ECV<`kv>DSz2wVH8ev^ zy{1PFZ))@Qrxccb?a_N5)jJH1W>cHyPLQ=O4x~FTQwmMK~L+4%Jlh z>u-DMCx46KdjEWt-kFp*Q=WYx;&YcL3i^rdso&KKcu=36M0@VXbM1GXO5)Uo`KxNO4qF7-sfk5$N>uMnl>(lz4r5&5yR< zy`=xrgT)n~olLVg93B{d;Bqgr(XL|?Xk)o?)su72#M09Rts%kio?&wFFS9EFQmn@j zd^bh)ue=yYBHa~`BL_; zh<$65`kbM9`_s;e-+3Mzs0w&0XnU)>&t*v(8$Fe}I|0?|bii@9TYCuXml^uyF4B)8_>7-6N-;lSOVGKLDpUT7pXV z;>VEINFh#UwT@~QUl)otz=^9wAooNg)?eMVl)6eZKPn^V%xl$atKS}O8c-fHj$HHm zFI!;c3?8F^&+)J<1g^gtDY_r~U%$nyh=-P5Jo7V1i7VTwPGUoyx8U!~eHlKh`BlKvySxIud-j+xMjGodR}Pbk2Mcs2X< zWVrQkU}xu9z+$J0`>VZHUEWJV!UxqZ-PMlMmq+=W7zT{>Y$f%3;&xHBW2qlv~L`#M5A}qKOr+TLGJ=s$tSGb9ujrzOKZ(swaW$IEK%@Aw3{H;JOvjfBD z+eddIPWD%n3M@&=j`}gS@cbEKt(j%ct%S50koJ2MWcq1om~Pvf3FP9DFB7Ep*G9Ts z&dy59qjCvap^G~6gUHaBp~{2Bx)z`#A&0Bomp;+Tcj6%q%!s!qUgZ*=`7l4?qCb~cU9Bo+uNDuCNJFpD>j?xw6$mIdg;gsu$#+KWY)-{|- z&ya~W%X0z-?P`m$oGI5s@qF`<%>4~_SFM!>x1nk7QyP{0!D^*l2dIXjmLJH->`G|( z`TbJ_s7KrAPm|cql+yGQCsOGpodR^AXnKvu_=JdJrGWZ6S0`Q)XXk?Csd?N7tQMm$ zunci{UsJJkFPuMH&dSld_}W~&4v0DVviX{8!`%}VPjO zz3IS=zf-#HECz0Pde#7qK=rM%0{zfn9}P*~9%)w2@i!BL%##xoh2nR#-29>EJOefJ z8_y*$C-sxiCkC1DA)mRO#*zEHVj4Ia{=%j@tGJ2RQSvigXy{t<1O^D$B~#&D5gpsV8fYSc*0%~`t4 zDm_?x*2o}3?u^Ia+1IuY3(T%Ej|VgAckLufz!av&_2+y$LtPkiP}d< zyHXs8zjFO_ef$o@4>BE1Q9`9A%egbOeVi~bShl)Q-s2e;F}Ffabda!VMbP)9S{Knl z6kb%)jOu>Co1@j()j`o9o%xxV$eJ>JdYZmpxpw`#{rG)>22iB%U~exXB$`GJ8PY$$ z1W{dBC%aF2FsKlM&p>>>;mF(Z-W7i!j&XiQm-k$~Sa9cQ2-dI(bBg;#cawnMWQ$s* zN&B=r#wL-SW51q|$T<%P_e8PB_k?HAe*MNz<}y3otx*oD2<`F-*e7y2iah~_hp7PO z%k_YekZw(P>I4hH+h}5!q#tB9ga;Wm2sYYSB<$4VpjClWE95M2S~XCV?Hh@`ngZ-B z=3><@z!g#y(WuakXfiQDq=)VL#O1p|%%hr-)zG;-l{{E?WOMrZyv67s%=j>vWJ2oH zc$h%PJ*EgdE;wQZX>?B7-d|jaEG6Vt(*Am|}0OeUNM=~CtBQGMB$!FcY> zn;MdiWp|xwI~Nt|AcvR?c&W!W>fwQt8?5>h>bF*oMPZFiBnZ;BS%_vGpdeTx=YA|pQD?!NYvWQ~xrKw7J)bFjE2%DUFg zSy<>9i}&~q@z&$lhn-a=@kWN<%AYThPYe($4jw`YKffM#eJGM!Y-hnSt0ZBAKcMo^ zzpv%H&Je5X+~4~n$L--oYtaJ@eUwy;%?JC;hl@5E%TW?Px#|{5(|%OE6HL~6(1m&k zBCzV`OSn0oG^*ApW35oBe)bywk-=_DpqQunBPu32ViUhR-eY&F5Y!9go&!$P$yZw$ zu?l9sjLgiQq>9F|uhDXEWgDM+ll>e^%e5PUE1cG2kWJOQs~p=bYPM2qm$vzB)lrks zYcO+L&ke4#@2ZzsY@XY_c!TA!&9gFEq<=V$MPysoHm0nkMG0v*%CloLo!lPG9eV^F1>vK#9sPcHrQ!dYS7Y!)|Qz z=DYz*cin+0{@sx_yuoGB?4b4@WkV|iMt3FEP>Ol2;WUB_hb(=!tq4 zRj$JaAD@=iX6mXasFK#mC*~%ld`0VH{~^Ev7>Muc&zo{m*H@E-y-Vev?qvvoPv!`f zP!AZzN@m7l5@g&g)|p8bcc{%%!e^TLuD1R~%_0+|2f~!QGbB{LH@A-D$iY48ssT~} zv{N8*U2K9bllns}uAw(ZgjB$^Kh6{#lsIKGR!WY0t)CAJS3{heY~2Q8&z!M5qjxi-d~jWSy!l(2EwW8!y)!U&U< zb=IFzgL|PrKdPm-G#Wp&PMd2`+>&$DzoiTMz+i4~^k ze92~w48KVx>=eJ1j2nIH;l5PP&oXr(j>Pjix2jwV4Rc$@ZsK-_6H2{2p|r^a<9!Z8 z*$J-*g1lx-lT%hkX)Rl&TRnD3AsX@VD-s<9Wu6LTJe^kek8fVzhUaKjF>yL>M(dmG zhq{1*Yot{iQ%0n@Y_Y*7ps29Jj@Ne!ghdFPPPt8 zorr3?&F$~=A)*zqQ+3CUakxXt<8e4gL1$_ri-MrveUS6=(G?$!P{Jic;2{h7p1LrXhBB-41(Z=NX4F zIB#t77=4l{ze&gvek(U-cxDW7;iHk7m9NK`v`gue=ntmMyVv;+OM|3jP+tk#=l>I$DH@VYsZXw%|_h`mnDc8^ejKepFGZZ#6 z=Q}!udiv?A9X6k=Ep%Gd$J|fPp_EBpoy_(QCy_BnM8VWt$2pRRV`I#z!Q07(md$+J zWPg00(_zzcy0mDnxubWbd^h~+#%GKE;HQ*MCO+70d;IERs@5=9u;bZd%cO1>;)=!n zCGNS!;>r#?7GED9mz>x-9+)&Onio-l9Qk<+j<4v6R?P_WY>7lq=|Sfto~eg^2zuxyJ)Wi#{GP5@6skHlj}-VCG1=kr?E50eUOxqB{- zvbKyV#w-pR-S!fd)IVX0m~aktE^sy*$nl)fuI%XEL2vlT=`kH2oje5wB;~B@Y%0{L zYcpI=2nNpdb^UMHsPXR8KH`#kB{C2*6cwIXYR$ziN#W|4i{`xH4n;SHih|c9a%0aR z=!>&EU*Vd;tNdN4NLO6FAT!)7wt<~~Uh6y0H-W;dQHZVk;X24~B)sP<6cBU9byo57 z@0;U*URhuTN!#i0Yo2n%K3W`^nRZ!5U+yh^&0;lf(2iL2lsOi0HwsZ`#ooXRGHUi` znQ=Q!>woLE8AoY0lxMj$QxDh9)v4BN?j!SHP$}P|g>a92aaO1}sg&L=5+Nl#*e%$q zzZBbwlPu0n$WG|v0vA1MB*gkxr|#_8y5_-pIbyt zhE_S$%H4)=z}Pocv&uNd`B?zW)3Am@%Q?Ob1_xsm=c?#p9Ryv4%~~|QaLDm1<`;tl z?uC}Lys(KL2~x*?VoM6=t=jXJT)<BjQpX(8*7HlVLrCSPr`vZ zB$)R4wqV-_=}1YLDXPsB7JGC)wGGxz-YDi`;d&~fWV1n9_EPAA3EL(qlWo9JTvE;m zDp?1!pDkrE?a5|wU$haCtc7t#KnI2+4h9JpQH;T4EmCNral)`(oK+P)f#b}1}0q%E?kN-qx z5_;_IUGfnE*f$?XG3<|8S&ID%6%~ZvWSNBdCRP`~>jmGh4PU<+Q2(=9>b35@hXFQ< z_pFqtzHCfwyCgIJzzc-zC?8(M)4UQwrE}fRLw^J>anM(wKbI)>o9vf7?0)OLS)EBm z`fx#_RO}>peazr3IQ0ZsFYU*Z+B13nmKXTDVYdH0QWmVtF*Kw?>wGQ~0U{nAdALHG4Jb7E}#9vF8ud^9O@#0PI#-(7?oA~?y61xIT5r;uu0`v zS`eeu?L`F`y|}(>WrN=!REP@X73Keq_jwVaj#~5j#;>Rr+T=EfTs=cO?b)uP2v7p? zH#D@U8z0n&z)Gm=zU&kj9{S~19P-U|{tUejOf$M#r_#-O@!rOjwW#GA4PD?+Sq-pR z&OGy(Dp=I?=aEqhR#b+t*Gz=LUxev{cVJ2gN7a#fT++P$H49pYUr=VMH2gS~^>Ln!c~s-?Je16rbBHu<-BOLcE_s>D)k^vrl{Io95!^e7t7f9R-OF;M@^(!i_FW#50$co?h~xpW8%`YkStm#nI(9K$?8EYn%n?G$q3`ZidG5wn^=v$a>=iMW zJ`vL-Pbt6LMxhASZ(%u4Rq}NH`DXJu%tGeE45CbvfBr-FTfIU#jJUa@xon2l;*Y*8 zerLnc8_QLC6eto9W%_KAlTh75>xq(vv4A0Q(+2mx!nMi`c9B0qGHD4nuQnmX zeC)=}GFAEGrBp8x5h&y=A6u#3`Q_VFxru;ay>3K&0qILiPBYhbxjZHH(?xV&sE7sR zTo*FTkaj-j@oo59d5j3BzhRlqr17ZD=t+mk>D&l)?)e$dwu? zU*dAzm4ft4C~S`LT`ICo?d?aCU6v8JvJCQ$ zDY3bGFN(DGO=IoL*wrzWI$p`f1H)<_@%oShXr5vxn4Ph&@6|&HV8u z)%3LBWftCus&B6?UcxHbMpi;?3o;;Wv?2Q3W9Bt=~?OhM?xm)w)5uv zNr{q>v#^JFCYxSbN7*l2kI>I@c!%*#hnBv9-51*;-!-ew!dQZ>fJ+NGxM zv3ppZlM3b(`o`XTjK;!;3cM}L?3xC+$D~cCiO5cJboJ@@YAZuYpqd_JdP1EytE@+j zcu?5WigqeCBf3bU0B_L;X+zzCxwyzg5EpZ$99Mi%6r-UK$_`glxt3b~Cl(+{a~6|E z^)TA3bFPhFOb%ZJ-|YMKffr??+Ma&yS%z~or*34MS!8{RY<8Q}YbGqw~}D6O73(~8MW3nG=nD@L!2$W7}Zg(KKL*J5on z^SC$@bxhc%rcqhRI7f6Os7!yAk7O&T^|@qgE;Xoe7cMw_RhpfBZs+g3<8azHV#QXP zoq9flxBEb3Cujl-Zf?RGXQ5sFP20`ftH_Y0yEUS_llYIO{JOnVFUDPdYf{%jTWPmR zaG+!AV6Fx|s5{4G`m(dsETryeI;kZyie>BEPInHuBl^LjZKS(8;HZ)Nbqa`a`BN00GiV9IXK8nK8b=|S_cDvo_SK=lJwCKde z=juGwY#jc`etNQ5WD^6~mV6|R!?BYmG;pOs;9w5seQ&?RbWuXLB#lbvE^_FJ&SPZr zQ=#LIP)Kl$NJ2S>Kj`N2w3K&|WSMZ0^=8Nx+b~U<^OfctJcr(*p230?qR=sxKRbD& zA0!{YERwOwl{p%K^T<4MnCntwwP)VHv#&HMIBZd(u)5A<+_{S<+lq`ynKs+mGSW0A z?e*SM{h{!9W081=ltO|ASD-6bF2#jqatF^H;t*Ctt&Ij1ijp_{Ua{7 z>qwo-jQtXqSG9?e0V}hnt~)Rhti=GcMXxv5MCnu*_iRR=_~F{fJ{4k54E4TSF_*@h zLBehfxj+i?#hEOIr67Vi{2O@g%W|kcKGR>_d31^lcKWJHqyFm1Z*ZP~xS292BO9MU~%;`XG3f`i1bc=JKrjD3Pk3s+D zZGm1d8YH1i-0ZdeB;%66bf>*Mu(?5p6(q5pxF^TQelehvb|!!FLU!d;%}jnZN^eU> zL1BGnw_{KR{crSqyh~^LCw*CaCofor62+`fh^}38$=JmRzGFz$<4(zUQMc${Y;x!k zLE~z)A3pw6s|-0TJ8OG!DoOEQvlCInn?D6wZEs)xwBxwa%kD6vzW9IJP2~T6isEOL zcesV@FJ5Gj!{VoIJ@mip;E+-iYv=8o+z@Nfsb^vlzOmZWAJ#+|6eAD;Rlx}kzK2N1 z3H~HizGPt1)b<2!`!mBJcYihY{u_0;iU34Yyhs(EoSE1zTL4R(a*Lo>!J+@_etPGA z-!@;;CXzi5)0!GTU}&H(z?ym~*H737W7U?MnNGGqhKw*pk5z|-nTf9P^GNno(M~o+ zN%KHoVowF1Q>Zj-hj}Jz`$?UxiDvPbUT3>3kh(0~{M+4~(Xmd5c=qJo#K(sO0LU!R zx6>Rc&u!G}^AQO7{0lxz9L8IZAf7AV$ul!D zwOE+xzCViPVdi0^Cl?X$4tjshMP|3##l)nLk;>hq1?NZKTLD?Gr|wzQ>_c`#eNO~r z-=6dtDA@S7rn0A4MGMp=Tj>>3w?nf!BTGo*chw(zUr$nymJqKpGZ77aI%*5gH_W;R zaHp1!Up&`rNIeOCqJJV=LKnFvt2WxVm)cIfbfY5mnv0rNj9+HFp}jNjV3~4UEo1wQ2~MML3&;w66>23^5MN>SEeFvX8mM z&CZFChD^j-1t$t8cY80@lwvL8Lu9Vs>Q{m52p#iJ5|VXhS#K!GqGJ5w>5y_O9Ev<| zpCkM_TDLORUMm&^-Nvlt8nlRlV9N+Bu2CGUrXuZeow@UVoPy_K|$13|X}$`8wDUl|b^2do1#-%V7YL((SQeHDCq>Rd~=9>+-|KLuO03 z?ZvlW^JWUuEIRp@iaQV4N2rW(4X0|71tUAQjZjSxiJRL^(cKLEKAgGZOVu?jSeKin zc-~zVRQ{*E_FqrLcn~f>w3e5?!S=fE=eo=ZYG#Cd3>TiStrN9oc4?+aSB10MhW0yS zqPh9{y**a9SzW9N{QLU7U{}mLbzotynLd;2_YREO0NSo%`E?@(m@SbnyCM+ly@A$T z$R@rB2v}-Xg*k?-*rd17`ct;0jL-L=7V^G&e0;rocbO}>j;?AeJ@4FM%8aAK&y^y4 zj~)o7a;Y~*VS^&UEB4Iis2q?Bi8($elh4CDbTkd_bk@nU2HwACo3diLs!gIEk4Hzq zG(BRWvX#5>^MK9yE3gvU5ix+sNCRD;Up{_JPYLx=<9kdYcU0=cYA}4Hs0TGoqzcE8 zG|D{#xhY>`3#@;w*}M}WTC_urgf*)C56dG^H_zGh{ub(Dp@oWoz2ZI)MEf1r_%ENVi$O*fBCe3B|Y;^zl?+b zXP=>Ldh-ekGVcrihd&e7&2h)S(VZ`@&T;|J;kLHXMNwM{1@qOb-)wsvmg4)=zk0)k zpsa1an>-+uBhC8wzpag|e%en)t}0xGJJ8yQxPPpd}^og!AwP6`X?cMvzwe^)D*`+E(Jf%zd>it-wet-{@E$t^v58XFy5Q>{8yLv zU#?TzcqTJ>h>*HV zz>f-7@R6oAO*w|kOCn*Yt)L-);{=hu?G{o0?9{9FK2gdu&%16ue@KnLPRmPYmb$MV zm$+>=+b0b5#U=Fle?x_3+jUiUd4{54X^GcLBcO zjAsb~5%GB2*C@l|BmlO>b_*P4xI8%WSr{n(%NkiLe$-@9o~K@-jr#Thc)YxbERS$f z2J#6g|W|M_zSm}cNn=DI+&K{Vt&utTTc z&(zc3PYzaHaDu$M|F4sFeon(B`ySk0cS^>w^mk9MUib_52`AktsheMTUTx(Gs z#45H+`B(uJ_(5&Fjp+ZnIdNS+MlE)A3`f^MN;6nR;LoZqBy1Tcc>m9}r*|l$Ew;(t z=Pfrd4EJLr(hY(=K)CS->M5Cg$9r*>0PY_$zQw47`hSEe<=ymhzAAi1-RyKuM@F%W zx_+?*z?QW$2yJ@Xw_+D>=dbhS=BVSxdek}myFHRhtpERQ;eXc_P|b$lyJqV}M(lzN z>LQ~p{PvhzzyiRwR=R8Msc-9j@601vwJ zY)YK1KR&hF#hK5|fM{Aa1i{Qbje0$}4Q92y`6jdJ*+%SI@Nh_2z)56Pd@)Wbuccy|LWA_MxRcb>|nxGCYSa zaUEC&%oSe(Uji#1E!P>XDx(q)bh7y4Ew_CoR07w;@oY(Ejw@W@q6 zI9IM=U!k|*KCbPX4ffehzt-SO4eJlbh$zc|02$d+tFdZBNrw8xCPUJl~0q%=7tb}k%xaFfd-$_TM692d2BApdw{IyJMVfiXz+?GE!=98sQ3 z$VD)Ku z5%&BxR2TK^k2ypqK zP2B^&OTmHnVpe)($ml0lr2qyyF_{WzV}KT2YCAG*jY~m0(vr|YH(`2ik#p?zp^k8T zei^DG#U_ywindr*e@m=krnj83x;Ilj&}A{mBgWHgM>7%n^{&KJar_57!!G&GK&&`} zdh!Xl&Y3=s&Gc}6wDLvN=3-5Lpu^Lqa@~e9Ph2?cZl%-)sPDLxVw5o0P}gx~lzUv! z#pF>%KA%3kSyIQ_U%OTbBJ`jNJg%adMrc`3Zw`w5da}q;EGWOhi(eyhh+VdUt5&pT z!=zpQO*_b;%uWr`gMllBS)slbGa%?=Vo?0R_aT}W&JHJd1)Bp_;6SDBIiOKYPgnRc zTZwfOK(m?CM&-F$RxV z_y%ZHS>B+Q|8QCZBGx*Nl@Lv*vB7!{_}nNschlVBgO!Zez-$2FdmYLii1oSCL_Sh^uszIte38~U+;r9=1-kQn$JoZX6Bcz+IM8Z?)f~A zl=xJBp%b4jle;?J626 z^w=@(!YC|w)LCgHZqRZ`zQcK4k{TMRa0 zHFeW&m~rtWN}5Oq#XH8RsxGsr{`7QeNB4+wmymt=aQbJe&(FzuFLwgpREH#&h?#G6 zObug9tY|LFXH;f_n!0Z7TxJN7U5Edaa+0#?MwS?UK*?b`oG%MG&3Ae&HeE;U#!WBJ zfi;uxJ=7rjXb=FcK+W*!#RNpc5l}~8+>uFOY-K@zs3#orh(Qi3% zpoLgouX=P`Ap}bOGP|qaF_x>%--4>MS&d{0;XizrH0zmA(b7yQnZiCYM#)7tXup8H zp)M@^p;x2uJE>Ppel6Ss+P-0l+toi=7iXHU6EzV3+F89w+;=F0LUjo6`E49V^5m2@ zLLJ^NllSGH?5#6d9Bl!E3h>gHsJA`D4dD*8jz?5$6j*MoyjpfrtJA7E>|n=RHcw!# z-XKITWQz(rkiS!kUN338k>*mX8AjrZuQjN4;=Fui_nOr>$fC;5cl503DtIsIUNY3iC1dn8FwHXo~G z^kPM&8a)U^o`Ujm!_0EUDh1!1Hr$Eh{!#{|hj$4vy&HO%-jPjVZ^M%rDY`i%FdHfF7g9tFCc{eS@UfE)|B)Q6$s@ zYR1)VaUm;0hUr?&ZCR7kf-z%(%;kI5>CZ))dWmvyyveYq~Z%c{YXY!SAkBbM$x zVGcstA;Pr_@^?Fw@vYN))RmhHN5w$1K!}I!^{Pk4q*e z#1BPV^P+E}y>svXXJ&O&kv(8kVb*VlIJ&<&bHwWr&UFSX2BvEda;-cG?RvcyF)xp| zr&My4a?=mE-feGthwz}-65C`AqYe5}y_QMB7dx=IB;;ZzF|TtDu%BI>$yP81beK(6 zX#hzox13<#Pw|9kR*nJyQ$?y;R~_H`ED39Cv%?~NN?YauO+^+07V8eXW+TNSy($)S zwsFKaDZhO5O`@~Xxg;AyiIHqAePAJoNdQ?JO|_TpTiiW=NE2x~!>hjZWZKo^LLVwaVjN{_WL z)ICUtyci|>i=2crWQ>7)yhG6VK~U$z;qMgV2g#)&<)BHz zFGC9gS(ECs+|IppPu33Ba$)&pRA^{qs9J0{V_*`8JOnOd)zgu*&Q2YrYO6`PYOmtD z5?G;H)ox09@<=uTKR-X8%_&d7>(aY?FHlf_+#iFsikk_)XTQc2baFk|?>Q6}(;0HBtwG1t$a+TW6;w>+mROKg~ymFH;_wDgVR zq36!fp)c328Gv&e_arxLHKyXs>>jXd_@56iVgvYamD5hRpq+6qsOWz(;D)RkF^mVS z9pKy8RwBbaX9%AEHq6BW^JRzmi^ON#NsxAjFrPe)vCjYs&>?3C-U-~Ch_jzErcm=0 z?8I^?yM=pp#ks29rf2k!Yo6Acsm>aV*I|0E^?^iy**H>YJzJ(gVfuK0E~sd?Vl>TY zX0K&}FYP=`v4Or+G}!%1z-E=)QjBndhSC7tgkeOBN}OEg(1GGL6$HLJb^Adxv#qR` zQI97n?$W^29#EZKpn+BPSQ|^<$|DFYD%ggEJ}j)q8#r%l1<+3fQ-MN3^nrrZgVNU^ zTToiF5Xx)B822!uIXYC2_F*@9pI5`HxQ&#cYr=#S?jIgvq1C^Fo)Fh*7w}w+WNXAY zn7!;dSWI!-ZUH7YU|8NpnS$lM_u~zuVS53Pi+YoT9&;o8o(bKp+ih9~G;cw|O`gjI zl4S{P7t1!l!@-z5-v&NOMv1dY=qI9ql44@+KNcOy*{}f&8Zg)@gY=mRIm^xMm)6-U z%yRGD@`hD4oGwX}nGZSrELs)`it7WUbStCrGz}P_o}F#)T0J&ThAP?0MdYchf5L@L z3D4|7VYhR!=xPXXE7^(8QnG#WV_hD-RbI_%^c*{*-kXY7f!dok$Q(ovW zEG%IYzX89fPR1%lw49zd41?mefvF9(J^00eCvT#Ga=|G*UjE9MET_J=5Wi`PaCQDZ z1DPw=v={+lR-i3cN|h!1#wq$f;&tu21f>g5JFRULX1nZAz}`p}dza;r^6$IX8)p*K&hqCEj~OG_-iyZ=an zmwD-=%%j;}=o*?O6`(VYTqjP6%>iLB)J%B=F!C6|hkie=3`(3o{*KxR6wDWW=MnlH zo4o&!G^-JW3F{+bE#xcz`sKKC8*8&ZB2q8>3ciOHO7JIM_B$~8I~Wu+dW83%kj^iA z_B>r+M&QIM0{16);PLSWtpGQSY{8ZGmm<1+(CY^6+Wmj>6+DpUUx zIP`c*MYY}DN~-AgjGVd>;S#^Pt3pBLGL%XfI!{oUc3)X}oGbwRK zzgt96MD3qP2(dVBq9Iw@T_?)7I$}k;jduN&)_@&zx&AU~z?f#9>U~pw;^S7Q$IOP~ z>*_2yxl*MRXUKCIZ zr|ryCVFFh$U_hx@EXWun{2W>iJk^t5S?vINV;Uy@Z9tMYRT|ncByUUCG=D^*#kT>8 z5SNh9DA((rJeDZm7$u)7HZk+G!UvJQ*RXkD6KJ@wHQyOSOM-`ohij`l7<*?ZSE*bb z+Cx9bk+fY{h%zJ&qBDO!&)VH@pfyrRq}GMv-f9%u0cY-Z>g)`0{N5u_BT+%j?eGP7 zj46bYZO0G3|KCc<@yzSk`hu8k5IUK(KbcmH?;KKdjPtP@6SLbH(DcQ9 zdN}B0sZdfI==5k+^0yn^9YIzqgLd(=moI03U~GlmT8>F3LR9G|NG?BfmPaZ9vbtfH zo)Bh%dfjxHatuRr5|3@U=S;E|N7;nu?Ch=9KrnqVWCBiF0}XD+OasQ^;hN|jHLU%b_855E>#HXd1f97N+7X7%)tlt34vJdRb41_wDq%=#iChS+oi`sKFIY8g)JQ@e?bD-!$mgKVW{WrtTXvA8TIu@Tt=7=dO zI$oH64Q(XugTRQZ7x{uJ9lk03I-*KT&`A|^0vgQbwe}Ozj}?lgz@%yML+J@WJ4CC% zQtFdNnYprrloV99A@~LynD7A@zcxv#^MEj*&;rYC2Ef5*j;row8>mvHQ(hr^Ko=DA z9s&C?1kZe6nZR66|Kf#eON?fPtcCXrVmuG?}~ zN?f|wz%}(t#_vA#&)3|^;UgCym(HC+Uv4gmisj91Jj>@Tpq!6g5A zcL>gur%Ed}ye?5fPcQszBG+{p_O9 z^n=Iv%Y{;|x>(h8dJf3@RU4{2I?{yj3jE!5)Bzg`xXl$IyS= z4CgCpwLgt$r|YME_UsuwJ#^~i(jr*H7VB1Bvqc#3nkhp#J*8CKeIi$}c#Uu0z77(( zB)w>-S1;ygf(16XEyj05(TdK6*7 z!h1OXvUiLZ7BFiBkc|l6$!vjy!a~{oXrpC)X(nmP`L+?m;yCFy$`*iA2)bVUl+eP< z##Enx7>QRNnFaJ}UsU<|=a%R>U)-TZ3!RDUQr_p6JGun|wzHUUb!KWsDi_4U3h?sC z)hclrc1$#)p`t1@+@m#Z7=apPnF!1M zY?Z1dWdWE2G@jt2Kk?T(!EKk_NVb&>c3XjNU>WkC+!#W*ff28ycLMGkV~) zL;z_KFL4lk*9U-+_6fmuz$6jcQ59>^vYL$>hJBheq?-yD+@PBev*_UWxocEy{{oO2 z6?rI@_+76?I;cUyzg3kG@`FDL zAy)o_eMX>3W$|ts_SptwpcX}<>2^6D1)(I|f2~GQqEsh~SO4aZ)T#7^NBI9pm;1qX zrGTK+KzCGw0~`5|BG&ZJT3)rk{yzBCuk`Go_Qps0B=8u!VdqL?{bw8lM8O;a|F3L+ z1}CVC`s;7BhF{_(kOooe>{$y6sDK9Kbs&rqU7hxSgqZ)V70UMO@A|Zh#+Wy~?4+ob z+R#5R&iw1xQ5wXRmi6b^1^**&seC&5t?&K^wAHBa`QImcK;kifH4a1m^;^06*IK`~ zFzPr+cEt3Py%i-yqB(oLT>96s1C0ut15iD3w5jgS{85N!Y2?U$x!?UaE%wpAI$YYk zWQ>_G2z9L+8`R*e$1(3_C4e&f>Gu4uyP;`hed8_tol(^I?>SZj;w%@n6R+n_ZalJ6 zr$5X%!Tx=$UfQrbI9Ri{#B}C>)ZUg1z4EkM(7C!J#EfrHqO>~=<5*;(S+I=cm3n)` zjVK5KH=Bm;HQz-P{#&uHSAt-}3+q`uP5nI~Rd)dVvr2 zKdS;f@orrEgpQ!eSy2dpl4*L1s)iGw!H%^JkUZtMI&M;>gMJ7{ktohG*_uTzLBiEo4rC2?$7DI=cX1ff7jwx>nTdeS$T#|Q*YHVFs&n9K;W35K$~c~ z_fQ?=sSIPP;0&#l-b@sLmt)4{s}pg+Gx-EV*#zLq8j{k!9b+wjYh#y<>FG^n=7GGW zpQp!WEb)Jb#rSnNwjSsDnK8$kSozT`>qmeK1-d02(j2N~h&H#P+?TY!lbUT+a31%46P;{cW??VFZNa9bq+OrewsprT=~&0dn{;kx{q}%h|q~i1vwgOE<=5V ze8+T3HH)~aJbqe!9h8M`*sk$5!vb2%v@?bjB@@V7D~Jij1tO7p$9xZH==4M?dxF)l zz#`}1=LT#6NONaupOV00R^w0N_)wbGhbmZDSfTU&=43P?Z?Zw^P}*m-<-YHV?7`I_ zhsldrBzwwc5XQP~lvvzi{e;rBCU9#~;)ni?+1iD(~LW0cc2y%6Dy&vya}oX?>C7nW@YNhNrj2_kfXX* zHcnvT7DwOVi2;Hx>d^1g8i|QjqGA!YkIT6!Bh?Kp_B+??(%*t5XDNiy4zgpN*5)>b zB|aI18(XB$oUQWLN|hI&uH&qc5J-J_ zRa6cY$-9e$jMXFB3c$x`mDHfSGQKq3JnddKINjuFVnwC#SjwZ)A{ciB)6O8#5|iL4 zy%HXR)CdOh`$5PC2{BZ!=9Pd8K0!#{Mb<4SO536~#zy@QlJS3gw?NKFC3zHW&YI$g z(?XtMPbPE4oAdZvc>aCTT1hSk;aBA@UUoNTHDum-83ERZaleHU1Gzd*a`}a0pFxei z$KRB%Wo>2F_~63r%-^*G0QUsOpdNuZVtkFnV)u7zg z(8Ih^+`2A(hPgzZNuA(rUwVALhW3=pXdY@MzFS~_QO!A$S`joP>TpDkZxNtaWSeYc zqIY;Ly}$XD8M7jtCEw!pyYXV9knDHq<#OZ#P49w~)2jZm(rTEoV`@oG+;_>aCKnj{ z3ToJei}y0UGv}8#&cAuHbmtKI3!0Uwcei6kFLFwWQ6JdR44BIHPtO>XCk2$`Pnd)9 ztSz02#ClCRt@pA}et+oJod9M*37Ks9GWqHM_&OSQoc9qCDbf_qff2##GOLHp z){CYDG&C%GF~K*AcA^rQCCe8I2hs8?CeKzB3li&1l8P9VzGN_Cj?fpxC=ZmmN}9cAo>^y9LnQ}37ixv(Q8q1lT;FJnY@zUn+8syR#7-oYGMim6C zaI-#h$P8uP0L>KPjT;yy%qwb2)t8#l;o(MW{e7e+0YawwbNP86>L@q5JIU|1>BXmC zJg~!6un4c_hDSuzSjJ(tp}Loa>(`EyGe)RG?C$``MOQ})y2_?IxAhO38&T_KkQP-E ztlSQt8?HQoxBG=bw6H+@qY_zE?R=J6-R&xA_EQGA%)%b~xd+}di4_ztCSDluOj3&y z>f^*af^=Bk^^c{PH59h`1h@D zjPA!ek4Oy)F5^^PH|Ujxp5=mW4M`pBr==xXC_Z%^OQmeCg?y~1RV_nJBi^kOAJLA? zvE3_`zDf{0CIqLk=yp50{n>FJ4Lk`Eze;RYf5I+Hy%HjbUCHsx#l@_Yd7HzkLuq{n zL7}#jVxJA}P}(;Zp=V`?kLneP+Uhz9%8a5C$j$la=gV}U^2PN zZigFQz}2b#tjHYA!8KK?z4lA=UOyeFN52+XVIX?Yt<;8JiGkefHCT zQtI)0Ybd4uW^v}{$Ik8qA7YZ22k@dh2M4`R(uCs$3=?z6?T5ryagvI@bF{FnMtw70 zSCji{ChH|k=x?un%H2{EoDiV^UCn3%L3W@irjb-kZL;g~xc95mbxgzC8KjlzEUlhL z2X53F)#x#5{kUx!3B;R9jHyZk*Ocq2F)+H_DEy@{qGFwQL+=%qCTM;JJnZX8p<6N) z`Bn_G{{jvat!?CX9eS2Y(nc?9fbn7*q%^IT|B zuJN^{^E$VN6~*kWd9|qYSzE|f&XS|+w#d4ly%ZO{cuL%*H;dM0F4wy;yY+dFmu=ZS zt(lvnH2)s^`%E?Za!QKlY2fia-0oS{*NwNWPoCoTVCn74L6>r(`)357{l@lW)>7W? z?K6RAX}Pp!X^UR3T;;#g>DB{=vp+3XXD7e^clq13wCm}P*0Ek&{_ZvmJ*FQS5N;Gz z4Xm_2ZZlC;@0+tZOLq6q#>>-ku5$w2+)(3_y!q$L!u`5)k0u$;^Z_;xyG3|H^Oj8H zt~jwFUgFNd1t71P_Zk~=UYzL2)(kpt>yl<&C*%ZU$dEEn!5?Dobgos`IN&dD`Y!y& zDWH}EzTLpJrL1{x&htE8b|4H~lScvjKAIA4w-f#yM+mHp@mZZ(`#hU%Z_rMQ+n@`^ zcX$?VcxNrBIP2Hb$cH~?=G^Z{h-v`W`y!QRmS;`9Cd#9(@YJ96u*p^LSKth3t_{2c zEpw|^|LreZPiL7fc~IlBE$yw*EjivVF^@pK?mK6I*P?i@50(nMGPUp88~fbdGZJ2d83|rL-FBk znJ-nnS0SekD#&lVwT5l3RMk2ag`@F>oF!EZ*G~E+c6ZmU%&4^fBf;&@%Q_EfiBzMxBuVI8moA_x95*P{#anqb0*UKz_$Z08RFJ1 zHh7l&Bn1{H6Qn$SaIJ_>GapXPe0v%`LpC^>^J}G=Xamh?coJ(Y~NsdefpWb zeFFDCYneOpA6(qKxMKSG!orgYz%t`)gmBu)yI=Rl^V{3sipv!gryYpw*{Q1+$P`BCa!R&izXui6ymKaIy7BiCyrg3R3~tZxH!FXuZ^kpH{B zAHT`)pQRZXxgTEN@(0F*fC4D-dI%fM&SVf`0d?s(nSdom0}CUtx8cyl08C8^ zjv!A?7*#$RGNXxLGFXT#+Fo{eK!G3Oga8iMQRl#4gL&FaIgtm=8G#e9^>o;J{jyjm zom}6z5+5Ib6&Qhm!3}D5JR$>w(jx}uU$d%&U7p{Oe`5l>;lm$E>Wn_d~0b zlEKSblgn{~-=Cg(dy@H+?q3Y2fb%|D=ga@1uf5b!aq~?5B@P7V%i*(U_HHvS^_)H) zbs=t>o|pGG-3rn1Co|!Jw?>hAJ?-3^6Tn9|Wn84qEuIwpbiYuh`@-+n;`x>+UDhJ=(P34trZ3@F-V<6CA;%3l$x>I0j>~V;{UT{YeOs9wydBJz z+FR>GBiMBt^C)==ftw3JHO||FX~BE<9@YQd?x)uup=S|9UOCTbMy(t3LmtC=<)oY+v3SOf( z*oz9yjrL7cgPNa5#i=$YyQNpR9ZVoUh(XGyqaV7}FXqeUg-sB6T;fxoHiMUvf4q}A zmEsA%^JY?&dz&FYFVA(nj)I7_nSf%PdmExI$jkW?ddN11Np(9rU~I4QHtea|1L1PH zv+_9%b;&6Y%8vHB`Q8FrN>!Plkrzb{qUX|nqJ{o;Z+ z_aLz=C~>%&W}}2IG@;fBUu3GYrB=!&YU(VgGx=&f)Tc({MyKR?`7`A2K-u- z7rhBrg8umP#o|E5U|xw7Sfj$XBwP5evYu&Me_Im*tu8fqBVB-tFwRO~bHOapBqGq0 z@s{KcyRh~zxl5hSJr~}jzC8S%YZ-tyXm-kO6K!nXptdjfx8Ie?5ZNw+aTl6kJcmZ{ z8Gh87JE}1-CGz2^Fy6bn>+OH{NrYYGaUE~kQq2e|KFHr)=YHt`&pZu@&+GY|6sNXJ zBnQ)AYaVB~_iQ4riUxY@m@PI8urp2VZ7Qq0DAm_vEHW${uL#C3TLn1p_gT6!)p~UE zZ%oG773*Xunitt_P)TMQI;{f&{0eR1;o+(1^#Z-pO$F!-JNw^ROW%DWn6;yqpl4HukAsH#q>&6Vt&BEHTFTpY}&Sw+fOyltHvPjT2{S3 zebk$3CHM_u*_9|LRRPZ^orLx#qt&wY%+M~Q#i|Zcse$1S8&4>dMmTdXU(&YUn&T5* zWV$=V*HAMZ^>xHa#%0Ru2m@tjre<{AOV)}@h#lGhv<3Upp z2i?{mZl6ig7#xT4Mw5-&d9F$HrwCmW?5l3w8Mu(ZP2S}qDQX&RQ(4-1qQZQc$}VG? zSG>wU2HS<)XdDhC#FZLC@UTPq*-BOVTUH53Kuzl|J6KIW%>Z4IDKS!RDD> zMf&`>;iIu7qyOodV~X*Jj+Kq+fmP;6UZkmYI=c1tDOU9TgZiGPqiP5(EMyunTcSTQ zH}O3-CF*P`BHrciZ&VO6yoMy}SZbwj@T*d_f9iGYN!GO5B+-&p6Z09=w?sxgrY3Z5 z@WBOd{i4CjXkRthyBG7ZuN);Q+kC0EcawDQABHmM8iF{S_Z`a|e>^rV8!So*%87=p zy%Fh@SvwUYZ&~;J+X*NI0v{ zWm!C%h?(!v4_)Kp$tt&O-x#GWLYubv$VQ(|hf=$)+hn18>7J|N?yfTmC%-sjiVT>t zEL4d<8zzr(p*cCovdf9$+aAWxAEt}&b(sD|b4!HA2zT1Q+{=UP2e7+t>0 z)ilmP@zsT;{-aqsRDhpPlXEUDLAg?gL)x{}tp4qd*M&EvN}yv%g(pwmj$8_+_Z~_e z{h~w9hMiV-Os%z0IA7;R&%4wbK_N^#PDbOEVmL7lVrh_nMr$b1IB}wjg$GflPYSvxf(RXsc%f*nnMO#Pfvb0H5wd6+Q^UOschjy zluYUA>=OgypT+el`x@IockZ?)s)q#>YpFfcbua(%d12@Xm+a5YJ zCA{XS>99bTNdL-=G`EkvrwIR|Vx-C+$~bX0KxWuZFBf{GV_w&5hK}SHdUih`oQA{> zU13P?{JoP84h91WH54Tf{HL!N9(71-ELUVcckZFbY=u_horN+CN#VySMg`xw1xNNf zJRiLLxpmFE_T>hi`n;(E!ID*7l(^b;NBKDu=0=F% z56}DFV)vH9vfFh$?7zrE@~X**jOIJ4yo4|B!lIl1bWIZeuqquT*-O$XI|;j|_fLF1 zowUU!g1k>J=fvOUdo|r%juj87o*Qr5Ou0`gpQtH<8L+oD|DNY&-#b{W^K1PZPiY`N zhGbk0S66S3&PYSQ?5tML<`^!{E}I3uE3luG@_R6M{ApNB*P(>%pUj=<09>hc9Ie%O zCJ}>6HtlQIJ%o-r@L*QWPUupMz2=DI4{++ph}P=fR1 zN}y39bN-7{r%p1mtO+PMN?MdUEefOuL3YyVxf)5&IhWb^ZpMaS_Afr1 zPg2%2l6H9xUHQCkXA;oAur@TFBzh3T}!c)Q^_9KUKt%QeS(wBP3Lq{S`@%|FZZP*nwuMH%F_;t zOtR9EL)6zZxyyR)n(x-S$YtC zy_9>QzRTJj+K{er077D1;{U3AzAz#eOaa-cg%yVxwu_BBB@72{ypeeLXmw^-`VVm! zvMgoef8LQtlJ=wimXDn!Jr&`G0(7`>KERKq{+f`6o0K_(eT3q+OUL|n7);y2X%@D zwgyW$qkE8F|-N>_yliI?sbwIE<8>5^PHqw_AAf}o^@xy6?$wX zgANWk2wrfS>)M@nWcn&%W+wQ^JG{C(L9B4fdXt|a>6ebetEqY$b4ZUa_Ara_#ikTL z*w4!efTBmAD+m;{qSNr~MX8uI;lV094aDc6TX6?=3)gWjWDKQ?Rf$e*AIFNab^lZ! z^1i~rBO7oK>JT;!+d*#96@uqpu-^&EIQ`kwSfv>?f`hJ4?_lp#s?d38t_C#>mwd*)u2T0T}A$kQXOyS{3X%(WE^(*Efx~*grAc zVoOSgFI7hBR_}T4-gTd79~s9Ub~Xe}O&FXwhzW=)28p~1Ptz%~ zsBAJ%HxfSi+;MlLMPFAb7%osM+{oXJ&emZ~T8Azc#0doNqrnhvE$MZT;q# zO6hysA0r~XORZ|P2@8%g9kpC;RF%#E(F-{|%k`p~o<6E~t;+Mvk=~dvuz;$Ked6y> z?hmD^C4;IB%Q=uEN7(3>ZNf6s&_kQC%M#RIdSAipV%M|6FAhB<-=GM7_@cpZhrY%K{aCx*#4cI9`0;_S6f~C#TV-)FBJS+Bd z&ilOb=G}ya1SC~-fim?qrlC9i_V&T_r%OA z^Pv4=g!~<#MBuwbTfvNtEGmNhJ|`q6rBDZnWc9%Hu@e>M%t_+l;g-e#rH%1-PF@q+ zvY+NpZ%w*46-3i!NyfZ+api`P_yPmc*keHrnwQ;0&T8XrliHE{mYHpS;;#W>INTXiY<8z@L!c@F66Zqlt&tb5Mk;#FB}{hEm=KI-&HzQ%qwn`3 zx=H0mjm2lDCbl8JKt_ZvaR1H~`$ntY*t=2h5rc_0{`ShX)9>wK${zgsM2bA) z8l%1JTG^yDz^jlOCG5!KmVYz{Hpn~St@egrwl~=7$qkbUxjw$l?W)ry10OT(y+=l&u%bcLo$C(n(&gi>bkEw=c3f9xQovZB z2ZP&%t3m}2L9qKeAo#b#yCOAcUC7>=DdbT@DDuuCXYLJG4b~xZGQ8QP)rrDxRwh$l zw*-xwmhxABEvmO}Jac%k5-%=Q0A4=u-+wC8{i4~+O8@(V?15eS7?1kt$^Ejk5Rm2M zXm421PB`kXnk7Ra!{_k>1A3jEf|Zqs5!>J2&miFj2KQxMk;|KF^XknXVlw0t6Vfi( zDTS95a53#ud3wh61n-Q5tZc`(pZU5~9GgC2X!3KQS)(u2#9E#rERUVnszsf47n*Od zxD_Pjl~WP8ctbYJYj!r4e)eK9T1dUTCgriHfv?f|*CP^}NQK}1;QOT}Z9P&$cNVh6 zu6g;rf3epr>VHbpeu& zgdXYARHcQ7SHElocSJ4_m%q10^jRC1m^nzN^7-%e;FQ|5R(>^)80gB2kb8OHd#=;p zbJ^eVt-|9^c~gXak3xRn*oYt)5cGA^sWpAzeN)fAWrl=SHyT zCpOVFizMC|Kcda*tKi=gTlv##q%l+&IG@cBqS}|-US2Jq!oAvycZr=Im}V*G4eOOq zJ?)%_;l7!byNw7C%2yF2eZnW1rixgSe`$l=)gk^j(FndeM{|Q6yw=ut65DDk%lQ{6 zhV@>t-u2&86a-u_Hwd};W7dYj=CAw6_!!N)G{(**jdt;I#q`6W8H~UIR6;zf7rS58ukVixHy3T!^!ci)1U9D#toh|5~K@N0L7Cl&Ke6= zS@wF{?O84p-qx^cKg~9JSnPt<)Vu&x|?A1!R*Sdc{ZVIq(XE5Qd8+-~;+N&f>8W zaFb7NWJ1}hC;T8G0_@nFJ8`y7;X3o)9aY`5hyD$ImABbYi?iQ;OhVUn)YXw7S6`3k zzd8*Z;^N{JdWG{{;B?nD8Kr~49K9ggo<*%!luv|U^w7ur{xn+9_OAD`_!Uu$mEmO6 zfEXgb=!Q&@(mJ_QiJ1eJ`4|t-kQtyL{z+>~h|5d>K=NhCt=}kmQTaXVj_R_wiCMG7 zDo`SI4@;M(L|vyWSNzVtFr0azyN`-^iTT~zFg4D%WH$eSvT*$g;|FH$1!+Md zKMNBRzVT?b48Q+%OZBRV$;~1B%?A&7|0!5oQ@NgwG}sxK0+{iL-?EV??V<=gCzzdW zNcX&>J2XhuqMth$x$asBZu%kVTj>AINE1~Aicn6jo!*!&Ffxu-=j}*%{RbtOm&wq( zrp*mkUx}sekyJ}Fw4^(QK^AwoIuMs!WQD#(oi2zHA{eb#f}00Q({(a}KW;yB_+fy} zQ;-y?fw161hK#~Tzy!OF+6SiDsLERRywr$ig7nnY`=$B=fhh)v1g>_w2uCe8^CzE5 zpFKc4I%OLBbcb~&$n}p+e+_90ZH}NiIywS{8VfUXfg!5lC*~DTs2i@~DPxj|Is0Yr zLcMnlrdM(gqml2c?!bAVE5Gz?-smYxqfFKl;0{PRXtU!y{O^4-N!)!>7rXnL3_m1IRrVq=jh%%SG~ew9zoa1)G31@3E(djRUjL*m5DO{ck03&%pQbF zNP-2usMJ(r|J$Rdg(p+kIeG;77fTzN6$lPT$_Fnw_HD`pN+onnoi|?a$#NXwf<8!| zk&1Jj2+;hk*6SS9RD5@~JqJ!9OZ-?I-_7V8%5|>r`2F@y7@Uj!Z!3UrR64p|OK!>f z7NZE;{Ubpu=-K63Oj!#(xmq{B~CWBv*p-BJEacMxFvO9Z(*-P7;$x^3IK|Hc;13$&B;C2pch%%kh(^Y-Jmxo!Eq7G)` z-EC((v)-L$X+i-NqY`~HY_GU$CYbi^zW70Z&3izB;C+=k=hcs%ybYq%!6N1dQV5h& zN{0uNU-^VB?%S5c5xd>xEIa&e4s=I@w<0d0ICr3p(b@q>@$7PG;hzM zc)nd1vxj9J21}<%QTiJoPWEOeOh<|3^4?2p{+&&@jhFhA%1+ZUrO7sEoZ|S0UJ`c3 zB-bl+%qqYvT5Z&Qs_5{F!HyVLFnv{%y+E&ggtjFyFhEP{%}5akzo_NVBv>?AaIHeh z^-8;@*yl&A_DUx6b$<9>P%>g>_@e|be{giK+oIn*t0*rar!m<;pTn9;tIg> zc0rtW%D9F@_@f9%azTAS=~F!Fc&igA2Ij)sxw{&Ia$xY8!*@U$6En+83W&Q+r0M~} zsAdocQ5USg91UJJEyNlktS+Cx9Hy7cVRH+(bp2nQl;9U$-x+4tca$t?rf0-vr5>ldqxH16*>4i==R z{Km_G+O7tTxa^X3ZH{e3A;JL|Cw9Xk6T&Go?zZNJx#TsZr$ zHd`U);_f^-^q4?k1{d;I?K2_7xs&Wmp#6y4u$X#spyP9 z=UF6IC?Jeg@zCJF7nX<-Cu#FuHs>e$Dckft{yoE8u9wG0*9A+bib}}#+Say1j8e59 zCsp5wN)x=dQgiFE3XcVC?b)$3{`pkzjGEqO`IR`AV}Ahy16uCi zdk9?X$(P4(yaC^2_^*rq|HT`>g#V=U+8Z2Ceb(sf!0Ri1VGIw2`QrsgY}GaI16~9E z_*RX7Y!I_-*&|NO0my+&nH!W7jL2^uHtlq=t{lIJNYT~`| zaE9FrHC$TuTdUp(rbSl6e^0kI)%yPSncI{ASUa~w#ivv=((uZdQ;k*Km%pxZ=lpvr z3tN-fP|b}?OLq^xYJ*PB3fqQ#)KrsRsj;9PKT@;OFCVNxK(2vLBnQebpQupSzUt_> zH2mVSF6P*c;xT!S^}L$8lzK(Bio&OvtsRE(`pY?a$ydZ8fLOuckvedp?K)Jpz)^Peq#a8fs< z7R=C6|JU&e(GpS%zja<>=61%Q_EhwNL!(0};4&dRT8?&Ap>MkC z*kj84fhC?@KKEv;1?RoY6Ev4AMU-xcwy3p^Y6@nT&9kQnfdlu-4h-Fx@D0`Q#i*Uj z@o~1hGppYBS>6E3dXWnDt9!<}jQAcM&_qWp0~NQS8Jzu;?wK9~s8S#4PH@ z3-|Fr9SDgo)UOA8GBY&}8Lif_3$WyneGFAuaU&%%oP zGhzgv-^7}yJKkRgh3)T^Ojb z=#~ywhVzZbSc;cK)8+gROU}#5h;m8#eFhz_RL&p4mTeY&e=|$DN>3&@qNegRc4dN= zR9KvOlm*IZ0)-~(+;|J5Ns&vxV zcTMpT*ZOc4g^UeePI@&;XmnnETY`l)+PgNSA0GXn*K6oT2}Hv2K@{!v)yc%+qF z`Ep=T0mhmp2hH-^xII#AxH?etw4GX-=qy{jK~r^ytdINdb_@s`mn-?Ks8O5}IiyN< zdM>kaFf%%&NA_{z)3a5gBXoBiHn(NB*pLtX&5VR3Z+~@3j$7L zy|CCdTxdzp+CR&9_N<-AH;UqP+WLaq4g<{e$in3@koAtLQ4;3|Vjp|G5D9~)_hn1UU^a0(kL&&o6jAUj+Z+; zAiic#Qd{j9n9tR;BrQR#jzoT^`9u}{5YR=&PPk2bNj(6NT4oc!cJct$T{nDV>NZ-~ zpUQJEmzvR+E?3SE&~*akLHn$SoAcK`U28Jk07#SVH5fM1XDRlkfsw_N^-4H>3y}2mGDq;+9L$pPvZjY^GbR`Mq`hAYz z>Q6*a`tfXlgRX@XqL~@wG@s{6c=QY??;Dc0rPO&6eAJ4>9j@>ypvyuYzj$E_m^{)@ zJzo^y!z&wZi)v|t?c2%`SDZ$3LVUip{om(l z2G4m-f1?clc&|Pr?be|0w>~lD+E{$mR|V@7dg|1v!D7z?z$xOr{@%?CJumAIKALg` zHY39n_qjJggdUtX;Zg3V#Tqkr4tQIMe_zWiU@F2lzuNdNd(@LmHGcF)k4qMMcnNKq zW8e(Pbuy)fIjWTUAr<`T|?3>dmJa3Kpe5(^Gg&;t+2G%Eiv+IxK8Z`AAor)e1E0!u$6Z>2F_GGZ$0rbD<{ZEicn* zkp2_T)g?p8_(rb&&i%b*HzpvX&r)0Xeknq3DO`x^=!_5MvvtKag)?7|`T&^7j8sR< z3@yJtJRfppKR5mClzpK^VIW{9Lw25tKop-E6yBXS7cW+@Nfb(gErts41a0OLEsWY) z?KDp20HUi3BbDbNFFuGsrfX$Da`%lJROG6ib1&+qgABMn>oh&y*)|A!_wHRf=iaY! zY?LAAj)#WUWVW*^T3Kyp31AkoFG9(Kzu(1Rjlz&)ryRa@U)9yn(Gv&_{jlOQv2957 z6r(pdJEW0?pp!veSYxrYq*5v%rN&!nw+^6bt6}b=?h|?}*ZBJJP>L^7vo^Fkb?)Kn zbBxm>S0lAxo~(0pqUbCm#W+=uQ!ZGatHUz2(G}`&>qgYl{LajCx#HZ<##Vt&K&~0- zBiIQW$<4nquAkhH6a!8E_u@TbSTmq)DHmQd;pgQIP(r+yAUs-Itn+6|TARSQkEI8} zsNA2`^tm!Nmdw!(f*Bx)3Ri(?cG1>b-GMqi3=w?1T!g-9OQpRvb19cpX`8asE$73- zw+0(2yoa7v!mx!EPsq!mCD(Lrs~QNgFY<&(=cU#(=+-sCK!_Betzg$i6A{AGfbPC= zIe$X9BFH$*jV=dyeVLohD9`8odBWGPw-v6YHMrr8edSBOYfl>XljbhF4$a6~muOs4er$~M} z(_>0d^JDagK6~lp!W*CJhGtK(q(uUj%SJy{Xd2Ac+|ezjpwwCRxtCa;s>;tb->d9_f`!jA!iUq7B5acu)UDHJrTyxjMbJAr_w&A1FV=*huIsgUKGd2f%7S#wJr9(GF=tPw5k?)Wi`@u^}cA4$-wO{mc_+SVPT=c+tb8LS?Y8EyJD;t zC!$i(rXp;Bm(PZJuqZsHl_8&J9qQ#4y6o0?P2~9_mM`~J>aU4eu;1}d;Q0Nax*qj? zxgY%8YXt5=tzNFb_@yuzArXBWt(LequMvr29-0G8@s{zs*Aew&}o`+%*?7T`nN1&kqi zd3l|G0C8AM3wz%*rIixa!MmyVF1esXZA`!z|6;nNj#)FO=pvLfb-1{k@fpF~pN!rO zQB6+@>Gs^PX`^o)PL|glZ&@ph6Q5Lif>l?1e&56Lw~E1Y!|RxRDhVg2-5V2jo%{JHWvqe!px)0VMHE?9&`eCt14fOE%X zaS+^_kAG?IS3cPD@O@9v&bIfo@@i9!B)GYwqvIT87ZC0}NZ8)(!VaA>w3{Mr&3TYR zP@)q^S|3=B@S@8UabYIF#|gL!4Z{SqlW&D&faEi0q*$ZZC+d-)ildgS!XbOPcFh%& zx)&^z8oyNyzU4GTphFX6H1(>kn%3T0G0(_YDmi$rNqB@3JfDz|5ZT>}_l4HJdmrsJ zcT-T%^ur>V!yUfn0&++v`aGRz0@Mk@o6}|GSc={g>#v{#n(>d}72^WkhOUl%u73Zr zpOglL*uDmoFy|-wt%S4(%x4Xk54cws#Iu&j~We3uc zTlEGq9;T+m5e&*X@b-Fv`4Gue1IU#(qyn1uilqTFXchC>)7Qnp(UT29h?FdV#4k0M zHuNg}qxrHX;;YXJr3VqLNEQL_T39A1XL32Ya)Q`-#t zX133EOA2i);qvy&>lm+J~8o=vK{9KEdM-iHbrv-?$+hUvU2$MGVZh z(`TT5e7$NU`0zIhC}j%N!(n{y0oW9EV@l#6tbYVt-4HC3158+s?2%NYac}JgJ$jE~ zj?_V{HXYCYdEYC+qnvDUJb(cL{=op!k61mpKcD+kKA==;Qseer=}6<8&)k9_(hB_5 zZ-8JZT;n`c<=rmrMguHfLaJ0STqbZRiKH6Mjrgn{P^lP9hO7=djn%f!wu=ESs9wq! zMT0^2WAP~&bq$!}#`uQ8tE^iw%+2UP++ZK`877sP0z13M*1W4F9JKw1QiWqgm@hFw z!o2cpXui&M3gDa_jJ=Dg$=Ascv?$2jbIAe9Scg4M8}})=`%%TO=d0WalJl1@SqS*o z&q;c%zAXft%ktjTK*4ABk)J+^nAJUB?7F%)gUj|ushEl=7sj)-^F#6KvVQ>yJ^GCfD}FZiB7G2*N;V_CL%FT73Nkl_^m; zk%vmkC)_E|8G-@2Z?{p2XH+npDozePf)IY4$j{F`AWeQthkxeshzW0rXI@#L9JCBQrctbV;V zeYy7B=JQ(ju*pMu+!?qP6u3e3?F)fA4R@O9p3i`oVc&0_CN5OvfR5g04cGY#ak1Tn+8Xpq!#MI?fn zLE-_LL$Bm@EC8Q6JI1CD)DDC9ejkaj5x?_wL&?*Klq4gJ*&@}|>@*`|!-$Y*Z-Og# z{_yaF)&8kw8$_pV*^A0RfQI`1#v0G@XlaoE9NuP#UEobQzW>A15U`o&i)q zOhVSv^$Z25UQcU;Vet#XM4_vPhlkh=>W3z56Ykc1(VwnNqXlNNlaPM=@qOPt74T-O z2Vg)JT8#BvfRane_uyIiI+7AVpUV|SvM-663|4#6Ral6nCKzAJ1Ph^~Rnw?16`SLd ztPhaYT2z~3g@-De4F^mQ9+u#0cTG^%@b%))YupIyAXENaqZM~nt^##*-l zpPA-&aP2QCm5S2~o++E;o*$|)fG?xLmAE8%&xRU^20bV-b~yZ+TLr3ddO@5)8$Wxt z3-pP|ia)lf^GoKW_ySO=CF_SlUZ0m}y$VI>>_zURcVoi2q-pb9{WBCb5D@}Rk+w+( zjs%+29OL&QlFB+(FMx;{j=|^SgXyj%C4H7q>T8qo+Mn_^hiL`2`L-L@ZstD?P6ZS- zrd`@aHf_zDon=j36m=UlbYwzginIMbuQpjpm*?*}VA}2X&(GSOsj}*N ztGsDdJb^OLzbv4mtpP8$>~9W2lEo1R$!qsauf(mg^;qM*_l$tR6#SNZR(`0`(s`AC zkO;|EIij}&oyxhRmOY}Awq1VzY5v91V#89AQ=Ni>fMdjMu%LOw$+F(w646ImXwhry zeo;J9>qXfUN)#?aZLi|^BqhHq+M_C1#{tft_`E(39Yf;HGiB!3LfF_v7UEc9tf7$c zb=p1{U{npZwh05udseoOqIUs2_uI@5$Pr9zcPnhhtRQV%a=x12G-lhzb)nUWNuaG| zMiEaOE^>2kSV&+;Ejd)aEsL5pI?~$8&&{)J=A6m18>*;y&JM2kYK=;*6~diAe_qI_ zy23lc&*_nFV!t&WKt@|titJDU_gb4#|0=PWnlurkZ$o9b<(@=K|FinDj#lm|V+Qox z2~%<tyX$_~T7L9q;^#y5_~N}cjDYUg zH}IPbefJ69(gI4@f7gvmO5PTcl^wxp3w?_NJ#ThNUKAefXbJriv9S?uSZtwS6#r_> zD&_O%*+`~O;q?h$K5vhpl^Ubv;fHUX*Omo!Up{)&c2eqwHZe&XO&-U1^?m>tv2=NV zkf3a;}gEEht#%#+qMfh#~+6BHpxz z0c+0!pS*1VEaHuXxm?Y`Si>?cK`GO(etKk%Z#9SMn+RcZ5D4BpbGTdVmAeT@!w7L> zBM@^U=jQO6^yB!Uc`XS+>8z9UM{y}EcKX@5v~5~;cUoVSCkZY0S#}KY|FMU7H7GYZ zTE$S5;J1hh(v!Ljtr4VD(*D=ydoXRbEVf{UeP5j!aB}dQ0?GAzrq|*;nd~dq>-~g* zB&YP4AqL%*{tk7`Lh?f#H^asMiJO>q@K0C7#+w|oRe74p zWz7l*5lcSWhyxQJuSGqCwpPFO$szs5FM~yt2~?NTd3XLexoq>tui8epPNc73B{XOeWov73J+l3bniQ0R)-A%86#kafc*; zLZ8}yo3q0=`h1p9$m01xAuoQEIK-g0V>0#vF2r?C#?kj%_XFFVbV za$|?CYFVUQb?ixmi22o*4nDo&t6E#HIW76Z)jMPVHfDV~GMxw^${@rnH>YS@nh0D> zoGwz4X!H{BI16Z}-@?eWMqI-;xGn>h6Cf5n404s$b$U@w@O$F&WKqMoOoZZv&uy#= zsL?pmN}sNLN(2BZ06J|kZ_|Zl1+kok?)%O=fX`gW=&m@IQRB{9OmwvV8Z=5}p`S-8 zXsL-miX$f{N5sl&QBS3h(FcD!?*0&?h+fm{yyFn1Fd~p0*%&V~IbguOER}1TKo*KH z{8L@LLfPYVJ?U=L9_39e;CjctOv&>{6<`tMQ4w476J({!7Q$)SA0UZCJH~lDH;W?W zv~*^2OiLQ`1MDR<%~DnmLYZ1WU1B~3D4|1`tvp*HY=-od(5*`fI-05JC{#1C6{IHGkO(1&7(bi@>Vn9Zmmme3Sj31+Mcun z;@1h2cjQI1Myq`~=j5Pd%WB)!@c4W)X=jm*cOu3Yn@1R3CUQa^mm8qf&_DvMP_#KU zTBO%&um}v7zh`Sv{+~Np=v2GdSmVH!Dn4Y%m!I0wjUP<(-f^2KuzL2)ugyR8K~aY5 zmc1U_eY(^%@T3}}sZril57BSk{inyyEEc>fU#2Inp8c55)i%V|@1tC0wIf1Ub!3yB z+34ND0&Q|90cqnd(Bl8_*Ug#qP1geT{9V4Not+N6z00ZyTSTXA!(XWuci{zI&K~=E zrn3Q4Yxr>dRoU+sPcgh9Bcs$mMl;8WgTq7U@(fGdFOSQOH{i^(yGCpOm`C1lgmS+W z_}}IqIUfFh_Kf^5sdgTh-xObaXfK)q=CFS8;i4`cK9Lulwr}+2fV68x=vB*0N#y3i z#h(bUn;@PLbkykAl~iZEkq8H~sA(7mz*E#EA3jRn)Ock5X>b`;+_`IOKGQ$M%YLaq zE12daDWbO3uh~{-n>({y$R7Xuao118$+^l?-Yst>$>d|+#bA4%CA*4H{(blWKt*4d99Q#o!(#z`xPs4sgOo@ zoDaV~Im<)p{Hm9tr^_DGKF;mS8?iWaK+W0MJu~^^$6DtcP3lg@=fbWZN)yh8@)?qw zoo{TeC8&OojiV*T>YnDrWHNj5YAzV7$p7uJkVYEFAZ;ZHWzy^lHvX6rZGLFSiC8|r ze;_fRb$>JqTgTf!@!=xcLCipHe=GaLI|rATBWqot-J9;%F=AW)ed5(q=Bl%bv|6byx<+@4=)Yh6m^P@*=j!~VTr;D&nL}EQrP}6NPmmcosA&}nTd4}B z^6VT=O)~FB-iBKV8ICrrvG^4S>$4H=|`5@PR+r;{2)%Ai^Q;#zMLqG zhh5Po<=u(N7@U<4Z*k(UKuV_PzTRX6d^~MQlenm7)c#^{6Racq+B)*(gk$x+K&7E+S|*BwlyUQ z?A#dTsW@~`Q}9=nB>}x7qh$0USsYenB})ne{vx59SJg(v%jqvOUy&5M&F6cmwr5CZ zp&X-Ys3ww{bU|j&OnP;*!gPB5D`lWTf7_Xgo91>0hpJqyAz!>#GVK6s=c{)rC*iTA z&bGvA^0rLLlnu=NtpYA5j_QiA9qO7uuS=GUyTagK6>ue=sJ+1-a^*^Sw5!Aml%?<- zPy%ADI(SX3wj>W`87Ei5qgyLrZa9V+RmJ*+Q7)@iK_K|zpzVlSb48@JuhvNOXnTc6 z>LRMpzWoIWaN9D~nkgQQrMm#V3|`{&gVH2%&Q4z`h&W{s=%k@}rQ9*q+|k#iPl+a# zb9Pc|e8j24{Wup|K!XA?6 zIPBf3gJp)&*DQ?pUC_myVvw4CpZh)IFX_Qa3OLF|(vT&~kc>(27dv16eAkMD6*b@T ze0Wua+eAQj42smrO`+)ejM5wXBweBvaH!_PjlPCLqKHyqC*xkb+-hD)&4K(_`r62I zrRr?AO|xzf)hg&yx(yd3e$*s5*+F+2r>2ziZarfp3A`*97e#qGLF6y1jr8E%mmXCb zw32z1Xt!_@Rt3IH|3UJ(Y-FY)RxLnw`pP5HX*e3oq!pdx<{?MlO-#}=&T~2o{Bwkw z@Bf3kw~mXdYx}-I6fEEr2?;@^q$LKVRisP0L%O?%5K&MGX{43zX6O>Bp}RqZp+jPZ z7~)x@p4W9=_x*XEzuxz~-^V{rI5&Im*?aA^*Q|B?j^q2=LqC9)`Kio`*&_RvUS-wd zO|N&bRh^bjq}12NZ~OC}h{owi)X{aYmjkGRB7sd&T~noRk8<}!CTgjH4H=-lPM5tD zxAa;41gf)|k>toOt@VLbHuA7?Y<~FEN*Nw8lo6<`C=FLO(Ngx)x*;tSlVLrte~#q6`iT8Nu~sQiJYcsar<}JN!?~V+wD;k!G?LXIScRU$;BDGR#EMCpEA(by+)0Ao8Q@$e~>hC2z;x zjsVojg3+fKxAtW@+eJ|oBh606&g7HBR@UwVeALoyy#wL(H4~0VpRSb6f*mCTM)apm z%Si9C;6`Xeephzwo!Zf1_&F0am(G+XN?0B>H_6^roE5)pSITJW9+Ny4ADyh_X6b3r zS=Smd;+~ft<=!h4mrvAH3@QUe(XpX1H%-+l31-*@0;v*!_Cmt8#9;#T$5I)`#YlpW% z6hHE8xzaUJ+7zhD?T=g?Zd3_dYHgPhhbW#}2{=rpoG#ole)~WpN>s#%)!_O55l2>l z`DWKku@J;{>!qs;FU+L*pM@`8=1&R_xNh#$sc0$LKdteCfN|;b*Z5Q9?yJZ_IIU>r z-ELMUJZ7hAuA`ul+hj2z()`O2v^4xrB3tRC;kP2F$hrojsZ>nm;Fup>U*f1>sxz`(aBSh`2`)jJh zIJQfyUlexV|4t3U4S1S84A@1!@2P~QFv)N2-V+gQRij`jpYojMKDH*a#=+#$Qf z&d9{X&}LNn_A(LC5y9-Xi0erj8}m2cmQPJ74w%65=hX_C#uuh&r45UYLYAN8mkj44 z&d?F5%4f((XUs*6gNk}?^K#RsMN+#XT!a@@q zVxbkjNM$OJC#MZu!34jXi#$m}6=Yv53xd$PLKDNuJHs>s%wZaA6B2|aJAYxJ`&Q{m ze{r&Oy}9`1{fjZ1CNhN<@G-mX-Hc28g~dv#siJ=xzcVn_*qVa*OLOn%Sb-~zU+D+_ zwc%5y5Ob$HNLC3FrUZMuqNFBSlD*vg=kHja@9LB>w|lSuXU;u?w8H<`?TyLr-5gk^ zeZKPA2Om#dK}>k+=$6T2Q+*BKp}%1vL-Jy3925u^DcMzU%CdcQyT`tN3kU#rsb7Pu zcd(X$u+WlyN~MY6wT^P_;A9!((Cs?E2W{&KRi6}-VCPA+KX@wq@%kP;Xx^9oAgQ_f z%3UF2A0v;cH)^CTFFDHSpq+1GVzVU@Oj4D8&i~5j#%h9@WFtLpmU7g)u7;?g$Pw)e zN>3Y~V{Hm~o)|39)8;A$)6XoDe?I1U*;%yJk9|W1C z#@FlyCiDH5gK^BS`bAK7a6II@{vQ`M>Tt;6v~qL>m2^S3Ed%cE)rE|V(ktESXph!Q zhL~2ZsN5+r$2=E@R?H`Yl&art-uYHz`(^^t?F~rRbg;E1AM?GX)hMM;owE;`eCYS0 z6RhFX^C3)aR1`L{s*i?lyS|<~Zw7TaiuF2DaEJp;9Vx z7G+5X*yrq&owjRIo+^Er!pUaq6VDN^iH%R+qkRq8nYqhlskVM{wrr!pm^~`u)HhY< z_+&w9E6tW)fAT5c>ZSfT$wX=^sBq}-01K!i(AhvGG8Ra&sXduaf7xuW7=(ZN;QSzy5|v*fl2s&o z{zyKx9ors7sK7b7Y}+S4v%ym$-kcw2F(_(5pK@v66RYf%{DRI8?oG5hng3oL0*8LeFJ012H}j~M;)`O z-5X>adN7;O6dyEQk@avMBDn#od$-AZw6OurqFyjiCO*ttsAHlR1oAL@5}Q^_O+!I` z^>23IQkRNpcl7pHp~`T3sBX3ljmDv!-X$EIST-GUQi`E^@$xz0I!}YJp1E}BI7oTH zr{tBEoNOf|kdf#1Y=ZOW<$Y>$C@nyLX_W+wt>H4$VOXIKyfb5I2^)td-2c<3J8MTi z2*e6%NAO{A3NK=ZRePvVW|DoXn{VN>YW&*eI4++OiwpU=eWO#;hfuY zeL~b1|Jt?KrSmg91CL`Qh;&WCzH!}vRNF^VpCm|08^ud>iI-2bhPyl9^cui(j39W}n0Y334TPCf4rwr9S> z(~Fz&nRwfSVg7|ycY>FPsRfLW*XJ{AC0XC5S8$-N=cy>9MrQR)enOq~n7F}=1wlZX||Z5|ueHpxFJ&kKCd zVlNYt%!V0UW^gtIMW)NsAJAsrmd4eFSuo&iO;@6v+DEO&{Lr%{;o+aNQ|>6IY3_rLFE7khOfuAMxJSsRH+D4pcS54Z|9P>n86H(l&zU&8wNW#ajCk+In|iqWO;Fn=PM z!bxlGl2I4;;8z_2di4aM{1r81yBp#gpJqe@uwml*-r8pRaR#^<#BMjj938RkHS3L%2&T zx|sQ|FQM<7vg}by;v2>LQS^WkByr(g{P`R4w1&#;cz0nh3+b?D0wN@RvC8myiXPFg zudpcm#>H}B!F$b`yhv*dD#=sy(CSJ$X@FLPO*orEIS z$MCNaxb=OqT!d=nvsT;wD4-l0HiM_-0Hy-WZZyrkc$-T%$I!nu=%Y!27#Jw@<_o|$ zp-rZdk}#-(sPU%2+WVIITnBluQtwhoR$}$>cvu?MnWy_wFP{Pz^8Mzchbu<5(_x=7 zgUXdmTX*+Sz6;yPP&@^lIaimvsnv#ss=8zrs^?lU%)2EnS7?N6EtTmje6Iw28?sv1 zApGQ;;*8KpOi<-5n6*Cf4Q%*XYl+D)LMW9kw}Hbu^jWfJRl?O!mZkZ?APEFGfX1su$>PB@u5DU6_nC z>LqSXy8{ZzH-N6960+DSsU?O^vMC~%V~Pkgia-@LoGL~IrfcbXkCl~2gk7Pl&?bL< ziec!AM(ML-1dF=4PC<5T&tTfDhgB&noJsTZtHa=KBbF+QF_XQKHBec#{DXeYe{;C5 zF7hsib_59Ma_jJR2VYCg~F!#(FB>r6kw$*a`@A z6FbGlX8W-l{ZL{hr)}&aRqklsO$+LyuCtRRRcL$*wgwqpa%|tr0DWnBLLxn5Q4VwW z%sHHb321qt4x#y;R0%6w&LP@!ZqU-EbIZ|=6p`Q8p@oAV-}Bg4YrPI9pkEKxtC zXq9D~vc`HJ8`U`P9JjxT`yEU^E;oyaiJ|*KeXgoMdGf?+YV^?7sqE}DmGgTowTZ3Y zJs5qId!sio#BSoV^|-bm)&e4Mo>U(#lxJ1XAB{Z=O8>jfIXSw!eC37h5zD=ar^n-OK*0%>s3X_Ihn2iFf9eO<7z0sCR{le&_JrWi^+c|+BRfCq6w73MTe4qUcs*D=CoHH+JHA*^F zuonqI(ho^+ux4zIpFu`t*7@$%@45W=B< zvN7xtbxuVpu;7R41v%yNOFLo7buzK6DYm64+FX*sZi~5X^{k9&2(msVn3PGm(Ypq@ z!I$#bGtc)-5X`HhH)k?zR~*TD7tA6_$j`g&XX{+O5Sc4C`hQ5{U# zJGT%5Zjn@KH?bU|mTnBg3hZ8_USeC}PVTo&sJV|k=k<4w9;SJ0>se$Tez~1U2Smmd zcL*n)L3rzHbj}NOhi}=UmhA9&w(!vXpIg{1j79~7up2YZGeoI2H+Zb*C6ZO<)VYOqe=`m6y#8 zyq!1eYk@->H?^WIVVbCI;S$g8F)*+3LC^NL zw6rLz8Vy1E5daT-FumhbZ!~J9H4|TMUhA?RUgxCiSp(@8mQ&SVeuyuwxJ-L?EwU%H z_Ns#K8gOU$XwRjCwel*PS%&+jUv5_QnSu4BPlM-2j~ezOF57mXr74n>kFOk%U%_(N zhva;|_|fv$d*AVGZY27kj9VLRYWKl~o444^qulRj3-=fy!$cFB?&_(Nm6QL~trfyR zsgNp%e9Op1G9TaMI4&b!8Km+_hrpF>QA^K#Mf75NV`_v+`6SM=@k-&4tnQ;{(_a)A z=9w6R_s-{~KjO=-UU<&DzcE&EFwxsRSzfvDss>Dc=d-YD9`1j9%S03|iymP!|EX#g z29H~okyg>>PoZLHBe1!3Z+~uFz+pMC0?dWy4fo;ndDrT0qv_GE7&g!j(PU{a1_&m;T6`3q;7RN?@IG$nHQVyjFj%==QqR<(lIQ`tL0;Yz1E`rhS;#i%j$zvG8UAR#dr)kn zGZd384xJK6(eCM1hx^Kx&%oId`6z{#iwDAAC?2-dLVOjflH-K7)A(oP_U1hIks6IO zyr<*yzHu2zLKFfA5mX3A9RvG0TK%Hne7QtU)R3tn$^Kq82=$ChpS66En}i0K)8+SP zIYAsvt=dy3B694HlA;&JMLt;#75jlH>S$OG1xYC+x(Al!+`(M@j=lLGK z_=maov$w4aIbwGLkyw}z%Y%QN@db#r?Y-q^4y=Nc4514AXcZG2uD8c|MoZ45VHz9kUjzPvv19qFw4RdHbcAH*!UL7*-?4!F=RTN`_}5i};EmAb?zn%4 z^b)}w=DPRWzav~&_Xr&|m@%hZBL6>yrT!HP*818-a#-_@}4+PP@j`0CeZbYLNad0!6lY)pl((r11~+V2+;0DZoIeETfo`)%SBHiSc-Td>n%hZJ3ST?jL!2g=n45zy6GT(F z_1|f1A5W#Q{#8VdF4*->a@yguQYJ^+ywcg5F`fQwKTN0f=o$Ai`Ql_Z3{BPb>{i0y zZzcJtFXfM9ye137Yjmee=V=l(6>{xDeWumok>OrvO0TD+IcZ5@jaA&Aj%vTn32PCZ ziUO;B36YmV)W%Rv`DGOe5poA13C|-*C`9JBWW4!$uk#VK%mll)SS(bM! zrkfCIesk!7Il4achE<^Ga*B}m*vW(g`uG*s+X_)ptH&;5ye`!~R=*`o4V0pI=4FAuLxmxq~*5=|A;@N5d$LG7XwM!e5HJFYlR?^~5s?;*vof6K|q zdERG+&0)qcGODh1dWeCD;f!w&DveevJp&btcXRsVl>TXJO2KdG*jCbpBh>AWbo^UY z9xYbWMgzjoFIBme(K>F>SD>@xI2<`ziZV$qn^N3{*a(>T^hOi_=Yib@Tz52NL+WOqQTqt7N5ZN)rZv7e(r*c#;pZPt&N$Mu_RkEEDUoI_qD}ya#&5GH*HDYM;^vFQNkWSMt{TO93olqMG zT_dw8_uiI*<>x}BBX!tPFE*sch8jjxME&v+HzdmdUOQMA>0G7Rm|&*pR!|6S4D#(W z>mDB-%|IPf2i}z47$4pmT~(Dt>$56Z`5KVZfthdC9L9B4J&F| zlGnUQ&hx2Ge)*Moqw@*_kl4Sw1vY7D`#Q^Q&8r^1(D@}Lhy9U_FSK7C`$PzPx^vIs z*d8p#>MXsfqQm1IpPkpfSaIsMklagIu0?Ba{E?F9rj3-|5lBC@q(r8k&Pzt_vqp_Qj=YQX zp;-STCU4~I%)U4r*6kjtL@g~QAAlwf>@7X5>r3%YD{qwanJt-&^&1zA{3RLtCfUZr z&eun1%(SuueR&tV*iW{RE@diRMfB2>xhCV0dJ1kr(r|W0!IaJLG94LZH>pWBQ}^U8 zDfl+CVBuy@nXIg`o7rS$Q-WDSow)qE;OJlteN&Pda4wj0;W!v@&nb-Ji>QyGW3qqX z$+w;su_rguF9^LM)b1Szm$e2YRrA5QRHQtd}%OX z?Q^p*&ssFzM!&vQ1X(GFUzlepnqs5>L#oj?`->@LOERiQ)_p4KV#C}ohMZ`qT>~n->zYcX>3i#dlDt*PI8Sb9qpP&vH=i{c_FGD} zS_)7Q*`|^X@SZW1Nz;*58S9&{AaJ&NV9(YHw_tohr z9DE=o)Aa4#V*4W`ugcR_w$XG1} z%Qg1V9ghaITha6Mhsw;l>XtInJW^-L_1vx+(PJcz%eAbdibu$nWm$jZkBt0F zUp__MH%9zOFqcR`B~>ssK_@hGbC%a4vKqpc4hbn)NJoVrUn_Q^g^ycl+pmlBD26@S za;Nk2{-)XZZuz}|Jf6aIRBPa!ZW1>|g0nW4)ezz1;lIQtziRUvhPUEM!?6RXcsm!~ zP^n5O|B{s1_?NOP(pR>+45$eok`xNfQS6m0-zhV z#84T{Ug%B5YeM%vW{19|g*X{91er%h<8bo}MYY15!!oE~T`h@JBVAvT!vh5PE4stw z1Zm9sPgk6=2VcUQi-(PVY;`rI5O$K~&77%CwOxifo!-D!y1(6pZIGoWQ^9!Q%XyDW zvt}c>qFXwijirD{SB~F;>)&DcO zhEI#XlNvfpNy*46K67geNV~}rfVCsr(8=0V+u8c~j4S-N^WHU?`B~#rc z&yY@~x}9j#+ck0;@l<cSBz374%l6sTbj4a{F9%;8 zLU>tud{%HrP>r=!69>1gTdrqT6Yp25q<_Uh)}&C7=8R`6hAMI<7ROVNlNt_ej4VtX zsYXryu(VQ$OXLue${zO6wo~;8pW}zHPui3sO!BGT$_+#nc3|GSD71Zh7oNboYGpWp$0#Au9L+$2s*}qb3m_WyW*&uqh)% z)I@wa=9_c9Y@cg>kI6O5_jdG1U^d_@1)o@)*h$H$*7yWrJ>r_@?GGQ%aaXb3yW+E@ z8tUx>zgm# zzw}**_I|AQIDDm%`>SKUAn3`jD7&&|`fRFBPbN1d&v^^S%qq1e}T2)z{-#{^eI z|GbTnVQ{c)CNYR`4t3&Hnwmq>rKtw;{ZjM=OQ&px^a@6;lE>2l?77X%S$}2;$K04G zjW*yWZh%7eaE8h$k#Mu;z57gR4Sg~vz5zI)eY?*w*&xlf68VFV?KzaGlJ!fkF{$VG zQkl5SUBXITxUbn5o8*OHPydV+usHYZHCXRqHQQV8VB$?Vz26dUmNB>14mD!Z*?-N5ox&a&Ow>!iZ4xT?rz#do^L_{WX z+*+*ai7uD$?py9d8-G-@gn3K7W!#WW3t; zB=@?T8zn$eg>)Dc!21N)#zlWE`T8BNRqW6)WYg1S#uJ)h|Xc>ru(sQl!8X z71;9X!LEOoO-$S+gZp>(Aw_-|T;1o#zC=vCBI5d(wdybXwSTbovY((896tYs-!0t& z*&x@hJ;1^o^-4(Wx5J%h!2G*i&Od8qN~Hz=>)xOY)SW0w{yNz+%#}T%{?a<@9;qz1 z2P%%hKhHm@(R+b^uH^Um>cM;cfa6Nzv)`xvw{c#x%4Z+O$Kfl#Zu3bBCJy0?1?u!b zzRh2MOy2Mt!V;BzKK#D=JqcBh&zERGbRqehNz~W31DIXIC088|lQW2;>M`gltS9=v zQGKuKUvlXnGMhF25EAXbwP$zAV$ymrSB`ah>GuaTa{x-f{5685<9^KMaC6KepXSLW ztjx!utAED=Fm3WX5eCastavd?HT6$R)!!na&S?$;$1rkEW;opE!JK31mcWb;BU2k4 z$FD~fPWJZ|eCkp6Wco?+cY~JhGVLjUXSv*rIp`lQf?bY9%cOhtSHhC#8v^%vX&KHgz@)^S<`2lQ zlaira?cd#DPr}CgLp|})^}ieAU#+9)k4pajB<12)<*+9}^SK{k(_zlk31UK+pW%E5 z0(LS;roZpzzjlvTsh($G4MwwH6&Fu)XXGONP#^deHupZo^lv6`j_=tCJOB)~QPye5 ztD|11RSa4=5ffB;m1uWFn2P96O3IScJ30q?OGU^ru1?B?&_t%ce z{&KkYu?h1XkLk>tft4L6^t$t9$mVu0pXB|NriZ;5z>=9jKmAe*(qLgItwXWA?UOvonIUjpuepLx}w7 zi>sDVgd*qKch3n&XDX-WLi)uv`0OII3$@Fi)?BIZ=C*Cts9H^asx`8uUc`%aPY1kk z;dtlCoY{cs0{AexB^EVK+&<^X5>N=reDU;RHbGFHitopqzfX)#*E=OYg4OYS>2$B_ zP8)Niwfgvvy)V7GU>0cs!}Y*Djw`R`Wu@ej1pRhf31?NlcuxXYT8%>FTn)&2Ie2ew zz@k=~V&W_-6A0Y5)@Pgz+t%ez4*V?IH;>nKLB$kwJF{w?$7cMC^@V-o1xN|)>@@CB zgl}>^+Kihw{l3`W)UDYV693rqq!}Hgo;$j^jShsDSer&hshB+7@jZI$EO!A7>KvL? zXB^IC8AtiSUul!8k={V6?%S-u_2iSdY$xOrWn=YoC5FfDqNR{Y{Qbxr8i+4#lJ?zk&489SexzfN^|L zT=x3=1={w`BQJS@`oqCEKt8;^lIN+7SmRzn1bur1ujBVskHXoKp&KWRIZl8_u{Ini^cZF0jIHk1ZWaO&z3gOUF z@lC;weEQSJ9Yd&O9z~K)i$1fB)>gT#IqA9!=rG4V8-wh!INOw+&w{&i_TljMDeG3N zUr(3iI5C%FOy)%#LpofI~Y&7um%l(*}VRc9tD^ zp2MSWJgb6GYt8B%LM-oKFuXr|ee)ET2&?VZn~bb1nmxQc*?jZ03U*bgFfujJO>qZDV_^{$NMYj)2J#?=f>Px#Hsk=g<%Ilp?RPFX9kXr zwqni7BApdCyZorNq4IF#GvQI8=^7^`P_d7{F{bOh%odA~c>cy`cWs&k9uw2NSA0!n z#6~$DBrqC4cXQtc$2J_#ncE@Uw?_JGcsT%pN4`&|n&)2gM2#_}YeNd~o4O_=ieByQ z>~vuA^Ywz+jh5nXp`062A3-xY$n29u9-?O1VCRJOA#+F^t;p;95o;rn*E~G@a?W4#yVn;hEq$@8pH>qo@@+~<`+O}CDcFU4c zRu#Ely1iWIK+NWE6F%BDnMVZxz4>k))X*8A-A|GNksBbD;s`iaWk6M)71ZslZzW9u z!nUHY$m3xXDXE_TX2*4e4W+ROHVd^Lvv06Mo>-|d+fLS|14gM>&<&rGKAw6uzu4G=9P zD&augtOAP(FBeChWVyJMw>D%6mc8Z4EMySJy^#{TUL-I}skBl@A48$u(+#qC?+FjL z1#=XvG@JSaFQ7`eV|Ei2CX-fGd->|Qnx)Tb0GLizilgiJMl1|)DOh<_^*EUJvv)*d z7W(c^QHgk~wpZ9s4<)Wk_W>*>0UC81n&@IVUnJW!3q`SvwiR^gR*BDIMK_UH)s|q!n_6!{IiLd98VWWw*q$({d(f*jF%1SY>6<-QP$w=)uh#)-LUGTHQ*w4&E)7$pN`}{OnJ^Q--uk* z2*e46M{9%>y_KpQm8#bCMbE$Kp&p#74OEYP!0CW6(q4|dH5mLsm?!EEoh&ox>xXzY5)^cR&-rw#|Nc;^0th~Qc9Jz#R0aDai#RS z+a1F;nlttU8{Dz@K99NlNOn|LhZM`CP~6EVS^Hx!`o?^ zR>2Kuxp(&!s89AmbxD$P=p6%^k6F)R?@%Fc{^5;YJvHawx+%1`oC z;9#abOM5DT=#!}JA}!2A1{6-Y1y{a`*GKU*(Rb00=xV(r-Vtf z?)n_o)ry1z?2n!TqosJw-ELZn?GxQrdS`G}t%5#0_l*^sQcxIpW?59vdI%d39umoS z#m1V^bg4!wD1VUFzm9dmYr0-Q+DoBG#rMo76urp!KIj7U-9*o()8%Zyl+eZ3Rda0)$MieEiF4!k%z_D{C1bzgh5_pyn1Cz?%X{afxZ@B-H`$W}}hb~}Be zlL9DHw$qK)@TPJO{rZt~9m%R(K#u}u-rbIl>pyoFvz;mibX6f>bb?pB2~%8 z3Mm7*6484yxNdi=^b{&$KJ?M?u&cbdooF%b4o|V|mxl6cy;zPp(8XrF#+teBwoKVx zb+X1nvVZ4&97jRK64J_sPBa_4FiAW>cQ zmcy{jZVh?{dcU)+pFc|meDDaw#l@)}dmP2^iC|D4zntd;bY~FErq|w#+0N7hs>_eI z>%a-;Yhg2br(xqbZl3yd!r8~mHMz-f4G{Jk(R*T5LPHyONJx$svgdj1G&vTL{q(ZL z`xOTOPny6F^>=Y?pG-}u97}wQd-;z0=2SUwt^^pE8Zc4FTTWxp;?v3ZnNHbzn?$RJ09pHwl?1lr@95&4&7Q8t!FMPo#^c~MpKd9O>5=l3UX({ zyCNq&Q6D|Dge`B!x1pri{*DDG>4Sp(5#7Gfc`fa8+b`)BeykTLml`iVra?n8}3#81lx0_0-`q}l!I4uF= z75mDdgoa^3dz?^|r1BYT;DO`jVzNtr7+2HdshPA7W|MY_E{*WlT!pag>(!BstKHJD z{_KQ+OFYiJ(2z%|>uG*JG=}qydq7=a6;)|+twmjVDfl{ zQ{dF_I&p6{zvm!qvAWGf{U2UP=Y1wHKVIBBYo87y1GKC5$GD*;#p8sBp^V{EThI@!AR5MT}8G|JSQ0kn8Bh;OC5pVjQ@00 zLs?ErLHCV*f@BfrIb+2}*6eF1hg*mw`e`+Fs-__x;H^cj@n{1+!kP(GET6U4Q}L8+ zU6!y58sV9n&Cd0l8x(I1x^2w% zy3DRya-WfWWp0C{-sDncD$=WH_2L~HEB8mOvGX@l)Hu(w$lB{IT0w*g!xZwp-BO>P z1Thv@isIKfWGs))xrk$(v;PhOiW`?7uPx%){*%LiQhZrMZEn1oeCqE}kJ-R*2bEU$hji0}d}Ws(UA!z#hqU0TRfx0gnt;n8?DX(#-&O-sl7uB6|342p*kw#~I~sWJM{R6O>_)-mK_Ymq zU8@;_ls5F|;!maZ5^H?D4k+ADg~fS;>;?$9wEZiJ`SZrpr~ZmUC!c@ZX3EV43v$aB z#bHh?0HNy+dxbd+MDOPRFi-xY{EQ($-tshJuJLVQv}sRdWR>s3|3JJgt?2uIg4r%~C7%%A8g-Wh7)l`?iyVJ}3sh8B8zX+`0CC){P0QUar z)2AS|CmBj^P$?sxKe{~gpa=n`kfEuMM%l_MB-(8g(v9?VCPE9A_hPI8m#x+nU9=QE z0)RVaN$#!fg}@V=RjsUAPDV3_hR{bTQ^J zB>#vzk^t5`uP;Ma`jP?G5sHSf!L}wUeO9Q+fukzJ%caGSBKMwV{kU2&G$cnj$M+df zP_IEkC0YR&mPIwExm{jo^cg9;zCK`e<84#^MM_%h(e(kCECkWiO9~_zc)M8uGXO5V z58tAQ3@RMR>mLxr`BqsblhamRAC~1Q zYueN75H?fwY{5M>>|=#*^`u+%8>#%s%h#iRpO$L3;%R7j!KYmmCwHtF}>;jNP?33#!@-{QeR_}@W&)P02J zh-;O94fwdk?Sk><&E-&u#ZBIj4%&HI!^o-`ZGEZKWN>+t+s~44O*doAjgPdh&;4X{pQ4}MB-QmkC{YRjDH zCYpQ5Pj@%qLLrrQ_9Nk}pF7%(twC4D$SCr3Yp~LIL%r8UVC!{Tx30Ogyu7TOjB=1M zM+YFPU%rA%fgiY%Lb3OwTx?V$22K)9DW7LmKAEHz8vL;z$!t<#HY;J7=}O7l{XnjK@Nx&;#>=1X=t8^z3v zPul<&tUpP(%4l>7EWw%iO}OIe4?etmCnYPZQ{`LU>u6on^11308&QXs_J?n=AlCCS zw1IWDaN*_4b^HbeqAoV=vS&sLT}|GIgbyU$(%-re=-IFLBe^4d_z zXr8)uiG`N;v#;O9EWK&d!N^wg>%7Yv~dnivctrJVx~*eH!4n0N`e~(%buzo9Ko! zi2>Udyg-W#a>u~1BDPR-w$@Z-oC^mh1iX8vzy-bI9FlAD{s(d=hmDqAQ9HqMP>B;bn4MI% zPtCyBP>li`T8Qiq=_iL+d%tL7oEF>>UYNwcrHtLEy2W7Kkw4qajy@U4uu zyL+t=yib(3olA8mm9JyXY*)*Sbnr~-@43{KWk%h;V2E0KX5;kb^b00gx!qS<$3Mpq zq~_lUZ{FJk-pR*K>OR(Y!ajqtdCDIFQgi}borWbBM3Jc%H;Jmo zfE>b7pl)qAfD{Qi2qXsZsNN@_8sF=cvC)>fy9fN2MHz{3v&gR+{S%C!^Mv|u?d{9> zuBOqyl(-hPG!cw;x=!d#evq_?Q72vrJ$bY&c-l?|e#ZhbwISx`F9odO1##okzeP@v z>HEiW?LXB~f~MVH0-h&E^gIg1Xu$tazc4NGw+P}8lk*Ye)P|kl7~l%8cwlzCNBCFB z@juS+OMS)YqG}w(Z|#4}Y)|ICGb_>jH#ep4On@a|?~Svpz-(w%^&?%(f*b{1ODAwd$=0!PwoH=LyqWA(*fr&jJXxo9@d}H>CYK{t3*Kg zL_Sjj%!WspeU|Y5eFOh+R!h0GB`DFLoL%8ai@N)pmF8qLAf%gcc zk(&iW?lZ}s|4P;Ve)Tp+_$*PRXGn|$>+ScJzg(}HBo8(~gNl%lQr+{*#M6B664MD@ z8ALjKSJwT|1}FS>L;((3Lr(qt3wkpt+USF#%wmM*uYEwq0?}2e$M+hH)>S?)U^4DW zi7l>P}r>=$q7Iv3WX;_Y4P9>&wD(NpA?U0X2m0GS;&Ms zJwI3Q1P`9ybYb@g$6(pf3?VY5X{wXLjmnuQLWyos+<9`4NM>t9)bZ!^Z@|&d!>+E&0*C8Ma1?~h=afm<1IV;s9dTlw$U(*_e z`{cQV1PNs8OBOD0*8AEcKk?vvM6y#SKP2dx@K&%Q8~i>n9R2)(*uyFs$aFyAdc zqr9^Ui&Kaz?|S8}m;NbP6bDlv17*~vRR2SFi)w=cCCPS@RUL7h_m-+WNDAUpVI!Ru zuL8L%(eB-lc(&5r+&M+as%ykcjj2f+n0_q`Qg5)0l&jP%AS+JJ8@Al%&(^jj<1iSe z5GZ6Ycn(fbsIDWYkOiM?Kh;;LoHR0;l^FwRO9y98l@#*loh&Mdy2Y=RDi8|!iYk?u z8>Q0Y3Thy+q*zWZ`bJz)a^Ay1rIx;>W9#e>mo9d5%Nk*J2#Ra=T#GjNR%EbDNCQ;|Wo@Wys3D+_#q&N9-h9uiy_s1tI3$yuPk#%r3c`eb9el0#<<_zsMFlN^g z2yQdtieKWf1z!li-k}-&zIM9jlDOnIaRIy$1D)`i!+rvWf>)yd7yBpju?Uqb$Q2@y#ilYyqn!$@bqmBeZ;3Xa{c{F0Jt zq@<&q$zctQF%+3LuHEY{&s#9NvV~wxWE=e`40hM#U?f7%sW0ia!)V7q`2r9hj$5z3 z#uN#h>Ye9@lx!qu|72t~s_sUVU8VDhbmWBB40fpIc-XC4zAMd?WRrlVidtcT2s%m#@)NS2On6;MZC3Xw5Yi{>c z!R{(NlbG?goZ*3AQ?xz^#S-oJ5aNBEN*JR%&Bcw)QO6iPE;dC&KWdzKP05V7nuz|s zA9L>wa%kmZZl8h!GHL_A<5jYLwW(@mKJ$v6TD*_-;3>}LH1wF+{z|7;O)Z|2->$}bk9LTs3~7;F)fZeF4Yn}f-E^wV=|MguDz1x?;b!9tQow5d z^29*G1r)nPaV{hV^<4MS=oHnPJa%d@>!>5&;>nVAQ8_)0Ye}ApJ52=7BNx0}d$(ID zBZWB7QW*T%GCP5*waBdPEHdK_alCyVy8kA{O8Zjrb)1#k7R3#0BDFpn zOHgduS?rDR!K)xcXrjqMxsd$q`T|(eI}gl?d@Qh40o>R*z5w1J>v{RyCBx@%A;JM) z_jh-;C)lh+8-%aIzfh_qfvF4*A}fiDEw0`+xvzD>^86}MpmL!YA1b3k5|d?>+u6Y8vBB5X4d)|HPq0*uDPW+gd2g%l?pZws-w@c@xsY#@!`c5Vy z*U3iNu~{oGV2jWs!2J2O?6XXEWS3lEyF_ck;)ao=H>IhKX!_fNU8<#F+v;-?Ldd$z z{_*r9)Hv<*SfVy5$QzOE%jDBVIt3>ejGBDfqwEzR`;-7ffiBmyt+z@|`QX20Z-;s@I(gbT`MB*<%5F?M7gb{taJsaYLIC@0PLx6ca(;|9D(N& zo=X|{p3AbZZyJC_W{lup@wslAc5JkBs~dNey@iq;`JL+|u<*I#HBUXLVYGPee0U^8 zxz~3(DwS1eVNXccui=3XK?Wt19h=FKvqh$(zT1|R_AiN~#<@%d6v4E9nK+Pe9WV_o zeP8C_U{gZdXCo10g_fHXDIIUzaYfrB!f#ElRhoOZbcAt*0t1Lafrq-6aH|99EIBx!?lOoW1{K3NL zfMx;BnGrrt9#(o1e=?b_=n+)~bIPeOz8P&63VT1;$w2q`*^q8N zWzmd}HAPHTksLdgHq>lPJl;xz53ALWqacMEjXLN_TX*buiA0DGpldqgzn>$I{bSi@ znmfiEjH|FaF9xWUL&B+~YzwEVo_9YHL*gsm<=1j@kUQR>2r5Fe!P9<}nX>6Kt&?{P z=ky%jjV$>gW(LZ^W6^kI(d?1WyFXK?k!Jm6Z0G{~47*Pn4J-+J?RA-Z*v4T!xaN&3pej!k zJbVALmt$S-a?vQP9gof9nH=pQ8lz=ouv}L{wN?HX&sQ@5Dk8CYC}B*3wP-V6mSRUi?B5hl4{{5q7j4I8or5m-rCh7)saG$R7 zAgudmuZ)3Nku#TG7|e?FTdGw2z2^%Nczke@)eFWG3et`wC*1t-w;_-^I96UzfEfS8 zDi;;+%M6C^t-ZkaKH~SlWQ$_5(=#$O^X?uzzEu3Rylt{@Z-!dYxv#D-@_g3u1<(*T z=_Mjj9^j+dv75_27qR?@>Cb=p$^23EZcCfAW!_FP?6dA01l?*hX~R`Myzt(A{tw+z zXVeO@kf~S~EO5Rq-GzXuICYtaef{ZF9FW8GC~qLAzio~2vX-zZ0kAD7wM~{@AvH-i-zd=XlGr)^Y?9SEb=%MpNqd>#(cK<+qAt1+;RW5(n z#h$j}c(p!glz{-pR0;z`jT@fz)5lV@=&Pd3g6y4Nd}S6x@|Zz904pkuslU{r7*QbX zSsEa;o(+-t@I7vlk0@s)i} ziOL3o_(}jMN+R-&R zt(lj^)b@F^+ptGyX3bDAapHViOdVSeS3YpBN1;k;vcSAhgnO@lu9}f=gf-7r*8&h~ zdby5~>vH&))35ysy12JjBFiROl5sHhsW>&4wdZS&d|?JOLkZT}@y;N95stT=Dvsw` z`?R{$cT;W$)_ZMq5;VFRoFJ$XNGwbM!B2teoAv8|)1R0Q6`oge*jTzZ@}1NhvHGvqh_Bas2kwzViSEMgEujr{T|WCInWV}BLg z(kr+|p@R0W<5eGU5!NklfPfvG%ShbW+dRr2Pou(m1h>Ssc|hs%n~ewgN7!oWywHN$ za0s}@L4Gg&2E_hA>-p1A-%~Fag+TcFubW)9{G+#|Kh326eyfm@J} zn0gsr+>(Uk&U2Dm7ss9JSASm|NuvLo2EOb6b9;?$n<|-GkE(=| zYxahRy9-C`?t71X2@dAEnE7G(#%;0LJLHG^BAa0RclCl5b>!8zrFd>qn{bh3O?fU5 zKQsU5MVfyf>ziNpyZrZY2vA=1CoA$6=1uGIQ=i5s*H-(kUR;bd?tl=ic$XkceXb+> z?%wLp_i=k?_eib)r=Gh{In|y%UZ8B{^pUjJI-a>nUMF*ITR{Hd5^(mB1XHlW(Q(7Z z!bDPL7Hs$3x(D_uJIOWR)Q4r@As`v*ZB^gl_G&iad+EDEuYqxrZwxl%A8-epvh<^| zqnUjk3jh8Bz3*xeN1ZvguM9`~gnnO4B$1}tUcWRHU-ipzvcLar)7u5XJY`QvjoQaE zUuyBfGMzlFW8W(FdW!Sa(}kQawV@=j!_lBI?E>W@R?X@zZ}8IMyOrawjs_$hd1FTY z85;*1V=KK0IqwM5$NMXq;i;m<$O?b%m7rAI;U~6!xN4d-*DiAf!iiqY6;d3w{U$RjOTBnw{k}03yo3MaPt4QoWi{N}u+)TM?%v4})WP{u1)WhqWU2yuHt4 zxO1yF=aMzWv%lP+>pLTLE~H%N1~lO-ha*&MPD61V`q3^K{fV3{?zo1m0HO@bBBE(l zbGle>uvm#v(V@nrJrQo^jILdW+jp1y?^-R1xh{<6C~7>_!1%)A3zCv2PWX498E;6i zTePX~&)#+XJlb$j6u)xHGpiVaYB`^AoeNhXjN;=OM98vy0tZgo@lJ7-y<0oU4I|Ql zAqJOr7)nhWE8P0w`_x5mixlECTF+1zq+H)Vhmi9*ICZhe39%riFEH#h^O6^yO!D*Ezb@%X%YmE`9lh9nD-xVtn@d5cEZ~gqbGXb$V}T&wmMH$V@_~s5*}71 z`gOq(MdBwNx!p$#?IEXkm^e+V|Ds{FyBZmWjDh=;8A$JK2`Jt#Q@XxHhfBZ4ofLeO z(dfN4WafU<6FOd`oye_SX%KhPz+q-#Ut_3WYS`)z&qUT;4u8O%E|{0)Xm1<`Hf-{o z7?L?{Jv+Ek!`$eH&_Yz%(28siJ4<=NOHB=eUxRX07Z&rl>)oxA=35ODdN_aasm#qt zn4$lk%r97S>y?e!#T$wg*E-F;W>jmDPoMqZ#v6_nACgENSjExT_C0u0>Jc#s84lAc znXNkfot808e+!@0_bf#Q+sgY;{Pup+-LuUf*Y7GGG_m90ba< zryqoGPdm_z`Ol7gck?_^COIQWkC~wdnQOnE$=#nMk)r?mGY}fd!b`Td}hrY z)Jg^82pfwuM~0S6T1W`fG8i3Yf_q=rfu`op_-+K_UH;=>%qU@2 zl~%~p3AMLXf0ODwy#jn%&UQ2ZIPZ0~v{)m43wwr_0v6|lkaTX+;_lqxy0lCp73gJQ z`K8oAP~~~d6R6(Ww=$%c8WTuM26}wQ_fj_p`Q{u3S!TEJDOT2VIoWX}6`VG=g?AYd z6zS6`MHZZQLk}5sLZqY~7YwJG6}&^nt~dssw%)U;@&z0WooHZ<`EH*pZoSoh-)qg& z!pl&BesN$ZS;j2?k-pq=qwmTlF0?2D-7V&f(1f``aZzUVPxnR&P?OH%e69;OU^>o6 z3h;o@5k_Z363mz*&16Aqf(!06U4r_a$35AhZHo{Xk6G#KYrG;WXbD3txS(taww)HMQ|!6-`W^$#;umz zVGdGeSmX(_tyG8N8F{pxw$j-Zap^sUx2Wyk=k%N4R86)zPYpaB)c4mu>KVr~`uN>@ z58w7jR9QPCN*A)9ba$(#yDu(pz@=)HQUq6KNL7}3|!}i#KcHOY~ZQ3{p%(Zb}_lL{fLW4o3{H_{W)+vf%XkJI_yRGSFvqj8D?4bbN zEiEeAF*v*tZ3MF(Ot+sz-82zGD_^V*Em2sQ~JZZr|#J`djDN*P{~Q z^6G5~5u8g>QXkpgCbZ&I5Q<2j@x6AxF$6vSJHg?b;1+Y-Ew_N3?U%@9@T#D1_1rb< zF81&*yBk^#R&KdH!^liKUAYGu3BdzVZ=pSg>~-vFHwNQxufl8;pOP%H7ob4IGozD( zjY+<&eT+WyaJnEKzJT)e_05p*FjZc;RjGem!w$ z_B1T1gfpXV4~ygT&(&!uO{?8zy%dxFjf`|QRHDVBMapX$+l)bAB2U1MUYNb*88{CP#eJF|j2i$nm0knGq-)>Uw=g(LiG;rrU zn1EM+d$$~&aMYJ>rDOlR>RLrfyJEHx)J!VLGc#A&P{{qoo%(EPxHU}>q#@I2lu7NMsZ zOxshgAKko6L3dW;WVCtR8+$EFDp0dFn#n{ekkI+vjyf&|bmsHbX>cfJ1#)&4m`FGv ztd&!LEg>pvMI3==G}@U#AK5>apT+r>84603N3&M?8?#Nx_QheyeRz(w;t3|rnY!X# zY`U)eupwAYT&A$n1758{ER>lUITsS*2)?A zZff8?_vm{^^Zzol`%k~YC15q^x}K&J+;(x4{h4JLBzBD}vut+5zILa;b3aqDHl}Oiu`=SeRvv$jO5iU6JZ8CP#-53{vI{FccHM?Tg z4~b7mpG&*UG_jFYi%EfBC-Id@%9p?D11ZfkflqOK&HJl^GG_&kM|q{q|2_!R$oftk z+8L+ykUh8h;ODyzhSb|l75nB;IHzVwgS~!#=ck{9O_cScuYiuHyOHQM<`8*$lmu$A zbL-Xu#S$17ql*+z#l zxI^~%_bo1)lViqjc16;SYlcLm>?F~>>4hizE%fH?R!|XRe>&_uK=Jg8Wd#mzDRO4Mo5hvNwu)IcDHxpb`k&JN6c=bV8Btt?=sCTAksd z>vJ8>ovS}?s=F$Z@6ptm>EIUjQNv2|Rx2~GXTb87_8`M1yoYPY$xcl{2n@CmoOj{sr_oA+$!kcX3 zxoxe?AIbRKVUqV^%#wi;HSN~ble*RX{r$$}M_5SfoKd`%G<-VW<#$=~l*pe^|TV*(jLZ87pVv2KvTLF$ z{>f*Efn@5{B(^q*u4%}yUP2#iAf@%GFpuge^pM#J-f&DfJv1pvGLMt&{9j@1{zlHw z{*OTwH&4ZkU#*nN8ZtT>p2jm#+}1 z%FSAf#LEXec?@eHpAW9xru$o9gX4O9hqMsntu zAx}P&jAGhVBut`3SsfQhiyu4$MKSEnKI>JsJJ}5(Sfw9Fsn2Ew9`$v18}a$`8CB@< z1qTNOXGr@`nhU?iR-f!b4_R7kmv1cP^GX@k*p)Ih*I{S4V|otF?&z%{s~l}pY~+19 zez%#a_-&6|dSCsJ$9Y;9R^vKR2RCx?8d;4Fmq^YEwN z@3WcB&Dai2WAA=j7lYRF5KcT3NZwX%{_g0Hl~^JpK<#U$hh+oIZa@Z8YgF=^4 zRGV>PseQZM+b$npyS-ilN9PGvZku7JAbkg|cbFt0i_7+K(s*%gQ3^A&tO(lCJI8+W zZxrF^U8;f~q`w6enWPH?k@^_@z6ZP}8@E0z6$i!^n(U?sT00?{VpNqc>r{2}q&Y=x zAr?5KVfpD5t$#zij9k!AfHPX*Pp3oNG2Z6IU{O4fE+GG$eKs9X@`47xxa>^ zlg9T3`t06|!8qH@(UrF_^~mJ7%?ZLFM(U73)=#xuO+0B%u7maFKPEI6tB{rI!M#YXI4K6{&F>KoU?rJQJdHMc4ehyE%`M4SQ?=i57hy^ zU17n3k=H()CPhWs^0lhJ435p+<>^3!Vz6n;F3c46?=E;(-2b_x$f$PX z4I!y%eI*E$N<=|GP=SYWub28`fdsb<*tZrs3GJySaES362@m|A4WYFO#e`hAA){PI zzEdgX-{P0cQm5DrDvPqW12HP{uX-MsxGaX10BgHXS*ihoVB4cZdfXHI^1Lcof~@Ld zN>)dOvNn4k%ypESe!?tqwc#~0oiu)5sh?Y-OY*&$G+C~TaqiChojm-qi`5MD(R*8* zqtP14SB2m~pv7E>A~@^`&H;}`s^JGUE!oQq8wG5BvJza~Ey@ErGi5zw+j<)Unv4-z z9;^Ja9;?PJh5Sn@Nid=a1{;Oh!oKfIm&h?b*W%y{jLwqI5OEZACA=P}ltxOhhx39r zb=+B#T9iW{DBtJiF@P_22p4IWrpZ}MF91+U2mh-?o|N?c*sTJyGYv>G$Y<}w-l7&? zfcTT8g=1;BSvOEsYY0(z1>rt4%Jr_+4eHrir(PXzNqzOXnYB8eIQlDJTe`rj->tvW zKat%U9PVxO$HcTJqlZ&oyWq<mm-B5T?xc1Oh`+NFII-@wDijkRg`?(e0=| z{~+@l(F9)m-ez{bgDId~eXV!$`-Z|SX`+nL0d z0q0|{C2C@yIL(w%xo?P}f@f3t!E#RGom7VgU&O6D5{LTat8B4thh+Y4 zCj%0l6>3R!Ah<*0QE8TV7&|R4T8Zy+0-u2&t|78gvKBkl9I&KE`_yDih)5R~VP;R% zuer11{_Nqw13uGwcO0a)G=g~}K8#LMsN%vr=U%PAZ26ZlEHoft?(~)VH`05IZxpa9zmiRN2qK4l} zf?%4cYpWMQ;Zq!V;=5@XVJ&KEl0yl;T`qG9Gi@E&z}1d)g*rNV&pyetxf!UO z;jj*8u24nVnR@)ys`)x(p-F@BY7#HDS(XUBnnHP-Sp9o>DbJvVf5?n-(^Mny=m#$3 znEm*{H{~acJ>D;!lu};^Q-0Uu`HqDA2{=_4bC>iV=hQ+e1P4&DG(=Otbd9}N8+0vj zA9-(+tE(lh+x)~Nb*>KB$5ZIyD)cy23(M}|y8efc-vWmm27v9FBv77fhvx5TaUDdJ1H z9}G{|Sq@I20>Wq#OVWnwJsvR0hWUwf{9xnGY1Wrm?HMW&51~+O;WH9dTtSexcn6~K zvmfQW4MiP=Hrbc&?%|%_ba^qjwT*MBgwzdOp*6^mHa)wleLAvm>_!Zy?M=I4Y@?SI5-B zXx;PSJP1n)Ax^VuF=76!od>%{H5gbufay1x7qFFc^-dgR%{^Nl`W`bvgQ>OJgZqt2 zx>1u#Cm+CuG9}fAA_1tF$K*4RS0#(Pd7=CZNg%QIoGhzeJzK52j?GEiIP*A4G(33FOlIDvCLePCyRae-fEN}eUkq^7Q-rn( zGEUciJ>Gr6R@`$~Enh%6e|&Tl!64E`JGqUjSEyB46P`FUG->g}EDg8l1|sYbe>SX@ zlfKqm7KF7i<67PJYa^OayB1own%-SFsIAL8R(9&f#8xZn?XNdPjcYC3wyceZOge#K zMFvYJR9$C0p^GaHb1jVb?|$658ejfK zf1x|<5=o{lUT+`UKk%y3v2S%GqyF7&z^GwKvYvm2;D_@sX>yNg$BsFD6lVTr@^6tx z>J)87X9D%Qk^j}gQ)GsIscEY%R*t-UIm<)1{?SOjHI)d7dJ|l#TJOqyo0%VM$~9v+ zHaEK4EafdotHfr4^qeQor}9m2@#eQZYZa4bF9J}TyK}x;luTJ2rFLZdnjvDFee#EE z0_obqHR3vOqwq<;wd?U31E0QGI*2Zw)vcM-kY%*(^GQivPU}bwKrU3V<0j-+!dA`= znpmFgsK<;>uu0iHN3}H1MYa0pLeIxHszRcfhGQFZAu%jOye2@2zINu`fT48tw#1kl zohH#+8FkFH-%sz8Wad0zAW=D>zwfCJdC=Sx;gNs7yWdkWW-|~|{^!=ll^YMZ{uauW z0qE%nI?lKkAdEc3jxxVQ$;o*GD6G``=P1eBNOs~uKhvBqZ}6Jq=fy^C8CtBqTF`80(&2(4W8iLyW#>@rqTi-Si=+ zxgaH*u2$2jeF8Z}$;T#+J7k_ZF8_xLJ%E%UR7uX9UaKfWxrS*kJ-e9B8X|Yu{N|;d zs&}GB*Z<*6=gqi+q6L;UzkITN%sRfjwm%a{7De*#Vsh-uoRQqU{TnUA(4efz+0*PI zLX)ucm46uOb3<9vYyA8K6N~wRM`df6yhFTu_nqwhMvse6e)FTe;>ZA6SX#6Eiv~lQ z^$PNG1TN8(OgPo1@=ktJyf=D?&Ro}D@c#EJY#^L!L$dF&SILxDO*`FK%$u-VR{kgl zQ(Lg~Y|j{0|A#eJdV?8zMoNx2%c#3daxUvRc(EWP(wAj^UmO9Z{LVj5`1{G-f0$z6 z%)gKPe`Y{51e*3AEZ~2?~OD*Jbz-v3Zx4(pAWjU#66JPr$#cH{+F*Kd2rdINS4(9O zb5Q2O)Ljxqj@vBse=*-rDG%~h7xFG9{|@XXge=g6i@a>mG2EbIzZO7wX~)t*TV6id z_1f&d#)hTv`oCWk7W&L!d+yHQ{cqED)u03Ahgk-r^kQU_>0XHEjANOrUY);-zd zUcF%YVHQO4mM!hm)!z`tvWtB=pZ5dq$Ts!(MAz4|$2R;2o&>#d=|VEGM=SP_U5xBpZz7!zxIzMdaq+IHWBgkP$46XP zx8;+6&W=9W(Uh(yn*!siI4=f#Lhlg^r3t)$FC;f4KDXvB|8w2n{n7vWo%wtJx+W5) zkN?jP9NaLyS~Ah#wvPu2di2d+@kZ6VycK5Zuk>XdDoz2n?%@+>z{KeJZ+cXb-3f@)e17+X_ zgVwJ%0nO@xTOFL?oh*o#ic#KJLR%kO)tPpI7V)&Hxj9w1`1G*pRhY~aGT_wf4Zykm zh^(^PP_}J&iCpdT*dN=`ba)|oXO@8kIt__70}7A{`3s2*aI@bgKG&vZuTd~9Mtm}? zbE>pO7UQ_rV5a!P5r2B9C#IC5)n{YR){LOxYasqoEp4#Ye5BGYkCMo1+MukK#Bam} z&_sRxJy+mRX=0|V9O1C{xA(sn7N(4Q%G68q>hiO=-un+3QUx-y_R<-pJ*(xaq8u9D z5ex&>k3^=g!7)uDevsJBQL1AF27~%aHp`68u~P3Ugft+H5pfh_ z1lb2ViL0!tzPdqOXjA}6OH@06_zx&NB#wPkz&S=Uh`a-e)a>kc3ET&M6NYwPeiB6Mc=y5!Vr<^L{?HnoPTjwe#U8d8^NV!4%=i>^df>;s zdVSQO_}UA1u2!q#RCQRbX2|dvv<(n|G?S*U_ww}U zM&FD>kcv2mNsa?xvh-R=0vS_CK8Hp|Lf}3P&&J={pbnoAmbxA{^(;nwe{x!#O9_G( z>DAi`u*Ol$BC1MXI(UxCkRN%cTR5*|EWQ55d6Vz)Awa4G5{{8Tz1o%TUI}mHQGuIc zu?Xm2iB*KhgJsmBb&1W8>9cnS!va{2Rsb4lUxi6#6(!Oj0rksF3e_q8+y|aX*nDol za?CNZ3Ttom2zW;8%;eGB?KfmFZARoZsj%6M@D(bE=#7&qpbW8c@+qe@IA1Q41I(+5 z;bJB6+fupgS_R4m<*GdXYNKRqjIo;_+xx6Cb>$!BQiX}HZa(k~uK)A8nImDV&-Mu2Oq=2`Ji4{0J2y3@=g- zReP#PVgt*~>Vi*>9OdP|II_n5f!C>SP`WoO4-RFX4tIcTpH{>yP<~h$h?%V!qLfma z*Kc-swdPUqVo?G7)x(_S!CAj+u%u;y4ksbE{SAb3qSVtf@Tm9hhE9Y*#d4XqeYz?3 zmb*f00H;rXt6h~hu3)*rxf-RMsv>G(%xY?fnyxJaV)WRP52+nBCFLNg2 zIx^=UL#1Jwrf7t92+A0N8NPFMg%vs&2jC)2ha#V)E<5|Ehr$B)CLaN7W=e7Ow+nb_ zl~+Xb=X2RI(Td1cD+HIV`ObdyOA4$(t5@d?b+`@0mv-VKx4!FF{Jo9wR1xr23!`H$ zTBD(rm@a8#VO~?{J9aI^3ue^3g^etEVAGqvv9b2giaj-Gdfn1gKXCx4HqzVmVY8lC z;uVqEN`ogN0?=(1TUH^!%+(pDE1eb&;zDY@0vqEb-%ouV*>udyiAfFIUs042-v`pt{ia03f2>$+MadfbxgWZ=t zQ+pAe)g*HLA_KWn_qr)8P8 zKm2pwwE2mY=)2j#OHrllx%xY3{%b`tmZUeA3G1J|AplXpd9j8Su_POf%z-f-06d@D zs6lAX>g;D}49s(^4wy}KfDr%W0nuhxvUN^f?eyfNY3vk39+%G5>?>v_)S8ee6 z(59}=RDW!c4t|agd@^3WA29F3>fXj26kPO*lc2TkIbHb5F@Srs#nCn$%jJvqZv(}M zsrMUR(5Sik+HMEV#G~1@l@j4M?XPIpCh%p(AU5=iX*D-v&!>91e`72;#us1;1QOk( zA;xi=`$>Fey8kZQti-)Yh5c4nSzW0TYZhkzDc8OO2?twTJ})w3_h$*P4+U&9%n5OI z*MK~1$NdqBSBaK6qFSZ~CQzJo3B4X_=T#o$Jae>*sOk@noQ)Z@wH7J>fc? z4G2_=wDJcsxErs6?MIKgMRoz}T+3*96@Gspb;ZrhAAp_nYJqayo3Wcy5$`nQnXgKl ze(8P8i{l*G%ub0jZe5>jvwzS0R-%FrJ` zbaDZ~ZK7Cbs@ggv_W{4j@rEKnzuXYpR8nib-`&~=6%!Y4E1GTcmse2RcBt_V;Bi~dAwT8qw9X^b>Rb^G9$4Z_n($61 zQGSCK$o?c__?iaqH;`*}D2Hpa?dvSl+sT#+^&daRytHCiG4Nq`-Y(t2AU`To%B%z@ z0cs}K+n0f`zVe)8>tgrm2Ht*sCJM0#>eaaV!u^IUbO_{NSTH6L*yK4r)$72b-E}K` zO-*TS{Z72l5fDweLgPSzOd=$*zMG}{$3~sItJ!vzvV^9^ktX}k8nWkn($X(RfdtKf z9%of49FD#dqqLlJP00R?V1hEn8ME26vGK+fr@D+5&V9e+zmk;;XjxHtr;V|{ywBSJ zDN5_{UXC4=#vFuSFZVm0hBE)kgriuxx13pvJLaf&Y{)I%b|Iy@zUog%bmlilZg-QH zjC=&-D`j1=6jfyg(C1QVTyRp)2?zAwr~Ga7eYV(Vl>~ReJV7atO0`g9Ob zko#Qr$EO=f=N_UN9_a-Ks?$yOOAv<_m*D{L$Go?boyr72v2=tRI5m9%wt#jIQ*Jl^ z?~*aNy0@kO*~fpcY`LIrS9E7NC?bGVY{hKk52>E?vRdIC_K zK8g{%xSY}uIjvO6W?$3(OyDLFxeiiJ;PINDzt>3=U1H4R9!~%#@tM%A4WEVeQTKOC zqOD2~ZPYeZTysy_UzAKbJ=HAN%YJdJo-UqqEpfByzjiy{rJtT#CDe)Htvbh&0N;}M zOxM|?=8vm<^ACyC4p*Piic&AU%Una1?rEK5tt%qiIlKc7LR{p!B>a~kA7%$Z;9~2W z1@%OqfsrMSm0T1p=|s5!cyn2^NJ}_!W;PoVbhNqJ-A z9K@f{hEf)s?WV=@WSBZGsWMA=yn<_9<}Yn_m|!`7nfOf!Qb9b#nQx321H}p4)cX(vT85}Ib8mN|*R{zO-Q7C`~(ByCnjMN{ob^A9_>+ zI%nQ9=pK-Km6Z;bvc}(M^QoWV%9kZ3-wj31_*`H~GhpSUYN-#@yt) zB35o74iKMt{rdg#%b$UeXWJWJ@h1C>5m3eG)mTV-Xlz3C8L(cdAn0gQkP5tX*7Iz6 zqXb@V+nZhlRQ_6dqP%J1W?N?fqbHhlV>nGjvur0++jbm~ustzCP7aZw{6 z`~h)Ji>$1pnA3&(L!bVjGB__VxQG`=urb!92a2W?wNGinUk%k>`TSBSe_z{FE3IzZ zxW=Y^c7Fc!@Z}t|ps^}v3&|XC>^~s?A9$e*_&kYE{miW!v-)M2{XK2^;5`^Be!_lMg8)3ZMvD@31Z z`mZE-LV%_Y@3BP2@)2yV+mp=IE}M&aM~6!^cG15`4Z*nSNP|HBZ@&%!G5Q+6aV+U@ zjErNP0{9f~C-vx284w}>1hj+qFM#GU-Tw!o-FbfXxBAS#;Lrd4j;AeIKw*Bmv-CL3 z=qjqQ6@pO+@BAU1(VqlU&QN2I+l%NBX|t7m0`Haemy)(7wW^P;P%!mbF@p@-mp~!p zdRt~%`&Y$A)-;E$RO3v@Nl3)+k+h~W%>@2*$6YI#C_Yon)yOK>KNJH?X6(hD442(& zdQQGg!A~Gk-qA4i0y4gXgBvsI4NnxJPI3U~q+h>GBdx3T)!4Oy;Y<{uN-+z&UuGoQ z3rH3v{{Wp4t}{)9w$Efh0q#8WGfE*RW>}e{E77?ziV@@sti7>BRT8hs4}jDhvafX< za{^EfgDNXo&!gm9XUqH86>K!h-=^X%+-1t|?5Jqx>sO0cHz!I=W|2rK!!i~YRr08% z`%Fxa2`KqHS_FcL~dwD!M zOWfCHY1J7ZcmZL_^e;_DK;Db2``o2|gbqaAO6)cLM0T&nLL=7eEXrs%8~*8Et<-s-eNYLvWf{kUP|Mr zOO+l_y&+s^Bvk(D8)tVzQAbVRqTzA}kNVOzaJ;GO%`Pz z(ARf|^Sq)G_6Tr zlKIU)0ND6)hrXs0pwDUXJXY?vi9CQ1P9lvmo|GC^Wh>|H0r(BF(tiz~0UiH{7IQMG zfxOHF+GU(kf{z|yA`tt)YOb9104)S*!o@}<3M)VYs9dWES0B}7DF7NtN_-Yy74TZ(w>Eh7+t6R>zxm;KDcM2b*AeYd2*Y{^@Mz zexT<^?aU*1pQZzVxq1y;;}md1=~Auc3xaUY2mE?R01W27M<-FU#BuY%04!6fyLC%F zJh3#kY7XGh^^1%HX1jQmOrF~kEE&!I3|U2`*HKOeIb|`w z=$@7Lb=Pc#!Zb?Lv@IqrrI%R6{oxxORVRznItq@lP19<3FrKv)}x4Wvglx7ovIy2-u*-?=F zo4Q0#stsI2ueOc1Z%&TqRr~5`iG8A5)Zd>0Wj|isP+}40aRT6!1n$H-!!jf9Er*%H z@^taO_nb9`&PH`uKI6g2UwFORi&}afHW2`%03l!CsX@csBmB_ip^Y#(e z8x(b`#Tx~5RID{E(s4|tBAsdvHm+<=mNVV`rd|mIh+(5&9R|gda_qkx4_knYLjS3m z!ZjMc_`t<1Aplj)iyEu+wcLQld`aIOHu~8CUNiu3wQsTnpmvSvxC-N9E4qt8%eNlbVEg1l)G@GG!9N>kqK!?^Xex1VKbN*xr zUvghB#EGb|uhE5;Tv{sjlkN||&JpA%IaXKWlW`Bv#dkGOV98yc7shE}PS=$TNka`7 z*eKlmMFj@w^$B^?yRH@FOqVFNKVCfy55_sHcy2iwW~gTzjX5EeW?SQbbAAU}9_NS1;W3%4Ip?ffqSfm{s94ytS#P(K;>UeK?uE{!t_44O! zX`h{+uNS)49AdpNc}g*V#8x9decG12vH@u~2@v1f@PS&_r*o}5pldqr0Ocj_6y71hYR;tJH6;|ul#?U0}# zMW}>YFXb!18L};O03s5gb}Z~q1D14qrkR`3z}I6bAXeXh9g-a@?X$Jvb0qH&m#7f8GZa` z71MLeV>*Og({Zhg56@}R=I=dM>Nrt*-`exA2G+|n9ts+)%@`+ePhR=TwR(-}T;8I* z%_mWYwviI>{dWOCKVm6H>{X5((;YV@slDmKb47}z0Itq}V1hXQuS2zs$7Psk4Pr~+ zH$ba92-9U;5wcazN_N|xA&&y5p7R*g`*&}j9q+wXEKfgC!G;-%C6P-O7e^A9plk1) zou0&V>iQA7%0~G;0R=is(9PmQ5QjS=55zHTx6A*XGUQiR(v3jrpIHak3<;=uLz&G$ zChEH>?}kJK-c98Ne`8q9rKNJe^#07Alc~&;kNW9U}hv z|5%u^mcHC#N$OFjs_K51?)fsNY=rggN2>w0qT8p-TbYBzypGy7Rxr!1i;mLVe_R>L z5rFSUZJ#g-I!?MeO#W)QB|vvOfh#df%5`@zt**+p-*0o^*cs^!c7k)Q+D-@^QE?0( z9UUzX##Q;%kKUvyv(ssi4!QW)q8;vx1A8xf{K(!wKBo zWym@)m&z8oa(`ZjZCY@^UPUZcd%AyI$^C7$!;30fnHCTX!VOnmMxy;h<5 zazg$IH6CvGOi=!w3SShlr zxtd!Vk@@OLe1nU5C0zOtHXa@)LU4~htpxpFaAZ$%g{V2+$-trv@K#Lv{uW{XWoc3S znWH}WSgy=hUmdka(71o?%r4zg5%VzO7y($DG)`lAjxPEt_qQX=wyy74^djeKXF?K{s>}PBR%X3@?<{IK+ac z>K)Ap4I-G(*;Bxq=Z|fSdp1i>0IaPL@5e0GRFQIywNHQ)DSEcz`QZYJ1CrxaUG@|8`@#bCh5vSIX&2T0d$m;=t zC#n(q?SQ?;6)COT7hjnRwDn3s&XyZ)8v#vodN~ekq0Ck-?t5jT=0HmZK+c0Bg`IWu z)zOxs=DmxrfXHL~&u_`6|F2b)yX6*>tAh-oT~#L*v;Rc?dV>acmpNUoM3oFl-GO1f z^0%^WtC0o7P=wKv#O0prg0Q#T^O8aGOjO3U@wvhNsTbb!wK2V_v7_`PX=or~smRut zIR?$xdL}9tH4N~_{5gPdq-E~fF+Se)rP}?@C-#)*5i=@XG@TX|$*TFk=l=o>eSBbu z9f<3ubmUsIL`6M|(v&#~$@^A7CUuD@ySKtE@H2$$_kZbHcCH_goYO=9)uk9@lTC#( z0h580L-7&G1u0JAbM>x+ z1VM}pEbY+A^_P|FRpi{+MCRZ(L!p}1UC7U}@F!^kH8x>Z*y)Bdn_-(h_!+KzciIGL z6y;uy&uUl>doYh z*OjU)SvaCbLLEfYyq1x{IZ4h}*pXF$AW*T%S{%|VIt-)%-GMY!*Jz>BmGX(#gAq+k$d z)2?PBTjJKoqcQ$$t$2E%fog^4w1@h}ddqep%B>F%ykpVf`OY{x@{zcI3^iOeTnN#e zEpR@dk1{-8>zRC7OwWUOGI>5&XX^<3DZr>fyjkuQQc_kH{gsmc0b}aWekO_NX9{Z;tQcSA51^Z&0 z_0-SREoXnsCTjL$5UVRVfBFp~!kV`EPo}e`DXJjGWr45%p~z`ii^j{@PZ^07+!#b6 z^+7ZJ`YN_M!o$i)_wS*@_q4ip!GHuAWd4s9MgQ3uOd@#+BSQIv3FqliYeal+h147M zh83Jb)2tWiptUB}{&fuvt#yX%Dz(`p$JGX zQF`wk0#+0e5Rf2U=@3YyB=jOkZ$f|&dWXG;MwQwbI!f*x!=9-`~7|&e;AXs zva;4(bItk8F~&0<==>sH2QgRL-K#cY7c(A_fN8qz{z_(7UvwxAy`d?tpKf1h3H%W} zkzXTknfo<)AhVXA7;$4`#v-Ch8p}C%9}1A?dsr>aC2xyneeKrFzs(R6-3^7`%h%w_ z>SME2c4gMf`u4;CZlwQ5e*T^O$LDdn`@bx5$~|M zvB*oPN9DH;JnJB4q8v5V#T}x|D>()VDl6UPhx(%6C!|>LCwF=;x|wS0Uy{tPV4MZ* z7GnI2WEm|pQ1-QQim$Y@Mc`loW4SBRUF0RdwR^i|T!v@|0RQPJxBQDu7_$zsE^#4L zq`fjmq^T0CJCZXvVOLcjm_AjQ4{O%u)x+1DK_YWKOCTQG?AYdG#2hM>NN$9EgvUe-Dq6F(Pg)PsfO} zpe?D3ZgtDBw>a-w%Gp}xXzNb2`VY73qQ6bgSE(4N^%a2UOPeS4%I$%|#mR{U zodT5s7QB$uWj==PMrXB9{|NA$>gGK+Yjd%4Goy7Wjx?QCjm}|KpDLbfoa4LnvuV|% zh=Z>|S;D2cQ#Z6JB8nrMS!YUDK*6r5c}$0{1|%y@l$cG8^1ro`XkYd;oBAn0?L@lt zartP|J}UC7GHb4%0<)9Z)EyxOU((6&<+Hw+g1ePxPVSpax^*T-p=e0s+be3=F$i(t zr}zgh7wgF~#mcXoQVS}ktMQDa>4;?^UrcbG7hT(KWNnxcJf3|-WsP=oKXt`aXF-p$ z9ks+Cd3R6*ao_Zi|;jwfT^=a7UD6_L%x9nO?SVbY@RG8@WLvyz}m!DTi zN3HC{;>N@6)cG$3H<_KLp=zt8)v}xyyz<0{g?X| z=*yR6G-{OJ*O@@ZR344Wx|NmnY)WB7coxJzc+Z_+p!~*rRYdBhCLOd;)mggqXwfw) z4>o*dS=gzqZi9A;22%R#W9_#0WH>fdp?HiHDB?JnwxmL6H^>y!`Y|)P8pe1f%#a;? z4H)?(eb`qb3`)v>Jws7RKQ}_xFebpiw8Cb=CXcAiELf2L;W07OzspoF-KScR)fCe` z6p1>m*6#gwV(A|E2rIT0C=R|(<@Kx>Naetv@n==h-|@iA7tLt{nBA{pC!8Klr8I>bM+#SHpi(QH#6s3`REDew zdP&8tDnPLZJJgz2S7{dO#T3^|KXv($59{TK&UsMf#5M5B?jmGM-~3EWaj%_!FZbr* zPd)$j%cIcQ1zOt?=d%Hh1-hqv&kEu1?GM`!#5*|$KD<1*ei%r571Ao?M!$Lo3)cm4 zlX;waB8&0GNk9@T)xv=+bj8tiBj3JVEK&1*SEJZEjnoTot&dV?smkaL!~l>`)z*LC zf~lhF5j)-jz67(tsd)YK<`|~eRgXejUNjffAYKjzQT4(4^1=z zl%WAW87*Ob!}G`OLD+Wd(WjI%C`A8LD+6K6;ZIV1q+vs^f`QW})~@2N4vg$lQfM55p51V{{f|cVlm^um$XF4q0Vx#dw`J4dvHBtDvz}b- zoQxw=9tR5}DKColY@s~}rE9gFEz_fK4|*Ez zCbX=17%l79(OLw%tYyoyByxZhj%Se(Zp%e0iW3rco{bsK+qpglo|-s0f{4@sU!g4jU?m$api{rYL+ z$YB*y|2JyfvTOnLjk~bBURPRoA#!rln|kDCqZ&a_DX!IIL0alqcZ21XY>DLQhBt~({q6i=?TIZ ztreUeloaY$4t(V3@7*IV;JI1Mhlb~vS)VEGv2$l-n{4)P<}ZNEtj0Jg&k#nfx$f+1 z$AFN@!!I|O^X1EzsS{f%cbAi7-L)+$tiCUJ>EG6mIv4NGZorS!w&_nDBU4`+z$|_i zo1zDKp~o#5=Ji2Zar>b6nGCY%HTl!frbJm7@zvc|yIb={86GO`&WvI?3#n$_mM_4 z*DWSR!zgO1;n*v%#{Ep^6t6PHXTFXXbxsNzn+0BTNkonHh20??Q=z8oP+Er9S`rOozd23c=$Uop?jlq@f{-THK6H|Y*L|wHViU?d|JKkay zwC9!6lD}DO-87R0ndwwG^L!#^8g6<$#aNR)dcTot{dv%}uV;xbG`hciP~V5$nh1aW zy>?jX+Um*-maVSmv$M)b*1aPY8`xnQ|G~CI(Oi$->L>H`3XS~vY1n<2lzG!O6By+_@VyKFnbov*#h?^vkC z98g=2jvbHr1d9g&zL>2B%6Re30YA&mI_lQ^@1VyBI_~X0ih$Q?8MXm*m8)-m9Yr`z zRUHBx3PX)E+AKNr2Vq;&W>mYnLZ7zFfc|Nrr*~k*Dy(AkE&J-=$%j@v* z#n8O3XYLGaFWx`Ad2FVfmll@#`!fd-R~hZ$~?- z{DMLNYJ64;{-d%WXihQIawmHu3w@V9aW<~Pr$O?Wd*+Y6G?#hm!VT}s7EF~lcU5QB@UJtH8e%=Oo&5ayg@cvd|>>6;oocZAhZ4*Z`>IyrZIn@J4WbD<+uHA%t%VX>(# z5T__<8n`jj0ez?UR<|L@-Fsq0A)=5UIc`&5%-gYurCPZ+2(#k5w3!%veX1OjaP#0! z2dmyxTPi|t@XN_~`nOZi5f=SUQTn) zQNvHIYkk9#!+tMl!?B6g?SwOhN)=+aE50GWXE6!L%%6`gIYqlDn{R&5f?A4~cF%qo zlHII^~(Bf_W_v~AUd3gITf{Y4l5N_6Bl?5SDZ^9 zzfg(8T(_3=UYpi9&!f2`Qyc(QL>@=X^s8$vdsX)eFtBxe_OF2^g8lVu%+ac zt_-!kg>k)>9)xycl~W!F#!Fpwe6AW4*`#xFhNIsrP%3=h?N3;5-nKcxThaMne*ZBkRM9~Qtdk?P3V($;kn&qfDt!|nPAN7$#%<`CfCO8{B+tCfmN_} zJdzYhuzqEHD(v(*Bh#t}{)16FG~Y~?+c2!sY%P4>$73wsnZ_2eB-95^CeG9g!+I8X zwH@#Cv&Ex%{2Fa5i4h0u3;jJ9zNJK-0MiIpP;TgH9IszD@j>iJM$phuGB?m2!T zA=JvdhFyEBO!7`r=X{p2nSH=D3>RDmN+%!1Ti%tbc%RF;H+N*C1(gD{k{YFMLA)3F zLbo?P<3xANL}MFpeL30?jf@oRTypyQ6LAEmZjY6{NuGW#<~4n&GukY|f)-H1s6B7%1us{fdCTQ|@6_H^|lMe?hCxE-QG!U>7rl`rz zzVDT53IrYf5991i>VtCrDF3tBKW|gAev1G?nk=!g+y1aJ;m+&}f!P=CU9sGf>YBSY z?5#=}V_RvnJ#)hqOx|zf>;iJnRKYr8B~&K2d~rU*J?}5?gwT^Pnx}(!N0^2}B^LW>!GkYrU*MH+{B<;Jiad-0fAiPWJ4Wb61+tH^wdL7NquI zvaJliO$1%O(<_!#c}u!CY_iGhAidHlc!YfoxE3F1mAKAG19Qaq`-qHgV9FI$CE;qJ zlXwqfrx(U7vlMS}uqAi;w@16A3^wz&2$ILsF9ojF}Au!(U(90y+r^7c+=c{=YXp$o-yaiT2!D zssKqbe9+3AqN3=Ck28f!`Ygrnd z(-u9DT>t`mz+9u|MIuGW3EV0$#@+3VZzI16L{?m}i>m*W9?7$DdGm|WMU-b8$xgx| zBGhWeY*{A1-fmr2j$Ph-ZI10ti(zZ?nHtEq!Jz1;B^?Dr`EjDwe)~0VP?e--^F$Wl zI=JuNUCbsjp8H*CEuDelInbH89)ydm0Cvy1 zPY6h6tnoGe1-2=HKwToUMW(OC*pHA}P^PI&N+{tU!YT!IE^Cu9WNJExkv!W;lqn1b zGuHrqC9B4jKtUHk+B^W7LBWDD=kkmTIox>}g60$D0EpbWH!7LBLHu{2iqj+xwS?#4F%O1RUJ+Cru z12VhFJ+`=qVF|@vt82%o=@lQv+^SD0SPeUG?|r@?jMGKWu&)0D7+mYLZu!EHBaea7 zVT6ygNeTTrm)kYdJ>-U6AKFgn1S*P~qLTwVq_z_)o{@=;yPiqMU&sm3s3hr2ZRB1! zH<2r26+5#npL7aQv#-md&7V=JbAK7DBaoz4R3$rC#1#hI(5n3i7%iV5;ndz3c0~&yI=Dg;=sqw0fkm7L2;3z_5k(F?gI0ci-zX!}>iO$1unKBV zvUbka$Qlm}iJNIZP=Hy6X;ze?FNRpOz*#u_ub7Km9`P+wTQ!kisGaZbvIXj7yDOyK zzQGa~nw^yj5W2`C!sbPMJpz0;`c6UVNU{)k>*4^$e|u$&Epq>KIm;*ZnTZVc`EKMh zvADP7y|^}u#h;bA>$JK-F{+045smVy8d^PK_(Jc2Wz*}EZ3$%uWw3GYU7eQ#1YV?G z1KMNUChq}8qXxpbtdCUBo%@s}OxD=0+hn#YtXG>Wg{0mA&;#;1-cy!suhTK5LFMyC zhS}7(`ttBlq=;(aluD~?M5DR$MO)#MBNYrfb>~P}DAn_f)cw)NISUovA@_PbHA`X( zM5U+I79MqrJIMDHb3>Iy9SvUZxmqL$*@uc@Ev7=;Ay)#7S7xJ*?yQ~I00Cy?#_I9t zsRZY1irEpiK5P9qNel&z?y*5JmDt*w=7ixDoUND8;MuWw{j|H`L0_mbu}Sr}gFoA| z&MTxIIb(^1NlbiQ8(%rc@0mX$nCZo7a3Q$Pj`noO!bKU=+knl;7hIAA1@RF?5n!v zJs3UC3w?JvM68|%#EI}oZ#;Y~on~1)3W2bPi&u5z9seA3VY~Q zFnaaKz5UkX=1cbt%G4@bV_n5dDnJjQ`h&Bgx3}aHI1XEXKg<|~6rUCSo2$X-D(CH$ zb#@HMCZJnLFoBIh416*C}Bqlhn|&BsZ0Q~i_%VM?Kfd8YOWdhMmY~P zBF<-hxS&_R?p@>H`)Lop1a0B;jLw0l1J2FE^vn*R6a(nZzadmgwjQ}|hN`4=cJq8? z8)(VIbso%XOM^TFO}?E<@Fv&bRh%lKg@GvV}JWrAZltKIw> zLM9FmU7sndpZByk@^>}ETJ0}bmV4lcaE>^x5DOQ%l!Xw-1BZ^kk;qCPbLVgTjYO_* zxr=eI5zD>3%7SXSt5l>;v@ui5*z3g2YkcW~70SeMR9M_|oT&RF?JY-~aD|1RS zOrq&xQd`trVWiH+0x7Q7cwzx}%*C=hbkX{bC$`r&zCy(D`r<6>pKS6Wa~zfk0K8t$ zmw!^nSe*UxokQw)-r|mXTkkTxFXpNCBFc!C8`VFYVAXM{Ih}=s8T)b3;6RaRH@46Z z9lp(6W#ZcrE)ZcPH7-z_*MiyNM(DKx`!xljfs>hdyXJRA6`{uYwA-2jhZOQ;#Nsgp zj4oYUhY_HV@v?4a!81SU=1sr?nK%X|+6Be;e|2P}Gx|mwKi)XqMF*>OT6yXI^TO_U zbZZ)!KwJA_y*DhqzaY)UHekW7FQ9#ARm2zL#=1zKK(pJfC+BPi7G;3vxhu#_m*~&| zZ$psx-D?vIdevC)E`U+40E}||4xYvr<0nfoJMu`v_={n~+fZbp)-OgG4=sa!eZDjw zy2Fye50%WncxE=Rub@}RGKN`i@ndMN@JE%l{)ES$qg{OT! zHN?#kqFql-f5(7)hr{1UoV1lf5?ub+O zj@;jg<1pQT&nOEtTaj3flpV?WMMXP0cwW{f4SL8T`(jj24Sj*{h`!~&&w?-Iay!Q5 z`}6h&n*t`);prLj+$;FAP`iqVQhI|~9oBC&P(T~rNMrhGSY=XW{=-BR!SZwPcMe;Y zyguWQz%=x-xG?{SCD}YkW+3weu_8Utd^d-K1z&GoNRDHKFQNBKyA$m-w09lO*G9k=T68D#|RR}XpP z8YB2Ez6HEC;Efq)FD(>)FtYBzATyWspyB};=J6a9-uSJVr*3_&iy0rmw;S6w@a)QR zBPKU>*;q~7v&_84<{zxF-gRUig*A51MI87d%*XZ7PX=<4W6SovLAJ`Fhr}`7Kp>Ji zjU{__7@3lU?zxQ*U(}V~(qxc6)?Us zumPpgQwRaqqJaXLx%q)7-62r>n3+am4$4sguLbv(V*W)OPiX5+OZ`b4>sjj+V-pv# zk4MHY4$WSK2YBEM0B;``jSDe$AXyf14Cs!O$2)Ypv?LFOK?0x_dJEh551x$kaZ%W& zhg@-RGxL-P6^NJweua}SF5b>7|8BDdV1KWg7kp}SFX7;eL)aA_GRJ!O&*qV=m5qgK z&trSU`E!HeWbbhAo+G|k*iS=f)hAUCc6<~kpH%pQQhso*vza+VB#Vm2A9z}z67a#( znr|7-H#RTvNM$XQ=bwRSdl=*20MfW{>>cc3QlVHke>(YDr8oJkFM->hMl{&w7op5D zSpPUBlep_W9ip&^@94jRxY+9_-cjBZPA*T#vw7Ag?y77MI>5at?`s-$FBWwmW-s%s z!yo@$x8#dOqa79#NnFrj35hywRT*pFztl)au*%W>gM(U9Vo)Ogq{LudW9-ypLgU=j zV-iUji^LMU9F0ZGBcOcLeM6x+%ulCo^1X#h{5DX4x-xl{pW0I50Ysaw-Q^wp{+6+V zHrAY7dF>0O_8>gL0YO`a zY(O&Mhn6o9=TQGrPh?qDB*D!rVBUiNqdaz*9-CzgN;?dNkc4fANwseM;VeBvpM?t2 zmycs(=7|flto7wF$(Fuh;t6HXIzkE08Y30?xM^Jauj)xW`-nX$k?=9{bW=0ob^MbD zEyT;`omVk3Qk7vk?Y{`-(1q8s#u7(AAyaCAS}J-gOtyaENG!7IEwp5!ktk}RmJzOb zRpM+!PW;iPppWrao2(g5 zMBa+5dZ^kuxuKlzVsbsh(xu;{B|Hi%CgB|!DJg+I@1nt-;c+YfY|-+7LgId<&L2us z=(A_<(l6j+j+J-q@Sy0ziqD&L9P-oeXYrwO3IHPPXy5wZr+)g6jo6lqO`tTTicdr#z0G4>*AxW^iaO>&|`|hcx_8AI!b=B%3}MV#n-Muf8Af5wvP-)*S= zN1U)`FYcY`du_72F%AtrTBN`yY3Pw7Y~<&Nno(zT5RDob=|DF^Z2L5K#6?+bXamdx z0&p5^xj1AON6*H6h;H4nBQbXk=p)hn^iUJ=-TwmW+#+zH{|{?BM6pJ!-47wZ*dJq6lqXmr*03`AkK_O!7a&|?6=O>_xRk^r{{*qBZD3!{)unGk#yvJ%{Bw7dM2EX{c2GJ9&Rh606AjtE?Fc zrEu*>TC-t$;k)f{Uj^SJQX9I^C7XR>tqPGYJ|xw()w+yK)6!&Mi4<~48oKN^n^2Hq z1VLm7it&y}+4#U#zI%3rIt%2ELC3esVci@3Wz@q`;=SlXct8_$ov4kqU0Mn_7`%h) zlC)MLM{ut_%HLV4JTg;X2JcnT^m&k&Xya2iBy+5TJf`1&)xP9eNm&-b+|wh#%|F@J zx>jT=a5{+J$j1`bFvDE}7gIIZZx}S{*%<%A@=9orpx@8A$R{`HZ=fPX(@!M5;X$Ug zVYT)Ibr?h|t~$*#Fl3a%G0HlmI77!wg7*u9%F;XF`n3LtLb-ZqV_h8__jkJ7a9v_Y zw5po%iYf;z#e}$EVMEBk$tUF7*>1$ekP+ip@GG)kc4j1?npj~+$L;+teq0wF!PXBx zp(QFq?k!~#JXqA)(0+|+h(OV4CxYgd*qR6L&Bmy;3J+%MO921clePyHov6#;k-UCC9bjYX{@t$JyuiT`J2qYr!NxC5xaYv{!P&>MeK+#BbRI zwRSaQ7t0Lrwm<(B!dfD=@kJf_3EdeNr^i^AI}xuUY_pg(CaaUv<)jZ9nx)h}HIF@_ zQ?k*gd*yP|O@JjaL!m;%yt|P3-qas+`n+%NN?gvime^~)+XoKv)#a)d)@2rctQZ`` zf9h&Z`qVceYB2OkxV0QHRB55a5#aovLFx8w3`WyR|HJ}HX9&=uA-QRNUg(vzy07U| zEsrWA3?U6O%TOMzXQD%k-R~0URZHQ`3^9HQS=OX;gPUfA)R)JacP~E18mW@Yx4v8B zG)PCIQ0k%r(8{%o3*boLB_~}9__I9%8Hu{wtQ-~3?o6lI7(gUCX9B-(l zPr4Cx{-lIGxcdBS8O+GE!xtNURntkcdh`?3CzEbm$gZk0^n%P>WjvhH7^se4r)c3+a&!>a( z$lv_k9LDe4ezpx$ddJnOHuEdXS#MBm2;%rCH@zorU&E^6AbK}fQhn=8@%OebAE^S^ zfN>y}AfkRD>;e6^vL>yh5tN|MOzVvx{{rt5Zb79GrQZ)VUP4zaH*75n6o0$=qPono z;X?`LN4l4l<>Z+MR0|HluRKCaDjzsY%ZU}OSf*)A9=iE?J&zy0!gc&{lK%m@Kl#Lq zfeXb9N4^;}i6$b(Uc8^6y#bwC`1Dc`N}2B?AN{uC-rhb}HWg?X@3GJ+f5PF1!Iz@mLrBZM0zIlF2?n)R$Apw zmyEz$Am8GF;S)@ns811tJ+~@UuYy1LJWA0{2`|;>#}tVhh83rPO;pcoX|YBpmTH8- z7E*oo?+~kcY3tie*h4f(dSL&p<%pD&SdGoFo=@u0B49+5gv5ar~l zyzYvy?jkfP`RsLOw@;jWYoR=oA*}{F3I$_&&TTE)vDH5Kui`(0FO;o+u>zzB(jG#g z`~kaW4(XIlRD+=aGORZ=$o>`YywmV=6e9T+4tkw%`2L?AH_MN=z@f zZ2gP5B9Nb0Zfw@A6{$^IP@Yn%>c!u{N3H0z(}w`%^BZ+r#E2?|mJprMOaD1fzZwt< z8J_U#hld(H(b;DwR>y%)*5$wS4@*92J$r46l_gbTYLE1Ylq>K_J-)qrndao*ED9W6 zQ2Nwgd(agCT*6>^dyA1JF^ApANs5AHy4q*mJ9G-Ysst({O)hu3Ok6BJ@yjLmzp{P> znCd_ENC0E5KKgI&lG62~9aRUea|;hb2h&{NE>~U20i9#!)jxXabA@cfymDhyu;uXr ze7=2y!wIUWAMixMg_Z^+CgWC3>Aa^ydA` zZT!Sh>Nk491CHHpd-9nYSXrc)F4dFlV)8ew7O#W1O@f_kB$b z>~nCGF|IBB-)IzWL|Zncv8p2rV`p|9(*JcFI^;qqe#3vd3a`+7+x<{ksk={X8l?O- z6;&|{km7==UVeIJBfBC@p<&I1UXwo7at7#v zX~Au(R>{`My>U=pQT~ZxZYmgHZRgH59HlZg`TLOnoH|a_J{}A!E91b`NES5G#KoUf z(lNHUPy;8@6YgxK)vO`h}waSXLbM)DOcq(2Rd+@3wyVu4z z+bMJ~W00{6RPGCSS z{e3LobSmknXXl-co6;cy@BP@~{+=KC>z<8%?;f>jm^PQlx75NOAz&?C2x>vG2b1tlEM)19RP=q+DIDJ~OAu^*~NqK&L zqQap^S|}yYXGpti8*)imz$n|Ra4N)Ba8>#45h}GbFh7Mh{p%q%3aw;((Jj;<>+Q`Xhpp%RKT_GdgdAtJ2vFk_ai>9 z%r6IW---76fqu{wr(@EufaECOQr!X>$iNR~9@K^N0F@dNha?*q%j!j=e}Iwkxn=0z zB7*l553RtA^cWa+k_<4)L5+5zzL ztxgA<)1?s7q5_FK2spkZNV1i&U2Fg;4UZu}ZJKu4!~mt3DYJUpys23x>esm+>! zj;Au&9Al&c?0&cd9Ea#WRpIl^wW+5Y6IGn0vwgOfWM(WWW<3}Dw~3mBBxX?yjqr$` zIZ=m$9`RbB$VT+8MJT`VVUgO}nZm8!z9}tDwAAa#Ug|Fh0D07Na_+^9 za}C1LW?snkuK7)vkB2%|rp%MLx*FDvL-pR8RkC=`8Tyc5M|&^0iy?^}cVBqR{f@L^XI_I719 zFLKHe)NSBA8EUIx)A{P-?_6h96D8xgbQB4--8Q1YPi)_0h3bme*!Yz1))K^|Wa92r zn4DjRb{p@xB(;QF;?o!6jqo;F41)Sdi>)Q8?mW#7|6?aXPd#2|n4AIJlNW{Ewljgh zK{x__IiO+o!FKrKqZs7I2o=E15j`;ch3D_yU^L}UCKrTL0H-ZQ2*tgIlUE-Q8zFMh) zbc+=svQ97P36E4T?OEVF&s=QvTSeB_VS-ID`*7SMetnK-CEsN0$5$K5+s>iywa74*C(;^!x-zCn_v# zYxFMJK*TnaPDnkuaZv9(D2#sXYxIMvbMN*^4UInTwm*ckK>ZPlL>yR`fpOJ&b8hpv zrHuc^Hz8T_A2l^(>dx^qmLXZydmbplJRm$)W2tlwzZLw0$1u zh_@8U1V&4ri=H+ijdr`U1wRXyjPsd$F5&~W8&^R|@78VG4?7z3+cObgK0`J{*56B@ zfvsY5)wh)u-~_tKwi2_kN=I_}0!*yBboM4ZlUjab^V{eF2?*dKdntGF@FGW!c#JGl z9r!P@y#cZNALrzE-SIPb7soyjP(f9^2S*Rq=78=oaOY%B%2YjH$N8#b3n0i@x<7k{ z>Oi%tB5N<0+=8H{@?w135~?-&5Ip@T>b}3mAF{DZ^xw{R{8KSaFaiP2BL2mNn} z)gDmFRjA1ermF6_J`6)9aLFu0-|AG7^FtNI-f`LZ0ZgDAN9bB3xHN$eqU&_yw50w@ z#V*#eeI8hiij4ah z*&H23=V?6a5-X^ehiSF34Qlbjr7)egxhP;Q;sdIaaJ6WAS`DyYy=tF>9mJTbHNJWa zrs9C#*B+l(;hBG$>loMP5`L8upQyUXk)# zVwH2w1`oT92XG#yoyQ64UQI%w)Cd}NEzx{v*N#eE?i*j%!c!V3JsC?dd~4bMDNm!$ z#q-rGuz3AwNWm_q`!y(4Po%5s+XfI?xnFPt%Y~=u!-^UFMm7^?3?=eMN-xezR_@&C z1x{8t`@SwiuT$pYf0IudGF4K<-&ZhtN zYAi^|uqp7(n=-oa?cNK|^b5_>UVncml;Y}TrTclkWPCxdpb%882f=ugJXmK|3wwYH z+0^kyb-*FCMWYQ~28QE@%E#35>KY-|h?o$HOh56SKIkA|;b z83pDWpq_MJrKx8dqZWv6Kk^?gU4%WR=0bAxSVs{2&W?f4-9S!{8=Zvj(!D?$f{`4% zO!c|>O9C3-fTQ-qlxMr`6`kpX<)l&*Qod!o(PN;6$(kr~k}+wg|jkjH{fn?xPjE^d3w2nP~PmAn1(<1{l<@ z75k|9)=DQwg6hnaSE%^*F!@Ts^cDf12HfN>AvTlb`D#?of)phYhbQ6&gQ$Xt8%1|3 zVjG%OBE5` zm7deXhsK1rF4MRK{mL5qR}a8y090Y8x;xgkI*zg(f*!x{lL~rOkPY_#X=$a*d*=^u zg1{yHziDX&dg|dRQr47IRBwl_WlVzTdW=hVsQ_TIhag9CIn1T_Z;Puh)c;TG_P?(L zDN-1l7YNynk&@;LIxvuwwp$!$UjuvA8Jh^Efe3 z9%5g%cx}r0Uu_=Xe%mra8D*W$P$pRL_g|FXpe$DZY|-a8%r&QVMj!t7tXTh#Xx62P zJRLns6OE2M|Am=!0ia&yTE-y&$GV)(vkjnk`rK!y2j770p)#d~>))GR(RUnTfzrbf zQc@InK5{+sV(}RO8hldId%U0M=Os^R_tDkvpI>aUlYf1;Tfn!r;(o@xpcj;FVIGnj zb34A&T5VJ8)c4vGPgPw1`aMI!7|fslx3{pW_S#HvdgHIm;-`T8B6fO< zs_CeE?>qbpdRK9Di+3q{VESDp7p!A%#cq4^HqYAOB^!I-*k9&f#%2+S1ca~Mg`J}y z-I9v2A>iDx1AqI~oB<{mA4~q3=&BFEmYHW=YU{ABjL?huvz|ohJLu&xJra{yX;uEV zCy#q&D64Mr2*Y!#?YfU`L&>@*h2x4lCVeU-aUrMR)B~O!b3nSz-DwN;_rA7}KA&-k zfhD3vDkavzXEHc=tjG`&ePLHJL+7OE(01cYbgg3CIBY6Dl`XX|ozX8v{s<$`X7#wW-G4RtZdAYY>klHzDJ&bP39 z(8#!?Us|y72$~xmD_C_fbkp{=En%sv%EvaurgWjw|EyS~Edea}6A0tJzC3C>YSDoP zDpSNQSAn%IM&hS^6_vO8wNU)X2)bKg9*x*|Buf5yPJ6Z57n#Q6HY}w?PEKdjy~oGq zHG&pNYqvDWI%~62Nm7q`b<7Z=Nq`l>nUU$Q+OGA``OoUlp|%DLT|UQFn)*DR`1uE} zt1$2r6NE+!n=jfdM$qRqNU@8w(Z`tK6OAC|5cr~=%81AboXkd^t@XoK2eIemGOh7d zW>mFHOdW*aS$Y54M^aE4uN73k@zp~=P>WST^I zmyiH4Bo;oQj7@<8ima!IOa5&pVf~qSEE}+X6DjgcmzU>w8&6v?yw>+SuB%)&hT#&B zCK7%ka>FQG{0R5_9)*j)=#$o#=Lo3xZL>HXP8S|k>C(ZaZBJy{8^3}M9%lSe1vcXa zukiq6n!KNDs~|JpM}f^~!D}z5E4fm_^5Xsj6*h0Tv7QOJV)!MsaNmbt8_^!Kog`e? z!K}W1jri6^4M<>RO`P`|=f-tu@T@5dTqu!Q2=F3?oWF1M4>n$W(k(htt_%)Wi8%oC zUM2y|DZ{c7fP(dFJ{o!YfkUknTl|8D&1+lhH=j-%-1xnOyj&cRyi0%@Lio~oMXm)* zRu(Mo=OtzYxC`XQXEzq_EoT$jwn8@~*2`?I(cN_qXM7b@98b#*ZY|uvbjt+mR*xvHtflyuyXOy9xaWn5RkwNhv+)<6YSQg%RgoiK#Vr}N0Lt92AB z&8G=-&Lxq&I=B9;(EHCVA?{VU~ zu3JM%*R}?1e3}vxI{jS=tou(Nw2%RmS`TdWRJN{`#_sPD(;WrdoCNF{ z9xn#Rho==dI_?mg0OO7bfKP~mZiTHX6KO#gn(o9VP0wbgTMil@R6z=iAW#T&K9ZTG zd!x``-oJdW$ksZ81})b-EStYUEM*gtQSXZPfW#-TStXxynS91-aU z<>;N6mUTl&nOWx6U80zc&v;u@m7(6Ke!r;ctF3&r1~y<&_tx6nJzSSV3?s3lUqdCV zDsQg{aZn5=Hg;!1doS7eENrHwAO$=G7NbfONBG;iH$Klp9zqSk<#R)@!!dE$)}$|f zgXkx+H`sKrw>4wXwpp!DEOOJ+YJg5sgJN-`(o)mRUIuRl{~`!uI@4;ECCzBJKQO(H z<~gYJw?>J(Ktq5`W3zDFwFoS=*~w^eO&`{u*WXbOB_?#?w6Xav<`?DEV=F3hOhg5k z0_|9lY5C6@r@y9CB!(^MCt|$#!tO%5kNJAwIXlS{mlnIfGrl45BF+dR*RiUVlU^5>_fm2d-0`Q7_;EP#5ymSRi8Z=K#MES( zF#o(VAe|BCi|qYuVV?*5L7Z^JN%;>9Mp>!Felo!bb9anq1u*6 z19LKO6FaPG?5xGXC)v{`6G_e7{58y%4l@*LY#x9Y!n-pYT>(JcfPGS3EzN{rX8}SP6WzXnkHmreQJ96HHpN? z7T9%)2CU&HDU2}|cPaqt&)~@AEfCkLU9m(kPMW&1A(`9MDnq&WN3xV4p23luG_AWg z!#Q!qu>chI6O`vt)>rITqIAWGU=V<^2J(0jhE6HEP}!mJ(t8YH=M?puY6F(W(eLSqsLSt6$d^ za{3tZ4&udDUTCd8g8Hvxi{;Y&H}TcRLnBTs$Q~PN+S&Q}d4x3D@(v}qtWNmt`2iwF zY--y)m@_{eJKd5K84!_JEU8Qiv(g@hB#*p(rd0Pb@QG~f?$-`}kEFa?hIeVsq3J*w zH}6Y{V-!1MDv)TikGdTbCCI_{=pIV*WYN04_ONc&$Gb;I^^R$R+;g&9f30WS4pQ>> z)%o$C$r5hMBC9+fwKA|)?StPw7_pYle9)7fwSTfBx|*flI-7LQbs=9*wru?q%&WJs zpWc9Up(71vE9%=3yDz?_J__@7)924XDjZ8XSF#aSW8WYY7XW4S*-x*C-VD(pRm{)chvIGmk-YEy^Wco z)6^|fSO|IDtZOL1%pl;7$wvOqpYIxj9))@C@)|E9yh+}+7LIf}mNHZ1Pj3ncrF(0m z6PU_3`2>(0jCby;G#r}q-m;smc&hMY%aygR=ep3X0(`uHBcV0sHYk34eR8bUPo5Vp zWH6UPze~QeQ1tWXw=ilVpJ8S-sBL0DR9R-7;xj@^(naCKZHK%8@(D_nk)QQB&a@lx z8ttVYa%SmhYkaUrL^$HCo8t<7G_9GIS zdCa9y-|eYKj?m>}1|$s1hMon-`k^sSPdqse`aS0yJ#UrU7UJ>GZ&o@#_E^TWPBT@) zhW6v_fpg_Mq(A;xAqRs@ESe`r*_iB^uuu!-`Lc}b=6(}B4RR`P@5+W$FhvVXB0AIa zb*zdPM@h4J=1U*?+41has&UcFXk59r^Q(dz{nQ0%SS1*zv5bEm{}GP{8{;H*uf0LX zb{febfAd?|9c#1R6Zz7sga221SN;!W*T%>4kcSpTZz0d4P=u0wo0N!2+6)pi63V`f z(O`J>l(djMwydScl4XSKvq)J(MzRdXuA!N+jbRM)o_XH)hxZS7KkrZdaz6LxKKF9& z>pJ&!&bh90eZR~(ca=@`CwZRgvX!cD%BJp0@169h#^nPC3zpa4elbH^-Z1QS0536u zufB<46)A{%RLxh-;c=x1OsJAqY_^LrV+M)z4g&S2o zT&@*b!MtbGx_W@whGFja@A!9su z<4chPc9Ev)?yZy5FLt5WZ*v9GXAC+(IV*8)q7&0 z9GN-+h-Nety^ybw}00KXs)NbosGZ$8ahF!K9rOEpKVHabsju*6fM60|RrU?*n zF0>1A*Z`Fon|;GxJnd}_hTb|6!QQ@Vvb@Fwj6+>18ulPimORX5#Mq&khF<`PHcFPP zYU1{p4^RtPVgjgi#H`0<0MEqyY$kC{r4+-3EHV0%vdg6!JE<;(wz6%;uPzzK&d47O zt=C=vywBJodeOA`l%aFWK<0DffwdPzkiUOZRTG~twLC6SWBt5-Tb1XYrs1>4(iiH+ zM3~z3hn z;xvcU54yoI2^gg;GtBUbKHSlsv5E_0U(EswLFRw5g9f=w<4P1uNyKR!m0;L9pz=6Q zY}W;KaNWv$w}wDqpVEV)*?@s%b8Dh`I!rSiisRZQw<2EidBzaKz5rU&x@{B-n_P9QTyI$(<1)j*=?_U`@I4s`1JgO^15k-=dSXX^1S&e;HTxwc z>__Uj`yhEg!R&86mbbCA{BM zZ~d0i^iAP$T{y*zkX!3HEg4aItl4|y&yk2kUrYRpR=dVPtBp6hdMx;i_Pw>u%J08= zRt21W681pRB!HOg6o2Gm@W7WKUe(7TuX3x0WxH+Up4=Xs{hWsnSI1arqLPXCPSfPC z!Ldvln0~Fvr7gvl!0CzK;l0jkaJ}4}5rsv8w*K~@_wlhqSte06XLg#Jo7o`1d2|>M z<}{`_%VTbC zDX^;2H^8E5rS)ADS5M)z?lF&xw337MLrU2lQbI5Tqq=NdD3?I_YSj>?{15-@-!@o2 zgvLu5^S-;;+Q%}u?^T`zPZqE^3b65uBds3zmD@ULC}GkIjhChbO8nxV6{4hb^U#KU zGK>YC$Ds=Pnm*Taox^m|KH-#3R~Ag}TDVW>jc$;qPq~z?sKP-f^iZpF2%cad{tchG zAYKbh>a4Q1-`prlPS3asAmA(v(0404?WF5$18Ti4_z+@aw8-3#_qF)*TpPM({&P|k zh-!<=Y8pqZf0!#X_GnLXZ?nra1W^glZ$Z|qR=pg$3~vbyugysOSOm|clMGjjJYG2{ zxa2{*qmN1=S+6bQMeZLSBBbvG@(d%8r;)eXNpJ!Sb}(SP>XM_3UP!*_v6SzpoQ>#< zx=o1VNUEnGlS0U0UBEmn^pns^v7)|?eRtb`+pGUD!LL@pmvMDZWfP{LvrGq_kI)UhH2<;wIFd!U$Q`NDKfs(Dv+{m3V0HnV-Shm?x3%vaF&FFOoRiDwAFulQU%hvKQtx@{t z+ee7A8fRZiSDgIg7ulof$e2A6`^9!dJw+^2wSU7}%ft$ZeI!3P{`Sl*q?=X6c^#X; zY=iYNc0^>47ot3f{55PUhsg>zSXp{j*vocb%wg|fiR^8rYxH6Ols6!Ui)2*ccx$S} z4OT$(YAchsF|QAN{Ent99aiioT2lF9>+~|E7LBN@v^TXK#D?OONGwH!QC}~$u70(e zJx+^UrBEXlanZz`G$@`+E-V?SsPy>-QqkG@q^P7fU{4%?pjbR&e>9iRTz^Jb;O~+R z5!%a+qi$CULSl4p3I12jzw7@~Mqm49hljaB#D8VIOP~)0d9D*wJLC{8;IjndV2?n zC;w3`#4?-dG zM`ye$3FQK9)NR1yotN*_)}V7KhXxp6*X@La@KQae=RII7^6nn&@6ytva>&Q26GQU5 zt@4{Sc5`=mcxXNoNwaJLrmE-6)9jL(Vpm>sYYD<%E~HfVYR_EB;7IOvV7_S!^V;2s z?!JlE?rdW;dwpFsN8AOTSK5+2wq2>>;h{I61%Y_M?F#$V$ZHn{QPayCbV{Sv&EdB_ zT~J;>aWj#D&@bTaFxR5d=j@u#vqw*}RG~Mc7mlz7&8UQxc-2+ctHaNgH(Qgj+O(~& z)b9F%av(c{JDLIhbt?xU6DK+?CKpySTP7>~D4Yv29U8@oPsuPlwG2nqS*^Zrr}M!V zg#W6;_g_m2gBa@nxmV$;6l3;F?~xjM zFhmu$cVbf|o%s+ZM-Mj{R?HLvTfz^FkMETFTgtH)9fUF=ir)f4kV9*r(}3SAMx3#3 z%+?#hx*DmFLIlG-B}wC-!WNPr1V?`21zfiI=zcF!$A-#zjQB=IL@m)EU2sKK{y z{;>5=Q1zoocx4vM1oi8Q%z@jyX&kI}##Jc5;6ld(ttp>ouLM54Apjx>p#d*6Qi zz;TvyO*=QdAGI}&4{|_vBQZFJr<-p-5PgX!=6QX;)CZKV#%#n%cJ=^sWjEE-#8ii4RqbU?N3|Mao4fKId=gSuJ{7k4c464Q1ZLConYbl9@r(2X+AsE= zkd|N_bF0#wBQ#qF0b4iWowuqfC!9WG$F{d10+Dy#$)(EGg$5iS-(&{|<}~vg;GT4H zb<|~)y*M>L?R})Xe$(ipqFWLnRUGI=p)0wGBdK-(swhcfYaFV>pv9m|{5*gXcf%mX z5&QzWS@{dwv_fO9x9x@njswgEynn^L{0%eWqyYBObe~TO(2#u?_e$>q+dz6E&VX=5 z*6L4wUosj$;%d+%ydhi)L|@^(pSk5F7%8YH%h$ueb?}OPXZTwk_L=`Ie@ft|1b#~3 se!7aGEdjvvocgu?gcWvC=9hwd<4UIMp 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%0D=H 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 literal 0 HcmV?d00001 diff --git a/prisma/screenshots-phase4/06_idempotency_duplicate.png b/prisma/screenshots-phase4/06_idempotency_duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6f5adfa8946a4017021942fb0e6c95d1b63387 GIT binary patch literal 58928 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 d4b;wLX83N+zJc*a literal 0 HcmV?d00001 diff --git a/prisma/test-auth-rls.js b/prisma/test-auth-rls.js index 6d21693..ba39afe 100644 --- a/prisma/test-auth-rls.js +++ b/prisma/test-auth-rls.js @@ -32,7 +32,7 @@ function getPrisma() { async function runAsAdmin(queryFn) { const db = getPrisma(); return db.$transaction(async (tx) => { - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'ADMIN';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'admin';`); return queryFn(tx); }); } @@ -68,8 +68,11 @@ async function runTests() { const adminUser = users.find(u => u.username === 'admin'); await runAsAdmin(async (tx) => { - await tx.salesResult.deleteMany(); - await tx.auditLog.deleteMany(); + await tx.salesResult.deleteMany({ + where: { + idempotencyKey: { in: ['auth-test-colab', 'auth-test-lider'] } + } + }); // Colaborador sale await tx.salesResult.create({ @@ -285,8 +288,11 @@ async function cleanup() { try { if (prisma) { await runAsAdmin(async (tx) => { - await tx.salesResult.deleteMany(); - await tx.auditLog.deleteMany(); + await tx.salesResult.deleteMany({ + where: { + idempotencyKey: { in: ['auth-test-colab', 'auth-test-lider'] } + } + }); }); await prisma.$disconnect(); } diff --git a/prisma/test-phase3-ui.js b/prisma/test-phase3-ui.js index 95438c8..b7b5491 100644 --- a/prisma/test-phase3-ui.js +++ b/prisma/test-phase3-ui.js @@ -41,7 +41,7 @@ function getPrisma() { async function runAsAdmin(queryFn) { const db = getPrisma(); return db.$transaction(async (tx) => { - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'ADMIN';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'admin';`); return queryFn(tx); }); } @@ -69,21 +69,28 @@ async function runTests() { // 1. Clean database records first console.log("Resetting test environment data..."); await runAsAdmin(async (tx) => { - await tx.calculationRule.deleteMany(); - await tx.goal.deleteMany(); - await tx.compensationPlan.deleteMany(); - await tx.salesResult.deleteMany(); - await tx.auditLog.deleteMany(); + // Delete calculation rules associated with E2E test plans + await tx.calculationRule.deleteMany({ + where: { plan: { code: 'PLAN-E2E-PUPP' } } + }); + // Delete E2E test goals + await tx.goal.deleteMany({ + where: { period: '2026-06', amount: 75000.00 } + }); + // Delete E2E test plans + await tx.compensationPlan.deleteMany({ + where: { code: 'PLAN-E2E-PUPP' } + }); }); - // 2. Start Next.js server on port 3010 - console.log(`Starting Next.js dev server on port ${PORT}...`); - nextProcess = spawn('node', ['node_modules/next/dist/bin/next', 'dev', '--port', String(PORT)], { + // 2. Start Next.js production server on port 3010 + console.log(`Starting Next.js production server on port ${PORT}...`); + nextProcess = spawn('node', ['node_modules/next/dist/bin/next', 'start', '--port', String(PORT)], { env: { ...process.env, PORT: String(PORT) } }); nextProcess.stdout.on('data', (data) => { - // console.log(`[Next.js] ${data.toString().trim()}`); + console.log(`[Next.js] ${data.toString().trim()}`); }); nextProcess.stderr.on('data', (data) => { console.error(`[Next.js ERR] ${data.toString().trim()}`); @@ -155,6 +162,15 @@ async function runTests() { await page.waitForSelector('div[role="dialog"]'); await page.screenshot({ path: path.join(SCREENSHOT_DIR, '04_create_modal_open.png') }); + // Trigger save without filling fields to test HTML5 validations + console.log("Testing empty form submission block..."); + await page.click('#btn-save-plan'); + await sleep(1000); + const isModalOpen = await page.evaluate(() => { + return document.querySelector('div[role="dialog"]') !== null; + }); + assert(isModalOpen, "HTML5 constraint validation: Modal remains open when attempting to submit empty fields"); + // Fill in form details await page.type('#plan-name', 'Plan Ventas E2E Puppeteer'); await page.type('#plan-code', 'PLAN-E2E-PUPP'); @@ -193,11 +209,20 @@ async function runTests() { await page.screenshot({ path: path.join(SCREENSHOT_DIR, '07_rules_config_page.png') }); assert(page.url().includes(`/plans/${createdPlan.id}/rules`), "Successfully navigated to rules page"); - // Modify first row - await clearAndType('#rule-min-0', '0.0'); - await clearAndType('#rule-max-0', '0.9'); - await clearAndType('#rule-rate-0', '0.0'); - await clearAndType('#rule-payout-0', '0.0'); + // Test invalid rule boundary constraint (min >= max) + console.log("Testing rule validation constraints (min >= max)..."); + await setReactInput('#rule-min-0', '0.95'); + await setReactInput('#rule-max-0', '0.90'); + await page.click('#btn-save-rules'); + await page.waitForSelector('#rules-error-msg'); + const rulesError = await page.$eval('#rules-error-msg', el => el.textContent); + assert(rulesError.includes("El logro mínimo") && rulesError.includes("debe ser menor"), "Validation error shows when rule minimum exceeds maximum"); + + // Modify first row back to valid values + await setReactInput('#rule-min-0', '0.0'); + await setReactInput('#rule-max-0', '0.9'); + await setReactInput('#rule-rate-0', '0.0'); + await setReactInput('#rule-payout-0', '0.0'); // Add a second row await page.click('#btn-add-rule'); @@ -205,10 +230,10 @@ async function runTests() { await sleep(500); // Allow React state to settle // Fill second row - await clearAndType('#rule-min-1', '0.9'); - await clearAndType('#rule-max-1', '1.0'); - await clearAndType('#rule-rate-1', '0.025'); - await clearAndType('#rule-payout-1', '150.0'); + await setReactInput('#rule-min-1', '0.9'); + await setReactInput('#rule-max-1', '1.0'); + await setReactInput('#rule-rate-1', '0.025'); + await setReactInput('#rule-payout-1', '150.0'); await page.screenshot({ path: path.join(SCREENSHOT_DIR, '08_rules_populated.png') }); @@ -275,7 +300,17 @@ async function runTests() { await page.select('#goal-target-type', 'INDIVIDUAL'); await page.select('#goal-target-id', colaboradorMde.id.toString()); await setReactInput('#goal-period', '2026-06'); - await page.type('#goal-amount', '75000'); + + // Test invalid goal amount validation + console.log("Testing invalid goal amount validation..."); + await setReactInput('#goal-amount', '-100'); + await page.click('#btn-save-goal'); + await page.waitForSelector('#goal-error-msg'); + const goalErrorMsg = await page.$eval('#goal-error-msg', el => el.textContent); + assert(goalErrorMsg.includes("El monto debe ser un número positivo"), "Validation error shows when entering negative goal amount"); + + // Enter valid amount + await setReactInput('#goal-amount', '75000'); await page.screenshot({ path: path.join(SCREENSHOT_DIR, '14_goal_form_filled.png') }); await page.click('#btn-save-goal'); @@ -310,7 +345,9 @@ async function runTests() { await page.type('#username', 'colaborador_mde'); await page.type('#password', 'password123'); await page.click('button[type="submit"]'); - await page.waitForSelector('#btn-create-plan'); + await page.waitForSelector('header'); + const hasCreatePlanBtn = await page.evaluate(() => !!document.getElementById('btn-create-plan')); + assert(!hasCreatePlanBtn, "Collaborator should not see the 'Nuevo Plan' button in the dashboard"); // Navigate directly to /goals and verify list shows only their goal await page.goto(`${BASE_URL}/goals`, { waitUntil: 'networkidle2' }); @@ -324,6 +361,38 @@ async function runTests() { assert(rowCount === 1, "RLS restriction verified: Colaborador only sees 1 goal (their own) in the goals dashboard"); + // Verify API security boundary: Colaborador cannot create plans or assign goals + console.log("Verifying collaborator is blocked from executing ADMIN/DIRECTOR APIs..."); + const planBlockRes = await page.evaluate(async () => { + const res = await fetch('/api/plans', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + name: 'Plan Hack', + code: 'PLAN-HACK', + validityStart: '2026-06-01', + type: 'PERCENTAGE' + }) + }); + return { status: res.status }; + }); + assert(planBlockRes.status === 403, "API security check: Collaborator blocked from creating a plan (POST /api/plans returns 403)"); + + const goalBlockRes = await page.evaluate(async () => { + const res = await fetch('/api/goals', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + targetType: 'INDIVIDUAL', + targetId: 7, + period: '2026-06', + amount: 85000.00 + }) + }); + return { status: res.status }; + }); + assert(goalBlockRes.status === 403, "API security check: Collaborator blocked from assigning goals (POST /api/goals returns 403)"); + await cleanup(); console.log(`\n=== E2E TEST RESULTS: ${passed} PASSED, ${failed} FAILED ===`); @@ -345,11 +414,18 @@ async function cleanup() { try { if (prisma) { await runAsAdmin(async (tx) => { - await tx.calculationRule.deleteMany(); - await tx.goal.deleteMany(); - await tx.compensationPlan.deleteMany(); - await tx.salesResult.deleteMany(); - await tx.auditLog.deleteMany(); + // Delete calculation rules associated with E2E test plans + await tx.calculationRule.deleteMany({ + where: { plan: { code: 'PLAN-E2E-PUPP' } } + }); + // Delete E2E test goals + await tx.goal.deleteMany({ + where: { period: '2026-06', amount: 75000.00 } + }); + // Delete E2E test plans + await tx.compensationPlan.deleteMany({ + where: { code: 'PLAN-E2E-PUPP' } + }); }); await prisma.$disconnect(); } diff --git a/prisma/test-phase4-ui.js b/prisma/test-phase4-ui.js index e2d535b..e046af2 100644 --- a/prisma/test-phase4-ui.js +++ b/prisma/test-phase4-ui.js @@ -142,7 +142,9 @@ async function runTests() { await page.type('#username', 'colaborador_mde'); await page.type('#password', 'password123'); await page.click('button[type="submit"]'); - await page.waitForSelector('#btn-create-plan'); // Wait for home page dashboard load + await page.waitForSelector('header'); // Wait for home page dashboard load + const hasCreatePlanBtn = await page.evaluate(() => !!document.getElementById('btn-create-plan')); + assert(!hasCreatePlanBtn, "Collaborator should not see the 'Nuevo Plan' button in the dashboard"); // Try navigating to import page await page.goto(`${BASE_URL}/sales/import`, { waitUntil: 'networkidle2' }); diff --git a/prisma/test-rls.js b/prisma/test-rls.js index a0c4009..1495127 100644 --- a/prisma/test-rls.js +++ b/prisma/test-rls.js @@ -20,7 +20,7 @@ async function runTests() { // 1. Fetch seeded data to map IDs (Run as ADMIN to bypass RLS) const { users, hotels, regions } = await prisma.$transaction(async (tx) => { - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'ADMIN';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'admin';`); const users = await tx.user.findMany({ include: { hotel: true } }); const hotels = await tx.hotel.findMany(); const regions = await tx.region.findMany(); @@ -104,12 +104,15 @@ async function runTests() { // --- TEST 2: Sales Results RLS --- console.log("\nRunning TEST 2: Sales Results RLS..."); + let saleColab, saleOther; try { - // Clean up existing sales results to isolate the test - await runWithContext(adminUser, tx => tx.salesResult.deleteMany()); + // Clean up test sales results first (non-destructively) + await runWithContext(adminUser, tx => tx.salesResult.deleteMany({ + where: { idempotencyKey: { in: ['test-key-colab-1', 'test-key-other-1'] } } + })); // Create sales results as Admin (bypass RLS) - const saleColab = await runWithContext(adminUser, tx => tx.salesResult.create({ + saleColab = await runWithContext(adminUser, tx => tx.salesResult.create({ data: { source: 'EXCEL', hotelId: colaboradorMde.hotelId, @@ -122,7 +125,7 @@ async function runTests() { } })); - const saleOther = await runWithContext(adminUser, tx => tx.salesResult.create({ + saleOther = await runWithContext(adminUser, tx => tx.salesResult.create({ data: { source: 'EXCEL', hotelId: liderCtg.hotelId, @@ -202,10 +205,17 @@ async function runTests() { failed++; } - // Clean up test sales results and audit logs + // Clean up test sales results console.log("\nCleaning up test records..."); - await runWithContext(adminUser, tx => tx.salesResult.deleteMany()); - await runWithContext(adminUser, tx => tx.auditLog.deleteMany()); + const salesResultIds = []; + if (saleColab) salesResultIds.push(saleColab.id); + if (saleOther) salesResultIds.push(saleOther.id); + if (salesResultIds.length > 0) { + await runWithContext(adminUser, tx => tx.salesResult.deleteMany({ + where: { id: { in: salesResultIds } } + })); + } + // Audit logs are not deleted due to write-only RLS immutability console.log(`\n=== TEST RESULTS: ${passed} PASSED, ${failed} FAILED ===`); if (failed > 0) { diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts index 235f91d..3ff5f24 100644 --- a/src/app/api/auth/login/route.ts +++ b/src/app/api/auth/login/route.ts @@ -8,7 +8,7 @@ export async function POST(req: NextRequest) { if (!username || !password) { return NextResponse.json( - { error: 'Username and password are required' }, + { error: 'El nombre de usuario y la contraseña son obligatorios.' }, { status: 400 } ); } @@ -18,13 +18,19 @@ export async function POST(req: NextRequest) { userId: 0, username: 'login_system', email: 'system@estelar.com', - role: 'ADMIN', + role: 'admin', hotelId: 0, regionId: 0 }); console.log('[Login API] DATABASE_URL in Next.js:', process.env.DATABASE_URL); console.log('[Login API] Attempting login for username:', username); + try { + const dbRole = await prismaAdmin.$queryRaw`SELECT current_setting('app.current_user_role', true) as role;`; + console.log('[DEBUG LOGIN] current_setting role inside Next.js:', JSON.stringify(dbRole)); + } catch (e) { + console.error('[DEBUG LOGIN] Failed to fetch current_setting role:', e); + } const user = await prismaAdmin.user.findUnique({ where: { username }, include: { hotel: true } @@ -34,7 +40,7 @@ export async function POST(req: NextRequest) { if (!user || user.status !== 'ACTIVE') { console.log('[Login API] Login failed: User not found or inactive'); return NextResponse.json( - { error: 'Invalid credentials or inactive user' }, + { error: 'Credenciales inválidas o usuario inactivo.' }, { status: 401 } ); } @@ -44,7 +50,7 @@ export async function POST(req: NextRequest) { if (!passwordMatch) { console.log('[Login API] Login failed: Password mismatch'); return NextResponse.json( - { error: 'Invalid credentials' }, + { error: 'Credenciales inválidas.' }, { status: 401 } ); } @@ -99,7 +105,7 @@ export async function POST(req: NextRequest) { } catch (err) { console.error('Login error:', err); return NextResponse.json( - { error: 'Internal server error' }, + { error: 'Error interno del servidor.' }, { status: 500 } ); } diff --git a/src/app/api/goals/route.ts b/src/app/api/goals/route.ts index b5f7dcf..f7de3ec 100644 --- a/src/app/api/goals/route.ts +++ b/src/app/api/goals/route.ts @@ -26,7 +26,7 @@ export const POST = withAuth(async (req, { prisma }) => { if (!targetType || targetId === undefined || !period || amount === undefined) { return NextResponse.json( - { error: 'targetType, targetId, period, and amount are required fields' }, + { error: 'targetType, targetId, period y amount son campos obligatorios.' }, { status: 400 } ); } @@ -58,4 +58,4 @@ export const POST = withAuth(async (req, { prisma }) => { } return NextResponse.json({ goal }); -}, ['ADMIN', 'DIRECTOR']); +}, ['admin', 'director']); diff --git a/src/app/api/plans/[id]/route.ts b/src/app/api/plans/[id]/route.ts index 4308f48..1c6bf11 100644 --- a/src/app/api/plans/[id]/route.ts +++ b/src/app/api/plans/[id]/route.ts @@ -7,7 +7,7 @@ export const GET = withAuth(async (req, { prisma, params }) => { const id = parseInt(unwrappedParams.id); if (isNaN(id)) { - return NextResponse.json({ error: 'Invalid ID' }, { status: 400 }); + return NextResponse.json({ error: 'ID no válido.' }, { status: 400 }); } const plan = await prisma.compensationPlan.findUnique({ @@ -16,20 +16,20 @@ export const GET = withAuth(async (req, { prisma, params }) => { }); if (!plan) { - return NextResponse.json({ error: 'Plan not found' }, { status: 404 }); + return NextResponse.json({ error: 'Plan no encontrado.' }, { status: 404 }); } return NextResponse.json({ plan }); }); -// PUT: Update or Version a plan (restricted to ADMIN and DIRECTOR) +// PUT: Update or Version a plan (restricted to admin and director) export const PUT = withAuth(async (req, { session, prisma, params }) => { const unwrappedParams = await params; const id = parseInt(unwrappedParams.id); const body = await req.json(); if (isNaN(id)) { - return NextResponse.json({ error: 'Invalid ID' }, { status: 400 }); + return NextResponse.json({ error: 'ID no válido.' }, { status: 400 }); } const plan = await prisma.compensationPlan.findUnique({ @@ -37,18 +37,12 @@ export const PUT = withAuth(async (req, { session, prisma, params }) => { }); if (!plan) { - return NextResponse.json({ error: 'Plan not found' }, { status: 404 }); + return NextResponse.json({ error: 'Plan no encontrado.' }, { status: 404 }); } // Versioning replication if the plan is currently ACTIVE if (plan.status === 'ACTIVE') { const newPlan = await prisma.$transaction(async (tx: any) => { - // Set RLS variables directly on the transaction client context - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_id = '${session.userId}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = '${session.role}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_hotel_id = '${session.hotelId}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_region_id = '${session.regionId}';`); - // 1. Mark current plan version as INACTIVE await tx.compensationPlan.update({ where: { id }, @@ -118,4 +112,4 @@ export const PUT = withAuth(async (req, { session, prisma, params }) => { return NextResponse.json({ plan: updatedPlan, versioned: false }); } -}, ['ADMIN', 'DIRECTOR']); +}, ['admin', 'director']); diff --git a/src/app/api/plans/[id]/rules/route.ts b/src/app/api/plans/[id]/rules/route.ts index 03b5da0..1bc01dc 100644 --- a/src/app/api/plans/[id]/rules/route.ts +++ b/src/app/api/plans/[id]/rules/route.ts @@ -1,14 +1,14 @@ import { NextRequest, NextResponse } from 'next/server'; import { withAuth } from '@/lib/api-guards'; -// POST: Configure calculation rules (restricted to ADMIN and DIRECTOR) +// POST: Configure calculation rules (restricted to admin and director) export const POST = withAuth(async (req, { session, prisma, params }) => { const unwrappedParams = await params; const planId = parseInt(unwrappedParams.id); const body = await req.json(); // Expected: { rules: [{ type: 'TIER', minAchievement: 0.9, maxAchievement: 1.0, rate: 0.015, payoutAmount: 0 }, ...] } if (isNaN(planId)) { - return NextResponse.json({ error: 'Invalid ID' }, { status: 400 }); + return NextResponse.json({ error: 'ID no válido.' }, { status: 400 }); } const plan = await prisma.compensationPlan.findUnique({ @@ -16,17 +16,64 @@ export const POST = withAuth(async (req, { session, prisma, params }) => { }); if (!plan) { - return NextResponse.json({ error: 'Plan not found' }, { status: 404 }); + return NextResponse.json({ error: 'Plan no encontrado.' }, { status: 404 }); + } + + console.log("[DEBUG RULES] body.rules:", JSON.stringify(body.rules)); + // Validate rules before database execution + if (body.rules && Array.isArray(body.rules)) { + try { + const sortedRules = [...body.rules].sort((a: any, b: any) => parseFloat(a.minAchievement) - parseFloat(b.minAchievement)); + + for (let i = 0; i < sortedRules.length; i++) { + const rule = sortedRules[i]; + + if (!rule.type || rule.minAchievement === undefined || rule.maxAchievement === undefined) { + return NextResponse.json({ error: 'Parámetros de regla de cálculo no válidos.' }, { status: 400 }); + } + + const min = parseFloat(rule.minAchievement); + const max = parseFloat(rule.maxAchievement); + + if (isNaN(min) || isNaN(max)) { + console.log("[DEBUG RULES] isNaN(min) || isNaN(max) failed:", min, max); + return NextResponse.json({ error: 'Los límites de cumplimiento deben ser números válidos.' }, { status: 400 }); + } + + if (min >= max) { + console.log("[DEBUG RULES] min >= max failed:", min, max); + return NextResponse.json({ error: `El cumplimiento mínimo de la regla (${min}) debe ser estrictamente menor que el cumplimiento máximo (${max}).` }, { status: 400 }); + } + + if (i < sortedRules.length - 1) { + const nextRule = sortedRules[i + 1]; + const nextMin = parseFloat(nextRule.minAchievement); + const nextMax = parseFloat(nextRule.maxAchievement); + + if (isNaN(nextMin) || isNaN(nextMax)) { + console.log("[DEBUG RULES] isNaN(nextMin) || isNaN(nextMax) failed:", nextMin, nextMax); + return NextResponse.json({ error: 'Los límites de cumplimiento deben ser números válidos.' }, { status: 400 }); + } + + if (nextMin < max) { + console.log("[DEBUG RULES] nextMin < max failed:", nextMin, max); + return NextResponse.json({ error: `Se detectó superposición en las reglas de cálculo: el rango [${min}, ${max}] se superpone con el rango [${nextMin}, ${nextMax}].` }, { status: 400 }); + } + + if (Math.abs(nextMin - max) > 0.0001) { + console.log("[DEBUG RULES] Math.abs(nextMin - max) > 0.0001 failed:", nextMin, max, Math.abs(nextMin - max)); + return NextResponse.json({ error: `Las reglas de cálculo deben ser contiguas: el rango [${min}, ${max}] no es contiguo con el rango [${nextMin}, ${nextMax}].` }, { status: 400 }); + } + } + } + } catch (e: any) { + console.log("[DEBUG RULES] Catch error:", e); + return NextResponse.json({ error: e.message || 'Error de validación.' }, { status: 400 }); + } } // Bulk overwrite rules inside a transaction const rules = await prisma.$transaction(async (tx: any) => { - // Set RLS variables directly on the transaction client context - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_id = '${session.userId}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = '${session.role}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_hotel_id = '${session.hotelId}';`); - await tx.$executeRawUnsafe(`SET LOCAL app.current_region_id = '${session.regionId}';`); - // 1. Delete existing rules await tx.calculationRule.deleteMany({ where: { planId } @@ -34,13 +81,6 @@ export const POST = withAuth(async (req, { session, prisma, params }) => { // 2. Insert new ones if provided if (body.rules && Array.isArray(body.rules)) { - // Validate boundaries and contiguous nature if needed - for (const rule of body.rules) { - if (!rule.type || rule.minAchievement === undefined || rule.maxAchievement === undefined) { - throw new Error('Invalid calculation rule parameters'); - } - } - await tx.calculationRule.createMany({ data: body.rules.map((r: any) => ({ planId, @@ -59,4 +99,4 @@ export const POST = withAuth(async (req, { session, prisma, params }) => { }); return NextResponse.json({ rules }); -}, ['ADMIN', 'DIRECTOR']); +}, ['admin', 'director']); diff --git a/src/app/api/plans/route.ts b/src/app/api/plans/route.ts index b17c59a..95db181 100644 --- a/src/app/api/plans/route.ts +++ b/src/app/api/plans/route.ts @@ -22,7 +22,7 @@ export const GET = withAuth(async (req, { prisma }) => { return NextResponse.json({ plans }); }); -// POST: Create a new plan (restricted to ADMIN and DIRECTOR) +// POST: Create a new plan (restricted to admin and director) export const POST = withAuth(async (req, { session, prisma }) => { const body = await req.json(); const { name, code, validityStart, validityEnd, type, formula, metaAmount, percentageRate, maxCap, status } = body; @@ -30,7 +30,7 @@ export const POST = withAuth(async (req, { session, prisma }) => { // Validate mandatory fields if (!name || !code || !validityStart || !type) { return NextResponse.json( - { error: 'Name, code, validityStart, and type are required mandatory fields' }, + { error: 'El nombre, código, fecha de inicio de vigencia y tipo son campos obligatorios.' }, { status: 400 } ); } @@ -53,4 +53,4 @@ export const POST = withAuth(async (req, { session, prisma }) => { }); return NextResponse.json({ plan }, { status: 201 }); -}, ['ADMIN', 'DIRECTOR']); +}, ['admin', 'director']); diff --git a/src/app/api/sales/batch-save/route.ts b/src/app/api/sales/batch-save/route.ts index 42b738c..898bc4e 100644 --- a/src/app/api/sales/batch-save/route.ts +++ b/src/app/api/sales/batch-save/route.ts @@ -1,12 +1,23 @@ import { NextRequest, NextResponse } from 'next/server'; import { getPrisma } from '@/lib/db'; +import crypto from 'crypto'; + +function safeCompare(a: string, b: string): boolean { + const bufA = Buffer.from(a); + const bufB = Buffer.from(b); + if (bufA.length !== bufB.length) { + crypto.timingSafeEqual(bufA, bufA); + return false; + } + return crypto.timingSafeEqual(bufA, bufB); +} export async function POST(req: NextRequest) { try { - const signature = req.headers.get('x-n8n-signature'); - const expectedSecret = process.env.N8N_WEBHOOK_SECRET; + const signature = req.headers.get('x-n8n-signature') || ''; + const expectedSecret = process.env.N8N_WEBHOOK_SECRET || ''; - if (!expectedSecret || signature !== expectedSecret) { + if (!expectedSecret || !signature || !safeCompare(signature, expectedSecret)) { return NextResponse.json({ success: false, error: { @@ -17,102 +28,169 @@ export async function POST(req: NextRequest) { } const body = await req.json(); - const { idempotencyKey, uploaderId, sales } = body; + const { idempotencyKey, uploaderId, sales, status, errorMessage } = body; - if (!idempotencyKey || !uploaderId || !Array.isArray(sales)) { + if (!idempotencyKey || !uploaderId) { return NextResponse.json({ success: false, error: { code: 'BAD_REQUEST', - metadata: {} + metadata: { message: 'idempotencyKey and uploaderId are required.' } } }, { status: 400 }); } const prisma = getPrisma(); - const result = await prisma.$transaction(async (tx: any) => { - // Elevate privileges to admin role to bypass RLS for n8n batch operations - await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'admin';`); - - // 1. Check idempotency - const existing = await tx.salesResult.findMany({ - where: { - idempotencyKey: { - startsWith: `${idempotencyKey}-` - } + // Support n8n failure reporting + if (status === 'FAILED') { + await prisma.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'FAILED', + errorMessage: errorMessage || 'n8n background processing failed', + uploadedBy: uploaderId + }, + update: { + status: 'FAILED', + errorMessage: errorMessage || 'n8n background processing failed' } }); + return NextResponse.json({ + success: true, + code: 'IMPORT_FAILED_REPORTED', + metadata: { idempotencyKey } + }, { status: 200 }); + } - if (existing.length > 0) { - return { - alreadyProcessed: true, - count: existing.length - }; - } - - // 2. Resolve usernames and hotel codes - const uniqueUsernames = Array.from(new Set(sales.map(s => s.username).filter(Boolean))) as string[]; - const uniqueHotelCodes = Array.from(new Set(sales.map(s => s.hotelCode).filter(Boolean))) as string[]; - - const dbUsers = await tx.user.findMany({ - where: { username: { in: uniqueUsernames } } - }); - - const dbHotels = await tx.hotel.findMany({ - where: { code: { in: uniqueHotelCodes } } - }); - - const userMap = new Map(dbUsers.map((u: any) => [u.username, u])); - const hotelMap = new Map(dbHotels.map((h: any) => [h.code, h])); - - // 3. Save records - const createdSales = []; - for (let i = 0; i < sales.length; i++) { - const s = sales[i]; - const user = userMap.get(s.username); - const hotel = hotelMap.get(s.hotelCode); - - if (!user || !hotel) { - throw new Error(`User or Hotel not found for record: ${JSON.stringify(s)}`); + if (!Array.isArray(sales)) { + return NextResponse.json({ + success: false, + error: { + code: 'BAD_REQUEST', + metadata: { message: 'sales must be an array.' } } + }, { status: 400 }); + } - const created = await tx.salesResult.create({ - data: { - source: 'API', - hotelId: hotel.id, - userId: user.id, - period: s.period, - amount: Number(s.amount), - salesCount: Number(s.salesCount), - idempotencyKey: `${idempotencyKey}-${i}`, - transactionId: s.transactionId || null, - uploadedBy: uploaderId, - status: 'PENDING' + let result; + try { + result = await prisma.$transaction(async (tx: any) => { + // Elevate privileges to admin role to bypass RLS for n8n batch operations + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = 'admin';`); + + // 1. Check idempotency + const existing = await tx.salesResult.findMany({ + where: { + idempotencyKey: { + startsWith: `${idempotencyKey}-` + } } }); - createdSales.push(created); - } - // 4. Create Audit Log - await tx.auditLog.create({ - data: { - userId: uploaderId, - action: 'CREATE', - targetTable: 'sales_results', - targetId: createdSales[0]?.id || 0, - newValue: { - count: createdSales.length, - idempotencyKey - } + if (existing.length > 0) { + return { + alreadyProcessed: true, + count: existing.length + }; } - }); - return { - alreadyProcessed: false, - count: createdSales.length - }; - }); + // 2. Resolve usernames and hotel codes + const uniqueUsernames = Array.from(new Set(sales.map(s => s.username).filter(Boolean))) as string[]; + const uniqueHotelCodes = Array.from(new Set(sales.map(s => s.hotelCode).filter(Boolean))) as string[]; + + const dbUsers = await tx.user.findMany({ + where: { username: { in: uniqueUsernames } } + }); + + const dbHotels = await tx.hotel.findMany({ + where: { code: { in: uniqueHotelCodes } } + }); + + const userMap = new Map(dbUsers.map((u: any) => [u.username, u])); + const hotelMap = new Map(dbHotels.map((h: any) => [h.code, h])); + + // 3. Save records + const createdSales = []; + for (let i = 0; i < sales.length; i++) { + const s = sales[i]; + const user = userMap.get(s.username); + const hotel = hotelMap.get(s.hotelCode); + + if (!user || !hotel) { + throw new Error(`User or Hotel not found for record: ${JSON.stringify(s)}`); + } + + const created = await tx.salesResult.create({ + data: { + source: 'API', + hotelId: hotel.id, + userId: user.id, + period: s.period, + amount: Number(s.amount), + salesCount: Number(s.salesCount), + idempotencyKey: `${idempotencyKey}-${i}`, + transactionId: s.transactionId || null, + uploadedBy: uploaderId, + status: 'PENDING' + } + }); + createdSales.push(created); + } + + // 4. Create Audit Log + await tx.auditLog.create({ + data: { + userId: uploaderId, + action: 'CREATE', + targetTable: 'sales_results', + targetId: createdSales[0]?.id || 0, + newValue: { + count: createdSales.length, + idempotencyKey + } + } + }); + + // Update import job to SUCCESS + await tx.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'SUCCESS', + uploadedBy: uploaderId + }, + update: { + status: 'SUCCESS' + } + }); + + return { + alreadyProcessed: false, + count: createdSales.length + }; + }); + } catch (txErr: any) { + try { + await prisma.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'FAILED', + errorMessage: txErr.message, + uploadedBy: uploaderId + }, + update: { + status: 'FAILED', + errorMessage: txErr.message + } + }); + } catch (upsertErr) { + console.error('Failed to upsert failed status:', upsertErr); + } + throw txErr; + } return NextResponse.json({ success: true, diff --git a/src/app/api/sales/import/route.ts b/src/app/api/sales/import/route.ts index 9dd951a..6f6cfee 100644 --- a/src/app/api/sales/import/route.ts +++ b/src/app/api/sales/import/route.ts @@ -15,26 +15,49 @@ export const POST = withAuth(async (req, { session, prisma }) => { }, { status: 400 }); } - // 1. Check idempotency - const existingSales = await prisma.salesResult.findMany({ - where: { - idempotencyKey: { - startsWith: `${idempotencyKey}-` - } - } + // 1. Check idempotency / job status + const existingJob = await prisma.salesImportJob.findUnique({ + where: { idempotencyKey } }); - if (existingSales.length > 0) { - const totalAmount = existingSales.reduce((acc: number, cur: any) => acc + Number(cur.amount), 0); - return NextResponse.json({ - success: true, - code: 'IMPORT_ALREADY_PROCESSED', - metadata: { - count: existingSales.length, - totalAmount, - idempotencyKey - } - }); + if (existingJob) { + if (existingJob.status === 'SUCCESS') { + const existingSales = await prisma.salesResult.findMany({ + where: { + idempotencyKey: { + startsWith: `${idempotencyKey}-` + } + } + }); + const totalAmount = existingSales.reduce((acc: number, cur: any) => acc + Number(cur.amount), 0); + return NextResponse.json({ + success: true, + code: 'IMPORT_ALREADY_PROCESSED', + metadata: { + count: existingSales.length, + totalAmount, + idempotencyKey + } + }); + } + + if (existingJob.status === 'PROCESSING') { + return NextResponse.json({ + success: true, + code: 'IMPORT_ACCEPTED', + metadata: { + idempotencyKey, + status: 'PROCESSING' + } + }, { status: 202 }); + } + + // If FAILED, allow retrying by deleting the old failed job + if (existingJob.status === 'FAILED') { + await prisma.salesImportJob.delete({ + where: { idempotencyKey } + }); + } } // 2. Parse file @@ -227,100 +250,169 @@ export const POST = withAuth(async (req, { session, prisma }) => { }, { status: 400 }); } - // 4. Dispatch to n8n or direct save + // Create the SalesImportJob record first + await prisma.salesImportJob.create({ + data: { + idempotencyKey, + status: 'PROCESSING', + uploadedBy: session.userId + } + }); + + // 5. Dispatch to n8n or direct save const useN8n = process.env.N8N_WEBHOOK_URL && process.env.NODE_ENV !== 'test' && process.env.IS_E2E_TEST !== 'true' && !req.nextUrl.searchParams.has('direct'); if (useN8n) { - const response = await fetch(process.env.N8N_WEBHOOK_URL!, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-n8n-signature': process.env.N8N_WEBHOOK_SECRET || '' - }, - body: JSON.stringify({ - idempotencyKey, - uploaderId: session.userId, - sales: rows.map(r => ({ - username: r.username, - hotelCode: r.hotelCode, - period: r.period, - amount: r.amount, - salesCount: r.salesCount, - transactionId: r.transactionId - })) - }) - }); + try { + const response = await fetch(process.env.N8N_WEBHOOK_URL!, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-n8n-signature': process.env.N8N_WEBHOOK_SECRET || '' + }, + body: JSON.stringify({ + idempotencyKey, + uploaderId: session.userId, + sales: rows.map(r => ({ + username: r.username, + hotelCode: r.hotelCode, + period: r.period, + amount: r.amount, + salesCount: r.salesCount, + transactionId: r.transactionId + })) + }) + }); - if (!response.ok) { - console.error('n8n integration failed:', await response.text()); - return NextResponse.json({ - success: false, - error: { - code: 'INTEGRATION_ERROR', - metadata: { status: response.status } - } - }, { status: 500 }); - } - - return NextResponse.json({ - success: true, - code: 'IMPORT_ACCEPTED', - metadata: { - idempotencyKey, - status: 'PROCESSING' + if (!response.ok) { + console.error('n8n integration failed:', await response.text()); + await prisma.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'FAILED', + errorMessage: `n8n webhook responded with status ${response.status}`, + uploadedBy: session.userId + }, + update: { + status: 'FAILED', + errorMessage: `n8n webhook responded with status ${response.status}` + } + }); + return NextResponse.json({ + success: false, + error: { + code: 'INTEGRATION_ERROR', + metadata: { status: response.status } + } + }, { status: 500 }); } - }, { status: 202 }); + + return NextResponse.json({ + success: true, + code: 'IMPORT_ACCEPTED', + metadata: { + idempotencyKey, + status: 'PROCESSING' + } + }, { status: 202 }); + } catch (err: any) { + await prisma.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'FAILED', + errorMessage: err.message, + uploadedBy: session.userId + }, + update: { + status: 'FAILED', + errorMessage: err.message + } + }); + throw err; + } } // Direct Import Fallback / Test mode const totalAmount = rows.reduce((acc, r) => acc + r.amount, 0); - await prisma.$transaction(async (tx: any) => { - const createdSales = []; - for (let i = 0; i < rows.length; i++) { - const r = rows[i]; - const user = userMap.get(r.username)!; - const hotel = hotelMap.get(r.hotelCode)!; + try { + await prisma.$transaction(async (tx: any) => { + const createdSales = []; + for (let i = 0; i < rows.length; i++) { + const r = rows[i]; + const user = userMap.get(r.username)!; + const hotel = hotelMap.get(r.hotelCode)!; - const created = await tx.salesResult.create({ + const created = await tx.salesResult.create({ + data: { + source: 'EXCEL', + hotelId: hotel.id, + userId: user.id, + period: r.period, + amount: r.amount, + salesCount: r.salesCount, + idempotencyKey: `${idempotencyKey}-${i}`, + transactionId: r.transactionId || null, + uploadedBy: session.userId, + status: 'PENDING' + } + }); + createdSales.push(created); + } + + await tx.auditLog.create({ data: { - source: 'EXCEL', - hotelId: hotel.id, - userId: user.id, - period: r.period, - amount: r.amount, - salesCount: r.salesCount, - idempotencyKey: `${idempotencyKey}-${i}`, - transactionId: r.transactionId || null, - uploadedBy: session.userId, - status: 'PENDING' + userId: session.userId, + action: 'CREATE', + targetTable: 'sales_results', + targetId: createdSales[0]?.id || 0, + newValue: { + count: createdSales.length, + idempotencyKey + } } }); - createdSales.push(created); - } - await tx.auditLog.create({ - data: { - userId: session.userId, - action: 'CREATE', - targetTable: 'sales_results', - targetId: createdSales[0]?.id || 0, - newValue: { - count: createdSales.length, - idempotencyKey + // Update import job to SUCCESS + await tx.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'SUCCESS', + uploadedBy: session.userId + }, + update: { + status: 'SUCCESS' } + }); + }); + + return NextResponse.json({ + success: true, + code: 'IMPORT_SUCCESSFUL', + metadata: { + count: rows.length, + totalAmount + } + }, { status: 201 }); + } catch (txErr: any) { + await prisma.salesImportJob.upsert({ + where: { idempotencyKey }, + create: { + idempotencyKey, + status: 'FAILED', + errorMessage: txErr.message, + uploadedBy: session.userId + }, + update: { + status: 'FAILED', + errorMessage: txErr.message } }); - }); - - return NextResponse.json({ - success: true, - code: 'IMPORT_SUCCESSFUL', - metadata: { - count: rows.length, - totalAmount - } - }, { status: 201 }); + throw txErr; + } } catch (err: any) { console.error('Sales import error:', err); diff --git a/src/app/api/sales/import/status/[key]/route.ts b/src/app/api/sales/import/status/[key]/route.ts index e676df6..54aa867 100644 --- a/src/app/api/sales/import/status/[key]/route.ts +++ b/src/app/api/sales/import/status/[key]/route.ts @@ -15,12 +15,8 @@ export const GET = withAuth(async (req, { prisma, params }) => { }, { status: 400 }); } - const count = await prisma.salesResult.count({ - where: { - idempotencyKey: { - startsWith: `${key}-` - } - } + const job = await prisma.salesImportJob.findUnique({ + where: { idempotencyKey: key } }); return NextResponse.json({ @@ -28,7 +24,8 @@ export const GET = withAuth(async (req, { prisma, params }) => { code: 'STATUS_CHECKED', metadata: { idempotencyKey: key, - status: count > 0 ? 'SUCCESS' : 'PROCESSING' + status: job ? job.status : 'PROCESSING', + errorMessage: job ? job.errorMessage : null } }); }, ['admin', 'analyst', 'commercial_leader']); diff --git a/src/app/api/users/route.ts b/src/app/api/users/route.ts index 08eaac4..f84d317 100644 --- a/src/app/api/users/route.ts +++ b/src/app/api/users/route.ts @@ -28,4 +28,4 @@ export const GET = withAuth(async (req, { prisma }) => { console.error('Failed to fetch users:', err); return NextResponse.json({ error: 'Failed to fetch users' }, { status: 500 }); } -}, ['ADMIN', 'DIRECTOR']); +}, ['admin', 'director']); diff --git a/src/app/globals.css b/src/app/globals.css index 4646f15..cc25bd8 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -33,7 +33,8 @@ --space-12: 3rem; /* 48px */ /* Typography Scale */ - --font-sans: 'Inter', system-ui, -apple-system, sans-serif; + --font-sans: var(--font-geist-sans), 'Inter', system-ui, -apple-system, sans-serif; + --font-mono: var(--font-geist-mono), monospace; --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; @@ -130,3 +131,14 @@ a { color: inherit; text-decoration: none; } + +/* Fix select and option dropdown styling for dark/light mode compatibility */ +select { + background-color: var(--card) !important; + color: var(--foreground) !important; +} + +select option { + background-color: var(--card); + color: var(--foreground); +} diff --git a/src/app/goals/page.module.css b/src/app/goals/page.module.css index caae275..69e9527 100644 --- a/src/app/goals/page.module.css +++ b/src/app/goals/page.module.css @@ -143,13 +143,14 @@ color: var(--foreground); background-color: transparent; border: 1px solid var(--border); - border-radius: var(--radius-sm); + border-radius: var(--radius-md); outline: none; - transition: border-color var(--transition-fast); + transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .input:focus { border-color: var(--primary); + box-shadow: 0 0 0 3px hsla(var(--primary-h), var(--primary-s), var(--primary-l), 0.15); } .btnPrimary { @@ -161,12 +162,17 @@ border: none; border-radius: var(--radius-md); cursor: pointer; - transition: box-shadow var(--transition-fast); + transition: transform var(--transition-fast), box-shadow var(--transition-fast); text-align: center; } .btnPrimary:hover { - box-shadow: var(--shadow-sm), var(--shadow-glow); + transform: translateY(-1px); + box-shadow: var(--shadow-md), var(--shadow-glow); +} + +.btnPrimary:active { + transform: translateY(0); } .errorMsg { @@ -177,6 +183,12 @@ font-size: var(--text-sm); } +:global([data-theme='dark']) .errorMsg { + background-color: hsla(0, 85%, 20%, 0.15); + border: 1px solid hsla(0, 85%, 50%, 0.3); + color: hsl(0, 85%, 60%); +} + .successMsg { color: hsl(120, 80%, 30%); background-color: hsl(120, 80%, 95%); @@ -185,6 +197,12 @@ font-size: var(--text-sm); } +:global([data-theme='dark']) .successMsg { + background-color: hsla(120, 80%, 20%, 0.15); + border: 1px solid hsla(120, 80%, 50%, 0.3); + color: hsl(120, 80%, 60%); +} + .tableContainer { overflow-x: auto; } @@ -238,3 +256,8 @@ opacity: 0.5; font-style: italic; } + +.fullWidth { + grid-column: 1 / -1; +} + diff --git a/src/app/goals/page.tsx b/src/app/goals/page.tsx index 85af31f..6ed331e 100644 --- a/src/app/goals/page.tsx +++ b/src/app/goals/page.tsx @@ -5,6 +5,8 @@ import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import styles from './page.module.css'; +import Header from '@/components/Header'; +import { getRoleBilingualLabel } from '@/lib/roles'; interface User { id: number; @@ -32,6 +34,7 @@ export default function GoalsPage() { const [users, setUsers] = useState([]); const [goals, setGoals] = useState([]); const [isLoading, setIsLoading] = useState(true); + const [role, setRole] = useState(null); // Form State const [targetType, setTargetType] = useState('INDIVIDUAL'); @@ -67,14 +70,16 @@ export default function GoalsPage() { }; useEffect(() => { + fetch('/api/auth/me') + .then(res => res.ok ? res.json() : null) + .then(data => { + if (data?.user) setRole(data.user.role); + }) + .catch(err => console.error('Failed to fetch user role', err)); fetchUsersAndGoals(); }, []); - const handleLogout = async () => { - await fetch('/api/auth/logout', { method: 'POST' }); - router.push('/login'); - router.refresh(); - }; + const handleAssignGoal = async (e: React.FormEvent) => { e.preventDefault(); @@ -127,7 +132,7 @@ export default function GoalsPage() { if (type === 'INDIVIDUAL') { const user = users.find(u => u.id === id); if (user) { - return `${user.username} (${user.role} - ${user.hotel?.name || ''})`; + return `${user.username} (${getRoleBilingualLabel(user.role)} - ${user.hotel?.name || ''})`; } } return `${type} ID: ${id}`; @@ -136,22 +141,7 @@ export default function GoalsPage() { return (

{/* Shared Dashboard Header */} -
-
- Remuneración Estelar -
- - -
+
@@ -159,94 +149,96 @@ export default function GoalsPage() {
{/* Goal Assignment Form Section */} -
-

Asignar Meta

- {error &&
{error}
} - {success &&
{success}
} + {(role === 'admin' || role === 'director') && ( +
+

Asignar Meta

+ {error &&
{error}
} + {success &&
{success}
} -
-
- - -
- - {targetType === 'INDIVIDUAL' && ( +
- +
- )} - {targetType !== 'INDIVIDUAL' && ( + {targetType === 'INDIVIDUAL' && ( +
+ + +
+ )} + + {targetType !== 'INDIVIDUAL' && ( +
+ + setTargetId(e.target.value)} + placeholder="Ej. ID de Hotel o Equipo" + required + /> +
+ )} +
- + setTargetId(e.target.value)} - placeholder="Ej. ID de Hotel o Equipo" + value={period} + onChange={(e) => setPeriod(e.target.value)} required />
- )} -
- - setPeriod(e.target.value)} - required - /> -
+
+ + setAmount(e.target.value)} + placeholder="Ej. 50000.00" + required + /> +
-
- - setAmount(e.target.value)} - placeholder="Ej. 50000.00" - required - /> -
- - -
-
+ + +
+ )} {/* Configured Goals List Section */} -
+

Historial de Metas

{isLoading ? (
Cargando metas...
diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1da6a2f..1fdb5bf 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,8 +13,8 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Remuneración Estelar - Hoteles Estelar", + description: "Sistema de Remuneración Variable, Compensaciones y Comisiones de Hoteles Estelar", }; export default function RootLayout({ diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index d9a3b37..4525fbc 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -16,10 +16,7 @@ function LoginForm() { // Read return url if any const callbackUrl = searchParams.get('callbackUrl') || '/'; - // Clear session on component mount just in case - useEffect(() => { - fetch('/api/auth/logout', { method: 'POST' }).catch(() => {}); - }, []); + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -44,8 +41,7 @@ function LoginForm() { } // Redirect to target dashboard - router.push(callbackUrl); - router.refresh(); + window.location.href = callbackUrl; } catch (err) { setError('An unexpected error occurred. Please try again.'); setIsLoading(false); diff --git a/src/app/plans/[id]/rules/page.module.css b/src/app/plans/[id]/rules/page.module.css index 052e016..97cc4de 100644 --- a/src/app/plans/[id]/rules/page.module.css +++ b/src/app/plans/[id]/rules/page.module.css @@ -111,13 +111,14 @@ color: var(--foreground); background-color: transparent; border: 1px solid var(--border); - border-radius: var(--radius-sm); + border-radius: var(--radius-md); outline: none; - transition: border-color var(--transition-fast); + transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .input:focus { border-color: var(--primary); + box-shadow: 0 0 0 3px hsla(var(--primary-h), var(--primary-s), var(--primary-l), 0.15); } .btnDelete { @@ -128,6 +129,7 @@ cursor: pointer; opacity: 0.8; padding: var(--space-1); + transition: opacity var(--transition-fast); } .btnDelete:hover { @@ -141,13 +143,19 @@ background-color: transparent; color: var(--foreground); border: 1px solid var(--border); - border-radius: var(--radius-sm); + border-radius: var(--radius-md); cursor: pointer; margin-top: var(--space-4); + transition: background-color var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast); } .btnSecondary:hover { background-color: var(--border); + border-color: var(--border); +} + +.btnSecondary:active { + transform: translateY(0); } .footerActions { @@ -168,10 +176,16 @@ border: none; border-radius: var(--radius-md); cursor: pointer; + transition: transform var(--transition-fast), box-shadow var(--transition-fast); } .btnPrimary:hover { - box-shadow: var(--shadow-sm), var(--shadow-glow); + transform: translateY(-1px); + box-shadow: var(--shadow-md), var(--shadow-glow); +} + +.btnPrimary:active { + transform: translateY(0); } .successMsg { @@ -182,6 +196,12 @@ margin-bottom: var(--space-4); } +:global([data-theme='dark']) .successMsg { + background-color: hsla(120, 80%, 20%, 0.15); + border: 1px solid hsla(120, 80%, 50%, 0.3); + color: hsl(120, 80%, 60%); +} + .errorMsg { color: hsl(0, 85%, 60%); background-color: hsl(0, 85%, 97%); @@ -189,3 +209,9 @@ border-radius: var(--radius-md); margin-bottom: var(--space-4); } + +:global([data-theme='dark']) .errorMsg { + background-color: hsla(0, 85%, 20%, 0.15); + border: 1px solid hsla(0, 85%, 50%, 0.3); + color: hsl(0, 85%, 60%); +} diff --git a/src/app/plans/[id]/rules/page.tsx b/src/app/plans/[id]/rules/page.tsx index 6d5ab59..cccb2fc 100644 --- a/src/app/plans/[id]/rules/page.tsx +++ b/src/app/plans/[id]/rules/page.tsx @@ -5,6 +5,7 @@ import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter, useParams } from 'next/navigation'; import styles from './page.module.css'; +import Header from '@/components/Header'; interface Rule { id?: number; @@ -36,6 +37,7 @@ export default function RulesPage() { const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); + const [role, setRole] = useState(null); const fetchPlan = async () => { if (!planId) return; @@ -80,14 +82,16 @@ export default function RulesPage() { }; useEffect(() => { + fetch('/api/auth/me') + .then(res => res.ok ? res.json() : null) + .then(data => { + if (data?.user) setRole(data.user.role); + }) + .catch(err => console.error('Failed to fetch user role', err)); fetchPlan(); }, [planId]); - const handleLogout = async () => { - await fetch('/api/auth/logout', { method: 'POST' }); - router.push('/login'); - router.refresh(); - }; + const handleAddRow = () => { // Generate a default values row, potentially continuing from previous max @@ -191,22 +195,7 @@ export default function RulesPage() { return (
{/* Shared Dashboard Header */} -
-
- Remuneración Estelar -
- - -
+
@@ -241,6 +230,7 @@ export default function RulesPage() { value={rule.type} onChange={(e) => handleUpdateRow(rule.tempId!, 'type', e.target.value)} id={`rule-type-${idx}`} + disabled={!(role === 'admin' || role === 'director')} > @@ -254,6 +244,7 @@ export default function RulesPage() { onChange={(e) => handleUpdateRow(rule.tempId!, 'minAchievement', e.target.value)} id={`rule-min-${idx}`} required + disabled={!(role === 'admin' || role === 'director')} /> handleUpdateRow(rule.tempId!, 'maxAchievement', e.target.value)} id={`rule-max-${idx}`} required + disabled={!(role === 'admin' || role === 'director')} /> handleUpdateRow(rule.tempId!, 'rate', e.target.value)} id={`rule-rate-${idx}`} required + disabled={!(role === 'admin' || role === 'director')} /> handleUpdateRow(rule.tempId!, 'payoutAmount', e.target.value)} id={`rule-payout-${idx}`} required + disabled={!(role === 'admin' || role === 'director')} /> - + {(role === 'admin' || role === 'director') && ( + + )}
))}
- + {(role === 'admin' || role === 'director') && ( + + )}
- Cancelar + { (role === 'admin' || role === 'director') ? 'Cancelar' : 'Volver' } - + {(role === 'admin' || role === 'director') && ( + + )}
diff --git a/src/app/plans/page.module.css b/src/app/plans/page.module.css index b5152a9..5468d02 100644 --- a/src/app/plans/page.module.css +++ b/src/app/plans/page.module.css @@ -109,6 +109,10 @@ box-shadow: var(--shadow-md), var(--shadow-glow); } +.btnPrimary:active { + transform: translateY(0); +} + .grid { display: grid; grid-template-columns: 1fr; @@ -164,13 +168,20 @@ .badge { font-size: var(--text-xs); font-weight: var(--weight-semibold); - padding: var(--space-1) var(--space-2); - border-radius: var(--radius-sm); + padding: var(--space-1) var(--space-3); + border-radius: var(--radius-full); + display: inline-flex; + align-items: center; } .badgeDRAFT { background-color: hsl(40, 90%, 93%); - color: hsl(40, 90%, 35%); + color: hsl(40, 90%, 30%); +} + +:global([data-theme='dark']) .badgeDRAFT { + background-color: hsla(40, 90%, 50%, 0.15); + color: hsl(40, 90%, 60%); } .badgeACTIVE { @@ -178,9 +189,19 @@ color: hsl(120, 80%, 30%); } +:global([data-theme='dark']) .badgeACTIVE { + background-color: hsla(120, 80%, 50%, 0.15); + color: hsl(120, 80%, 50%); +} + .badgeINACTIVE { background-color: hsl(0, 0%, 90%); - color: hsl(0, 0%, 40%); + color: hsl(0, 0%, 35%); +} + +:global([data-theme='dark']) .badgeINACTIVE { + background-color: hsla(0, 0%, 50%, 0.15); + color: hsl(0, 0%, 65%); } .cardTitle { @@ -221,14 +242,19 @@ background-color: transparent; color: var(--foreground); border: 1px solid var(--border); - border-radius: var(--radius-sm); + border-radius: var(--radius-md); cursor: pointer; - transition: background-color var(--transition-fast); + transition: background-color var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast); text-align: center; } .btnSecondary:hover { background-color: var(--border); + border-color: var(--border); +} + +.btnSecondary:active { + transform: translateY(0); } /* Modal and Form styling */ @@ -296,18 +322,29 @@ color: var(--foreground); background-color: transparent; border: 1px solid var(--border); - border-radius: var(--radius-sm); + border-radius: var(--radius-md); outline: none; - transition: border-color var(--transition-fast); + transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .input:focus { border-color: var(--primary); + box-shadow: 0 0 0 3px hsla(var(--primary-h), var(--primary-s), var(--primary-l), 0.15); } .errorText { + color: hsl(0, 85%, 60%); + background-color: hsl(0, 85%, 97%); + padding: var(--space-3) var(--space-4); + border-radius: var(--radius-md); font-size: var(--text-xs); - color: hsl(0, 75%, 60%); + border: 1px solid hsl(0, 85%, 90%); +} + +:global([data-theme='dark']) .errorText { + background-color: hsla(0, 85%, 20%, 0.15); + border-color: hsla(0, 85%, 50%, 0.3); + color: hsl(0, 85%, 60%); } .formActions { @@ -316,3 +353,10 @@ gap: var(--space-3); margin-top: var(--space-4); } + +.loading { + text-align: center; + padding: var(--space-8); + opacity: 0.8; +} + diff --git a/src/app/plans/page.tsx b/src/app/plans/page.tsx index 29c2cae..c275842 100644 --- a/src/app/plans/page.tsx +++ b/src/app/plans/page.tsx @@ -5,6 +5,7 @@ import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import styles from './page.module.css'; +import Header from '@/components/Header'; interface Plan { id: number; @@ -27,6 +28,7 @@ export default function PlansPage() { const [plans, setPlans] = useState([]); const [showModal, setShowModal] = useState(false); const [isLoading, setIsLoading] = useState(true); + const [role, setRole] = useState(null); // Form State const [name, setName] = useState(''); @@ -54,14 +56,16 @@ export default function PlansPage() { }; useEffect(() => { + fetch('/api/auth/me') + .then(res => res.ok ? res.json() : null) + .then(data => { + if (data?.user) setRole(data.user.role); + }) + .catch(err => console.error('Failed to fetch user role', err)); fetchPlans(); }, []); - const handleLogout = async () => { - await fetch('/api/auth/logout', { method: 'POST' }); - router.push('/login'); - router.refresh(); - }; + const handleCreatePlan = async (e: React.FormEvent) => { e.preventDefault(); @@ -133,33 +137,20 @@ export default function PlansPage() { return (
{/* Shared Dashboard Header */} -
-
- Remuneración Estelar -
- - -
+

Planes de Comisión

- + {(role === 'admin' || role === 'director') && ( + + )}
{isLoading ? ( -
Cargando planes...
+
Cargando planes...
) : (
{plans.map((plan) => ( @@ -199,16 +190,24 @@ export default function PlansPage() {
- - Configurar Reglas - - + { (role === 'admin' || role === 'director') ? ( + <> + + Configurar Reglas + + + + ) : ( + + Ver Reglas + + ) }
))} diff --git a/src/app/sales/import/page.tsx b/src/app/sales/import/page.tsx index 0c551e9..988771a 100644 --- a/src/app/sales/import/page.tsx +++ b/src/app/sales/import/page.tsx @@ -112,6 +112,12 @@ export default function SalesImportPage() { setProgress(100); setSuccessData({ count: data.metadata.count || 0 }); setStatusMessage(''); + } else if (data.metadata?.status === 'FAILED') { + clearInterval(interval); + setIsUploading(false); + setProgress(0); + setGeneralError(data.metadata.errorMessage || "Fallo en el procesamiento de n8n."); + setStatusMessage(''); } } } catch (err) { diff --git a/src/components/Header.module.css b/src/components/Header.module.css new file mode 100644 index 0000000..ee9d47b --- /dev/null +++ b/src/components/Header.module.css @@ -0,0 +1,71 @@ +.header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--space-4) var(--space-8); + background-color: var(--card); + border-bottom: 1px solid var(--border); + backdrop-filter: blur(8px); + position: sticky; + top: 0; + z-index: 10; +} + +.logoArea { + display: flex; + align-items: center; + gap: var(--space-3); +} + +.logoText { + font-size: var(--text-lg); + font-weight: var(--weight-bold); + color: var(--foreground); + letter-spacing: -0.02em; +} + +.nav { + display: flex; + gap: var(--space-6); +} + +.navLink { + font-size: var(--text-sm); + font-weight: var(--weight-medium); + color: var(--foreground); + opacity: 0.7; + text-decoration: none; + transition: opacity var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast); + cursor: pointer; + padding: var(--space-2) 0; + border-bottom: 2px solid transparent; +} + +.navLink:hover { + opacity: 1; +} + +.navLinkActive { + opacity: 1; + color: var(--primary); + font-weight: var(--weight-semibold); + border-bottom-color: var(--primary); +} + +.logoutBtn { + padding: var(--space-2) var(--space-4); + font-size: var(--text-xs); + font-weight: var(--weight-semibold); + background-color: transparent; + color: var(--foreground); + border: 1px solid var(--border); + border-radius: var(--radius-md); + cursor: pointer; + transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast); +} + +.logoutBtn:hover { + background-color: hsla(0, 85%, 60%, 0.1); + border-color: hsl(0, 85%, 60%); + color: hsl(0, 85%, 60%); +} diff --git a/src/lib/api-guards.ts b/src/lib/api-guards.ts index 85cc11c..1a13ab0 100644 --- a/src/lib/api-guards.ts +++ b/src/lib/api-guards.ts @@ -21,14 +21,14 @@ export function withAuth( if (!session) { return NextResponse.json( - { error: 'Unauthorized. Session expired or missing.' }, + { error: 'No autorizado. La sesión ha expirado o no existe.' }, { status: 401 } ); } if (allowedRoles && allowedRoles.length > 0 && !allowedRoles.includes(session.role)) { return NextResponse.json( - { error: 'Forbidden. Insufficient permissions.' }, + { error: 'Acceso prohibido. Permisos insuficientes.' }, { status: 403 } ); } @@ -40,7 +40,7 @@ export function withAuth( } catch (err) { console.error('API guard execution error:', err); return NextResponse.json( - { error: 'Internal server error' }, + { error: 'Error interno del servidor.' }, { status: 500 } ); } diff --git a/src/lib/auth-edge.ts b/src/lib/auth-edge.ts index be53ac3..2dc1231 100644 --- a/src/lib/auth-edge.ts +++ b/src/lib/auth-edge.ts @@ -7,7 +7,10 @@ export interface UserSession { regionId: number; } -const JWT_SECRET = process.env.NEXTAUTH_SECRET || 'fallback_secret_for_development_jwt_auth'; +if (!process.env.NEXTAUTH_SECRET) { + throw new Error('FATAL: NEXTAUTH_SECRET environment variable is missing.'); +} +const JWT_SECRET = process.env.NEXTAUTH_SECRET; function base64urlDecode(str: string): string { let base64 = str.replace(/-/g, '+').replace(/_/g, '/'); diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 63d268b..41e4e64 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -2,7 +2,10 @@ import crypto from 'crypto'; import bcrypt from 'bcryptjs'; import { NextRequest } from 'next/server'; -const JWT_SECRET = process.env.NEXTAUTH_SECRET || 'fallback_secret_for_development_jwt_auth'; +if (!process.env.NEXTAUTH_SECRET) { + throw new Error('FATAL: NEXTAUTH_SECRET environment variable is missing.'); +} +const JWT_SECRET = process.env.NEXTAUTH_SECRET; export interface UserSession { userId: number; diff --git a/src/lib/db.ts b/src/lib/db.ts index 4980fe7..ed1d123 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -34,6 +34,30 @@ export const getPrisma = (session?: UserSession | null) => { } return prisma.$extends({ + client: { + async $transaction(args: any, options?: any) { + if (typeof args === 'function') { + const originalFn = args; + return prisma.$transaction(async (tx) => { + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_id = '${session.userId}';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_user_role = '${session.role}';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_hotel_id = '${session.hotelId}';`); + await tx.$executeRawUnsafe(`SET LOCAL app.current_region_id = '${session.regionId}';`); + return originalFn(tx); + }, options); + } else if (Array.isArray(args)) { + const rlsQueries = [ + prisma.$executeRawUnsafe(`SET LOCAL app.current_user_id = '${session.userId}';`), + prisma.$executeRawUnsafe(`SET LOCAL app.current_user_role = '${session.role}';`), + prisma.$executeRawUnsafe(`SET LOCAL app.current_hotel_id = '${session.hotelId}';`), + prisma.$executeRawUnsafe(`SET LOCAL app.current_region_id = '${session.regionId}';`), + ]; + const results = await prisma.$transaction([...rlsQueries, ...args], options); + return results.slice(rlsQueries.length); + } + return prisma.$transaction(args, options); + } + }, query: { $allModels: { async $allOperations({ args, query, __internalParams }: any) { diff --git a/src/lib/roles.ts b/src/lib/roles.ts new file mode 100644 index 0000000..dd04b0a --- /dev/null +++ b/src/lib/roles.ts @@ -0,0 +1,27 @@ +export interface RoleDetail { + id: string; + nameEn: string; + nameEs: string; +} + +export const ROLES: Record = { + admin: { id: 'admin', nameEn: 'Administrator', nameEs: 'Administrador' }, + director: { id: 'director', nameEn: 'Director', nameEs: 'Director' }, + hotel_manager: { id: 'hotel_manager', nameEn: 'Hotel Manager', nameEs: 'Gerente de Hotel' }, + commercial_leader: { id: 'commercial_leader', nameEn: 'Commercial Leader', nameEs: 'Líder Comercial' }, + analyst: { id: 'analyst', nameEn: 'Analyst', nameEs: 'Analista' }, + auditor: { id: 'auditor', nameEn: 'Auditor', nameEs: 'Auditor' }, + collaborator: { id: 'collaborator', nameEn: 'Collaborator', nameEs: 'Colaborador' } +}; + +export function getRoleLabel(roleId: string, locale: 'en' | 'es' = 'es'): string { + const role = ROLES[roleId.toLowerCase()]; + if (!role) return roleId; + return locale === 'en' ? role.nameEn : role.nameEs; +} + +export function getRoleBilingualLabel(roleId: string): string { + const role = ROLES[roleId.toLowerCase()]; + if (!role) return roleId; + return `${role.nameEs} / ${role.nameEn}`; +} diff --git a/src/middleware.ts b/src/middleware.ts index b87138b..d39f62a 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -37,7 +37,7 @@ export async function middleware(req: NextRequest) { if (!session) { if (pathname.startsWith('/api/')) { return NextResponse.json( - { error: 'Unauthorized. Session expired or missing.' }, + { error: 'No autorizado. La sesión ha expirado o no existe.' }, { status: 401 } ); }