diff --git a/MANTRAS.md b/MANTRAS.md
index 7bb669a..dca685f 100644
--- a/MANTRAS.md
+++ b/MANTRAS.md
@@ -55,4 +55,8 @@ In other words, pick something for a name and roll with the punches.
### Find what you love and let it kill you
> Find what you love and let it kill you. Let it drain you of your all. Let it cling onto your back and weigh you down into eventual nothingness. Let it kill you and let it devour your remains. For all things will kill you, both slowly and fastly, but it's much better to be killed by a lover.
-> -- Charles Bukowski
\ No newline at end of file
+> -- Charles Bukowski
+
+### Do what you can, with what you have, where you are at
+
+### Use it up, wear it out, make it do, or do without
\ No newline at end of file
diff --git a/services/our/.dockerignore b/services/our/.dockerignore
index 3b462cb..9a0ca6a 100644
--- a/services/our/.dockerignore
+++ b/services/our/.dockerignore
@@ -1,3 +1,5 @@
+src/test
+
node_modules
# Output
diff --git a/services/our/.gitignore b/services/our/.gitignore
index a0d3897..209904f 100644
--- a/services/our/.gitignore
+++ b/services/our/.gitignore
@@ -1,3 +1,5 @@
+vibeui
+
generated
backup
diff --git a/services/our/Dockerfile b/services/our/Dockerfile
index c6e4634..1d91804 100644
--- a/services/our/Dockerfile
+++ b/services/our/Dockerfile
@@ -13,8 +13,11 @@ RUN apt-get update -y && \
mktorrent \
python3 \
python3-pip \
+ python3-venv \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
+# Install IPFS Kubo
+COPY --from=ipfs/kubo:v0.36.0 /usr/local/bin/ipfs /usr/local/bin/ipfs
# Copy and install dependencies
COPY package.json package-lock.json ./
diff --git a/services/our/compose.development.yaml b/services/our/compose.development.yaml
index 27a953d..6a452ee 100644
--- a/services/our/compose.development.yaml
+++ b/services/our/compose.development.yaml
@@ -5,7 +5,7 @@ services:
container_name: our-postgres
image: postgres:17
restart: unless-stopped
- env_file: ./../../.env
+ env_file: ./../../.env.development
ports:
- "5432:5432"
volumes:
@@ -17,47 +17,6 @@ services:
start_period: 10s
timeout: 10s
- pgweb:
- container_name: out-pgweb
- image: sosedoff/pgweb
- depends_on:
- postgres:
- condition: service_healthy
- env_file: ./../../.env
- ports:
- - "8091:8081"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:8081"]
- interval: 10s
- retries: 5
- start_period: 10s
- timeout: 10s
-
- # pgadmin:
- # image: dpage/pgadmin4:latest
- # environment:
- # PGADMIN_LISTEN_PORT: 5050
- # PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
- # PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
- # PGADMIN_DISABLE_POSTFIX: true
- # ports:
- # - "5050:5050"
-
- our:
- build:
- context: .
- dockerfile: Dockerfile
- container_name: our-app
- ports:
- - "5000:5000"
- env_file: ./../../.env ## @see ./src/config/env.ts for all env var names.
- depends_on:
- postgres:
- condition: service_healthy
- networks:
- - default
- entrypoint: >
- sh -c "npm run deploy && npm run start:server"
volumes:
pgdata:
\ No newline at end of file
diff --git a/services/our/compose.production.yaml b/services/our/compose.production.yaml
index 8ca81c1..83ba4f3 100644
--- a/services/our/compose.production.yaml
+++ b/services/our/compose.production.yaml
@@ -66,4 +66,3 @@ networks:
default: {}
-## i need to mount /mnt/vfs/futureporn:/mnt/vfs/futureporn on both the server and worker
\ No newline at end of file
diff --git a/services/our/compose.staging.yaml b/services/our/compose.staging.yaml
new file mode 100644
index 0000000..d2123fd
--- /dev/null
+++ b/services/our/compose.staging.yaml
@@ -0,0 +1,53 @@
+
+services:
+
+ postgres:
+ container_name: our-postgres
+ image: postgres:17
+ restart: unless-stopped
+ env_file: ./../../.env.development
+ ports:
+ - "5432:5432"
+ volumes:
+ - pgdata:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD", "pg_isready", "-U", "postgres"]
+ interval: 10s
+ retries: 5
+ start_period: 10s
+ timeout: 10s
+
+ server:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ container_name: our-server
+ ports:
+ - "5000:5000"
+ env_file: ./../../.env.development ## @see ./src/config/env.ts for all env var names.
+ depends_on:
+ postgres:
+ condition: service_healthy
+ networks:
+ - default
+ entrypoint: >
+ sh -c "npm run deploy && npm run start:server"
+
+ worker:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ container_name: our-worker
+ env_file: ./../../.env.development
+ depends_on:
+ postgres:
+ condition: service_healthy
+ networks:
+ - default
+ init: true
+ entrypoint: >
+ sh -c "npm run start:worker"
+
+
+volumes:
+ pgdata:
\ No newline at end of file
diff --git a/services/our/package.json b/services/our/package.json
index 8958886..9d18cd4 100644
--- a/services/our/package.json
+++ b/services/our/package.json
@@ -3,9 +3,6 @@
"private": true,
"version": "2.0.1",
"type": "module",
- "overrides": {
- "@sinclair/typebox": "0.34.0"
- },
"scripts": {
"dev": "concurrently npm:dev:serve npm:dev:build npm:dev:worker",
"dev:serve": "tsx watch ./src/index.ts",
@@ -18,26 +15,21 @@
"build": "tsup --clean",
"lint": "eslint .",
"clean": "rm -rf node_modules && rm -rf pnpm-lock.yaml",
- "deploy": "npx prisma migrate deploy"
+ "deploy": "npx prisma migrate deploy",
+ "test:watch": "npx vitest --watch",
+ "test": "npx vitest"
},
"devDependencies": {
"@eslint/compat": "^1.3.1",
"@eslint/js": "^9.31.0",
- "@fontsource/fira-mono": "^5.2.6",
- "@neoconfetti/svelte": "^2.2.2",
- "@sveltejs/adapter-auto": "^6.0.1",
- "@sveltejs/kit": "^2.22.5",
- "@sveltejs/vite-plugin-svelte": "^5.1.1",
"eslint": "^9.31.0",
"eslint-plugin-svelte": "^3.10.1",
"globals": "^16.3.0",
"nodemon": "^3.1.10",
"prisma": "6.8.2",
- "svelte": "^5.35.6",
- "svelte-check": "^4.2.2",
"typescript": "^5.8.3",
"typescript-eslint": "^8.36.0",
- "vite": "^6.3.5"
+ "vitest": "^3.2.4"
},
"pnpm": {
"onlyBuiltDependencies": [
@@ -45,13 +37,9 @@
]
},
"dependencies": {
- "@auth0/auth0-spa-js": "^2.2.0",
"@aws-sdk/client-s3": "3.726.1",
"@aws-sdk/s3-request-presigner": "^3.844.0",
- "@bogeychan/elysia-logger": "^0.1.8",
"@dotenvx/dotenvx": "^1.47.5",
- "@elysiajs/static": "^1.3.0",
- "@elysiajs/swagger": "^1.3.1",
"@fastify/flash": "^6.0.3",
"@fastify/formbody": "^8.0.2",
"@fastify/multipart": "^9.0.3",
@@ -69,19 +57,10 @@
"@prisma/extension-accelerate": "^1.3.0",
"@types/node": "^22.16.3",
"@types/node-fetch": "^2.6.12",
- "arctic": "^3.7.0",
- "axios": "^1.10.0",
"cache-manager": "^7.0.1",
"chokidar-cli": "^3.0.0",
"concurrently": "^9.2.0",
"date-fns": "^4.1.0",
- "drizzle-orm": "^0.43.1",
- "drizzle-typebox": "^0.3.3",
- "ejs": "^3.1.10",
- "elysia": "^1.3.5",
- "elysia-clerk": "^0.9.10",
- "elysia-connect-middleware": "^0.0.5",
- "elysia-oauth2": "^2.1.0",
"fastify": "^5.4.0",
"fastify-plugin": "^5.0.1",
"fastify-sse-v2": "^4.2.1",
@@ -96,8 +75,8 @@
"mime-types": "^3.0.1",
"nano-spawn": "^1.0.2",
"nanoid": "^5.1.5",
- "nocodb-sdk": "^0.263.8",
"node-fetch": "^3.3.2",
+ "onnxruntime-node": "1.22.0-rev",
"rate-limiter-flexible": "^7.1.1",
"rimraf": "6.0.1",
"sharp": "^0.34.3",
@@ -105,7 +84,7 @@
"ts-node": "^10.9.2",
"tsup": "^8.5.0",
"tsx": "^4.20.3",
- "vitest": "^3.2.4",
+ "which": "^5.0.0",
"zod": "^3.25.76"
},
"prisma": {
diff --git a/services/our/pnpm-lock.yaml b/services/our/pnpm-lock.yaml
new file mode 100644
index 0000000..62ae16d
--- /dev/null
+++ b/services/our/pnpm-lock.yaml
@@ -0,0 +1,7413 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@aws-sdk/client-s3':
+ specifier: 3.726.1
+ version: 3.726.1
+ '@aws-sdk/s3-request-presigner':
+ specifier: ^3.844.0
+ version: 3.846.0
+ '@dotenvx/dotenvx':
+ specifier: ^1.47.5
+ version: 1.47.6
+ '@fastify/flash':
+ specifier: ^6.0.3
+ version: 6.0.3
+ '@fastify/formbody':
+ specifier: ^8.0.2
+ version: 8.0.2
+ '@fastify/multipart':
+ specifier: ^9.0.3
+ version: 9.0.3
+ '@fastify/oauth2':
+ specifier: ^8.1.2
+ version: 8.1.2
+ '@fastify/secure-session':
+ specifier: ^8.2.0
+ version: 8.2.0
+ '@fastify/static':
+ specifier: ^8.2.0
+ version: 8.2.0
+ '@fastify/swagger':
+ specifier: ^9.5.1
+ version: 9.5.1
+ '@fastify/swagger-ui':
+ specifier: ^5.2.3
+ version: 5.2.3
+ '@fastify/view':
+ specifier: ^11.1.0
+ version: 11.1.0
+ '@imgly/background-removal-node':
+ specifier: ^1.4.5
+ version: 1.4.5
+ '@imqueue/pg-pubsub':
+ specifier: ^1.10.0
+ version: 1.10.0
+ '@keyv/postgres':
+ specifier: ^1.4.11
+ version: 1.4.11
+ '@paralleldrive/cuid2':
+ specifier: ^2.2.2
+ version: 2.2.2
+ '@prisma/client':
+ specifier: 6.8.2
+ version: 6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3)
+ '@prisma/extension-accelerate':
+ specifier: ^1.3.0
+ version: 1.3.0(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))
+ '@types/node':
+ specifier: ^22.16.3
+ version: 22.16.4
+ '@types/node-fetch':
+ specifier: ^2.6.12
+ version: 2.6.12
+ cache-manager:
+ specifier: ^7.0.1
+ version: 7.0.1
+ chokidar-cli:
+ specifier: ^3.0.0
+ version: 3.0.0
+ concurrently:
+ specifier: ^9.2.0
+ version: 9.2.0
+ date-fns:
+ specifier: ^4.1.0
+ version: 4.1.0
+ fastify:
+ specifier: ^5.4.0
+ version: 5.4.0
+ fastify-plugin:
+ specifier: ^5.0.1
+ version: 5.0.1
+ fastify-sse-v2:
+ specifier: ^4.2.1
+ version: 4.2.1(fastify@5.4.0)
+ form-data:
+ specifier: ^4.0.3
+ version: 4.0.4
+ fs-extra:
+ specifier: ^11.3.0
+ version: 11.3.0
+ graphile-worker:
+ specifier: ^0.16.6
+ version: 0.16.6(typescript@5.8.3)
+ handlebars:
+ specifier: 4.7.8
+ version: 4.7.8
+ jdenticon:
+ specifier: ^3.3.0
+ version: 3.3.0
+ js-yaml:
+ specifier: ^4.1.0
+ version: 4.1.0
+ keyv:
+ specifier: ^4.5.4
+ version: 4.5.4
+ lodash-es:
+ specifier: ^4.17.21
+ version: 4.17.21
+ mime-types:
+ specifier: ^3.0.1
+ version: 3.0.1
+ nano-spawn:
+ specifier: ^1.0.2
+ version: 1.0.2
+ nanoid:
+ specifier: ^5.1.5
+ version: 5.1.5
+ node-fetch:
+ specifier: ^3.3.2
+ version: 3.3.2
+ onnxruntime-node:
+ specifier: 1.22.0-rev
+ version: 1.22.0-rev
+ rate-limiter-flexible:
+ specifier: ^7.1.1
+ version: 7.1.1
+ rimraf:
+ specifier: 6.0.1
+ version: 6.0.1
+ sharp:
+ specifier: ^0.34.3
+ version: 0.34.3
+ slugify:
+ specifier: ^1.6.6
+ version: 1.6.6
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@22.16.4)(typescript@5.8.3)
+ tsup:
+ specifier: ^8.5.0
+ version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0)
+ tsx:
+ specifier: ^4.20.3
+ version: 4.20.3
+ which:
+ specifier: ^5.0.0
+ version: 5.0.0
+ zod:
+ specifier: ^3.25.76
+ version: 3.25.76
+ devDependencies:
+ '@eslint/compat':
+ specifier: ^1.3.1
+ version: 1.3.1(eslint@9.31.0(jiti@2.4.2))
+ '@eslint/js':
+ specifier: ^9.31.0
+ version: 9.31.0
+ eslint:
+ specifier: ^9.31.0
+ version: 9.31.0(jiti@2.4.2)
+ eslint-plugin-svelte:
+ specifier: ^3.10.1
+ version: 3.11.0(eslint@9.31.0(jiti@2.4.2))(svelte@5.36.5)(ts-node@10.9.2(@types/node@22.16.4)(typescript@5.8.3))
+ globals:
+ specifier: ^16.3.0
+ version: 16.3.0
+ nodemon:
+ specifier: ^3.1.10
+ version: 3.1.10
+ prisma:
+ specifier: 6.8.2
+ version: 6.8.2(typescript@5.8.3)
+ typescript:
+ specifier: ^5.8.3
+ version: 5.8.3
+ typescript-eslint:
+ specifier: ^8.36.0
+ version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ vitest:
+ specifier: ^3.2.4
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@aws-crypto/crc32@5.2.0':
+ resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/crc32c@5.2.0':
+ resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==}
+
+ '@aws-crypto/sha1-browser@5.2.0':
+ resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==}
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
+
+ '@aws-crypto/sha256-js@5.2.0':
+ resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
+
+ '@aws-crypto/util@5.2.0':
+ resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
+
+ '@aws-sdk/client-s3@3.726.1':
+ resolution: {integrity: sha512-UpOGcob87DiuS2d3fW6vDZg94g57mNiOSkzvR/6GOdvBSlUgk8LLwVzGASB71FdKMl1EGEr4MeD5uKH9JsG+dw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/client-sso-oidc@3.726.0':
+ resolution: {integrity: sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sts': ^3.726.0
+
+ '@aws-sdk/client-sso@3.726.0':
+ resolution: {integrity: sha512-NM5pjv2qglEc4XN3nnDqtqGsSGv1k5YTmzDo3W3pObItHmpS8grSeNfX9zSH+aVl0Q8hE4ZIgvTPNZ+GzwVlqg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/client-sts@3.726.1':
+ resolution: {integrity: sha512-qh9Q9Vu1hrM/wMBOBIaskwnE4GTFaZu26Q6WHwyWNfj7J8a40vBxpW16c2vYXHLBtwRKM1be8uRLkmDwghpiNw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/core@3.723.0':
+ resolution: {integrity: sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/core@3.846.0':
+ resolution: {integrity: sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.723.0':
+ resolution: {integrity: sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.723.0':
+ resolution: {integrity: sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.726.0':
+ resolution: {integrity: sha512-seTtcKL2+gZX6yK1QRPr5mDJIBOatrpoyrO8D5b8plYtV/PDbDW3mtDJSWFHet29G61ZmlNElyXRqQCXn9WX+A==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sts': ^3.726.0
+
+ '@aws-sdk/credential-provider-node@3.726.0':
+ resolution: {integrity: sha512-jjsewBcw/uLi24x8JbnuDjJad4VA9ROCE94uVRbEnGmUEsds75FWOKp3fWZLQlmjLtzsIbJOZLALkZP86liPaw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.723.0':
+ resolution: {integrity: sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.726.0':
+ resolution: {integrity: sha512-WxkN76WeB08j2yw7jUH9yCMPxmT9eBFd9ZA/aACG7yzOIlsz7gvG3P2FQ0tVg25GHM0E4PdU3p/ByTOawzcOAg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.723.0':
+ resolution: {integrity: sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sts': ^3.723.0
+
+ '@aws-sdk/middleware-bucket-endpoint@3.726.0':
+ resolution: {integrity: sha512-vpaP80rZqwu0C3ELayIcRIW84/nd1tadeoqllT+N9TDshuEvq4UJ+w47OBHB7RkHFJoc79lXXNYle0fdQdaE/A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-expect-continue@3.723.0':
+ resolution: {integrity: sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-flexible-checksums@3.723.0':
+ resolution: {integrity: sha512-JY76mrUCLa0FHeMZp8X9+KK6uEuZaRZaQrlgq6zkXX/3udukH0T3YdFC+Y9uw5ddbiwZ5+KwgmlhnPpiXKfP4g==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-host-header@3.723.0':
+ resolution: {integrity: sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-location-constraint@3.723.0':
+ resolution: {integrity: sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-logger@3.723.0':
+ resolution: {integrity: sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-recursion-detection@3.723.0':
+ resolution: {integrity: sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-sdk-s3@3.723.0':
+ resolution: {integrity: sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-sdk-s3@3.846.0':
+ resolution: {integrity: sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-ssec@3.723.0':
+ resolution: {integrity: sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-user-agent@3.726.0':
+ resolution: {integrity: sha512-hZvzuE5S0JmFie1r68K2wQvJbzyxJFdzltj9skgnnwdvLe8F/tz7MqLkm28uV0m4jeHk0LpiBo6eZaPkQiwsZQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/region-config-resolver@3.723.0':
+ resolution: {integrity: sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/s3-request-presigner@3.846.0':
+ resolution: {integrity: sha512-R2I3bdYSvncieucQiGGfSo3Xu8kV424uyu5tZZQk3zEH7ZNshJlE8YcYAGkN9caqlnYZ4V+CK6+71ufTc8I/XQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/signature-v4-multi-region@3.723.0':
+ resolution: {integrity: sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/signature-v4-multi-region@3.846.0':
+ resolution: {integrity: sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/token-providers@3.723.0':
+ resolution: {integrity: sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sso-oidc': ^3.723.0
+
+ '@aws-sdk/types@3.723.0':
+ resolution: {integrity: sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/types@3.840.0':
+ resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-arn-parser@3.723.0':
+ resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-arn-parser@3.804.0':
+ resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-endpoints@3.726.0':
+ resolution: {integrity: sha512-sLd30ASsPMoPn3XBK50oe/bkpJ4N8Bpb7SbhoxcY3Lk+fSASaWxbbXE81nbvCnkxrZCvkPOiDHzJCp1E2im71A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-format-url@3.840.0':
+ resolution: {integrity: sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-locate-window@3.804.0':
+ resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-user-agent-browser@3.723.0':
+ resolution: {integrity: sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==}
+
+ '@aws-sdk/util-user-agent-node@3.726.0':
+ resolution: {integrity: sha512-iEj6KX9o6IQf23oziorveRqyzyclWai95oZHDJtYav3fvLJKStwSjygO4xSF7ycHcTYeCHSLO1FFOHgGVs4Viw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
+ '@aws-sdk/xml-builder@3.723.0':
+ resolution: {integrity: sha512-5xK2SqGU1mzzsOeemy7cy3fGKxR1sEpUs4pEiIjaT0OIvU+fZaDVUEYWOqsgns6wI90XZEQJlXtI8uAHX/do5Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/xml-builder@3.821.0':
+ resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==}
+ engines: {node: '>=18.0.0'}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@dotenvx/dotenvx@1.47.6':
+ resolution: {integrity: sha512-bvVMFc3Z9/mtYUWP1S1UB4SA3U2mQ1p7Qc9QW6Cm7t1Vm6D+dysmus/Mt26Dc1QrE6OgrKUGC99EQcMvcFZC3Q==}
+ hasBin: true
+
+ '@ecies/ciphers@0.2.4':
+ resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==}
+ engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+ peerDependencies:
+ '@noble/ciphers': ^1.0.0
+
+ '@emnapi/runtime@1.4.4':
+ resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==}
+
+ '@esbuild/aix-ppc64@0.25.6':
+ resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.6':
+ resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.6':
+ resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.6':
+ resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.6':
+ resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.6':
+ resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.6':
+ resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.6':
+ resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.6':
+ resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.6':
+ resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.6':
+ resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.6':
+ resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.6':
+ resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.6':
+ resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.6':
+ resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.6':
+ resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.6':
+ resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.6':
+ resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.6':
+ resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.6':
+ resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.6':
+ resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.6':
+ resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.6':
+ resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.6':
+ resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.6':
+ resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.6':
+ resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+ 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.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/compat@1.3.1':
+ resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.40 || 9
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+
+ '@eslint/config-array@0.21.0':
+ resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.3.0':
+ resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.15.1':
+ resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.31.0':
+ resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.3.3':
+ resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@fastify/accept-negotiator@2.0.1':
+ resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==}
+
+ '@fastify/ajv-compiler@4.0.2':
+ resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==}
+
+ '@fastify/busboy@3.1.1':
+ resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==}
+
+ '@fastify/cookie@11.0.2':
+ resolution: {integrity: sha512-GWdwdGlgJxyvNv+QcKiGNevSspMQXncjMZ1J8IvuDQk0jvkzgWWZFNC2En3s+nHndZBGV8IbLwOI/sxCZw/mzA==}
+
+ '@fastify/deepmerge@2.0.2':
+ resolution: {integrity: sha512-3wuLdX5iiiYeZWP6bQrjqhrcvBIf0NHbQH1Ur1WbHvoiuTYUEItgygea3zs8aHpiitn0lOB8gX20u1qO+FDm7Q==}
+
+ '@fastify/error@4.2.0':
+ resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
+
+ '@fastify/fast-json-stringify-compiler@5.0.3':
+ resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
+
+ '@fastify/flash@6.0.3':
+ resolution: {integrity: sha512-MyUvkiIR9zRqfMPCuWeTf8uyYpPhL+eZH4oSTxvqtbW+ifbo1Bk1SJtlrxmFgu52ZAAKUnYtI5OuSY9/GR22SA==}
+
+ '@fastify/formbody@8.0.2':
+ resolution: {integrity: sha512-84v5J2KrkXzjgBpYnaNRPqwgMsmY7ZDjuj0YVuMR3NXCJRCgKEZy/taSP1wUYGn0onfxJpLyRGDLa+NMaDJtnA==}
+
+ '@fastify/forwarded@3.0.0':
+ resolution: {integrity: sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
+
+ '@fastify/multipart@9.0.3':
+ resolution: {integrity: sha512-pJogxQCrT12/6I5Fh6jr3narwcymA0pv4B0jbC7c6Bl9wnrxomEUnV0d26w6gUls7gSXmhG8JGRMmHFIPsxt1g==}
+
+ '@fastify/oauth2@8.1.2':
+ resolution: {integrity: sha512-XZWFRWTZE2fkZ2pjuHNGtpFn1tOFgcJbU0205kHbfd16dn9xRc/6HmG0gHtN/g/BNkEL3EsQ54+pYEdh8dnBgA==}
+
+ '@fastify/proxy-addr@5.0.0':
+ resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==}
+
+ '@fastify/secure-session@8.2.0':
+ resolution: {integrity: sha512-E1linEHVV86c0Gt+ohujcuRsCeedhD2M3X5+a2aU9Ln0YDC0bbuA7bE6QQzf/HAacOpt9+CJqV5NqdlQr9ui0A==}
+ hasBin: true
+
+ '@fastify/send@4.1.0':
+ resolution: {integrity: sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==}
+
+ '@fastify/static@8.2.0':
+ resolution: {integrity: sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==}
+
+ '@fastify/swagger-ui@5.2.3':
+ resolution: {integrity: sha512-e7ivEJi9EpFcxTONqICx4llbpB2jmlI+LI1NQ/mR7QGQnyDOqZybPK572zJtcdHZW4YyYTBHcP3a03f1pOh0SA==}
+
+ '@fastify/swagger@9.5.1':
+ resolution: {integrity: sha512-EGjYLA7vDmCPK7XViAYMF6y4+K3XUy5soVTVxsyXolNe/Svb4nFQxvtuQvvoQb2Gzc9pxiF3+ZQN/iZDHhKtTg==}
+
+ '@fastify/view@11.1.0':
+ resolution: {integrity: sha512-ab8LG5V8srCdnknYlufaSusrjkYLYf5TUWm3DTdPFr5m1C9tI7KNl78UCcP0BJiaGaZj1udsyzAC67JCf5Ol/g==}
+
+ '@graphile/logger@0.2.0':
+ resolution: {integrity: sha512-jjcWBokl9eb1gVJ85QmoaQ73CQ52xAaOCF29ukRbYNl6lY+ts0ErTaDYOBlejcbUs2OpaiqYLO5uDhyLFzWw4w==}
+
+ '@hapi/boom@10.0.1':
+ resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==}
+
+ '@hapi/bourne@3.0.0':
+ resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==}
+
+ '@hapi/hoek@11.0.7':
+ resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==}
+
+ '@hapi/hoek@9.3.0':
+ resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
+
+ '@hapi/topo@5.1.0':
+ resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
+
+ '@hapi/wreck@18.1.0':
+ resolution: {integrity: sha512-0z6ZRCmFEfV/MQqkQomJ7sl/hyxvcZM7LtuVqN3vdAO4vM9eBbowl0kaqQj9EJJQab+3Uuh1GxbGIBFy4NfJ4w==}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@img/sharp-darwin-arm64@0.34.3':
+ resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.34.3':
+ resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.2.0':
+ resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.2.0':
+ resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.2.0':
+ resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-arm@1.2.0':
+ resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-ppc64@1.2.0':
+ resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.2.0':
+ resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.2.0':
+ resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
+ resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.0':
+ resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linux-arm64@0.34.3':
+ resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linux-arm@0.34.3':
+ resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-ppc64@0.34.3':
+ resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.34.3':
+ resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-linux-x64@0.34.3':
+ resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-arm64@0.34.3':
+ resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-x64@0.34.3':
+ resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-wasm32@0.34.3':
+ resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.34.3':
+ resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.34.3':
+ resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.34.3':
+ resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@imgly/background-removal-node@1.4.5':
+ resolution: {integrity: sha512-/s9K88qhKy1jPhrSkBxurUqCVqJ8KHWCc+5yWdppdC4fuSrGC8mK8WQtmULs2ASEr8naY1qpvZu0EL5jr2Hqtg==}
+
+ '@imqueue/pg-pubsub@1.10.0':
+ resolution: {integrity: sha512-fLjOLYFLINZ+4tXgrGgV1H1NE+T8VMWuRz6G9tg8gedD3X8EFvrIJS+W9KjwwnLQjekVWBy6xosaEFWI1X0c4g==}
+
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@jridgewell/gen-mapping@0.3.12':
+ resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.4':
+ resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+
+ '@jridgewell/trace-mapping@0.3.29':
+ resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@keyv/postgres@1.4.11':
+ resolution: {integrity: sha512-DTL6gatIkesVgMm9Nnhu/6g/GmSRnTAXQe93nQRXezeYk4zXJOI/49kWH5pBftzD1ZosIE3JmaMLjfWuu0lJkw==}
+ engines: {node: '>= 14'}
+
+ '@keyv/serialize@1.0.3':
+ resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==}
+
+ '@lukeed/ms@2.0.2':
+ resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==}
+ engines: {node: '>=8'}
+
+ '@noble/ciphers@1.3.0':
+ resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/curves@1.9.3':
+ resolution: {integrity: sha512-NiHFh8qtZRREtY0Bpup+xpmLnB0bn9UAtj8CARBc2x1zjpVLDC84u+Bvy2+uaSgA3AmMP9zsacMZT1echgVAdQ==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
+ '@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'}
+
+ '@paralleldrive/cuid2@2.2.2':
+ resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@prisma/client@6.8.2':
+ resolution: {integrity: sha512-5II+vbyzv4si6Yunwgkj0qT/iY0zyspttoDrL3R4BYgLdp42/d2C8xdi9vqkrYtKt9H32oFIukvyw3Koz5JoDg==}
+ engines: {node: '>=18.18'}
+ peerDependencies:
+ prisma: '*'
+ typescript: '>=5.1.0'
+ peerDependenciesMeta:
+ prisma:
+ optional: true
+ typescript:
+ optional: true
+
+ '@prisma/config@6.8.2':
+ resolution: {integrity: sha512-ZJY1fF4qRBPdLQ/60wxNtX+eu89c3AkYEcP7L3jkp0IPXCNphCYxikTg55kPJLDOG6P0X+QG5tCv6CmsBRZWFQ==}
+
+ '@prisma/debug@6.8.2':
+ resolution: {integrity: sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==}
+
+ '@prisma/engines-version@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e':
+ resolution: {integrity: sha512-Rkik9lMyHpFNGaLpPF3H5q5TQTkm/aE7DsGM5m92FZTvWQsvmi6Va8On3pWvqLHOt5aPUvFb/FeZTmphI4CPiQ==}
+
+ '@prisma/engines@6.8.2':
+ resolution: {integrity: sha512-XqAJ//LXjqYRQ1RRabs79KOY4+v6gZOGzbcwDQl0D6n9WBKjV7qdrbd042CwSK0v0lM9MSHsbcFnU2Yn7z8Zlw==}
+
+ '@prisma/extension-accelerate@1.3.0':
+ resolution: {integrity: sha512-W41D+kWejVJvMFEh45oYIU0VY+lIE3hh5vyHLHxgpyOfF+EHzSr8EIPT9kPRJg1FTYR7WGutXi64nyaNFUJ06A==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ '@prisma/client': '>=4.16.1'
+
+ '@prisma/fetch-engine@6.8.2':
+ resolution: {integrity: sha512-lCvikWOgaLOfqXGacEKSNeenvj0n3qR5QvZUOmPE2e1Eh8cMYSobxonCg9rqM6FSdTfbpqp9xwhSAOYfNqSW0g==}
+
+ '@prisma/get-platform@6.8.2':
+ resolution: {integrity: sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==}
+
+ '@rollup/rollup-android-arm-eabi@4.45.1':
+ resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.45.1':
+ resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.45.1':
+ resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.45.1':
+ resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.45.1':
+ resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.45.1':
+ resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
+ resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.45.1':
+ resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.45.1':
+ resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.45.1':
+ resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
+ resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
+ resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.45.1':
+ resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.45.1':
+ resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.45.1':
+ resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.45.1':
+ resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.45.1':
+ resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.45.1':
+ resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.45.1':
+ resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.45.1':
+ resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sideway/address@4.1.5':
+ resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
+
+ '@sideway/formula@3.0.1':
+ resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
+
+ '@sideway/pinpoint@2.0.0':
+ resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
+
+ '@smithy/abort-controller@4.0.4':
+ resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/chunked-blob-reader-native@4.0.0':
+ resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/chunked-blob-reader@5.0.0':
+ resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/config-resolver@4.1.4':
+ resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/core@3.7.0':
+ resolution: {integrity: sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/credential-provider-imds@4.0.6':
+ resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-codec@4.0.4':
+ resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-browser@4.0.4':
+ resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-config-resolver@4.1.2':
+ resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-node@4.0.4':
+ resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-universal@4.0.4':
+ resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/fetch-http-handler@5.1.0':
+ resolution: {integrity: sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-blob-browser@4.0.4':
+ resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-node@4.0.4':
+ resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-stream-node@4.0.4':
+ resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/invalid-dependency@4.0.4':
+ resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/is-array-buffer@2.2.0':
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/is-array-buffer@4.0.0':
+ resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/md5-js@4.0.4':
+ resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-content-length@4.0.4':
+ resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-endpoint@4.1.15':
+ resolution: {integrity: sha512-L2M0oz+r6Wv0KZ90MgClXmWkV7G72519Hd5/+K5i3gQMu4WNQykh7ERr58WT3q60dd9NqHSMc3/bAK0FsFg3Fw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-retry@4.1.16':
+ resolution: {integrity: sha512-PpPhMpC6U1fLW0evKnC8gJtmobBYn0oi4RrIKGhN1a86t6XgVEK+Vb9C8dh5PPXb3YDr8lE6aYKh1hd3OikmWw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-serde@4.0.8':
+ resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-stack@4.0.4':
+ resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-config-provider@4.1.3':
+ resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-http-handler@4.1.0':
+ resolution: {integrity: sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/property-provider@4.0.4':
+ resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/protocol-http@5.1.2':
+ resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-builder@4.0.4':
+ resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-parser@4.0.4':
+ resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/service-error-classification@4.0.6':
+ resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/shared-ini-file-loader@4.0.4':
+ resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/signature-v4@5.1.2':
+ resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/smithy-client@4.4.7':
+ resolution: {integrity: sha512-x+MxBNOcG7rY9i5QsbdgvvRJngKKvUJrbU5R5bT66PTH3e6htSupJ4Q+kJ3E7t6q854jyl57acjpPi6qG1OY5g==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/types@4.3.1':
+ resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/url-parser@4.0.4':
+ resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-base64@4.0.0':
+ resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-browser@4.0.0':
+ resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-node@4.0.0':
+ resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-buffer-from@2.2.0':
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-buffer-from@4.0.0':
+ resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-config-provider@4.0.0':
+ resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-browser@4.0.23':
+ resolution: {integrity: sha512-NqRi6VvEIwpJ+KSdqI85+HH46H7uVoNqVTs2QO7p1YKnS7k8VZnunJj8R5KdmmVnTojkaL1OMPyZC8uR5F7fSg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-node@4.0.23':
+ resolution: {integrity: sha512-NE9NtEVigFa+HHJ5bBeQT7KF3KiltW880CLN9TnWWL55akeou3ziRAHO22QSUPgPZ/nqMfPXi/LGMQ6xQvXPNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-endpoints@3.0.6':
+ resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-hex-encoding@4.0.0':
+ resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-middleware@4.0.4':
+ resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-retry@4.0.6':
+ resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-stream@4.2.3':
+ resolution: {integrity: sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-uri-escape@4.0.0':
+ resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-utf8@2.3.0':
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-utf8@4.0.0':
+ resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-waiter@4.0.6':
+ resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==}
+ engines: {node: '>=18.0.0'}
+
+ '@sveltejs/acorn-typescript@1.0.5':
+ resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
+ peerDependencies:
+ acorn: ^8.9.0
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/chai@5.2.2':
+ resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/interpret@1.1.3':
+ resolution: {integrity: sha512-uBaBhj/BhilG58r64mtDb/BEdH51HIQLgP5bmWzc5qCtFMja8dCk/IOJmk36j0lbi9QHwI6sbtUNGuqXdKCAtQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/lodash@4.14.202':
+ resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/ndarray@1.0.14':
+ resolution: {integrity: sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg==}
+
+ '@types/node-fetch@2.6.12':
+ resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==}
+
+ '@types/node@20.3.3':
+ resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==}
+
+ '@types/node@22.16.4':
+ resolution: {integrity: sha512-PYRhNtZdm2wH/NT2k/oAJ6/f2VD2N2Dag0lGlx2vWgMSJXGNmlce5MiTQzoWAiIJtso30mjnfQCOKVH+kAQC/g==}
+
+ '@types/pg-format@1.0.5':
+ resolution: {integrity: sha512-i+oEEJEC+1I3XAhgqtVp45Faj8MBbV0Aoq4rHsHD7avgLjyDkaWKObd514g0Q/DOUkdxU0P4CQ0iq2KR4SoJcw==}
+
+ '@types/pg@8.15.4':
+ resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==}
+
+ '@types/semver@7.7.0':
+ resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
+
+ '@typescript-eslint/eslint-plugin@8.37.0':
+ resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.37.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/parser@8.37.0':
+ resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/project-service@8.37.0':
+ resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/scope-manager@8.37.0':
+ resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.37.0':
+ resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/type-utils@8.37.0':
+ resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/types@8.37.0':
+ resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.37.0':
+ resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/utils@8.37.0':
+ resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/visitor-keys@8.37.0':
+ resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@vitest/expect@3.2.4':
+ resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+
+ '@vitest/mocker@3.2.4':
+ resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@3.2.4':
+ resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+
+ '@vitest/runner@3.2.4':
+ resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+
+ '@vitest/snapshot@3.2.4':
+ resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+
+ '@vitest/spy@3.2.4':
+ resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+
+ '@vitest/utils@3.2.4':
+ resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+
+ abstract-logging@2.0.1:
+ resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ adm-zip@0.5.16:
+ resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+ engines: {node: '>=12.0'}
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ 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'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
+ avvio@9.1.0:
+ resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}
+
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+
+ b4a@1.6.7:
+ resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ bare-addon-resolve@1.9.4:
+ resolution: {integrity: sha512-unn6Vy/Yke6F99vg/7tcrvM2KUvIhTNniaSqDbam4AWkd4NhvDVSrQiRYVlNzUV2P7SPobkCK7JFVxrJk9btCg==}
+ peerDependencies:
+ bare-url: '*'
+ peerDependenciesMeta:
+ bare-url:
+ optional: true
+
+ bare-events@2.6.0:
+ resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==}
+
+ bare-fs@4.1.6:
+ resolution: {integrity: sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-module-resolve@1.11.1:
+ resolution: {integrity: sha512-DCxeT9i8sTs3vUMA3w321OX/oXtNEu5EjObQOnTmCdNp5RXHBAvAaBDHvAi9ta0q/948QPz+co6SsGi6aQMYRg==}
+ peerDependencies:
+ bare-url: '*'
+ peerDependenciesMeta:
+ bare-url:
+ optional: true
+
+ bare-os@3.6.1:
+ resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-semver@1.0.1:
+ resolution: {integrity: sha512-UtggzHLiTrmFOC/ogQ+Hy7VfoKoIwrP1UFcYtTxoCUdLtsIErT8+SWtOC2DH/snT9h+xDrcBEPcwKei1mzemgg==}
+
+ bare-stream@2.6.5:
+ resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.1.6:
+ resolution: {integrity: sha512-FgjDeR+/yDH34By4I0qB5NxAoWv7dOTYcOXwn73kr+c93HyC2lU6tnjifqUe33LKMJcDyCYPQjEAqgOQiXkE2Q==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ boolean@3.2.0:
+ resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ bowser@2.11.0:
+ resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ bundle-require@5.1.0:
+ resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ esbuild: '>=0.18'
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ cache-manager@7.0.1:
+ resolution: {integrity: sha512-Hd7FOyTtwhwLgkKeKQWEw6Ixj63VKuUWYwkGgL6g6Q7eISW6uxci5+DtUXlqI0gtbLCPPdhL1+HP9Zht27DbrA==}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ canvas-renderer@2.2.1:
+ resolution: {integrity: sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg==}
+
+ chai@5.2.1:
+ resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==}
+ engines: {node: '>=18'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
+ chokidar-cli@3.0.0:
+ resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==}
+ engines: {node: '>= 8.10.0'}
+ hasBin: true
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
+
+ cliui@5.0.0:
+ resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ concurrently@9.2.0:
+ resolution: {integrity: sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ cookie@1.0.2:
+ resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
+ engines: {node: '>=18'}
+
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ date-fns@4.1.0:
+ resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ 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'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-libc@2.0.4:
+ resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
+ engines: {node: '>=8'}
+
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ dotenv@16.6.1:
+ resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
+ engines: {node: '>=12'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ eciesjs@0.4.15:
+ resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==}
+ engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+
+ emoji-regex@7.0.3:
+ resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ 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-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es6-error@4.1.1:
+ resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
+
+ esbuild@0.25.6:
+ resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ 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-plugin-svelte@3.11.0:
+ resolution: {integrity: sha512-KliWlkieHyEa65aQIkRwUFfHzT5Cn4u3BQQsu3KlkJOs7c1u7ryn84EWaOjEzilbKgttT4OfBURA8Uc4JBSQIw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.1 || ^9.0.0
+ svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
+ peerDependenciesMeta:
+ svelte:
+ optional: true
+
+ 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@9.31.0:
+ resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ esm-env@1.2.2:
+ resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrap@2.1.0:
+ resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==}
+
+ 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'}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ expand-template@2.0.3:
+ resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+ engines: {node: '>=6'}
+
+ expect-type@1.2.2:
+ resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
+ engines: {node: '>=12.0.0'}
+
+ farmhash@4.0.2:
+ resolution: {integrity: sha512-i6FbQ0ZUPV6yhFSRI2SQBEqJzoWDiN4cnulTT2jm0f0lUIXg8/iPebACCrOY80rggd9LaSU65GFOI/xnJBdzyA==}
+ engines: {node: '>=16'}
+
+ fast-decode-uri-component@1.0.1:
+ resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-json-stringify@6.0.1:
+ resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-querystring@1.1.2:
+ resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
+ fast-redact@3.5.0:
+ resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
+ engines: {node: '>=6'}
+
+ fast-uri@3.0.6:
+ resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
+
+ fast-xml-parser@4.4.1:
+ resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==}
+ hasBin: true
+
+ fast-xml-parser@5.2.5:
+ resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
+ hasBin: true
+
+ fastify-plugin@4.5.1:
+ resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==}
+
+ fastify-plugin@5.0.1:
+ resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==}
+
+ fastify-sse-v2@4.2.1:
+ resolution: {integrity: sha512-VDUgAUpu+v+WsbAjcdiG7yB9zHhL64gHSN3mneiXB12nsC2QlCw+e0W97BfLApbSYcEgEz4J+1dqO2YmVqRbRw==}
+ peerDependencies:
+ fastify: '>=4'
+
+ fastify@5.4.0:
+ resolution: {integrity: sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fdir@6.4.6:
+ resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ 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'}
+
+ find-my-way@9.3.0:
+ resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}
+ engines: {node: '>=20'}
+
+ find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ fix-dts-default-cjs-exports@1.0.1:
+ resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ form-data@4.0.4:
+ resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
+ engines: {node: '>= 6'}
+
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
+ engines: {node: '>=14.14'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ 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-iterator@1.0.2:
+ resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-tsconfig@4.10.1:
+ resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+
+ github-from-package@0.0.0:
+ resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+
+ 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'}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@11.0.3:
+ resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ global-agent@3.0.0:
+ resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
+ engines: {node: '>=10.0'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@16.3.0:
+ resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
+ 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==}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ graphile-config@0.0.1-beta.17:
+ resolution: {integrity: sha512-1fQ7BK0SxhqirCulUYD7Z0P7zCPfR9QT0NciOKJngTOSqEsJxefY9pLf7ml8M+Mrn+wBrTQO5+55ch9K/tKr6A==}
+ engines: {node: '>=16'}
+
+ graphile-worker@0.16.6:
+ resolution: {integrity: sha512-e7gGYDmGqzju2l83MpzX8vNG/lOtVJiSzI3eZpAFubSxh/cxs7sRrRGBGjzBP1kNG0H+c95etPpNRNlH65PYhw==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=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-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.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore-by-default@1.0.1:
+ resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
+
+ 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==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ interpret@3.1.1:
+ resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
+ engines: {node: '>=10.13.0'}
+
+ iota-array@1.0.0:
+ resolution: {integrity: sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==}
+
+ ipaddr.js@2.2.0:
+ resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+ engines: {node: '>= 10'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-reference@3.0.3:
+ resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isexe@3.1.1:
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+ engines: {node: '>=16'}
+
+ it-pushable@1.4.2:
+ resolution: {integrity: sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==}
+
+ it-to-stream@1.0.0:
+ resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jackspeak@4.1.1:
+ resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+ engines: {node: 20 || >=22}
+
+ jdenticon@3.3.0:
+ resolution: {integrity: sha512-DhuBRNRIybGPeAjMjdHbkIfiwZCCmf8ggu7C49jhp6aJ7DYsZfudnvnTY5/1vgUhrGA7JaDAx1WevnpjCPvaGg==}
+ engines: {node: '>=6.4.0'}
+ hasBin: true
+
+ jiti@2.4.2:
+ resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
+ hasBin: true
+
+ joi@17.13.3:
+ resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
+
+ joycon@3.1.1:
+ resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+ engines: {node: '>=10'}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-ref-resolver@2.0.1:
+ resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==}
+
+ json-schema-resolver@3.0.0:
+ resolution: {integrity: sha512-HqMnbz0tz2DaEJ3ntsqtx3ezzZyDE7G56A/pPY/NGmrPu76UzsWquOpHFRAf5beTNXoH2LU5cQePVvRli1nchA==}
+ engines: {node: '>=20'}
+
+ 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-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ keyv@5.3.4:
+ resolution: {integrity: sha512-ypEvQvInNpUe+u+w8BIcPkQvEqXquyyibWE/1NB5T2BTzIpS5cGEV1LZskDzPSTvNAaT4+5FutvzlvnkxOSKlw==}
+
+ known-css-properties@0.37.0:
+ resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ light-my-request@6.6.0:
+ resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
+
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ load-tsconfig@0.2.5:
+ resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ locate-character@3.0.0:
+ resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
+
+ locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.sortby@4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loupe@3.1.4:
+ resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@11.1.0:
+ resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
+ engines: {node: 20 || >=22}
+
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ matcher@3.0.0:
+ resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
+ engines: {node: '>=10'}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ 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.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
+ minimatch@10.0.3:
+ resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ engines: {node: 20 || >=22}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@3.0.2:
+ resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
+ engines: {node: '>= 18'}
+
+ mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
+ mkdirp@3.0.1:
+ resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mlly@1.7.4:
+ resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nano-spawn@1.0.2:
+ resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==}
+ engines: {node: '>=20.17'}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanoid@5.1.5:
+ resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
+ engines: {node: ^18 || >=20}
+ hasBin: true
+
+ napi-build-utils@2.0.0:
+ resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ ndarray@1.0.19:
+ resolution: {integrity: sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==}
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ node-abi@3.75.0:
+ resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==}
+ engines: {node: '>=10'}
+
+ node-addon-api@6.1.0:
+ resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
+
+ node-addon-api@8.5.0:
+ resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==}
+ engines: {node: ^18 || ^20 || >= 21}
+
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+ deprecated: Use your platform's native DOMException instead
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ nodemon@3.1.10:
+ resolution: {integrity: sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object-treeify@1.1.33:
+ resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==}
+ engines: {node: '>= 10'}
+
+ on-exit-leak-free@2.1.2:
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+ engines: {node: '>=14.0.0'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onnxruntime-common@1.17.3:
+ resolution: {integrity: sha512-IkbaDelNVX8cBfHFgsNADRIq2TlXMFWW+nG55mwWvQT4i0NZb32Jf35Pf6h9yjrnK78RjcnlNYaI37w394ovMw==}
+
+ onnxruntime-common@1.22.0:
+ resolution: {integrity: sha512-vcuaNWgtF2dGQu/EP5P8UI5rEPEYqXG2sPPe5j9lg2TY/biJF8eWklTMwlDO08iuXq48xJo0awqIpK5mPG+IxA==}
+
+ onnxruntime-node@1.17.3:
+ resolution: {integrity: sha512-NtbN1pfApTSEjVq46LrJ396aPP2Gjhy+oYZi5Bu1leDXAEvVap/BQ8CZELiLs7z0UnXy3xjJW23HiB4P3//FIw==}
+ os: [win32, darwin, linux]
+
+ onnxruntime-node@1.22.0-rev:
+ resolution: {integrity: sha512-9vh50/mnwauFUex0NYyyLf9pmRp8q6DVMG8K+xtoXv68SSB9bESa1bEbWLqfUncgB3XucQaOV+wfMPcqANMYhQ==}
+ os: [win32, darwin, linux]
+
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-defer@3.0.0:
+ resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==}
+ engines: {node: '>=8'}
+
+ p-fifo@1.0.0:
+ resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
+ 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-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-scurry@2.0.0:
+ resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ engines: {node: 20 || >=22}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ pg-cloudflare@1.2.7:
+ resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==}
+
+ pg-connection-string@2.9.1:
+ resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==}
+
+ pg-format@1.0.4:
+ resolution: {integrity: sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==}
+ engines: {node: '>=4.0'}
+
+ pg-int8@1.0.1:
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
+
+ pg-pool@3.10.1:
+ resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==}
+ peerDependencies:
+ pg: '>=8.0'
+
+ pg-protocol@1.10.3:
+ resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==}
+
+ pg-types@2.2.0:
+ resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+ engines: {node: '>=4'}
+
+ pg@8.11.5:
+ resolution: {integrity: sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==}
+ engines: {node: '>= 8.0.0'}
+ peerDependencies:
+ pg-native: '>=3.0.1'
+ peerDependenciesMeta:
+ pg-native:
+ optional: true
+
+ pg@8.16.3:
+ resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==}
+ 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.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pino-abstract-transport@2.0.0:
+ resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+ pino-std-serializers@7.0.0:
+ resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+
+ pino@9.7.0:
+ resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==}
+ hasBin: true
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ postcss-load-config@3.1.4:
+ resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-load-config@6.0.1:
+ resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ jiti: '>=1.21.0'
+ postcss: '>=8.0.9'
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ postcss:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ postcss-safe-parser@7.0.1:
+ resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
+ engines: {node: '>=18.0'}
+ peerDependencies:
+ postcss: ^8.4.31
+
+ postcss-scss@4.0.9:
+ resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.4.29
+
+ postcss-selector-parser@7.1.0:
+ resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
+ engines: {node: '>=4'}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postgres-array@2.0.0:
+ resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+ engines: {node: '>=4'}
+
+ postgres-bytea@1.0.0:
+ resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
+ 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'}
+
+ prebuild-install@7.1.3:
+ resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prisma@6.8.2:
+ resolution: {integrity: sha512-JNricTXQxzDtRS7lCGGOB4g5DJ91eg3nozdubXze3LpcMl1oWwcFddrj++Up3jnRE6X/3gB/xz3V+ecBk/eEGA==}
+ engines: {node: '>=18.18'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.1.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ process-warning@4.0.1:
+ resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+ process-warning@5.0.0:
+ resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
+ pstree.remy@1.1.8:
+ resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
+
+ pump@3.0.3:
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+ rate-limiter-flexible@7.1.1:
+ resolution: {integrity: sha512-lsYRcqRSJrKBNt6pMzBJTiCJP5KnwsGWdObMZxd19JFUJRntM+yuHs4/2bs6NZweSLgpsDcykvzyQaumoslWQg==}
+
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ real-require@0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+
+ require-addon@1.1.0:
+ resolution: {integrity: sha512-KbXAD5q2+v1GJnkzd8zzbOxchTkStSyJZ9QwoCq3QwEXAaIlG3wDYRZGzVD357jmwaGY7hr5VaoEAL0BkF0Kvg==}
+ engines: {bare: '>=1.10.0'}
+
+ 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'}
+
+ require-main-filename@2.0.0:
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ ret@0.5.0:
+ resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
+ engines: {node: '>=10'}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@6.0.1:
+ resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
+ roarr@2.15.4:
+ resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
+ engines: {node: '>=8.0'}
+
+ rollup@4.45.1:
+ resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex2@5.0.0:
+ resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ secure-json-parse@3.0.2:
+ resolution: {integrity: sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==}
+
+ secure-json-parse@4.0.0:
+ resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}
+
+ semver-compare@1.0.0:
+ resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ serialize-error@7.0.1:
+ resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
+ engines: {node: '>=10'}
+
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
+ set-cookie-parser@2.7.1:
+ resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sharp@0.32.6:
+ resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==}
+ engines: {node: '>=14.15.0'}
+
+ sharp@0.34.3:
+ resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
+ 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'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ 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'}
+
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@4.0.1:
+ resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+
+ simple-oauth2@5.1.0:
+ resolution: {integrity: sha512-gWDa38Ccm4MwlG5U7AlcJxPv3lvr80dU7ARJWrGdgvOKyzSj1gr3GBPN1rABTedAYvC/LsGYoFuFxwDBPtGEbw==}
+
+ simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+ simple-update-notifier@2.0.0:
+ resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
+ engines: {node: '>=10'}
+
+ slugify@1.6.6:
+ resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
+ engines: {node: '>=8.0.0'}
+
+ sodium-native@4.3.3:
+ resolution: {integrity: sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw==}
+
+ sonic-boom@4.2.0:
+ resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+ engines: {node: '>= 8'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ std-env@3.9.0:
+ resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
+
+ streamx@2.22.1:
+ resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==}
+
+ string-width@3.1.0:
+ resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
+ engines: {node: '>=6'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ strip-literal@3.0.0:
+ resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+
+ strnum@1.1.2:
+ resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==}
+
+ strnum@2.1.1:
+ resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ svelte-eslint-parser@1.3.0:
+ resolution: {integrity: sha512-VCgMHKV7UtOGcGLGNFSbmdm6kEKjtzo5nnpGU/mnx4OsFY6bZ7QwRF5DUx+Hokw5Lvdyo8dpk8B1m8mliomrNg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
+ peerDependenciesMeta:
+ svelte:
+ optional: true
+
+ svelte@5.36.5:
+ resolution: {integrity: sha512-K91ug+LuQLxjW20iMzodF5haVWsWkmXk7wx5jNvlU8QuKtxThUBILbkCCFs3kAzXrYN3QSVdiaP1b4yJGeCSog==}
+ engines: {node: '>=18'}
+
+ tar-fs@2.1.3:
+ resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==}
+
+ tar-fs@3.1.0:
+ resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
+ tar-stream@3.1.7:
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+
+ tar@7.4.3:
+ resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
+ engines: {node: '>=18'}
+
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ thread-stream@3.1.0:
+ resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+ tinyglobby@0.2.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@2.0.0:
+ resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@4.0.3:
+ resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toad-cache@3.7.0:
+ resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+ engines: {node: '>=12'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ touch@3.1.1:
+ resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==}
+ hasBin: true
+
+ tr46@1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsup@8.5.0:
+ resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ '@microsoft/api-extractor': ^7.36.0
+ '@swc/core': ^1
+ postcss: ^8.4.12
+ typescript: '>=4.5.0'
+ peerDependenciesMeta:
+ '@microsoft/api-extractor':
+ optional: true
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
+ typescript:
+ optional: true
+
+ tsx@4.20.3:
+ resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@0.13.1:
+ resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
+ engines: {node: '>=10'}
+
+ typescript-eslint@8.37.0:
+ resolution: {integrity: sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
+ undefsafe@2.0.5:
+ resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
+ hasBin: true
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ vite-node@3.2.4:
+ resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+
+ vite@6.3.5:
+ resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@3.2.4:
+ resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/debug': ^4.1.12
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ '@vitest/browser': 3.2.4
+ '@vitest/ui': 3.2.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/debug':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
+ webidl-conversions@4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
+ whatwg-url@7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
+ which-module@2.0.1:
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@4.0.0:
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+ engines: {node: ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ which@5.0.0:
+ resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
+ wrap-ansi@5.1.0:
+ resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
+ engines: {node: '>=6'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@4.0.3:
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
+
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ yaml@2.8.0:
+ resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@13.1.2:
+ resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@13.3.2:
+ resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zimmerframe@1.1.2:
+ resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
+
+ zod@3.21.4:
+ resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
+
+ zod@3.25.76:
+ resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.12
+ '@jridgewell/trace-mapping': 0.3.29
+ optional: true
+
+ '@aws-crypto/crc32@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.723.0
+ tslib: 2.8.1
+
+ '@aws-crypto/crc32c@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.723.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha1-browser@5.2.0':
+ dependencies:
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-locate-window': 3.804.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ dependencies:
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-locate-window': 3.804.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-js@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.723.0
+ tslib: 2.8.1
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-crypto/util@5.2.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-sdk/client-s3@3.726.1':
+ dependencies:
+ '@aws-crypto/sha1-browser': 5.2.0
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/client-sts': 3.726.1
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/middleware-bucket-endpoint': 3.726.0
+ '@aws-sdk/middleware-expect-continue': 3.723.0
+ '@aws-sdk/middleware-flexible-checksums': 3.723.0
+ '@aws-sdk/middleware-host-header': 3.723.0
+ '@aws-sdk/middleware-location-constraint': 3.723.0
+ '@aws-sdk/middleware-logger': 3.723.0
+ '@aws-sdk/middleware-recursion-detection': 3.723.0
+ '@aws-sdk/middleware-sdk-s3': 3.723.0
+ '@aws-sdk/middleware-ssec': 3.723.0
+ '@aws-sdk/middleware-user-agent': 3.726.0
+ '@aws-sdk/region-config-resolver': 3.723.0
+ '@aws-sdk/signature-v4-multi-region': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-endpoints': 3.726.0
+ '@aws-sdk/util-user-agent-browser': 3.723.0
+ '@aws-sdk/util-user-agent-node': 3.726.0
+ '@aws-sdk/xml-builder': 3.723.0
+ '@smithy/config-resolver': 4.1.4
+ '@smithy/core': 3.7.0
+ '@smithy/eventstream-serde-browser': 4.0.4
+ '@smithy/eventstream-serde-config-resolver': 4.1.2
+ '@smithy/eventstream-serde-node': 4.0.4
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/hash-blob-browser': 4.0.4
+ '@smithy/hash-node': 4.0.4
+ '@smithy/hash-stream-node': 4.0.4
+ '@smithy/invalid-dependency': 4.0.4
+ '@smithy/md5-js': 4.0.4
+ '@smithy/middleware-content-length': 4.0.4
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/middleware-retry': 4.1.16
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/middleware-stack': 4.0.4
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-body-length-node': 4.0.0
+ '@smithy/util-defaults-mode-browser': 4.0.23
+ '@smithy/util-defaults-mode-node': 4.0.23
+ '@smithy/util-endpoints': 3.0.6
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-retry': 4.0.6
+ '@smithy/util-stream': 4.2.3
+ '@smithy/util-utf8': 4.0.0
+ '@smithy/util-waiter': 4.0.6
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1)':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/client-sts': 3.726.1
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/middleware-host-header': 3.723.0
+ '@aws-sdk/middleware-logger': 3.723.0
+ '@aws-sdk/middleware-recursion-detection': 3.723.0
+ '@aws-sdk/middleware-user-agent': 3.726.0
+ '@aws-sdk/region-config-resolver': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-endpoints': 3.726.0
+ '@aws-sdk/util-user-agent-browser': 3.723.0
+ '@aws-sdk/util-user-agent-node': 3.726.0
+ '@smithy/config-resolver': 4.1.4
+ '@smithy/core': 3.7.0
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/hash-node': 4.0.4
+ '@smithy/invalid-dependency': 4.0.4
+ '@smithy/middleware-content-length': 4.0.4
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/middleware-retry': 4.1.16
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/middleware-stack': 4.0.4
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-body-length-node': 4.0.0
+ '@smithy/util-defaults-mode-browser': 4.0.23
+ '@smithy/util-defaults-mode-node': 4.0.23
+ '@smithy/util-endpoints': 3.0.6
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-retry': 4.0.6
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sso@3.726.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/middleware-host-header': 3.723.0
+ '@aws-sdk/middleware-logger': 3.723.0
+ '@aws-sdk/middleware-recursion-detection': 3.723.0
+ '@aws-sdk/middleware-user-agent': 3.726.0
+ '@aws-sdk/region-config-resolver': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-endpoints': 3.726.0
+ '@aws-sdk/util-user-agent-browser': 3.723.0
+ '@aws-sdk/util-user-agent-node': 3.726.0
+ '@smithy/config-resolver': 4.1.4
+ '@smithy/core': 3.7.0
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/hash-node': 4.0.4
+ '@smithy/invalid-dependency': 4.0.4
+ '@smithy/middleware-content-length': 4.0.4
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/middleware-retry': 4.1.16
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/middleware-stack': 4.0.4
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-body-length-node': 4.0.0
+ '@smithy/util-defaults-mode-browser': 4.0.23
+ '@smithy/util-defaults-mode-node': 4.0.23
+ '@smithy/util-endpoints': 3.0.6
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-retry': 4.0.6
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sts@3.726.1':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/credential-provider-node': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/middleware-host-header': 3.723.0
+ '@aws-sdk/middleware-logger': 3.723.0
+ '@aws-sdk/middleware-recursion-detection': 3.723.0
+ '@aws-sdk/middleware-user-agent': 3.726.0
+ '@aws-sdk/region-config-resolver': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-endpoints': 3.726.0
+ '@aws-sdk/util-user-agent-browser': 3.723.0
+ '@aws-sdk/util-user-agent-node': 3.726.0
+ '@smithy/config-resolver': 4.1.4
+ '@smithy/core': 3.7.0
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/hash-node': 4.0.4
+ '@smithy/invalid-dependency': 4.0.4
+ '@smithy/middleware-content-length': 4.0.4
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/middleware-retry': 4.1.16
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/middleware-stack': 4.0.4
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-body-length-node': 4.0.0
+ '@smithy/util-defaults-mode-browser': 4.0.23
+ '@smithy/util-defaults-mode-node': 4.0.23
+ '@smithy/util-endpoints': 3.0.6
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-retry': 4.0.6
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/core@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/core': 3.7.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/property-provider': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-middleware': 4.0.4
+ fast-xml-parser: 4.4.1
+ tslib: 2.8.1
+
+ '@aws-sdk/core@3.846.0':
+ dependencies:
+ '@aws-sdk/types': 3.840.0
+ '@aws-sdk/xml-builder': 3.821.0
+ '@smithy/core': 3.7.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/property-provider': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-utf8': 4.0.0
+ fast-xml-parser: 5.2.5
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-env@3.723.0':
+ dependencies:
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.723.0':
+ dependencies:
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-stream': 4.2.3
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-ini@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)':
+ dependencies:
+ '@aws-sdk/client-sts': 3.726.1
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/credential-provider-env': 3.723.0
+ '@aws-sdk/credential-provider-http': 3.723.0
+ '@aws-sdk/credential-provider-process': 3.723.0
+ '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))
+ '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/types': 3.723.0
+ '@smithy/credential-provider-imds': 4.0.6
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-node@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.723.0
+ '@aws-sdk/credential-provider-http': 3.723.0
+ '@aws-sdk/credential-provider-ini': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/credential-provider-process': 3.723.0
+ '@aws-sdk/credential-provider-sso': 3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))
+ '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/types': 3.723.0
+ '@smithy/credential-provider-imds': 4.0.6
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - '@aws-sdk/client-sts'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-process@3.723.0':
+ dependencies:
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.726.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))':
+ dependencies:
+ '@aws-sdk/client-sso': 3.726.0
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/token-providers': 3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))
+ '@aws-sdk/types': 3.723.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-web-identity@3.723.0(@aws-sdk/client-sts@3.726.1)':
+ dependencies:
+ '@aws-sdk/client-sts': 3.726.1
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-bucket-endpoint@3.726.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-arn-parser': 3.723.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ '@smithy/util-config-provider': 4.0.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-expect-continue@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-flexible-checksums@3.723.0':
+ dependencies:
+ '@aws-crypto/crc32': 5.2.0
+ '@aws-crypto/crc32c': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/is-array-buffer': 4.0.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-stream': 4.2.3
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-host-header@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-location-constraint@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-logger@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-recursion-detection@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-sdk-s3@3.723.0':
+ dependencies:
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-arn-parser': 3.723.0
+ '@smithy/core': 3.7.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-config-provider': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-stream': 4.2.3
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-sdk-s3@3.846.0':
+ dependencies:
+ '@aws-sdk/core': 3.846.0
+ '@aws-sdk/types': 3.840.0
+ '@aws-sdk/util-arn-parser': 3.804.0
+ '@smithy/core': 3.7.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-config-provider': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-stream': 4.2.3
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-ssec@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-user-agent@3.726.0':
+ dependencies:
+ '@aws-sdk/core': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@aws-sdk/util-endpoints': 3.726.0
+ '@smithy/core': 3.7.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/region-config-resolver@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/types': 4.3.1
+ '@smithy/util-config-provider': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ tslib: 2.8.1
+
+ '@aws-sdk/s3-request-presigner@3.846.0':
+ dependencies:
+ '@aws-sdk/signature-v4-multi-region': 3.846.0
+ '@aws-sdk/types': 3.840.0
+ '@aws-sdk/util-format-url': 3.840.0
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/signature-v4-multi-region@3.723.0':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.723.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/signature-v4-multi-region@3.846.0':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.846.0
+ '@aws-sdk/types': 3.840.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.726.0(@aws-sdk/client-sts@3.726.1))':
+ dependencies:
+ '@aws-sdk/client-sso-oidc': 3.726.0(@aws-sdk/client-sts@3.726.1)
+ '@aws-sdk/types': 3.723.0
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/types@3.723.0':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/types@3.840.0':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-arn-parser@3.723.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-arn-parser@3.804.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-endpoints@3.726.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/types': 4.3.1
+ '@smithy/util-endpoints': 3.0.6
+ tslib: 2.8.1
+
+ '@aws-sdk/util-format-url@3.840.0':
+ dependencies:
+ '@aws-sdk/types': 3.840.0
+ '@smithy/querystring-builder': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-locate-window@3.804.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-browser@3.723.0':
+ dependencies:
+ '@aws-sdk/types': 3.723.0
+ '@smithy/types': 4.3.1
+ bowser: 2.11.0
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-node@3.726.0':
+ dependencies:
+ '@aws-sdk/middleware-user-agent': 3.726.0
+ '@aws-sdk/types': 3.723.0
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/xml-builder@3.723.0':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/xml-builder@3.821.0':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@dotenvx/dotenvx@1.47.6':
+ dependencies:
+ commander: 11.1.0
+ dotenv: 16.6.1
+ eciesjs: 0.4.15
+ execa: 5.1.1
+ fdir: 6.4.6(picomatch@4.0.3)
+ ignore: 5.3.2
+ object-treeify: 1.1.33
+ picomatch: 4.0.3
+ which: 4.0.0
+
+ '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)':
+ dependencies:
+ '@noble/ciphers': 1.3.0
+
+ '@emnapi/runtime@1.4.4':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.25.6':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/android-arm@0.25.6':
+ optional: true
+
+ '@esbuild/android-x64@0.25.6':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.6':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.6':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.6':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.6':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.6':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.6':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.6':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.6':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.6':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.6':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.6':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.6':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.6':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.6':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.6':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.6':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))':
+ dependencies:
+ eslint: 9.31.0(jiti@2.4.2)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/compat@1.3.1(eslint@9.31.0(jiti@2.4.2))':
+ optionalDependencies:
+ eslint: 9.31.0(jiti@2.4.2)
+
+ '@eslint/config-array@0.21.0':
+ dependencies:
+ '@eslint/object-schema': 2.1.6
+ debug: 4.4.1(supports-color@5.5.0)
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.3.0': {}
+
+ '@eslint/core@0.15.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.1(supports-color@5.5.0)
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.31.0': {}
+
+ '@eslint/object-schema@2.1.6': {}
+
+ '@eslint/plugin-kit@0.3.3':
+ dependencies:
+ '@eslint/core': 0.15.1
+ levn: 0.4.1
+
+ '@fastify/accept-negotiator@2.0.1': {}
+
+ '@fastify/ajv-compiler@4.0.2':
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ fast-uri: 3.0.6
+
+ '@fastify/busboy@3.1.1': {}
+
+ '@fastify/cookie@11.0.2':
+ dependencies:
+ cookie: 1.0.2
+ fastify-plugin: 5.0.1
+
+ '@fastify/deepmerge@2.0.2': {}
+
+ '@fastify/error@4.2.0': {}
+
+ '@fastify/fast-json-stringify-compiler@5.0.3':
+ dependencies:
+ fast-json-stringify: 6.0.1
+
+ '@fastify/flash@6.0.3':
+ dependencies:
+ fastify-plugin: 5.0.1
+
+ '@fastify/formbody@8.0.2':
+ dependencies:
+ fast-querystring: 1.1.2
+ fastify-plugin: 5.0.1
+
+ '@fastify/forwarded@3.0.0': {}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ dependencies:
+ dequal: 2.0.3
+
+ '@fastify/multipart@9.0.3':
+ dependencies:
+ '@fastify/busboy': 3.1.1
+ '@fastify/deepmerge': 2.0.2
+ '@fastify/error': 4.2.0
+ fastify-plugin: 5.0.1
+ secure-json-parse: 3.0.2
+
+ '@fastify/oauth2@8.1.2':
+ dependencies:
+ '@fastify/cookie': 11.0.2
+ fastify-plugin: 5.0.1
+ simple-oauth2: 5.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@fastify/proxy-addr@5.0.0':
+ dependencies:
+ '@fastify/forwarded': 3.0.0
+ ipaddr.js: 2.2.0
+
+ '@fastify/secure-session@8.2.0':
+ dependencies:
+ '@fastify/cookie': 11.0.2
+ fastify-plugin: 5.0.1
+ sodium-native: 4.3.3
+
+ '@fastify/send@4.1.0':
+ dependencies:
+ '@lukeed/ms': 2.0.2
+ escape-html: 1.0.3
+ fast-decode-uri-component: 1.0.1
+ http-errors: 2.0.0
+ mime: 3.0.0
+
+ '@fastify/static@8.2.0':
+ dependencies:
+ '@fastify/accept-negotiator': 2.0.1
+ '@fastify/send': 4.1.0
+ content-disposition: 0.5.4
+ fastify-plugin: 5.0.1
+ fastq: 1.19.1
+ glob: 11.0.3
+
+ '@fastify/swagger-ui@5.2.3':
+ dependencies:
+ '@fastify/static': 8.2.0
+ fastify-plugin: 5.0.1
+ openapi-types: 12.1.3
+ rfdc: 1.4.1
+ yaml: 2.8.0
+
+ '@fastify/swagger@9.5.1':
+ dependencies:
+ fastify-plugin: 5.0.1
+ json-schema-resolver: 3.0.0
+ openapi-types: 12.1.3
+ rfdc: 1.4.1
+ yaml: 2.8.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@fastify/view@11.1.0':
+ dependencies:
+ fastify-plugin: 5.0.1
+ toad-cache: 3.7.0
+
+ '@graphile/logger@0.2.0': {}
+
+ '@hapi/boom@10.0.1':
+ dependencies:
+ '@hapi/hoek': 11.0.7
+
+ '@hapi/bourne@3.0.0': {}
+
+ '@hapi/hoek@11.0.7': {}
+
+ '@hapi/hoek@9.3.0': {}
+
+ '@hapi/topo@5.1.0':
+ dependencies:
+ '@hapi/hoek': 9.3.0
+
+ '@hapi/wreck@18.1.0':
+ dependencies:
+ '@hapi/boom': 10.0.1
+ '@hapi/bourne': 3.0.0
+ '@hapi/hoek': 11.0.7
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@img/sharp-darwin-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.0
+ optional: true
+
+ '@img/sharp-darwin-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.0
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.0':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.0
+ optional: true
+
+ '@img/sharp-linux-arm@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.0
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.0
+ optional: true
+
+ '@img/sharp-linux-s390x@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.0
+ optional: true
+
+ '@img/sharp-linux-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.0
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.0
+ optional: true
+
+ '@img/sharp-wasm32@0.34.3':
+ dependencies:
+ '@emnapi/runtime': 1.4.4
+ optional: true
+
+ '@img/sharp-win32-arm64@0.34.3':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.34.3':
+ optional: true
+
+ '@img/sharp-win32-x64@0.34.3':
+ optional: true
+
+ '@imgly/background-removal-node@1.4.5':
+ dependencies:
+ '@types/lodash': 4.14.202
+ '@types/ndarray': 1.0.14
+ '@types/node': 20.3.3
+ lodash: 4.17.21
+ ndarray: 1.0.19
+ onnxruntime-node: 1.17.3
+ sharp: 0.32.6
+ zod: 3.21.4
+ transitivePeerDependencies:
+ - bare-buffer
+
+ '@imqueue/pg-pubsub@1.10.0':
+ dependencies:
+ '@types/node': 22.16.4
+ '@types/pg': 8.15.4
+ '@types/pg-format': 1.0.5
+ farmhash: 4.0.2
+ pg: 8.16.3
+ pg-format: 1.0.4
+ uuid: 11.1.0
+ transitivePeerDependencies:
+ - pg-native
+
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@isaacs/fs-minipass@4.0.1':
+ dependencies:
+ minipass: 7.1.2
+
+ '@jridgewell/gen-mapping@0.3.12':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.4
+ '@jridgewell/trace-mapping': 0.3.29
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.4': {}
+
+ '@jridgewell/trace-mapping@0.3.29':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.4
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.4
+
+ '@keyv/postgres@1.4.11':
+ dependencies:
+ pg: 8.11.5
+ transitivePeerDependencies:
+ - pg-native
+
+ '@keyv/serialize@1.0.3':
+ dependencies:
+ buffer: 6.0.3
+
+ '@lukeed/ms@2.0.2': {}
+
+ '@noble/ciphers@1.3.0': {}
+
+ '@noble/curves@1.9.3':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@noble/hashes@1.8.0': {}
+
+ '@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.19.1
+
+ '@paralleldrive/cuid2@2.2.2':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3)':
+ optionalDependencies:
+ prisma: 6.8.2(typescript@5.8.3)
+ typescript: 5.8.3
+
+ '@prisma/config@6.8.2':
+ dependencies:
+ jiti: 2.4.2
+
+ '@prisma/debug@6.8.2': {}
+
+ '@prisma/engines-version@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': {}
+
+ '@prisma/engines@6.8.2':
+ dependencies:
+ '@prisma/debug': 6.8.2
+ '@prisma/engines-version': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e
+ '@prisma/fetch-engine': 6.8.2
+ '@prisma/get-platform': 6.8.2
+
+ '@prisma/extension-accelerate@1.3.0(@prisma/client@6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3))':
+ dependencies:
+ '@prisma/client': 6.8.2(prisma@6.8.2(typescript@5.8.3))(typescript@5.8.3)
+
+ '@prisma/fetch-engine@6.8.2':
+ dependencies:
+ '@prisma/debug': 6.8.2
+ '@prisma/engines-version': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e
+ '@prisma/get-platform': 6.8.2
+
+ '@prisma/get-platform@6.8.2':
+ dependencies:
+ '@prisma/debug': 6.8.2
+
+ '@rollup/rollup-android-arm-eabi@4.45.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.45.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.45.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.45.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.45.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.45.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.45.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.45.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.45.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.45.1':
+ optional: true
+
+ '@sideway/address@4.1.5':
+ dependencies:
+ '@hapi/hoek': 9.3.0
+
+ '@sideway/formula@3.0.1': {}
+
+ '@sideway/pinpoint@2.0.0': {}
+
+ '@smithy/abort-controller@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/chunked-blob-reader-native@4.0.0':
+ dependencies:
+ '@smithy/util-base64': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/chunked-blob-reader@5.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/config-resolver@4.1.4':
+ dependencies:
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/types': 4.3.1
+ '@smithy/util-config-provider': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ tslib: 2.8.1
+
+ '@smithy/core@3.7.0':
+ dependencies:
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-body-length-browser': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-stream': 4.2.3
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/credential-provider-imds@4.0.6':
+ dependencies:
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/property-provider': 4.0.4
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ tslib: 2.8.1
+
+ '@smithy/eventstream-codec@4.0.4':
+ dependencies:
+ '@aws-crypto/crc32': 5.2.0
+ '@smithy/types': 4.3.1
+ '@smithy/util-hex-encoding': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-browser@4.0.4':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-config-resolver@4.1.2':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-node@4.0.4':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-universal@4.0.4':
+ dependencies:
+ '@smithy/eventstream-codec': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/fetch-http-handler@5.1.0':
+ dependencies:
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/querystring-builder': 4.0.4
+ '@smithy/types': 4.3.1
+ '@smithy/util-base64': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/hash-blob-browser@4.0.4':
+ dependencies:
+ '@smithy/chunked-blob-reader': 5.0.0
+ '@smithy/chunked-blob-reader-native': 4.0.0
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/hash-node@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ '@smithy/util-buffer-from': 4.0.0
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/hash-stream-node@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/invalid-dependency@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@2.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/md5-js@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-content-length@4.0.4':
+ dependencies:
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-endpoint@4.1.15':
+ dependencies:
+ '@smithy/core': 3.7.0
+ '@smithy/middleware-serde': 4.0.8
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ '@smithy/url-parser': 4.0.4
+ '@smithy/util-middleware': 4.0.4
+ tslib: 2.8.1
+
+ '@smithy/middleware-retry@4.1.16':
+ dependencies:
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/service-error-classification': 4.0.6
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-retry': 4.0.6
+ tslib: 2.8.1
+ uuid: 9.0.1
+
+ '@smithy/middleware-serde@4.0.8':
+ dependencies:
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-stack@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/node-config-provider@4.1.3':
+ dependencies:
+ '@smithy/property-provider': 4.0.4
+ '@smithy/shared-ini-file-loader': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/node-http-handler@4.1.0':
+ dependencies:
+ '@smithy/abort-controller': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/querystring-builder': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/property-provider@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/protocol-http@5.1.2':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/querystring-builder@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ '@smithy/util-uri-escape': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/querystring-parser@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/service-error-classification@4.0.6':
+ dependencies:
+ '@smithy/types': 4.3.1
+
+ '@smithy/shared-ini-file-loader@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/signature-v4@5.1.2':
+ dependencies:
+ '@smithy/is-array-buffer': 4.0.0
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ '@smithy/util-hex-encoding': 4.0.0
+ '@smithy/util-middleware': 4.0.4
+ '@smithy/util-uri-escape': 4.0.0
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/smithy-client@4.4.7':
+ dependencies:
+ '@smithy/core': 3.7.0
+ '@smithy/middleware-endpoint': 4.1.15
+ '@smithy/middleware-stack': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/types': 4.3.1
+ '@smithy/util-stream': 4.2.3
+ tslib: 2.8.1
+
+ '@smithy/types@4.3.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/url-parser@4.0.4':
+ dependencies:
+ '@smithy/querystring-parser': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/util-base64@4.0.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.0.0
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-browser@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-node@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@2.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@4.0.0':
+ dependencies:
+ '@smithy/is-array-buffer': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/util-config-provider@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-browser@4.0.23':
+ dependencies:
+ '@smithy/property-provider': 4.0.4
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ bowser: 2.11.0
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-node@4.0.23':
+ dependencies:
+ '@smithy/config-resolver': 4.1.4
+ '@smithy/credential-provider-imds': 4.0.6
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/property-provider': 4.0.4
+ '@smithy/smithy-client': 4.4.7
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/util-endpoints@3.0.6':
+ dependencies:
+ '@smithy/node-config-provider': 4.1.3
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/util-hex-encoding@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-middleware@4.0.4':
+ dependencies:
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/util-retry@4.0.6':
+ dependencies:
+ '@smithy/service-error-classification': 4.0.6
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/util-stream@4.2.3':
+ dependencies:
+ '@smithy/fetch-http-handler': 5.1.0
+ '@smithy/node-http-handler': 4.1.0
+ '@smithy/types': 4.3.1
+ '@smithy/util-base64': 4.0.0
+ '@smithy/util-buffer-from': 4.0.0
+ '@smithy/util-hex-encoding': 4.0.0
+ '@smithy/util-utf8': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/util-uri-escape@4.0.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@2.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@4.0.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.0.0
+ tslib: 2.8.1
+
+ '@smithy/util-waiter@4.0.6':
+ dependencies:
+ '@smithy/abort-controller': 4.0.4
+ '@smithy/types': 4.3.1
+ tslib: 2.8.1
+
+ '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)':
+ dependencies:
+ acorn: 8.15.0
+ optional: true
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/chai@5.2.2':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/interpret@1.1.3':
+ dependencies:
+ '@types/node': 22.16.4
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/lodash@4.14.202': {}
+
+ '@types/ms@2.1.0': {}
+
+ '@types/ndarray@1.0.14': {}
+
+ '@types/node-fetch@2.6.12':
+ dependencies:
+ '@types/node': 22.16.4
+ form-data: 4.0.4
+
+ '@types/node@20.3.3': {}
+
+ '@types/node@22.16.4':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/pg-format@1.0.5': {}
+
+ '@types/pg@8.15.4':
+ dependencies:
+ '@types/node': 22.16.4
+ pg-protocol: 1.10.3
+ pg-types: 2.2.0
+
+ '@types/semver@7.7.0': {}
+
+ '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/scope-manager': 8.37.0
+ '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.37.0
+ eslint: 9.31.0(jiti@2.4.2)
+ graphemer: 1.4.0
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.37.0
+ '@typescript-eslint/types': 8.37.0
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.37.0
+ debug: 4.4.1(supports-color@5.5.0)
+ eslint: 9.31.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.37.0
+ debug: 4.4.1(supports-color@5.5.0)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.37.0':
+ dependencies:
+ '@typescript-eslint/types': 8.37.0
+ '@typescript-eslint/visitor-keys': 8.37.0
+
+ '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)':
+ dependencies:
+ typescript: 5.8.3
+
+ '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.37.0
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ debug: 4.4.1(supports-color@5.5.0)
+ eslint: 9.31.0(jiti@2.4.2)
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.37.0': {}
+
+ '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.37.0
+ '@typescript-eslint/visitor-keys': 8.37.0
+ debug: 4.4.1(supports-color@5.5.0)
+ fast-glob: 3.3.3
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.7.2
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2))
+ '@typescript-eslint/scope-manager': 8.37.0
+ '@typescript-eslint/types': 8.37.0
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
+ eslint: 9.31.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.37.0':
+ dependencies:
+ '@typescript-eslint/types': 8.37.0
+ eslint-visitor-keys: 4.2.1
+
+ '@vitest/expect@3.2.4':
+ dependencies:
+ '@types/chai': 5.2.2
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.2.1
+ tinyrainbow: 2.0.0
+
+ '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))':
+ dependencies:
+ '@vitest/spy': 3.2.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.17
+ optionalDependencies:
+ vite: 6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+
+ '@vitest/pretty-format@3.2.4':
+ dependencies:
+ tinyrainbow: 2.0.0
+
+ '@vitest/runner@3.2.4':
+ dependencies:
+ '@vitest/utils': 3.2.4
+ pathe: 2.0.3
+ strip-literal: 3.0.0
+
+ '@vitest/snapshot@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ magic-string: 0.30.17
+ pathe: 2.0.3
+
+ '@vitest/spy@3.2.4':
+ dependencies:
+ tinyspy: 4.0.3
+
+ '@vitest/utils@3.2.4':
+ dependencies:
+ '@vitest/pretty-format': 3.2.4
+ loupe: 3.1.4
+ tinyrainbow: 2.0.0
+
+ abstract-logging@2.0.1: {}
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ adm-zip@0.5.16: {}
+
+ ajv-formats@3.0.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv@6.12.6:
+ 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.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.6
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-regex@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@4.1.3: {}
+
+ argparse@2.0.1: {}
+
+ aria-query@5.3.2:
+ optional: true
+
+ assertion-error@2.0.1: {}
+
+ asynckit@0.4.0: {}
+
+ atomic-sleep@1.0.0: {}
+
+ avvio@9.1.0:
+ dependencies:
+ '@fastify/error': 4.2.0
+ fastq: 1.19.1
+
+ axobject-query@4.1.0:
+ optional: true
+
+ b4a@1.6.7: {}
+
+ balanced-match@1.0.2: {}
+
+ bare-addon-resolve@1.9.4(bare-url@2.1.6):
+ dependencies:
+ bare-module-resolve: 1.11.1(bare-url@2.1.6)
+ bare-semver: 1.0.1
+ optionalDependencies:
+ bare-url: 2.1.6
+
+ bare-events@2.6.0:
+ optional: true
+
+ bare-fs@4.1.6:
+ dependencies:
+ bare-events: 2.6.0
+ bare-path: 3.0.0
+ bare-stream: 2.6.5(bare-events@2.6.0)
+ optional: true
+
+ bare-module-resolve@1.11.1(bare-url@2.1.6):
+ dependencies:
+ bare-semver: 1.0.1
+ optionalDependencies:
+ bare-url: 2.1.6
+
+ bare-os@3.6.1: {}
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.6.1
+
+ bare-semver@1.0.1: {}
+
+ bare-stream@2.6.5(bare-events@2.6.0):
+ dependencies:
+ streamx: 2.22.1
+ optionalDependencies:
+ bare-events: 2.6.0
+ optional: true
+
+ bare-url@2.1.6:
+ dependencies:
+ bare-path: 3.0.0
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ boolean@3.2.0: {}
+
+ bowser@2.11.0: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bundle-require@5.1.0(esbuild@0.25.6):
+ dependencies:
+ esbuild: 0.25.6
+ load-tsconfig: 0.2.5
+
+ cac@6.7.14: {}
+
+ cache-manager@7.0.1:
+ dependencies:
+ keyv: 5.3.4
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ callsites@3.1.0: {}
+
+ camelcase@5.3.1: {}
+
+ canvas-renderer@2.2.1:
+ dependencies:
+ '@types/node': 22.16.4
+
+ chai@5.2.1:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.4
+ pathval: 2.0.1
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ check-error@2.1.1: {}
+
+ chokidar-cli@3.0.0:
+ dependencies:
+ chokidar: 3.6.0
+ lodash.debounce: 4.0.8
+ lodash.throttle: 4.1.1
+ yargs: 13.3.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ chownr@1.1.4: {}
+
+ chownr@3.0.0: {}
+
+ cliui@5.0.0:
+ dependencies:
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+ wrap-ansi: 5.1.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clsx@2.1.1:
+ optional: true
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@11.1.0: {}
+
+ commander@4.1.1: {}
+
+ concat-map@0.0.1: {}
+
+ concurrently@9.2.0:
+ dependencies:
+ chalk: 4.1.2
+ lodash: 4.17.21
+ rxjs: 7.8.2
+ shell-quote: 1.8.3
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+
+ confbox@0.1.8: {}
+
+ consola@3.4.2: {}
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ cookie@1.0.2: {}
+
+ cosmiconfig@8.3.6(typescript@5.8.3):
+ dependencies:
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 5.8.3
+
+ create-require@1.1.1: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ cssesc@3.0.0: {}
+
+ data-uri-to-buffer@4.0.1: {}
+
+ date-fns@4.1.0: {}
+
+ debug@4.4.1(supports-color@5.5.0):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 5.5.0
+
+ decamelize@1.2.0: {}
+
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ deep-eql@5.0.2: {}
+
+ deep-extend@0.6.0: {}
+
+ deep-is@0.1.4: {}
+
+ 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
+
+ delayed-stream@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ dequal@2.0.3: {}
+
+ detect-libc@2.0.4: {}
+
+ detect-node@2.1.0: {}
+
+ diff@4.0.2: {}
+
+ dotenv@16.6.1: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ eastasianwidth@0.2.0: {}
+
+ eciesjs@0.4.15:
+ dependencies:
+ '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0)
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.3
+ '@noble/hashes': 1.8.0
+
+ emoji-regex@7.0.3: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
+ 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.2
+
+ es6-error@4.1.1: {}
+
+ esbuild@0.25.6:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.6
+ '@esbuild/android-arm': 0.25.6
+ '@esbuild/android-arm64': 0.25.6
+ '@esbuild/android-x64': 0.25.6
+ '@esbuild/darwin-arm64': 0.25.6
+ '@esbuild/darwin-x64': 0.25.6
+ '@esbuild/freebsd-arm64': 0.25.6
+ '@esbuild/freebsd-x64': 0.25.6
+ '@esbuild/linux-arm': 0.25.6
+ '@esbuild/linux-arm64': 0.25.6
+ '@esbuild/linux-ia32': 0.25.6
+ '@esbuild/linux-loong64': 0.25.6
+ '@esbuild/linux-mips64el': 0.25.6
+ '@esbuild/linux-ppc64': 0.25.6
+ '@esbuild/linux-riscv64': 0.25.6
+ '@esbuild/linux-s390x': 0.25.6
+ '@esbuild/linux-x64': 0.25.6
+ '@esbuild/netbsd-arm64': 0.25.6
+ '@esbuild/netbsd-x64': 0.25.6
+ '@esbuild/openbsd-arm64': 0.25.6
+ '@esbuild/openbsd-x64': 0.25.6
+ '@esbuild/openharmony-arm64': 0.25.6
+ '@esbuild/sunos-x64': 0.25.6
+ '@esbuild/win32-arm64': 0.25.6
+ '@esbuild/win32-ia32': 0.25.6
+ '@esbuild/win32-x64': 0.25.6
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ eslint-plugin-svelte@3.11.0(eslint@9.31.0(jiti@2.4.2))(svelte@5.36.5)(ts-node@10.9.2(@types/node@22.16.4)(typescript@5.8.3)):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2))
+ '@jridgewell/sourcemap-codec': 1.5.4
+ eslint: 9.31.0(jiti@2.4.2)
+ esutils: 2.0.3
+ globals: 16.3.0
+ known-css-properties: 0.37.0
+ postcss: 8.5.6
+ postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.16.4)(typescript@5.8.3))
+ postcss-safe-parser: 7.0.1(postcss@8.5.6)
+ semver: 7.7.2
+ svelte-eslint-parser: 1.3.0(svelte@5.36.5)
+ optionalDependencies:
+ svelte: 5.36.5
+ transitivePeerDependencies:
+ - ts-node
+
+ 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@9.31.0(jiti@2.4.2):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.21.0
+ '@eslint/config-helpers': 0.3.0
+ '@eslint/core': 0.15.1
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.31.0
+ '@eslint/plugin-kit': 0.3.3
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.1(supports-color@5.5.0)
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.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.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ esm-env@1.2.2:
+ optional: true
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrap@2.1.0:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.4
+ optional: true
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ esutils@2.0.3: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ expand-template@2.0.3: {}
+
+ expect-type@1.2.2: {}
+
+ farmhash@4.0.2:
+ dependencies:
+ node-addon-api: 8.5.0
+ prebuild-install: 7.1.3
+
+ fast-decode-uri-component@1.0.1: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.3:
+ 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-json-stringify@6.0.1:
+ dependencies:
+ '@fastify/merge-json-schemas': 0.2.1
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ fast-uri: 3.0.6
+ json-schema-ref-resolver: 2.0.1
+ rfdc: 1.4.1
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-querystring@1.1.2:
+ dependencies:
+ fast-decode-uri-component: 1.0.1
+
+ fast-redact@3.5.0: {}
+
+ fast-uri@3.0.6: {}
+
+ fast-xml-parser@4.4.1:
+ dependencies:
+ strnum: 1.1.2
+
+ fast-xml-parser@5.2.5:
+ dependencies:
+ strnum: 2.1.1
+
+ fastify-plugin@4.5.1: {}
+
+ fastify-plugin@5.0.1: {}
+
+ fastify-sse-v2@4.2.1(fastify@5.4.0):
+ dependencies:
+ fastify: 5.4.0
+ fastify-plugin: 4.5.1
+ it-pushable: 1.4.2
+ it-to-stream: 1.0.0
+
+ fastify@5.4.0:
+ dependencies:
+ '@fastify/ajv-compiler': 4.0.2
+ '@fastify/error': 4.2.0
+ '@fastify/fast-json-stringify-compiler': 5.0.3
+ '@fastify/proxy-addr': 5.0.0
+ abstract-logging: 2.0.1
+ avvio: 9.1.0
+ fast-json-stringify: 6.0.1
+ find-my-way: 9.3.0
+ light-my-request: 6.6.0
+ pino: 9.7.0
+ process-warning: 5.0.0
+ rfdc: 1.4.1
+ secure-json-parse: 4.0.0
+ semver: 7.7.2
+ toad-cache: 3.7.0
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.4.6(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-my-way@9.3.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-querystring: 1.1.2
+ safe-regex2: 5.0.0
+
+ find-up@3.0.0:
+ dependencies:
+ locate-path: 3.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ fix-dts-default-cjs-exports@1.0.1:
+ dependencies:
+ magic-string: 0.30.17
+ mlly: 1.7.4
+ rollup: 4.45.1
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ form-data@4.0.4:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ fs-constants@1.0.0: {}
+
+ fs-extra@11.3.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.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.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
+
+ get-iterator@1.0.2: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@6.0.1: {}
+
+ get-tsconfig@4.10.1:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ github-from-package@0.0.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@11.0.3:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 4.1.1
+ minimatch: 10.0.3
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 2.0.0
+
+ global-agent@3.0.0:
+ dependencies:
+ boolean: 3.2.0
+ es6-error: 4.1.1
+ matcher: 3.0.0
+ roarr: 2.15.4
+ semver: 7.7.2
+ serialize-error: 7.0.1
+
+ globals@14.0.0: {}
+
+ globals@16.3.0: {}
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ graphile-config@0.0.1-beta.17:
+ dependencies:
+ '@types/interpret': 1.1.3
+ '@types/node': 22.16.4
+ '@types/semver': 7.7.0
+ chalk: 4.1.2
+ debug: 4.4.1(supports-color@5.5.0)
+ interpret: 3.1.1
+ semver: 7.7.2
+ tslib: 2.8.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ graphile-worker@0.16.6(typescript@5.8.3):
+ dependencies:
+ '@graphile/logger': 0.2.0
+ '@types/debug': 4.1.12
+ '@types/pg': 8.15.4
+ cosmiconfig: 8.3.6(typescript@5.8.3)
+ graphile-config: 0.0.1-beta.17
+ json5: 2.2.3
+ pg: 8.16.3
+ tslib: 2.8.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - pg-native
+ - supports-color
+ - typescript
+
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ human-signals@2.1.0: {}
+
+ ieee754@1.2.1: {}
+
+ ignore-by-default@1.0.1: {}
+
+ 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: {}
+
+ ini@1.3.8: {}
+
+ interpret@3.1.1: {}
+
+ iota-array@1.0.0: {}
+
+ ipaddr.js@2.2.0: {}
+
+ is-arrayish@0.2.1: {}
+
+ is-arrayish@0.3.2: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-buffer@1.1.6: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@2.0.0: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-reference@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ optional: true
+
+ is-stream@2.0.1: {}
+
+ isexe@2.0.0: {}
+
+ isexe@3.1.1: {}
+
+ it-pushable@1.4.2:
+ dependencies:
+ fast-fifo: 1.3.2
+
+ it-to-stream@1.0.0:
+ dependencies:
+ buffer: 6.0.3
+ fast-fifo: 1.3.2
+ get-iterator: 1.0.2
+ p-defer: 3.0.0
+ p-fifo: 1.0.0
+ readable-stream: 3.6.2
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jackspeak@4.1.1:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+
+ jdenticon@3.3.0:
+ dependencies:
+ canvas-renderer: 2.2.1
+
+ jiti@2.4.2: {}
+
+ joi@17.13.3:
+ dependencies:
+ '@hapi/hoek': 9.3.0
+ '@hapi/topo': 5.1.0
+ '@sideway/address': 4.1.5
+ '@sideway/formula': 3.0.1
+ '@sideway/pinpoint': 2.0.0
+
+ joycon@3.1.1: {}
+
+ js-tokens@4.0.0: {}
+
+ js-tokens@9.0.1: {}
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-ref-resolver@2.0.1:
+ dependencies:
+ dequal: 2.0.3
+
+ json-schema-resolver@3.0.0:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ fast-uri: 3.0.6
+ rfdc: 1.4.1
+ transitivePeerDependencies:
+ - supports-color
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json-stringify-safe@5.0.1: {}
+
+ json5@2.2.3: {}
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ keyv@5.3.4:
+ dependencies:
+ '@keyv/serialize': 1.0.3
+
+ known-css-properties@0.37.0: {}
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ light-my-request@6.6.0:
+ dependencies:
+ cookie: 1.0.2
+ process-warning: 4.0.1
+ set-cookie-parser: 2.7.1
+
+ lilconfig@2.1.0: {}
+
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ load-tsconfig@0.2.5: {}
+
+ locate-character@3.0.0:
+ optional: true
+
+ locate-path@3.0.0:
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash-es@4.17.21: {}
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.sortby@4.7.0: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash@4.17.21: {}
+
+ loupe@3.1.4: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@11.1.0: {}
+
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.4
+
+ make-error@1.3.6: {}
+
+ matcher@3.0.0:
+ dependencies:
+ escape-string-regexp: 4.0.0
+
+ math-intrinsics@1.1.0: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ 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.1:
+ dependencies:
+ mime-db: 1.54.0
+
+ mime@3.0.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-response@3.1.0: {}
+
+ minimatch@10.0.3:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ minizlib@3.0.2:
+ dependencies:
+ minipass: 7.1.2
+
+ mkdirp-classic@0.5.3: {}
+
+ mkdirp@3.0.1: {}
+
+ mlly@1.7.4:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.1
+
+ ms@2.1.3: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nano-spawn@1.0.2: {}
+
+ nanoid@3.3.11: {}
+
+ nanoid@5.1.5: {}
+
+ napi-build-utils@2.0.0: {}
+
+ natural-compare@1.4.0: {}
+
+ ndarray@1.0.19:
+ dependencies:
+ iota-array: 1.0.0
+ is-buffer: 1.1.6
+
+ neo-async@2.6.2: {}
+
+ node-abi@3.75.0:
+ dependencies:
+ semver: 7.7.2
+
+ node-addon-api@6.1.0: {}
+
+ node-addon-api@8.5.0: {}
+
+ node-domexception@1.0.0: {}
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ nodemon@3.1.10:
+ dependencies:
+ chokidar: 3.6.0
+ debug: 4.4.1(supports-color@5.5.0)
+ ignore-by-default: 1.0.1
+ minimatch: 3.1.2
+ pstree.remy: 1.1.8
+ semver: 7.7.2
+ simple-update-notifier: 2.0.0
+ supports-color: 5.5.0
+ touch: 3.1.1
+ undefsafe: 2.0.5
+
+ normalize-path@3.0.0: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ object-assign@4.1.1: {}
+
+ object-keys@1.1.1: {}
+
+ object-treeify@1.1.33: {}
+
+ on-exit-leak-free@2.1.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onnxruntime-common@1.17.3: {}
+
+ onnxruntime-common@1.22.0: {}
+
+ onnxruntime-node@1.17.3:
+ dependencies:
+ onnxruntime-common: 1.17.3
+ tar: 7.4.3
+
+ onnxruntime-node@1.22.0-rev:
+ dependencies:
+ adm-zip: 0.5.16
+ global-agent: 3.0.0
+ onnxruntime-common: 1.22.0
+
+ openapi-types@12.1.3: {}
+
+ 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
+
+ p-defer@3.0.0: {}
+
+ p-fifo@1.0.0:
+ dependencies:
+ fast-fifo: 1.3.2
+ p-defer: 3.0.0
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@3.0.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ path-exists@3.0.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-scurry@2.0.0:
+ dependencies:
+ lru-cache: 11.1.0
+ minipass: 7.1.2
+
+ path-type@4.0.0: {}
+
+ pathe@2.0.3: {}
+
+ pathval@2.0.1: {}
+
+ pg-cloudflare@1.2.7:
+ optional: true
+
+ pg-connection-string@2.9.1: {}
+
+ pg-format@1.0.4: {}
+
+ pg-int8@1.0.1: {}
+
+ pg-pool@3.10.1(pg@8.11.5):
+ dependencies:
+ pg: 8.11.5
+
+ pg-pool@3.10.1(pg@8.16.3):
+ dependencies:
+ pg: 8.16.3
+
+ pg-protocol@1.10.3: {}
+
+ pg-types@2.2.0:
+ dependencies:
+ pg-int8: 1.0.1
+ postgres-array: 2.0.0
+ postgres-bytea: 1.0.0
+ postgres-date: 1.0.7
+ postgres-interval: 1.2.0
+
+ pg@8.11.5:
+ dependencies:
+ pg-connection-string: 2.9.1
+ pg-pool: 3.10.1(pg@8.11.5)
+ pg-protocol: 1.10.3
+ pg-types: 2.2.0
+ pgpass: 1.0.5
+ optionalDependencies:
+ pg-cloudflare: 1.2.7
+
+ pg@8.16.3:
+ dependencies:
+ pg-connection-string: 2.9.1
+ pg-pool: 3.10.1(pg@8.16.3)
+ pg-protocol: 1.10.3
+ pg-types: 2.2.0
+ pgpass: 1.0.5
+ optionalDependencies:
+ pg-cloudflare: 1.2.7
+
+ pgpass@1.0.5:
+ dependencies:
+ split2: 4.2.0
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pino-abstract-transport@2.0.0:
+ dependencies:
+ split2: 4.2.0
+
+ pino-std-serializers@7.0.0: {}
+
+ pino@9.7.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.5.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 2.0.0
+ pino-std-serializers: 7.0.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.0
+ thread-stream: 3.1.0
+
+ pirates@4.0.7: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.7.4
+ pathe: 2.0.3
+
+ postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.16.4)(typescript@5.8.3)):
+ dependencies:
+ lilconfig: 2.1.0
+ yaml: 1.10.2
+ optionalDependencies:
+ postcss: 8.5.6
+ ts-node: 10.9.2(@types/node@22.16.4)(typescript@5.8.3)
+
+ postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0):
+ dependencies:
+ lilconfig: 3.1.3
+ optionalDependencies:
+ jiti: 2.4.2
+ postcss: 8.5.6
+ tsx: 4.20.3
+ yaml: 2.8.0
+
+ postcss-safe-parser@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-scss@4.0.9(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-selector-parser@7.1.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ postgres-array@2.0.0: {}
+
+ postgres-bytea@1.0.0: {}
+
+ postgres-date@1.0.7: {}
+
+ postgres-interval@1.2.0:
+ dependencies:
+ xtend: 4.0.2
+
+ prebuild-install@7.1.3:
+ dependencies:
+ detect-libc: 2.0.4
+ expand-template: 2.0.3
+ github-from-package: 0.0.0
+ minimist: 1.2.8
+ mkdirp-classic: 0.5.3
+ napi-build-utils: 2.0.0
+ node-abi: 3.75.0
+ pump: 3.0.3
+ rc: 1.2.8
+ simple-get: 4.0.1
+ tar-fs: 2.1.3
+ tunnel-agent: 0.6.0
+
+ prelude-ls@1.2.1: {}
+
+ prisma@6.8.2(typescript@5.8.3):
+ dependencies:
+ '@prisma/config': 6.8.2
+ '@prisma/engines': 6.8.2
+ optionalDependencies:
+ typescript: 5.8.3
+
+ process-warning@4.0.1: {}
+
+ process-warning@5.0.0: {}
+
+ pstree.remy@1.1.8: {}
+
+ pump@3.0.3:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ punycode@2.3.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ quick-format-unescaped@4.0.4: {}
+
+ rate-limiter-flexible@7.1.1: {}
+
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ readdirp@4.1.2: {}
+
+ real-require@0.2.0: {}
+
+ require-addon@1.1.0:
+ dependencies:
+ bare-addon-resolve: 1.9.4(bare-url@2.1.6)
+ bare-url: 2.1.6
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ require-main-filename@2.0.0: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ ret@0.5.0: {}
+
+ reusify@1.1.0: {}
+
+ rfdc@1.4.1: {}
+
+ rimraf@6.0.1:
+ dependencies:
+ glob: 11.0.3
+ package-json-from-dist: 1.0.1
+
+ roarr@2.15.4:
+ dependencies:
+ boolean: 3.2.0
+ detect-node: 2.1.0
+ globalthis: 1.0.4
+ json-stringify-safe: 5.0.1
+ semver-compare: 1.0.0
+ sprintf-js: 1.1.3
+
+ rollup@4.45.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.45.1
+ '@rollup/rollup-android-arm64': 4.45.1
+ '@rollup/rollup-darwin-arm64': 4.45.1
+ '@rollup/rollup-darwin-x64': 4.45.1
+ '@rollup/rollup-freebsd-arm64': 4.45.1
+ '@rollup/rollup-freebsd-x64': 4.45.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.45.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.45.1
+ '@rollup/rollup-linux-arm64-gnu': 4.45.1
+ '@rollup/rollup-linux-arm64-musl': 4.45.1
+ '@rollup/rollup-linux-loongarch64-gnu': 4.45.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.45.1
+ '@rollup/rollup-linux-riscv64-musl': 4.45.1
+ '@rollup/rollup-linux-s390x-gnu': 4.45.1
+ '@rollup/rollup-linux-x64-gnu': 4.45.1
+ '@rollup/rollup-linux-x64-musl': 4.45.1
+ '@rollup/rollup-win32-arm64-msvc': 4.45.1
+ '@rollup/rollup-win32-ia32-msvc': 4.45.1
+ '@rollup/rollup-win32-x64-msvc': 4.45.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex2@5.0.0:
+ dependencies:
+ ret: 0.5.0
+
+ safe-stable-stringify@2.5.0: {}
+
+ secure-json-parse@3.0.2: {}
+
+ secure-json-parse@4.0.0: {}
+
+ semver-compare@1.0.0: {}
+
+ semver@7.7.2: {}
+
+ serialize-error@7.0.1:
+ dependencies:
+ type-fest: 0.13.1
+
+ set-blocking@2.0.0: {}
+
+ set-cookie-parser@2.7.1: {}
+
+ setprototypeof@1.2.0: {}
+
+ sharp@0.32.6:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.4
+ node-addon-api: 6.1.0
+ prebuild-install: 7.1.3
+ semver: 7.7.2
+ simple-get: 4.0.1
+ tar-fs: 3.1.0
+ tunnel-agent: 0.6.0
+ transitivePeerDependencies:
+ - bare-buffer
+
+ sharp@0.34.3:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.4
+ semver: 7.7.2
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.3
+ '@img/sharp-darwin-x64': 0.34.3
+ '@img/sharp-libvips-darwin-arm64': 1.2.0
+ '@img/sharp-libvips-darwin-x64': 1.2.0
+ '@img/sharp-libvips-linux-arm': 1.2.0
+ '@img/sharp-libvips-linux-arm64': 1.2.0
+ '@img/sharp-libvips-linux-ppc64': 1.2.0
+ '@img/sharp-libvips-linux-s390x': 1.2.0
+ '@img/sharp-libvips-linux-x64': 1.2.0
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.0
+ '@img/sharp-linux-arm': 0.34.3
+ '@img/sharp-linux-arm64': 0.34.3
+ '@img/sharp-linux-ppc64': 0.34.3
+ '@img/sharp-linux-s390x': 0.34.3
+ '@img/sharp-linux-x64': 0.34.3
+ '@img/sharp-linuxmusl-arm64': 0.34.3
+ '@img/sharp-linuxmusl-x64': 0.34.3
+ '@img/sharp-wasm32': 0.34.3
+ '@img/sharp-win32-arm64': 0.34.3
+ '@img/sharp-win32-ia32': 0.34.3
+ '@img/sharp-win32-x64': 0.34.3
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ siginfo@2.0.0: {}
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-concat@1.0.1: {}
+
+ simple-get@4.0.1:
+ dependencies:
+ decompress-response: 6.0.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+
+ simple-oauth2@5.1.0:
+ dependencies:
+ '@hapi/hoek': 11.0.7
+ '@hapi/wreck': 18.1.0
+ debug: 4.4.1(supports-color@5.5.0)
+ joi: 17.13.3
+ transitivePeerDependencies:
+ - supports-color
+
+ simple-swizzle@0.2.2:
+ dependencies:
+ is-arrayish: 0.3.2
+
+ simple-update-notifier@2.0.0:
+ dependencies:
+ semver: 7.7.2
+
+ slugify@1.6.6: {}
+
+ sodium-native@4.3.3:
+ dependencies:
+ require-addon: 1.1.0
+
+ sonic-boom@4.2.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+
+ source-map-js@1.2.1: {}
+
+ source-map@0.6.1: {}
+
+ source-map@0.8.0-beta.0:
+ dependencies:
+ whatwg-url: 7.1.0
+
+ split2@4.2.0: {}
+
+ sprintf-js@1.1.3: {}
+
+ stackback@0.0.2: {}
+
+ statuses@2.0.1: {}
+
+ std-env@3.9.0: {}
+
+ streamx@2.22.1:
+ dependencies:
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.3
+ optionalDependencies:
+ bare-events: 2.6.0
+
+ string-width@3.1.0:
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.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-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@5.2.0:
+ dependencies:
+ ansi-regex: 4.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-final-newline@2.0.0: {}
+
+ strip-json-comments@2.0.1: {}
+
+ strip-json-comments@3.1.1: {}
+
+ strip-literal@3.0.0:
+ dependencies:
+ js-tokens: 9.0.1
+
+ strnum@1.1.2: {}
+
+ strnum@2.1.1: {}
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.12
+ commander: 4.1.1
+ glob: 10.4.5
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ ts-interface-checker: 0.1.13
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ svelte-eslint-parser@1.3.0(svelte@5.36.5):
+ dependencies:
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ postcss: 8.5.6
+ postcss-scss: 4.0.9(postcss@8.5.6)
+ postcss-selector-parser: 7.1.0
+ optionalDependencies:
+ svelte: 5.36.5
+
+ svelte@5.36.5:
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@jridgewell/sourcemap-codec': 1.5.4
+ '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
+ '@types/estree': 1.0.8
+ acorn: 8.15.0
+ aria-query: 5.3.2
+ axobject-query: 4.1.0
+ clsx: 2.1.1
+ esm-env: 1.2.2
+ esrap: 2.1.0
+ is-reference: 3.0.3
+ locate-character: 3.0.0
+ magic-string: 0.30.17
+ zimmerframe: 1.1.2
+ optional: true
+
+ tar-fs@2.1.3:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.3
+ tar-stream: 2.2.0
+
+ tar-fs@3.1.0:
+ dependencies:
+ pump: 3.0.3
+ tar-stream: 3.1.7
+ optionalDependencies:
+ bare-fs: 4.1.6
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-buffer
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.5
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ tar-stream@3.1.7:
+ dependencies:
+ b4a: 1.6.7
+ fast-fifo: 1.3.2
+ streamx: 2.22.1
+
+ tar@7.4.3:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.2
+ minizlib: 3.0.2
+ mkdirp: 3.0.1
+ yallist: 5.0.0
+
+ text-decoder@1.2.3:
+ dependencies:
+ b4a: 1.6.7
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ thread-stream@3.1.0:
+ dependencies:
+ real-require: 0.2.0
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
+ tinyglobby@0.2.14:
+ dependencies:
+ fdir: 6.4.6(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tinypool@1.1.1: {}
+
+ tinyrainbow@2.0.0: {}
+
+ tinyspy@4.0.3: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toad-cache@3.7.0: {}
+
+ toidentifier@1.0.1: {}
+
+ touch@3.1.1: {}
+
+ tr46@1.0.1:
+ dependencies:
+ punycode: 2.3.1
+
+ tree-kill@1.2.2: {}
+
+ ts-api-utils@2.1.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
+
+ ts-interface-checker@0.1.13: {}
+
+ ts-node@10.9.2(@types/node@22.16.4)(typescript@5.8.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.16.4
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.8.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
+ tslib@2.8.1: {}
+
+ tsup@8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0):
+ dependencies:
+ bundle-require: 5.1.0(esbuild@0.25.6)
+ cac: 6.7.14
+ chokidar: 4.0.3
+ consola: 3.4.2
+ debug: 4.4.1(supports-color@5.5.0)
+ esbuild: 0.25.6
+ fix-dts-default-cjs-exports: 1.0.1
+ joycon: 3.1.1
+ picocolors: 1.1.1
+ postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0)
+ resolve-from: 5.0.0
+ rollup: 4.45.1
+ source-map: 0.8.0-beta.0
+ sucrase: 3.35.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.14
+ tree-kill: 1.2.2
+ optionalDependencies:
+ postcss: 8.5.6
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - jiti
+ - supports-color
+ - tsx
+ - yaml
+
+ tsx@4.20.3:
+ dependencies:
+ esbuild: 0.25.6
+ get-tsconfig: 4.10.1
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-fest@0.13.1: {}
+
+ typescript-eslint@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint: 9.31.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ typescript@5.8.3: {}
+
+ ufo@1.6.1: {}
+
+ uglify-js@3.19.3:
+ optional: true
+
+ undefsafe@2.0.5: {}
+
+ undici-types@6.21.0: {}
+
+ universalify@2.0.1: {}
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ util-deprecate@1.0.2: {}
+
+ uuid@11.1.0: {}
+
+ uuid@9.0.1: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ vite-node@3.2.4(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.1(supports-color@5.5.0)
+ es-module-lexer: 1.7.0
+ pathe: 2.0.3
+ vite: 6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ vite@6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
+ dependencies:
+ esbuild: 0.25.6
+ fdir: 6.4.6(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.45.1
+ tinyglobby: 0.2.14
+ optionalDependencies:
+ '@types/node': 22.16.4
+ fsevents: 2.3.3
+ jiti: 2.4.2
+ tsx: 4.20.3
+ yaml: 2.8.0
+
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0):
+ dependencies:
+ '@types/chai': 5.2.2
+ '@vitest/expect': 3.2.4
+ '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0))
+ '@vitest/pretty-format': 3.2.4
+ '@vitest/runner': 3.2.4
+ '@vitest/snapshot': 3.2.4
+ '@vitest/spy': 3.2.4
+ '@vitest/utils': 3.2.4
+ chai: 5.2.1
+ debug: 4.4.1(supports-color@5.5.0)
+ expect-type: 1.2.2
+ magic-string: 0.30.17
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 3.9.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinyglobby: 0.2.14
+ tinypool: 1.1.1
+ tinyrainbow: 2.0.0
+ vite: 6.3.5(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+ vite-node: 3.2.4(@types/node@22.16.4)(jiti@2.4.2)(tsx@4.20.3)(yaml@2.8.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/debug': 4.1.12
+ '@types/node': 22.16.4
+ transitivePeerDependencies:
+ - jiti
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - yaml
+
+ web-streams-polyfill@3.3.3: {}
+
+ webidl-conversions@4.0.2: {}
+
+ whatwg-url@7.1.0:
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+
+ which-module@2.0.1: {}
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@4.0.0:
+ dependencies:
+ isexe: 3.1.1
+
+ which@5.0.0:
+ dependencies:
+ isexe: 3.1.1
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ wordwrap@1.0.0: {}
+
+ wrap-ansi@5.1.0:
+ dependencies:
+ ansi-styles: 3.2.1
+ string-width: 3.1.0
+ strip-ansi: 5.2.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ xtend@4.0.2: {}
+
+ y18n@4.0.3: {}
+
+ y18n@5.0.8: {}
+
+ yallist@5.0.0: {}
+
+ yaml@1.10.2: {}
+
+ yaml@2.8.0: {}
+
+ yargs-parser@13.1.2:
+ dependencies:
+ camelcase: 5.3.1
+ decamelize: 1.2.0
+
+ yargs-parser@21.1.1: {}
+
+ yargs@13.3.2:
+ dependencies:
+ cliui: 5.0.0
+ find-up: 3.0.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ require-main-filename: 2.0.0
+ set-blocking: 2.0.0
+ string-width: 3.1.0
+ which-module: 2.0.1
+ y18n: 4.0.3
+ yargs-parser: 13.1.2
+
+ 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
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
+
+ zimmerframe@1.1.2:
+ optional: true
+
+ zod@3.21.4: {}
+
+ zod@3.25.76: {}
diff --git a/services/our/src/config/env.ts b/services/our/src/config/env.ts
index 5fec3da..bb2d8f7 100644
--- a/services/our/src/config/env.ts
+++ b/services/our/src/config/env.ts
@@ -1,6 +1,10 @@
// ./config/env.ts
import { z } from 'zod';
-import '@dotenvx/dotenvx/config'
+import dotenvx from '@dotenvx/dotenvx'
+
+dotenvx.config({ path: ['../../.env.development'] })
+// if (process.env.NODE_ENV === 'development') {
+// }
const EnvSchema = z.object({
NODE_ENV: z.enum(['development', 'production', 'test']),
@@ -26,7 +30,7 @@ const EnvSchema = z.object({
});
const parsed = EnvSchema.safeParse(process.env);
-console.log(parsed)
+// console.log(parsed)
if (!parsed.success) {
console.error('❌ Invalid environment variables:', parsed.error.flatten().fieldErrors);
diff --git a/services/our/src/tasks/createFunscript.ts b/services/our/src/tasks/createFunscript.ts
index 4191c54..95da0f0 100644
--- a/services/our/src/tasks/createFunscript.ts
+++ b/services/our/src/tasks/createFunscript.ts
@@ -1,370 +1,28 @@
+
import type { Task, Helpers } from "graphile-worker";
import { PrismaClient } from "../../generated/prisma";
import { withAccelerate } from "@prisma/extension-accelerate";
import { getOrDownloadAsset } from "../utils/cache";
import { env } from "../config/env";
import { getS3Client, uploadFile } from "../utils/s3";
-import { nanoid } from "nanoid";
-import { existsSync } from "node:fs";
-import spawn from 'nano-spawn';
-import { join, basename, extname } from "node:path";
-import { readFile, writeFile, readdir } from 'node:fs/promises';
-import yaml from 'js-yaml';
-import { string } from "zod";
-
-const prisma = new PrismaClient().$extends(withAccelerate());
+import { buildFunscript } from '../utils/funscripts';
+import { vibeuiInference } from "../utils/vibeui";
+import { join } from "node:path";
interface Payload {
vodId: string;
}
-interface Detection {
- startFrame: number;
- endFrame: number;
- className: string;
-}
-
-interface DataYaml {
- path: string;
- train: string;
- val: string;
- names: Record;
-}
-
-interface FunscriptAction {
- at: number;
- pos: number;
-}
-
-interface Funscript {
- version: string;
- actions: FunscriptAction[];
-}
-interface ClassPositionMap {
- [className: string]: number | 'pattern';
-}
+const prisma = new PrismaClient().$extends(withAccelerate());
+
function assertPayload(payload: any): asserts payload is Payload {
if (typeof payload !== "object" || !payload) throw new Error("invalid payload-- was not an object.");
if (typeof payload.vodId !== "string") throw new Error("invalid payload-- was missing vodId");
}
-async function loadDataYaml(yamlPath: string): Promise {
- const yamlContent = await readFile(yamlPath, 'utf8');
- return yaml.load(yamlContent) as DataYaml;
-}
-
-
-async function preparePython(helpers) {
- const venvPath = join(env.VIBEUI_DIR, 'venv')
-
- // Create venv if it doesn't exist
- if (!existsSync(venvPath)) {
- helpers.logger.info("Python venv not found. Creating one...");
- await spawn("python", ["-m", "venv", "venv"], {
- cwd: env.VIBEUI_DIR,
- });
- } else {
- helpers.logger.info("Using existing Python venv.");
- }
-}
-
-
-async function ffprobe(videoPath: string): Promise<{ fps: number; frames: number }> {
- const { stdout } = await spawn('ffprobe', [
- '-v', 'error',
- '-select_streams', 'v:0',
- '-count_frames',
- '-show_entries', 'stream=nb_read_frames,r_frame_rate',
- '-of', 'default=nokey=1:noprint_wrappers=1',
- videoPath,
- ])
-
- const [frameRateStr, frameCountStr] = stdout.trim().split('\n')
- const [num, denom] = frameRateStr.trim().split('/').map(Number)
- const fps = num / denom
- const frames = parseInt(frameCountStr.trim(), 10)
-
- return { fps, frames }
-}
-
-
-
-
-
-
-
-export async function buildFunscript(
- helpers: Helpers,
- predictionOutput: string,
- videoPath: string
-): Promise {
- const labelDir = join(predictionOutput, 'labels');
- const yamlPath = join(predictionOutput, 'data.yaml');
- const outputPath = join(process.env.CACHE_ROOT ?? '/tmp', `${nanoid()}.funscript`);
- helpers.logger.info('Starting Funscript generation');
-
- try {
-
- const data = await loadDataYaml(join(env.VIBEUI_DIR, 'data.yaml'))
- const classPositionMap = await loadClassPositionMap(data, helpers);
- const { fps, totalFrames } = await loadVideoMetadata(videoPath, helpers);
- const detectionSegments = await processLabelFiles(labelDir, helpers, data);
- const totalDurationMs = Math.floor((totalFrames / fps) * 1000);
- const actions = generateActions(totalDurationMs, fps, detectionSegments, classPositionMap);
- await writeFunscript(outputPath, actions, helpers);
-
- return outputPath;
- } catch (error) {
- helpers.logger.error(`Error generating Funscript: ${error instanceof Error ? error.message : 'Unknown error'}`);
- throw error;
- }
-}
-
-export async function inference(helpers: Helpers, videoFilePath: string): Promise {
- const modelPath = join(env.VIBEUI_DIR, 'runs/detect/vibeui/weights/best.pt')
-
- // Generate a unique name based on video name + UUID
- const videoExt = extname(videoFilePath) // e.g. '.mp4'
- const videoName = basename(videoFilePath, videoExt) // removes the extension
- const uniqueName = `${videoName}-${nanoid()}`
- const customProjectDir = 'runs' // or any custom folder
- const outputPath = join(env.VIBEUI_DIR, customProjectDir, uniqueName)
-
- await spawn('./venv/bin/yolo', [
- 'predict',
- `model=${modelPath}`,
- `source=${videoFilePath}`,
- 'save=False',
- 'save_txt=True',
- 'save_conf=True',
- `project=${customProjectDir}`,
- `name=${uniqueName}`,
- ], {
- cwd: env.VIBEUI_DIR,
- stdio: 'inherit',
- })
-
- return outputPath // contains labels/ folder and predictions
-}
-
-
-async function loadClassPositionMap(data: DataYaml, helpers: Helpers): Promise {
- try {
-
- if (
- !data ||
- typeof data !== 'object' ||
- !('names' in data) ||
- typeof data.names !== 'object' ||
- data.names === null ||
- Object.keys(data.names).length === 0
- ) {
- throw new Error('Invalid data.yaml: "names" field is missing, not an object, or empty');
- }
-
- const positionMap: ClassPositionMap = {
- ControlledByTipper: 50,
- ControlledByTipperHigh: 80,
- ControlledByTipperLow: 20,
- ControlledByTipperMedium: 50,
- ControlledByTipperUltrahigh: 95,
- Ring1: 30,
- Ring2: 40,
- Ring3: 50,
- Ring4: 60,
- Earthquake: 'pattern',
- Fireworks: 'pattern',
- Pulse: 'pattern',
- Wave: 'pattern',
- Pause: 0,
- RandomTime: 70,
- HighLevel: 80,
- LowLevel: 20,
- MediumLevel: 50,
- UltraHighLevel: 95
- };
-
- const names = Object.values(data.names);
- for (const name of names) {
- if (typeof name !== 'string' || name.trim() === '') {
- helpers.logger.info(`Skipping invalid class name: ${name}`);
- continue;
- }
- if (!(name in positionMap)) {
- helpers.logger.info(`No position mapping for class "${name}", defaulting to 0`);
- positionMap[name] = 0;
- }
- }
-
- helpers.logger.info(`Loaded class position map: ${JSON.stringify(positionMap)}`);
- return positionMap;
- } catch (error) {
- helpers.logger.error(`Error loading data.yaml: ${error instanceof Error ? error.message : 'Unknown error'}`);
- throw error;
- }
-}
-
-function generatePatternPositions(startMs: number, durationMs: number, className: string, fps: number): FunscriptAction[] {
- const actions: FunscriptAction[] = [];
- const frameDurationMs = 1000 / fps;
- const totalFrames = Math.floor(durationMs / frameDurationMs);
- const intervalMs = 100;
-
- for (let timeMs = 0; timeMs < durationMs; timeMs += intervalMs) {
- const progress = timeMs / durationMs;
- let pos = 0;
-
- switch (className) {
- case 'Pulse':
- pos = Math.round(50 * Math.sin(progress * 2 * Math.PI));
- break;
- case 'Wave':
- pos = Math.round(50 + 50 * Math.sin(progress * 2 * Math.PI));
- break;
- case 'Fireworks':
- pos = Math.random() > 0.5 ? 80 : 0;
- break;
- case 'Earthquake':
- pos = Math.round(90 * Math.sin(progress * 4 * Math.PI) + (Math.random() - 0.5) * 10);
- pos = Math.max(0, Math.min(90, pos));
- break;
- }
-
- actions.push({ at: startMs + timeMs, pos });
- }
-
- return actions;
-}
-
-async function loadVideoMetadata(videoPath: string, helpers: Helpers) {
- const { fps, frames: totalFrames } = await ffprobe(videoPath);
- helpers.logger.info(`Video metadata: fps=${fps}, frames=${totalFrames}`);
- return { fps, totalFrames };
-}
-
-async function processLabelFiles(labelDir: string, helpers: Helpers, data: DataYaml): Promise {
- const labelFiles = (await readdir(labelDir)).filter(file => file.endsWith('.txt'));
- const detections: Map = new Map();
- const names = data.names;
-
- for (const file of labelFiles) {
- const match = file.match(/(\d+)\.txt$/);
- if (!match) {
- helpers.logger.info(`Skipping invalid filename: ${file}`);
- continue;
- }
- const frameIndex = parseInt(match[1], 10);
- if (isNaN(frameIndex)) {
- helpers.logger.info(`Skipping invalid frame index from filename: ${file}`);
- continue;
- }
-
- const content = await readFile(join(labelDir, file), 'utf8');
- const lines = content.trim().split('\n');
- const frameDetections: Detection[] = [];
- let maxConfidence = 0;
- let selectedClassIndex = -1;
-
- for (const line of lines) {
- const parts = line.trim().split(/\s+/);
- if (parts.length < 6) continue;
-
- const classIndex = parseInt(parts[0], 10);
- const confidence = parseFloat(parts[5]);
- if (isNaN(classIndex) || isNaN(confidence)) continue;
-
- if (confidence >= 0.7 && confidence > maxConfidence) {
- maxConfidence = confidence;
- selectedClassIndex = classIndex;
- }
- }
-
- if (maxConfidence > 0) {
- const className = (data.names as Record)[selectedClassIndex.toString()];
- if (className) {
- frameDetections.push({ startFrame: frameIndex, endFrame: frameIndex, className });
- }
- }
-
- if (frameDetections.length > 0) {
- detections.set(frameIndex, frameDetections);
- }
- }
-
- // Merge overlapping detections into continuous segments
- const detectionSegments: Detection[] = [];
- let currentDetection: Detection | null = null;
-
- for (const [frameIndex, frameDetections] of detections.entries()) {
- for (const detection of frameDetections) {
- if (!currentDetection || currentDetection.className !== detection.className) {
- if (currentDetection) detectionSegments.push(currentDetection);
- currentDetection = { ...detection, endFrame: frameIndex };
- } else {
- currentDetection.endFrame = frameIndex;
- }
- }
- }
- if (currentDetection) detectionSegments.push(currentDetection);
-
- return detectionSegments;
-}
-
-function generateActions(totalDurationMs: number, fps: number, detectionSegments: Detection[], classPositionMap: ClassPositionMap): FunscriptAction[] {
- const intervalMs = 100;
- const actions: FunscriptAction[] = [];
-
- // Generate static position actions
- for (let timeMs = 0; timeMs <= totalDurationMs; timeMs += intervalMs) {
- const frameIndex = Math.floor((timeMs / 1000) * fps);
- let position = 0;
-
- for (const segment of detectionSegments) {
- if (frameIndex >= segment.startFrame && frameIndex <= segment.endFrame) {
- const className = segment.className;
- if (typeof classPositionMap[className] === 'number') {
- position = classPositionMap[className];
- break;
- }
- }
- }
- actions.push({ at: timeMs, pos: position });
- }
-
- // Overlay pattern-based actions
- for (const segment of detectionSegments) {
- const className = segment.className;
- if (classPositionMap[className] === 'pattern') {
- const startMs = Math.floor((segment.startFrame / fps) * 1000);
- const durationMs = Math.floor(((segment.endFrame - segment.startFrame + 1) / fps) * 1000);
- const patternActions = generatePatternPositions(startMs, durationMs, className, fps);
- actions.push(...patternActions);
- }
- }
-
- // Sort actions by time and remove duplicates
- actions.sort((a, b) => a.at - b.at);
- const uniqueActions: FunscriptAction[] = [];
- let lastTime = -1;
- for (const action of actions) {
- if (action.at !== lastTime) {
- uniqueActions.push(action);
- lastTime = action.at;
- }
- }
-
- return uniqueActions;
-}
-
-async function writeFunscript(outputPath: string, actions: FunscriptAction[], helpers: Helpers) {
- const funscript: Funscript = { version: '1.0', actions };
- await writeFile(outputPath, JSON.stringify(funscript, null, 2));
- helpers.logger.info(`Funscript generated: ${outputPath} (${actions.length} actions)`);
-}
-
const createFunscript: Task = async (payload: any, helpers: Helpers) => {
assertPayload(payload);
@@ -373,7 +31,6 @@ const createFunscript: Task = async (payload: any, helpers: Helpers) => {
const vod = await prisma.vod.findFirstOrThrow({ where: { id: vodId } });
- await preparePython(helpers)
if (vod.funscript) {
helpers.logger.info(`Doing nothing-- vod ${vodId} already has a funscript.`);
@@ -394,11 +51,12 @@ const createFunscript: Task = async (payload: any, helpers: Helpers) => {
helpers.logger.info(`Creating funscript for vod ${vodId}...`);
- const predictionOutput = await inference(helpers, videoFilePath);
+ const modelPath = join(env.VIBEUI_DIR, 'vibeui.onnx')
+ const predictionOutput = await vibeuiInference(modelPath, videoFilePath);
helpers.logger.info(`prediction output ${predictionOutput}`);
- const funscriptFilePath = await buildFunscript(helpers, predictionOutput, videoFilePath)
+ const funscriptFilePath = await buildFunscript(predictionOutput, videoFilePath)
const s3Key = `funscripts/${vodId}.funscript`;
diff --git a/services/our/src/tasks/createFunscript.ts.old b/services/our/src/tasks/createFunscript.ts.old
new file mode 100644
index 0000000..7ce2422
--- /dev/null
+++ b/services/our/src/tasks/createFunscript.ts.old
@@ -0,0 +1,452 @@
+import type { Task, Helpers } from "graphile-worker";
+import { PrismaClient } from "../../generated/prisma";
+import { withAccelerate } from "@prisma/extension-accelerate";
+import { getOrDownloadAsset } from "../utils/cache";
+import { env } from "../config/env";
+import { getS3Client, uploadFile } from "../utils/s3";
+import { nanoid } from "nanoid";
+import { existsSync, rmSync } from "node:fs";
+import { join, basename, extname } from "node:path";
+import { readFile, writeFile, readdir } from 'node:fs/promises';
+import yaml from 'js-yaml';
+import { getNanoSpawn } from "../utils/nanoSpawn";
+import which from "which";
+import * as ort from 'onnxruntime-node';
+
+interface Payload {
+ vodId: string;
+}
+
+interface Detection {
+ startFrame: number;
+ endFrame: number;
+ className: string;
+}
+
+interface DataYaml {
+ path: string;
+ train: string;
+ val: string;
+ names: Record;
+}
+
+interface FunscriptAction {
+ at: number;
+ pos: number;
+}
+
+interface Funscript {
+ version: string;
+ actions: FunscriptAction[];
+}
+
+
+interface ClassPositionMap {
+ [className: string]: number | 'pattern';
+}
+
+
+const prisma = new PrismaClient().$extends(withAccelerate());
+
+
+function assertPayload(payload: any): asserts payload is Payload {
+ if (typeof payload !== "object" || !payload) throw new Error("invalid payload-- was not an object.");
+ if (typeof payload.vodId !== "string") throw new Error("invalid payload-- was missing vodId");
+}
+
+async function loadDataYaml(yamlPath: string): Promise {
+ const yamlContent = await readFile(yamlPath, 'utf8');
+ return yaml.load(yamlContent) as DataYaml;
+}
+
+
+// async function preparePython(helpers) {
+// const spawn = await getNanoSpawn();
+// const venvPath = join(env.VIBEUI_DIR, "venv");
+
+// // Determine Python executable
+// let pythonCmd;
+// try {
+// pythonCmd = which.sync("python3");
+// } catch {
+// helpers.logger.error("Python is not installed or not in PATH.");
+// throw new Error("Python not found in PATH.");
+// }
+
+// // If venv doesn't exist, create it
+// if (!existsSync(venvPath)) {
+// helpers.logger.info("Python venv not found. Creating one...");
+
+// try {
+// await spawn(pythonCmd, ["-m", "venv", "venv"], {
+// cwd: env.VIBEUI_DIR,
+// });
+
+// helpers.logger.info("Python venv successfully created.");
+// } catch (err) {
+// helpers.logger.error("Failed to create Python venv:", err);
+
+// // Clean up partially created venv if needed
+// try {
+// if (existsSync(venvPath)) {
+// rmSync(venvPath, { recursive: true, force: true });
+// helpers.logger.warn("Removed broken venv directory.");
+// }
+// } catch (cleanupErr) {
+// helpers.logger.error("Error while cleaning up broken venv:", cleanupErr);
+// }
+
+// throw new Error("Python venv creation failed. Check if python3 and python3-venv are installed.");
+// }
+// } else {
+// helpers.logger.info("Using existing Python venv.");
+// }
+// }
+
+
+async function ffprobe(videoPath: string): Promise<{ fps: number; frames: number }> {
+ const spawn = await getNanoSpawn()
+ const { stdout } = await spawn('ffprobe', [
+ '-v', 'error',
+ '-select_streams', 'v:0',
+ '-count_frames',
+ '-show_entries', 'stream=nb_read_frames,r_frame_rate',
+ '-of', 'default=nokey=1:noprint_wrappers=1',
+ videoPath,
+ ])
+
+ const [frameRateStr, frameCountStr] = stdout.trim().split('\n')
+ const [num, denom] = frameRateStr.trim().split('/').map(Number)
+ const fps = num / denom
+ const frames = parseInt(frameCountStr.trim(), 10)
+
+ return { fps, frames }
+}
+
+
+
+
+
+
+
+export async function buildFunscript(
+ helpers: Helpers,
+ predictionOutput: string,
+ videoPath: string
+): Promise {
+ const labelDir = join(predictionOutput, 'labels');
+ const yamlPath = join(predictionOutput, 'data.yaml');
+ const outputPath = join(process.env.CACHE_ROOT ?? '/tmp', `${nanoid()}.funscript`);
+ helpers.logger.info('Starting Funscript generation');
+
+ try {
+
+ const data = await loadDataYaml(join(env.VIBEUI_DIR, 'data.yaml'))
+ const classPositionMap = await loadClassPositionMap(data, helpers);
+ const { fps, totalFrames } = await loadVideoMetadata(videoPath, helpers);
+ const detectionSegments = await processLabelFiles(labelDir, helpers, data);
+ const totalDurationMs = Math.floor((totalFrames / fps) * 1000);
+ const actions = generateActions(totalDurationMs, fps, detectionSegments, classPositionMap);
+ await writeFunscript(outputPath, actions, helpers);
+
+ return outputPath;
+ } catch (error) {
+ helpers.logger.error(`Error generating Funscript: ${error instanceof Error ? error.message : 'Unknown error'}`);
+ throw error;
+ }
+}
+
+export async function inference(helpers: Helpers, videoFilePath: string): Promise {
+ const spawn = await getNanoSpawn()
+
+ const modelPath = join(env.VIBEUI_DIR, 'runs/detect/vibeui/weights/best.pt')
+
+ // Generate a unique name based on video name + UUID
+ const videoExt = extname(videoFilePath) // e.g. '.mp4'
+ const videoName = basename(videoFilePath, videoExt) // removes the extension
+ const uniqueName = `${videoName}-${nanoid()}`
+ const customProjectDir = 'runs' // or any custom folder
+ const outputPath = join(env.VIBEUI_DIR, customProjectDir, uniqueName)
+
+ await spawn('./venv/bin/yolo', [
+ 'predict',
+ `model=${modelPath}`,
+ `source=${videoFilePath}`,
+ 'save=False',
+ 'save_txt=True',
+ 'save_conf=True',
+ `project=${customProjectDir}`,
+ `name=${uniqueName}`,
+ ], {
+ cwd: env.VIBEUI_DIR,
+ stdio: 'inherit',
+ })
+
+ return outputPath // contains labels/ folder and predictions
+}
+
+
+async function loadClassPositionMap(data: DataYaml, helpers: Helpers): Promise {
+ try {
+
+ if (
+ !data ||
+ typeof data !== 'object' ||
+ !('names' in data) ||
+ typeof data.names !== 'object' ||
+ data.names === null ||
+ Object.keys(data.names).length === 0
+ ) {
+ throw new Error('Invalid data.yaml: "names" field is missing, not an object, or empty');
+ }
+
+ const positionMap: ClassPositionMap = {
+ ControlledByTipper: 50,
+ ControlledByTipperHigh: 80,
+ ControlledByTipperLow: 20,
+ ControlledByTipperMedium: 50,
+ ControlledByTipperUltrahigh: 95,
+ Ring1: 30,
+ Ring2: 40,
+ Ring3: 50,
+ Ring4: 60,
+ Earthquake: 'pattern',
+ Fireworks: 'pattern',
+ Pulse: 'pattern',
+ Wave: 'pattern',
+ Pause: 0,
+ RandomTime: 70,
+ HighLevel: 80,
+ LowLevel: 20,
+ MediumLevel: 50,
+ UltraHighLevel: 95
+ };
+
+ const names = Object.values(data.names);
+ for (const name of names) {
+ if (typeof name !== 'string' || name.trim() === '') {
+ helpers.logger.info(`Skipping invalid class name: ${name}`);
+ continue;
+ }
+ if (!(name in positionMap)) {
+ helpers.logger.info(`No position mapping for class "${name}", defaulting to 0`);
+ positionMap[name] = 0;
+ }
+ }
+
+ helpers.logger.info(`Loaded class position map: ${JSON.stringify(positionMap)}`);
+ return positionMap;
+ } catch (error) {
+ helpers.logger.error(`Error loading data.yaml: ${error instanceof Error ? error.message : 'Unknown error'}`);
+ throw error;
+ }
+}
+
+function generatePatternPositions(startMs: number, durationMs: number, className: string, fps: number): FunscriptAction[] {
+ const actions: FunscriptAction[] = [];
+ const frameDurationMs = 1000 / fps;
+ const totalFrames = Math.floor(durationMs / frameDurationMs);
+ const intervalMs = 100;
+
+ for (let timeMs = 0; timeMs < durationMs; timeMs += intervalMs) {
+ const progress = timeMs / durationMs;
+ let pos = 0;
+
+ switch (className) {
+ case 'Pulse':
+ pos = Math.round(50 * Math.sin(progress * 2 * Math.PI));
+ break;
+ case 'Wave':
+ pos = Math.round(50 + 50 * Math.sin(progress * 2 * Math.PI));
+ break;
+ case 'Fireworks':
+ pos = Math.random() > 0.5 ? 80 : 0;
+ break;
+ case 'Earthquake':
+ pos = Math.round(90 * Math.sin(progress * 4 * Math.PI) + (Math.random() - 0.5) * 10);
+ pos = Math.max(0, Math.min(90, pos));
+ break;
+ }
+
+ actions.push({ at: startMs + timeMs, pos });
+ }
+
+ return actions;
+}
+
+async function loadVideoMetadata(videoPath: string, helpers: Helpers) {
+ const { fps, frames: totalFrames } = await ffprobe(videoPath);
+ helpers.logger.info(`Video metadata: fps=${fps}, frames=${totalFrames}`);
+ return { fps, totalFrames };
+}
+
+async function processLabelFiles(labelDir: string, helpers: Helpers, data: DataYaml): Promise {
+ const labelFiles = (await readdir(labelDir)).filter(file => file.endsWith('.txt'));
+ const detections: Map = new Map();
+ const names = data.names;
+
+ for (const file of labelFiles) {
+ const match = file.match(/(\d+)\.txt$/);
+ if (!match) {
+ helpers.logger.info(`Skipping invalid filename: ${file}`);
+ continue;
+ }
+ const frameIndex = parseInt(match[1], 10);
+ if (isNaN(frameIndex)) {
+ helpers.logger.info(`Skipping invalid frame index from filename: ${file}`);
+ continue;
+ }
+
+ const content = await readFile(join(labelDir, file), 'utf8');
+ const lines = content.trim().split('\n');
+ const frameDetections: Detection[] = [];
+ let maxConfidence = 0;
+ let selectedClassIndex = -1;
+
+ for (const line of lines) {
+ const parts = line.trim().split(/\s+/);
+ if (parts.length < 6) continue;
+
+ const classIndex = parseInt(parts[0], 10);
+ const confidence = parseFloat(parts[5]);
+ if (isNaN(classIndex) || isNaN(confidence)) continue;
+
+ if (confidence >= 0.7 && confidence > maxConfidence) {
+ maxConfidence = confidence;
+ selectedClassIndex = classIndex;
+ }
+ }
+
+ if (maxConfidence > 0) {
+ const className = (data.names as Record)[selectedClassIndex.toString()];
+ if (className) {
+ frameDetections.push({ startFrame: frameIndex, endFrame: frameIndex, className });
+ }
+ }
+
+ if (frameDetections.length > 0) {
+ detections.set(frameIndex, frameDetections);
+ }
+ }
+
+ // Merge overlapping detections into continuous segments
+ const detectionSegments: Detection[] = [];
+ let currentDetection: Detection | null = null;
+
+ for (const [frameIndex, frameDetections] of detections.entries()) {
+ for (const detection of frameDetections) {
+ if (!currentDetection || currentDetection.className !== detection.className) {
+ if (currentDetection) detectionSegments.push(currentDetection);
+ currentDetection = { ...detection, endFrame: frameIndex };
+ } else {
+ currentDetection.endFrame = frameIndex;
+ }
+ }
+ }
+ if (currentDetection) detectionSegments.push(currentDetection);
+
+ return detectionSegments;
+}
+
+function generateActions(totalDurationMs: number, fps: number, detectionSegments: Detection[], classPositionMap: ClassPositionMap): FunscriptAction[] {
+ const intervalMs = 100;
+ const actions: FunscriptAction[] = [];
+
+ // Generate static position actions
+ for (let timeMs = 0; timeMs <= totalDurationMs; timeMs += intervalMs) {
+ const frameIndex = Math.floor((timeMs / 1000) * fps);
+ let position = 0;
+
+ for (const segment of detectionSegments) {
+ if (frameIndex >= segment.startFrame && frameIndex <= segment.endFrame) {
+ const className = segment.className;
+ if (typeof classPositionMap[className] === 'number') {
+ position = classPositionMap[className];
+ break;
+ }
+ }
+ }
+ actions.push({ at: timeMs, pos: position });
+ }
+
+ // Overlay pattern-based actions
+ for (const segment of detectionSegments) {
+ const className = segment.className;
+ if (classPositionMap[className] === 'pattern') {
+ const startMs = Math.floor((segment.startFrame / fps) * 1000);
+ const durationMs = Math.floor(((segment.endFrame - segment.startFrame + 1) / fps) * 1000);
+ const patternActions = generatePatternPositions(startMs, durationMs, className, fps);
+ actions.push(...patternActions);
+ }
+ }
+
+ // Sort actions by time and remove duplicates
+ actions.sort((a, b) => a.at - b.at);
+ const uniqueActions: FunscriptAction[] = [];
+ let lastTime = -1;
+ for (const action of actions) {
+ if (action.at !== lastTime) {
+ uniqueActions.push(action);
+ lastTime = action.at;
+ }
+ }
+
+ return uniqueActions;
+}
+
+async function writeFunscript(outputPath: string, actions: FunscriptAction[], helpers: Helpers) {
+ const funscript: Funscript = { version: '1.0', actions };
+ await writeFile(outputPath, JSON.stringify(funscript, null, 2));
+ helpers.logger.info(`Funscript generated: ${outputPath} (${actions.length} actions)`);
+}
+
+
+const createFunscript: Task = async (payload: any, helpers: Helpers) => {
+ assertPayload(payload);
+ const { vodId } = payload;
+
+
+
+ const vod = await prisma.vod.findFirstOrThrow({ where: { id: vodId } });
+ await preparePython(helpers)
+
+ if (vod.funscript) {
+ helpers.logger.info(`Doing nothing-- vod ${vodId} already has a funscript.`);
+ return;
+ }
+
+ if (!vod.sourceVideo) {
+ const msg = `Cannot create funscript: Vod ${vodId} is missing a source video.`;
+ helpers.logger.warn(msg);
+ throw new Error(msg);
+ }
+
+
+
+ const s3Client = getS3Client();
+ const videoFilePath = await getOrDownloadAsset(s3Client, env.S3_BUCKET, vod.sourceVideo);
+ helpers.logger.info(`Downloaded video to ${videoFilePath}`);
+
+ helpers.logger.info(`Creating funscript for vod ${vodId}...`);
+
+ const predictionOutput = await inference(helpers, videoFilePath);
+ helpers.logger.info(`prediction output ${predictionOutput}`);
+
+
+ const funscriptFilePath = await buildFunscript(helpers, predictionOutput, videoFilePath)
+
+
+ const s3Key = `funscripts/${vodId}.funscript`;
+ const s3Url = await uploadFile(s3Client, env.S3_BUCKET, s3Key, funscriptFilePath, "application/json");
+
+ helpers.logger.info(`Uploaded funscript to S3: ${s3Url}`);
+
+ await prisma.vod.update({
+ where: { id: vodId },
+ data: { funscript: s3Key }
+ });
+
+ helpers.logger.info(`Funscript saved to database for vod ${vodId}`);
+};
+
+export default createFunscript;
diff --git a/services/our/src/tasks/createHlsPlaylist.ts b/services/our/src/tasks/createHlsPlaylist.ts
index e994605..a2ad67d 100644
--- a/services/our/src/tasks/createHlsPlaylist.ts
+++ b/services/our/src/tasks/createHlsPlaylist.ts
@@ -126,8 +126,6 @@ export async function packageHls(
args.push('--segment_duration=2'); // matches Twitch’s chunk size
- helpers.logger.info(`PILLS HERE\nPILLS HERE\nPILLS HERE\nPILLS HERE\nPILLS HERE\nPILLS HERE\nPILLS HERE`)
-
await spawn('packager', args, {
stdout: 'inherit',
stderr: 'inherit',
diff --git a/services/our/src/tasks/createIpfsCid.ts b/services/our/src/tasks/createIpfsCid.ts
index 01cd49a..733c9ee 100644
--- a/services/our/src/tasks/createIpfsCid.ts
+++ b/services/our/src/tasks/createIpfsCid.ts
@@ -1,5 +1,4 @@
import type { Task, Helpers } from "graphile-worker";
-import spawn from 'nano-spawn';
import { PrismaClient } from "../../generated/prisma";
import { withAccelerate } from "@prisma/extension-accelerate";
import { getOrDownloadAsset } from "../utils/cache";
@@ -7,6 +6,7 @@ import { env } from "../config/env";
import { S3Client } from "@aws-sdk/client-s3";
import { getS3Client, uploadFile } from "../utils/s3";
import { nanoid } from "nanoid";
+import { getNanoSpawn } from "../utils/nanoSpawn";
const prisma = new PrismaClient().$extends(withAccelerate());
@@ -30,7 +30,7 @@ async function hash(helpers: Helpers, inputFilePath: string) {
throw new Error("inputFilePath is missing");
}
-
+ const spawn = await getNanoSpawn();
const result = await spawn('ipfs', [
'add',
'--cid-version=1',
diff --git a/services/our/src/tasks/createVideoThumbnail.ts b/services/our/src/tasks/createVideoThumbnail.ts
index e728237..2203467 100644
--- a/services/our/src/tasks/createVideoThumbnail.ts
+++ b/services/our/src/tasks/createVideoThumbnail.ts
@@ -1,5 +1,4 @@
import type { Task, Helpers } from "graphile-worker";
-import spawn from 'nano-spawn';
import { PrismaClient } from "../../generated/prisma";
import { withAccelerate } from "@prisma/extension-accelerate";
import { getOrDownloadAsset } from "../utils/cache";
@@ -7,6 +6,7 @@ import { env } from "../config/env";
import { S3Client } from "@aws-sdk/client-s3";
import { getS3Client, uploadFile } from "../utils/s3";
import { nanoid } from "nanoid";
+import { getNanoSpawn } from "../utils/nanoSpawn";
const prisma = new PrismaClient().$extends(withAccelerate());
@@ -25,6 +25,7 @@ async function createThumbnail(helpers: Helpers, inputFilePath: string) {
const outputFilePath = inputFilePath.replace(/\.[^/.]+$/, '') + '-thumb.png';
+ const spawn = await getNanoSpawn();
const result = await spawn('vcsi', [
inputFilePath,
'--metadata-position', 'hidden',
diff --git a/services/our/src/tasks/getSourceVideo.ts b/services/our/src/tasks/getSourceVideo.ts
index c9c6e50..dce72d1 100644
--- a/services/our/src/tasks/getSourceVideo.ts
+++ b/services/our/src/tasks/getSourceVideo.ts
@@ -6,11 +6,11 @@ import path from "node:path";
import { join } from "node:path";
import { getOrDownloadAsset } from "../utils/cache";
import { env } from "../config/env";
-import spawn from "nano-spawn";
import { nanoid } from "nanoid";
import { uploadFile } from "../utils/s3";
import { S3Client } from "@aws-sdk/client-s3";
import { VodSegment } from "../types";
+import { getNanoSpawn } from "../utils/nanoSpawn";
const prisma = new PrismaClient();
const client = new S3Client({
@@ -92,6 +92,7 @@ async function concatenateSegments(
helpers.logger.info(`Concatenating ${concatSpec.files.length} segments`);
try {
+ const spawn = await getNanoSpawn();
const proc = await spawn("ffmpeg", [
"-f", "concat",
"-safe", "0",
diff --git a/services/our/src/tests/fixtures/data.yaml b/services/our/src/tests/fixtures/data.yaml
new file mode 100644
index 0000000..a9b48ca
--- /dev/null
+++ b/services/our/src/tests/fixtures/data.yaml
@@ -0,0 +1,25 @@
+path: /home/cj/Documents/futureporn-monorepo/apps/vibeui/data
+train: train/images
+val: val/images
+
+names:
+ 0: ControlledByTipper
+ 1: ControlledByTipperHigh
+ 2: ControlledByTipperLow
+ 3: ControlledByTipperMedium
+ 4: ControlledByTipperUltrahigh
+ 5: Earthquake
+ 6: Fireworks
+ 7: HighLevel
+ 8: LowLevel
+ 9: MediumLevel
+ 10: Pause
+ 11: Pulse
+ 12: RandomTime
+ 13: RespondingTo
+ 14: Ring1
+ 15: Ring2
+ 16: Ring3
+ 17: Ring4
+ 18: UltraHighLevel
+ 19: Wave
diff --git a/services/our/src/tests/fixtures/prediction/frames/000001.jpg b/services/our/src/tests/fixtures/prediction/frames/000001.jpg
new file mode 100644
index 0000000..e46653a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000001.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000002.jpg b/services/our/src/tests/fixtures/prediction/frames/000002.jpg
new file mode 100644
index 0000000..6ae9cf2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000002.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000003.jpg b/services/our/src/tests/fixtures/prediction/frames/000003.jpg
new file mode 100644
index 0000000..852ce14
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000003.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000004.jpg b/services/our/src/tests/fixtures/prediction/frames/000004.jpg
new file mode 100644
index 0000000..08cc10a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000004.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000005.jpg b/services/our/src/tests/fixtures/prediction/frames/000005.jpg
new file mode 100644
index 0000000..7d299d9
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000005.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000006.jpg b/services/our/src/tests/fixtures/prediction/frames/000006.jpg
new file mode 100644
index 0000000..2207e24
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000006.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000007.jpg b/services/our/src/tests/fixtures/prediction/frames/000007.jpg
new file mode 100644
index 0000000..9e21872
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000007.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000008.jpg b/services/our/src/tests/fixtures/prediction/frames/000008.jpg
new file mode 100644
index 0000000..ef522c4
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000008.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000009.jpg b/services/our/src/tests/fixtures/prediction/frames/000009.jpg
new file mode 100644
index 0000000..7c10ff3
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000009.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000010.jpg b/services/our/src/tests/fixtures/prediction/frames/000010.jpg
new file mode 100644
index 0000000..3af7da2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000010.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000011.jpg b/services/our/src/tests/fixtures/prediction/frames/000011.jpg
new file mode 100644
index 0000000..189bcbb
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000011.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000012.jpg b/services/our/src/tests/fixtures/prediction/frames/000012.jpg
new file mode 100644
index 0000000..94811fc
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000012.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000013.jpg b/services/our/src/tests/fixtures/prediction/frames/000013.jpg
new file mode 100644
index 0000000..254b201
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000013.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000014.jpg b/services/our/src/tests/fixtures/prediction/frames/000014.jpg
new file mode 100644
index 0000000..258b6c9
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000014.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000015.jpg b/services/our/src/tests/fixtures/prediction/frames/000015.jpg
new file mode 100644
index 0000000..c1de380
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000015.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000016.jpg b/services/our/src/tests/fixtures/prediction/frames/000016.jpg
new file mode 100644
index 0000000..d857972
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000016.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000017.jpg b/services/our/src/tests/fixtures/prediction/frames/000017.jpg
new file mode 100644
index 0000000..afa96c1
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000017.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000018.jpg b/services/our/src/tests/fixtures/prediction/frames/000018.jpg
new file mode 100644
index 0000000..7d16b33
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000018.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000019.jpg b/services/our/src/tests/fixtures/prediction/frames/000019.jpg
new file mode 100644
index 0000000..e8f2f0a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000019.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000020.jpg b/services/our/src/tests/fixtures/prediction/frames/000020.jpg
new file mode 100644
index 0000000..e0ae8cc
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000020.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000021.jpg b/services/our/src/tests/fixtures/prediction/frames/000021.jpg
new file mode 100644
index 0000000..c97f6b9
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000021.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000022.jpg b/services/our/src/tests/fixtures/prediction/frames/000022.jpg
new file mode 100644
index 0000000..2939c9e
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000022.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000023.jpg b/services/our/src/tests/fixtures/prediction/frames/000023.jpg
new file mode 100644
index 0000000..83cdc33
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000023.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000024.jpg b/services/our/src/tests/fixtures/prediction/frames/000024.jpg
new file mode 100644
index 0000000..716654b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000024.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000025.jpg b/services/our/src/tests/fixtures/prediction/frames/000025.jpg
new file mode 100644
index 0000000..c278a23
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000025.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000026.jpg b/services/our/src/tests/fixtures/prediction/frames/000026.jpg
new file mode 100644
index 0000000..531f7ef
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000026.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000027.jpg b/services/our/src/tests/fixtures/prediction/frames/000027.jpg
new file mode 100644
index 0000000..a340bb3
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000027.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000028.jpg b/services/our/src/tests/fixtures/prediction/frames/000028.jpg
new file mode 100644
index 0000000..52149e6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000028.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000029.jpg b/services/our/src/tests/fixtures/prediction/frames/000029.jpg
new file mode 100644
index 0000000..3b76ba0
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000029.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000030.jpg b/services/our/src/tests/fixtures/prediction/frames/000030.jpg
new file mode 100644
index 0000000..c9c02f2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000030.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000031.jpg b/services/our/src/tests/fixtures/prediction/frames/000031.jpg
new file mode 100644
index 0000000..2f64d8d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000031.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000032.jpg b/services/our/src/tests/fixtures/prediction/frames/000032.jpg
new file mode 100644
index 0000000..37ed0df
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000032.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000033.jpg b/services/our/src/tests/fixtures/prediction/frames/000033.jpg
new file mode 100644
index 0000000..c8f64a3
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000033.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000034.jpg b/services/our/src/tests/fixtures/prediction/frames/000034.jpg
new file mode 100644
index 0000000..a48909d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000034.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000035.jpg b/services/our/src/tests/fixtures/prediction/frames/000035.jpg
new file mode 100644
index 0000000..64887fe
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000035.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000036.jpg b/services/our/src/tests/fixtures/prediction/frames/000036.jpg
new file mode 100644
index 0000000..86437f2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000036.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000037.jpg b/services/our/src/tests/fixtures/prediction/frames/000037.jpg
new file mode 100644
index 0000000..0b62a3f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000037.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000038.jpg b/services/our/src/tests/fixtures/prediction/frames/000038.jpg
new file mode 100644
index 0000000..51de6a8
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000038.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000039.jpg b/services/our/src/tests/fixtures/prediction/frames/000039.jpg
new file mode 100644
index 0000000..47e943b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000039.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000040.jpg b/services/our/src/tests/fixtures/prediction/frames/000040.jpg
new file mode 100644
index 0000000..e0e9ec6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000040.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000041.jpg b/services/our/src/tests/fixtures/prediction/frames/000041.jpg
new file mode 100644
index 0000000..67ffd9b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000041.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000042.jpg b/services/our/src/tests/fixtures/prediction/frames/000042.jpg
new file mode 100644
index 0000000..07db5ec
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000042.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000043.jpg b/services/our/src/tests/fixtures/prediction/frames/000043.jpg
new file mode 100644
index 0000000..60a18c6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000043.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000044.jpg b/services/our/src/tests/fixtures/prediction/frames/000044.jpg
new file mode 100644
index 0000000..3dc665e
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000044.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000045.jpg b/services/our/src/tests/fixtures/prediction/frames/000045.jpg
new file mode 100644
index 0000000..db2c5d4
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000045.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000046.jpg b/services/our/src/tests/fixtures/prediction/frames/000046.jpg
new file mode 100644
index 0000000..5cdb288
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000046.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000047.jpg b/services/our/src/tests/fixtures/prediction/frames/000047.jpg
new file mode 100644
index 0000000..770cad6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000047.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000048.jpg b/services/our/src/tests/fixtures/prediction/frames/000048.jpg
new file mode 100644
index 0000000..8e78424
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000048.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000049.jpg b/services/our/src/tests/fixtures/prediction/frames/000049.jpg
new file mode 100644
index 0000000..c9247d6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000049.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000050.jpg b/services/our/src/tests/fixtures/prediction/frames/000050.jpg
new file mode 100644
index 0000000..1ae1c83
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000050.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000051.jpg b/services/our/src/tests/fixtures/prediction/frames/000051.jpg
new file mode 100644
index 0000000..ce0ead2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000051.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000052.jpg b/services/our/src/tests/fixtures/prediction/frames/000052.jpg
new file mode 100644
index 0000000..ae55353
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000052.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000053.jpg b/services/our/src/tests/fixtures/prediction/frames/000053.jpg
new file mode 100644
index 0000000..f1a432b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000053.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000054.jpg b/services/our/src/tests/fixtures/prediction/frames/000054.jpg
new file mode 100644
index 0000000..8543939
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000054.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000055.jpg b/services/our/src/tests/fixtures/prediction/frames/000055.jpg
new file mode 100644
index 0000000..6495891
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000055.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000056.jpg b/services/our/src/tests/fixtures/prediction/frames/000056.jpg
new file mode 100644
index 0000000..b39011b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000056.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000057.jpg b/services/our/src/tests/fixtures/prediction/frames/000057.jpg
new file mode 100644
index 0000000..80da471
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000057.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000058.jpg b/services/our/src/tests/fixtures/prediction/frames/000058.jpg
new file mode 100644
index 0000000..0d561f1
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000058.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000059.jpg b/services/our/src/tests/fixtures/prediction/frames/000059.jpg
new file mode 100644
index 0000000..36977da
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000059.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000060.jpg b/services/our/src/tests/fixtures/prediction/frames/000060.jpg
new file mode 100644
index 0000000..3bd5b66
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000060.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000061.jpg b/services/our/src/tests/fixtures/prediction/frames/000061.jpg
new file mode 100644
index 0000000..b532b26
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000061.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000062.jpg b/services/our/src/tests/fixtures/prediction/frames/000062.jpg
new file mode 100644
index 0000000..b431522
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000062.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000063.jpg b/services/our/src/tests/fixtures/prediction/frames/000063.jpg
new file mode 100644
index 0000000..dc3f6c3
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000063.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000064.jpg b/services/our/src/tests/fixtures/prediction/frames/000064.jpg
new file mode 100644
index 0000000..3e2810d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000064.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000065.jpg b/services/our/src/tests/fixtures/prediction/frames/000065.jpg
new file mode 100644
index 0000000..b9baad2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000065.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000066.jpg b/services/our/src/tests/fixtures/prediction/frames/000066.jpg
new file mode 100644
index 0000000..da00550
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000066.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000067.jpg b/services/our/src/tests/fixtures/prediction/frames/000067.jpg
new file mode 100644
index 0000000..54b5f5e
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000067.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000068.jpg b/services/our/src/tests/fixtures/prediction/frames/000068.jpg
new file mode 100644
index 0000000..0de85fd
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000068.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000069.jpg b/services/our/src/tests/fixtures/prediction/frames/000069.jpg
new file mode 100644
index 0000000..73498db
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000069.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000070.jpg b/services/our/src/tests/fixtures/prediction/frames/000070.jpg
new file mode 100644
index 0000000..9ac7767
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000070.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000071.jpg b/services/our/src/tests/fixtures/prediction/frames/000071.jpg
new file mode 100644
index 0000000..506eeaf
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000071.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000072.jpg b/services/our/src/tests/fixtures/prediction/frames/000072.jpg
new file mode 100644
index 0000000..973478d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000072.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000073.jpg b/services/our/src/tests/fixtures/prediction/frames/000073.jpg
new file mode 100644
index 0000000..72dd454
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000073.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000074.jpg b/services/our/src/tests/fixtures/prediction/frames/000074.jpg
new file mode 100644
index 0000000..2ad3572
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000074.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000075.jpg b/services/our/src/tests/fixtures/prediction/frames/000075.jpg
new file mode 100644
index 0000000..782b172
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000075.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000076.jpg b/services/our/src/tests/fixtures/prediction/frames/000076.jpg
new file mode 100644
index 0000000..7c4adbc
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000076.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000077.jpg b/services/our/src/tests/fixtures/prediction/frames/000077.jpg
new file mode 100644
index 0000000..eea9433
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000077.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000078.jpg b/services/our/src/tests/fixtures/prediction/frames/000078.jpg
new file mode 100644
index 0000000..8d062b2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000078.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000079.jpg b/services/our/src/tests/fixtures/prediction/frames/000079.jpg
new file mode 100644
index 0000000..ce714bf
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000079.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000080.jpg b/services/our/src/tests/fixtures/prediction/frames/000080.jpg
new file mode 100644
index 0000000..b3547f6
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000080.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000081.jpg b/services/our/src/tests/fixtures/prediction/frames/000081.jpg
new file mode 100644
index 0000000..7688d91
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000081.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000082.jpg b/services/our/src/tests/fixtures/prediction/frames/000082.jpg
new file mode 100644
index 0000000..5dd0ed0
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000082.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000083.jpg b/services/our/src/tests/fixtures/prediction/frames/000083.jpg
new file mode 100644
index 0000000..2c0f107
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000083.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000084.jpg b/services/our/src/tests/fixtures/prediction/frames/000084.jpg
new file mode 100644
index 0000000..9758f8d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000084.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000085.jpg b/services/our/src/tests/fixtures/prediction/frames/000085.jpg
new file mode 100644
index 0000000..39dde0b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000085.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000086.jpg b/services/our/src/tests/fixtures/prediction/frames/000086.jpg
new file mode 100644
index 0000000..b407c50
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000086.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000087.jpg b/services/our/src/tests/fixtures/prediction/frames/000087.jpg
new file mode 100644
index 0000000..cf15db7
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000087.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000088.jpg b/services/our/src/tests/fixtures/prediction/frames/000088.jpg
new file mode 100644
index 0000000..1905f0b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000088.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000089.jpg b/services/our/src/tests/fixtures/prediction/frames/000089.jpg
new file mode 100644
index 0000000..dfd0874
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000089.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000090.jpg b/services/our/src/tests/fixtures/prediction/frames/000090.jpg
new file mode 100644
index 0000000..be89b05
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000090.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000091.jpg b/services/our/src/tests/fixtures/prediction/frames/000091.jpg
new file mode 100644
index 0000000..2850b6f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000091.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000092.jpg b/services/our/src/tests/fixtures/prediction/frames/000092.jpg
new file mode 100644
index 0000000..261c8bd
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000092.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000093.jpg b/services/our/src/tests/fixtures/prediction/frames/000093.jpg
new file mode 100644
index 0000000..fead1e8
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000093.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000094.jpg b/services/our/src/tests/fixtures/prediction/frames/000094.jpg
new file mode 100644
index 0000000..4734837
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000094.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000095.jpg b/services/our/src/tests/fixtures/prediction/frames/000095.jpg
new file mode 100644
index 0000000..d4e8e7b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000095.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000096.jpg b/services/our/src/tests/fixtures/prediction/frames/000096.jpg
new file mode 100644
index 0000000..dee8a94
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000096.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000097.jpg b/services/our/src/tests/fixtures/prediction/frames/000097.jpg
new file mode 100644
index 0000000..b9de7d2
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000097.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000098.jpg b/services/our/src/tests/fixtures/prediction/frames/000098.jpg
new file mode 100644
index 0000000..d07fa35
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000098.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000099.jpg b/services/our/src/tests/fixtures/prediction/frames/000099.jpg
new file mode 100644
index 0000000..0b5b46c
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000099.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000100.jpg b/services/our/src/tests/fixtures/prediction/frames/000100.jpg
new file mode 100644
index 0000000..64cb4f7
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000100.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000101.jpg b/services/our/src/tests/fixtures/prediction/frames/000101.jpg
new file mode 100644
index 0000000..522d68a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000101.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000102.jpg b/services/our/src/tests/fixtures/prediction/frames/000102.jpg
new file mode 100644
index 0000000..b74818a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000102.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000103.jpg b/services/our/src/tests/fixtures/prediction/frames/000103.jpg
new file mode 100644
index 0000000..1881fbf
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000103.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000104.jpg b/services/our/src/tests/fixtures/prediction/frames/000104.jpg
new file mode 100644
index 0000000..a350956
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000104.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000105.jpg b/services/our/src/tests/fixtures/prediction/frames/000105.jpg
new file mode 100644
index 0000000..cca63da
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000105.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000106.jpg b/services/our/src/tests/fixtures/prediction/frames/000106.jpg
new file mode 100644
index 0000000..874f42c
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000106.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000107.jpg b/services/our/src/tests/fixtures/prediction/frames/000107.jpg
new file mode 100644
index 0000000..3e05374
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000107.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000108.jpg b/services/our/src/tests/fixtures/prediction/frames/000108.jpg
new file mode 100644
index 0000000..8598535
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000108.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000109.jpg b/services/our/src/tests/fixtures/prediction/frames/000109.jpg
new file mode 100644
index 0000000..c3d71b5
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000109.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000110.jpg b/services/our/src/tests/fixtures/prediction/frames/000110.jpg
new file mode 100644
index 0000000..937429a
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000110.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000111.jpg b/services/our/src/tests/fixtures/prediction/frames/000111.jpg
new file mode 100644
index 0000000..9e6036f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000111.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000112.jpg b/services/our/src/tests/fixtures/prediction/frames/000112.jpg
new file mode 100644
index 0000000..0bb7b4c
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000112.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000113.jpg b/services/our/src/tests/fixtures/prediction/frames/000113.jpg
new file mode 100644
index 0000000..3b866df
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000113.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000114.jpg b/services/our/src/tests/fixtures/prediction/frames/000114.jpg
new file mode 100644
index 0000000..d640577
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000114.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000115.jpg b/services/our/src/tests/fixtures/prediction/frames/000115.jpg
new file mode 100644
index 0000000..eb375bb
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000115.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000116.jpg b/services/our/src/tests/fixtures/prediction/frames/000116.jpg
new file mode 100644
index 0000000..ab326e0
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000116.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000117.jpg b/services/our/src/tests/fixtures/prediction/frames/000117.jpg
new file mode 100644
index 0000000..2e4aa3f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000117.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000118.jpg b/services/our/src/tests/fixtures/prediction/frames/000118.jpg
new file mode 100644
index 0000000..9be66c8
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000118.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000119.jpg b/services/our/src/tests/fixtures/prediction/frames/000119.jpg
new file mode 100644
index 0000000..5f4a94b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000119.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000120.jpg b/services/our/src/tests/fixtures/prediction/frames/000120.jpg
new file mode 100644
index 0000000..d532f05
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000120.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000121.jpg b/services/our/src/tests/fixtures/prediction/frames/000121.jpg
new file mode 100644
index 0000000..fcddc68
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000121.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000122.jpg b/services/our/src/tests/fixtures/prediction/frames/000122.jpg
new file mode 100644
index 0000000..acbe43e
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000122.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000123.jpg b/services/our/src/tests/fixtures/prediction/frames/000123.jpg
new file mode 100644
index 0000000..cfa7871
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000123.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000124.jpg b/services/our/src/tests/fixtures/prediction/frames/000124.jpg
new file mode 100644
index 0000000..87798fd
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000124.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000125.jpg b/services/our/src/tests/fixtures/prediction/frames/000125.jpg
new file mode 100644
index 0000000..f93e854
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000125.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000126.jpg b/services/our/src/tests/fixtures/prediction/frames/000126.jpg
new file mode 100644
index 0000000..4a8e5ac
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000126.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000127.jpg b/services/our/src/tests/fixtures/prediction/frames/000127.jpg
new file mode 100644
index 0000000..ee4cd48
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000127.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000128.jpg b/services/our/src/tests/fixtures/prediction/frames/000128.jpg
new file mode 100644
index 0000000..f07c335
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000128.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000129.jpg b/services/our/src/tests/fixtures/prediction/frames/000129.jpg
new file mode 100644
index 0000000..f46c862
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000129.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000130.jpg b/services/our/src/tests/fixtures/prediction/frames/000130.jpg
new file mode 100644
index 0000000..7ae7226
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000130.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000131.jpg b/services/our/src/tests/fixtures/prediction/frames/000131.jpg
new file mode 100644
index 0000000..cc5c050
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000131.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000132.jpg b/services/our/src/tests/fixtures/prediction/frames/000132.jpg
new file mode 100644
index 0000000..ca9c401
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000132.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000133.jpg b/services/our/src/tests/fixtures/prediction/frames/000133.jpg
new file mode 100644
index 0000000..a6db24b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000133.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000134.jpg b/services/our/src/tests/fixtures/prediction/frames/000134.jpg
new file mode 100644
index 0000000..402e8bf
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000134.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000135.jpg b/services/our/src/tests/fixtures/prediction/frames/000135.jpg
new file mode 100644
index 0000000..cf9ae6c
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000135.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000136.jpg b/services/our/src/tests/fixtures/prediction/frames/000136.jpg
new file mode 100644
index 0000000..f611b94
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000136.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000137.jpg b/services/our/src/tests/fixtures/prediction/frames/000137.jpg
new file mode 100644
index 0000000..4e60bcb
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000137.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000138.jpg b/services/our/src/tests/fixtures/prediction/frames/000138.jpg
new file mode 100644
index 0000000..d697c02
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000138.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000139.jpg b/services/our/src/tests/fixtures/prediction/frames/000139.jpg
new file mode 100644
index 0000000..6004994
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000139.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000140.jpg b/services/our/src/tests/fixtures/prediction/frames/000140.jpg
new file mode 100644
index 0000000..0dd7aa0
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000140.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000141.jpg b/services/our/src/tests/fixtures/prediction/frames/000141.jpg
new file mode 100644
index 0000000..3a4c56b
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000141.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000142.jpg b/services/our/src/tests/fixtures/prediction/frames/000142.jpg
new file mode 100644
index 0000000..802db6d
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000142.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000143.jpg b/services/our/src/tests/fixtures/prediction/frames/000143.jpg
new file mode 100644
index 0000000..b4dadff
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000143.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000144.jpg b/services/our/src/tests/fixtures/prediction/frames/000144.jpg
new file mode 100644
index 0000000..5bc290f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000144.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000145.jpg b/services/our/src/tests/fixtures/prediction/frames/000145.jpg
new file mode 100644
index 0000000..cfcc52f
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000145.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000146.jpg b/services/our/src/tests/fixtures/prediction/frames/000146.jpg
new file mode 100644
index 0000000..b11ee01
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000146.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000147.jpg b/services/our/src/tests/fixtures/prediction/frames/000147.jpg
new file mode 100644
index 0000000..6fbb106
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000147.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000148.jpg b/services/our/src/tests/fixtures/prediction/frames/000148.jpg
new file mode 100644
index 0000000..8aaf778
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000148.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/frames/000149.jpg b/services/our/src/tests/fixtures/prediction/frames/000149.jpg
new file mode 100644
index 0000000..94a7a06
Binary files /dev/null and b/services/our/src/tests/fixtures/prediction/frames/000149.jpg differ
diff --git a/services/our/src/tests/fixtures/prediction/labels/1.txt b/services/our/src/tests/fixtures/prediction/labels/1.txt
new file mode 100644
index 0000000..b1d4a41
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/1.txt
@@ -0,0 +1 @@
+54 0.038431 0.089941 0.063310 0.075142 53.145020
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/10.txt b/services/our/src/tests/fixtures/prediction/labels/10.txt
new file mode 100644
index 0000000..b5602a0
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/10.txt
@@ -0,0 +1 @@
+53 0.038782 0.087836 0.061486 0.073967 52.052288
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/100.txt b/services/our/src/tests/fixtures/prediction/labels/100.txt
new file mode 100644
index 0000000..38dad46
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/100.txt
@@ -0,0 +1 @@
+56 0.035719 0.076428 0.052471 0.062387 45.073280
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/101.txt b/services/our/src/tests/fixtures/prediction/labels/101.txt
new file mode 100644
index 0000000..689eab7
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/101.txt
@@ -0,0 +1 @@
+55 0.035468 0.077997 0.051584 0.064488 45.364609
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/102.txt b/services/our/src/tests/fixtures/prediction/labels/102.txt
new file mode 100644
index 0000000..c068591
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/102.txt
@@ -0,0 +1 @@
+49 0.037174 0.075309 0.052773 0.061913 42.606949
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/103.txt b/services/our/src/tests/fixtures/prediction/labels/103.txt
new file mode 100644
index 0000000..4a7839a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/103.txt
@@ -0,0 +1 @@
+49 0.036868 0.075512 0.051822 0.062220 42.845398
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/104.txt b/services/our/src/tests/fixtures/prediction/labels/104.txt
new file mode 100644
index 0000000..d5a8317
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/104.txt
@@ -0,0 +1 @@
+58 0.033982 0.077916 0.052823 0.061902 49.985241
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/105.txt b/services/our/src/tests/fixtures/prediction/labels/105.txt
new file mode 100644
index 0000000..9485f59
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/105.txt
@@ -0,0 +1 @@
+55 0.031318 0.063680 0.047338 0.051505 42.080074
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/106.txt b/services/our/src/tests/fixtures/prediction/labels/106.txt
new file mode 100644
index 0000000..9eb18ef
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/106.txt
@@ -0,0 +1 @@
+49 0.032635 0.051113 0.043934 0.045176 29.531828
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/107.txt b/services/our/src/tests/fixtures/prediction/labels/107.txt
new file mode 100644
index 0000000..937f351
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/107.txt
@@ -0,0 +1 @@
+59 0.029333 0.040158 0.037184 0.046115 42.523987
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/108.txt b/services/our/src/tests/fixtures/prediction/labels/108.txt
new file mode 100644
index 0000000..1538b63
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/108.txt
@@ -0,0 +1 @@
+60 0.023820 0.041723 0.024071 0.052091 51.896393
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/109.txt b/services/our/src/tests/fixtures/prediction/labels/109.txt
new file mode 100644
index 0000000..edd340f
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/109.txt
@@ -0,0 +1 @@
+59 0.028336 0.039560 0.034117 0.048055 45.588940
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/11.txt b/services/our/src/tests/fixtures/prediction/labels/11.txt
new file mode 100644
index 0000000..754f960
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/11.txt
@@ -0,0 +1 @@
+54 0.040177 0.089766 0.063404 0.075716 52.578529
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/110.txt b/services/our/src/tests/fixtures/prediction/labels/110.txt
new file mode 100644
index 0000000..d5e8fe1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/110.txt
@@ -0,0 +1 @@
+52 0.030120 0.048511 0.038019 0.047205 38.291862
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/111.txt b/services/our/src/tests/fixtures/prediction/labels/111.txt
new file mode 100644
index 0000000..433613d
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/111.txt
@@ -0,0 +1 @@
+51 0.028028 0.048727 0.035394 0.045787 41.533302
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/112.txt b/services/our/src/tests/fixtures/prediction/labels/112.txt
new file mode 100644
index 0000000..5f7e547
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/112.txt
@@ -0,0 +1 @@
+53 0.030124 0.056849 0.042351 0.057114 45.306530
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/113.txt b/services/our/src/tests/fixtures/prediction/labels/113.txt
new file mode 100644
index 0000000..5c030d4
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/113.txt
@@ -0,0 +1 @@
+53 0.031095 0.054593 0.043671 0.062581 45.146286
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/114.txt b/services/our/src/tests/fixtures/prediction/labels/114.txt
new file mode 100644
index 0000000..f86440f
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/114.txt
@@ -0,0 +1 @@
+55 0.032167 0.056456 0.045219 0.064320 46.130051
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/115.txt b/services/our/src/tests/fixtures/prediction/labels/115.txt
new file mode 100644
index 0000000..ab2b64d
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/115.txt
@@ -0,0 +1 @@
+46 0.022684 0.037057 0.020501 0.039577 37.016544
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/116.txt b/services/our/src/tests/fixtures/prediction/labels/116.txt
new file mode 100644
index 0000000..4d51bae
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/116.txt
@@ -0,0 +1 @@
+44 0.020022 0.036946 0.020763 0.039563 37.264973
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/117.txt b/services/our/src/tests/fixtures/prediction/labels/117.txt
new file mode 100644
index 0000000..8807154
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/117.txt
@@ -0,0 +1 @@
+46 0.023001 0.038526 0.025594 0.027946 25.011108
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/118.txt b/services/our/src/tests/fixtures/prediction/labels/118.txt
new file mode 100644
index 0000000..928fffd
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/118.txt
@@ -0,0 +1 @@
+45 0.021071 0.038914 0.026670 0.028368 23.412777
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/119.txt b/services/our/src/tests/fixtures/prediction/labels/119.txt
new file mode 100644
index 0000000..4f6551d
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/119.txt
@@ -0,0 +1 @@
+34 0.022739 0.043524 0.029497 0.030117 21.047352
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/12.txt b/services/our/src/tests/fixtures/prediction/labels/12.txt
new file mode 100644
index 0000000..a8d92d2
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/12.txt
@@ -0,0 +1 @@
+54 0.038738 0.088193 0.061146 0.073904 52.342270
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/120.txt b/services/our/src/tests/fixtures/prediction/labels/120.txt
new file mode 100644
index 0000000..2c3ce39
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/120.txt
@@ -0,0 +1 @@
+33 0.023468 0.047506 0.032993 0.033216 22.122324
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/121.txt b/services/our/src/tests/fixtures/prediction/labels/121.txt
new file mode 100644
index 0000000..da79eb3
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/121.txt
@@ -0,0 +1 @@
+29 0.024802 0.050099 0.036248 0.036333 23.996782
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/122.txt b/services/our/src/tests/fixtures/prediction/labels/122.txt
new file mode 100644
index 0000000..59d654b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/122.txt
@@ -0,0 +1 @@
+27 0.026263 0.054922 0.039299 0.039462 25.030342
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/123.txt b/services/our/src/tests/fixtures/prediction/labels/123.txt
new file mode 100644
index 0000000..c53b1bb
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/123.txt
@@ -0,0 +1 @@
+27 0.027968 0.059208 0.042927 0.041978 26.387854
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/124.txt b/services/our/src/tests/fixtures/prediction/labels/124.txt
new file mode 100644
index 0000000..c42c9f1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/124.txt
@@ -0,0 +1 @@
+27 0.026905 0.057451 0.040628 0.041066 26.058964
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/125.txt b/services/our/src/tests/fixtures/prediction/labels/125.txt
new file mode 100644
index 0000000..64969f2
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/125.txt
@@ -0,0 +1 @@
+28 0.027567 0.057046 0.041958 0.042930 27.190252
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/126.txt b/services/our/src/tests/fixtures/prediction/labels/126.txt
new file mode 100644
index 0000000..4131868
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/126.txt
@@ -0,0 +1 @@
+28 0.027424 0.058000 0.041726 0.043075 27.314507
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/127.txt b/services/our/src/tests/fixtures/prediction/labels/127.txt
new file mode 100644
index 0000000..b21cfc1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/127.txt
@@ -0,0 +1 @@
+28 0.027354 0.059303 0.041741 0.043003 27.271029
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/128.txt b/services/our/src/tests/fixtures/prediction/labels/128.txt
new file mode 100644
index 0000000..fee2376
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/128.txt
@@ -0,0 +1 @@
+28 0.027216 0.060089 0.041448 0.042873 27.201962
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/129.txt b/services/our/src/tests/fixtures/prediction/labels/129.txt
new file mode 100644
index 0000000..9cbbd6f
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/129.txt
@@ -0,0 +1 @@
+28 0.027259 0.059818 0.041481 0.042875 27.166683
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/13.txt b/services/our/src/tests/fixtures/prediction/labels/13.txt
new file mode 100644
index 0000000..dd3f9c0
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/13.txt
@@ -0,0 +1 @@
+55 0.038905 0.088440 0.061114 0.074878 52.844406
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/130.txt b/services/our/src/tests/fixtures/prediction/labels/130.txt
new file mode 100644
index 0000000..32bf287
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/130.txt
@@ -0,0 +1 @@
+28 0.027364 0.058919 0.041654 0.043002 27.260029
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/131.txt b/services/our/src/tests/fixtures/prediction/labels/131.txt
new file mode 100644
index 0000000..c324648
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/131.txt
@@ -0,0 +1 @@
+28 0.027422 0.059680 0.041713 0.043012 27.289568
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/132.txt b/services/our/src/tests/fixtures/prediction/labels/132.txt
new file mode 100644
index 0000000..641675b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/132.txt
@@ -0,0 +1 @@
+28 0.027505 0.060784 0.041890 0.042989 27.195068
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/133.txt b/services/our/src/tests/fixtures/prediction/labels/133.txt
new file mode 100644
index 0000000..cfad7df
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/133.txt
@@ -0,0 +1 @@
+28 0.027367 0.061949 0.041727 0.043011 27.209845
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/134.txt b/services/our/src/tests/fixtures/prediction/labels/134.txt
new file mode 100644
index 0000000..86f5737
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/134.txt
@@ -0,0 +1 @@
+28 0.027787 0.063247 0.042555 0.043069 27.263746
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/135.txt b/services/our/src/tests/fixtures/prediction/labels/135.txt
new file mode 100644
index 0000000..fa9b794
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/135.txt
@@ -0,0 +1 @@
+31 0.029057 0.066847 0.045142 0.044002 27.712589
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/136.txt b/services/our/src/tests/fixtures/prediction/labels/136.txt
new file mode 100644
index 0000000..a8cbcb8
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/136.txt
@@ -0,0 +1 @@
+47 0.038125 0.073041 0.063277 0.069168 46.141243
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/137.txt b/services/our/src/tests/fixtures/prediction/labels/137.txt
new file mode 100644
index 0000000..89cdeb6
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/137.txt
@@ -0,0 +1 @@
+48 0.038465 0.077648 0.063928 0.070589 47.159187
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/138.txt b/services/our/src/tests/fixtures/prediction/labels/138.txt
new file mode 100644
index 0000000..3af86a1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/138.txt
@@ -0,0 +1 @@
+48 0.038857 0.077233 0.064686 0.071919 47.977119
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/139.txt b/services/our/src/tests/fixtures/prediction/labels/139.txt
new file mode 100644
index 0000000..a859b20
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/139.txt
@@ -0,0 +1 @@
+49 0.039132 0.078201 0.065272 0.072841 48.427032
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/14.txt b/services/our/src/tests/fixtures/prediction/labels/14.txt
new file mode 100644
index 0000000..59ef193
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/14.txt
@@ -0,0 +1 @@
+56 0.041007 0.094351 0.065533 0.077863 53.407448
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/140.txt b/services/our/src/tests/fixtures/prediction/labels/140.txt
new file mode 100644
index 0000000..7a926ff
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/140.txt
@@ -0,0 +1 @@
+49 0.039132 0.079005 0.065348 0.073051 48.494751
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/141.txt b/services/our/src/tests/fixtures/prediction/labels/141.txt
new file mode 100644
index 0000000..910fd58
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/141.txt
@@ -0,0 +1 @@
+48 0.039090 0.075240 0.065312 0.072294 47.814663
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/142.txt b/services/our/src/tests/fixtures/prediction/labels/142.txt
new file mode 100644
index 0000000..9f25805
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/142.txt
@@ -0,0 +1 @@
+48 0.039028 0.076693 0.065173 0.072094 47.912033
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/143.txt b/services/our/src/tests/fixtures/prediction/labels/143.txt
new file mode 100644
index 0000000..3432488
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/143.txt
@@ -0,0 +1 @@
+48 0.038899 0.073056 0.064984 0.071549 47.317184
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/144.txt b/services/our/src/tests/fixtures/prediction/labels/144.txt
new file mode 100644
index 0000000..1c31a49
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/144.txt
@@ -0,0 +1 @@
+47 0.038281 0.067039 0.063682 0.068646 45.645699
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/145.txt b/services/our/src/tests/fixtures/prediction/labels/145.txt
new file mode 100644
index 0000000..949a350
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/145.txt
@@ -0,0 +1 @@
+47 0.037488 0.066094 0.062121 0.068092 46.430637
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/146.txt b/services/our/src/tests/fixtures/prediction/labels/146.txt
new file mode 100644
index 0000000..e5aa4dc
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/146.txt
@@ -0,0 +1 @@
+43 0.036806 0.065111 0.060806 0.064199 42.797428
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/147.txt b/services/our/src/tests/fixtures/prediction/labels/147.txt
new file mode 100644
index 0000000..4903cfd
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/147.txt
@@ -0,0 +1 @@
+43 0.036809 0.068780 0.060680 0.063662 42.322411
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/148.txt b/services/our/src/tests/fixtures/prediction/labels/148.txt
new file mode 100644
index 0000000..ac3a9f3
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/148.txt
@@ -0,0 +1 @@
+41 0.036440 0.072136 0.059879 0.061923 40.799137
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/149.txt b/services/our/src/tests/fixtures/prediction/labels/149.txt
new file mode 100644
index 0000000..7a14ba6
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/149.txt
@@ -0,0 +1 @@
+48 0.036187 0.067445 0.056100 0.063240 44.677353
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/15.txt b/services/our/src/tests/fixtures/prediction/labels/15.txt
new file mode 100644
index 0000000..ddeebd0
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/15.txt
@@ -0,0 +1 @@
+55 0.040299 0.095144 0.065489 0.078165 53.380753
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/16.txt b/services/our/src/tests/fixtures/prediction/labels/16.txt
new file mode 100644
index 0000000..fea4b94
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/16.txt
@@ -0,0 +1 @@
+55 0.040405 0.097322 0.066765 0.079255 53.374428
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/17.txt b/services/our/src/tests/fixtures/prediction/labels/17.txt
new file mode 100644
index 0000000..2735d71
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/17.txt
@@ -0,0 +1 @@
+55 0.038764 0.090667 0.063157 0.076659 53.355133
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/18.txt b/services/our/src/tests/fixtures/prediction/labels/18.txt
new file mode 100644
index 0000000..00b1802
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/18.txt
@@ -0,0 +1 @@
+53 0.038673 0.089891 0.063106 0.076448 53.004646
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/19.txt b/services/our/src/tests/fixtures/prediction/labels/19.txt
new file mode 100644
index 0000000..1b5cf50
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/19.txt
@@ -0,0 +1 @@
+53 0.038899 0.091212 0.063614 0.076383 52.351440
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/2.txt b/services/our/src/tests/fixtures/prediction/labels/2.txt
new file mode 100644
index 0000000..9a2b904
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/2.txt
@@ -0,0 +1 @@
+54 0.038586 0.088787 0.063747 0.075643 53.104782
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/20.txt b/services/our/src/tests/fixtures/prediction/labels/20.txt
new file mode 100644
index 0000000..9a91d09
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/20.txt
@@ -0,0 +1 @@
+53 0.037872 0.087844 0.061520 0.075063 52.219879
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/21.txt b/services/our/src/tests/fixtures/prediction/labels/21.txt
new file mode 100644
index 0000000..9d617e3
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/21.txt
@@ -0,0 +1 @@
+50 0.037195 0.086863 0.060343 0.073201 50.691704
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/22.txt b/services/our/src/tests/fixtures/prediction/labels/22.txt
new file mode 100644
index 0000000..20fb9a6
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/22.txt
@@ -0,0 +1 @@
+53 0.038759 0.092685 0.063432 0.076361 52.002579
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/23.txt b/services/our/src/tests/fixtures/prediction/labels/23.txt
new file mode 100644
index 0000000..cbebb54
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/23.txt
@@ -0,0 +1 @@
+52 0.040353 0.090205 0.065287 0.077373 51.746628
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/24.txt b/services/our/src/tests/fixtures/prediction/labels/24.txt
new file mode 100644
index 0000000..0473012
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/24.txt
@@ -0,0 +1 @@
+52 0.040583 0.091694 0.066280 0.077802 51.581718
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/25.txt b/services/our/src/tests/fixtures/prediction/labels/25.txt
new file mode 100644
index 0000000..6efe144
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/25.txt
@@ -0,0 +1 @@
+49 0.041297 0.094172 0.067527 0.076987 50.565460
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/26.txt b/services/our/src/tests/fixtures/prediction/labels/26.txt
new file mode 100644
index 0000000..411ea8a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/26.txt
@@ -0,0 +1 @@
+50 0.040312 0.090680 0.065473 0.075966 50.742157
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/27.txt b/services/our/src/tests/fixtures/prediction/labels/27.txt
new file mode 100644
index 0000000..458492e
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/27.txt
@@ -0,0 +1 @@
+50 0.039734 0.092913 0.064935 0.076198 50.960922
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/28.txt b/services/our/src/tests/fixtures/prediction/labels/28.txt
new file mode 100644
index 0000000..8608d0b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/28.txt
@@ -0,0 +1 @@
+48 0.040137 0.089994 0.065064 0.074114 49.276997
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/29.txt b/services/our/src/tests/fixtures/prediction/labels/29.txt
new file mode 100644
index 0000000..95eb993
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/29.txt
@@ -0,0 +1 @@
+47 0.040732 0.094854 0.067243 0.076296 49.356400
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/3.txt b/services/our/src/tests/fixtures/prediction/labels/3.txt
new file mode 100644
index 0000000..1bb0c4a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/3.txt
@@ -0,0 +1 @@
+54 0.038630 0.087661 0.063683 0.075626 52.907776
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/30.txt b/services/our/src/tests/fixtures/prediction/labels/30.txt
new file mode 100644
index 0000000..0782515
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/30.txt
@@ -0,0 +1 @@
+48 0.041461 0.093046 0.068027 0.076524 49.280266
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/31.txt b/services/our/src/tests/fixtures/prediction/labels/31.txt
new file mode 100644
index 0000000..7b30659
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/31.txt
@@ -0,0 +1 @@
+46 0.040502 0.082802 0.064679 0.074476 48.285706
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/32.txt b/services/our/src/tests/fixtures/prediction/labels/32.txt
new file mode 100644
index 0000000..ea5376b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/32.txt
@@ -0,0 +1 @@
+48 0.040258 0.083422 0.064046 0.075326 49.381264
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/33.txt b/services/our/src/tests/fixtures/prediction/labels/33.txt
new file mode 100644
index 0000000..61e917f
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/33.txt
@@ -0,0 +1 @@
+48 0.040601 0.090676 0.066223 0.076538 49.821045
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/34.txt b/services/our/src/tests/fixtures/prediction/labels/34.txt
new file mode 100644
index 0000000..0123411
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/34.txt
@@ -0,0 +1 @@
+46 0.039033 0.083210 0.063061 0.073626 48.440258
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/35.txt b/services/our/src/tests/fixtures/prediction/labels/35.txt
new file mode 100644
index 0000000..4d3ddb1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/35.txt
@@ -0,0 +1 @@
+43 0.032891 0.045700 0.029322 0.035714 35.217300
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/36.txt b/services/our/src/tests/fixtures/prediction/labels/36.txt
new file mode 100644
index 0000000..2cb5cb0
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/36.txt
@@ -0,0 +1 @@
+50 0.041740 0.059307 0.038156 0.048756 40.737473
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/37.txt b/services/our/src/tests/fixtures/prediction/labels/37.txt
new file mode 100644
index 0000000..d895592
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/37.txt
@@ -0,0 +1 @@
+51 0.043773 0.062391 0.039251 0.053317 44.349907
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/38.txt b/services/our/src/tests/fixtures/prediction/labels/38.txt
new file mode 100644
index 0000000..0aede67
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/38.txt
@@ -0,0 +1 @@
+50 0.044851 0.059177 0.037444 0.047610 41.626480
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/39.txt b/services/our/src/tests/fixtures/prediction/labels/39.txt
new file mode 100644
index 0000000..82fdf32
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/39.txt
@@ -0,0 +1 @@
+49 0.043650 0.054320 0.035061 0.041959 39.615734
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/4.txt b/services/our/src/tests/fixtures/prediction/labels/4.txt
new file mode 100644
index 0000000..e64aaf5
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/4.txt
@@ -0,0 +1 @@
+55 0.039047 0.089085 0.064675 0.076483 53.375942
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/40.txt b/services/our/src/tests/fixtures/prediction/labels/40.txt
new file mode 100644
index 0000000..da8a00b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/40.txt
@@ -0,0 +1 @@
+52 0.047915 0.067200 0.042890 0.058544 45.186440
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/41.txt b/services/our/src/tests/fixtures/prediction/labels/41.txt
new file mode 100644
index 0000000..7d1dba8
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/41.txt
@@ -0,0 +1 @@
+52 0.047528 0.066358 0.042432 0.058007 44.913727
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/42.txt b/services/our/src/tests/fixtures/prediction/labels/42.txt
new file mode 100644
index 0000000..eaa1cb1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/42.txt
@@ -0,0 +1 @@
+52 0.041072 0.056998 0.035125 0.052732 44.344086
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/43.txt b/services/our/src/tests/fixtures/prediction/labels/43.txt
new file mode 100644
index 0000000..cc1241e
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/43.txt
@@ -0,0 +1 @@
+51 0.043158 0.061411 0.039824 0.057852 44.955292
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/44.txt b/services/our/src/tests/fixtures/prediction/labels/44.txt
new file mode 100644
index 0000000..12f1502
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/44.txt
@@ -0,0 +1 @@
+48 0.039598 0.052803 0.031997 0.049200 40.695629
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/45.txt b/services/our/src/tests/fixtures/prediction/labels/45.txt
new file mode 100644
index 0000000..83a8aad
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/45.txt
@@ -0,0 +1 @@
+48 0.038581 0.050030 0.030199 0.045505 40.698929
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/46.txt b/services/our/src/tests/fixtures/prediction/labels/46.txt
new file mode 100644
index 0000000..6dfeb40
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/46.txt
@@ -0,0 +1 @@
+41 0.036938 0.043018 0.028460 0.033426 32.071121
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/47.txt b/services/our/src/tests/fixtures/prediction/labels/47.txt
new file mode 100644
index 0000000..9deee52
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/47.txt
@@ -0,0 +1 @@
+40 0.036963 0.042987 0.028471 0.033255 31.860889
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/48.txt b/services/our/src/tests/fixtures/prediction/labels/48.txt
new file mode 100644
index 0000000..864857a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/48.txt
@@ -0,0 +1 @@
+36 0.042042 0.054596 0.038157 0.050414 32.152676
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/49.txt b/services/our/src/tests/fixtures/prediction/labels/49.txt
new file mode 100644
index 0000000..8462647
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/49.txt
@@ -0,0 +1 @@
+36 0.042830 0.055505 0.039300 0.051146 32.325150
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/5.txt b/services/our/src/tests/fixtures/prediction/labels/5.txt
new file mode 100644
index 0000000..1499d38
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/5.txt
@@ -0,0 +1 @@
+53 0.039289 0.088586 0.064755 0.075773 52.296677
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/50.txt b/services/our/src/tests/fixtures/prediction/labels/50.txt
new file mode 100644
index 0000000..1864c11
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/50.txt
@@ -0,0 +1 @@
+39 0.041617 0.047316 0.032837 0.037152 32.227730
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/51.txt b/services/our/src/tests/fixtures/prediction/labels/51.txt
new file mode 100644
index 0000000..67dfaf5
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/51.txt
@@ -0,0 +1 @@
+39 0.041716 0.047384 0.032923 0.037170 32.099144
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/52.txt b/services/our/src/tests/fixtures/prediction/labels/52.txt
new file mode 100644
index 0000000..9770109
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/52.txt
@@ -0,0 +1 @@
+39 0.036623 0.042752 0.029092 0.031746 31.368042
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/53.txt b/services/our/src/tests/fixtures/prediction/labels/53.txt
new file mode 100644
index 0000000..a0aea58
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/53.txt
@@ -0,0 +1 @@
+39 0.036620 0.042687 0.029048 0.031663 31.362764
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/54.txt b/services/our/src/tests/fixtures/prediction/labels/54.txt
new file mode 100644
index 0000000..d11e013
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/54.txt
@@ -0,0 +1 @@
+41 0.038580 0.054718 0.037448 0.051601 35.002811
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/55.txt b/services/our/src/tests/fixtures/prediction/labels/55.txt
new file mode 100644
index 0000000..7655d83
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/55.txt
@@ -0,0 +1 @@
+41 0.037821 0.054225 0.036801 0.051092 34.945328
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/56.txt b/services/our/src/tests/fixtures/prediction/labels/56.txt
new file mode 100644
index 0000000..a7fb0ef
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/56.txt
@@ -0,0 +1 @@
+48 0.034458 0.054829 0.035582 0.055812 40.425453
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/57.txt b/services/our/src/tests/fixtures/prediction/labels/57.txt
new file mode 100644
index 0000000..015255f
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/57.txt
@@ -0,0 +1 @@
+48 0.034686 0.054091 0.035186 0.054277 40.062107
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/58.txt b/services/our/src/tests/fixtures/prediction/labels/58.txt
new file mode 100644
index 0000000..14426b9
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/58.txt
@@ -0,0 +1 @@
+57 0.038837 0.082894 0.062552 0.069445 51.872215
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/59.txt b/services/our/src/tests/fixtures/prediction/labels/59.txt
new file mode 100644
index 0000000..685a8f1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/59.txt
@@ -0,0 +1 @@
+32 0.022999 0.043750 0.022722 0.048968 31.945200
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/6.txt b/services/our/src/tests/fixtures/prediction/labels/6.txt
new file mode 100644
index 0000000..7e83cb9
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/6.txt
@@ -0,0 +1 @@
+54 0.040092 0.091829 0.066258 0.077107 52.671627
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/60.txt b/services/our/src/tests/fixtures/prediction/labels/60.txt
new file mode 100644
index 0000000..f405358
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/60.txt
@@ -0,0 +1 @@
+41 0.026247 0.049599 0.024864 0.050194 36.840691
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/61.txt b/services/our/src/tests/fixtures/prediction/labels/61.txt
new file mode 100644
index 0000000..3baa9e3
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/61.txt
@@ -0,0 +1 @@
+66 0.022907 0.039306 0.022662 0.046313 48.672504
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/62.txt b/services/our/src/tests/fixtures/prediction/labels/62.txt
new file mode 100644
index 0000000..7d0d892
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/62.txt
@@ -0,0 +1 @@
+57 0.039894 0.090226 0.061569 0.068168 51.285439
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/63.txt b/services/our/src/tests/fixtures/prediction/labels/63.txt
new file mode 100644
index 0000000..9d3b156
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/63.txt
@@ -0,0 +1 @@
+54 0.048924 0.091334 0.059758 0.067995 50.548450
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/64.txt b/services/our/src/tests/fixtures/prediction/labels/64.txt
new file mode 100644
index 0000000..3b71f65
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/64.txt
@@ -0,0 +1 @@
+58 0.039831 0.087696 0.062446 0.068166 53.084751
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/65.txt b/services/our/src/tests/fixtures/prediction/labels/65.txt
new file mode 100644
index 0000000..db561b8
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/65.txt
@@ -0,0 +1 @@
+58 0.040612 0.090068 0.065153 0.071738 54.392399
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/66.txt b/services/our/src/tests/fixtures/prediction/labels/66.txt
new file mode 100644
index 0000000..2cb3e26
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/66.txt
@@ -0,0 +1 @@
+60 0.041616 0.093175 0.065634 0.073091 55.869972
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/67.txt b/services/our/src/tests/fixtures/prediction/labels/67.txt
new file mode 100644
index 0000000..b418ac6
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/67.txt
@@ -0,0 +1 @@
+56 0.040496 0.086040 0.062963 0.069799 53.591637
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/68.txt b/services/our/src/tests/fixtures/prediction/labels/68.txt
new file mode 100644
index 0000000..2e7ee85
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/68.txt
@@ -0,0 +1 @@
+59 0.041022 0.083298 0.064152 0.072956 55.851673
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/69.txt b/services/our/src/tests/fixtures/prediction/labels/69.txt
new file mode 100644
index 0000000..ce017be
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/69.txt
@@ -0,0 +1 @@
+62 0.043478 0.091953 0.069978 0.079008 58.172695
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/7.txt b/services/our/src/tests/fixtures/prediction/labels/7.txt
new file mode 100644
index 0000000..6016a81
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/7.txt
@@ -0,0 +1 @@
+55 0.039878 0.092010 0.065897 0.077365 53.188076
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/70.txt b/services/our/src/tests/fixtures/prediction/labels/70.txt
new file mode 100644
index 0000000..492af89
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/70.txt
@@ -0,0 +1 @@
+53 0.034369 0.058474 0.056676 0.065891 48.764679
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/71.txt b/services/our/src/tests/fixtures/prediction/labels/71.txt
new file mode 100644
index 0000000..d3200f5
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/71.txt
@@ -0,0 +1 @@
+54 0.034419 0.063677 0.056727 0.065873 48.853603
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/72.txt b/services/our/src/tests/fixtures/prediction/labels/72.txt
new file mode 100644
index 0000000..cdbbd9a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/72.txt
@@ -0,0 +1 @@
+53 0.034378 0.063580 0.056653 0.065783 48.770065
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/73.txt b/services/our/src/tests/fixtures/prediction/labels/73.txt
new file mode 100644
index 0000000..00696ad
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/73.txt
@@ -0,0 +1 @@
+54 0.034456 0.063362 0.056788 0.065928 48.954887
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/74.txt b/services/our/src/tests/fixtures/prediction/labels/74.txt
new file mode 100644
index 0000000..ec57a03
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/74.txt
@@ -0,0 +1 @@
+54 0.034375 0.059440 0.056584 0.065834 48.820354
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/75.txt b/services/our/src/tests/fixtures/prediction/labels/75.txt
new file mode 100644
index 0000000..ccea3bd
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/75.txt
@@ -0,0 +1 @@
+54 0.034421 0.059616 0.056723 0.066008 48.958206
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/76.txt b/services/our/src/tests/fixtures/prediction/labels/76.txt
new file mode 100644
index 0000000..4c9e2ed
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/76.txt
@@ -0,0 +1 @@
+54 0.034434 0.059725 0.056748 0.066033 48.979515
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/77.txt b/services/our/src/tests/fixtures/prediction/labels/77.txt
new file mode 100644
index 0000000..f72eaf4
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/77.txt
@@ -0,0 +1 @@
+54 0.034548 0.054414 0.057141 0.066319 49.319530
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/78.txt b/services/our/src/tests/fixtures/prediction/labels/78.txt
new file mode 100644
index 0000000..8c5635e
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/78.txt
@@ -0,0 +1 @@
+54 0.034338 0.052701 0.056745 0.066531 49.484806
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/79.txt b/services/our/src/tests/fixtures/prediction/labels/79.txt
new file mode 100644
index 0000000..758062c
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/79.txt
@@ -0,0 +1 @@
+54 0.034612 0.054135 0.057341 0.066714 49.643581
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/8.txt b/services/our/src/tests/fixtures/prediction/labels/8.txt
new file mode 100644
index 0000000..4b37b3b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/8.txt
@@ -0,0 +1 @@
+52 0.039667 0.088961 0.064458 0.075846 52.022839
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/80.txt b/services/our/src/tests/fixtures/prediction/labels/80.txt
new file mode 100644
index 0000000..3ae0bef
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/80.txt
@@ -0,0 +1 @@
+54 0.034607 0.054053 0.057334 0.066706 49.647636
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/81.txt b/services/our/src/tests/fixtures/prediction/labels/81.txt
new file mode 100644
index 0000000..02a32d1
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/81.txt
@@ -0,0 +1 @@
+54 0.034249 0.053221 0.056632 0.066137 49.059483
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/82.txt b/services/our/src/tests/fixtures/prediction/labels/82.txt
new file mode 100644
index 0000000..9426df9
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/82.txt
@@ -0,0 +1 @@
+54 0.034260 0.053261 0.056656 0.066161 49.091011
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/83.txt b/services/our/src/tests/fixtures/prediction/labels/83.txt
new file mode 100644
index 0000000..be803d0
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/83.txt
@@ -0,0 +1 @@
+46 0.035543 0.078270 0.053312 0.060655 39.456207
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/84.txt b/services/our/src/tests/fixtures/prediction/labels/84.txt
new file mode 100644
index 0000000..a16151d
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/84.txt
@@ -0,0 +1 @@
+47 0.035702 0.079416 0.054139 0.061860 40.916161
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/85.txt b/services/our/src/tests/fixtures/prediction/labels/85.txt
new file mode 100644
index 0000000..802f54d
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/85.txt
@@ -0,0 +1 @@
+44 0.035436 0.079698 0.053465 0.059294 37.065166
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/86.txt b/services/our/src/tests/fixtures/prediction/labels/86.txt
new file mode 100644
index 0000000..3cb891b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/86.txt
@@ -0,0 +1 @@
+39 0.034088 0.075423 0.050748 0.055254 32.651058
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/87.txt b/services/our/src/tests/fixtures/prediction/labels/87.txt
new file mode 100644
index 0000000..ecabf64
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/87.txt
@@ -0,0 +1 @@
+39 0.032986 0.070509 0.048970 0.054720 32.961876
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/88.txt b/services/our/src/tests/fixtures/prediction/labels/88.txt
new file mode 100644
index 0000000..2c81227
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/88.txt
@@ -0,0 +1 @@
+34 0.032306 0.068780 0.047561 0.052743 30.510756
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/89.txt b/services/our/src/tests/fixtures/prediction/labels/89.txt
new file mode 100644
index 0000000..92fcf70
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/89.txt
@@ -0,0 +1 @@
+33 0.031765 0.067288 0.046688 0.050976 29.676157
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/9.txt b/services/our/src/tests/fixtures/prediction/labels/9.txt
new file mode 100644
index 0000000..63a0b1c
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/9.txt
@@ -0,0 +1 @@
+53 0.039416 0.087546 0.062930 0.075004 51.850227
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/90.txt b/services/our/src/tests/fixtures/prediction/labels/90.txt
new file mode 100644
index 0000000..dadb00a
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/90.txt
@@ -0,0 +1 @@
+32 0.032639 0.069295 0.046686 0.049750 28.727793
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/91.txt b/services/our/src/tests/fixtures/prediction/labels/91.txt
new file mode 100644
index 0000000..4a1e1b3
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/91.txt
@@ -0,0 +1 @@
+34 0.032972 0.061634 0.045092 0.051609 29.038794
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/92.txt b/services/our/src/tests/fixtures/prediction/labels/92.txt
new file mode 100644
index 0000000..956e47b
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/92.txt
@@ -0,0 +1 @@
+34 0.034734 0.065177 0.044635 0.050590 28.128407
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/93.txt b/services/our/src/tests/fixtures/prediction/labels/93.txt
new file mode 100644
index 0000000..92df475
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/93.txt
@@ -0,0 +1 @@
+34 0.032320 0.056962 0.042639 0.047532 27.319426
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/94.txt b/services/our/src/tests/fixtures/prediction/labels/94.txt
new file mode 100644
index 0000000..9ac2a36
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/94.txt
@@ -0,0 +1 @@
+36 0.031656 0.055654 0.040966 0.049437 28.343576
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/95.txt b/services/our/src/tests/fixtures/prediction/labels/95.txt
new file mode 100644
index 0000000..4546e86
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/95.txt
@@ -0,0 +1 @@
+34 0.031890 0.055906 0.042168 0.049285 28.531000
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/96.txt b/services/our/src/tests/fixtures/prediction/labels/96.txt
new file mode 100644
index 0000000..1d3e469
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/96.txt
@@ -0,0 +1 @@
+32 0.034397 0.063852 0.044452 0.051638 29.653748
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/97.txt b/services/our/src/tests/fixtures/prediction/labels/97.txt
new file mode 100644
index 0000000..b57ac97
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/97.txt
@@ -0,0 +1 @@
+32 0.035273 0.066313 0.045359 0.051649 29.548565
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/98.txt b/services/our/src/tests/fixtures/prediction/labels/98.txt
new file mode 100644
index 0000000..fed89b6
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/98.txt
@@ -0,0 +1 @@
+36 0.035006 0.063150 0.044154 0.051334 30.672239
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/prediction/labels/99.txt b/services/our/src/tests/fixtures/prediction/labels/99.txt
new file mode 100644
index 0000000..1619706
--- /dev/null
+++ b/services/our/src/tests/fixtures/prediction/labels/99.txt
@@ -0,0 +1 @@
+61 0.035569 0.067777 0.045799 0.061890 44.171967
\ No newline at end of file
diff --git a/services/our/src/tests/fixtures/sample.mp4 b/services/our/src/tests/fixtures/sample.mp4
new file mode 100644
index 0000000..84fbb4a
Binary files /dev/null and b/services/our/src/tests/fixtures/sample.mp4 differ
diff --git a/services/our/src/tests/funscripts.integration.test.ts b/services/our/src/tests/funscripts.integration.test.ts
new file mode 100644
index 0000000..37ca9cd
--- /dev/null
+++ b/services/our/src/tests/funscripts.integration.test.ts
@@ -0,0 +1,47 @@
+// funscripts.integration.ts
+import { describe, it, expect, vi, beforeEach, afterEach, beforeAll } from 'vitest';
+import {
+ buildFunscript,
+} from '../utils/funscripts';
+import { readFile, mkdir, rm } from 'fs-extra';
+import { join } from 'node:path';
+import { tmpdir } from 'node:os';
+
+
+// Integration test (no mocks)
+describe('[integration] buildFunscript', () => {
+ const TMP_DIR = join(tmpdir(), 'funscript-test');
+
+ beforeAll(() => {
+ vi.doUnmock('fs-extra');
+ });
+
+ beforeEach(async () => {
+ await mkdir(TMP_DIR, { recursive: true });
+ });
+
+ afterEach(async () => {
+ await rm(TMP_DIR, { recursive: true, force: true });
+ });
+
+ it('builds a full funscript from mock data', async () => {
+ // Provide paths to real or fixture data.
+ const predictionOutput = join(__dirname, 'fixtures', 'prediction');
+ const videoPath = join(__dirname, 'fixtures', 'sample.mp4');
+ const dataYamlPath = join(__dirname, 'fixtures', 'data.yaml');
+
+ const outputPath = await buildFunscript(dataYamlPath, predictionOutput, videoPath);
+ console.log(`built funscript at ${outputPath}`)
+
+
+ const content = JSON.parse(await readFile(outputPath, 'utf8') as string);
+
+ expect(content).toHaveProperty('version', '1.0');
+ expect(Array.isArray(content.actions)).toBe(true);
+
+ const allPosZero = content.actions.every((a: any) => a.pos === 0);
+ expect(allPosZero).toBe(false); // if this fails, it means the funscript did not generate position values that map to the various detected classes
+
+ expect(content.actions.length).toBeGreaterThan(0);
+ }, 30_000);
+});
diff --git a/services/our/src/tests/funscripts.unit.test.ts b/services/our/src/tests/funscripts.unit.test.ts
new file mode 100644
index 0000000..8901e82
--- /dev/null
+++ b/services/our/src/tests/funscripts.unit.test.ts
@@ -0,0 +1,93 @@
+// funscripts.unit.ts
+import { describe, it, expect, vi, beforeEach, afterEach, beforeAll } from 'vitest';
+import {
+ loadClassPositionMap,
+ generatePatternPositions,
+ generateActions,
+ writeFunscript,
+ buildFunscript,
+ type FunscriptAction,
+ type DataYaml,
+ type Detection,
+ type ClassPositionMap,
+} from '../utils/funscripts';
+import { writeJson, readFile } from 'fs-extra';
+import { join } from 'node:path';
+import { tmpdir } from 'node:os';
+import { mkdir, rm } from 'node:fs/promises';
+
+vi.mock('fs-extra', async () => {
+ const actual = await vi.importActual('fs-extra');
+ return {
+ ...actual,
+ writeJson: vi.fn(),
+ readFile: vi.fn(),
+ };
+});
+
+const mockedWriteJson = vi.mocked(writeJson);
+
+
+
+
+describe('funscript utils', () => {
+ describe('loadClassPositionMap', () => {
+ it('maps known and unknown class names correctly', async () => {
+ const data: DataYaml = {
+ names: { '0': 'RespondingTo', '1': 'UnknownClass' },
+ path: '',
+ train: '',
+ val: ''
+ };
+ const result = await loadClassPositionMap(data);
+ expect(result.RespondingTo).toBe(5);
+ expect(result.UnknownClass).toBe(0);
+ });
+ });
+
+ describe('generatePatternPositions', () => {
+ it('generates wave pattern correctly', () => {
+ const actions = generatePatternPositions(0, 1000, 'Wave', 30);
+ expect(actions.length).toBeGreaterThan(0);
+ expect(actions.some(a => a.pos > 0)).toBe(true);
+ });
+ });
+
+ describe('generateActions', () => {
+ const mockSegments: Detection[] = [
+ { startFrame: 0, endFrame: 29, className: 'LowLevel' },
+ { startFrame: 30, endFrame: 59, className: 'Wave' }
+ ];
+
+ const classMap: ClassPositionMap = {
+ LowLevel: 20,
+ Wave: 'pattern',
+ };
+
+
+ it('generates both static and pattern-based actions', () => {
+ const actions = generateActions(2000, 30, mockSegments, classMap);
+ const waveActions = actions.filter(a => a.pos !== 20);
+ expect(actions.length).toBeGreaterThan(0);
+ expect(waveActions.length).toBeGreaterThan(0);
+ });
+ });
+
+ describe('writeFunscript', () => {
+ it('writes a JSON funscript to disk', async () => {
+ const actions: FunscriptAction[] = [
+ { at: 0, pos: 20 },
+ { at: 100, pos: 30 }
+ ];
+
+ const outputPath = '/fake/path.funscript';
+ mockedWriteJson.mockResolvedValue(undefined);
+
+ await writeFunscript(outputPath, actions);
+ expect(mockedWriteJson).toHaveBeenCalledWith(
+ outputPath,
+ { version: '1.0', actions }
+ );
+ });
+ });
+});
diff --git a/services/our/src/tests/vibeui.spec.ts b/services/our/src/tests/vibeui.spec.ts
new file mode 100644
index 0000000..a0c4670
--- /dev/null
+++ b/services/our/src/tests/vibeui.spec.ts
@@ -0,0 +1,125 @@
+import { describe, it, expect, beforeAll, afterAll, beforeEach, vi, type Mock } from 'vitest';
+import { vibeuiInference, processLabelFiles } from '../utils/vibeui';
+import { resolve, join } from 'node:path';
+import { readdir, readFile, rm } from 'node:fs/promises';
+import { DataYaml } from '../utils/funscripts';
+
+const __dirname = import.meta.dirname;
+const FIXTURE_DIR = resolve(__dirname, 'fixtures');
+const DIST_DIR = resolve(__dirname, '..', '..', 'dist');
+const VIBEUI_DIR = resolve(DIST_DIR, 'vibeui');
+const VIDEO = resolve(FIXTURE_DIR, 'sample.mp4');
+const MODEL = resolve(VIBEUI_DIR, 'vibeui.onnx');
+const YAML = resolve(VIBEUI_DIR, 'data.yaml');
+
+describe('[unit] processLabelFiles', () => {
+ const mockLabelDir = '/mock/labels';
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('processes label files and returns merged detection segments', async () => {
+ // Mock data.names with string keys for class indexes
+ const data: DataYaml = {
+ names: {
+ '0': 'person',
+ '1': 'car',
+ },
+ path: '',
+ train: '',
+ val: '',
+ };
+
+ // Mock file list in directory
+ (readdir as Mock).mockResolvedValue([
+ '0.txt',
+ '1.txt',
+ 'invalid.txt',
+ 'notalabel.jpg',
+ '2.txt',
+ ]);
+
+ // Mock content for each label file
+ (readFile as Mock).mockImplementation(async (filePath: string) => {
+ const file = filePath.split('/').pop();
+ switch (file) {
+ case '0.txt':
+ // Two detections, only one with confidence >= 0.7
+ return '0 0.1 0.2 0.3 0.4 0.6\n1 0.5 0.5 0.5 0.5 0.8';
+ case '1.txt':
+ // One detection below threshold
+ return '0 0.1 0.2 0.3 0.4 0.5';
+ case '2.txt':
+ // Multiple lines, highest confidence 0.9 for class 0
+ return '0 0.1 0.2 0.3 0.4 0.9\n1 0.2 0.3 0.4 0.5 0.85';
+ default:
+ return '';
+ }
+ });
+
+ const results = await processLabelFiles(mockLabelDir, data);
+
+ // Expected:
+ // - frame 0: class 1 (car), confidence 0.8
+ // - frame 1: no detection >= 0.7
+ // - frame 2: class 0 (person), confidence 0.9 (higher than class 1's 0.85)
+ // Merge segments by className:
+ // Since frame 0 detection is 'car', frame 2 detection is 'person', segments should not merge.
+ expect(results).toEqual([
+ { startFrame: 0, endFrame: 0, className: 'car' },
+ { startFrame: 2, endFrame: 2, className: 'person' },
+ ]);
+ });
+
+ it('skips files with invalid filenames or frame indices', async () => {
+ (readdir as Mock).mockResolvedValue(['abc.txt', '123.txt']);
+ (readFile as Mock).mockResolvedValue('0 0.1 0.2 0.3 0.4 0.75');
+
+ const data = { names: { '0': 'person' }, val: '', train: '', path: '' };
+ const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
+
+ const results = await processLabelFiles(mockLabelDir, data);
+
+ expect(consoleSpy).toHaveBeenCalledWith('Skipping invalid filename: abc.txt');
+ expect(results).toEqual([
+ { startFrame: 123, endFrame: 123, className: 'person' },
+ ]);
+
+ consoleSpy.mockRestore();
+ });
+});
+
+describe('[integration] vibeuiInference', () => {
+ let outputPath: string;
+
+
+ beforeAll(async () => {
+ outputPath = await vibeuiInference(MODEL, VIDEO);
+ }, 35_000);
+
+ afterAll(async () => {
+ await rm(outputPath, { recursive: true, force: true });
+ });
+
+ it('outputs detection labels and frames', async () => {
+ const frames = await readdir(join(outputPath, 'frames'));
+ const labels = await readdir(join(outputPath, 'labels'));
+ expect(frames.length).toBeGreaterThan(0);
+ expect(labels.length).toBeGreaterThan(0);
+ });
+
+ it('writes properly formatted label files', async () => {
+ const labelFile = join(outputPath, 'labels', '1.txt');
+ const content = await readFile(labelFile, 'utf8');
+
+ const firstLine = content.split('\n')[0].trim().replace(/\r/g, '');
+ console.log('First line content:', JSON.stringify(firstLine));
+
+ // Expect initial class number + exactly 5 floats/ints after it (6 total numbers)
+ expect(firstLine).toMatch(/^\d+( (-?\d+(\.\d+)?)){5}$/);
+ });
+
+
+
+});
diff --git a/services/our/src/utils/filesystem.ts b/services/our/src/utils/filesystem.ts
index 0aed58b..d8a5bf0 100644
--- a/services/our/src/utils/filesystem.ts
+++ b/services/our/src/utils/filesystem.ts
@@ -25,3 +25,5 @@ export function extractBasePath(filePath: string): string {
const baseParts = parts.slice(0, 3);
return "/" + baseParts.join("/") + "/";
}
+
+
diff --git a/services/our/src/utils/funscripts.ts b/services/our/src/utils/funscripts.ts
new file mode 100644
index 0000000..b8532e4
--- /dev/null
+++ b/services/our/src/utils/funscripts.ts
@@ -0,0 +1,207 @@
+import { join } from "node:path";
+import { writeJson } from "fs-extra";
+import { env } from "../config/env";
+import { nanoid } from "nanoid";
+import { loadDataYaml, loadVideoMetadata, processLabelFiles } from "./vibeui";
+
+export interface FunscriptAction {
+ at: number;
+ pos: number;
+}
+
+export interface Funscript {
+ version: string;
+ actions: FunscriptAction[];
+}
+
+export interface DataYaml {
+ path: string;
+ train: string;
+ val: string;
+ names: Record;
+}
+
+export interface Detection {
+ startFrame: number;
+ endFrame: number;
+ className: string;
+}
+
+export interface ClassPositionMap {
+ [className: string]: number | 'pattern';
+}
+
+
+export async function loadClassPositionMap(data: DataYaml): Promise {
+ try {
+
+ if (
+ !data ||
+ typeof data !== 'object' ||
+ !('names' in data) ||
+ typeof data.names !== 'object' ||
+ data.names === null ||
+ Object.keys(data.names).length === 0
+ ) {
+ throw new Error('Invalid data.yaml: "names" field is missing, not an object, or empty');
+ }
+
+ const positionMap: ClassPositionMap = {
+ RespondingTo: 5,
+ ControlledByTipper: 50,
+ ControlledByTipperHigh: 80,
+ ControlledByTipperLow: 20,
+ ControlledByTipperMedium: 50,
+ ControlledByTipperUltrahigh: 100,
+ Ring1: 30,
+ Ring2: 40,
+ Ring3: 50,
+ Ring4: 60,
+ Earthquake: 'pattern',
+ Fireworks: 'pattern',
+ Pulse: 'pattern',
+ Wave: 'pattern',
+ Pause: 0,
+ RandomTime: 70,
+ HighLevel: 80,
+ LowLevel: 20,
+ MediumLevel: 50,
+ UltraHighLevel: 95
+ };
+
+ const names = Object.values(data.names);
+ for (const name of names) {
+ if (typeof name !== 'string' || name.trim() === '') {
+ console.log(`Skipping invalid class name: ${name}`);
+ continue;
+ }
+ if (!(name in positionMap)) {
+ console.log(`No position mapping for class "${name}", defaulting to 0`);
+ positionMap[name] = 0;
+ }
+ }
+
+ console.log(`Loaded class position map: ${JSON.stringify(positionMap)}`);
+ return positionMap;
+ } catch (error) {
+ console.error(`Error loading data.yaml: ${error instanceof Error ? error.message : 'Unknown error'}`);
+ throw error;
+ }
+}
+
+export function generatePatternPositions(startMs: number, durationMs: number, className: string, fps: number): FunscriptAction[] {
+ const actions: FunscriptAction[] = [];
+ const frameDurationMs = 1000 / fps;
+ const totalFrames = Math.floor(durationMs / frameDurationMs);
+ const intervalMs = 100;
+
+ for (let timeMs = 0; timeMs < durationMs; timeMs += intervalMs) {
+ const progress = timeMs / durationMs;
+ let pos = 0;
+
+ switch (className) {
+ case 'Pulse':
+ pos = Math.round(50 * Math.sin(progress * 2 * Math.PI));
+ break;
+ case 'Wave':
+ pos = Math.round(50 + 50 * Math.sin(progress * 2 * Math.PI));
+ break;
+ case 'Fireworks':
+ pos = Math.random() > 0.5 ? 80 : 0;
+ break;
+ case 'Earthquake':
+ pos = Math.round(90 * Math.sin(progress * 4 * Math.PI) + (Math.random() - 0.5) * 10);
+ pos = Math.max(0, Math.min(90, pos));
+ break;
+ }
+
+ actions.push({ at: startMs + timeMs, pos });
+ }
+
+ return actions;
+}
+
+
+
+export function generateActions(totalDurationMs: number, fps: number, detectionSegments: Detection[], classPositionMap: ClassPositionMap): FunscriptAction[] {
+ const intervalMs = 100;
+ const actions: FunscriptAction[] = [];
+
+ // Generate static position actions
+ for (let timeMs = 0; timeMs <= totalDurationMs; timeMs += intervalMs) {
+ const frameIndex = Math.floor((timeMs / 1000) * fps);
+ let position = 0;
+
+ for (const segment of detectionSegments) {
+ if (frameIndex >= segment.startFrame && frameIndex <= segment.endFrame) {
+ const className = segment.className;
+ if (typeof classPositionMap[className] === 'number') {
+ position = classPositionMap[className];
+ break;
+ }
+ }
+ }
+ actions.push({ at: timeMs, pos: position });
+ }
+
+ // Overlay pattern-based actions
+ for (const segment of detectionSegments) {
+ const className = segment.className;
+ if (classPositionMap[className] === 'pattern') {
+ const startMs = Math.floor((segment.startFrame / fps) * 1000);
+ const durationMs = Math.floor(((segment.endFrame - segment.startFrame + 1) / fps) * 1000);
+ const patternActions = generatePatternPositions(startMs, durationMs, className, fps);
+ actions.push(...patternActions);
+ }
+ }
+
+ // Sort actions by time and remove duplicates
+ actions.sort((a, b) => a.at - b.at);
+ const uniqueActions: FunscriptAction[] = [];
+ let lastTime = -1;
+ for (const action of actions) {
+ if (action.at !== lastTime) {
+ uniqueActions.push(action);
+ lastTime = action.at;
+ }
+ }
+
+ return uniqueActions;
+}
+
+export async function writeFunscript(outputPath: string, actions: FunscriptAction[]) {
+ const funscript: Funscript = { version: '1.0', actions };
+
+ await writeJson(outputPath, funscript);
+ console.log(`Funscript generated: ${outputPath} (${actions.length} actions)`);
+ console.log(funscript)
+}
+
+
+
+export async function buildFunscript(
+ dataYamlPath: string,
+ predictionOutput: string,
+ videoPath: string
+): Promise {
+ const labelDir = join(predictionOutput, 'labels');
+ const outputPath = join(process.env.CACHE_ROOT ?? '/tmp', `${nanoid()}.funscript`);
+ console.log(`Starting Funscript generation. outputPath=${outputPath}`);
+
+ try {
+
+ const data = await loadDataYaml(dataYamlPath)
+ const classPositionMap = await loadClassPositionMap(data);
+ const { fps, totalFrames } = await loadVideoMetadata(videoPath);
+ const detectionSegments = await processLabelFiles(labelDir, data);
+ const totalDurationMs = Math.floor((totalFrames / fps) * 1000);
+ const actions = generateActions(totalDurationMs, fps, detectionSegments, classPositionMap);
+ await writeFunscript(outputPath, actions);
+ return outputPath;
+
+ } catch (error) {
+ console.error(`Error generating Funscript: ${error instanceof Error ? error.message : 'Unknown error'}`);
+ throw error;
+ }
+}
+
diff --git a/services/our/src/utils/nanoSpawn.ts b/services/our/src/utils/nanoSpawn.ts
index 4e00c6b..9bee9e0 100644
--- a/services/our/src/utils/nanoSpawn.ts
+++ b/services/our/src/utils/nanoSpawn.ts
@@ -1,7 +1,12 @@
// utils/nanoSpawn.ts
// we do this because we need to use dynamic import() when using ESM only module via tsup CJS interop.
+
+let nanoSpawnPromise: Promise | null = null;
+
export async function getNanoSpawn() {
- const nanoSpawn = (await import('nano-spawn')).default;
- return nanoSpawn
+ if (!nanoSpawnPromise) {
+ nanoSpawnPromise = import('nano-spawn').then(m => m.default);
+ }
+ return nanoSpawnPromise;
}
\ No newline at end of file
diff --git a/services/our/src/utils/vibeui.ts b/services/our/src/utils/vibeui.ts
new file mode 100644
index 0000000..11f223d
--- /dev/null
+++ b/services/our/src/utils/vibeui.ts
@@ -0,0 +1,308 @@
+import path from 'node:path';
+import * as ort from 'onnxruntime-node';
+import { nanoid } from "nanoid";
+import { join, basename, extname } from "node:path";
+import { readFile, writeFile, readdir, mkdir } from 'node:fs/promises';
+import yaml from 'js-yaml';
+import { getNanoSpawn } from "./nanoSpawn";
+import { existsSync, mkdirSync, rmSync } from "node:fs";
+import which from "which";
+import { env } from '../config/env';
+
+interface Detection {
+ startFrame: number;
+ endFrame: number;
+ className: string;
+}
+
+interface DataYaml {
+ path: string;
+ train: string;
+ val: string;
+ names: Record;
+}
+
+
+interface DetectionOutput {
+ classIndex: number;
+ confidence: number;
+ bbox: [number, number, number, number]; // e.g. [x, y, width, height]
+}
+
+
+
+export async function extractFrames(videoPath: string, framesDir: string) {
+ const spawn = await getNanoSpawn()
+ await mkdir(framesDir, { recursive: true });
+
+ await spawn('ffmpeg', [
+ '-i', videoPath,
+ join(framesDir, '%06d.jpg'),
+ ]);
+}
+
+export async function preprocessImage(imagePath: string): Promise {
+ // This is highly dependent on your model input
+ // Typically:
+ // - Read image
+ // - Resize to model input size (e.g., 640x640)
+ // - Normalize pixel values (e.g., divide by 255)
+ // - Change shape to [batch_size, channels, height, width]
+ // For example, using sharp:
+ const sharp = await import('sharp');
+ const inputWidth = 640;
+ const inputHeight = 640;
+
+ const imageBuffer = await sharp.default(imagePath)
+ .resize(inputWidth, inputHeight)
+ .removeAlpha()
+ .raw()
+ .toBuffer();
+
+ // Convert to Float32Array, normalize, and change to CHW format
+ const floatArray = new Float32Array(inputWidth * inputHeight * 3);
+ for (let i = 0; i < inputWidth * inputHeight; i++) {
+ // RGB channels
+ for (let c = 0; c < 3; c++) {
+ floatArray[c * inputWidth * inputHeight + i] = imageBuffer[i * 3 + c] / 255;
+ }
+ }
+
+ // Create tensor of shape [1, 3, 640, 640]
+ return new ort.Tensor('float32', floatArray, [1, 3, inputHeight, inputWidth]);
+}
+
+export async function runInferenceOnFrame(session: ort.InferenceSession, tensor: ort.Tensor): Promise {
+ // The input name depends on your ONNX model, often 'images' or similar.
+ const feeds: Record = {};
+ const inputName = session.inputNames[0];
+ feeds[inputName] = tensor;
+
+ const results = await session.run(feeds);
+ // You need to parse outputs according to your ONNX model
+
+ // Example:
+ // Let's say outputNames: ['boxes', 'scores', 'labels']
+ // This depends on your model. For YOLO models, outputs vary by implementation.
+
+ // For demonstration, let's assume single output with shape [num_detections, 6]
+ // where each row = [x, y, w, h, confidence, classIndex]
+
+ const outputName = session.outputNames[0];
+ const output = results[outputName];
+
+ if (!output || !(output.data instanceof Float32Array)) {
+ throw new Error('Unexpected model output format');
+ }
+
+ const data = output.data as Float32Array;
+ const numDetections = output.dims[0];
+ const detections: DetectionOutput[] = [];
+
+ for (let i = 0; i < numDetections; i++) {
+ const offset = i * 6;
+ const [x, y, w, h, confidence, classIdx] = [
+ data[offset],
+ data[offset + 1],
+ data[offset + 2],
+ data[offset + 3],
+ data[offset + 4],
+ data[offset + 5]
+ ];
+
+ if (confidence > 0.3) { // threshold
+ detections.push({
+ bbox: [x, y, w, h],
+ confidence,
+ classIndex: Math.round(classIdx),
+ });
+ }
+ }
+ return detections;
+}
+
+export async function writeLabels(outputPath: string, detectionsByFrame: Map, classNames: Record) {
+ // Write labels in YOLO txt format per frame:
+ // class x_center y_center width height confidence
+ // normalized to [0, 1] relative to image size
+
+ await mkdir(outputPath, { recursive: true });
+ const labelDir = join(outputPath, 'labels');
+ await mkdir(labelDir, { recursive: true });
+
+ for (const [frameIndex, detections] of detectionsByFrame.entries()) {
+ const lines: string[] = [];
+ for (const det of detections) {
+ const className = classNames[det.classIndex.toString()] ?? 'unknown';
+ // Convert bbox to normalized YOLO format (x_center, y_center, width, height) in [0..1]
+ // Assuming input image size 640x640
+ const [x, y, w, h] = det.bbox;
+ const x_center = (x + w / 2) / 640;
+ const y_center = (y + h / 2) / 640;
+ const w_norm = w / 640;
+ const h_norm = h / 640;
+ lines.push(`${det.classIndex} ${x_center.toFixed(6)} ${y_center.toFixed(6)} ${w_norm.toFixed(6)} ${h_norm.toFixed(6)} ${det.confidence.toFixed(6)}`);
+ }
+ await writeFile(join(labelDir, `${frameIndex}.txt`), lines.join('\n'));
+ }
+}
+
+export async function loadDataYaml(yamlPath: string): Promise {
+ const yamlContent = await readFile(yamlPath, 'utf8');
+ return yaml.load(yamlContent) as DataYaml;
+}
+
+export async function vibeuiInference(
+ modelPath: string,
+ videoFilePath: string
+): Promise {
+
+ if (!modelPath) throw new Error('missing modelPath, arg0');
+ if (!videoFilePath) throw new Error('missing videoFilePath, arg1');
+
+ // Load ONNX model
+ console.log(`Loading ONNX model from ${modelPath}`);
+
+ const session = await ort.InferenceSession.create(modelPath);
+
+ // Prepare output dir
+ // const videoExt = extname(videoFilePath);
+ // const videoName = basename(videoFilePath, videoExt);
+ // const uniqueName = `${videoName}-${nanoid()}`;
+ const outputPath = join(env.CACHE_ROOT, nanoid());
+
+
+ // Extract frames
+ const framesDir = join(outputPath, 'frames');
+ mkdirSync(framesDir, { recursive: true })
+ console.log(`Extracting video frames from ${videoFilePath} to ${framesDir}...`);
+ await extractFrames(videoFilePath, framesDir);
+
+ // Load class names from data.yaml
+ const dataYaml = await loadDataYaml(join(env.VIBEUI_DIR, 'data.yaml'));
+ const classNames = dataYaml.names;
+
+ // Read all frames and run inference
+ const frameFiles = (await readdir(framesDir))
+ .filter(f => f.endsWith('.jpg'))
+ .sort();
+
+ console.log(`frameFiles=${JSON.stringify(frameFiles)}`)
+ const detectionsByFrame = new Map();
+
+ if (frameFiles.length === 0) throw new Error(`No frames extracted! This is likely a bug.`);
+
+ console.log(`Running inference on ${frameFiles.length} frames...`);
+
+ for (const file of frameFiles) {
+ const frameIndex = parseInt(file.match(/(\d+)\.jpg$/)?.[1] ?? '0', 10);
+ const imagePath = join(framesDir, file);
+ const inputTensor = await preprocessImage(imagePath);
+ const detections = await runInferenceOnFrame(session, inputTensor);
+ detectionsByFrame.set(frameIndex, detections);
+ }
+
+ // Write YOLO format label txt files
+ await writeLabels(outputPath, detectionsByFrame, classNames);
+
+ // Optionally cleanup frames dir to save space:
+ // await rmSync(framesDir, { recursive: true, force: true });
+
+ return outputPath;
+}
+
+
+
+
+export async function ffprobe(videoPath: string): Promise<{ fps: number; frames: number }> {
+ const spawn = await getNanoSpawn()
+ const { stdout } = await spawn('ffprobe', [
+ '-v', 'error',
+ '-select_streams', 'v:0',
+ '-count_frames',
+ '-show_entries', 'stream=nb_read_frames,r_frame_rate',
+ '-of', 'default=nokey=1:noprint_wrappers=1',
+ videoPath,
+ ])
+
+ const [frameRateStr, frameCountStr] = stdout.trim().split('\n')
+ const [num, denom] = frameRateStr.trim().split('/').map(Number)
+ const fps = num / denom
+ const frames = parseInt(frameCountStr.trim(), 10)
+
+ return { fps, frames }
+}
+
+export async function loadVideoMetadata(videoPath: string) {
+ const { fps, frames: totalFrames } = await ffprobe(videoPath);
+ console.log(`Video metadata: fps=${fps}, frames=${totalFrames}`);
+ return { fps, totalFrames };
+}
+
+export async function processLabelFiles(labelDir: string, data: DataYaml): Promise {
+ const labelFiles = (await readdir(labelDir)).filter(file => file.endsWith('.txt'));
+ const detections: Map = new Map();
+ const names = data.names;
+
+ for (const file of labelFiles) {
+ const match = file.match(/(\d+)\.txt$/);
+ if (!match) {
+ console.log(`Skipping invalid filename: ${file}`);
+ continue;
+ }
+ const frameIndex = parseInt(match[1], 10);
+ if (isNaN(frameIndex)) {
+ console.log(`Skipping invalid frame index from filename: ${file}`);
+ continue;
+ }
+
+ const content = await readFile(join(labelDir, file), 'utf8');
+ const lines = content.trim().split('\n');
+ const frameDetections: Detection[] = [];
+ let maxConfidence = 0;
+ let selectedClassIndex = -1;
+
+ for (const line of lines) {
+ const parts = line.trim().split(/\s+/);
+ if (parts.length < 6) continue;
+
+ const classIndex = parseInt(parts[0], 10);
+ const confidence = parseFloat(parts[5]);
+ if (isNaN(classIndex) || isNaN(confidence)) continue;
+
+ if (confidence >= 0.7 && confidence > maxConfidence) {
+ maxConfidence = confidence;
+ selectedClassIndex = classIndex;
+ }
+ }
+
+ if (maxConfidence > 0) {
+ const className = (data.names as Record)[selectedClassIndex.toString()];
+ if (className) {
+ frameDetections.push({ startFrame: frameIndex, endFrame: frameIndex, className });
+ }
+ }
+
+ if (frameDetections.length > 0) {
+ detections.set(frameIndex, frameDetections);
+ }
+ }
+
+ // Merge overlapping detections into continuous segments
+ const detectionSegments: Detection[] = [];
+ let currentDetection: Detection | null = null;
+
+ for (const [frameIndex, frameDetections] of detections.entries()) {
+ for (const detection of frameDetections) {
+ if (!currentDetection || currentDetection.className !== detection.className) {
+ if (currentDetection) detectionSegments.push(currentDetection);
+ currentDetection = { ...detection, endFrame: frameIndex };
+ } else {
+ currentDetection.endFrame = frameIndex;
+ }
+ }
+ }
+ if (currentDetection) detectionSegments.push(currentDetection);
+
+ return detectionSegments;
+}
diff --git a/services/our/src/views/uploads/new.hbs b/services/our/src/views/uploads/new.hbs
index 918b0f6..dfd1192 100644
--- a/services/our/src/views/uploads/new.hbs
+++ b/services/our/src/views/uploads/new.hbs
@@ -12,9 +12,9 @@
Upload Lewdtuber VODs here.
- Instructions: Enter the metadata first. Vtuber name and original VOD date is required. Then
+
Instructions: Enter the metadata first. Vtuber name and original stream date is required. Then
upload the vod
- segment(s). Wait for the vod segment(s) to fully upload before you press the submit button.
+ segment(s). Wait for the vod segment(s) to fully upload before pressing the submit button.